From 166cfabf826ba0db71a595f98e071c55018d53a8 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Wed, 7 Oct 2020 15:10:48 +0200 Subject: [PATCH] Ultimate 64 tape improvements --- bin/README.md | 10 +++++-- src/,,config_generic.s | 4 +-- src/aliases/,aliases_ram_lowmem.s | 2 +- src/kernal/assets/kernal_messages.s | 15 ++++------ src/kernal/board_m65/mega65_imports.s | 2 +- src/kernal/tape/tape_common.s | 5 +--- src/kernal/tape/tape_common_screen.s | 40 ++++++++++++++++++++------- 7 files changed, 47 insertions(+), 31 deletions(-) diff --git a/bin/README.md b/bin/README.md index b2c0799b..11d7e890 100644 --- a/bin/README.md +++ b/bin/README.md @@ -1,7 +1,6 @@ Follow these rules, or bad things will happen! - * Don't mix ROMs for different platforms - use generic BASIC with generic KERNAL, Ultimate64 BASIC with Ultimate64 KERNAL, etc. * Don't mix these ROMs with any other ROMs; exceptions: @@ -11,9 +10,14 @@ Follow these rules, or bad things will happen! - chargen_*.rom - these ones are fully interchangeable -- Don't mix ROMs from different builds/versions (again, CHARGEN is an exception). +* Don't mix ROMs from different builds/versions (again, CHARGEN is an exception). -- The generic ROM set should be compatible with any C64-compatible machine; platform-specific ROMs might not work on other platforms. +* The generic ROM set should be compatible with any C64-compatible machine; platform-specific ROMs might not work on other platforms. + + +For Ultimate 64 the following settinghs are recommended: + +* U64 Specific Settings -> Turbo Control -> U64 Turbo Registers Have fun! diff --git a/src/,,config_generic.s b/src/,,config_generic.s index 970f7cde..ba3b0c5d 100644 --- a/src/,,config_generic.s +++ b/src/,,config_generic.s @@ -71,8 +71,8 @@ ;; #CONFIG# KEY_REPEAT_DEFAULT NO ;; #CONFIG# KEY_REPEAT_ALWAYS NO ;; #CONFIG# KEY_FAST_SCAN YES -;; #CONFIG# JOY1_CURSOR YES -;; #CONFIG# JOY2_CURSOR YES +;; #CONFIG# JOY1_CURSOR NO +;; #CONFIG# JOY2_CURSOR NO ;; #CONFIG# PROGRAMMABLE_KEYS YES diff --git a/src/aliases/,aliases_ram_lowmem.s b/src/aliases/,aliases_ram_lowmem.s index 50f8edec..eafc56cb 100644 --- a/src/aliases/,aliases_ram_lowmem.s +++ b/src/aliases/,aliases_ram_lowmem.s @@ -121,7 +121,7 @@ !ifndef CONFIG_LEGACY_SCNKEY { !addr BITTS = $B4 ; -- NOT IMPLEMENTED -- } - !addr NXTBIT = $B5 ; -- NOT IMPLEMENTED -- + !addr NXTBIT = $B5 ; -- NOT IMPLEMENTED -- [!] also used by tape routine, we use it only for Ultimate 64 turbo handling !ifndef CONFIG_LEGACY_SCNKEY { !addr RODATA = $B6 ; -- NOT IMPLEMENTED -- } diff --git a/src/kernal/assets/kernal_messages.s b/src/kernal/assets/kernal_messages.s index 5c816750..7504e91d 100644 --- a/src/kernal/assets/kernal_messages.s +++ b/src/kernal/assets/kernal_messages.s @@ -19,9 +19,8 @@ !ifdef HAS_TAPE { !addr __MSG_KERNAL_PRESS_PLAY = __msg_kernalplay - __msg_kernal_first !addr __MSG_KERNAL_FOUND = __msg_kernalfound - __msg_kernal_first -!ifdef CONFIG_MB_M65 { -!addr __MSG_KERNAL_OK_SEARCHING = __msg_kernaloksearching - __msg_kernal_first -} } +!addr __MSG_KERNAL_OK = __msg_kernalok - __msg_kernal_first +} !ifdef CONFIG_PANIC_SCREEN { !addr __MSG_KERNAL_PANIC = __msg_kernalpanic - __msg_kernal_first @@ -70,14 +69,10 @@ __msg_kernalfound: !pet "found" !byte $80 + $20 ; end of string mark + space -!ifdef CONFIG_MB_M65 { - -__msg_kernaloksearching: +__msg_kernalok: !pet "ok" - !byte $0D, $0D - !pet "searchin" - !byte $80 + $47 ; end of string mark + 'G' -} } + !byte $80 + $0D ; end of string mark + return +} !ifdef CONFIG_PANIC_SCREEN { diff --git a/src/kernal/board_m65/mega65_imports.s b/src/kernal/board_m65/mega65_imports.s index 5c093e5c..8f5a6e78 100644 --- a/src/kernal/board_m65/mega65_imports.s +++ b/src/kernal/board_m65/mega65_imports.s @@ -72,7 +72,7 @@ ;; #ALIAS# print_return = KERNAL_0.proxy_K1_print_return ;; #ALIAS# __MSG_KERNAL_PRESS_PLAY = KERNAL_0.__MSG_KERNAL_PRESS_PLAY -;; #ALIAS# __MSG_KERNAL_OK_SEARCHING = KERNAL_0.__MSG_KERNAL_OK_SEARCHING +;; #ALIAS# __MSG_KERNAL_OK = KERNAL_0.__MSG_KERNAL_OK ;; #ALIAS# __MSG_KERNAL_FOUND = KERNAL_0.__MSG_KERNAL_FOUND ;; #ALIAS# tape_normal_byte_store = KERNAL_0.tape_normal_byte_store diff --git a/src/kernal/tape/tape_common.s b/src/kernal/tape/tape_common.s index 761927e0..dec74dff 100644 --- a/src/kernal/tape/tape_common.s +++ b/src/kernal/tape/tape_common.s @@ -113,13 +113,10 @@ tape_prepare_reading: } ; CONFIG_TAPE_HEAD_ALIGN -!ifdef CONFIG_MB_M65 { - ; Display confirmation - ldx #__MSG_KERNAL_OK_SEARCHING + ldx #__MSG_KERNAL_OK jsr print_kernal_message -} ; Prepare for reading diff --git a/src/kernal/tape/tape_common_screen.s b/src/kernal/tape/tape_common_screen.s index a1636149..da8f04fe 100644 --- a/src/kernal/tape/tape_common_screen.s +++ b/src/kernal/tape/tape_common_screen.s @@ -19,15 +19,21 @@ tape_screen_on_motor_off: lda COLSTORE sta VIC_EXTCOL -!ifndef CONFIG_MB_M65 { - - jmp screen_on - -} else { +!ifdef CONFIG_MB_M65 { jsr M65_MODEGET +bcs screen_on ; MEGA65 native mode does not have badlines, no need to enable/disable screen rts + +} else ifdef CONFIG_MB_U64 { + + lda NXTBIT + sta U64_TURBOCTL ; restore turbo control settings + jmp screen_on + +} else { + + jmp screen_on } @@ -44,11 +50,7 @@ tape_screen_off_motor_on: lda VIC_EXTCOL sta COLSTORE -!ifndef CONFIG_MB_M65 { - - jsr screen_off - -} else { +!ifdef CONFIG_MB_M65 { jsr M65_MODEGET ; XXX optimize this @@ -56,6 +58,24 @@ tape_screen_off_motor_on: jsr screen_off @1: +} else ifdef CONFIG_MB_U64 { + + lda U64_TURBOCTL + sta NXTBIT + cmp #$FF + beq @1 ; branch if no turbo control available + + lda #$8F ; max speed, no badlines + sta U64_TURBOCTL + bne @2 ; branch always + +@1: + jsr screen_off +@2: + +} else { + + jsr screen_off } jmp tape_motor_on