170 lines
2.7 KiB
ArmAsm
170 lines
2.7 KiB
ArmAsm
;; #LAYOUT# STD * #TAKE
|
|
;; #LAYOUT# * KERNAL_0 #TAKE
|
|
;; #LAYOUT# * * #IGNORE
|
|
|
|
;
|
|
; Helper IEC routines to pull/release certain lines
|
|
;
|
|
; Order of operation is set for extra robustness, on non-emulated hardware
|
|
; lines might need few cycles to stabilize (released CLK = DATA considered valid),
|
|
; see page 10 of http://www.zimmers.net/anonftp/pub/cbm/programming/serial-bus.pdf
|
|
;
|
|
|
|
|
|
|
|
!ifdef CONFIG_IEC {
|
|
|
|
!ifndef HAS_OPCODES_65C02 {
|
|
|
|
|
|
iec_pull_atn_clk_release_data:
|
|
|
|
lda CIA2_PRA
|
|
ora #BIT_CIA2_PRA_ATN_OUT ; pull
|
|
sta CIA2_PRA
|
|
|
|
; FALLTROUGH
|
|
|
|
iec_pull_clk_release_data:
|
|
|
|
lda CIA2_PRA
|
|
ora #BIT_CIA2_PRA_CLK_OUT ; pull
|
|
sta CIA2_PRA
|
|
|
|
; FALLTROUGH
|
|
|
|
iec_pull_clk_release_data_1:
|
|
|
|
and #$FF - BIT_CIA2_PRA_DAT_OUT ; release
|
|
bne iec__pull_release_end ; branch always
|
|
|
|
iec_pull_clk_release_data_oneshot:
|
|
|
|
lda CIA2_PRA
|
|
ora #BIT_CIA2_PRA_CLK_OUT ; pull
|
|
bne iec_pull_clk_release_data_1 ; branch always
|
|
|
|
iec_release_atn_clk_data:
|
|
|
|
lda CIA2_PRA
|
|
and #$FF - BIT_CIA2_PRA_ATN_OUT ; release
|
|
sta CIA2_PRA
|
|
|
|
; FALLTROUGH
|
|
|
|
iec_release_clk_data:
|
|
|
|
lda CIA2_PRA
|
|
and #$FF - BIT_CIA2_PRA_DAT_OUT ; release
|
|
sta CIA2_PRA
|
|
and #$FF - BIT_CIA2_PRA_CLK_OUT ; release
|
|
+bra iec__pull_release_end
|
|
|
|
iec_release_clk_pull_data:
|
|
|
|
lda CIA2_PRA
|
|
ora #BIT_CIA2_PRA_DAT_OUT ; pull
|
|
sta CIA2_PRA
|
|
and #$FF - BIT_CIA2_PRA_CLK_OUT ; release
|
|
bne iec__pull_release_end ; branch always
|
|
|
|
iec_pull_data_release_atn_clk:
|
|
|
|
lda CIA2_PRA
|
|
ora #BIT_CIA2_PRA_DAT_OUT ; pull
|
|
sta CIA2_PRA
|
|
and #$FF - BIT_CIA2_PRA_CLK_OUT ; release
|
|
sta CIA2_PRA
|
|
|
|
; FALLTROUGH
|
|
|
|
iec_release_atn:
|
|
|
|
lda CIA2_PRA
|
|
and #$FF - BIT_CIA2_PRA_ATN_OUT ; release
|
|
|
|
; FALLTROUGH
|
|
|
|
iec__pull_release_end:
|
|
|
|
sta CIA2_PRA
|
|
rts
|
|
|
|
|
|
} else {
|
|
|
|
|
|
; 65C02 version
|
|
|
|
iec_pull_atn_clk_release_data:
|
|
|
|
lda #BIT_CIA2_PRA_ATN_OUT
|
|
tsb CIA2_PRA
|
|
|
|
; FALLTROUGH
|
|
|
|
iec_pull_clk_release_data:
|
|
|
|
lda #BIT_CIA2_PRA_CLK_OUT
|
|
tsb CIA2_PRA
|
|
lda #BIT_CIA2_PRA_DAT_OUT
|
|
bra iec__pull_release_trb
|
|
|
|
iec_pull_clk_release_data_oneshot:
|
|
|
|
lda CIA2_PRA
|
|
ora #BIT_CIA2_PRA_CLK_OUT ; pull
|
|
and #$FF - BIT_CIA2_PRA_DAT_OUT ; release
|
|
sta CIA2_PRA
|
|
rts
|
|
|
|
iec_release_atn_clk_data:
|
|
|
|
lda #BIT_CIA2_PRA_ATN_OUT
|
|
trb CIA2_PRA
|
|
|
|
; FALLTROUGH
|
|
|
|
iec_release_clk_data:
|
|
|
|
lda #BIT_CIA2_PRA_DAT_OUT
|
|
trb CIA2_PRA
|
|
bra iec__release_clk
|
|
|
|
iec_release_clk_pull_data:
|
|
|
|
lda #BIT_CIA2_PRA_DAT_OUT
|
|
tsb CIA2_PRA
|
|
|
|
; FALLTROUGH
|
|
|
|
iec__release_clk:
|
|
|
|
lda #BIT_CIA2_PRA_CLK_OUT
|
|
bra iec__pull_release_trb
|
|
|
|
iec_pull_data_release_atn_clk:
|
|
|
|
lda #BIT_CIA2_PRA_DAT_OUT
|
|
tsb CIA2_PRA
|
|
lda #(BIT_CIA2_PRA_CLK_OUT + BIT_CIA2_PRA_ATN_OUT)
|
|
+skip_2_bytes_trash_nvz
|
|
|
|
; FALLTROUGH
|
|
|
|
iec_release_atn:
|
|
|
|
lda #BIT_CIA2_PRA_ATN_OUT
|
|
|
|
; FALLTROUGH
|
|
|
|
iec__pull_release_trb:
|
|
|
|
trb CIA2_PRA
|
|
rts
|
|
|
|
|
|
}
|
|
|
|
}
|