From a9b6c6a8b10d574dc7d43c84f1ea2f38c4ba029d Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Wed, 20 Jan 2021 18:00:09 +0100 Subject: [PATCH] more work towards disk operations in monitor --- src/kernal/board_m65/mega65_proxies_monitor.s | 11 ++ src/mon_m65/imports.s | 9 +- src/mon_m65/mon_command_jmp_jsr.s | 3 + src/mon_m65/mon_command_load_save.s | 158 ++++++++---------- src/mon_m65/mon_helper_memory.s | 1 + 5 files changed, 96 insertions(+), 86 deletions(-) diff --git a/src/kernal/board_m65/mega65_proxies_monitor.s b/src/kernal/board_m65/mega65_proxies_monitor.s index 0a2f9f95..6baeea29 100644 --- a/src/kernal/board_m65/mega65_proxies_monitor.s +++ b/src/kernal/board_m65/mega65_proxies_monitor.s @@ -24,6 +24,17 @@ proxy_M1_end: jmp map_MON_1 +proxy_M1_JLOAD: + + jsr map_NORMAL + jsr JLOAD + bra proxy_M1_end + +proxy_M1_JSAVE: + + jsr map_NORMAL + jsr JSAVE + bra proxy_M1_end ; Memory acccess routines diff --git a/src/mon_m65/imports.s b/src/mon_m65/imports.s index 94510187..d9c7cb68 100644 --- a/src/mon_m65/imports.s +++ b/src/mon_m65/imports.s @@ -10,14 +10,19 @@ ;; #ALIAS# SCREEN = KERNAL_0.SCREEN ;; #ALIAS# SELDEV = KERNAL_0.SELDEV +;; #ALIAS# CHRIN = KERNAL_0.proxy_M1_CHRIN +;; #ALIAS# CHROUT = KERNAL_0.proxy_M1_CHROUT + +;; #ALIAS# LOAD = KERNAL_0.proxy_M1_JLOAD +;; #ALIAS# SAVE = KERNAL_0.proxy_M1_JSAVE + ;; #ALIAS# monitor_exit = KERNAL_0.m65_shadow_BZP ;; #ALIAS# monitor_memread_helper = KERNAL_0.proxy_M1_memread ;; #ALIAS# monitor_memwrite_helper = KERNAL_0.proxy_M1_memwrite ;; #ALIAS# monitor_jmpout = KERNAL_0.proxy_M1_jmpout ;; #ALIAS# monitor_jmpout_ret = KERNAL_0.proxy_M1_jmpout_ret -;; #ALIAS# CHRIN = KERNAL_0.proxy_M1_CHRIN -;; #ALIAS# CHROUT = KERNAL_0.proxy_M1_CHROUT +;; #ALIAS# m65_shadow_BZP = KERNAL_0.m65_shadow_BZP ;; #ALIAS# wedge_dos_monitor = BASIC_0.wedge_dos_monitor diff --git a/src/mon_m65/mon_command_jmp_jsr.s b/src/mon_m65/mon_command_jmp_jsr.s index fe7cdf04..dfbe7167 100644 --- a/src/mon_m65/mon_command_jmp_jsr.s +++ b/src/mon_m65/mon_command_jmp_jsr.s @@ -66,10 +66,13 @@ Mon_Go_JSR_comon: lda ZR pha + jsr m65_shadow_BZP jmp monitor_jmpout Mon_JSR_ret: + jsr m65_shadow_BZP + ; Retrieve registers pha diff --git a/src/mon_m65/mon_command_load_save.s b/src/mon_m65/mon_command_load_save.s index 3e2f41a0..1ab93c9f 100644 --- a/src/mon_m65/mon_command_load_save.s +++ b/src/mon_m65/mon_command_load_save.s @@ -32,8 +32,11 @@ Load_Save: ; Separate flow for SAVE lda VERCKK - cmp #$02 + cmp #'S' beq Mon_Save + sec + sbc #'L' + sta VERCKK ; 0 for load, other value for verify ; FALLTROUGH @@ -52,10 +55,37 @@ Mon_Load_Verify: @got_unit: - ; XXX to be finished + ; Determine start address - jmp Main + lda #$00 + sta Addr_Mode + jsr Get_Val_To_LAC + beq @no_startaddr + lda Addr_Mode + +bne Mon_Error + ; Load/Verify with fixed start address + + ldx Long_AC+0 + ldy Long_AC+1 + + lda #$00 + +skip_2_bytes_trash_nvz + +@no_startaddr: + + ; Load/Verify without fixed start address + + lda #$01 + +@load: + + sta SA + lda VERCKK + jsr m65_shadow_BZP + jsr LOAD + + bra Mon_Load_Save_Common Mon_Save: @@ -64,89 +94,49 @@ Mon_Save: jsr Get_Val_To_LAC +beq Mon_Error jsr Syntax_Byte_AC + lda Long_AC+0 + sta FA + ; Determine start address + lda #$00 + sta Addr_Mode + jsr Get_Val_To_LAC + +bne Mon_Error + lda Addr_Mode + +bne Mon_Error - ; XXX to be finished + lda Long_AC+1 + pha + lda Long_AC+0 + pha + + ; Determine end address + + jsr Get_Val_To_LAC + +bne Mon_Error + lda Addr_Mode + +bne Mon_Error + + inw Long_AC+0 + ldx Long_AC+0 + ldy Long_AC+1 + + jsr m65_shadow_BZP + pla ; set start address for SAVE + sta TXTTAB+0 + pla + sta TXTTAB+1 + lda #TXTTAB + + jsr SAVE + + ; FALLTROUGH + +Mon_Load_Save_Common: + + jsr m65_shadow_BZP + + ; XXX to be finished - check for errors jmp Main - - - - - ; LDY #8 - ; STY SA - ; LDY #0 - ; STY BA - ; STY FNLEN - ; STY FNBANK - ; STY IOSTATUS - ; LDA #>Mon_Data - ; STA FNADR+1 - ; LDA # load/verify - ; JSR Print_CR - ; LDX Long_AC ; X/Y = end address - ; LDY Long_AC+1 - ; LDA VERCKK ; A = load/verify/save - ; CMP #'S' - ; LBNE Mon_Error ; must be Save - ; LDA #0 - ; STA SA ; set SA for PRG - ; LDA #Long_PC ; Long_PC = start address - ; JSR SAVE -; @exit JMP Main - -; @do LDA VERCKK - ; CMP #'V' ; Verify - ; BEQ @exec - ; CMP #'L' ; Load - ; LBNE Mon_Error - ; LDA #0 ; 0 = LOAD -; @exec JSR LOAD ; A == 0 : LOAD else VERIFY - ; BBR4 IOSTATUS,@exit - ; LDA VERCKK - ; LBEQ Mon_Error - ; LBCS Main - ; JSR PRIMM - ; !pet " error",0 - ; JMP Main - -; @load LDX Long_PC - ; LDY Long_PC+1 - ; LDA #0 ; 0 = use X/Y as load address - ; STA SA ; and ignore load address from file - ; BRA @do diff --git a/src/mon_m65/mon_helper_memory.s b/src/mon_m65/mon_helper_memory.s index 2a840445..01af1ab1 100644 --- a/src/mon_m65/mon_helper_memory.s +++ b/src/mon_m65/mon_helper_memory.s @@ -1,6 +1,7 @@ ; Monitor helper code - memory read and write + Get_From_Memory_LAC: jsr Exchange_LAC_LPC