From b889c4778ef8ab6bcfec36f34815bdd30fc7a54d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Thu, 14 Feb 2019 14:51:24 +0000 Subject: [PATCH] Kernel 0.92+ --- .Docs/KERNEL.md | 5 ++- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes BIN/SH.S.CORE.txt | 45 +++++++++++++++++----- BIN/SH.S.EXP.txt | 43 +++++++++++++++------ BIN/SH.S.IO.txt | 80 +++++++++++++++++++++++---------------- BIN/SH.S.txt | 4 ++ SYS/KERNEL.S.STDIO.txt | 38 ++++++++++++++----- SYS/KERNEL.S.STDLIB.txt | 4 +- 8 files changed, 154 insertions(+), 65 deletions(-) diff --git a/.Docs/KERNEL.md b/.Docs/KERNEL.md index ca85d0b0..14e20873 100644 --- a/.Docs/KERNEL.md +++ b/.Docs/KERNEL.md @@ -61,7 +61,7 @@ X = DevID # GetDevStatus ## C -`int getdevstatus(short int hDEV, S.DIB* dstat);` +`int getdevstatus(short int DevID, S.DIB* dstat);` ## ASM `>PUSHWI S.DIB` @@ -803,6 +803,9 @@ Specifiers : + \f : Print 'FF' ($0C,12) + \n : Print 'LF' ($0A,10) + \r : Print 'CR' ($0D,13) ++ \t : Print 'TAB' ($09,09) ++ \v : Print 'VT' ($0B,11) ++ \xHH : Print byte with hexadecimal value HH (1 to 2 digits) + \\\\ : Print \ + \\% : Print % diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 5cf58cb69bf0d14966d40a2e669d18efb6440e2c..02543a7f54e216b4c25b38cfc6949ef42bf92b5b 100644 GIT binary patch delta 34121 zcmZ@>2|(1v_n+NmabXwuF1!2P<#gqcLs?GG^57H-0Rc@-3ltC(fdEVURj?{+nP-Qi zmHo)lw6d^6yDaV2_E*^9eU)XI9duh({y#JG-37G&uV3wVX5PGc^XAQ)_ud?||8*&- z9shQH?c-B4I4$V8Z+!w(_zLpB_it@H&$>6kH(FCPc-V8rzE0nJC4;Z;fJJzgH5Jra)#Jh)#pmS_=_O{x{|XSHPTKEX^Axiv2p@L0nhz?ZqbVx z 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

@me%d}Z_%`g?|KhOamTheBn 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 y-vYh^d=K~ma2{|0@FULDA.G CORE.hArgVBuf .9 rts *-------------------------------------- +* http://heirloom.sourceforge.net/sh/sh.1.html +*-------------------------------------- * Input : ZPArgVBuf (String) * Tokenize ZPArgVBuf * :LOOP @@ -61,16 +63,21 @@ CORE.Run >LDYA ZPInputBufPtr Save Actual cmd for looping jsr CORE.GetCharNB bcs .9 Ending 0, CS,A=0 - cmp #'#' commented line? + cmp #C.CR + beq .80 empty line ? + +.10 cmp #'#' commented line? bne .2 .1 jsr CORE.GetNextCharNB - bcs .8 A=0 - eor #C.CR - bne .1 - jsr CORE.GetNextChar + bcs .8 EOF + cmp #C.CR + bne .1 EOL + +.80 jsr CORE.GetNextChar skip CR... -.8 clc +.8 lda #0 + clc .9 rts EOL, CS,A=0 .2 cmp #'|' @@ -141,10 +148,24 @@ CORE.ExecCmd jsr CORE.GetNextCharNB Skip EoL char CORE.ExecCmd.1 lda #0 sta (ZPArgVBufPtr) + + jsr CORE.StkGet IF,WHILE,FOR ? + bcs .3 no particular context, exec... + tax + + >LDA.G CORE.IntCmd + bmi .2 external ... + + and #$3F + cmp #C.FOR + bcs .3 FOR...FI : always execute + +.2 txa + bpl .8 context is FALSE, skip line + asl + bpl .8 parent context is FALSE, skip line - - - >LDYA ZPArgVBuf +.3 >LDYA ZPArgVBuf >STYA ZPArgVBufPtr >LDA.G CORE.IntCmd @@ -153,6 +174,9 @@ CORE.ExecCmd.1 lda #0 jmp (J.CMD,x) +.8 clc + rts + CORE.ExecExtCmd >PUSHB.G CORE.PSFlags >LDYA ZPArgVBuf >SYSCALL execv @@ -314,6 +338,9 @@ CORE.ArgV.NextChar CORE.ArgV.Next lda (ZPArgVBufPtr) beq .8 + >LDYA ZPArgVBufPtr + >STYA ZPArgVBufPrev + .1 jsr CORE.ArgV.NextChar lda (ZPArgVBufPtr) bne .1 diff --git a/BIN/SH.S.EXP.txt b/BIN/SH.S.EXP.txt index c93264e7..8418be94 100644 --- a/BIN/SH.S.EXP.txt +++ b/BIN/SH.S.EXP.txt @@ -80,7 +80,7 @@ EXP.TEST lda (ZPArgVBufPtr) jsr CORE.ArgV.Next beq .9 - >LDYA L.EXP.OP.UNARY -d -e -f ? + >LDYA L.EXP.OP.UNARY -d -e -f -n -z ? jsr CORE.LookupArgVBuf bcs .1 @@ -93,8 +93,8 @@ EXP.TEST lda (ZPArgVBufPtr) >EOR.G CORE.Test sta (pData),y - - bra .8 go check ] + lda (ZPArgVBufPtr) + bra .80 go check ] .9 lda #E.ESYN sec @@ -118,7 +118,7 @@ EXP.TEST lda (ZPArgVBufPtr) .8 jsr CORE.ArgV.Next beq .9 - cmp #']' +.80 cmp #']' bne .9 ldy #1 @@ -128,13 +128,14 @@ EXP.TEST lda (ZPArgVBufPtr) rts *-------------------------------------- EXP.TEST.UNARY jsr CORE.ArgV.Next - beq .9 we need one arg + beq EXP.OP.UNARY.ESYN we need one arg or ] >LDA.G CORE.Operator tax jmp (J.EXP.OP.UNARY,x) -.9 lda #E.ESYN +EXP.OP.UNARY.ESYN + lda #E.ESYN sec rts @@ -161,6 +162,10 @@ EXP.OP.UNARY.DEF.7 >PUSHEA.G StatBuf >LDYA ZPArgVBufPtr >SYSCALL STAT + php + + jsr CORE.ArgV.Next + plp rts EXP.OP.UNARY.DEF.8 @@ -173,6 +178,22 @@ EXP.OP.UNARY.DEF.9 clc rts *-------------------------------------- +EXP.OP.UNARY.N lda (ZPArgVBufPtr) [ -N ] ? + cmp #']' + beq EXP.OP.UNARY.DEF.9 FALSE + + jsr CORE.ArgV.Next + beq EXP.OP.UNARY.ESYN + bra EXP.OP.UNARY.DEF.8 arg is not empty TRUE + +EXP.OP.UNARY.Z lda (ZPArgVBufPtr) [ -Z ] ? + cmp #']' + beq EXP.OP.UNARY.DEF.8 TRUE + + jsr CORE.ArgV.Next + beq EXP.OP.UNARY.ESYN + bra EXP.OP.UNARY.DEF.9 FALSE +*-------------------------------------- EXP.TEST.BINARY >LDA.G CORE.Operator beq .1 = @@ -184,7 +205,7 @@ EXP.TEST.BINARY >LDA.G CORE.Operator .1 jsr CORE.ArgV.Next beq .9 - >PUSHW ZPPtr1 + >PUSHW ZPArgVBufPrev >LDYA ZPArgVBufPtr >SYSCALL strcmp ror CS if != @@ -199,15 +220,15 @@ EXP.TEST.BINARY >LDA.G CORE.Operator rts *-------------------------------------- EXP.TEST.BINARY.NUM - jsr CORE.ArgV.Next - beq .9 - - >LDYA ZPPtr1 + >LDYA ZPArgVBufPrev >SYSCALL AToL bcs .9 >PULLL.G M32.ACC + jsr CORE.ArgV.Next + beq .9 + >LDYA ZPArgVBufPtr >SYSCALL AToL bcs .9 diff --git a/BIN/SH.S.IO.txt b/BIN/SH.S.IO.txt index 0ec20b29..e05a8810 100644 --- a/BIN/SH.S.IO.txt +++ b/BIN/SH.S.IO.txt @@ -97,42 +97,54 @@ IO.Reset.Err >LDA.G IO.hErr .8 rts *-------------------------------------- IO.PrintBatchErrMsg - >LDA.G hInputBuf - >SYSCALL GetMemPtr + >LDYA ZPInputBuf >STYA ZPPtr1 - stz ZPPtr3 - stz ZPPtr3+1 + stz ZPPtr2 Line Count + stz ZPPtr2+1 -.1 >LDYA ZPPtr1 - >STYA ZPPtr2 Save actual line start - - inc ZPPtr3 +.1 inc ZPPtr2 bne .2 - inc ZPPtr3+1 + inc ZPPtr2+1 -.2 lda (ZPPtr1) - beq .6 EoF - inc ZPPtr1 - bne .3 - inc ZPPtr1+1 +.2 ldy #$ff + +.3 iny + lda (ZPPtr1),y + beq .4 EoF + + cmp #C.CR + bne .3 Scan until EoL -.3 cmp #$0D - bne .2 Scan until EoL - - ldx ZPPtr1 - cpx ZPInputBufPtr +.4 tya + clc + adc ZPPtr1 + tax lda ZPPtr1+1 + adc #0 + pha + + cpx ZPInputBufPtr sbc ZPInputBufPtr+1 - bcc .1 not this line.... + pla + bcs .41 + + inx + bne .40 + inc +.40 stx ZPPtr1 + sta ZPPtr1+1 + bra .1 -.4 ldy #0 +.41 ldy #$ff -.5 lda (ZPPtr2),y +.5 iny + lda (ZPPtr1),y beq .6 - iny - cmp #$0D + + cmp #C.CR beq .6 + phy >PUSHA ldy #S.PS.hStdErr @@ -147,22 +159,24 @@ IO.PrintBatchErrMsg lda (pPS),y >SYSCALL fprintf - lda ZPInputBufPtr - sec - sbc ZPPtr2 - beq .8 - tay + ldy #$ff -.7 phy +.7 iny + lda (ZPPtr1),y + beq .8 + + cmp #C.CR + beq .8 + + phy >PUSHBI '-' ldy #S.PS.hStdErr lda (pPS),y >SYSCALL fputc ply - dey - bne .7 + bra .7 -.8 >PUSHW ZPPtr3 +.8 >PUSHW ZPPtr2 >PUSHBI 2 >PUSHW L.MSG.BATCHERR diff --git a/BIN/SH.S.txt b/BIN/SH.S.txt index f169940c..45cc9970 100644 --- a/BIN/SH.S.txt +++ b/BIN/SH.S.txt @@ -153,6 +153,8 @@ L.EXP.OP.UNARY .DA EXP.OP.UNARY J.EXP.OP.UNARY .DA EXP.OP.UNARY.D .DA EXP.OP.UNARY.E .DA EXP.OP.UNARY.F + .DA EXP.OP.UNARY.N + .DA EXP.OP.UNARY.Z L.EXP.OP.BINARY .DA EXP.OP.BINARY L.EXP.OP.MATH .DA EXP.OP.MATH J.EXP.OP.MATH .DA M32.Add @@ -583,6 +585,8 @@ EXP.BEGIN .AZ "![" EXP.OP.UNARY .AZ "-D" .AZ "-E" .AZ "-F" + .AZ "-N" + .AZ "-Z" .HS 00 EXP.OP.BINARY .AZ "=" .AZ "!=" diff --git a/SYS/KERNEL.S.STDIO.txt b/SYS/KERNEL.S.STDIO.txt index 6396db8a..1521c603 100644 --- a/SYS/KERNEL.S.STDIO.txt +++ b/SYS/KERNEL.S.STDIO.txt @@ -160,6 +160,9 @@ K.FPutS jsr PFT.CheckNodeA set IO.hFD * + \f : Print 'FF' ($0C,12) * + \n : Print 'LF' ($0A,10) * + \r : Print 'CR' ($0D,13) +* + \t : Print 'TAB' ($09,09) +* + \v : Print 'VT' ($0B,11) +* + \xHH : Print byte with hexadecimal value HH (1 to 2 digits) * + \\\\ : Print \ * + \\% : Print % * Modifiers for len and padding : @@ -202,14 +205,14 @@ K.PrintF.1 stz PrintF.Cnt .1 jsr MEM.GetCharPtr1 beq .8 end of format.. - cmp #'%' +.22 cmp #'%' bne .10 stz K.PrintF.PadL lda #' ' sta K.PrintF.PadC -.2 ldx #PrintFTBL2-PrintFTBL1-1 +.2 ldx #PrintFTBL1.Cnt-1 jsr MEM.GetCharPtr1 beq .99 @@ -268,20 +271,35 @@ K.PrintF.1 stz PrintF.Cnt .10 cmp #'\' bne .20 - ldx #PrintFTBL2.OUT-PrintFTBL2-1 jsr MEM.GetCharPtr1 beq .99 + ldx #PrintFTBL2.Cnt-1 + .12 cmp PrintFTBL2,x - beq .13 + beq .19 dex bpl .12 - bra .1 + + cmp #'x' + bne .1 -.13 lda PrintFTBL2.OUT,x + >LDYA ZPPtr1 + >STYA ZPPtr2 + + jsr STDLIB.GetHex + bcs .99 + + jsr MEM.AddYToPtr1 + +.14 lda HEXBUF + bra .20 + +.19 lda PrintFTBL2.OUT,x .20 jsr PrintF.COut - bcc .1 + bcs .99 + jmp .1 .99 php pha @@ -307,8 +325,10 @@ PrintF.ESC jmp (.1,x) .DA PrintF.S,PrintF.SS *-------------------------------------- PrintFTBL1 .AS "bBdDuefhHiILnNsS" -PrintFTBL2 .AS "befnr\%" -PrintFTBL2.OUT .HS 08.1B.0C.0A.0D \b\e\f\n\r +PrintFTBL1.Cnt .EQ *-PrintFTBL1 +PrintFTBL2 .AS "befnrtv\%" +PrintFTBL2.Cnt .EQ *-PrintFTBL2 +PrintFTBL2.OUT .HS 08.1B.0C.0A.0D.09.0B \b\e\f\n\r\t\v .DA #'\' \\ .DA #'%' \% *-------------------------------------- diff --git a/SYS/KERNEL.S.STDLIB.txt b/SYS/KERNEL.S.STDLIB.txt index 5b22cb99..878cc70b 100644 --- a/SYS/KERNEL.S.STDLIB.txt +++ b/SYS/KERNEL.S.STDLIB.txt @@ -145,7 +145,7 @@ STDLIB.GetHex lda (ZPPtr2) sta STDLIB.32 - ldy #$ff + ldy #0 .1 iny lda (ZPPtr2),y @@ -177,7 +177,7 @@ STDLIB.GetHex lda (ZPPtr2) * Convert Decimal int at ZPPtr2 to STDLIB.32 *-------------------------------------- STDLIB.GetDec jsr STDLIB.32.Clear - + ldy #$ff .1 iny