📄 ir_m50560.asm
字号:
.ifnz IR_M50560
inc MarkCounter
inc SpaceCounter
inc SyncCounter
inc Bit01Counter
inc Low4msCounter
lda IrStateFlag
cmp #IR_MARK_STATE
beq PreProcessMark
cmp #IR_SPACE_STATE
beq PreProcessSpace
cmp #IR_SYNC_STATE
beq PreProcessSync
cmp #IR_BIT01_STATE
beq PreProcessBit01
cmp #IR_4MSLOW_STATE
beq PreProcess4MsLow
cmp #BEGIN_FROM_HEAD
beq StartProgram
PreProcessMark:
jmp ProcesSmark
PreProcessSpace:
jmp ProcessSpace
PreProcessSync:
jmp ProcessSync
PreProcessBit01:
jmp ProcessBit01
PreProcess4MsLow:
jmp Process4MsLow
StartProgram:
lda IR_PORT
and #IR_IN
bne DirectExit
lda #0
sta MarkCounter
lda #IR_MARK_STATE
sta IrStateFlag
DirectExit:
jmp EndExit
;;-----------------------------------------------
SRAM_PG1: .section ;;PAGE1 start
;;-----------------------------------------------
ProcesSmark:
lda IR_PORT
and #IR_IN
beq Exit1
lda MarkCounter
cmp #65 ;;73
bcc LongJmp1
lda #IR_SPACE_STATE
sta IrStateFlag
lda #0
sta SpaceCounter
Exit1:
jmp EndExit
LongJmp1:
jmp FromHeadStart
;------------------------------------------------------------------
ProcessSpace:
lda IR_PORT
and #IR_IN
bne Exit2
lda SpaceCounter
cmp #33 ;;36
bcc LongJmp2
lda #IR_SYNC_STATE
sta IrStateFlag
lda #0
sta SyncCounter
Exit2:
jmp EndExit
LongJmp2:
jmp FromHeadStart
;------------------------------------------------------------------
ProcessSync:
lda IR_PORT
and #IR_IN
beq Exit3
lda SyncCounter
cmp #2 ;;4
bcc FromHeadStart
lda BitsCounter
cmp #8
bne GoNext2
lda Flag4Ms
cmp #1
beq GoNext2
lda #IR_4MSLOW_STATE
sta IrStateFlag
lda #0
sta Low4msCounter
bra Exit3
GoNext2:
stz Flag4Ms
lda #IR_BIT01_STATE
sta IrStateFlag
lda #0
sta Bit01Counter
Exit3:
jmp EndExit
;------------------------------------------------------------------
ProcessBit01:
lda IR_PORT
and #IR_IN
bne Exit4
lda Bit01Counter
cmp #11 ;;14
bcc CheckNext
lda #1
sta BitIs1
inc BitsCounter
lda #IR_SYNC_STATE
sta IrStateFlag
lda #0
sta SyncCounter
bra Exit4
CheckNext:
lda Bit01Counter
cmp #4 ;;5
bcc FromHeadStart
lda #1
sta BitIs0
inc BitsCounter
lda #IR_SYNC_STATE
sta IrStateFlag
lda #0
sta SyncCounter
Exit4:
jmp PreIrqExit
;------------------------------------------------------------------
Process4MsLow:
lda #1
sta Flag4Ms
lda IR_PORT
and #IR_IN
bne Exit5
lda Low4msCounter
cmp #30 ;;36
bcc FromHeadStart
lda #IR_SYNC_STATE
sta IrStateFlag
lda #0
sta SyncCounter
Exit5:
jmp EndExit
;------------------------------------------------------------------
FromHeadStart:
lda #BEGIN_FROM_HEAD
sta IrStateFlag
stz BitsCounter
jmp EndExit
;------------------------------------------------------------------
PreIrqExit:
lda BitIs0
cmp #1
bne CheckNextBit
lda #0
sta BitIs0
clc
bra ReceiveData
CheckNextBit:
lda BitIs1
cmp #1
bne EndExit
lda #0
sta BitIs1
sec
ReceiveData:
rol DataCode
rol CustomCode
lda BitsCounter
cmp #16
beq SendToRisc
bra EndExit
;------------------------------------------------------------------
SendToRisc:
inc RepTimes
lda RepTimes
cmp #3
bne next
stz RepTimes
lda IOP_DATA5_H
ora #$80
sta IOP_DATA5_H
lda DataCode
eor #%11111111
sta IOP_DATA5_L
lda CustomCode
sta IOP_DATA6_L
next:
stz DataCode
stz CustomCode
stz BitsCounter
lda #BEGIN_FROM_HEAD
sta IrStateFlag
EndExit:
jmp lIrqIrExit
.endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -