small tape support + turbo mode tweaks
This commit is contained in:
1 parent
c98407bd84
commit
6dc461d184
9 files changed
+84
-29
No files matched your search
@@ -45,6 +45,7 @@ SRCDIR_KERNAL = $(SRCDIR_COMMON) \
|
||||
src/kernal/assets \
|
||||
src/kernal/board_crt \
|
||||
src/kernal/board_m65 \
|
||||
src/kernal/board_u64 \
|
||||
src/kernal/board_x16 \
|
||||
src/kernal/extapi_m65 \
|
||||
src/kernal/iec \
|
||||
|
||||
@@ -121,7 +121,7 @@
|
||||
!ifndef CONFIG_LEGACY_SCNKEY {
|
||||
!addr BITTS = $B4 ; -- NOT IMPLEMENTED --
|
||||
}
|
||||
!addr NXTBIT = $B5 ; -- NOT IMPLEMENTED -- [!] also used by tape routine, we use it only for Ultimate 64 turbo handling
|
||||
!addr NXTBIT = $B5 ; -- NOT IMPLEMENTED -- [!] also used by tape routine to store CPU turbo settings
|
||||
!ifndef CONFIG_LEGACY_SCNKEY {
|
||||
!addr RODATA = $B6 ; -- NOT IMPLEMENTED --
|
||||
}
|
||||
|
||||
@@ -41,3 +41,10 @@
|
||||
;; #ALIAS# M65_MODEGET = KERNAL_0.M65_MODEGET
|
||||
;; #ALIAS# M65_MODESET = KERNAL_0.M65_MODESET
|
||||
;; #ALIAS# M65_SETWIN_Y = KERNAL_0.M65_SETWIN_Y
|
||||
|
||||
;
|
||||
; Ultimate 64 specific parts
|
||||
;
|
||||
|
||||
;; #ALIAS# U64_SLOW = KERNAL_0.U64_SLOW
|
||||
;; #ALIAS# U64_FAST = KERNAL_0.U64_FAST
|
||||
@@ -39,22 +39,13 @@ cmd_slow_fast_common:
|
||||
|
||||
cmd_slow:
|
||||
|
||||
lda #$00 ; for U64_TURBOCTL - badlines, 1MHz
|
||||
sta SCPU_SPEED_NORMAL ; any value will do
|
||||
|
||||
; FALLTROUGH
|
||||
|
||||
cmd_slow_fast_common:
|
||||
|
||||
sta U64_TURBOCTL
|
||||
rts
|
||||
jmp U64_SLOW ; to set turbo in $D031 too
|
||||
|
||||
cmd_fast:
|
||||
|
||||
lda #$0F ; for U64_TURBOCTL - badlines, 48MHz
|
||||
sta SCPU_SPEED_TURBO ; any value will do
|
||||
|
||||
bne cmd_slow_fast_common ; branch always
|
||||
jmp U64_FAST ; to set turbo in $D031 too
|
||||
|
||||
} else ifdef CONFIG_PLATFORM_COMMODORE_64 {
|
||||
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
;; #LAYOUT# M65 KERNAL_1 #TAKE
|
||||
;; #LAYOUT# * * #IGNORE
|
||||
|
||||
;
|
||||
; Tape helper routine
|
||||
;
|
||||
; - unlocks VIC-IV
|
||||
; - switches CPU to fast processing mode and disables badlines
|
||||
; - stores previous VIC_CTRLB in NXTBIN
|
||||
;
|
||||
|
||||
!ifdef HAS_TAPE {
|
||||
|
||||
|
||||
tape_fast_cpu:
|
||||
|
||||
jsr M65_MODEGET
|
||||
bcc @1
|
||||
|
||||
jsr viciv_unhide
|
||||
@1:
|
||||
lda VIC_CTRLB
|
||||
ora #%01000000
|
||||
sta VIC_CTRLB
|
||||
sta NXTBIT
|
||||
|
||||
lda #$00
|
||||
sta MISC_EMU
|
||||
|
||||
rts
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
;; #LAYOUT# STD * #TAKE
|
||||
;; #LAYOUT# * KERNAL_0 #TAKE
|
||||
;; #LAYOUT# * * #IGNORE
|
||||
|
||||
|
||||
!ifdef CONFIG_MB_U64 {
|
||||
|
||||
U64_SLOW:
|
||||
|
||||
lda #$00 ; for U64_TURBOCTL - badlines, 1MHz
|
||||
|
||||
+skip_2_bytes_trash_nvz
|
||||
|
||||
; FALLTROUGH
|
||||
|
||||
U64_FAST:
|
||||
|
||||
lda #$0F ; for U64_TURBOCTL - badlines, 48MHz
|
||||
sta SCPU_SPEED_TURBO ; any value will do
|
||||
|
||||
rts
|
||||
}
|
||||
@@ -32,6 +32,12 @@ hw_entry_reset:
|
||||
jsr m65_reset_part
|
||||
}
|
||||
|
||||
!ifdef CONFIG_MB_U64 {
|
||||
|
||||
jsr U64_SLOW
|
||||
sta SCPU_SPEED_NORMAL
|
||||
}
|
||||
|
||||
!ifdef CONFIG_PLATFORM_COMMODORE_64 {
|
||||
|
||||
; The following routine is based on reading the public KERNAL jumptable routine
|
||||
|
||||
@@ -30,8 +30,7 @@ tape_screen_on_motor_off:
|
||||
lda #$03
|
||||
sta MISC_EMU
|
||||
|
||||
lda VIC_CTRLB
|
||||
and #%10111111
|
||||
lda NXTBIT
|
||||
sta VIC_CTRLB
|
||||
|
||||
sta VIC_KEY
|
||||
@@ -70,18 +69,7 @@ tape_screen_off_motor_on:
|
||||
; to be handled by 1 MHz CPU - so in case of compatibility mode, switch CPU to fast speed
|
||||
; (and disable badlines, so we will not have to blank the screen)
|
||||
|
||||
jsr M65_MODEGET
|
||||
bcc @2
|
||||
|
||||
jsr viciv_unhide
|
||||
|
||||
lda VIC_CTRLB
|
||||
ora #%01000000
|
||||
sta VIC_CTRLB
|
||||
|
||||
lda #$00
|
||||
sta MISC_EMU
|
||||
@2:
|
||||
jsr tape_fast_cpu
|
||||
|
||||
} else ifdef CONFIG_MB_U64 {
|
||||
|
||||
@@ -90,10 +78,8 @@ tape_screen_off_motor_on:
|
||||
cmp #$FF
|
||||
beq @2 ; branch if no turbo control available
|
||||
|
||||
lda #$8F ; max speed, no badlines
|
||||
sta U64_TURBOCTL
|
||||
jsr U64_FAST ; max speed, no badlines
|
||||
bne @3 ; branch always
|
||||
|
||||
@2:
|
||||
jsr screen_off
|
||||
@3:
|
||||
|
||||
@@ -45,6 +45,17 @@ tape_head_align:
|
||||
|
||||
jsr nmi_lock
|
||||
|
||||
; Switch CPU to fast mode
|
||||
|
||||
!ifdef CONFIG_MB_M65 {
|
||||
jsr tape_fast_cpu
|
||||
}
|
||||
|
||||
!ifdef CONFIG_MB_U64 {
|
||||
jsr U64_FAST
|
||||
sta SCPU_SPEED_TURBO
|
||||
}
|
||||
|
||||
; Prepare CIA timers
|
||||
|
||||
ldx #$02 ; set timer A to 3 ticks
|
||||
|
||||
Reference in new issue
Block a user