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

📄 iop.asm

📁 代码有点长,需细心阅读,仅供影音视听类产品的开发人员参考
💻 ASM
📖 第 1 页 / 共 5 页
字号:
;;    $200 ~ 240  -> cache ram for $200 ~ $ffff                             ;;
;;    design $100 ~ $105 for each vector to reduce code size                ;;
;;**************************************************************************;;
SRAM_PG0:       .section
vIrq:
             pha                   ;;interrupt service routine
                               
             lda     IntFlag
             sta     IntFlag       ;;clear intr flag
                                   ;; now only timerB enable

.ifnz IR_PHILIPS
             lda     rIrCountH
             cmp     #22
             bcs     Ircheckdata
.endif

             inc     rIrCountH
Ircheckdata:
             dec     time1ms
             bne     Istime100us
             lda     #10
             sta     time1ms
             smb     0,IOP_DATA5_H

Istime100us:
             dec     time10ms
             bne     Not10ms
             lda     #100
             sta     time10ms
             smb      1,IOP_DATA5_H

.ifnz SUPPORT_DSA
             inc     rDsatimeout
             bbr     2,rDsatimeout,Dsanotimeout
             stz     rDsatimeout
             stz     DSA_PORT_CFG
             stz     rDsastatus
             stz     rDsastate
Dsanotimeout:
.endif


.ifnz SUPPORT_QCODE

      ;;     inc     rQcodetimer
.endif

             lda     rIrIncount
             beq     Not10ms
             dec     rIrIncount
Not10ms:
             .ifnz  SUPPORT_VFD
               .ifnz  SUPPORT_QCODE
                 .ifnz  SUPPORT_QCODE_PTOW
                 .else
             bbs     1,rQcodestatus,Vfdscan
                 .endif
               .endif
             lda     rVfdscantime
             beq     Vfdscan
             dec     rVfdscantime
Vfdscan:
             .endif

             .ifnz  SUPPORT_LCD
             lda     rLcdscantime
             beq     Lcdscan
             dec     rLcdscantime
Lcdscan:
             .endif
             .ifnz SUPPORT_SPL10
             lda	spl10_scan_time
             beq	Spl10scan
             dec	spl10_scan_time
Spl10scan:
			.endif             


           ;  rmb     VFDB_CLK,VFD_PORT
             pla
vNmi:
             rti

;;**************************************************************************;;
;; sdram write back                                                         ;;
;;**************************************************************************;;
Flashinout:
            pha
            lda     $1000
            lda     $1040
            pla
            rts


.ifnz IR_PHILIPS 
;;**************************************************************************;;
;; Repeat IR command and data                                               ;;
;;**************************************************************************;;
Irservice:
             lda     IR_PORT
             and     #IR_IN
             sta     rIrNewStatus
             eor     rIrOldStatus 
             beq     Ircheckindata
             lda     rIrNewStatus
             sta     rIrOldStatus
             lda     rIrCountH
             cmp     #22
             bcc     Irstartcount
             lda     #1
             sta     rIrReceiver
             sta     rIrReceiver+1
             lda     #15
             sta     rIrLoopcount
Irstartcount:
             jsr     IrdealHtoL
Irclearcount:
             stz     rIrCountH

Ircheckindata:

             lda     rIrCountH
             cmp     #21
             bne     Irrteurn
             lda     rIrLoopcount
             cmp     #1
             bne     Irrteurn 
             dec     rIrLoopcount
             lda     rIrReceiver
             sta     IOP_DATA6_L   ;;save to IOP_DATA6_L
             lda     rIrReceiver+1
             eor     IOP_DATA6_H
             and     #%00001000
             bne     Irisnotzero
             lda     IOP_DATA6_H
             bne     Irisrepeat
Irisnotzero:
             lda     rIrReceiver+1
             and     #%00111111
             sta     IOP_DATA6_H   ;;save to IOP_DATA6_L
             lda     rIrIncount
             bne     Irisrepeat
             smb     IR_RD,IOP_DATA5_H
             rmb     IR_RP,IOP_DATA5_H
             bra     Irsetrepeat
Irisrepeat:
             smb      IR_RP,IOP_DATA5_H
             rmb      IR_RD,IOP_DATA5_H
Irsetrepeat:
             lda     #14
             sta     rIrIncount
Irrteurn:
             rts

;;**************************************************************************;;
SRAM_PG1:       .section        ;;PAGE1 start                               ;;
;;**************************************************************************;;
;;**************************************************************************;;
;; Deal IR command                                                          ;;
;;**************************************************************************;;
IrdealHtoL:
             lda     rIrLoopcount
             beq     Irnotdata
             lda     rIrCountH
             cmp     #15
             bcs     IrHtoL0
             cmp     #13
             bcs     Iriserror
             cmp     #5
             bcs     IrHtoL1
Iriserror:
             lda     #ffH
             sta     rIrLoopcount
             rts
IrHtoL0:
             sta     rIrState
             clc
             bbs     0,rIrReceiver,Irkeepstatus 
             sec
Irkeepstatus:
             rol     rIrReceiver
             rol     rIrReceiver+1
Ircollectexit:
             dec     rIrLoopcount 
             rts
IrHtoL1:
             lda     rIrState
             bne     Irclearstate
             clc
             bbr     0,rIrReceiver,Irsetdata1 
             sec
Irsetdata1:
             rol     rIrReceiver
             rol     rIrReceiver+1
             inc     rIrState
             bra     Ircollectexit
Irclearstate:
             stz     rIrState
Irnotdata:
             rts
.endif

.ifnz  IR_NEC
;;**************************************************************************;;
;; Read IR command                                                          ;;
;;**************************************************************************;;
Irservice:
             lda     IR_PORT
             and     #IR_IN
             sta     rIrNewStatus
             eor     rIrOldStatus 
             beq     Irkeepstatus     
             lda     rIrNewStatus
             sta     rIrOldStatus
             beq     Irportislow
             lda     rIrCountH
             sta     rIrCountLbuf
             bra     Irclearcount
Irportislow:
             lda     rIrLoopcount         ;rIrHeadStatus
             beq     Irnothead
             jsr     Irdatacollect
             bra     Irclearcount
Irnothead:
             lda     rIrCountLbuf
             cmp     #80
             bcc     Irclearcount
             cmp     #98
             bcs     Irclearcount
             lda     rIrCountH       
             cmp     #50
             bcs     Irclearcount
             cmp     #20
             bcc     Irclearcount
             cmp     #35
             bcc     Irisrepeat
             cmp     #40
             bcc     Irclearcount
             lda     #32
             sta     rIrLoopcount
             stz     rIrCountLbuf
             bra     Irclearcount
Irisrepeat:
             lda     rIrIncount
             beq     Irclearcount
             smb      IR_RP,IOP_DATA5_H
             rmb      IR_RD,IOP_DATA5_H
             lda     #14
             sta     rIrIncount
Irclearcount:
             stz     rIrCountH
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    ;;disable intrupt
            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:
			cli
            rts
  .else  ;;upper is SUPPORT_QCODE_PTOW
;;**************************************************************************;;
;; Collect  Qcode data   qqqq                                               ;;
;;**************************************************************************;;
Qcodeservice:
            bbs      Q_SHOCK,QCODE_SHOCK_PORT,Qcodeshock
            stz      rQcodetimer
            ;;bra $
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

⌨️ 快捷键说明

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