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/board_crt \
src/kernal/board_m65 \
src/kernal/board_u64 \
src/kernal/board_x16 \
src/kernal/extapi_m65 \
src/kernal/iec \
+1 -1
View File
@@ -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 --
}
+7
View File
@@ -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
+2 -11
View File
@@ -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
}
+6
View File
@@ -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
+3 -17
View File
@@ -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:
+11
View File
@@ -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