CLOSE: send LISTEN, CLOSE, UNLISTEN to a serial device
close_iec sent its CLOSE command under ATN without first addressing the device with LISTEN and without UNLISTEN after it, and built the command with ORA $E0 (zero page) instead of ORA #$E0, so the byte it sent was the secondary address ORed with whatever $E0 held. The drive never learned of the CLOSE, so a file written on a channel was never written to the disk. The contract (Michael Steil, "Commodore Peripheral Bus: Part 2", https://www.pagetable.com/?p=1031): CLOSE of a file on a serial device sends LISTEN, then $E0 plus the secondary address, then UNLISTEN. close_iec now does that, as iec_close_load already does for LOAD. Not reported upstream (https://github.com/MEGA65/open-roms).
This commit is contained in:
1 parent
264e9792a5
commit
29124377fc
1 file changed
+7
-1
@@ -23,11 +23,17 @@ close_iec:
|
|||||||
jsr iec_close_load
|
jsr iec_close_load
|
||||||
jmp close_remove_from_table
|
jmp close_remove_from_table
|
||||||
@1:
|
@1:
|
||||||
ora $E0 ; CLOSE command
|
; LISTEN, CLOSE, UNLISTEN - see https://www.pagetable.com/?p=1031
|
||||||
|
lda FAT, y
|
||||||
|
jsr LISTEN
|
||||||
|
bcs close_iec_end
|
||||||
|
lda SAT, y
|
||||||
|
ora #$E0 ; CLOSE command
|
||||||
sta TBTCNT
|
sta TBTCNT
|
||||||
jsr iec_tx_command
|
jsr iec_tx_command
|
||||||
bcs close_iec_end
|
bcs close_iec_end
|
||||||
jsr iec_tx_command_finalize
|
jsr iec_tx_command_finalize
|
||||||
|
jsr UNLSN
|
||||||
|
|
||||||
; FALLTROUGH
|
; FALLTROUGH
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user