From d1bc38694dc2a5a0d23ae777bb79b2462b541a98 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Wed, 26 Feb 2020 22:20:53 +0100 Subject: [PATCH] packed string support moved to Mega65 extra ROM segment --- c64/basic/assets/packed_chars.s | 3 ++- c64/basic/assets/packed_keywords.s | 3 ++- c64/basic/assets/packed_tokens.s | 3 ++- c64/basic/assets/packed_words.s | 3 ++- c64/basic/basic_do_error.s | 6 ++++++ c64/basic/board_m65/4000.mega65_vectable_basic_1.s | 6 +++++- c64/basic/board_m65/mega65_imports.s | 4 +--- c64/basic/board_m65/mega65_proxies.s | 7 ------- c64/basic/pack_word.s | 3 ++- c64/basic/print/print_packed_message.s | 14 +++++++++++++- c64/basic/tokenise_line.s | 13 ++++++++++++- 11 files changed, 47 insertions(+), 18 deletions(-) diff --git a/c64/basic/assets/packed_chars.s b/c64/basic/assets/packed_chars.s index 16ed8b6e..985ca369 100644 --- a/c64/basic/assets/packed_chars.s +++ b/c64/basic/assets/packed_chars.s @@ -1,5 +1,6 @@ // #LAYOUT# STD * #TAKE -// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# M65 BASIC_1 #TAKE +// #LAYOUT# X16 BASIC_0 #TAKE // #LAYOUT# * * #IGNORE packed_message_chars: diff --git a/c64/basic/assets/packed_keywords.s b/c64/basic/assets/packed_keywords.s index f62bd5a5..82229cde 100644 --- a/c64/basic/assets/packed_keywords.s +++ b/c64/basic/assets/packed_keywords.s @@ -1,5 +1,6 @@ // #LAYOUT# STD * #TAKE -// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# M65 BASIC_1 #TAKE +// #LAYOUT# X16 BASIC_0 #TAKE // #LAYOUT# * * #IGNORE packed_keywords: diff --git a/c64/basic/assets/packed_tokens.s b/c64/basic/assets/packed_tokens.s index 574907ca..0a2709a2 100644 --- a/c64/basic/assets/packed_tokens.s +++ b/c64/basic/assets/packed_tokens.s @@ -1,5 +1,6 @@ // #LAYOUT# STD * #TAKE -// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# M65 BASIC_1 #TAKE +// #LAYOUT# X16 BASIC_0 #TAKE // #LAYOUT# * * #IGNORE packed_message_tokens: diff --git a/c64/basic/assets/packed_words.s b/c64/basic/assets/packed_words.s index 49fcf0b9..515892e6 100644 --- a/c64/basic/assets/packed_words.s +++ b/c64/basic/assets/packed_words.s @@ -1,5 +1,6 @@ // #LAYOUT# STD * #TAKE -// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# M65 BASIC_1 #TAKE +// #LAYOUT# X16 BASIC_0 #TAKE // #LAYOUT# * * #IGNORE packed_message_words: diff --git a/c64/basic/basic_do_error.s b/c64/basic/basic_do_error.s index 084a8bea..f4f21fd4 100644 --- a/c64/basic/basic_do_error.s +++ b/c64/basic/basic_do_error.s @@ -5,9 +5,15 @@ // Computes Mapping the 64 p93 basic_do_error: + // Save error number phx_trash_a +#if ROM_LAYOUT_M65 + // Restore normal memory map + jsr map_NORMAL +#endif + // Print ? at start jsr print_return lda #$3F diff --git a/c64/basic/board_m65/4000.mega65_vectable_basic_1.s b/c64/basic/board_m65/4000.mega65_vectable_basic_1.s index 52769961..46c49a83 100644 --- a/c64/basic/board_m65/4000.mega65_vectable_basic_1.s +++ b/c64/basic/board_m65/4000.mega65_vectable_basic_1.s @@ -12,13 +12,17 @@ // Label definitions .label VB1__INITMSG = $4000 + 2 * 0 - .label VB1__list_single_line = $4000 + 2 * 1 + .label VB1__tokenise_line = $4000 + 2 * 1 + .label VB1__list_single_line = $4000 + 2 * 2 + .label VB1__print_packed_message = $4000 + 2 * 3 #else // Vector table (OpenROMs private!) .word INITMSG + .word tokenise_line .word list_single_line + .word print_packed_message #endif diff --git a/c64/basic/board_m65/mega65_imports.s b/c64/basic/board_m65/mega65_imports.s index c89a7161..e611cab3 100644 --- a/c64/basic/board_m65/mega65_imports.s +++ b/c64/basic/board_m65/mega65_imports.s @@ -12,11 +12,8 @@ .label JCHROUT = BASIC_0.proxy_B1_JCHROUT .label plot_set = KERNAL_0.plot_set .label basic_do_new = BASIC_0.proxy_B1_basic_do_new -.label packed_keywords = BASIC_0.packed_keywords -.label packed_word_search = BASIC_0.packed_word_search .label rom_revision_basic_string = BASIC_0.rom_revision_basic_string .label print_integer = BASIC_0.proxy_B1_print_integer -.label print_packed_message = BASIC_0.proxy_B1_print_packed_message .label print_return = BASIC_0.proxy_B1_print_return .label print_space = BASIC_0.proxy_B1_print_space #if CONFIG_SHOW_PAL_NTSC @@ -25,3 +22,4 @@ #if CONFIG_SHOW_FEATURES .label print_features = BASIC_0.proxy_B1_print_features #endif +.label do_STRING_TOO_LONG_error = BASIC_0.do_STRING_TOO_LONG_error diff --git a/c64/basic/board_m65/mega65_proxies.s b/c64/basic/board_m65/mega65_proxies.s index 14d898cd..f6f2fbf7 100644 --- a/c64/basic/board_m65/mega65_proxies.s +++ b/c64/basic/board_m65/mega65_proxies.s @@ -38,13 +38,6 @@ proxy_B1_print_integer: jmp map_BASIC_1 -proxy_B1_print_packed_message: - - jsr map_NORMAL - jsr print_packed_message - jmp map_BASIC_1 - - proxy_B1_print_return: jsr map_NORMAL diff --git a/c64/basic/pack_word.s b/c64/basic/pack_word.s index 5b8e502e..d975ca38 100644 --- a/c64/basic/pack_word.s +++ b/c64/basic/pack_word.s @@ -1,5 +1,6 @@ // #LAYOUT# STD * #TAKE -// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# M65 BASIC_1 #TAKE +// #LAYOUT# X16 BASIC_0 #TAKE // #LAYOUT# * * #IGNORE // Pack a word using the simple compression scheme. diff --git a/c64/basic/print/print_packed_message.s b/c64/basic/print/print_packed_message.s index 8aba8b25..7a062e6a 100644 --- a/c64/basic/print/print_packed_message.s +++ b/c64/basic/print/print_packed_message.s @@ -1,5 +1,6 @@ // #LAYOUT# STD * #TAKE -// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# M65 * #TAKE +// #LAYOUT# X16 BASIC_0 #TAKE // #LAYOUT# * * #IGNORE // This routine prints messages that have been packed @@ -17,6 +18,14 @@ print_packed_message: // .X = message number +#if (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) + + jsr map_BASIC_1 + jsr_ind VB1__print_packed_message + jmp map_NORMAL + +#else + lda #$ff ldy #$ff packed_message_search: @@ -230,3 +239,6 @@ is_uncommon_char: phy_trash_a jmp has_nybl + + +#endif // ROM layout diff --git a/c64/basic/tokenise_line.s b/c64/basic/tokenise_line.s index 0c54eed7..0678658b 100644 --- a/c64/basic/tokenise_line.s +++ b/c64/basic/tokenise_line.s @@ -1,5 +1,6 @@ // #LAYOUT# STD * #TAKE -// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# M65 * #TAKE +// #LAYOUT# X16 BASIC_0 #TAKE // #LAYOUT# * * #IGNORE // Tokenise a line of BASIC @@ -8,6 +9,14 @@ tokenise_line: +#if (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) + + jsr map_BASIC_1 + jsr_ind VB1__tokenise_line + jmp map_NORMAL + +#else + // We need to consider each offset in the string to see if it matches // a token. No BASIC keyword is > 7 bytes, so we need to start with that // length (or remaining length of string) and count our way back down. @@ -270,3 +279,5 @@ done_searching_for_token: sec lda #$00 rts + +#endif // ROM layout