A2osX/BIN/CAT.S.txt

358 lines
6.2 KiB
Plaintext
Raw Normal View History

NEW
2019-05-02 09:52:32 +00:00
AUTO 3,1
.LIST OFF
.OP 65C02
.OR $2000
2020-08-17 20:47:31 +00:00
.TF bin/cat
*--------------------------------------
2020-08-17 20:47:31 +00:00
.INB inc/macros.i
.INB inc/a2osx.i
.INB inc/mli.i
.INB inc/mli.e.i
*--------------------------------------
2019-02-27 16:44:11 +00:00
.DUMMY
.OR ZPBIN
ZS.START
2020-08-17 20:47:31 +00:00
ZPPtr1 .BS 2
2019-02-27 16:44:11 +00:00
ZPBufPtr .BS 2
ByteIndex .BS 1
2019-03-26 12:17:47 +00:00
ArgCount .BS 1
FileCount .BS 1
bPause .BS 1
bPrintAll .BS 1
bLineNum .BS 1
bSuppressBlankLine .BS 1
ArgIndex .BS 1
hBuf .BS 1
hFile .BS 1
LineNum .BS 2
bPrintedBlankLine .BS 1
2019-02-27 16:44:11 +00:00
ZS.END .ED
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
CS.START cld
jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
2018-10-02 15:52:30 +00:00
.DA #S.PS.F.EVENT S.PS.F
.DA #0
.DA CS.END-CS.START CS
.DA DS.END-DS.START DS
2019-04-15 05:40:13 +00:00
.DA #64 SS
2019-02-27 16:44:11 +00:00
.DA #ZS.END-ZS.START Zero Page Size
.DA 0
*--------------------------------------
* Relocation Table
2019-10-03 06:25:27 +00:00
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
L.MSG.USAGE .DA MSG.USAGE
2019-02-27 22:02:56 +00:00
L.MSG.CRLF .DA MSG.CRLF
2020-11-29 13:16:39 +00:00
L.MSG.INIT .DA MSG.INIT
L.MSG.LINENUM .DA MSG.LINENUM
L.MSG.CTRLCHAR .DA MSG.CTRLCHAR
L.ASCII .DA ASCII
.DA 0
*--------------------------------------
2019-02-27 22:02:56 +00:00
CS.INIT clc
rts
*--------------------------------------
2019-03-26 12:17:47 +00:00
CS.RUN
.1 inc ArgCount
lda ArgCount
2018-10-16 15:48:03 +00:00
>SYSCALL ArgV
bcs .7
2020-08-25 10:56:00 +00:00
>STYA ZPPtr1
2019-01-25 12:43:50 +00:00
lda (ZPPtr1)
cmp #'-'
bne .4
2020-08-25 10:56:00 +00:00
ldy #1
lda (ZPPtr1),y
2019-11-17 15:28:24 +00:00
ldx #OptionList.Cnt-1
.2 cmp OptionList,x
beq .3
2019-11-17 15:28:24 +00:00
dex
2019-11-17 15:28:24 +00:00
bpl .2
2020-01-29 20:07:33 +00:00
.99 >PUSHW L.MSG.USAGE
>PUSHBI 0
2020-02-28 07:21:46 +00:00
>SYSCALL PrintF
2018-10-21 20:54:07 +00:00
lda #E.SYN
sec
2019-02-27 22:02:56 +00:00
.9 rts
2019-11-17 15:28:24 +00:00
.3 ldy OptionVars,x
lda #$80
2019-03-26 12:17:47 +00:00
sta 0,y
bra .1
2020-08-25 10:56:00 +00:00
2019-03-26 12:17:47 +00:00
.4 inc FileCount
bra .1 scan for any other args
2020-08-25 10:56:00 +00:00
2019-03-26 12:17:47 +00:00
.7 lda FileCount
beq .99
2020-08-25 10:56:00 +00:00
>LDYAI 256
2018-07-19 15:33:55 +00:00
>SYSCALL GetMem
bcs .9
2020-08-25 10:56:00 +00:00
>STYA ZPBufPtr
2019-03-26 12:17:47 +00:00
stx hBuf
2020-11-29 13:16:39 +00:00
>PUSHW L.MSG.INIT
>PUSHBI 0
>SYSCALL PrintF
*--------------------------------------
2019-02-27 22:02:56 +00:00
CS.RUN.LOOP ldy #S.PS.hStdIn
lda (pPS),y
2020-08-17 20:47:31 +00:00
>SYSCALL FEOF
2019-02-27 22:02:56 +00:00
bcs .90 IO error
2020-08-25 10:56:00 +00:00
2019-02-27 22:02:56 +00:00
tay
2019-05-02 09:52:32 +00:00
bne .10 no char
2019-02-20 16:07:43 +00:00
>SYSCALL GetChar
2019-02-27 22:02:56 +00:00
bcs .9 IO error
2020-08-25 10:56:00 +00:00
cmp #$03 Ctrl-C
2019-02-27 22:02:56 +00:00
beq .9 Abort....
2020-08-25 10:56:00 +00:00
cmp #$13 Ctrl-S
bne .10
2019-03-26 12:17:47 +00:00
lda bPause
eor #$ff
2019-03-26 12:17:47 +00:00
sta bPause
2019-02-27 22:02:56 +00:00
bne CS.RUN.LOOP
2020-12-23 14:54:57 +00:00
2019-03-26 12:17:47 +00:00
.10 lda bPause
2019-02-27 22:02:56 +00:00
bne CS.RUN.LOOP Pause...
2019-01-25 12:43:50 +00:00
2020-08-17 20:47:31 +00:00
.11 lda hFile
bne .2
2020-08-25 10:56:00 +00:00
2019-03-26 12:17:47 +00:00
.1 inc ArgIndex
lda ArgIndex
2018-10-16 15:48:03 +00:00
>SYSCALL ArgV
bcs .99 No more arg...the end!
2020-08-25 10:56:00 +00:00
>STYA ZPPtr1
lda (ZPPtr1)
cmp #'-'
beq .1 An option, skip...
2020-08-25 10:56:00 +00:00
>LDYA ZPPtr1
jsr CS.RUN.OPEN
2019-02-27 22:02:56 +00:00
.90 bcs .9
2020-08-25 10:56:00 +00:00
2020-08-17 20:47:31 +00:00
sta hFile
2020-12-23 14:54:57 +00:00
.2 >PUSHA
2018-07-25 15:26:14 +00:00
>PUSHW ZPBufPtr
2020-12-23 14:54:57 +00:00
>PUSHWI 254 Leave room for CRLF
2020-08-17 20:47:31 +00:00
>SYSCALL FGetS
2019-02-27 22:02:56 +00:00
bcs .7
jsr CS.RUN.PRINT
bcc CS.RUN.LOOP
2019-02-28 21:41:05 +00:00
rts
2020-08-25 10:56:00 +00:00
2019-02-27 22:02:56 +00:00
.7 cmp #MLI.E.EOF
bne .9
2020-08-25 10:56:00 +00:00
jsr CS.RUN.CLOSE
2019-02-27 22:02:56 +00:00
jmp CS.RUN.LOOP
.99 lda #0 Exit with no Error
.9 sec
rts
*--------------------------------------
2020-02-14 16:32:52 +00:00
CS.RUN.OPEN stz bPrintedBlankLine Reset this flag for the new file
>PUSHYA
2019-02-27 22:02:56 +00:00
>PUSHBI O.RDONLY+O.TEXT
2020-02-14 16:32:52 +00:00
>PUSHBI S.FI.T.TXT
>PUSHWZ Aux type
2019-02-27 22:02:56 +00:00
>SYSCALL FOpen
rts
*--------------------------------------
2019-03-26 12:17:47 +00:00
CS.RUN.PRINT inc LineNum
bne .10
2020-08-25 10:56:00 +00:00
2019-03-26 12:17:47 +00:00
inc LineNum+1
2020-08-25 10:56:00 +00:00
2019-03-26 12:17:47 +00:00
.10 lda bSuppressBlankLine
2019-02-27 22:02:56 +00:00
bpl .2
2020-08-25 10:56:00 +00:00
lda (ZPBufPtr)
2019-02-27 22:02:56 +00:00
bne .1 Empty line ?
2019-03-26 12:17:47 +00:00
lda bPrintedBlankLine
bmi .8
2020-08-25 10:56:00 +00:00
lda #$ff
2019-03-26 12:17:47 +00:00
sta bPrintedBlankLine
2019-02-27 22:02:56 +00:00
bra .2
2020-08-25 10:56:00 +00:00
2019-03-26 12:17:47 +00:00
.1 stz bPrintedBlankLine
2020-08-25 10:56:00 +00:00
2019-02-27 22:02:56 +00:00
.2 jsr CS.RUN.PRINTNUM
2019-02-28 18:48:38 +00:00
bcs .99
2020-08-25 10:56:00 +00:00
2019-03-26 12:17:47 +00:00
lda bPrintAll
2019-02-27 22:02:56 +00:00
bmi .3
2019-05-23 15:38:32 +00:00
ldy #$ff
2020-08-25 10:56:00 +00:00
2019-05-23 15:38:32 +00:00
.20 iny
lda (ZPBufPtr),y
beq .21
2020-08-25 10:56:00 +00:00
2019-05-23 15:38:32 +00:00
cmp #C.SPACE
bcs .20
2020-08-25 10:56:00 +00:00
2019-05-23 15:38:32 +00:00
lda #C.SPACE
sta (ZPBufPtr),y
bra .20
.21 >LDYA ZPBufPtr
2020-02-28 07:21:46 +00:00
>SYSCALL PutS
2019-02-27 22:02:56 +00:00
rts
2019-02-28 18:48:38 +00:00
.3 stz ByteIndex
2020-08-25 10:56:00 +00:00
2019-02-27 22:02:56 +00:00
.4 ldy ByteIndex
lda (ZPBufPtr),y
2019-02-28 18:48:38 +00:00
beq .7
2020-08-25 10:56:00 +00:00
2019-02-27 22:02:56 +00:00
cmp #C.SPACE
bcc .5
2020-08-25 10:56:00 +00:00
2020-08-17 20:47:31 +00:00
>SYSCALL PutChar
2019-02-28 18:48:38 +00:00
.99 bcs .9
2020-08-25 10:56:00 +00:00
2019-02-28 18:48:38 +00:00
bra .62
2019-02-27 22:02:56 +00:00
.8 clc
rts
2020-08-25 10:56:00 +00:00
2019-02-27 22:02:56 +00:00
.5 tax
2019-02-28 18:48:38 +00:00
>LDYA L.ASCII
2019-02-27 22:02:56 +00:00
>STYA ZPPtr1
.6 dex
bmi .61
lda ZPPtr1
sec
adc (ZPPtr1)
sta ZPPtr1
2019-02-27 22:02:56 +00:00
bcc .6
inc ZPPtr1+1
2019-02-27 22:02:56 +00:00
bra .6
2018-08-22 15:23:27 +00:00
2020-01-29 20:07:33 +00:00
.61 >PUSHW L.MSG.CTRLCHAR
>PUSHW ZPPtr1
2018-08-22 15:23:27 +00:00
>PUSHBI 2
2020-02-28 07:21:46 +00:00
>SYSCALL PrintF
bcs .9
2020-08-25 10:56:00 +00:00
2019-02-28 18:48:38 +00:00
.62 inc ByteIndex
2019-02-27 22:02:56 +00:00
bne .4
2019-11-17 15:28:24 +00:00
2020-01-29 20:07:33 +00:00
.7 >PUSHW L.MSG.CRLF
>PUSHBI 0
2020-02-28 07:21:46 +00:00
>SYSCALL PrintF
2019-02-27 22:02:56 +00:00
2019-10-03 06:25:27 +00:00
.9 rts
*--------------------------------------
CS.RUN.PRINTNUM clc
2019-03-26 12:17:47 +00:00
lda bLineNum
bpl .8
2020-01-29 20:07:33 +00:00
>PUSHW L.MSG.LINENUM
2019-03-26 12:17:47 +00:00
>PUSHW LineNum
2018-08-22 15:23:27 +00:00
>PUSHBI 2
2020-02-28 07:21:46 +00:00
>SYSCALL PrintF
.8 rts
*--------------------------------------
2019-03-26 12:17:47 +00:00
CS.QUIT lda hBuf
beq CS.RUN.CLOSE
2018-07-18 15:30:42 +00:00
>SYSCALL FreeMem
2020-08-17 20:47:31 +00:00
CS.RUN.CLOSE lda hFile
beq .8
2020-08-25 10:56:00 +00:00
2020-08-17 20:47:31 +00:00
stz hFile
2020-08-25 10:56:00 +00:00
2018-07-19 15:33:55 +00:00
>SYSCALL FClose
.8 clc
rts
*--------------------------------------
CS.DOEVENT sec
rts
*--------------------------------------
CS.END
*--------------------------------------
2019-11-17 15:28:24 +00:00
OptionList .AS "ANSans"
OptionList.Cnt .EQ *-OptionList
OptionVars .DA #bPrintAll,#bLineNum,#bSuppressBlankLine,#bPrintAll,#bLineNum,#bSuppressBlankLine
*--------------------------------------
2018-11-19 07:43:00 +00:00
MSG.USAGE .AS "Usage : CAT File1 [File2...]\r\n"
.AS " -A : Show All non printable caracters\r\n"
.AS " -N : Number all output lines\r\n"
2019-02-27 22:02:56 +00:00
.AS " -S : Suppress repeated empty output lines"
MSG.CRLF .AZ "\r\n"
2020-11-29 13:16:39 +00:00
MSG.INIT .AZ "\e[?7h" Enable Line Wrap
MSG.LINENUM .AZ "%5D:"
MSG.CTRLCHAR .AZ "[%S]"
*--------------------------------------
2019-02-28 18:48:38 +00:00
ASCII >PSTR "NUL"
>PSTR "SOH"
>PSTR "STX"
>PSTR "ETX"
>PSTR "EOT"
>PSTR "ENQ"
>PSTR "ACK"
>PSTR "BEL"
>PSTR "BS"
>PSTR "TAB"
>PSTR "LF"
>PSTR "VT"
>PSTR "FF"
>PSTR "CR"
>PSTR "SO"
>PSTR "SI"
>PSTR "DLE"
>PSTR "DC1"
>PSTR "DC2"
>PSTR "DC3"
>PSTR "DC4"
>PSTR "NAK"
>PSTR "SYN"
>PSTR "ETB"
>PSTR "CAN"
>PSTR "EM"
>PSTR "SUB"
>PSTR "ESC"
>PSTR "FS"
>PSTR "GS"
>PSTR "RS"
>PSTR "US"
*--------------------------------------
.DUMMY
.OR 0
DS.START
2020-08-17 20:47:31 +00:00
DS.END .ED
*--------------------------------------
MAN
2020-08-17 20:47:31 +00:00
SAVE usr/src/bin/cat.s
ASM