more work towards IEC bus. Also don't corrupt $DD00 VIC-II bank bits in the process.
This commit is contained in:
1 parent
16dcfbe22b
commit
687ed9c56a
7 files changed
+53
-35
No files matched your search
@@ -1,6 +1,6 @@
|
|||||||
iec_assert_clk_and_data:
|
iec_assert_clk_and_data:
|
||||||
lda $dd00
|
lda $dd00
|
||||||
and #$08
|
and #$0b
|
||||||
ora #$30
|
ora #$30
|
||||||
sta $dd00
|
sta $dd00
|
||||||
rts
|
rts
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
iec_assert_clk_release_data:
|
iec_assert_clk_release_data:
|
||||||
lda $dd00
|
lda $dd00
|
||||||
and #$08
|
and #$0b
|
||||||
ora #$10
|
ora #$10
|
||||||
sta $dd00
|
sta $dd00
|
||||||
rts
|
rts
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
iec_release_clk:
|
iec_release_clk:
|
||||||
lda $dd00
|
lda $dd00
|
||||||
and #$18
|
and #$1b
|
||||||
sta $dd00
|
sta $dd00
|
||||||
rts
|
rts
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
iec_release_clk_and_data:
|
iec_release_clk_and_data:
|
||||||
|
|
||||||
lda $DD00
|
lda $DD00
|
||||||
and #$08
|
and #$0b
|
||||||
sta $DD00
|
sta $DD00
|
||||||
rts
|
rts
|
||||||
@@ -1,8 +1,44 @@
|
|||||||
iec_tx_byte:
|
iec_tx_byte:
|
||||||
|
|
||||||
|
pha
|
||||||
|
|
||||||
|
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
|
||||||
|
pla
|
||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
;; Do the actual transmission of 8 bits of data
|
;; Do the actual transmission of 8 bits of data
|
||||||
ldx #8
|
ldx #8
|
||||||
|
|
||||||
|
pla
|
||||||
|
|
||||||
iec_tx_byte_nextbit:
|
iec_tx_byte_nextbit:
|
||||||
;; Is next bit 0 or 1?
|
;; Is next bit 0 or 1?
|
||||||
lsr
|
lsr
|
||||||
@@ -40,7 +76,6 @@ iec_tx_byte_l1:
|
|||||||
bne -
|
bne -
|
||||||
|
|
||||||
;; Timeout - DEVICE NOT PRESENT
|
;; Timeout - DEVICE NOT PRESENT
|
||||||
cli
|
|
||||||
jmp kernalerror_DEVICE_NOT_FOUND
|
jmp kernalerror_DEVICE_NOT_FOUND
|
||||||
*
|
*
|
||||||
;; All done.
|
;; All done.
|
||||||
|
|||||||
+11
-30
@@ -11,38 +11,19 @@ open:
|
|||||||
|
|
||||||
;; Begin sending under attention
|
;; Begin sending under attention
|
||||||
jsr iec_assert_atn
|
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
|
;; CLK is now asserted, and we are ready to transmit a byte
|
||||||
|
lda #$28
|
||||||
jsr iec_tx_byte
|
jsr iec_tx_byte
|
||||||
|
bcs open_error
|
||||||
|
|
||||||
|
;; Indicate success
|
||||||
|
lda #$00
|
||||||
|
clc
|
||||||
|
|
||||||
|
open_error:
|
||||||
|
;; Re-enable interrupts and return
|
||||||
|
;; (iec_tx_byte will have set/cleared C flag and put result code
|
||||||
|
;; in A if it was an error).
|
||||||
|
cli
|
||||||
rts
|
rts
|
||||||
@@ -30,5 +30,7 @@ reset_entry:
|
|||||||
; What do we do when finished? A C64 jumps into the BASIC ROM
|
; What do we do when finished? A C64 jumps into the BASIC ROM
|
||||||
cli ; Allow interrupts to happen
|
cli ; Allow interrupts to happen
|
||||||
|
|
||||||
|
jsr open
|
||||||
|
|
||||||
; c64 prg p269
|
; c64 prg p269
|
||||||
jmp ($a000)
|
jmp ($a000)
|
||||||
Reference in new issue
Block a user