From 9ccd94b36ed3214fc69d7b26cde7e7c05cfe891e Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Wed, 13 Jan 2021 23:05:30 +0100 Subject: [PATCH] DOS Wedge now fully works from within the MONITOR --- src/basic/,basic_aliases.s | 5 ++-- .../board_m65/4000.mega65_vectable_basic_1.s | 2 +- src/basic/board_m65/mega65_imports.s | 1 + src/basic/board_m65/mega65_proxies.s | 7 +++++ src/basic/engine_runtime/do_error.s | 18 ++++++++++++ src/basic/wedge/wedge_dos.s | 28 ++++++++++++++----- src/mon_m65/bsmon.s | 3 +- 7 files changed, 52 insertions(+), 12 deletions(-) diff --git a/src/basic/,basic_aliases.s b/src/basic/,basic_aliases.s index e98ffc1e..5a03a2a4 100644 --- a/src/basic/,basic_aliases.s +++ b/src/basic/,basic_aliases.s @@ -26,9 +26,8 @@ ; Helper aliases for DOS Wedge under MONITOR ; -!addr __wedge_mon = $0A ; VERCKB -!addr __wedge_spstore = $09 ; TRMPOS - +!addr __wedge_mon = $0A ; VERCKB +!addr __wedge_spstore = $09 ; TRMPOS ; ; Aliases for the tokeniser - reuse the CPU stack 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 da8cc963..bbfa50cc 100644 --- a/src/basic/board_m65/4000.mega65_vectable_basic_1.s +++ b/src/basic/board_m65/4000.mega65_vectable_basic_1.s @@ -28,7 +28,7 @@ !addr VB1__helper_ask_if_sure = $4000 + 2 * 13 !addr VB1__helper_eggshell = $4000 + 2 * 14 !addr VB1__wedge_dos = $4000 + 2 * 15 - !addr VB1__wedge_dos_monitor = $4000 + 2 * 15 + !addr VB1__wedge_dos_monitor = $4000 + 2 * 16 } else { diff --git a/src/basic/board_m65/mega65_imports.s b/src/basic/board_m65/mega65_imports.s index af9facea..999391b6 100644 --- a/src/basic/board_m65/mega65_imports.s +++ b/src/basic/board_m65/mega65_imports.s @@ -41,6 +41,7 @@ ;; #ALIAS# do_error_fetch = BASIC_0.do_error_fetch ;; #ALIAS# do_basic_error = BASIC_0.do_basic_error ;; #ALIAS# str_rev_question = BASIC_0.str_rev_question +;; #ALIAS# do_error_print_only = BASIC_0.proxy_B1_do_error_print_only ;; #ALIAS# fetch_character = BASIC_0.proxy_B1_fetch_character ;; #ALIAS# fetch_character_skip_spaces = BASIC_0.proxy_B1_fetch_character_skip_spaces ;; #ALIAS# fetch_uint8 = BASIC_0.proxy_B1_fetch_uint8 diff --git a/src/basic/board_m65/mega65_proxies.s b/src/basic/board_m65/mega65_proxies.s index c10cb70b..fd0ecb06 100644 --- a/src/basic/board_m65/mega65_proxies.s +++ b/src/basic/board_m65/mega65_proxies.s @@ -138,4 +138,11 @@ proxy_B1_shell_main_loop: jsr map_NORMAL jmp shell_main_loop + +proxy_B1_do_error_print_only: + + jsr map_NORMAL + jsr do_error_print_only + bra proxy_B1_end_2 + } diff --git a/src/basic/engine_runtime/do_error.s b/src/basic/engine_runtime/do_error.s index 068f8504..3d9735ab 100644 --- a/src/basic/engine_runtime/do_error.s +++ b/src/basic/engine_runtime/do_error.s @@ -200,6 +200,7 @@ do_basic_error: ; error code in .X +phx_trash_a jsr tmpstr_free_all + ldx #IDX__STR_RET_QM jsr print_packed_misc_str +plx_trash_a @@ -233,4 +234,21 @@ do_basic_error: ; error code in .X jmp shell_main_loop +!ifdef CONFIG_MB_M65 { + +do_error_print_only: ; used by DOS Wedge + + +phx_trash_a + lda #'?' + jsr JCHROUT + +plx_trash_a + + jsr print_packed_error + + ldx #IDX__STR_ERROR + jmp print_packed_misc_str +} + + + } ; ROM layout diff --git a/src/basic/wedge/wedge_dos.s b/src/basic/wedge/wedge_dos.s index 675f58f8..7fc3085f 100644 --- a/src/basic/wedge/wedge_dos.s +++ b/src/basic/wedge/wedge_dos.s @@ -199,7 +199,11 @@ wedge_dos_change_drive: pla sta FA +!ifdef CONFIG_MB_M65 { + jmp wedge_dos_wrapper_exit +} else { jmp shell_main_loop +} wedge_dos_status_get: @@ -447,27 +451,37 @@ wedge_dos_wrapper_exit_nocheck: wedge_dos_wrapper_SYNTAX_error: bbr7 __wedge_mon, wedge_dos_SYNTAX_error - - ; XXX + ldx #$0A + bra wedge_dos_wrapper_error_common wedge_dos_wrapper_ILLEGAL_DEVICE_NUMBER_error: bbr7 __wedge_mon, wedge_dos_ILLEGAL_DEVICE_NUMBER_error - - ; XXX + ldx #$08 + bra wedge_dos_wrapper_error_common wedge_dos_wrapper_OVERFLOW_error: bbr7 __wedge_mon, wedge_dos_OVERFLOW_error - - ; XXX + ldx #$0E + bra wedge_dos_wrapper_error_common wedge_dos_wrapper_kernal_error: bbr7 __wedge_mon, wedge_dos_kernal_error + tax + bne @1 + ldx #$1E ; BREAK error + 1 +@1: + dex - ; XXX + ; FALLTROUGH +wedge_dos_wrapper_error_common: + + ; Print error - within the MONITOR + + jsr do_error_print_only bra wedge_dos_wrapper_exit_nocheck wedge_dos_SYNTAX_error: diff --git a/src/mon_m65/bsmon.s b/src/mon_m65/bsmon.s index 5072fab0..fc62afe8 100644 --- a/src/mon_m65/bsmon.s +++ b/src/mon_m65/bsmon.s @@ -201,7 +201,7 @@ Jump_Table: !word Mon_Register ; R !word Mon_Transfer ; T XXX to be debugged/adapted !word Mon_Exit ; X - !word Mon_DOS ; @ XXX to be debugged/adapted + !word Mon_DOS ; @ !word Mon_Assemble ; . XXX to be debugged/adapted !word Mon_Set_Memory ; > XXX to be debugged/adapted !word Mon_Set_Register ; ; XXX to be debugged/adapted @@ -2025,6 +2025,7 @@ Mon_DOS: ; ****** JSR wedge_dos_monitor + JSR Print_CR JMP Main