small tape support + turbo mode tweaks

This commit is contained in:
FeralChild64 committed 2020-10-22 20:08:13 +02:00
1 parent c98407bd84
commit 6dc461d184
9 files changed
+84 -29

No files matched your search

+1
View File
@@ -45,6 +45,7 @@ SRCDIR_KERNAL = $(SRCDIR_COMMON) \
src/kernal/assets \ src/kernal/assets \
src/kernal/board_crt \ src/kernal/board_crt \
src/kernal/board_m65 \ src/kernal/board_m65 \
src/kernal/board_u64 \
src/kernal/board_x16 \ src/kernal/board_x16 \
src/kernal/extapi_m65 \ src/kernal/extapi_m65 \
src/kernal/iec \ src/kernal/iec \
+1 -1
View File
@@ -121,7 +121,7 @@
!ifndef CONFIG_LEGACY_SCNKEY { !ifndef CONFIG_LEGACY_SCNKEY {
!addr BITTS = $B4 ; -- NOT IMPLEMENTED -- !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 { !ifndef CONFIG_LEGACY_SCNKEY {
!addr RODATA = $B6 ; -- NOT IMPLEMENTED -- !addr RODATA = $B6 ; -- NOT IMPLEMENTED --
} }
+7
View File
@@ -41,3 +41,10 @@
;; #ALIAS# M65_MODEGET = KERNAL_0.M65_MODEGET ;; #ALIAS# M65_MODEGET = KERNAL_0.M65_MODEGET
;; #ALIAS# M65_MODESET = KERNAL_0.M65_MODESET ;; #ALIAS# M65_MODESET = KERNAL_0.M65_MODESET
;; #ALIAS# M65_SETWIN_Y = KERNAL_0.M65_SETWIN_Y ;; #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
+2 -11
View File
@@ -39,22 +39,13 @@ cmd_slow_fast_common:
cmd_slow: cmd_slow:
lda #$00 ; for U64_TURBOCTL - badlines, 1MHz
sta SCPU_SPEED_NORMAL ; any value will do sta SCPU_SPEED_NORMAL ; any value will do
jmp U64_SLOW ; to set turbo in $D031 too
; FALLTROUGH
cmd_slow_fast_common:
sta U64_TURBOCTL
rts
cmd_fast: cmd_fast:
lda #$0F ; for U64_TURBOCTL - badlines, 48MHz
sta SCPU_SPEED_TURBO ; any value will do sta SCPU_SPEED_TURBO ; any value will do
jmp U64_FAST ; to set turbo in $D031 too
bne cmd_slow_fast_common ; branch always
} else ifdef CONFIG_PLATFORM_COMMODORE_64 { } 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
}
+6
View File
@@ -32,6 +32,12 @@ hw_entry_reset:
jsr m65_reset_part jsr m65_reset_part
} }
!ifdef CONFIG_MB_U64 {
jsr U64_SLOW
sta SCPU_SPEED_NORMAL
}
!ifdef CONFIG_PLATFORM_COMMODORE_64 { !ifdef CONFIG_PLATFORM_COMMODORE_64 {
; The following routine is based on reading the public KERNAL jumptable routine ; The following routine is based on reading the public KERNAL jumptable routine
+3 -17
View File
@@ -30,8 +30,7 @@ tape_screen_on_motor_off:
lda #$03 lda #$03
sta MISC_EMU sta MISC_EMU
lda VIC_CTRLB lda NXTBIT
and #%10111111
sta VIC_CTRLB sta VIC_CTRLB
sta VIC_KEY 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 ; 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) ; (and disable badlines, so we will not have to blank the screen)
jsr M65_MODEGET jsr tape_fast_cpu
bcc @2
jsr viciv_unhide
lda VIC_CTRLB
ora #%01000000
sta VIC_CTRLB
lda #$00
sta MISC_EMU
@2:
} else ifdef CONFIG_MB_U64 { } else ifdef CONFIG_MB_U64 {
@@ -90,10 +78,8 @@ tape_screen_off_motor_on:
cmp #$FF cmp #$FF
beq @2 ; branch if no turbo control available beq @2 ; branch if no turbo control available
lda #$8F ; max speed, no badlines jsr U64_FAST ; max speed, no badlines
sta U64_TURBOCTL
bne @3 ; branch always bne @3 ; branch always
@2: @2:
jsr screen_off jsr screen_off
@3: @3:
+11
View File
@@ -45,6 +45,17 @@ tape_head_align:
jsr nmi_lock 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 ; Prepare CIA timers
ldx #$02 ; set timer A to 3 ticks ldx #$02 ; set timer A to 3 ticks