From 506d9d5c4faacf31eaae9b3c92ddc55f8e446c8b Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Sun, 1 Dec 2019 16:29:00 +0100 Subject: [PATCH] compatibility fix for EOI handling in IEC code --- c64/kernal/iec/acptr.s | 10 ++++++++-- c64/kernal/iec/chrin_iec.s | 2 +- c64/kernal/iec/iec_rx_byte.s | 12 ++---------- c64/kernal/iec/load_iec.s | 36 ++++++++++++++++++++++-------------- 4 files changed, 33 insertions(+), 27 deletions(-) diff --git a/c64/kernal/iec/acptr.s b/c64/kernal/iec/acptr.s index f31bfc74..e5e818e7 100644 --- a/c64/kernal/iec/acptr.s +++ b/c64/kernal/iec/acptr.s @@ -11,8 +11,14 @@ ACPTR: - jsr kernalstatus_reset - + lda IOSTATUS + beq !+ + + lda #$0D // tested on real ROMs + clc + rts +!: + #if CONFIG_IEC #if CONFIG_IEC_JIFFYDOS jmp iec_rx_dispatch diff --git a/c64/kernal/iec/chrin_iec.s b/c64/kernal/iec/chrin_iec.s index f293fa0c..93ad7afc 100644 --- a/c64/kernal/iec/chrin_iec.s +++ b/c64/kernal/iec/chrin_iec.s @@ -7,4 +7,4 @@ chrin_iec: // XXX is this really all? - jmp JACPTR // carry will be set accordingly + jmp JACPTR diff --git a/c64/kernal/iec/iec_rx_byte.s b/c64/kernal/iec/iec_rx_byte.s index 36f00f78..ac6f807a 100644 --- a/c64/kernal/iec/iec_rx_byte.s +++ b/c64/kernal/iec/iec_rx_byte.s @@ -111,16 +111,8 @@ iec_rx_clk_wait2: // Timeout jsr kernalstatus_EOI pla - - // Restore registers - pla - tay - pla - tax - - sec // XXX confirm that sec is really a way to report timeout here - cli - rts + + jmp iec_rx_end !: // More bits? dex diff --git a/c64/kernal/iec/load_iec.s b/c64/kernal/iec/load_iec.s index 23f647b8..4175ab41 100644 --- a/c64/kernal/iec/load_iec.s +++ b/c64/kernal/iec/load_iec.s @@ -24,8 +24,6 @@ load_break_error: jsr iec_close_load jmp kernalerror_ROUTINE_TERMINATED -load_save_no_file_name: - load_iec: @@ -71,19 +69,10 @@ load_iec: // Get load address -#if CONFIG_IEC_JIFFYDOS - jsr iec_rx_dispatch -#else // no turbo supported - jsr iec_rx_byte -#endif - bcs load_iec_file_not_found + jsr load_iec_get_addr_byte sta EAL+0 -#if CONFIG_IEC_JIFFYDOS - jsr iec_rx_dispatch -#else // no turbo supported - jsr iec_rx_byte -#endif - bcs load_iec_file_not_found + + jsr load_iec_get_addr_byte sta EAL+1 // If secondary address is 0, override EAL with STAL @@ -143,4 +132,23 @@ iec_load_loop: jmp lvs_return_last_address +load_iec_get_addr_byte: + +#if CONFIG_IEC_JIFFYDOS + jsr iec_rx_dispatch +#else // no turbo supported + jsr iec_rx_byte +#endif + + bcs !+ + lda IOSTATUS + and #K_STS_EOI + bne !+ + rts +!: + pla + pla + jmp load_iec_file_not_found + + #endif // CONFIG_IEC