diff --git a/src/basic/assets/startup_banner_m65.s b/src/basic/assets/startup_banner_m65.s index de9690b6..a09193ed 100644 --- a/src/basic/assets/startup_banner_m65.s +++ b/src/basic/assets/startup_banner_m65.s @@ -69,10 +69,3 @@ startup_banner: // .byte $12,$A0,$A0,$9B,$92,$20,$9A,$7F,$12,$A0,$A0,$9B,$92,$20,$9A,$7F // .byte $12,$DF,$92,$7F,$9B,$20,$9A,$20,$9B,"0.2.0.0",$0D // .byte $0D,$05,$92,$00 - -startup_banner_legacy: - - .text "LEGACY" - .byte $11, $9D, $9D, $9D, $9D, $9D - .text "MODE" - .byte $00 diff --git a/src/basic/basic_commands/cmd_sys.s b/src/basic/basic_commands/cmd_sys.s index 8d151300..f7aba769 100644 --- a/src/basic/basic_commands/cmd_sys.s +++ b/src/basic/basic_commands/cmd_sys.s @@ -30,6 +30,7 @@ cmd_sys: bcs cmd_sys_nsys_common sec jsr M65_MODESET // set legacy C64 compatibility mode + jsr INITMSG_autoswitch // FALLTROUGH diff --git a/src/basic/board_m65/4000.mega65_vectable_basic_1.s b/src/basic/board_m65/4000.mega65_vectable_basic_1.s index 99294c8c..20633a43 100644 --- a/src/basic/board_m65/4000.mega65_vectable_basic_1.s +++ b/src/basic/board_m65/4000.mega65_vectable_basic_1.s @@ -13,21 +13,22 @@ // Label definitions .label VB1__INITMSG = $4000 + 2 * 0 - .label VB1__LINKPRG = $4000 + 2 * 1 - .label VB1__tokenise_line = $4000 + 2 * 2 - .label VB1__list_single_line = $4000 + 2 * 3 - .label VB1__print_packed_error = $4000 + 2 * 4 - .label VB1__print_packed_misc_str = $4000 + 2 * 5 - .label VB1__do_new = $4000 + 2 * 6 - .label VB1__do_clr = $4000 + 2 * 7 - .label VB1__do_restore = $4000 + 2 * 8 - .label VB1__cmd_mem_cont = $4000 + 2 * 9 - .label VB1__cmd_sysinfo = $4000 + 2 * 10 - .label VB1__prepare_direct_execution = $4000 + 2 * 11 - .label VB1__helper_ask_if_sure = $4000 + 2 * 12 + .label VB1__INITMSG_autoswitch = $4000 + 2 * 1 + .label VB1__LINKPRG = $4000 + 2 * 2 + .label VB1__tokenise_line = $4000 + 2 * 3 + .label VB1__list_single_line = $4000 + 2 * 4 + .label VB1__print_packed_error = $4000 + 2 * 5 + .label VB1__print_packed_misc_str = $4000 + 2 * 6 + .label VB1__do_new = $4000 + 2 * 7 + .label VB1__do_clr = $4000 + 2 * 8 + .label VB1__do_restore = $4000 + 2 * 9 + .label VB1__cmd_mem_cont = $4000 + 2 * 10 + .label VB1__cmd_sysinfo = $4000 + 2 * 11 + .label VB1__prepare_direct_execution = $4000 + 2 * 12 + .label VB1__helper_ask_if_sure = $4000 + 2 * 13 #if CONFIG_DOS_WEDGE - .label VB1__wedge_dos = $4000 + 2 * 13 + .label VB1__wedge_dos = $4000 + 2 * 14 #endif #else @@ -35,6 +36,7 @@ // Vector table (Open ROMs private!) .word INITMSG + .word INITMSG_autoswitch .word LINKPRG .word tokenise_line .word list_single_line diff --git a/src/basic/init/e422.initmsg.jmp.s b/src/basic/init/e422.initmsg.jmp.s index 591ed9ac..f0de165f 100644 --- a/src/basic/init/e422.initmsg.jmp.s +++ b/src/basic/init/e422.initmsg.jmp.s @@ -16,8 +16,15 @@ INITMSG: jsr map_BASIC_1 jsr_ind VB1__INITMSG +!: jmp map_NORMAL +INITMSG_autoswitch: + + jsr map_BASIC_1 + jsr_ind VB1__INITMSG_autoswitch + bra !- + #else jmp initmsg_real diff --git a/src/basic/init/initmsg_m65.s b/src/basic/init/initmsg_m65.s index a59a44b7..bbe77b95 100644 --- a/src/basic/init/initmsg_m65.s +++ b/src/basic/init/initmsg_m65.s @@ -9,16 +9,7 @@ INITMSG: - // Clear the screen first, some cartridges (like IEEE-488) are leaving a mess on the screen - - lda #147 - jsr JCHROUT - - // Display main banner - - lda #startup_banner - jsr STROUT + jsr INITMSG_main_banner // Display additional information, depending on the mode @@ -27,34 +18,12 @@ INITMSG: // Legacy C64 compatibility mode - ldx #$02 - ldy #$21 - jsr plot_set + jsr INITMSG_partial - lda #startup_banner_legacy - jsr STROUT - - // Legacy mode - display revision and available memory - - ldx #$05 - ldy #$00 - jsr plot_set - - lda #rom_revision_basic_string - jsr STROUT - - ldx #$05 - ldy #$12 - jsr plot_set - - jsr initmsg_bytes_free - - ldx #$07 - ldy #$00 - jmp plot_set + ldx #IDX__STR_ORS_LEGACY_2 + jsr print_packed_misc_str + bra INITMSG_end !: // Native mode @@ -79,17 +48,54 @@ INITMSG: ldx #IDX__STR_ORS jsr print_packed_misc_str - ldx #IDX__STR_PRE_REV - jsr print_packed_misc_str - - lda #rom_revision_basic_string - jsr STROUT + jsr INITMSG_revision jsr print_return jsr print_return + + // FALLTROUGH + +INITMSG_end: + jsr initmsg_bytes_free ldx #$09 ldy #$00 jmp plot_set + +INITMSG_main_banner: + + // Clear the screen first, some cartridges (like IEEE-488) are leaving a mess on the screen + + lda #147 + jsr JCHROUT + + // Display main banner + + lda #startup_banner + jmp STROUT + +INITMSG_autoswitch: // entry point for 'SYS command' + + jsr INITMSG_main_banner + jsr INITMSG_partial + + jsr print_return + jmp print_return + +INITMSG_partial: + + ldx #IDX__STR_ORS_LEGACY_1 + jsr print_packed_misc_str + + // FALLTROUGH + +INITMSG_revision: + + ldx #IDX__STR_PRE_REV + jsr print_packed_misc_str + + lda #rom_revision_basic_string + jmp STROUT diff --git a/tools/generate_strings.cc b/tools/generate_strings.cc index c7f9e128..73d605fd 100644 --- a/tools/generate_strings.cc +++ b/tools/generate_strings.cc @@ -284,43 +284,44 @@ const StringEntryList GLOBAL_Errors = { ListType::STRINGS_BASIC, "errors", const StringEntryList GLOBAL_MiscStrings = { ListType::STRINGS_BASIC, "misc", { // STD M65 U64 X16 --- misc strings as on CBM machines - { true, true, true, true, "STR_RET_QM", "\r?" }, - { true, true, true, true, "STR_BYTES", " BASIC BYTES FREE" }, // https://github.com/stefanhaustein/expressionparser - { true, true, true, true, "STR_READY", "\rREADY.\r" }, // https://www.ibm.com/support/knowledgecenter/zosbasics/com.ibm.zos.zconcepts/zconc_whatistsonative.htm https://github.com/stefanhaustein/expressionparser - { true, true, true, true, "STR_ERROR", " ERROR" }, // simply the word error that is attached to the other parts of messages https://fjkraan.home.xs4all.nl/comp/apple2faq/app2asoftfaq.html - { true, true, true, true, "STR_IN", " IN " }, - { false, true, false, false, "STR_IF_SURE", "\rARE YOU SURE? " }, // https://docs.microsoft.com/en-us/windows/win32/uxguide/mess-confirm + { true, true, true, true, "STR_RET_QM", "\r?" }, + { true, true, true, true, "STR_BYTES", " BASIC BYTES FREE" }, // https://github.com/stefanhaustein/expressionparser + { true, true, true, true, "STR_READY", "\rREADY.\r" }, // https://www.ibm.com/support/knowledgecenter/zosbasics/com.ibm.zos.zconcepts/zconc_whatistsonative.htm https://github.com/stefanhaustein/expressionparser + { true, true, true, true, "STR_ERROR", " ERROR" }, // simply the word error that is attached to the other parts of messages https://fjkraan.home.xs4all.nl/comp/apple2faq/app2asoftfaq.html + { true, true, true, true, "STR_IN", " IN " }, + { false, true, false, false, "STR_IF_SURE", "\rARE YOU SURE? " }, // https://docs.microsoft.com/en-us/windows/win32/uxguide/mess-confirm // STD M65 U64 X16 --- misc strings specific to Open ROMs, not present in CBM ROMs - { true, true, true, true, "STR_BRK_AT", "\rBRK AT $" }, + { true, true, true, true, "STR_BRK_AT", "\rBRK AT $" }, - { false, true, false, false, "STR_ORS", "OPEN ROMS BASIC & KERNAL\r" }, + { false, true, false, false, "STR_ORS", "OPEN ROMS BASIC & KERNAL\r" }, + { false, true, false, false, "STR_ORS_LEGACY_1", "OPEN ROMS " }, + { false, true, false, false, "STR_ORS_LEGACY_2", "\r\rLEGACY MODE " }, - { false, true, false, false, "STR_MEM_HDR", "\r\x12 AREA START SIZE \r" }, - { false, true, false, false, "STR_MEM_1", " $" }, - { false, true, false, false, "STR_MEM_2", " " }, - { false, true, false, false, "STR_MEM_TEXT", "\r TEXT" }, - { false, true, false, false, "STR_MEM_VARS", "\r VARS" }, - { false, true, false, false, "STR_MEM_ARRS", "\r ARRS" }, - { false, true, false, false, "STR_MEM_STRS", "\r STRS" }, - { false, true, false, false, "STR_MEM_FREE", "\r\r FREE" }, - - { false, true, false, false, "STR_SI_HEADER", "OPEN ROMS, " }, - { false, true, false, false, "STR_SI_MODE64", "LEGACY MODE" }, - { false, true, false, false, "STR_SI_MODE65", "NATIVE MODE" }, - { false, true, false, false, "STR_SI_HDR_REL", "\rRELEASE " }, - { false, true, false, false, "STR_SI_HDR_HW", "BOARD : " }, - { false, true, false, false, "STR_SI_HW_01", "MEGA65 R1" }, - { false, true, false, false, "STR_SI_HW_02", "MEGA65 R2" }, - { false, true, false, false, "STR_SI_HW_03", "MEGA65 R3" }, - { false, true, false, false, "STR_SI_HW_21", "MEGAPHONE R1" }, - { false, true, false, false, "STR_SI_HW_40", "NEXYS4 PSRAM" }, - { false, true, false, false, "STR_SI_HW_41", "NEXYS4 DDR" }, - { false, true, false, false, "STR_SI_HW_42", "NEXYS4 DDR WIDGET" }, - { false, true, false, false, "STR_SI_HW_FD", "WUKONG A100T" }, - { false, true, false, false, "STR_SI_HW_FE", "SIMULATION VHDL" }, - { false, true, false, false, "STR_SI_HW_XX", "UNKNOWN ID $" }, - { false, true, false, false, "STR_SI_HDR_VID", "\rVIDEO : " }, + { false, true, false, false, "STR_MEM_HDR", "\r\x12 AREA START SIZE \r" }, + { false, true, false, false, "STR_MEM_1", " $" }, + { false, true, false, false, "STR_MEM_2", " " }, + { false, true, false, false, "STR_MEM_TEXT", "\r TEXT" }, + { false, true, false, false, "STR_MEM_VARS", "\r VARS" }, + { false, true, false, false, "STR_MEM_ARRS", "\r ARRS" }, + { false, true, false, false, "STR_MEM_STRS", "\r STRS" }, + { false, true, false, false, "STR_MEM_FREE", "\r\r FREE" }, + { false, true, false, false, "STR_SI_HEADER", "OPEN ROMS, " }, + { false, true, false, false, "STR_SI_MODE64", "LEGACY MODE" }, + { false, true, false, false, "STR_SI_MODE65", "NATIVE MODE" }, + { false, true, false, false, "STR_SI_HDR_REL", "\rRELEASE " }, + { false, true, false, false, "STR_SI_HDR_HW", "BOARD : " }, + { false, true, false, false, "STR_SI_HW_01", "MEGA65 R1" }, + { false, true, false, false, "STR_SI_HW_02", "MEGA65 R2" }, + { false, true, false, false, "STR_SI_HW_03", "MEGA65 R3" }, + { false, true, false, false, "STR_SI_HW_21", "MEGAPHONE R1" }, + { false, true, false, false, "STR_SI_HW_40", "NEXYS4 PSRAM" }, + { false, true, false, false, "STR_SI_HW_41", "NEXYS4 DDR" }, + { false, true, false, false, "STR_SI_HW_42", "NEXYS4 DDR WIDGET" }, + { false, true, false, false, "STR_SI_HW_FD", "WUKONG A100T" }, + { false, true, false, false, "STR_SI_HW_FE", "SIMULATION VHDL" }, + { false, true, false, false, "STR_SI_HW_XX", "UNKNOWN ID $" }, + { false, true, false, false, "STR_SI_HDR_VID", "\rVIDEO : " }, // Note: depending on configuration, additional strings will be added here } };