📄 ir_tdp101.asm
字号:
.ifnz IR_TDP101
;;---------------------------------------------------------------------------
SRAM_PG1: .section ;;PAGE1 start
;;---------------------------------------------------------------------------
lda IrStateFlag
cmp #STATE_IDLE
beq F_idle_state
cmp #STATE_PRE_CODE_1
beq F_pre_code_1
cmp #STATE_PRE_CODE_2
beq F_pre_code_2
cmp #STATE_PRE_CODE_3
beq F_pre_code_3
cmp #STATE_PRE_CODE_4
beq Pre_F_pre_code_4
cmp #STATE_BIT_LOW
beq Pre_F_bit_low
cmp #STATE_BIT_HIGH
beq Pre_F_bit_high
bra F_idle_state
;-----------------------------------------------------------------------------
Pre_F_pre_code_4:
jmp F_pre_code_4
Pre_F_bit_low:
jmp F_bit_low
Pre_F_bit_high:
jmp F_bit_high
;-----------------------------------------------------------------------------
F_idle_state:
lda IR_PORT
and #IR_IN
bne Exit_idle_state
stz IO_low_counter
lda #STATE_PRE_CODE_1
sta IrStateFlag
Exit_idle_state:
jmp F_Exit_IR_Interrupt
;-----------------------------------------------------------------------------
F_pre_code_1:
jsr F_Check_low_irport
beq Exit_pre_code_1_state
lda Separate_flag
cmp #1
bne Normal_pro_pre_code_1
inc Separate_counter
lda IO_low_counter
cmp #LEN_PRE_CODE_1
bcc Pre_1_F_Error_Handle
jsr F_Enter_PRE_CODE_4
jmp F_Exit_IR_Interrupt
Normal_pro_pre_code_1:
lda IO_low_counter
cmp #LEN_PRE_CODE_1
bcc Pre_1_F_Error_Handle
stz IO_high_counter
lda #STATE_PRE_CODE_2
sta IrStateFlag
Exit_pre_code_1_state:
jmp F_Exit_IR_Interrupt
;-----------------------------------------------------------------------------
F_pre_code_2:
jsr F_Check_high_irport
bne Exit_pre_code_2_state
lda IO_high_counter
cmp #LEN_PRE_CODE_2
bcc Pre_1_F_Error_Handle
stz IO_low_counter
lda #STATE_PRE_CODE_3
sta IrStateFlag
Exit_pre_code_2_state:
jmp F_Exit_IR_Interrupt
;-----------------------------------------------------------------------------
Pre_1_F_Error_Handle:
jmp F_Error_Handle
;-----------------------------------------------------------------------------
F_pre_code_3:
jsr F_Check_low_irport
beq Exit_pre_code_3_state
lda IO_low_counter
cmp #LEN_PRE_CODE_3
bcc Pre_1_F_Error_Handle
jsr F_Enter_PRE_CODE_4
Exit_pre_code_3_state:
jmp F_Exit_IR_Interrupt
;-----------------------------------------------------------------------------
F_pre_code_4:
jsr F_Check_high_irport
bne Exit_pre_code_4_state
lda Separate_flag
cmp #1
bne Normal_pro_pre_code_4
inc Separate_counter
lda IO_high_counter
cmp #LEN_PRE_CODE_4
bcc Pre_F_Error_Handle
lda Separate_counter
cmp #4
bne Con_In_Separate
stz Separate_counter
stz Separate_flag
stz IO_low_counter
lda #STATE_BIT_LOW
sta IrStateFlag
jmp F_Exit_IR_Interrupt
Con_In_Separate:
stz IO_low_counter
lda #STATE_PRE_CODE_1
sta IrStateFlag
jmp F_Exit_IR_Interrupt
Normal_pro_pre_code_4:
lda IO_high_counter
cmp #LEN_PRE_CODE_4
bcs Enter_low_sync
cmp #LEN_REPEAT
bcs Enter_repeat
jmp Pre_F_Error_Handle
Enter_repeat:
inc Repeat_counter
lda IOP_DATA5_H
and #%00001111
eor Repeat_counter
cmp #0
bne Pre_F_Restart
stz Repeat_counter
lda IOP_DATA5_H
ora #%01000000
sta IOP_DATA5_H
jmp Send_code_and_data
Enter_low_sync:
stz IO_low_counter
lda #STATE_BIT_LOW
sta IrStateFlag
Exit_pre_code_4_state:
jmp F_Exit_IR_Interrupt
;-----------------------------------------------------------------------------
Pre_F_Restart:
jmp F_Restart
;-----------------------------------------------------------------------------
F_bit_low:
jsr F_Check_low_irport
beq Exit_low_sync_state
lda IO_low_counter
cmp #LEN_BIT_LOW
bcc Pre_F_Error_Handle
stz IO_high_counter
lda #STATE_BIT_HIGH
sta IrStateFlag
Exit_low_sync_state:
jmp F_Exit_IR_Interrupt
;-----------------------------------------------------------------------------
Pre_F_Error_Handle:
jmp F_Error_Handle
;-----------------------------------------------------------------------------
F_bit_high:
jsr F_Check_high_irport
bne Exit_bit_high_state
lda IO_high_counter
cmp #LEN_BIT_IS_1
bcs Bit_is_1
cmp #LEN_BIT_IS_0
bcs Bit_is_0
jmp F_Error_Handle
Bit_is_1:
sec
bra Make_data
Bit_is_0:
clc
Make_data:
rol IR_data
rol IR_data_reverse
rol Custom_code
rol Custom_code_reverse
inc Data_bit_counter
lda Data_bit_counter
cmp #32
beq Send_Data_To_RISC
cmp #16
beq Enter_separate_state
stz IO_low_counter
lda #STATE_BIT_LOW
sta IrStateFlag
jmp F_Exit_IR_Interrupt
Enter_separate_state:
lda #1
sta Separate_flag
stz IO_low_counter
lda #STATE_PRE_CODE_1
sta IrStateFlag
Exit_bit_high_state:
jmp F_Exit_IR_Interrupt
Send_Data_To_RISC:
stz Repeat_counter
lda Custom_code
eor Custom_code_reverse
cmp #$ff
beq Check_ir_data
jmp F_Error_Handle
Check_ir_data:
lda IR_data
eor IR_data_reverse
cmp #$ff
beq Send_code_and_data
jmp F_Error_Handle
Send_code_and_data:
lda IR_data
sta IOP_DATA5_L
lda Custom_code
sta IOP_DATA6_L
lda IOP_DATA5_H
ora #%10000000
sta IOP_DATA5_H
jmp F_Restart
;-----------------------------------------------------------------------------
F_Check_low_irport:
inc IO_low_counter
lda IR_PORT
and #IR_IN
rts
;-----------------------------------------------------------------------------
F_Check_high_irport:
inc IO_high_counter
lda IR_PORT
and #IR_IN
rts
;-----------------------------------------------------------------------------
F_Enter_PRE_CODE_4:
stz IO_high_counter
lda #STATE_PRE_CODE_4
sta IrStateFlag
rts
;-----------------------------------------------------------------------------
F_Error_Handle:
stz Data_bit_counter
stz Repeat_counter
stz Separate_flag
stz Separate_counter
F_Restart:
lda #STATE_IDLE
sta IrStateFlag
stz IO_high_counter
stz IO_low_counter
;-----------------------------------------------------------------------------
F_Exit_IR_Interrupt:
.endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -