2018-12-31 20:21:38 +00:00
|
|
|
|
|
|
|
;;;
|
|
|
|
.org $2000
|
|
|
|
|
2018-12-31 20:27:07 +00:00
|
|
|
INBUF := $200 ;GETLN input buffer.
|
|
|
|
|
2018-12-31 23:49:26 +00:00
|
|
|
;;; ============================================================
|
|
|
|
;;; ROM routines
|
|
|
|
|
2018-12-31 20:27:07 +00:00
|
|
|
WAIT := $FCA8 ;Monitor wait routine.
|
|
|
|
BELL := $FF3A ;Monitor bell routine
|
|
|
|
|
2018-12-31 23:49:26 +00:00
|
|
|
CROUT := $FD8E
|
|
|
|
PRBYTE := $FDDA
|
|
|
|
COUT := $FDED
|
2018-12-31 20:27:07 +00:00
|
|
|
|
2018-12-31 23:49:26 +00:00
|
|
|
;;; ============================================================
|
2018-12-31 20:27:07 +00:00
|
|
|
;;; BASIC.SYSTEM global page
|
|
|
|
|
2018-12-31 23:49:26 +00:00
|
|
|
EXTRNCMD := $BE06 ; External cmd JMP vector.
|
|
|
|
ERROUT := $BE09 ; Error routine vector.
|
|
|
|
ERRCODE := $BE0F ; Error code
|
|
|
|
XTRNADDR := $BE50 ; Ext cmd implementation addr.
|
|
|
|
|
2018-12-31 20:27:07 +00:00
|
|
|
XLEN := $BE52 ;Length of command string-1.
|
|
|
|
XCNUM := $BE53 ;CI cmd no. (ext cmd = 0).
|
2018-12-31 23:49:26 +00:00
|
|
|
|
|
|
|
PBITS := $BE54 ; Command parameter bits.
|
|
|
|
FBITS := $BE56 ; Found parameter bits.
|
|
|
|
|
|
|
|
VADDR := $BE58 ; Address parameter
|
|
|
|
VSLOT := $BE61 ; Slot parameter
|
|
|
|
VTYPE := $BE6A ; Type parameter
|
|
|
|
VPATH1 := $BE6C ; Pathname buffer
|
|
|
|
|
|
|
|
GOSYSTEM := $BE70 ; Use instead of MLI
|
|
|
|
|
|
|
|
SSGINFO := $BEB4 ; Get/Set Info Parameter block (set size to set=7 or get=$A)
|
|
|
|
FIFNAME := $BEB5 ; Should be implcitly linked already
|
|
|
|
FIFILID := $BEB8
|
|
|
|
FIAUXID := $BEB9
|
|
|
|
|
|
|
|
;;; ============================================================
|
2018-12-31 20:27:07 +00:00
|
|
|
|
|
|
|
;;; TODO: Relocate into ProDOS-allocated buffer
|
2018-12-31 20:21:38 +00:00
|
|
|
|
|
|
|
;;;
|
2018-12-31 20:27:07 +00:00
|
|
|
;;; Remember to save the previous command address.
|
2018-12-31 20:21:38 +00:00
|
|
|
;;;
|
2018-12-31 20:27:07 +00:00
|
|
|
lda EXTRNCMD+1
|
|
|
|
sta nxtcmd
|
|
|
|
lda EXTRNCMD+2
|
|
|
|
sta nxtcmd+1
|
2018-12-31 20:21:38 +00:00
|
|
|
;;;
|
2018-12-31 23:49:26 +00:00
|
|
|
lda #<handler ;Install the address of our
|
2018-12-31 20:27:07 +00:00
|
|
|
sta EXTRNCMD+1 ; command handler in the
|
2018-12-31 23:49:26 +00:00
|
|
|
lda #>handler ; external command JMP
|
2018-12-31 20:27:07 +00:00
|
|
|
sta EXTRNCMD+2 ; vector.
|
2018-12-31 23:49:26 +00:00
|
|
|
rts
|
2018-12-31 20:21:38 +00:00
|
|
|
;;;
|
2018-12-31 23:49:26 +00:00
|
|
|
handler:
|
2018-12-31 20:27:07 +00:00
|
|
|
ldx #0 ;Check for our command.
|
2018-12-31 23:49:26 +00:00
|
|
|
nxtchr: lda INBUF,x ;Get first character.
|
|
|
|
|
|
|
|
and #$7F ;Convert to ASCII
|
|
|
|
|
|
|
|
cmp #'a' ;Convert to upper-case
|
|
|
|
bcc :+
|
|
|
|
cmp #'z'+1
|
|
|
|
bcs :+
|
|
|
|
and #$DF
|
|
|
|
|
|
|
|
: cmp cmd,x ;Does it match?
|
2018-12-31 20:27:07 +00:00
|
|
|
bne notours ;NO, SO CONTINUE WITH NEXT CMD.
|
|
|
|
inx ;Next character
|
|
|
|
cpx #cmdlen ;All characters yet?
|
|
|
|
bne nxtchr ;No, read next one.
|
2018-12-31 20:21:38 +00:00
|
|
|
;;;
|
2018-12-31 20:27:07 +00:00
|
|
|
lda #cmdlen-1 ;Our cmd! Put cmd length-1
|
|
|
|
sta XLEN ; in CI global XLEN.
|
2018-12-31 23:49:26 +00:00
|
|
|
lda #<execute ;Point XTRNADDR to our
|
2018-12-31 20:27:07 +00:00
|
|
|
sta XTRNADDR ; command execution
|
2018-12-31 23:49:26 +00:00
|
|
|
lda #>execute ; routine
|
2018-12-31 20:27:07 +00:00
|
|
|
sta XTRNADDR+1
|
|
|
|
lda #0 ;Mark the cmd number as
|
|
|
|
sta XCNUM ; zero (external).
|
2018-12-31 20:21:38 +00:00
|
|
|
;;;
|
2018-12-31 23:49:26 +00:00
|
|
|
;; Must set at least one bit in PBITS low byte.
|
|
|
|
|
|
|
|
lda #%10000000 ; bit 7 = Address
|
|
|
|
sta PBITS+1
|
2018-12-31 20:21:38 +00:00
|
|
|
;;;
|
2018-12-31 23:49:26 +00:00
|
|
|
lda #%00000101 ; bit 8 = filename req'd, bit 10 = Type
|
|
|
|
sta PBITS
|
2018-12-31 20:27:07 +00:00
|
|
|
clc ;Everything is OK.
|
|
|
|
rts ;Return to BASIC.SYSTEM
|
2018-12-31 23:49:26 +00:00
|
|
|
|
|
|
|
;;; ============================================================
|
|
|
|
|
|
|
|
notours:
|
|
|
|
sec ;SET CARRY AND LET
|
|
|
|
jmp (nxtcmd) ; NEXT EXT CMD GO FOR IT.
|
|
|
|
|
|
|
|
;;; ============================================================
|
|
|
|
|
2018-12-31 20:27:07 +00:00
|
|
|
execute:
|
2018-12-31 23:49:26 +00:00
|
|
|
;; Filename?
|
|
|
|
lda FBITS
|
|
|
|
and #%00000001 ; Filename?
|
|
|
|
bne :+
|
|
|
|
lda #$10 ; SYNTAX ERROR
|
|
|
|
sec
|
|
|
|
rts
|
|
|
|
:
|
|
|
|
|
|
|
|
;; Type?
|
|
|
|
lda FBITS
|
|
|
|
and #%00000100 ; Type?
|
|
|
|
bne :+
|
|
|
|
lda #$B ; INVALID PARAMETER
|
|
|
|
sec
|
|
|
|
rts
|
|
|
|
:
|
|
|
|
|
|
|
|
;; Show Filename
|
|
|
|
lda #'P'|$80
|
|
|
|
jsr COUT
|
|
|
|
lda #'='|$80
|
|
|
|
jsr COUT
|
|
|
|
|
|
|
|
ptr := $06
|
|
|
|
lda VPATH1
|
|
|
|
sta ptr
|
|
|
|
lda VPATH1+1
|
|
|
|
sta ptr+1
|
|
|
|
|
|
|
|
ldy #0
|
|
|
|
lda (ptr),y
|
|
|
|
tax
|
|
|
|
iny
|
|
|
|
|
|
|
|
: lda (ptr),y
|
|
|
|
ora #$80
|
|
|
|
jsr COUT
|
|
|
|
iny
|
|
|
|
dex
|
|
|
|
bne :-
|
|
|
|
jsr CROUT
|
|
|
|
|
|
|
|
;; Show Type
|
|
|
|
lda #'T'|$80
|
|
|
|
jsr COUT
|
|
|
|
lda #'='|$80
|
|
|
|
jsr COUT
|
|
|
|
lda #'$'|$80
|
|
|
|
jsr COUT
|
|
|
|
lda VTYPE
|
|
|
|
jsr PRBYTE
|
|
|
|
jsr CROUT
|
|
|
|
|
|
|
|
;; Addr?
|
|
|
|
lda FBITS+1
|
|
|
|
and #%10000000 ; Addr?
|
|
|
|
beq :+
|
|
|
|
|
|
|
|
lda #'A'|$80
|
|
|
|
jsr COUT
|
|
|
|
lda #'='|$80
|
|
|
|
jsr COUT
|
|
|
|
lda #'$'|$80
|
|
|
|
jsr COUT
|
|
|
|
lda VADDR+1 ; hi
|
|
|
|
jsr PRBYTE
|
|
|
|
lda VADDR ; lo
|
|
|
|
jsr PRBYTE
|
|
|
|
jsr CROUT
|
|
|
|
:
|
|
|
|
|
|
|
|
;; Get/Set File Info
|
|
|
|
|
|
|
|
;; GET_FILE_INFO
|
|
|
|
lda #$A
|
|
|
|
sta SSGINFO
|
|
|
|
lda #$C4 ; GET_FILE_INFO
|
|
|
|
jsr GOSYSTEM
|
|
|
|
bcs rts1
|
|
|
|
|
|
|
|
;; SET_FILE_INFO
|
|
|
|
lda #$7
|
|
|
|
sta SSGINFO
|
|
|
|
lda VTYPE
|
|
|
|
sta FIFILID
|
|
|
|
;; TODO: optional Aux Type
|
|
|
|
lda #$C3 ; SET_FILE_INFO
|
|
|
|
jsr GOSYSTEM
|
|
|
|
bcs rts1
|
|
|
|
|
2018-12-31 20:27:07 +00:00
|
|
|
clc ;All done successfully.
|
2018-12-31 23:49:26 +00:00
|
|
|
rts1: rts ;Back to BASIC.SYSTEM.
|
|
|
|
|
|
|
|
;;; ============================================================
|
|
|
|
;;; Data
|
|
|
|
|
|
|
|
cmd: .byte "CHTYPE" ;Our command
|
2018-12-31 20:27:07 +00:00
|
|
|
cmdlen = *-cmd ;Our command length
|
|
|
|
nxtcmd: .word 0 ; STORE THE NEXT COMMAND'S
|
2018-12-31 20:21:38 +00:00
|
|
|
; ADDRESS HERE.
|