Use BI's general purposes buffer in PATH, and assume it's byte aligned

Also, use BI's GOSYSTEM in PATH since it's using BI structs anyway.
This commit is contained in:
Joshua Bell 2021-04-15 19:12:04 -07:00
parent e20c65853d
commit 827d121ef2
3 changed files with 23 additions and 29 deletions

View File

@ -92,9 +92,7 @@ rts1: rts
bpl :- bpl :-
;; Open FN1 ;; Open FN1
lda HIMEM ; Use BI's general purpose buffer lda HIMEM+1 ; Use BI's general purpose buffer (page aligned)
sta OSYSBUF
lda HIMEM+1
sta OSYSBUF+1 sta OSYSBUF+1
lda #OPEN lda #OPEN
jsr GOSYSTEM jsr GOSYSTEM

44
path.s
View File

@ -254,7 +254,7 @@ sloop: lda (tptr),y ; Scan table looking for a high bit set
inc tptr+1 inc tptr+1
: asl : asl
bcc sloop ; High bit clear, keep looking bcc sloop ; High bit clear, keep looking
lda (tptr),y ; End of table? lda (tptr),y ; End of table?
bne next_char ; Nope, check for a match bne next_char ; Nope, check for a match
beq maybe_invoke beq maybe_invoke
@ -335,7 +335,8 @@ notok: dey
;; Check to see if path exists. ;; Check to see if path exists.
lda #$A ; param length lda #$A ; param length
sta SSGINFO sta SSGINFO
MLI_CALL GET_FILE_INFO, SSGINFO lda #GET_FILE_INFO
jsr GOSYSTEM
bne compose ; no such file - try next path directory bne compose ; no such file - try next path directory
;; Check to see if type is CMD. ;; Check to see if type is CMD.
@ -360,17 +361,14 @@ notok: dey
dex dex
bpl :- bpl :-
;; Reserve buffer for I/O ;; Use BI general purpose buffer for I/O (page aligned)
lda #4 lda HIMEM+1
jsr GETBUFR sta OSYSBUF+1
bcc :+
lda #$C ; NO BUFFERS AVAILABLE
rts
: sta OSYSBUF+1
;; Now try to open/read/close and invoke it ;; Now try to open/read/close and invoke it
MLI_CALL OPEN, SOPEN lda #OPEN
bne fail_load jsr GOSYSTEM
bcs fail_load
lda OREFNUM lda OREFNUM
sta RWREFNUM sta RWREFNUM
@ -385,11 +383,16 @@ notok: dey
lda #>max_cmd_size lda #>max_cmd_size
sta RWCOUNT+1 sta RWCOUNT+1
MLI_CALL READ, SREAD lda #READ
bne fail_load jsr GOSYSTEM
php ; save C in case it signals failure
pha ; if so, A has error code
MLI_CALL CLOSE, SCLOSE lda #CLOSE ; always close
jsr FREEBUFR jsr GOSYSTEM
pla
plp
bcs fail_load
;; Restore INBUF now that MLI/BI work is done. ;; Restore INBUF now that MLI/BI work is done.
ldx #$7F ldx #$7F
@ -398,18 +401,13 @@ notok: dey
dex dex
bpl :- bpl :-
;; Invoke command ;; Invoke command, allow it to return to BASIC.SYSTEM
jsr cmd_load_addr jmp cmd_load_addr
rts ; Return to BASIC.SYSTEM
fail_load: fail_load:
jsr FREEBUFR rts
reloc_point *+2
jmp fail_invoke
;;; ============================================================ ;;; ============================================================
;;; ============================================================
execute: execute:
;; Verify required arguments ;; Verify required arguments

View File

@ -60,9 +60,7 @@ execute:
rts1: rts rts1: rts
: :
;; Open the file ;; Open the file
lda HIMEM ; Use BI's buffer above HIMEM lda HIMEM+1 ; Use BI's general purpose buffer (page aligned)
sta OSYSBUF
lda HIMEM+1
sta OSYSBUF+1 sta OSYSBUF+1
lda #OPEN lda #OPEN
jsr GOSYSTEM jsr GOSYSTEM