diff --git a/BIN/CAT.S.txt b/BIN/CAT.S.txt index aaef9f7c..dc860dde 100644 --- a/BIN/CAT.S.txt +++ b/BIN/CAT.S.txt @@ -1,376 +1,246 @@ NEW AUTO 3,1 - .LIST OFF - .OP 65C02 - .OR $2000 - .TF bin/cat + .LIST OFF + .OP 65C02 + .OR $2000 + .TF bin/cat *-------------------------------------- - .INB inc/macros.i - .INB inc/a2osx.i - .INB inc/kernel.i - .INB inc/mli.i - .INB inc/mli.e.i + .INB inc/macros.i + .INB inc/a2osx.i + .INB inc/kernel.i + .INB inc/mli.i + .INB inc/mli.e.i *-------------------------------------- - .DUMMY - .OR ZPBIN + .DUMMY + .OR ZPBIN ZS.START -ZPPtr1 .BS 2 -ZPBufPtr .BS 2 -ByteIndex .BS 1 -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 -ZS.END .ED +ZPPtr1 .BS 2 +ZPBufPtr .BS 2 +ByteIndex .BS 1 +ArgCount .BS 1 +FileCount .BS 1 +bPause .BS 1 +bDummy .BS 1 +bStdout .BS 1 +ArgIndex .BS 1 +hBuf .BS 1 +hFile .BS 1 +ZS.END .ED *-------------------------------------- -* File Header (16 Bytes) +* File Header (16 Bytes) *-------------------------------------- -CS.START cld - jmp (.1,x) - .DA #$61 6502,Level 1 (65c02) - .DA #1 BIN Layout Version 1 - .DA #S.PS.F.EVENT S.PS.F - .DA #0 - .DA CS.END-CS.START CS - .DA DS.END-DS.START DS - .DA #64 SS - .DA #ZS.END-ZS.START Zero Page Size - .DA 0 +CS.START cld + jmp (.1,x) + .DA #$61 6502,Level 1 (65c02) + .DA #1 BIN Layout Version 1 + .DA #S.PS.F.EVENT S.PS.F + .DA #0 + .DA CS.END-CS.START CS + .DA DS.END-DS.START DS + .DA #64 SS + .DA #ZS.END-ZS.START Zero Page Size + .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.CRLF .DA MSG.CRLF -L.MSG.INIT .DA MSG.INIT -L.MSG.LINENUM .DA MSG.LINENUM -L.MSG.CTRLCHAR .DA MSG.CTRLCHAR -L.ASCII .DA ASCII - .DA 0 +.1 .DA CS.INIT + .DA CS.RUN + .DA CS.DOEVENT + .DA CS.QUIT +L.MSG.USAGE .DA MSG.USAGE +L.MSG.CRLF .DA MSG.CRLF +L.MSG.INIT .DA MSG.INIT + .DA 0 *-------------------------------------- -CS.INIT clc - rts +CS.INIT clc + rts *-------------------------------------- -CS.RUN -.1 inc ArgCount - lda ArgCount - >SYSCALL ArgV - bcs .7 +CS.RUN +.1 stz bStdout + + inc ArgCount + lda ArgCount + >SYSCALL ArgV + bcs .7 - >STYA ZPPtr1 + >STYA ZPPtr1 - lda (ZPPtr1) - cmp #'-' - bne .4 + lda (ZPPtr1) + cmp #'-' + bne .4 - ldy #1 - lda (ZPPtr1),y + ldy #1 + lda (ZPPtr1),y - ldx #OptionList.Cnt-1 - -.2 cmp OptionList,x - beq .3 + ldx #OptionList.Cnt-1 + +.2 cmp OptionList,x + beq .3 - dex - bpl .2 + dex + bpl .2 -.99 >PUSHW L.MSG.USAGE - >PUSHBI 0 - >SYSCALL PrintF - lda #E.SYN - sec -.9 rts +.99 >PUSHW L.MSG.USAGE + >PUSHBI 0 + >SYSCALL PrintF + lda #E.SYN + sec +.9 rts -.3 ldy OptionVars,x - lda #$80 - sta 0,y - bra .1 +.3 ldy OptionVars,x + lda #$80 + sta 0,y + bra .1 -.4 inc FileCount - bra .1 scan for any other args +.4 inc FileCount + bra .1 scan for any other args -.7 lda FileCount - beq .99 +.7 lda FileCount + beq .99 - >LDYAI 256 - >SYSCALL GetMem - bcs .9 + >LDYAI 256 + >SYSCALL GetMem + bcs .9 - >STYA ZPBufPtr - stx hBuf - - ldy #S.PS.hStdOut - lda (pPS),y + >STYA ZPBufPtr + stx hBuf + + ldy #S.PS.hStdOut + lda (pPS),y - tax - - lsr - bcc CS.RUN.LOOP - - lda Nod.Table.hFD-2,x - >SYSCALL GetMemPtr - >STYA ZPPtr1 + tax + + lsr + bcc CS.RUN.LOOP + + lda Nod.Table.hFD-2,x + >SYSCALL GetMemPtr + >STYA ZPPtr1 - lda (ZPPtr1) + lda (ZPPtr1) - beq CS.RUN.LOOP + beq CS.RUN.LOOP - cmp #S.FD.T.PIPE - beq CS.RUN.LOOP - - >PUSHW L.MSG.INIT - >PUSHBI 0 - >SYSCALL PrintF + cmp #S.FD.T.PIPE + beq CS.RUN.LOOP + + lda #$ff + sta bStdout + + >PUSHW L.MSG.INIT + >PUSHBI 0 + >SYSCALL PrintF *-------------------------------------- -CS.RUN.LOOP ldy #S.PS.hStdIn - lda (pPS),y - >SYSCALL FEOF - bcs .90 IO error +CS.RUN.LOOP ldy #S.PS.hStdIn + lda (pPS),y + >SYSCALL FEOF + bcs .90 IO error - tay - bne .10 no char + tay + bne .10 no char - >SYSCALL GetChar - bcs .9 IO error + >SYSCALL GetChar + bcs .9 IO error - cmp #$03 Ctrl-C - beq .9 Abort.... + cmp #$03 Ctrl-C + beq .9 Abort.... - cmp #$13 Ctrl-S - bne .10 + cmp #$13 Ctrl-S + bne .10 - lda bPause - eor #$ff - sta bPause - bne CS.RUN.LOOP + lda bPause + eor #$ff + sta bPause + bne CS.RUN.LOOP -.10 lda bPause - bne CS.RUN.LOOP Pause... +.10 lda bPause + bne CS.RUN.LOOP Pause... -.11 lda hFile - bne .2 +.11 lda hFile + bne .2 -.1 inc ArgIndex - lda ArgIndex - >SYSCALL ArgV - bcs .99 No more arg...the end! +.1 inc ArgIndex + lda ArgIndex + >SYSCALL ArgV + bcs .99 No more arg...the end! - >STYA ZPPtr1 - lda (ZPPtr1) - cmp #'-' - beq .1 An option, skip... + >STYA ZPPtr1 + lda (ZPPtr1) + cmp #'-' + beq .1 An option, skip... - >LDYA ZPPtr1 - jsr CS.RUN.OPEN -.90 bcs .9 + >LDYA ZPPtr1 + jsr CS.RUN.OPEN +.90 bcs .9 - sta hFile + sta hFile -.2 >PUSHA - >PUSHW ZPBufPtr - >PUSHWI 254 Leave room for CRLF - >SYSCALL FGetS - bcs .7 +.2 lda hFile + >SYSCALL GetC + bcs .7 - jsr CS.RUN.PRINT - bcc CS.RUN.LOOP - rts + pha + >SYSCALL PutChar + pla -.7 cmp #MLI.E.EOF - bne .9 + cmp #C.CR + bne CS.RUN.LOOP - jsr CS.RUN.CLOSE - jmp CS.RUN.LOOP + lda bStdout + beq CS.RUN.LOOP -.99 lda #0 Exit with no Error -.9 sec - rts + lda #C.LF + >SYSCALL PutChar + + bra CS.RUN.LOOP + +.7 cmp #MLI.E.EOF + bne .9 + + jsr CS.RUN.CLOSE + jmp CS.RUN.LOOP + +.99 lda #0 Exit with no Error +.9 sec + rts *-------------------------------------- -CS.RUN.OPEN stz bPrintedBlankLine Reset this flag for the new file - >PUSHYA - >PUSHBI O.RDONLY+O.TEXT - >PUSHBI S.FI.T.TXT - >PUSHWZ Aux type - >SYSCALL FOpen - rts +CS.RUN.OPEN >PUSHYA + >PUSHBI O.RDONLY+O.TEXT + >PUSHBI S.FI.T.TXT + >PUSHWZ Aux type + >SYSCALL FOpen + rts *-------------------------------------- -CS.RUN.PRINT inc LineNum - bne .10 +CS.QUIT lda hBuf + beq CS.RUN.CLOSE + >SYSCALL FreeMem - inc LineNum+1 +CS.RUN.CLOSE lda hFile + beq .8 -.10 lda bSuppressBlankLine - bpl .2 + stz hFile - lda (ZPBufPtr) - bne .1 Empty line ? - - lda bPrintedBlankLine - bmi .8 - - lda #$ff - sta bPrintedBlankLine - bra .2 - -.1 stz bPrintedBlankLine - -.2 jsr CS.RUN.PRINTNUM - bcs .99 - - lda bPrintAll - bmi .3 - - ldy #$ff - -.20 iny - lda (ZPBufPtr),y - beq .21 - - cmp #C.SPACE - bcs .20 - - lda #C.SPACE - sta (ZPBufPtr),y - bra .20 - -.21 >LDYA ZPBufPtr - >SYSCALL PutS - rts - -.3 stz ByteIndex - -.4 ldy ByteIndex - lda (ZPBufPtr),y - beq .7 - - cmp #C.SPACE - bcc .5 - - >SYSCALL PutChar -.99 bcs .9 - - bra .62 - -.8 clc - rts - -.5 tax - - >LDYA L.ASCII - >STYA ZPPtr1 -.6 dex - bmi .61 - lda ZPPtr1 - sec - adc (ZPPtr1) - sta ZPPtr1 - bcc .6 - inc ZPPtr1+1 - bra .6 - -.61 >PUSHW L.MSG.CTRLCHAR - >PUSHW ZPPtr1 - >PUSHBI 2 - >SYSCALL PrintF - bcs .9 - -.62 inc ByteIndex - bne .4 - -.7 >PUSHW L.MSG.CRLF - >PUSHBI 0 - >SYSCALL PrintF - -.9 rts + >SYSCALL FClose +.8 clc + rts *-------------------------------------- -CS.RUN.PRINTNUM clc - lda bLineNum - bpl .8 - - >PUSHW L.MSG.LINENUM - >PUSHW LineNum - >PUSHBI 2 - >SYSCALL PrintF -.8 rts -*-------------------------------------- -CS.QUIT lda hBuf - beq CS.RUN.CLOSE - >SYSCALL FreeMem - -CS.RUN.CLOSE lda hFile - beq .8 - - stz hFile - - >SYSCALL FClose -.8 clc - rts -*-------------------------------------- -CS.DOEVENT sec - rts +CS.DOEVENT sec + rts *-------------------------------------- CS.END *-------------------------------------- -OptionList .AS "ANSans" -OptionList.Cnt .EQ *-OptionList -OptionVars .DA #bPrintAll,#bLineNum,#bSuppressBlankLine,#bPrintAll,#bLineNum,#bSuppressBlankLine +OptionList .AS "x" +OptionList.Cnt .EQ *-OptionList +OptionVars .DA #bDummy *-------------------------------------- -MSG.USAGE .AS "Usage : CAT File1 [File2...]\r\n" - .AS " -A : Show All non printable characters\r\n" - .AS " -N : Number all output lines\r\n" - .AS " -S : Suppress repeated empty output lines" -MSG.CRLF .AZ "\r\n" -MSG.INIT .AZ "\e[?7h" Enable Line Wrap -MSG.LINENUM .AZ "%5D:" -MSG.CTRLCHAR .AZ "[%S]" +MSG.USAGE .AS "Usage : CAT File1 [File2...]" +MSG.CRLF .AZ "\r\n" +MSG.INIT .AZ "\e[?7h" Enable Line Wrap *-------------------------------------- -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 + .DUMMY + .OR 0 DS.START -DS.END .ED +DS.END .ED *-------------------------------------- MAN SAVE usr/src/bin/cat.s