A2osX/BIN/CAT.S.txt
2017-08-22 08:37:03 +02:00

392 lines
6.8 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

PR#3
PREFIX /A2OSX.BUILD
NEW
INC 1
AUTO 6
.LIST OFF
.OP 65C02
.OR $2000
.TF /A2OSX.BUILD/BIN/CAT
*--------------------------------------
.INB /A2OSX.BUILD/INC/MACROS.I
.INB /A2OSX.BUILD/INC/A2OSX.I
.INB /A2OSX.BUILD/INC/MLI.ERR.I
*--------------------------------------
ZPPTR1 .EQ ZPBIN
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
CS.START cld
jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA 0
.DA CS.END-CS.START Code Length To Relocate
.DA DS.END-DS.START Data Segment to Allocate
.DA 0
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
L.MSG.USAGE .DA MSG.USAGE
L.MSG.LINENUM .DA MSG.LINENUM
L.MSG.CTRLCHAR .DA MSG.CTRLCHAR
L.ASCII .DA ASCII
.DA 0
*--------------------------------------
CS.INIT >SYSCALL GetArgC
sta ArgCount
cmp #1
beq .99
.1 dec ArgCount
beq .5
lda ArgCount
>SYSCALL GetArgA
>STYA ZPPtr1
ldy #1
lda (ZPPtr1),y
cmp #'-'
bne .4
lda (ZPPtr1)
cmp #2
bne .4
iny
lda (ZPPtr1),y
ldx OptionList
.2 cmp OptionList,x
beq .3
dex
bne .2
.99 >LDYA L.MSG.USAGE
>SYSCALL PrintFYA
lda #SYSMGR.ERRSYN
sec
rts
.3 ldy OptionVars-1,x
lda #$80
sta (pData),y
bra .1
.4 inc FileCount
bra .1 scan for any other args
.5 lda FileCount
beq .99
.8
* lda (pPs)
* ora #S.PS.F.EVENT Now accept events
* sta (pPs)
clc
rts
*--------------------------------------
CS.RUN >SYSCALL GetC
bcs .10 no char
cmp #$03 Ctrl-C
beq .99 Abort....
cmp #$13 Ctrl-S
bne .10
ldy #bPause
lda (pData),y
eor #$ff
sta (pData),y
bne .8
.10 ldy #bPause
lda (pData),y
bne .8 Pause...
ldy #hFILE
lda (pData),y
bne .2
.1 ldy #ArgIndex
lda (pData),y
inc
sta (pData),y
>SYSCALL GetArgA
bcs .99 No more arg...the end!
>STYA ZPPtr1
ldy #1
lda (ZPPtr1),y
cmp #'-'
beq .1 An option, skip...
>LDYA ZPPtr1
jsr CS.RUN.OPEN
bcs .9
ldy #hFILE
sta (pData),y
clc
rts
.2 pha
>PUSHWI UsrBuf256
>PUSHWI 256
pla
>PUSHA
>SYSCALL FRead
bcc CS.RUN.PRINT
cmp #MLI.ERR.EOF
bne .9
jsr CS.RUN.CLOSE
.8 clc
rts
.99 lda #0 Exit with no Error
.9 sec
rts
*--------------------------------------
CS.RUN.PRINT sty BytesRead Y,A = Bytes read
stz ByteIndex
ldy #LineNum
lda (pData),y
clc
adc #1
sta (pData),y
iny
lda (pData),y
adc #0
sta (pData),y
ldy #bSuppressBlankLine
lda (pData),y
bpl .10
lda BytesRead
beq .12 Empty line ?
dec
bne .1 Only one CR ?
lda UsrBuf256
cmp #13
bne .1
.12 ldy #bPrintedBlankLine
lda (pData),y
bmi .8
lda #$ff
sta (pData),y
bra .10
.1 ldy #bPrintedBlankLine
lda #0
sta (pData),y
.10 jsr CS.RUN.PRINTNUM
bcs .9
.20 ldx ByteIndex
lda UsrBuf256,x
cmp #' '
bcs .6
cmp #13 Allow printing of CR even if not bPrintAll
beq .4
ldy #bPrintAll
lda (pData),y
bpl .7
>LDYA L.ASCII
>STYA ZPPtr1
lda UsrBuf256,x
tax
.2 dex
bmi .3
lda ZPPtr1
sec
adc (ZPPtr1)
sta ZPPtr1
bcc .2
inc ZPPtr1+1
bra .2
.3 >PUSHW ZPPtr1
>LDYA L.MSG.CTRLCHAR
>SYSCALL PrintFYA
bcs .9
bra .7
.4 lda #13
>SYSCALL PutCA
bcs .9
lda #10
.6 >SYSCALL PutCA
bcs .9
.7 inc ByteIndex
dec BytesRead
bne .20
.8 clc
.9 rts
*--------------------------------------
CS.RUN.PRINTNUM clc
ldy #bLineNum
lda (pData),y
bpl .8
ldy #LineNum
lda (pData),y
pha
iny
lda (pData),y
ply
>PUSHYA
>LDYA L.MSG.LINENUM
>SYSCALL PrintFYA
.8 rts
*--------------------------------------
CS.RUN.OPEN >SYSCALL GetFullPathYA
bcs .9
stx hFullPath
pha
>PUSHWI 0 Aux type
>PUSHBI 4 S.FILEINFO.TYPE.TXT
>PUSHBI SYS.FOpen.R+SYS.FOpen.T
pla
>PUSHYA
>SYSCALL FOpen
bcs .99
jsr .99
pha
lda #0
ldy #bPrintedBlankLine Reset this flag for the new file
sta (pData),y
pla
clc
rts
.99 pha
lda hFullPath
>SYSCALL FreeMemA
pla
.9 sec
rts
*--------------------------------------
CS.RUN.CLOSE
CS.QUIT ldy #hFILE
lda (pData),y
beq .8
pha
lda #0
sta (pData),y
pla
>SYSCALL FCloseA
.8 clc
rts
*--------------------------------------
CS.DOEVENT sec
rts
*--------------------------------------
CS.END
*--------------------------------------
OptionList >PSTR "ANSans"
OptionVars .DA #bPrintAll,#bLineNum,#bSuppressBlankLine,#bPrintAll,#bLineNum,#bSuppressBlankLine
*--------------------------------------
MSG.USAGE >CSTR "Usage : CAT File1 [File2...]\r\n -A : Show All non printable caracters\r\n -N : Number all output lines\r\n -S : Suppress repeated empty output lines\r\n"
MSG.LINENUM >CSTR "%5D:"
MSG.CTRLCHAR >CSTR "[%S]"
*--------------------------------------
ASCII >PSTR "NULL"
>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"
*--------------------------------------
ArgCount .BS 1
FileCount .BS 1
hFullPath .BS 1
BytesRead .BS 1
ByteIndex .BS 1
*--------------------------------------
.DUMMY
.OR 0
DS.START
bPause .BS 1
bPrintAll .BS 1
bLineNum .BS 1
bSuppressBlankLine .BS 1
ArgIndex .BS 1
hFILE .BS 1
LineNum .BS 2
bPrintedBlankLine .BS 1
DS.END
.ED
*--------------------------------------
MAN
SAVE /A2OSX.SRC/BIN/CAT.S
ASM