started JiffyDOS byte reception, fixes for turbo dispatcher
This commit is contained in:
1 parent
d0fd34e79f
commit
98f3e87105
6 files changed
+70
-26
No files matched your search
@@ -304,18 +304,20 @@
|
|||||||
.var features_str = ""
|
.var features_str = ""
|
||||||
|
|
||||||
#if CONFIG_TAPE_NORMAL
|
#if CONFIG_TAPE_NORMAL
|
||||||
.eval features_str = ADD_FEATURE(features_str, "TAPE NORMAL")
|
.eval features_str = ADD_FEATURE(features_str, "TAPE LOAD NORMAL")
|
||||||
#elif CONFIG_TAPE_TURBO
|
#elif CONFIG_TAPE_TURBO
|
||||||
.eval features_str = ADD_FEATURE(features_str, "TAPE TURBO")
|
.eval features_str = ADD_FEATURE(features_str, "TAPE LOAD TURBO")
|
||||||
#elif CONFIG_TAPE_NORMAL && CONFIG_TAPE_TURBO
|
#elif CONFIG_TAPE_NORMAL && CONFIG_TAPE_TURBO
|
||||||
.eval features_str = ADD_FEATURE(features_str, "TAPE NORMAL+TURBO")
|
.eval features_str = ADD_FEATURE(features_str, "TAPE LOAD NORMAL+TURBO")
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
.eval feature_new_line = true
|
||||||
|
|
||||||
#if CONFIG_IEC
|
#if CONFIG_IEC
|
||||||
#if !CONFIG_IEC_JIFFYDOS
|
#if !CONFIG_IEC_JIFFYDOS
|
||||||
.eval features_str = ADD_FEATURE(features_str, "IEC")
|
.eval features_str = ADD_FEATURE(features_str, "IEC")
|
||||||
#else
|
#else
|
||||||
.eval features_str = ADD_FEATURE(features_str, "IEC+JD")
|
.eval features_str = ADD_FEATURE(features_str, "IEC+JIFFY DEF")
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,17 @@
|
|||||||
|
|
||||||
iec_tx_byte_jiffydos:
|
iec_tx_byte_jiffydos:
|
||||||
|
|
||||||
// We need to preserve 3 lowest bits of CIA2_PRA - as they encode
|
// Timing is critical, do not allow interrupts
|
||||||
|
sei
|
||||||
|
|
||||||
|
// Preserve .X (.Y is not used by the routine)
|
||||||
|
phx_trash_a
|
||||||
|
|
||||||
|
// If EOI requested (carryy flag set), mark this in IECPROTO as 0
|
||||||
|
bcc !+
|
||||||
|
dec IECPROTO // turns 1 into 0
|
||||||
|
!:
|
||||||
|
// We need to preserve 3 lowest bits of CIA2_PRA, they contain important (but unrelated) data
|
||||||
// Use C3PO for this, as afterwards we have to set there 0 nevertheless
|
// Use C3PO for this, as afterwards we have to set there 0 nevertheless
|
||||||
lda CIA2_PRA
|
lda CIA2_PRA
|
||||||
and #%00000111
|
and #%00000111
|
||||||
@@ -68,21 +78,40 @@ __jd_check1:
|
|||||||
and #%00110000 // clear everything but CLK/DATA
|
and #%00110000 // clear everything but CLK/DATA
|
||||||
sta CIA2_PRA
|
sta CIA2_PRA
|
||||||
|
|
||||||
|
// Signal EOI if needed XXX calculate cycles for quicklyy pulling CLK
|
||||||
|
lda C3PO
|
||||||
|
ldx IECPROTO
|
||||||
|
beq iec_tx_byte_jiffydos_wait_eoi
|
||||||
|
|
||||||
|
// FALLTROUGH
|
||||||
|
|
||||||
// XXX EOI signalled by early CLK (20us delay for non-CLK?)
|
iec_tx_byte_jiffydos_finalize:
|
||||||
|
|
||||||
|
ora #BIT_CIA2_PRA_CLK_OUT // pull CLK
|
||||||
|
sta CIA2_PRA
|
||||||
|
|
||||||
// Re-enable sprites
|
// Re-enable sprites
|
||||||
pla
|
pla
|
||||||
lda VIC_SPENA
|
sta VIC_SPENA
|
||||||
|
|
||||||
// Mark TX buffer as empty
|
// Mark TX buffer as empty, restore proper IECPROTO value
|
||||||
lda #$00
|
ldx #$00
|
||||||
sta C3PO
|
stx C3PO
|
||||||
|
inx
|
||||||
|
sta IECPROTO
|
||||||
|
|
||||||
|
// Restore .X, interrupts, return
|
||||||
|
plx_trash_a
|
||||||
|
cli
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
iec_tx_byte_jiffydos_wait_eoi:
|
||||||
|
|
||||||
|
jsr iec_wait20us // XXX is it enough?
|
||||||
|
lda C3PO
|
||||||
|
jmp iec_tx_byte_jiffydos_finalize
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
iec_rx_byte_jiffydos:
|
iec_rx_byte_jiffydos:
|
||||||
|
|
||||||
@@ -105,13 +134,35 @@ iec_rx_byte_jiffydos:
|
|||||||
pla
|
pla
|
||||||
sta CIA2_PRA
|
sta CIA2_PRA
|
||||||
|
|
||||||
|
// Retrieve byte XXX count cycles, synchronize
|
||||||
|
lda CIA2_PRA // bits 0 and 1
|
||||||
|
and #%11000000
|
||||||
|
pha
|
||||||
|
|
||||||
// XXX retrieve byte
|
lda CIA2_PRA // bits 2 and 3
|
||||||
|
and #%11000000
|
||||||
|
pha
|
||||||
|
|
||||||
|
lda CIA2_PRA // bits 4 and 5
|
||||||
|
and #%11000000
|
||||||
|
pha
|
||||||
|
|
||||||
|
lda CIA2_PRA // bits 6 and 7
|
||||||
|
and #%11000000
|
||||||
|
pha
|
||||||
|
|
||||||
|
// XXX check for EOI here
|
||||||
|
|
||||||
|
// XXX decode byte instead of this - can we do it in real time?
|
||||||
|
pla // bits 6 and 7
|
||||||
|
pla // bits 4 and 5
|
||||||
|
pla // bits 2 and 3
|
||||||
|
pla // bits 0 and 1
|
||||||
|
|
||||||
|
|
||||||
// Re-enable sprites
|
// Re-enable sprites
|
||||||
pla
|
pla
|
||||||
lda VIC_SPENA
|
sta VIC_SPENA
|
||||||
|
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Helper table for encoding lower nibble for JiffyyDOS,
|
// Helper table for encoding lower nibble for JiffyyDOS,
|
||||||
// values found by observing the actual transfer
|
// values found by observing the actual transfer using
|
||||||
|
// original ROMs
|
||||||
//
|
//
|
||||||
|
|
||||||
#if CONFIG_IEC_JIFFYDOS
|
#if CONFIG_IEC_JIFFYDOS
|
||||||
|
|||||||
@@ -10,23 +10,13 @@
|
|||||||
iec_rx_dispatch:
|
iec_rx_dispatch:
|
||||||
|
|
||||||
lda IECPROTO
|
lda IECPROTO
|
||||||
|
|
||||||
#if CONFIG_IEC_JIFFYDOS
|
#if CONFIG_IEC_JIFFYDOS
|
||||||
cmp #$01
|
cmp #$01
|
||||||
beq iec_rx_dispatch_jiffydos
|
beq_far iec_rx_byte_jiffydos
|
||||||
#endif // CONFIG_IEC_JIFFYDOS
|
#endif // CONFIG_IEC_JIFFYDOS
|
||||||
|
|
||||||
// FALLTROUGH
|
|
||||||
|
|
||||||
iec_rx_dispatch_normal:
|
|
||||||
|
|
||||||
plp
|
|
||||||
jmp iec_rx_byte
|
jmp iec_rx_byte
|
||||||
|
|
||||||
#if CONFIG_IEC_JIFFYDOS
|
|
||||||
iec_rx_dispatch_jiffydos:
|
|
||||||
plp
|
|
||||||
jmp iec_rx_byte_jiffydos
|
|
||||||
#endif // CONFIG_IEC_JIFFYDOS
|
|
||||||
|
|
||||||
|
|
||||||
#endif // any turbo supported
|
#endif // any turbo supported
|
||||||
@@ -81,7 +81,6 @@ iec_jiffydos_detect_loop:
|
|||||||
skip_2_bytes_trash_nvz
|
skip_2_bytes_trash_nvz
|
||||||
|
|
||||||
iec_jiffydos_detected:
|
iec_jiffydos_detected:
|
||||||
|
|
||||||
lda #$01 // JiffyDOS protocol
|
lda #$01 // JiffyDOS protocol
|
||||||
|
|
||||||
iec_jiffydos_store_proto:
|
iec_jiffydos_store_proto:
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ iec_tx_dispatch:
|
|||||||
|
|
||||||
php // preserve C flag for EOI indication
|
php // preserve C flag for EOI indication
|
||||||
lda IECPROTO
|
lda IECPROTO
|
||||||
|
|
||||||
#if CONFIG_IEC_JIFFYDOS
|
#if CONFIG_IEC_JIFFYDOS
|
||||||
cmp #$01
|
cmp #$01
|
||||||
beq iec_tx_dispatch_jiffydos
|
beq iec_tx_dispatch_jiffydos
|
||||||
|
|||||||
Reference in new issue
Block a user