diff --git a/c64/kernal/iec/iec_rx_check_eoi.s b/c64/kernal/iec/iec_rx_check_eoi.s index 5c95c71d..b36d840e 100644 --- a/c64/kernal/iec/iec_rx_check_eoi.s +++ b/c64/kernal/iec/iec_rx_check_eoi.s @@ -7,17 +7,20 @@ iec_rx_check_eoi: // Wait for talker to pull CLK. // If over 200 usec (205 cycles on NTSC machine) , then it is EOI. - // Loop iteraction takes 13 cycles, 17 full iterations are enough + // Loop iteraction takes 11 cycles, 19 full iterations are enough - ldx #$11 // 2 cycles + ldx #$13 // 2 cycles !: - lda CIA2_PRA // 4 cycles - rol // 2 cycles, to put CLK in as the last bit - bpl iec_rx_check_eoi_done // 2 cycles if not jumped + bit CIA2_PRA // 4 cycles + bvc iec_rx_check_eoi_done // 2 cycles if not jumped dex // 2 cycles bne !- // 3 cycles if jumped - + + // FALLTROUGH + +iec_rx_check_eoi_confirm: + // Timeout - either this is the last byte of stream, or the stream is empty at all. // Mark end of stream in IOSTATUS jsr kernalstatus_EOI diff --git a/c64/kernal/iec_fast/iec_fast_common.s b/c64/kernal/iec_fast/iec_fast_common.s index 9b8cf89d..a7ce0bb6 100644 --- a/c64/kernal/iec_fast/iec_fast_common.s +++ b/c64/kernal/iec_fast/iec_fast_common.s @@ -7,10 +7,9 @@ #if (CONFIG_IEC_JIFFYDOS || CONFIG_IEC_DOLPHINDOS) && !CONFIG_MEMORY_MODEL_60K -iec_update_EAL_by_Y: +iec_update_EAL_by_Y: // note: Carry has to be set by caller! tya - sec adc EAL+0 sta EAL+0 bcc !+ diff --git a/c64/kernal/iec_fast/load_dolphindos.s b/c64/kernal/iec_fast/load_dolphindos.s index eb7a18af..57e63820 100644 --- a/c64/kernal/iec_fast/load_dolphindos.s +++ b/c64/kernal/iec_fast/load_dolphindos.s @@ -13,16 +13,15 @@ load_dolphindos: sei // A trick to shorten EAL update time - ldy #$FF + ldy #$00 // FALLTROUGH load_dolphindos_loop: // Check if this was EOI - lda IOSTATUS - and #K_STS_EOI - bne load_dolphindos_end + bit IOSTATUS + bvs load_dolphindos_end // Wait for the talker to release the CLK line !: @@ -34,9 +33,9 @@ load_dolphindos_loop: and #$FF - BIT_CIA2_PRA_DAT_OUT // release sta CIA2_PRA - // Wait till data line is released (someone else might be holding it) + // Wait till DATA line is released (someone else might be holding it) !: - lda CIA2_PRA + bit CIA2_PRA bpl !- // Check if EOI - routine can damage .X, but this is safe @@ -44,7 +43,6 @@ load_dolphindos_loop: // Retrieve and store byte lda CIA2_PRB - iny sta (EAL),y // Pull DATA to acknowledge @@ -53,7 +51,7 @@ load_dolphindos_loop: sta CIA2_PRA // Handle EAL - cpy #$FF + iny bne load_dolphindos_loop inc EAL+1 jmp load_dolphindos_loop @@ -61,6 +59,7 @@ load_dolphindos_loop: load_dolphindos_end: // Update EAL + clc jsr iec_update_EAL_by_Y // End of load loop diff --git a/c64/kernal/iec_fast/load_jiffydos.s b/c64/kernal/iec_fast/load_jiffydos.s index 923e7dbc..db19537c 100644 --- a/c64/kernal/iec_fast/load_jiffydos.s +++ b/c64/kernal/iec_fast/load_jiffydos.s @@ -132,6 +132,7 @@ load_jiffydos_end: tax // Update EAL + sec jsr iec_update_EAL_by_Y // Indicate that no byte waits in output buffer