handle EOI and generally get closer to a working LOAD routine
This commit is contained in:
1 parent
287953dab6
commit
d124349e50
2 files changed
+18
-82
No files matched your search
@@ -31,8 +31,10 @@ iec_rx_clk_wait:
|
|||||||
dex
|
dex
|
||||||
bpl iec_rx_clk_wait
|
bpl iec_rx_clk_wait
|
||||||
|
|
||||||
inc $0632
|
;; Remember EOI condition
|
||||||
inc $d020
|
lda IOSTATUS
|
||||||
|
ora #$40
|
||||||
|
sta IOSTATUS
|
||||||
|
|
||||||
;; EOI timeout: So pulse DATA line for 60 usec
|
;; EOI timeout: So pulse DATA line for 60 usec
|
||||||
jsr iec_assert_data
|
jsr iec_assert_data
|
||||||
|
|||||||
+14
-80
@@ -15,66 +15,6 @@ load:
|
|||||||
;; also p16 tells us this routine doesn't mess with the file table in the C64,
|
;; also p16 tells us this routine doesn't mess with the file table in the C64,
|
||||||
;; only in the drive.
|
;; 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
|
;; Begin sending under attention
|
||||||
jsr iec_assert_atn
|
jsr iec_assert_atn
|
||||||
|
|
||||||
@@ -108,32 +48,25 @@ read_loop:
|
|||||||
bcs load_error
|
bcs load_error
|
||||||
jsr iec_release_atn
|
jsr iec_release_atn
|
||||||
|
|
||||||
inc $0608
|
|
||||||
|
|
||||||
;; Now command device to talk (p16)
|
;; Now command device to talk (p16)
|
||||||
jsr iec_assert_atn
|
jsr iec_assert_atn
|
||||||
lda #$48
|
lda #$48
|
||||||
jsr iec_tx_byte
|
jsr iec_tx_byte
|
||||||
bcs load_error
|
bcs load_error
|
||||||
|
|
||||||
inc $0609
|
|
||||||
|
|
||||||
lda #$60 ; open channel / data (p3) , required according to p13
|
lda #$60 ; open channel / data (p3) , required according to p13
|
||||||
jsr iec_tx_byte
|
jsr iec_tx_byte
|
||||||
bcs load_error
|
bcs load_error
|
||||||
jsr iec_release_atn
|
jsr iec_release_atn
|
||||||
|
|
||||||
inc $060a
|
|
||||||
|
|
||||||
;; We are currently talker, so do the IEC turn around so that we
|
;; We are currently talker, so do the IEC turn around so that we
|
||||||
;; are the listener (p16)
|
;; are the listener (p16)
|
||||||
|
;; An error here means FILE NOT FOUND ?
|
||||||
jsr iec_turnaround_to_listen
|
jsr iec_turnaround_to_listen
|
||||||
bcs load_error
|
bcs load_error
|
||||||
|
|
||||||
inc $060b
|
|
||||||
|
|
||||||
jsr printf
|
jsr printf
|
||||||
.byte "READING DATA...",$0d,0
|
.byte "LOADING",$0d,0
|
||||||
|
|
||||||
;; We are now ready to receive bytes
|
;; We are now ready to receive bytes
|
||||||
* jsr iec_rx_byte
|
* jsr iec_rx_byte
|
||||||
@@ -143,14 +76,18 @@ read_loop:
|
|||||||
ldx $ff
|
ldx $ff
|
||||||
sta $0400,x
|
sta $0400,x
|
||||||
plp
|
plp
|
||||||
bcs load_done
|
bcs load_error
|
||||||
bcc -
|
|
||||||
|
;; Check for EOI -- if so, read one last byte
|
||||||
|
lda IOSTATUS
|
||||||
|
and #$40
|
||||||
|
beq -
|
||||||
|
|
||||||
load_done:
|
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
|
;; Command drive to listen and to close the file
|
||||||
jsr iec_assert_atn
|
jsr iec_assert_atn
|
||||||
@@ -160,22 +97,19 @@ load_done:
|
|||||||
jsr iec_tx_byte
|
jsr iec_tx_byte
|
||||||
jsr iec_release_atn
|
jsr iec_release_atn
|
||||||
|
|
||||||
inc $060d
|
|
||||||
|
|
||||||
;; Tell drive to unlisten
|
;; Tell drive to unlisten
|
||||||
jsr iec_assert_atn
|
jsr iec_assert_atn
|
||||||
lda #$3f
|
lda #$3f
|
||||||
jsr iec_tx_byte
|
jsr iec_tx_byte
|
||||||
jsr iec_release_atn
|
jsr iec_release_atn
|
||||||
|
|
||||||
inc $060e
|
|
||||||
|
|
||||||
;; FALL THROUGH
|
;; FALL THROUGH
|
||||||
|
clc
|
||||||
|
|
||||||
load_error:
|
load_error:
|
||||||
|
|
||||||
inc $060f
|
;; XXX - Indicate KERNAL (not BASIC) LOAD error condtion
|
||||||
|
|
||||||
;; Re-enable interrupts and return
|
;; Re-enable interrupts and return
|
||||||
cli
|
cli
|
||||||
;; (iec_tx_byte will have set/cleared C flag and put result code
|
;; (iec_tx_byte will have set/cleared C flag and put result code
|
||||||
|
|||||||
Reference in new issue
Block a user