started work on optimized LOAD loop for DolphinDOS
This commit is contained in:
1 parent
7800c5efd5
commit
3784d7e518
5 files changed
+73
-28
No files matched your search
@@ -30,30 +30,8 @@ iec_rx_byte:
|
|||||||
// Wait till data line is released (someone else might be holding it)
|
// Wait till data line is released (someone else might be holding it)
|
||||||
jsr iec_wait_for_data_release
|
jsr iec_wait_for_data_release
|
||||||
|
|
||||||
// Wait for talker to pull CLK.
|
// Check if EOI
|
||||||
// If over 200 usec (205 cycles on NTSC machine) , then it is EOI.
|
jsr iec_rx_check_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:
|
|
||||||
|
|
||||||
#if CONFIG_IEC_DOLPHINDOS
|
#if CONFIG_IEC_DOLPHINDOS
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -99,12 +99,18 @@ load_iec:
|
|||||||
|
|
||||||
lda VERCKK
|
lda VERCKK
|
||||||
bne load_iec_loop // branch if VERIFY
|
bne load_iec_loop // branch if VERIFY
|
||||||
|
|
||||||
lda IECPROTO
|
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
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -54,6 +54,8 @@ dolphindos_detect_loop:
|
|||||||
|
|
||||||
dolphindos_detect_fail:
|
dolphindos_detect_fail:
|
||||||
|
|
||||||
|
panic #$00
|
||||||
|
|
||||||
rts
|
rts
|
||||||
|
|
||||||
dolphindos_detect_success:
|
dolphindos_detect_success:
|
||||||
|
|||||||
@@ -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
|
||||||
Reference in new issue
Block a user