Add DATE and TYPE commands
This commit is contained in:
parent
ef8857752f
commit
9085407ac5
2
Makefile
2
Makefile
|
@ -6,7 +6,7 @@ OUTDIR := out
|
||||||
|
|
||||||
TARGETS := $(OUTDIR)/path.BIN \
|
TARGETS := $(OUTDIR)/path.BIN \
|
||||||
$(OUTDIR)/chtype.CMD $(OUTDIR)/chtime.CMD \
|
$(OUTDIR)/chtype.CMD $(OUTDIR)/chtime.CMD \
|
||||||
$(OUTDIR)/copy.CMD \
|
$(OUTDIR)/copy.CMD $(OUTDIR)/date.CMD $(OUTDIR)/type.CMD \
|
||||||
$(OUTDIR)/bell.CMD $(OUTDIR)/hello.CMD $(OUTDIR)/echo.CMD $(OUTDIR)/online.CMD
|
$(OUTDIR)/bell.CMD $(OUTDIR)/hello.CMD $(OUTDIR)/echo.CMD $(OUTDIR)/online.CMD
|
||||||
|
|
||||||
XATTR := $(shell command -v xattr 2> /dev/null)
|
XATTR := $(shell command -v xattr 2> /dev/null)
|
||||||
|
|
|
@ -50,6 +50,8 @@ Sample commands included:
|
||||||
* Useful utilities:
|
* Useful utilities:
|
||||||
* `ONLINE` - lists online volumes (volume name, slot and drive)
|
* `ONLINE` - lists online volumes (volume name, slot and drive)
|
||||||
* `COPY` - copy a single file, e.g. `copy /path/to/file,dstfile`
|
* `COPY` - copy a single file, e.g. `copy /path/to/file,dstfile`
|
||||||
|
* `TYPE` - show file contents (TXT, BAS, or BIN/other), e.g. `type filename`
|
||||||
|
* `DATE` - prints the current ProDOS date and time
|
||||||
* `CHTYPE` - change the type/auxtype of a file. e.g. `chtype file,T$F1,A$1234`
|
* `CHTYPE` - change the type/auxtype of a file. e.g. `chtype file,T$F1,A$1234`
|
||||||
* `T` (type) and `A` (auxtype) are optional. If neither is specified, current types are shown.
|
* `T` (type) and `A` (auxtype) are optional. If neither is specified, current types are shown.
|
||||||
* `S` and `D` arguments can be used to specify slot and drive.
|
* `S` and `D` arguments can be used to specify slot and drive.
|
||||||
|
|
19
copy.cmd.s
19
copy.cmd.s
|
@ -41,10 +41,12 @@
|
||||||
|
|
||||||
;;; ============================================================
|
;;; ============================================================
|
||||||
|
|
||||||
|
FN1REF := $D6
|
||||||
|
FN2REF := $D7
|
||||||
|
|
||||||
FN1INFO := $2EE
|
FN1INFO := $2EE
|
||||||
FN1BUF := $4200
|
FN2BUF := $4200
|
||||||
FN2BUF := $4600
|
DATABUF := $4600
|
||||||
DATABUF := $4A00
|
|
||||||
DATALEN = $6000 - DATABUF
|
DATALEN = $6000 - DATABUF
|
||||||
|
|
||||||
execute:
|
execute:
|
||||||
|
@ -72,9 +74,9 @@ rts1: rts
|
||||||
bpl :-
|
bpl :-
|
||||||
|
|
||||||
;; Open FN1
|
;; Open FN1
|
||||||
lda #<FN1BUF
|
lda HIMEM ; Use BI's general purpose buffer
|
||||||
sta OSYSBUF
|
sta OSYSBUF
|
||||||
lda #>FN1BUF
|
lda HIMEM+1
|
||||||
sta OSYSBUF+1
|
sta OSYSBUF+1
|
||||||
lda #OPEN
|
lda #OPEN
|
||||||
jsr GOSYSTEM
|
jsr GOSYSTEM
|
||||||
|
@ -101,7 +103,7 @@ rts1: rts
|
||||||
dey
|
dey
|
||||||
bpl :-
|
bpl :-
|
||||||
|
|
||||||
;; Get FN1 info
|
;; Get FN2 info
|
||||||
lda #GET_FILE_INFO
|
lda #GET_FILE_INFO
|
||||||
jsr GOSYSTEM
|
jsr GOSYSTEM
|
||||||
bcs :+
|
bcs :+
|
||||||
|
@ -195,7 +197,4 @@ finish: jsr close
|
||||||
rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
FN1REF: .byte 0
|
.assert * <= FN2BUF, error, "Too long"
|
||||||
FN2REF: .byte 0
|
|
||||||
|
|
||||||
.assert * <= FN1BUF, error, "Too long"
|
|
||||||
|
|
|
@ -0,0 +1,131 @@
|
||||||
|
;;; ============================================================
|
||||||
|
;;;
|
||||||
|
;;; DATE - Print the current date/time
|
||||||
|
;;;
|
||||||
|
;;; Usage: DATE
|
||||||
|
;;;
|
||||||
|
;;; NOTE: Only supports 2 digit years
|
||||||
|
;;;
|
||||||
|
;;; ============================================================
|
||||||
|
|
||||||
|
.include "apple2.inc"
|
||||||
|
.include "more_apple2.inc"
|
||||||
|
.include "prodos.inc"
|
||||||
|
|
||||||
|
;;; ============================================================
|
||||||
|
|
||||||
|
.org $4000
|
||||||
|
|
||||||
|
start:
|
||||||
|
jsr CROUT
|
||||||
|
|
||||||
|
;;; 49041 ($BF91) 49040 ($BF90)
|
||||||
|
;;; 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
|
||||||
|
;;; +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
|
||||||
|
;;; DATE: | year | month | day |
|
||||||
|
;;; +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
|
||||||
|
;;;
|
||||||
|
;;; 49043 ($BF93) 49042 ($BF92)
|
||||||
|
;;; 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
|
||||||
|
;;; +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
|
||||||
|
;;; TIME: |0 0 0| hour | |0 0| minute |
|
||||||
|
;;; +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
|
||||||
|
|
||||||
|
MLI_CALL GET_TIME, 0
|
||||||
|
lda DATELO
|
||||||
|
ora DATEHI
|
||||||
|
beq not_set
|
||||||
|
|
||||||
|
;; Date
|
||||||
|
|
||||||
|
lda DATELO+1 ; month
|
||||||
|
ror a
|
||||||
|
pha
|
||||||
|
lda DATELO
|
||||||
|
pha
|
||||||
|
rol a
|
||||||
|
rol a
|
||||||
|
rol a
|
||||||
|
rol a
|
||||||
|
and #%00001111
|
||||||
|
jsr cout_number
|
||||||
|
|
||||||
|
lda #'/'|$80 ; /
|
||||||
|
jsr COUT
|
||||||
|
|
||||||
|
pla ; day
|
||||||
|
and #%00011111
|
||||||
|
jsr cout_number
|
||||||
|
|
||||||
|
lda #'/'|$80 ; /
|
||||||
|
jsr COUT
|
||||||
|
|
||||||
|
pla ; year
|
||||||
|
jsr cout_number
|
||||||
|
|
||||||
|
lda #' '|$80 ;
|
||||||
|
jsr COUT
|
||||||
|
jsr COUT
|
||||||
|
|
||||||
|
;; Time
|
||||||
|
|
||||||
|
lda TIMELO+1 ; hour
|
||||||
|
and #%00011111
|
||||||
|
jsr cout_number
|
||||||
|
|
||||||
|
lda #':'|$80 ; ':'
|
||||||
|
jsr COUT
|
||||||
|
|
||||||
|
lda TIMELO ; minute
|
||||||
|
and #%00111111
|
||||||
|
jsr cout_number
|
||||||
|
|
||||||
|
finish: jsr CROUT
|
||||||
|
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
not_set:
|
||||||
|
ldx #0
|
||||||
|
: lda msg,x
|
||||||
|
beq finish
|
||||||
|
ora #$80
|
||||||
|
jsr COUT
|
||||||
|
inx
|
||||||
|
bne :- ; always
|
||||||
|
|
||||||
|
msg: .byte "<NO DATE>", 0
|
||||||
|
|
||||||
|
|
||||||
|
;;; ============================================================
|
||||||
|
;;; Print a 2-digit number, with leading zeros
|
||||||
|
|
||||||
|
.proc cout_number
|
||||||
|
;; Reduce to 2 digits
|
||||||
|
: cmp #100
|
||||||
|
bcc :+
|
||||||
|
sec
|
||||||
|
sbc #100
|
||||||
|
bne :-
|
||||||
|
|
||||||
|
;; Leading zero?
|
||||||
|
: ldx #0
|
||||||
|
cmp #10 ; >= 10?
|
||||||
|
bcc tens
|
||||||
|
|
||||||
|
;; Divide by 10, dividend(+'0') in X remainder in A
|
||||||
|
: sbc #10
|
||||||
|
inx
|
||||||
|
cmp #10
|
||||||
|
bcs :-
|
||||||
|
|
||||||
|
tens: pha
|
||||||
|
txa
|
||||||
|
ora #'0'|$80 ; convert to digit
|
||||||
|
jsr COUT
|
||||||
|
|
||||||
|
units: pla
|
||||||
|
ora #'0'|$80 ; convert to digit
|
||||||
|
jsr COUT
|
||||||
|
rts
|
||||||
|
.endproc
|
|
@ -3,9 +3,16 @@
|
||||||
|
|
||||||
INBUF := $200
|
INBUF := $200
|
||||||
|
|
||||||
|
;;; ============================================================
|
||||||
|
;;; Zero Page
|
||||||
|
|
||||||
|
LINUM := $1B
|
||||||
|
|
||||||
;;; ============================================================
|
;;; ============================================================
|
||||||
;;; Monitor ROM routines
|
;;; Monitor ROM routines
|
||||||
|
|
||||||
|
|
||||||
|
PRTAX := $F941
|
||||||
CROUT := $FD8E
|
CROUT := $FD8E
|
||||||
PRBYTE := $FDDA
|
PRBYTE := $FDDA
|
||||||
COUT := $FDED
|
COUT := $FDED
|
||||||
|
@ -20,4 +27,6 @@ BELL := $FF3A
|
||||||
;;; ============================================================
|
;;; ============================================================
|
||||||
;;; Applesoft ROM locations
|
;;; Applesoft ROM locations
|
||||||
|
|
||||||
TOKEN_NAME_TABLE := $D0D0
|
TOKTABL := $D0D0
|
||||||
|
|
||||||
|
LINPRT := $ED24
|
||||||
|
|
|
@ -18,7 +18,7 @@ add_file () {
|
||||||
}
|
}
|
||||||
|
|
||||||
add_file "out/path.BIN" "path#062000"
|
add_file "out/path.BIN" "path#062000"
|
||||||
for file in bell echo hello online chtype chtime copy; do
|
for file in bell echo hello online chtype chtime copy date type; do
|
||||||
add_file "out/${file}.CMD" "${file}#F04000"
|
add_file "out/${file}.CMD" "${file}#F04000"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
10
path.s
10
path.s
|
@ -136,7 +136,7 @@ page_delta:
|
||||||
|
|
||||||
.proc handler
|
.proc handler
|
||||||
ptr := $06 ; pointer into VPATH
|
ptr := $06 ; pointer into VPATH
|
||||||
tptr := $08 ; pointer into TOKEN_NAME_TABLE
|
tptr := $08 ; pointer into TOKTABL
|
||||||
|
|
||||||
lda VPATH1
|
lda VPATH1
|
||||||
sta ptr
|
sta ptr
|
||||||
|
@ -204,15 +204,15 @@ check_if_token:
|
||||||
|
|
||||||
;; Check if it's a BASIC token. Based on the AppleSoft BASIC source.
|
;; Check if it's a BASIC token. Based on the AppleSoft BASIC source.
|
||||||
|
|
||||||
;; Point tptr at TOKEN_NAME_TABLE less one page (will advance below)
|
;; Point tptr at TOKTABL less one page (will advance below)
|
||||||
lda #<(TOKEN_NAME_TABLE-$100)
|
lda #<(TOKTABL-$100)
|
||||||
sta tptr
|
sta tptr
|
||||||
lda #>(TOKEN_NAME_TABLE-$100)
|
lda #>(TOKTABL-$100)
|
||||||
sta tptr+1
|
sta tptr+1
|
||||||
|
|
||||||
;; These are immediately incremented
|
;; These are immediately incremented
|
||||||
dex
|
dex
|
||||||
ldy #$FF ; (tptr),y offset TOKEN_NAME_TABLE
|
ldy #$FF ; (tptr),y offset TOKTABL
|
||||||
|
|
||||||
;; Match loop
|
;; Match loop
|
||||||
mloop: iny ; Advance through token table
|
mloop: iny ; Advance through token table
|
||||||
|
|
|
@ -3,7 +3,13 @@
|
||||||
|
|
||||||
MLI := $BF00
|
MLI := $BF00
|
||||||
DATE := $BF90
|
DATE := $BF90
|
||||||
|
DATELO := $BF90
|
||||||
|
DATEHI := $BF91
|
||||||
|
TIME := $BF92
|
||||||
|
TIMELO := $BF92
|
||||||
|
TIMEHI := $BF93
|
||||||
|
|
||||||
|
GET_TIME = $82
|
||||||
CREATE = $C0
|
CREATE = $C0
|
||||||
SET_FILE_INFO = $C3
|
SET_FILE_INFO = $C3
|
||||||
GET_FILE_INFO = $C4
|
GET_FILE_INFO = $C4
|
||||||
|
|
|
@ -0,0 +1,311 @@
|
||||||
|
;;; ============================================================
|
||||||
|
;;;
|
||||||
|
;;; TYPE - Dump contents of files to the screen
|
||||||
|
;;;
|
||||||
|
;;; Usage: TYPE pathname[,S#][,D#]
|
||||||
|
;;;
|
||||||
|
;;; Inspiration from OmniType by William H. Tudor, Nibble 2/1989
|
||||||
|
;;;
|
||||||
|
;;; ============================================================
|
||||||
|
|
||||||
|
.include "apple2.inc"
|
||||||
|
.include "more_apple2.inc"
|
||||||
|
.include "prodos.inc"
|
||||||
|
|
||||||
|
;;; ============================================================
|
||||||
|
|
||||||
|
.org $4000
|
||||||
|
|
||||||
|
;; NOTE: Assumes XLEN is set by PATH
|
||||||
|
|
||||||
|
;; Point BI's parser at the command execution routine.
|
||||||
|
lda #<execute
|
||||||
|
sta XTRNADDR
|
||||||
|
page_num2 := *+1 ; address needing updating
|
||||||
|
lda #>execute
|
||||||
|
sta XTRNADDR+1
|
||||||
|
|
||||||
|
;; Mark command as external (zero).
|
||||||
|
lda #0
|
||||||
|
sta XCNUM
|
||||||
|
|
||||||
|
;; Set accepted parameter flags (Name, Type, Address)
|
||||||
|
|
||||||
|
lda #PBitsFlags::FN1 ; Filenames
|
||||||
|
sta PBITS
|
||||||
|
lda #PBitsFlags::SD ; Slot & Drive handling
|
||||||
|
sta PBITS+1
|
||||||
|
|
||||||
|
clc ; Success (so far)
|
||||||
|
rts ; Return to BASIC.SYSTEM
|
||||||
|
|
||||||
|
;;; ============================================================
|
||||||
|
|
||||||
|
DATABUF := INBUF
|
||||||
|
|
||||||
|
execute:
|
||||||
|
;; Get FN1 info
|
||||||
|
lda #$A
|
||||||
|
sta SSGINFO
|
||||||
|
lda #GET_FILE_INFO
|
||||||
|
jsr GOSYSTEM
|
||||||
|
bcs rts1
|
||||||
|
|
||||||
|
;; Reject directory file
|
||||||
|
lda FIFILID
|
||||||
|
cmp #$F ; DIR
|
||||||
|
bne :+
|
||||||
|
lda #$D ; FILE TYPE MISMATCH
|
||||||
|
sec
|
||||||
|
rts1: rts
|
||||||
|
:
|
||||||
|
;; Open the file
|
||||||
|
lda HIMEM ; Use BI's buffer above HIMEM
|
||||||
|
sta OSYSBUF
|
||||||
|
lda HIMEM+1
|
||||||
|
sta OSYSBUF+1
|
||||||
|
lda #OPEN
|
||||||
|
jsr GOSYSTEM
|
||||||
|
bcs rts1
|
||||||
|
|
||||||
|
;; Prepare the read arguments
|
||||||
|
lda OREFNUM
|
||||||
|
sta RWREFNUM
|
||||||
|
sta CFREFNUM
|
||||||
|
|
||||||
|
lda #<DATABUF ; Stash read data here
|
||||||
|
sta RWDATA
|
||||||
|
lda #>DATABUF
|
||||||
|
sta RWDATA+1
|
||||||
|
|
||||||
|
lda #<1 ; Read one byte at a time
|
||||||
|
sta RWCOUNT
|
||||||
|
lda #>1
|
||||||
|
sta RWCOUNT+1
|
||||||
|
|
||||||
|
lda #0 ; For BASIC
|
||||||
|
sta LINUM
|
||||||
|
sta LINUM+1
|
||||||
|
|
||||||
|
lda FIFILID ; File type
|
||||||
|
cmp #$04 ; TXT
|
||||||
|
beq text
|
||||||
|
cmp #$FC ; BAS
|
||||||
|
bne :+
|
||||||
|
jmp basic
|
||||||
|
:
|
||||||
|
|
||||||
|
;; fall through
|
||||||
|
|
||||||
|
;;; ============================================================
|
||||||
|
;;; Generic (Binary) file
|
||||||
|
|
||||||
|
.proc binary
|
||||||
|
jsr ReadByte
|
||||||
|
bcc :+
|
||||||
|
jmp Exit
|
||||||
|
: pha
|
||||||
|
|
||||||
|
;; Line prefix
|
||||||
|
jsr CROUT
|
||||||
|
lda #'$'|$80
|
||||||
|
jsr COUT
|
||||||
|
ldx LINUM
|
||||||
|
lda LINUM+1
|
||||||
|
jsr PRTAX
|
||||||
|
lda #'-'|$80
|
||||||
|
jsr COUT
|
||||||
|
|
||||||
|
pla
|
||||||
|
ldx #8 ; 8 bytes at a time
|
||||||
|
bne byte ; always
|
||||||
|
|
||||||
|
;; Line of bytes in hex
|
||||||
|
bloop: jsr ReadByte
|
||||||
|
bcc byte
|
||||||
|
lda #' ' ; at EOF, space it out
|
||||||
|
sta INBUF,x
|
||||||
|
ldy #3
|
||||||
|
bne spaces ; always
|
||||||
|
|
||||||
|
byte: sta INBUF,x ; stash bytes
|
||||||
|
jsr PRBYTE
|
||||||
|
ldy #1
|
||||||
|
|
||||||
|
spaces: jsr PrintYSpaces
|
||||||
|
dex
|
||||||
|
bne bloop
|
||||||
|
|
||||||
|
;; Character display
|
||||||
|
lda #'|'|$80
|
||||||
|
jsr COUT
|
||||||
|
ldx #8 ; 8 bytes at a time
|
||||||
|
cloop: lda INBUF,x
|
||||||
|
ora #$80
|
||||||
|
cmp #' '|$80 ; control character?
|
||||||
|
bcs :+
|
||||||
|
lda #'.'|$80 ; yes, replace with period
|
||||||
|
: jsr COUT
|
||||||
|
dex
|
||||||
|
bne cloop
|
||||||
|
|
||||||
|
;; Increment offset
|
||||||
|
lda #8
|
||||||
|
clc
|
||||||
|
adc LINUM
|
||||||
|
sta LINUM
|
||||||
|
bcc :+
|
||||||
|
inc LINUM+1
|
||||||
|
:
|
||||||
|
jmp binary
|
||||||
|
.endproc
|
||||||
|
|
||||||
|
;;; ============================================================
|
||||||
|
;;; Text file
|
||||||
|
|
||||||
|
.proc text
|
||||||
|
jsr ReadByte
|
||||||
|
bcs Exit
|
||||||
|
|
||||||
|
ora #$80
|
||||||
|
cmp #$8D ; CR?
|
||||||
|
beq :+
|
||||||
|
cmp #' '|$80 ; other control character?
|
||||||
|
bcc text ; yes, ignore
|
||||||
|
|
||||||
|
: jsr COUT
|
||||||
|
jmp text
|
||||||
|
.endproc
|
||||||
|
|
||||||
|
;;; ============================================================
|
||||||
|
;;; BASIC file
|
||||||
|
|
||||||
|
.proc basic
|
||||||
|
jsr CROUT
|
||||||
|
jsr ReadByte ; first two bytes are pointer to next line
|
||||||
|
jsr ReadByte
|
||||||
|
bcs Exit ; EOF
|
||||||
|
beq Exit ; null high byte = end of program
|
||||||
|
|
||||||
|
;; Line number
|
||||||
|
jsr ReadByte ; line number hi
|
||||||
|
bcs Exit
|
||||||
|
tax
|
||||||
|
jsr ReadByte ; line number lo
|
||||||
|
bcs Exit
|
||||||
|
jsr LINPRT ; print line number
|
||||||
|
jsr PrintSpace
|
||||||
|
|
||||||
|
;; Line contents: EOL, token, or character?
|
||||||
|
lloop: jsr ReadByte
|
||||||
|
beq basic ; EOL
|
||||||
|
bmi token ; token
|
||||||
|
|
||||||
|
cout: ora #$80
|
||||||
|
jsr COUT
|
||||||
|
jmp lloop
|
||||||
|
|
||||||
|
ptr := $06
|
||||||
|
|
||||||
|
;; Token
|
||||||
|
token: and #$7F
|
||||||
|
tax ; command index
|
||||||
|
|
||||||
|
jsr PrintSpace ; space before token
|
||||||
|
|
||||||
|
lda #<TOKTABL
|
||||||
|
sta ptr
|
||||||
|
lda #>TOKTABL
|
||||||
|
sta ptr+1
|
||||||
|
|
||||||
|
;; Search through token table; last char
|
||||||
|
;; of each token has high bit set.
|
||||||
|
ldy #0
|
||||||
|
cpx #0
|
||||||
|
beq tloop2
|
||||||
|
tloop1: lda (ptr),y
|
||||||
|
bpl :+
|
||||||
|
dex ; last char, is next it?
|
||||||
|
beq found
|
||||||
|
: inc ptr ; nope, advance to next
|
||||||
|
bne :+
|
||||||
|
inc ptr+1
|
||||||
|
: bne tloop1 ; always
|
||||||
|
|
||||||
|
found: iny ; past last char of prev token
|
||||||
|
tloop2: lda (ptr),y
|
||||||
|
bmi :+
|
||||||
|
ora #$80
|
||||||
|
jsr COUT
|
||||||
|
iny
|
||||||
|
bne tloop2 ; always
|
||||||
|
|
||||||
|
: jsr COUT
|
||||||
|
lda #' ' ; space after token
|
||||||
|
bne cout ; always
|
||||||
|
|
||||||
|
.endproc
|
||||||
|
|
||||||
|
;;; ============================================================
|
||||||
|
|
||||||
|
PrintSpace:
|
||||||
|
ldy #1
|
||||||
|
;; fall through
|
||||||
|
|
||||||
|
.proc PrintYSpaces
|
||||||
|
lda #' '|$80
|
||||||
|
: jsr COUT
|
||||||
|
dey
|
||||||
|
bne :-
|
||||||
|
rts
|
||||||
|
.endproc
|
||||||
|
|
||||||
|
;;; ============================================================
|
||||||
|
|
||||||
|
.proc Exit
|
||||||
|
jsr Close
|
||||||
|
jsr CROUT
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
.endproc
|
||||||
|
|
||||||
|
.proc ExitWithError
|
||||||
|
pha
|
||||||
|
jsr Close
|
||||||
|
pla
|
||||||
|
sec
|
||||||
|
rts
|
||||||
|
.endproc
|
||||||
|
|
||||||
|
.proc Close
|
||||||
|
lda #CLOSE
|
||||||
|
jsr GOSYSTEM
|
||||||
|
rts
|
||||||
|
.endproc
|
||||||
|
|
||||||
|
;;; ============================================================
|
||||||
|
;;; Read a single byte; returns C=1 on EOF
|
||||||
|
;;; On error, exits.
|
||||||
|
.proc ReadByte
|
||||||
|
lda #READ
|
||||||
|
jsr GOSYSTEM
|
||||||
|
bcs :+
|
||||||
|
lda DATABUF
|
||||||
|
rts
|
||||||
|
|
||||||
|
: cmp #5 ; END OF DATA?
|
||||||
|
beq :+ ; exit with C=1 for EOF
|
||||||
|
|
||||||
|
tax ; stash error
|
||||||
|
pla ; pop return from stack
|
||||||
|
pla
|
||||||
|
txa ; unstash error
|
||||||
|
pha ; re-stash error
|
||||||
|
jsr Close
|
||||||
|
pla ; unstash error
|
||||||
|
|
||||||
|
: sec ; either w/ error or on EOF
|
||||||
|
rts
|
||||||
|
.endproc
|
||||||
|
|
||||||
|
;;; ============================================================
|
Loading…
Reference in New Issue