⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iop.asm

📁 C语言编写的监控中心终端程序。基于GPRS上传收发数据功能
💻 ASM
📖 第 1 页 / 共 5 页
字号:
			bra read_exit
rd_set_stb_high:		
			bbs 2,read_byte_status,rd_wait_ack_high
			rmb  VFDB_STB,Vfd_init1
			lda  Vfd_init1
			sta  VFD_PORT_CFG						
			smb 2,read_byte_status
			bra read_exit 			
rd_wait_ack_high:			
			bbs VFDB_CLK,VFD_PORT,rd_next_bit
			bra read_exit
rd_next_bit:
			stz read_byte_status
			dec spl10_read_count
			beq read_byte_ok			
read_exit:			
			clc
			rts
read_byte_ok:            
			sec
			rts	
.endif			
.ifnz  SUPPORT_DSA
Dsaservice:          ;ssss
                       
             bbs     0,rDsastatus,Dsaiswrite       ;if status bit 0 is high
             bbs     7,IOP_DATA4_H,Dsanotsync      ;is read in ok,but not next
  
             bbs     5,rDsastate,Dsaread5          ;ack phase
             bbs     4,rDsastate,Dsaread4          ;ack phase
             bbs     3,rDsastate,Dsaread3
             bbs     2,rDsastate,Dsaread2
             bbs     1,rDsastate,Dsaread1
             bbs     0,rDsastate,Dsaread0

             bbs     DSAB_DAT,DSA_PORT,Dsanotsync
             stz     rDsatimeout

             lda     #DSA_ACK
             sta     DSA_PORT_CFG
             rmb     DSAB_ACK,DSA_PORT 
             smb     0,rDsastate                   ;sync phase
             rts
Dsanotsync:
             smb     0,rDsastatus                  ;write state
             rts
Dsaread0:
             bbr     DSAB_DAT,DSA_PORT,Dsanotsync1
             stz     DSA_PORT_CFG
             rol     rDsastate
             lda     #16
             sta     rDsaloopcount
Dsanotsync1:
             rts
Dsaread1:
             bbs     DSAB_STB,DSA_PORT,Dsatran2
             sec
             bbs     DSAB_DAT,DSA_PORT,Dsadatahigh
             clc
Dsadatahigh:
             rol     IOP_DATA2_L    ;rDsadata+1
             rol     IOP_DATA2_H    ;rDsadata
             lda     #DSA_ACK
             sta     DSA_PORT_CFG
             rmb     DSAB_ACK,DSA_PORT
Dsatran3:
             rol     rDsastate      ;  dsastate2
             rts
Dsaread2:
             bbr     DSAB_STB,DSA_PORT,Dsatran2
             stz     DSA_PORT_CFG
             dec     rDsaloopcount
             beq     Dsatran3          ;Dsatran3
          
Dsatran4:
             ror     rDsastate  
Dsatran2:
             rts
Dsaread3:

             stz     DSA_PORT_CFG
             bra     Dsatran3
Dsaread4:
             bbs     DSAB_ACK,DSA_PORT,Dsatran2
             lda     #DSA_STB
             sta     DSA_PORT_CFG
             rmb     DSAB_STB,DSA_PORT
             bra     Dsatran3
Dsaread5:
             bbr     DSAB_ACK,DSA_PORT,Dsatran2
             stz     DSA_PORT_CFG
             stz     rDsastate
             smb     7,IOP_DATA4_H
             rts
Dsaiswrite:
           
             bbr     6,IOP_DATA4_H,Dsatran12        ;when low is write ok
             bbs     5,rDsastate,Dsawrite5          ;ack phase
             bbs     4,rDsastate,Dsawrite4          ;ack phase
             bbs     3,rDsastate,Dsawrite3
             bbs     2,rDsastate,Dsawrite2
             bbs     1,rDsastate,Dsawrite1
             bbs     0,rDsastate,Dsawrite0

             stz     rDsatimeout

             lda     #DSA_DAT    
             sta     DSA_PORT_CFG
             rmb     DSAB_DAT,DSA_PORT

             bbs     DSAB_ACK,DSA_PORT,Dsatran10
           
             stz     DSA_PORT_CFG
             smb     0,rDsastate        ;dsawrite0

             rts
Dsawrite0:
             bbr     DSAB_ACK,DSA_PORT,Dsatran10
             rol     rDsastate          ;dsawrite1
             lda     #16
             sta     rDsaloopcount
Dsatran10:
             rts

Dsawrite1:            
             lda     #0
             bbr     7,IOP_DATA3_H,Dsasetdataplow
             sta     DSA_PORT_CFG
             bra     Dsadatasetok
Dsasetdataplow:
             ora     #DSA_DAT
             sta     DSA_PORT_CFG
             rmb     DSAB_DAT,DSA_PORT
Dsadatasetok:
             sta     DSA_PORT_CFG
             jsr     Flashinout
             ora     #DSA_STB
             sta     DSA_PORT_CFG
             rmb     DSAB_STB,DSA_PORT
Dsanextstate:
             rol     rDsastate     ;dsawrite2
             rts
Dsawrite2:
             bbs     DSAB_ACK,DSA_PORT,Dsatran10
             lda     #0
             bbs     7,IOP_DATA3_H,Dsasetdataphigh
             ora     #DSA_DAT
Dsasetdataphigh:
             sta     DSA_PORT_CFG
             rol     IOP_DATA3_L
             rol     IOP_DATA3_H  
             bra     Dsanextstate
Dsawrite3:
             bbr     DSAB_ACK,DSA_PORT,Dsatran10
                 
             dec     rDsaloopcount
             beq     Dsatran11
             ror     rDsastate     ;dsawrite2
             ror     rDsastate     ;dsawrite1
             rts
Dsatran11:
         
             lda     #DSA_ACK
             sta     DSA_PORT_CFG
             rmb     DSAB_ACK,DSA_PORT
          
             bra     Dsanextstate
             
Dsawrite4:
            
             bbs     DSAB_STB,DSA_PORT,Dsatran10
             stz     DSA_PORT_CFG
             ;smb     DSAB_ACK,DSA_PORT
           
             bra     Dsanextstate
Dsawrite5:
             
             bbr     DSAB_STB,DSA_PORT,Dsatran10
                         
             rmb     6,IOP_DATA4_H
            
Dsatran12:
             stz     rDsastatus
             stz     rDsastate  
             stz     DSA_PORT_CFG
             rts     ;kevin
             
.endif
.ifnz  SUPPORT_LCD
;;**************************************************************************;;
;; Lcd send byte                                                            ;;
;;**************************************************************************;;
Lcdsendbyte:
             lda     rLcdsendcount
             beq     Lcdsendreturn
             dec     rLcdsendcount
             bbs     0,rLcdsendcount,Lcdclklow

             lda     rLcdloopcount
             cmp     #2
             bne     Lcdclkhigh

             lda     rLcdgamecount
             beq     Lcdclkhigh  

            ; lda     IOP_DATA5_H
            ; and     #%00110000
            ; bne     Lcdclkhigh 
             lda      #(GAME_D1.or.GAME_D2)
             sta      GAME_PORT_CFG
             sta      GAME_PORT
             stz      GAME_PORT_CFG

             sec
             bbs     GAMEP_D1,GAME_PORT, Game1high
             clc
Game1high:
             ;ror     IOP_DATA7_H ;GAME_PAD1_BASE       
             ror rGamepad1_data
             sec
             bbs     GAMEP_D2,GAME_PORT, Game2high
             clc     
Game2high:
             ;ror     IOP_DATA7_L      ;GAME_PAD2_BASE 
             ror rGamepad2_data
             dec     rLcdgamecount
             bne     Lcdclkhigh
             jsr     Flashinout
             lda rGamepad1_data
             sta      IOP_DATA7_H
             lda  rGamepad2_data
             ;smb     0,rGameflag
             sta IOP_DATA7_L
             bra     Lcdclkhigh
Lcdclklow:
             .ifnz SUPPORT_DEMO
             ;.ifnz 0
             smb     VFDB_CLK,Vfd_init1
             lda     Vfd_init1
             sta     VFD_PORT_CFG          ;;set VFD_CLK output
.endif
             rmb     VFDB_CLK,VFD_PORT
             bbr     0,rLcdtemp,Lcdsend16
             ror     rLcdtemp
             ror     rLcddata+1             
             bcc     Lcddatalow
             bra     Lcddatahigh
Lcddatalow:
             .ifnz SUPPORT_DEMO
             ;.ifnz 0
             smb     VFDB_DAT,Vfd_init1
             lda     Vfd_init1
             sta     VFD_PORT_CFG          ;;set VFD_CLK output
             .endif
             rmb     VFDB_DAT,VFD_PORT
             rts
Lcdsend16:
             ror     rLcddata
             bcc     Lcddatalow
Lcddatahigh:
             .ifnz SUPPORT_DEMO
             ;.ifnz 0
             rmb     VFDB_DAT,Vfd_init1
             lda     Vfd_init1
             sta     VFD_PORT_CFG          ;;set VFD_CLK output
             .endif            
             rts
Lcdclkhigh:
             .ifnz SUPPORT_DEMO
             ;.ifnz 0
             rmb     VFDB_CLK,Vfd_init1
             lda     Vfd_init1
             sta     VFD_PORT_CFG          ;;set VFD_CLK output
             .endif
Lcdsendreturn:
             rts
.endif
             

.ifnz SUPPORT_QCODE
             nop
             nop
             nop
             nop
             nop
             nop
             nop
             nop
             nop
             nop
             nop
             nop
             nop
             nop
             nop
             nop
             nop
             nop
             nop
             nop
             nop
             nop
             nop
             nop
             nop
             nop
             nop
             nop
             nop
             nop
             nop
             nop
             nop
             nop
             nop
             nop
             nop
             nop
             nop
             nop
             nop
             nop
             nop
             nop
.else
             nop
             nop
             nop
             nop
             nop
             nop
             nop
             nop
             nop
.endif

;            .org     $220   ;((($+15)/16)*16+64)
;;**************************************************************************;;
;; VFD memory init                                                          ;;
;;**************************************************************************;;
.ifnz  0; SUPPORT_VFD
Vfdreset:
;            ldx     31
;Vfdloop:
;            stz     VFD_BUFFER_BASE,x
;            dex
;            bne     Vfdloop
;            lda     #02H
;            sta     VFD_BUFFER_BASE
;            lda     #8CH
;            sta     VFD_BUFFER_BASE+1
;            lda     #C0H
;            sta     VFD_BUFFER_BASE+2
;            lda     #0fH
;            sta     VFD_COUNT_BASE
            rts
.endif

.ifnz  SUPPORT_LCD
Vfdreset:
            ldx     31
Vfdloop:
            stz     VFD_BUFFER_BASE,x
            dex
            bne     Vfdloop
            ;lda     #0cH
            ;sta     VFD_BUFFER_BASE
            lda     #40H
            sta     VFD_BUFFER_BASE
            lda     #10H
            sta     VFD_BUFFER_BASE+1
            lda     #50H
            sta     VFD_BUFFER_BASE+2
            lda     #4aH
            sta     VFD_BUFFER_BASE+3
            lda     #60H
            sta     VFD_BUFFER_BASE+4
            lda     #02H
            sta     VFD_BUFFER_BASE+5
            lda     #22
            sta     VFD_COUNT_BASE
            rts
.endif

.ifnz  0 ;SUPPORT_VFD
        .org     (VFD_COUNT_BASE-$200-6)
ddata0      .EQUAL   0fH
ddata1      .EQUAL   02H
ddata2      .EQUAL   8cH
ddata3      .EQUAL   c0H
.endif

.ifnz  0; SUPPORT_LCD
        .org     (VFD_COUNT_BASE-$200-6)
ddata0      .EQUAL   16H
ddata1      .EQUAL   40H
ddata2      .EQUAL   10H
ddata3      .EQUAL   50H
ddata3      .EQUAL   4aH
ddata3      .EQUAL   60H
ddata3      .EQUAL   02H
.endif

;;**************************************************************************;;
;; vector   ;;$200                                                          ;;
;;**************************************************************************;;
Vector: .section                     
            DW      vReset
            DW      vNmi
            DW      vIrq

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -