diff --git a/.Docs/KERNEL.md b/.Docs/KERNEL.md index 6e13c228..10e3ec57 100644 --- a/.Docs/KERNEL.md +++ b/.Docs/KERNEL.md @@ -841,7 +841,7 @@ Print A (char) to hFILE `>PUSHB character` `>SYSCALL fputc` -## RETURN VALUE +## RETURN VALUE CC = success # putchar (BLOCKING) @@ -855,7 +855,7 @@ Print A (char) to StdOut `lda character` `>SYSCALL putchar` -## RETURN VALUE +## RETURN VALUE CC = success # puts (BLOCKING) @@ -869,7 +869,7 @@ Write Str to StdOut, appends '\r\n' `>LDYAI str` `>SYSCALL PutS` -## RETURN VALUE +## RETURN VALUE CC = success # fputs (BLOCKING) @@ -884,7 +884,7 @@ Write Str to hFILE `>PUSHW str` `>SYSCALL fputs` -## RETURN VALUE +## RETURN VALUE CC = success # fgets (BLOCKING) @@ -903,8 +903,8 @@ string is then terminated with a null byte. `>PUSHW n` `>SYSCALL fgets` -## RETURN VALUE - Y,A: s +## RETURN VALUE + Y,A: s CC = success # getchar (BLOCKING) @@ -917,7 +917,7 @@ Get char from StdIn **In:** `>SYSCALL getchar` -## RETURN VALUE +## RETURN VALUE CC = success A = char @@ -932,7 +932,7 @@ Get char from Node `lda stream` `>SYSCALL getc` -## RETURN VALUE +## RETURN VALUE CC = success A = char @@ -947,7 +947,7 @@ push byte back into input stream `>PUSHB stream` `>SYSCALL ungetc` -## RETURN VALUE +## RETURN VALUE CC = success A = char @@ -979,7 +979,7 @@ TODO: replace flags/ftype/auxtype with mode="w+,t=TYP,x=AUXTYPE" + ,t=123 or t=$ff or t=TXT + ,x=12345 or x=$ffff -## RETURN VALUE +## RETURN VALUE CC : A = hFILE CS : A = EC @@ -1063,7 +1063,7 @@ Test the end-of-file indicator for hFILE `>SYSCALL feof` ## RETURN VALUE - CC : + CC : A = $ff EOF A = 0 NOT EOF CS : @@ -1123,20 +1123,20 @@ Prints C-Style String ## ASM **In:** -PrintF : (example is for printing Y,A as integer : format="%I", 2 bytes) +PrintF : (example is for printing Y,A as integer : format="%I", 2 bytes) `>PUSHW format` `>PUSHW i` `...` `>PUSHBI 2` #bytecount `>SYSCALL PrintF` -FPrintF : +FPrintF : `>PUSHB hFILE` `>PUSHW format` `>PUSHW i` `...` `>PUSHBI 2` #bytecount `>SYSCALL fprintf` -SPrintF : +SPrintF : `>PUSHW str` `>PUSHW format` `>PUSHW i` @@ -1148,7 +1148,7 @@ SPrintF : CC : success, Y,A = bytes sent CS : error, A = code from Output Specifiers : -+ %b : pull 1 byte to Print BIN ++ %b : pull 1 byte to Print BIN + %d : pull 1 byte unsigned DEC 0..255 + %D : pull 2 bytes unsigned DEC 0..65535 + %u : pull 4 bytes long unsigned DEC 0..4294967295 @@ -1172,11 +1172,11 @@ Specifiers : + \\\\ : Print \ + \\% : Print % -Modifiers for len and padding : +Modifiers for len and padding : + %d : '9' '12' + %2d : ' 9' '12' + %02d : '09' '12' -+ %11s : 'ABCDEFGH ' ++ %11s : 'ABCDEFGH ' + %011s : 'ABCDEFGH000' + %2f : '3.14' diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 1364649b..7f2ff761 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/.Floppies/A2OSX.TEST.po b/.Floppies/A2OSX.TEST.po index fa57a274..c3561256 100644 Binary files a/.Floppies/A2OSX.TEST.po and b/.Floppies/A2OSX.TEST.po differ diff --git a/BIN/ACOS.S.CODE.txt b/BIN/ACOS.S.CODE.txt index e81d0540..b0abb4c7 100644 --- a/BIN/ACOS.S.CODE.txt +++ b/BIN/ACOS.S.CODE.txt @@ -41,18 +41,18 @@ CODE.LDYXI lda #$A0 LDY #imm jsr CODE.EmitByte tya jsr CODE.EmitByte - - lda #$A2 LDX #imm +*-------------------------------------- +CODE.LDXI lda #$A2 LDX #imm jsr CODE.EmitByte txa - jmp CODE.EmitByte + bra CODE.EmitByte *-------------------------------------- CODE.JSRRT lda #$20 JSR jsr CODE.EmitByte lda J.RT,x jsr CODE.EmitByte lda J.RT+1,x - jmp CODE.EmitByte + bra CODE.EmitByte *-------------------------------------- CODE.FPUCALL lda #$A2 LDX #imm jsr CODE.EmitByte @@ -65,10 +65,6 @@ CODE.FPUCALL lda #$A2 LDX #imm lda /A2osX.FPUCALL bra CODE.EmitByte *-------------------------------------- -CODE.FPRINTCRLF ldx #C.CR - jsr CODE.PutChar - ldx #C.LF -*-------------------------------------- CODE.PutChar lda #$A9 LDA #imm jsr CODE.EmitByte txa diff --git a/BIN/ACOS.S.CORE.txt b/BIN/ACOS.S.CORE.txt index 034f5061..6aa448d8 100644 --- a/BIN/ACOS.S.CORE.txt +++ b/BIN/ACOS.S.CORE.txt @@ -715,6 +715,9 @@ CORE.IsEndExp cmp #')' CS = true cmp #';' beq CORE.ToUpperCase.RTS + cmp #'\' + beq CORE.ToUpperCase.RTS + CORE.IsEndInst cmp #':' CS = true beq .8 diff --git a/BIN/ACOS.S.FN.txt b/BIN/ACOS.S.FN.txt index a0199b66..88fd10e1 100644 --- a/BIN/ACOS.S.FN.txt +++ b/BIN/ACOS.S.FN.txt @@ -34,7 +34,14 @@ FN.KEY sec rts *-------------------------------------- -FN.LEFTd jsr CORE.CheckOP +FN.LEFTd ldx #RT.LEFTd.ID + bra FN.RIGHTd.1 + +FN.RIGHTd ldx #RT.RIGHTd.ID + +FN.RIGHTd.1 phx + + jsr CORE.CheckOP bcs .99 jsr EXP.Eval @@ -55,7 +62,7 @@ FN.LEFTd jsr CORE.CheckOP jsr CORE.CheckCP bcs .99 - ldx #RT.LEFTd.ID + plx jsr CODE.JSRRT lda #'$' @@ -66,7 +73,9 @@ FN.LEFTd jsr CORE.CheckOP .90 lda #E.TMISMATCH sec -.99 rts + +.99 plx + rts *-------------------------------------- FN.LEN jsr CORE.CheckOP bcs .99 @@ -90,11 +99,58 @@ FN.LEN jsr CORE.CheckOP sec .99 rts *-------------------------------------- -FN.MIDd +FN.MIDd jsr CORE.CheckOP + bcs .99 + + jsr EXP.Eval str + bcs .99 + + lda EXP.TYPE + beq .90 + + jsr CORE.CheckComma + bcs .99 + + jsr EXP.Eval start + bcs .99 + + lda EXP.TYPE + bne .90 + + jsr CORE.CheckComma + bcc .1 + + ldy #255 + ldx #255 + jsr CODE.PUSHYXI + bra .2 + +.1 jsr EXP.Eval len + bcs .99 + + lda EXP.TYPE + bne .90 + +.2 jsr CORE.CheckCP + bcs .99 + + ldx #RT.MIDd.ID + jsr CODE.JSRRT + + lda #'$' + sta EXP.TYPE + + clc + rts + +.90 lda #E.TMISMATCH + sec + +.99 rts +*-------------------------------------- FN.PDL FN.PEEK FN.RANDOM -FN.RIGHTd FN.RNDd lda #E.CSYN sec diff --git a/BIN/ACOS.S.KW.txt b/BIN/ACOS.S.KW.txt index 9259920c..c48fbff5 100644 --- a/BIN/ACOS.S.KW.txt +++ b/BIN/ACOS.S.KW.txt @@ -72,10 +72,12 @@ KW.GOTO1 jsr CODE.EmitByte .99 rts *-------------------------------------- -KW.HOME - lda #E.CSYN - sec - rts +KW.HOME ldx #8 CLRSCR + jsr CODE.LDXI + + ldx #RT.OUTX.ID + clc + jmp CODE.JSRRT *-------------------------------------- * IP exp THEN st1 ELSE st2 *-------------------------------------- @@ -203,10 +205,21 @@ KW.INFO sec rts *-------------------------------------- -KW.INPUT jsr CORE.GetNextCharNB - bcs .9 +KW.INPUT stz hIn Defaut to Keyboard - jsr CORE.CreateOrGetVar + jsr CORE.GetNextCharNB + bcs .9 + + cmp #'"' + bne .5 + + jsr EXP.CreateStrConst + bcs .99 + + ldx #RT.StrOut.ID + jsr CODE.JSRRT + +.5 jsr CORE.CreateOrGetVar bcs .99 ldx #RT.INPUT.ID @@ -253,18 +266,20 @@ KW.POSITION sec rts *-------------------------------------- -KW.PRINT stz hOut reset to hStdOut - - stz ZPPtr2 put ending CR - - ldy #S.PS.hStdOut - lda (pPS),y - sta hOut Default to screen +KW.PRINT stz ZPPtr2 put ending CR + stz hOut Default to screen .10 jsr CORE.GetNextCharNB bcs .8 -.11 jsr CORE.IsEndInst +.11 cmp #'\' + bne .13 + +.12 ldx #RT.OUTCRLF.ID + jsr CODE.JSRRT + bra .10 + +.13 jsr CORE.IsEndInst bcs .8 jsr CORE.IsKW @@ -287,7 +302,10 @@ KW.PRINT stz hOut reset to hStdOut jsr CORE.GetCharNB bcs .8 -.70 jsr CORE.IsEndInst +.70 cmp #'\' + beq .12 + + jsr CORE.IsEndInst bcs .8 jsr CORE.IsKW @@ -313,7 +331,8 @@ KW.PRINT stz hOut reset to hStdOut .8 bit ZPPtr2 bmi .80 - jsr CODE.FPRINTCRLF + ldx #RT.OUTCRLF.ID + jsr CODE.JSRRT .80 clc rts diff --git a/BIN/ACOS.S.RT.txt b/BIN/ACOS.S.RT.txt index 4eff8652..dfa1746a 100644 --- a/BIN/ACOS.S.RT.txt +++ b/BIN/ACOS.S.RT.txt @@ -51,7 +51,8 @@ RT.StrOut ldy #S.PS.hStdOut >PUSHA lda (pStack),y >PUSHA - >SYSCALL fputs + >PUSHBI 0 + >SYSCALL fprintf inc pStack inc pStack rts @@ -115,6 +116,9 @@ RT.INPUT lda #0 stz ZPPtr1 + ldx #0 OUT.ELW + jsr RT.OUTX + .1 >SYSCALL GetChar bcs RT.INPUT.9 @@ -124,44 +128,80 @@ RT.INPUT lda #0 bcs .7 cmp #C.CR - beq RT.INPUT.8 + bne .2 - cmp #C.BS + lda #0 + sta (ZPStrBuf),y + + ldx #4 OUT.CRLF + jsr RT.OUTX + + bra RT.INPUT.8 + +.2 cmp #C.BS bne .1 cpy #0 beq .1 - - >SYSCALL PutChar - lda #C.SPACE - >SYSCALL PutChar - lda #C.BS - >SYSCALL PutChar + + ldx 6 OUT.BSSPBS + jsr RT.OUTX + dec ZPPtr1 bra .1 -.7 sta (ZPStrBuf),y +.7 cpy #255 + bcs .1 + + sta (ZPStrBuf),y >SYSCALL PutChar inc ZPPtr1 - bne .1 + bra .1 -RT.INPUT.8 lda #0 - sta (ZPStrBuf),y +RT.INPUT.8 ldx #2 OUT.DLW + jsr RT.OUTX >PUSHW ZPStrBuf clc RT.INPUT.9 rts *-------------------------------------- -RT.LEFTd >PULLW ZPPtr2 cnt - lda (pStack) - sta ZPPtr1 - ldy #1 - lda (pStack),y - sta ZPPtr1+1 +RT.LEFTd >PULLB ZPPtr2 cnt + inc pStack + >PULLW ZPPtr1 src str ldy #0 +.1 lda (ZPPtr1),y + sta (ZPStrBuf),y + beq .8 + + iny + cpy ZPPtr2 + bne .1 + + lda #0 + sta (ZPStrBuf),y + +.8 >PUSHW ZPStrBuf + clc + rts +*-------------------------------------- +RT.LEN >PULLYA str + >SYSCALL strlen + >PUSHYA + rts +*-------------------------------------- +RT.MIDd >PULLA len + + tax + inc pStack + >PULLB ZPPtr2 start + inc pStack + >PULLW ZPPtr1 src str + + ldy #0 + .1 lda (ZPPtr1),y beq .8 @@ -169,16 +209,69 @@ RT.LEFTd >PULLW ZPPtr2 cnt cpy ZPPtr2 bne .1 - lda #0 - sta (ZPPtr1),y + tya + clc + adc ZPPtr1 + sta ZPPtr1 + bcc .2 -.8 rts -*-------------------------------------- -RT.LEN >PULLYA str - >SYSCALL strlen - >PUSHYA + inc ZPPtr1+1 + +.2 ldy #0 + +.3 txa + beq .8 + + lda (ZPPtr1),y + sta (ZPStrBuf),y + beq .80 + + iny + dex + bne .3 + + txa + +.8 sta (ZPStrBuf),y + +.80 >PUSHW ZPStrBuf + clc rts *-------------------------------------- +RT.RIGHTd >PULLB ZPPtr2 cnt + inc pStack + >PULLW ZPPtr1 src str + + ldy #$ff + +.1 iny + lda (ZPPtr1),y + bne .1 + + tya + sec + sbc ZPPtr2 + bcc .8 + beq .8 + + clc + adc ZPPtr1 + sta ZPPtr1 + bcc .2 + + inc ZPPtr1+1 + +.2 ldy #$ff + +.3 iny + lda (ZPPtr1),y + sta (ZPStrBuf),y + bne .3 + +.8 >PUSHW ZPStrBuf + clc + rts +*-------------------------------------- RT.STRd >PULLYA int pha >PUSHW ZPStrBuf @@ -195,6 +288,14 @@ RT.VAL >PULLYA str >PUSHYA rts *-------------------------------------- +RT.OUTCRLF ldx #4 CRLF +RT.OUTX ldy #S.PS.hStdOut + lda (pPS),y + >PUSHA + >PUSHW L.OUT,x + >SYSCALL FPutS + rts +*-------------------------------------- MAN SAVE usr/src/bin/acos.s.rt LOAD usr/src/bin/acos.s diff --git a/BIN/ACOS.S.txt b/BIN/ACOS.S.txt index 44630699..5bbdf445 100644 --- a/BIN/ACOS.S.txt +++ b/BIN/ACOS.S.txt @@ -76,7 +76,6 @@ CS.START cld *-------------------------------------- L.MSG.GREETINGS .DA MSG.GREETINGS L.MSG.USAGE .DA MSG.USAGE -L.MSG.ECHOCRLF .DA MSG.ECHOCRLF L.MSG.COMPILING .DA MSG.COMPILING L.MSG.DEBUG .DA MSG.DEBUG L.MSG.TRACE .DA MSG.TRACE @@ -86,6 +85,11 @@ L.MSG.FWREFERR .DA MSG.FWREFERR L.MSG.RUN .DA MSG.RUN L.MSG.STR .DA MSG.STR L.MSG.INT16 .DA MSG.INT16 +L.OUT .DA OUT.ELW + .DA OUT.DLW + .DA OUT.CRLF + .DA OUT.BSSPBS + .DA OUT.CLRSCR L.FMT.DATE .DA FMT.DATE L.FMT.TIME .DA FMT.TIME *-------------------------------------- @@ -186,6 +190,10 @@ RT.LEFTd.ID .EQ *-J.RT .DA RT.LEFTd RT.LEN.ID .EQ *-J.RT .DA RT.LEN +RT.MIDd.ID .EQ *-J.RT + .DA RT.MIDd +RT.RIGHTd.ID .EQ *-J.RT + .DA RT.RIGHTd RT.STRd.ID .EQ *-J.RT .DA RT.STRd RT.TIMEd.ID .EQ *-J.RT @@ -207,6 +215,10 @@ RT.IntGet.ID .EQ *-J.RT .DA RT.IntGet RT.IntOut.ID .EQ *-J.RT .DA RT.IntOut +RT.OUTCRLF.ID .EQ *-J.RT + .DA RT.OUTCRLF +RT.OUTX.ID .EQ *-J.RT + .DA RT.OUTX .DA 0 *-------------------------------------- * Called once at process creation @@ -482,7 +494,8 @@ MSG.GREETINGS .AZ "\r\nACOS-Shell %d.%d\r\n\r\n" MSG.USAGE .AS "Usage : ACOS