started work on optimized LOAD loop for DolphinDOS

This commit is contained in:
FeralChild64 committed 2019-12-26 15:23:42 +01:00
1 parent 7800c5efd5
commit 3784d7e518
5 files changed
+73 -28

No files matched your search

+2 -24
View File
@@ -30,30 +30,8 @@ iec_rx_byte:
// Wait till data line is released (someone else might be holding it)
jsr iec_wait_for_data_release
// 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
ldx #$11 // 2 cycles
iec_rx_clk_wait1:
lda CIA2_PRA // 4 cycles
rol // 2 cycles, to put CLK in as the last bit
bpl iec_rx_not_eoi // 2 cycles if not jumped
dex // 2 cycles
bne iec_rx_clk_wait1 // 3 cycles if jumped
// 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
iec_rx_not_empty:
// Pull data for 60 usec to confirm it
jsr iec_release_clk_pull_data
jsr iec_wait60us
jsr iec_release_clk_data
iec_rx_not_eoi:
// Check if EOI
jsr iec_rx_check_eoi
#if CONFIG_IEC_DOLPHINDOS
+32
View File
@@ -0,0 +1,32 @@
//
// Helper routine to check for EOI while receiving byte from IEC
//
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
ldx #$11 // 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
dex // 2 cycles
bne !- // 3 cycles if jumped
// 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
// Pull data for 60 usec to confirm it
jsr iec_release_clk_pull_data
jsr iec_wait60us
jsr iec_release_clk_data
iec_rx_check_eoi_done:
rts
+10 -4
View File
@@ -99,12 +99,18 @@ load_iec:
lda VERCKK
bne load_iec_loop // branch if VERIFY
lda IECPROTO
cmp #$01
bne load_iec_loop // branch if not JiffyDOS
jmp load_jiffydos
#if CONFIG_IEC_JIFFYDOS
cmp #$01
beq_far load_jiffydos // branch if JiffyDOS
#endif
#if CONFIG_IEC_DOLPHINDOS
// XXX enable when finished
// cmp #$02
// beq_far load_dolphindos // branch if JiffyDOS
#endif
#endif
+2
View File
@@ -54,6 +54,8 @@ dolphindos_detect_loop:
dolphindos_detect_fail:
panic #$00
rts
dolphindos_detect_success:
+27
View File
@@ -0,0 +1,27 @@
//
// DolphinDOS protocol support for IEC - optimized load loop
//
#if CONFIG_IEC_DOLPHINDOS && !CONFIG_MEMORY_MODEL_60K
load_dolphindos:
// Timing is critical for some parts, do not allow interrupts
sei
// A trick to shorten EAL update time
ldy #$FF
// FALLTROUGH
load_dolphindos_loop:
panic #$00 // XXX this routine is not finished yet
#endif // CONFIG_IEC_DOLPHINDOS and not CONFIG_MEMORY_MODEL_60K