handle EOI and generally get closer to a working LOAD routine

This commit is contained in:
Paul Gardner-Stephen committed 2019-05-04 23:05:23 +09:30
1 parent 287953dab6
commit d124349e50
2 files changed
+18 -82

No files matched your search

+4 -2
View File
@@ -31,8 +31,10 @@ iec_rx_clk_wait:
dex
bpl iec_rx_clk_wait
inc $0632
inc $d020
;; Remember EOI condition
lda IOSTATUS
ora #$40
sta IOSTATUS
;; EOI timeout: So pulse DATA line for 60 usec
jsr iec_assert_data
+14 -80
View File
@@ -15,66 +15,6 @@ load:
;; also p16 tells us this routine doesn't mess with the file table in the C64,
;; only in the drive.
;; Now command device to listen (p16)
jsr iec_assert_atn
lda #$28
jsr iec_tx_byte
bcs load_error
inc $0609
lda #$6f ; open channel / data (p3) , required according to p13
jsr iec_tx_byte
bcs load_error
jsr iec_release_atn
;; Send invalid "Q" command to drive as test
lda #$51
jsr iec_tx_byte
bcs load_error
lda #$0d
jsr iec_tx_byte
bcs load_error
inc $060a
;; Now command device to talk (p16)
jsr iec_assert_atn
lda #$48
jsr iec_tx_byte
bcs load_error
lda #$6f ; open channel / data (p3) , required according to p13
jsr iec_tx_byte
bcs load_error
jsr iec_release_atn
;; We are currently talker, so do the IEC turn around so that we
;; are the listener (p16)
jsr iec_turnaround_to_listen
bcs load_error
inc $060b
jsr printf
.byte "READING DATA...",$0d,0
read_loop:
* jsr iec_rx_byte
php
;; Write read data to screen for now
inc $ff
ldx $ff
sta $1000,x
plp
bcs load_done
bcc -
jmp read_loop
;; Begin sending under attention
jsr iec_assert_atn
@@ -108,32 +48,25 @@ read_loop:
bcs load_error
jsr iec_release_atn
inc $0608
;; Now command device to talk (p16)
jsr iec_assert_atn
lda #$48
jsr iec_tx_byte
bcs load_error
inc $0609
lda #$60 ; open channel / data (p3) , required according to p13
jsr iec_tx_byte
bcs load_error
jsr iec_release_atn
inc $060a
;; We are currently talker, so do the IEC turn around so that we
;; are the listener (p16)
;; An error here means FILE NOT FOUND ?
jsr iec_turnaround_to_listen
bcs load_error
inc $060b
jsr printf
.byte "READING DATA...",$0d,0
.byte "LOADING",$0d,0
;; We are now ready to receive bytes
* jsr iec_rx_byte
@@ -143,14 +76,18 @@ read_loop:
ldx $ff
sta $0400,x
plp
bcs load_done
bcc -
bcs load_error
;; Check for EOI -- if so, read one last byte
lda IOSTATUS
and #$40
beq -
load_done:
;; Close file on drive
jsr printf
.byte "LOADED",$0d,0
inc $060c
;; Close file on drive
;; Command drive to listen and to close the file
jsr iec_assert_atn
@@ -160,22 +97,19 @@ load_done:
jsr iec_tx_byte
jsr iec_release_atn
inc $060d
;; Tell drive to unlisten
jsr iec_assert_atn
lda #$3f
jsr iec_tx_byte
jsr iec_release_atn
inc $060e
;; FALL THROUGH
clc
load_error:
inc $060f
;; XXX - Indicate KERNAL (not BASIC) LOAD error condtion
;; Re-enable interrupts and return
cli
;; (iec_tx_byte will have set/cleared C flag and put result code