various IEC optimizations

This commit is contained in:
FeralChild64 committed 2019-12-26 21:34:30 +01:00
1 parent 601f1adea4
commit 6aa6e568a1
4 files changed
+18 -16

No files matched your search

+9 -6
View File
@@ -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
+1 -2
View File
@@ -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 !+
+7 -8
View File
@@ -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
+1
View File
@@ -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