started work on monitor disc commands

This commit is contained in:
FeralChild64 committed 2021-01-19 22:44:38 +01:00
1 parent e93d018a51
commit 7885e53d74
4 files changed
+154 -87

No files matched your search

+1 -1
View File
@@ -122,7 +122,7 @@
!addr FNLEN = $B7 ; current file name length
!addr LA = $B8 ; current logical_file number
!addr SA = $B9 ; current secondary address
!addr FA = $BA ; current device number
!addr FA = $BA ; current unit number
!addr FNADDR = $BB ; $BB-$BC current file name pointer
!addr ROPRTY = $BD ; -- NOT IMPLEMENTED -- tape / RS-232 temporary storage
!addr FSBLK = $BE ; -- NOT IMPLEMENTED -- tape / RS-232 temporary storage
-86
View File
@@ -469,92 +469,6 @@ Dump_Row:
PLZ
RTS
; ********
Load_Save:
; ********
; XXX to be rewritten for Open ROMs!
jmp Main
; LDY Disk_Unit
; STY FA
; LDY #8
; STY SA
; LDY #0
; STY BA
; STY FNLEN
; STY FNBANK
; STY IOSTATUS
; LDA #>Mon_Data
; STA FNADR+1
; LDA #<Mon_Data
; STA FNADR
; @skip JSR Get_Char ; skip blanks
; LBEQ Mon_Error
; CMP #' '
; BEQ @skip
; CMP #KEY_QUOTE ; must be quote
; LBNE Mon_Error
; LDX Buf_Index
; @copyfn LDA BUF,X ; copy filename
; BEQ @do ; no more input
; INX
; CMP #KEY_QUOTE
; BEQ @unit ; end of filename
; STA (FNADR),Y ; store to filename
; INC FNLEN
; INY
; CPY #19 ; max = 16 plus prefix "@0:"
; BCC @copyfn
; JMP Mon_Error ; filename too long
; @unit STX Buf_Index ; update read position
; JSR Get_Char
; BEQ @do ; no more parameter
; JSR Get_LAC
; BCS @do
; LDA Long_AC ; unit #
; STA FA
; JSR Get_LAC
; BCS @do
; JSR LAC_To_LPC ; Long_PC = start address
; STA BA ; Bank
; JSR Get_LAC ; Long_AC = end address + 1
; BCS @load ; no end address -> 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
; ***********
Mon_Assemble:
; ***********
+1
View File
@@ -8,6 +8,7 @@
;; #ALIAS# SETMSG = KERNAL_0.SETMSG
;; #ALIAS# STOP = KERNAL_0.STOP
;; #ALIAS# SCREEN = KERNAL_0.SCREEN
;; #ALIAS# SELDEV = KERNAL_0.SELDEV
;; #ALIAS# monitor_exit = KERNAL_0.m65_shadow_BZP
;; #ALIAS# monitor_memread_helper = KERNAL_0.proxy_M1_memread
+152
View File
@@ -0,0 +1,152 @@
; Based on BSM (Bit Shifter's Monitor)
Load_Save:
; Retrieve file name
@skip1:
jsr Get_Char
+beq Mon_Error
cmp #' '
beq @skip1
cmp #KEY_QUOTE
+bne Mon_Error
lda #$FF
sta FNLEN
lda Buf_Index
sta FNADDR+0
lda #>BUF
sta FNADDR+1
@skip2:
inc FNLEN
jsr Get_Char
+beq Mon_Error
cmp #KEY_QUOTE
bne @skip2
; Separate flow for SAVE
lda VERCKK
cmp #$02
beq Mon_Save
; FALLTROUGH
Mon_Load_Verify:
; Determine unit
jsr SELDEV ; set default unit
stx FA
jsr Get_Val_To_LAC
beq @got_unit
jsr Syntax_Byte_AC
lda Long_AC+0
sta FA
@got_unit:
; XXX to be finished
jmp Main
Mon_Save:
; Determine unit
jsr Get_Val_To_LAC
+beq Mon_Error
jsr Syntax_Byte_AC
; XXX to be finished
jmp Main
; LDY #8
; STY SA
; LDY #0
; STY BA
; STY FNLEN
; STY FNBANK
; STY IOSTATUS
; LDA #>Mon_Data
; STA FNADR+1
; LDA #<Mon_Data
; STA FNADR
; @skip JSR Get_Char ; skip blanks
; LBEQ Mon_Error
; CMP #' '
; BEQ @skip
; CMP #KEY_QUOTE ; must be quote
; LBNE Mon_Error
; LDX Buf_Index
; @copyfn LDA BUF,X ; copy filename
; BEQ @do ; no more input
; INX
; CMP #KEY_QUOTE
; BEQ @unit ; end of filename
; STA (FNADR),Y ; store to filename
; INC FNLEN
; INY
; CPY #19 ; max = 16 plus prefix "@0:"
; BCC @copyfn
; JMP Mon_Error ; filename too long
; @unit STX Buf_Index ; update read position
; JSR Get_Char
; BEQ @do ; no more parameter
; JSR Get_LAC
; BCS @do
; LDA Long_AC ; unit #
; STA FA
; JSR Get_LAC
; BCS @do
; JSR LAC_To_LPC ; Long_PC = start address
; STA BA ; Bank
; JSR Get_LAC ; Long_AC = end address + 1
; BCS @load ; no end address -> 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