📄 iop.asm
字号:
;; $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 + -