49 lines
1.2 KiB
ArmAsm
49 lines
1.2 KiB
ArmAsm
; Function defined on pp272-273 of C64 Programmers Reference Guide
|
|
;; See also http://www.zimmers.net/anonftp/pub/cbm/programming/serial-bus.pdf
|
|
|
|
;; Sequence is:
|
|
;; 1. Call current device to attention as LISTENER = $20 + device
|
|
;; 2.
|
|
open:
|
|
|
|
;; Disable IRQs, since timing matters!
|
|
SEI
|
|
|
|
;; Begin sending under attention
|
|
jsr iec_assert_atn
|
|
jsr iec_assert_clk_release_data
|
|
|
|
;; Give devices time to respond
|
|
jsr wait1ms
|
|
|
|
;; Did a device respond? (DATA will be pulled if so)
|
|
lda $DD00
|
|
bmi +
|
|
|
|
;; No devices present, so we can immediately return with device not found
|
|
cli
|
|
jmp kernalerror_DEVICE_NOT_FOUND
|
|
*
|
|
|
|
;; Release CLK and wait for DATA to release.
|
|
jsr iec_release_clk_and_data
|
|
|
|
;; Wait for DATA to be released
|
|
;; Listener is allowed to hold DATA for as long as they want.
|
|
;; i.e., this is the part of the protocol where the listener indicates
|
|
;; that they are busy doing something, like processing the previous
|
|
;; character.
|
|
jsr iec_wait_for_data_release
|
|
|
|
;; We then wait for 60 usec (less than 200usec so we don't
|
|
;; signal EOI), before asserting CLK again.
|
|
jsr iec_wait60us
|
|
|
|
;; Re-assert CLK line
|
|
jsr iec_assert_clk_release_data
|
|
|
|
;; CLK is now asserted, and we are ready to transmit a byte
|
|
jsr iec_tx_byte
|
|
|
|
rts
|