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

📄 iop.asm

📁 C语言编写的监控中心终端程序。基于GPRS上传收发数据功能
💻 ASM
📖 第 1 页 / 共 5 页
字号:
Irkeepstatus:
             rts

;;**************************************************************************;;
SRAM_PG1:       .section        ;;PAGE1 start                               ;;
;;**************************************************************************;;
;;**************************************************************************;;
;; Collect  IR command and data                                             ;;
;;**************************************************************************;;
Irdatacollect:
             lda     rIrCountLbuf
             cmp     #3
             bcc     Irdataerr
             cmp     #11
             bcs     Irdataerr
             lda     rIrCountH
             cmp     #3
             bcc     Irdataerr   
             cmp     #22
             bcs     Irdataerr   
             cmp     #11
             ror     rIrReceiver
             ror     rIrReceiver+1
             ror     rIrReceiver+2
             ror     rIrReceiver+3
Irdataset:
             dec     rIrLoopcount
             bne     Irdatareturn

             lda     rIrReceiver+1
             eor     rIrReceiver
             cmp     #FFH
             bne     Irdataerr
             lda     rIrReceiver+3
             sta     IOP_DATA6_H   ;;save to IOP_DATA5_L
             lda     rIrReceiver+1
             sta     IOP_DATA6_L   ;;save to IOP_DATA5_L
             smb      IR_RD,IOP_DATA5_H
             rmb      IR_RP,IOP_DATA5_H

             lda     #14
             sta     rIrIncount
             rts
Irdataerr:
             stz     rIrLoopcount
Irdatareturn:
             rts
.endif

.ifnz SUPPORT_QCODE
.ifnz  SUPPORT_QCODE_PTOW
Qcodeservice:
            sei
            bbs      Q_SCOR,QCODE_SCOR_PORT,Qcodereadstart
            inc      rQcodecountL
            bbs      1,rQcodebitcount,Qcodereturn
            sec
            rol      rQcodebitcount
            bbr      0,rQcodebitcount,Qcodereturn
            lda      rQcodecountL
            adc      #8
            rol      a
            cmp      rQcodecountH
            bcs      Qcodenotsync
            lda      rQcodecount
            cmp      #96
            bne      Qcodeerror
            smb      3,IOP_DATA5_H    ;;qcode read busy
            ldx      #0
xxyy:
            lda      rQcodedata,x
            sta      QCODE_BUFFER,x
            inx
            cpx      #12
            bne      xxyy
            jsr      Flashinout
            smb      2,IOP_DATA5_H
            rmb      3,IOP_DATA5_H    ;;qcode read free
Qcodeerror:
            ;stz      rQcodebitcount
            stz      rQcodecount

Qcodenotsync:
            smb      Q_SQCK,QCODE_SQCK_PORT
            cli
            stz      rQcodecountL
            stz      rQcodecountH
            rts

Qcodereadstart:
            cli
            inc      rQcodecountH
            bbr      1,rQcodebitcount,Qcodereturn
            stz      rQcodebitcount
            lda      rQcodecount
            cmp      #96
            bcs      Qcodereturn1
            lda      rQcodecount
            lsr      a
            lsr      a
            lsr      a
            tax    
Qcodeaddbyte:
            ;ldx      rQcodebitcount
            clc
            bbr      Q_SQDT,QCODE_SQDT_PORT,Qcodecrcnotok
            sec
Qcodecrcnotok:
            rol      rQcodedata,x
            inc      rQcodecount
Qcodereturn1:
            rmb      Q_SQCK,QCODE_SQCK_PORT
Qcodereturn:
            rts
.else
;;**************************************************************************;;
;; Collect  Qcode data   qqqq                                               ;;
;;**************************************************************************;;
Qcodeservice:
            bbs      Q_SHOCK,QCODE_SHOCK_PORT,Qcodeshock
            stz      rQcodetimer
Qcodeshock:
            inc      rQcodetimer
            bbr      7,rQcodetimer,Qcodenotshock
            smb      7,IOP_DATA4_L         ;;shock happen
Qcodenotshock:

            bbr      Q_SCOR,QCODE_SCOR_PORT,Qcodereadstart
            stz      rQcodestatus
            smb      0,rQcodestatus
            smb      3,IOP_DATA5_H    ;;qcode read busy
            rts
Qcodereadstart:
            bbr       0,rQcodestatus,Qcodereturn
Qcode1:
            bbs      1,rQcodestatus,Qcodereadstart1
            ;stz      rQcodecrc
            rmb      4,IOP_DATA5_H 
            bbr      Q_SQDT,QCODE_SQDT_PORT,Qcodecrcnotok
            ;smb      2,rQcodestatus

            smb      4,IOP_DATA5_H

            ;smb      0,rQcodecrc
Qcodecrcnotok:
            smb      1,rQcodestatus
            lda      #160
            sta      rQcodecount
            ldx      #0
            lda      #8
            sta      rQcodebitcount
Qcodereadstart1:
            bbr      0,rQcodecount,Qcodeclklow
            clc
            bbr      Q_SQDT,QCODE_SQDT_PORT,Qcodedataiszero
            sec
Qcodedataiszero:
            ror     rQcodedata,x
            ;ror      QCODE_BUFFER,x     ;IOP_DATA0_L,x
            dec      rQcodebitcount
            bne      Qcodenochange
            lda      #8
            sta      rQcodebitcount
            inx
Qcodenochange:
            smb      Q_SQCK,QCODE_SQCK_PORT
            bra      Qcodetestok
Qcodeclklow:
            rmb      Q_SQCK,QCODE_SQCK_PORT
Qcodetestok:
            dec      rQcodecount
            bne      Qcodereturn
Qcodereadok:
           ; stz      rQcodestate
             bbr      4,IOP_DATA5_H,Qcodereturn1
           ; bbr      0,rQcodecrc,Qcodereturn1
           ; bbr      2,rQcodestatus,Qcodereturn1
            ldx      #0
xxyy:
            lda      rQcodedata,x
            sta      QCODE_BUFFER,x
            inx
            cpx      #10
            bne      xxyy
           
            jsr      Flashinout
            smb      2,IOP_DATA5_H
Qcodereturn1:
            stz      rQcodestatus
            rmb      3,IOP_DATA5_H    ;;qcode read free
Qcodereturn:
            rts
.endif
.else
;;**************************************************************************;;
;; Send one byte VFD command or data    ssdd                                ;;
;;**************************************************************************;;
Vfdsendonebyte:
             lda     rVfdsendcount
             beq     Vfdsendreturn
             dec     rVfdsendcount
             bbs     0,rVfdsendcount,Vfdclklow

             lda     rVfdstatus
             bne     Vfdclkhigh

             lda     rVfdloopcount
             cmp     #1
             bne     Vfdclkhigh

             ;lda     IOP_DATA5_H
             ;and     #%00100000
             ;bne     Vfdclkhigh
             bbs      5,rGameflag,Vfdclkhigh
             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     rGamepad2_data 
             ;ror     IOP_DATA7_L  ;GAME_PAD2_BASE
             lda     rVfdsendcount
             bne     Vfdclkhigh
             jsr     Flashinout

             smb     5,rGameflag
             lda     rGamepad1_data
             sta     IOP_DATA7_H
             lda     rGamepad2_data
             sta     IOP_DATA7_L
Vfdclkhigh:
             .ifnz SUPPORT_DEMO
             ;smb     VFDB_CLK,VFD_PORT

             rmb     VFDB_CLK,Vfd_init1
             lda     Vfd_init1
             sta     VFD_PORT_CFG          ;;set VFD_CLK output

             .else
             smb     VFDB_CLK,VFD_PORT
             .endif

             ;rts
             bra     Vfdsendreturn
Vfdclklow:
             .ifnz SUPPORT_DEMO
             smb     VFDB_CLK,Vfd_init1
             lda     Vfd_init1
             sta     VFD_PORT_CFG          ;;set VFD_CLK output
             .endif

             rmb     VFDB_CLK,VFD_PORT
             ror     rVfddata
             bcc     Vfddatalow
             .ifnz SUPPORT_DEMO
             ;smb     VFDB_DAT,VFD_PORT
             rmb     VFDB_DAT,Vfd_init1
             lda     Vfd_init1
             sta     VFD_PORT_CFG          ;;set VFD_DAT input
             .else
             smb     VFDB_DAT,VFD_PORT
             .endif

             bra     Vfdsendreturn
             ;rts
Vfddatalow:
             .ifnz SUPPORT_DEMO
             smb     VFDB_DAT,Vfd_init1
             lda     Vfd_init1
             sta     VFD_PORT_CFG          ;;set VFD_DAT output
             .endif

             rmb     VFDB_DAT,VFD_PORT
Vfdsendreturn:
             lda     rVfdsendcount
             rts
.endif

;;**************************************************************************;;
;; main loop                                                                ;;
;;**************************************************************************;;
lToMainLoop:
            .ifnz SUPPORT_QCODE
Enableqcode:
            jsr     Qcodeservice
            .endif

Notserviceqcode:
            jsr     Irservice
           
            .ifnz SUPPORT_QCODE
            .ifnz  SUPPORT_QCODE_PTOW
            .else
            bbs      1,rQcodestatus,lToMainLoop
            .endif
            .endif
           
            .ifnz SUPPORT_LCD
            jsr     Lcdwservice
            ;bra     lToMainLoop
            .endif
            .ifnz SUPPORT_SPL10
            lda spl10_scan_time
            bne scan_spl10_interval
			jsr do_spl10_service
            bcc scan_spl10_interval
            lda #70
            sta spl10_scan_time
scan_spl10_interval:            
            ;bra		lToMainLoop
            .endif

            .ifnz SUPPORT_VFD
            lda     rVfdstatus           ;;if high  vfd can write
            bne     Vfdreadkey 
            jsr     Vfdwservice
Vfdreadkey:
            lda     rVfdscantime
            bne     Vfdserviceend           ;lToMainLoop
            lda     rVfdstate
            cmp     #2
            bcs     Vfdreadswitch
            jsr     Vfdrservice
            bra     Vfdserviceend    ;lToMainLoop
Vfdreadswitch:
            jsr     Vfdswservice
Vfdserviceend:
            .endif
            
            .ifnz  SUPPORT_DSA
           ; bbr    5,IOP_DATA4_H,Dsadoing
           ; rmb    5,IOP_DATA4_H
           ; stz    DSA_PORT_CFG
           ; stz    rDsastatus
           ; stz    rDsastate
Dsadoing:
            jsr    Dsaservice
            .endif

            bbs     5,IOP_DATA5_H,lToMainLoop
            smb     5,IOP_DATA5_H
            jsr     SettimerB
            bra     lToMainLoop


.ifnz SUPPORT_VFD
;;**************************************************************************;;
;; VFD get key/switch code subroute                                                   ;;
;;**************************************************************************;;
Vfdgetcode:
            bbr      7,rVfdkeydata,Vfdexitrepeat
            lda      rVfddataold
            bne      Vfdisrepeat
            lda      rVfdkeydata
            and      #%00111111
            cmp      rVfddataold
            beq      Vfdisrepeat
            sta      rVfddataold
            and      #!VFD_REPEAT
            ora      #VFD_READY           ;;set ready flag
            sta      IOP_DATA5_L
            rts
Vfdisrepeat:
            lda      rVfdreptime
            cmp      #11                 ;;11*10=110ms for vfd key repeat
            bcc      Vfdexitrepeat
            stz      rVfdreptime
            lda      rVfddataold        
            ora      #(VFD_REPEAT.or.VFD_READY)           ;;clear repeat flag
            ;ora      #VFD_READY           ;;set ready flag
            sta      IOP_DATA5_L
Vfdexitrepeat:
            rts


.endif

.ifnz SUPPORT_SPL10
do_spl10_sync:
			bbs  0,spl10_sync_status,sn_wait_ack_low
			smb  VFDB_DAT,Vfd_init1
			lda  Vfd_init1
			sta  VFD_PORT_CFG
			rmb  VFDB_DAT,VFD_PORT
			smb  0,spl10_sync_status              
			bra  sync_exit
sn_wait_ack_low:              
			bbs 1,spl10_sync_status,sn_wait_ack_high
			bbr VFDB_CLK,VFD_PORT,ack_is_low
			bra sync_exit
ack_is_low:   
			smb  1,spl10_sync_status
			rmb  VFDB_DAT,Vfd_init1
			lda  Vfd_init1
			sta  VFD_PORT_CFG              
			bra sync_exit
sn_wait_ack_high:              
			bbs VFDB_CLK,VFD_PORT,sn_ack_is_high
			bra sync_exit
sn_ack_is_high: 
			stz spl10_sync_status
             sec
			rts
sync_exit:

⌨️ 快捷键说明

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