diff --git a/.Docs/LIBBLKDEV.md b/.Docs/LIBBLKDEV.md index d7d3edad..70228d20 100644 --- a/.Docs/LIBBLKDEV.md +++ b/.Docs/LIBBLKDEV.md @@ -3,11 +3,22 @@ ## Copyright Copyright 2015 - 2020, Remy Gibert and the A2osX contributors. +# D2TrkFmt16s +Write a track (16 sectors) + PUSHB DSSS0000 + PUSHB VolNum + PUSHB HeadNum (0,1) + PUSHB TrackNum + +## RETURN VALUE + CC : success + CS : A = Error + # D2TrkRead16s Write a track (16 sectors) - PUSHB = DSSS0000 - PUSHB = TrackNum * 4 : 0->136+ - PUSHW = Ptr to 16*256 buffer + PUSHB DSSS0000 + PUSHB TrackNum + PUSHW Ptr to 16*256 buffer ## RETURN VALUE CC : success, A = VolNum @@ -15,10 +26,9 @@ Write a track (16 sectors) # D2TrkWrite16s Write a track (16 sectors) - PUSHB = DSSS0000 - PUSHB = VolNum - PUSHB = HeadNum (0,1) - PUSHB = TrackNum * 4 : 0->136+ + PUSHB DSSS0000 + PUSHB VolNum + PUSHB TrackNum PUSHW = Ptr to 16*256 buffer ## RETURN VALUE diff --git a/.Docs/LIBTUI.md b/.Docs/LIBTUI.md new file mode 100644 index 00000000..d13e08e4 --- /dev/null +++ b/.Docs/LIBTUI.md @@ -0,0 +1,46 @@ +*** Auto generated by docgen.cmd *** + +## Copyright +Copyright 2015 - 2020, Remy Gibert and the A2osX contributors. + +# tuiInit +Initialize screen & create a new context + +## C +`short int hCTX tuiInit();` + +## ASM +`>LIBCALL hLIBTUI,LIBTUI.Init` + +## RETURN VALUE +CC = success, A = hCTX + +# tuiClose +destroy context and all sub objects + +## C +`void fastcall tuiClose(short int hCTX);` + +## ASM +`lda hCTX` +`>LIBCALL hLIBTUI,LIBTUI.Close` + +## RETURN VALUE +CC = success + +## License +A2osX is licensed under the GNU General Public License. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + +The full A2osX license can be found **[Here](../LICENSE)**. + +*** End of Auto generated file *** diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 4bce420c..3b6fc381 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 8ba6098a..1b214564 100644 Binary files a/.Floppies/A2OSX.TEST.po and b/.Floppies/A2OSX.TEST.po differ diff --git a/.Tools/docgen.cmd b/.Tools/docgen.cmd index ff45258a..1cc80820 100644 --- a/.Tools/docgen.cmd +++ b/.Tools/docgen.cmd @@ -9,7 +9,7 @@ for /f %%a in ('copy /Z "%~f0" nul') do set "CR=%%a" mode con:cols=80 lines=24 cls -echo Apple //e +echo Apple //e set /a c=0 @@ -25,6 +25,11 @@ set SRCDIR=%~dp0..\LIB set FILTER=LIBBLKDEV.S*.txt Call :SCAN +set DOCFILE=%~dp0..\.Docs\LIBTUI.md +set SRCDIR=%~dp0..\LIB +set FILTER=LIBTUI.S*.txt +Call :SCAN + set DOCFILE=%~dp0..\.Docs\LIBGUI.md set SRCDIR=%~dp0..\LIB set FILTER=LIBGUI.S*.txt diff --git a/BIN/CC.S.CODE.txt b/BIN/CC.S.CODE.txt index 0a71d8fb..1095a86f 100644 --- a/BIN/CC.S.CODE.txt +++ b/BIN/CC.S.CODE.txt @@ -22,7 +22,7 @@ CODE.Init stz ZPCCConst sta (pData),y clc -.9 rts +.99 rts *-------------------------------------- CODE.Quit >LDA.G CC.hOutFile beq .8 @@ -59,13 +59,7 @@ CODE.PUSHAXI pha pla *-------------------------------------- -CODE.PUSHI pha - lda #$A9 LDA #imm - jsr CODE.EmitByte - bcs CODE.LDAXI.RTS - - pla - jsr CODE.EmitByte +CODE.PUSHI jsr CODE.LDAI bcs CODE.LDAXI.RTS bra CODE.PUSHA @@ -153,25 +147,13 @@ CODE.INCPSTACK lda #$E6 INC zp lda #pStack bra CODE.EmitByte *-------------------------------------- -CODE.TOABSYX jsr CODE.EmitByte A=opcode : JMP, JSR ..... - txa - jsr CODE.EmitByte - tya - bra CODE.EmitByte -*-------------------------------------- CODE.SYSCALL jsr CODE.LDXI bcs .9 lda #$20 JSR - jsr CODE.EmitByte - bcs .9 - - lda #A2osX.SYSCALL - jsr CODE.EmitByte - bcs .9 - - lda /A2osX.SYSCALL - bra CODE.EmitByte + ldx #A2osX.SYSCALL + ldy /A2osX.SYSCALL + bra CODE.TOABSYX .9 rts *-------------------------------------- @@ -179,14 +161,40 @@ CODE.FPUCALL jsr CODE.LDXI bcs .9 lda #$20 JSR + ldx #A2osX.FPUCALL + ldy /A2osX.FPUCALL + bra CODE.TOABSYX + +.9 rts +*-------------------------------------- +CODE.LIBCALL jsr CODE.LDXI + bcs .9 + + tya + dec + dec + dec + asl + asl + clc + adc #PCC.PH.JMPLIBs + tax + lda #0 + adc /PCC.PH.JMPLIBs + tay + lda #$20 JSR + bra CODE.TOABSYX + +.9 rts +*-------------------------------------- +CODE.TOABSYX jsr CODE.EmitByte A=opcode : JMP, JSR ..... + bcs .9 + + txa jsr CODE.EmitByte bcs .9 - lda #A2osX.FPUCALL - jsr CODE.EmitByte - bcs .9 - - lda /A2osX.FPUCALL + tya bra CODE.EmitByte .9 rts @@ -256,6 +264,41 @@ CODE.EmitDATA clc .8 rts CC/CS from fputc *-------------------------------------- +CODE.EmitTail jsr CODE.DSSelect + bcs .99 + + stz ArgIndex + +.1 lda ArgIndex + >CMP.G LibCount + beq .8 + + clc + adc #hLibNs + tay + lda (pData),y + pha + + >PUSHB.G CC.hOutFile + pla + >SYSCALL ArgV + >PUSHYA + >SYSCALL fputs + bcs .99 + + jsr .8 + bcs .99 + + inc ArgIndex + bra .1 + +.8 >PUSHB.G CC.hOutFile + lda #0 + >PUSHA + >SYSCALL fputc + +.99 rts +*-------------------------------------- CODE.CSSelect clc bit bPass2 bpl .8 @@ -281,10 +324,10 @@ CODE.DSSelect clc >PUSHWZ lda ZPCCConst clc - adc PCC.FH+PCC.FH.IDATA + adc PCC.FH+PCC.FH.CONST tay lda ZPCCConst+1 - adc PCC.FH+PCC.FH.IDATA+1 + adc PCC.FH+PCC.FH.CONST+1 sec sbc #$20 diff --git a/BIN/CC.S.CORE.txt b/BIN/CC.S.CORE.txt index 72f1b44b..59da5e0d 100644 --- a/BIN/CC.S.CORE.txt +++ b/BIN/CC.S.CORE.txt @@ -1,7 +1,7 @@ NEW AUTO 3,1 *-------------------------------------- -CC.CORE.Init >SYSCALL SListNew +CORE.Init >SYSCALL SListNew bcs .9 >STA.G CC.hDefines @@ -40,8 +40,8 @@ CC.CORE.Init >SYSCALL SListNew * clc .9 rts *-------------------------------------- -CC.CORE.Quit jsr CC.FIO.FClose - bne CC.CORE.Quit +CORE.Quit jsr CC.FIO.FClose + bne CORE.Quit ldy ScopeIdx beq .1 @@ -74,7 +74,8 @@ CC.CORE.Quit jsr CC.FIO.FClose >LDA.G CC.hSymBuf jsr .7 - jsr CC.SYM.LookupFreeAll +.5 jsr CC.SYM.LookupFree + bcc .5 >LDA.G CC.hStack @@ -185,73 +186,6 @@ CC.CompileStmt >LDYA L.CC.KW sec .9 rts *-------------------------------------- -CC.CORE.SetVar stz ExpState - - jsr CC.EXP.POSTOPS var++, var[0]... ? - bcs .99 - - ldx StmtPreOp - jsr CC.EXP.PREOPS apply ++var, .... - bcs .99 - - jsr CC.GetCharNB - bcs .90 - - jsr CC.IsEndArg var++; or ++var; ? - bcc .8 - - jsr CC.LookupAOP var=, var+= ... ? - bcs .90 - - cpx #0 TOTO : all AOPS - bne * - - lda ExpState - bmi .90 VonStack - - asl - - bmi .7 AinPTR - - asl - bmi .6 AonStack - - jsr CC.EXP.GetAddr1 - bcc .7 - - rts - -.6 >LDYA L.PCC.PopAddr1 - jsr CODE.EmitPCC - bcs .99 - -.7 ldy #SYM.Q - lda (ZPLookupSymPtr),y - pha - lda (ZPLookupSymPtr) - tay - pla get expected T/Q - - jsr CC.EXP.Eval - bcs .99 - - jsr CC.EXP.GetSymSizeOfInAXC - tay - dey - jsr CODE.LDYI - bcs .99 - - >LDYA L.PCC.SetValue - jmp CODE.EmitPCC - -.8 clc - rts - -.90 lda #E.CSYN - sec - -.99 rts -**-------------------------------------- CC.Comments jsr CC.GetNextChar TODO : /* ... */ cmp #'/' bne .90 @@ -567,6 +501,36 @@ CC.CheckCharNB cmp #C.SPACE clc .9 rts *-------------------------------------- +CC.GetNextCharEsc + jsr CC.GetNextChar + bcs .9 + + cmp #'\' + bne .8 + + jsr CC.GetNextChar + bcs .8 + + ldx #CC.EscChars.Cnt-1 + +.1 cmp CC.EscChars,x + beq .6 + + dex + bpl .1 + + sec + rts + +.6 lda CC.EscCodes,x + bit .9 + clc + rts + +.8 clc + clv +.9 rts +*-------------------------------------- CC.GetNextChar inc ZPLineBufPtr bne CC.GetChar @@ -608,6 +572,9 @@ CC.IsEndArg cmp #']' cmp #';' beq .8 + cmp #':' + beq .8 + cmp #')' beq .8 diff --git a/BIN/CC.S.DECL.txt b/BIN/CC.S.DECL.txt index 9a407789..db550dde 100644 --- a/BIN/CC.S.DECL.txt +++ b/BIN/CC.S.DECL.txt @@ -48,7 +48,8 @@ CC.DECL jsr CC.TYPE.Decl jsr CC.SYM.GetAddr1 bcs .9 - jsr CC.SYM.SetValue Y,A = T/Q, Set value to this var + jsr CC.SYM.GetTypeInYA Y,A = T/Q + jsr CC.SYM.PopValue Set value to this var .29 bcs .9 .28 jsr CC.SYM.Store @@ -69,8 +70,12 @@ CC.SCSPEC.AUTO CC.SCSPEC.REGISTER CC.SCSPEC.STATIC CC.SCSPEC.EXTERN +.98 lda #E.CSYN + sec +.99 rts +*-------------------------------------- CC.SCSPEC.TYPEDEF - + >DEBUG .98 lda #E.CSYN sec diff --git a/BIN/CC.S.EXEC.txt b/BIN/CC.S.EXEC.txt deleted file mode 100644 index e5acec3b..00000000 --- a/BIN/CC.S.EXEC.txt +++ /dev/null @@ -1,150 +0,0 @@ -NEW - AUTO 3,1 -*-------------------------------------- -CC.BOPS.bMUL -CC.BOPS.cMUL - inc pStack - clc - rts -*-------------------------------------- -CC.BOPS.bDIV -CC.BOPS.cDIV - inc pStack - clc - rts -*-------------------------------------- -CC.BOPS.bMOD -CC.BOPS.cMOD - inc pStack - clc - rts -*-------------------------------------- -CC.BOPS.ADD clc - >PULLA - adc (pStack) - sta (pStack) - clc - rts -*-------------------------------------- -CC.BOPS.SUB sec - ldy #1 - lda (pStack),y - sbc (pStack) - sta (pStack),y - inc pStack - clc - rts -*-------------------------------------- -CC.BOPS.SHL >PULLA - tax - beq .8 - - lda (pStack) - -.1 asl - dex - bne .1 - - sta (pStack) - -.8 rts -*-------------------------------------- -CC.BOPS.SHR >PULLA - tax - beq .8 - - lda (pStack) - -.1 lsr - dex - bne .1 - - sta (pStack) - -.8 rts -*-------------------------------------- -CC.BOPS.L >PULLA - cmp (pStack) - bcc .8 - - lda #0 - sta (pStack) - rts - -.8 lda #1 - sta (pStack) - rts -*-------------------------------------- -CC.BOPS.G >PULLA - cmp (pStack) - beq .1 - bcs .8 - -.1 lda #0 - sta (pStack) - rts - -.8 lda #1 - sta (pStack) - rts -*-------------------------------------- -CC.BOPS.LE >PULLA - cmp (pStack) - bcc .8 - beq .8 - - lda #0 - sta (pStack) - rts - -.8 lda #1 - sta (pStack) - rts -*-------------------------------------- -CC.BOPS.GE >PULLA - cmp (pStack) - bcs .8 - - lda #0 - sta (pStack) - rts - -.8 lda #1 - sta (pStack) - rts -*-------------------------------------- -CC.BOPS.EQ >PULLA - cmp (pStack) - beq .8 - - lda #0 - sta (pStack) - -.8 rts -*-------------------------------------- -CC.BOPS.NE >PULLA - eor (pStack) - sta (pStack) - rts -*-------------------------------------- -CC.BOPS.LAND -CC.BOPS.AND >PULLA - and (pStack) - sta (pStack) - rts -*-------------------------------------- -CC.BOPS.LOR -CC.BOPS.OR >PULLA - ora (pStack) - sta (pStack) - rts -*-------------------------------------- -CC.BOPS.EOR >PULLA - eor (pStack) - sta (pStack) - rts -*-------------------------------------- -MAN -SAVE usr/src/bin/cc.s.exec -LOAD usr/src/bin/cc.s -ASM diff --git a/BIN/CC.S.EXP.txt b/BIN/CC.S.EXP.txt index e8a52361..0cdd1534 100644 --- a/BIN/CC.S.EXP.txt +++ b/BIN/CC.S.EXP.txt @@ -111,19 +111,27 @@ CC.EXP.Eval ldx ZPPtr1 local : returned T/Q .22 jsr CC.IsDigit10 number ? bcs .24 - ldy ZPPtr2 + ldy ZPPtr2 T bne .23 ldy #SYM.T.SINT sty ZPPtr2 - stz ZPPtr2+1 + stz ZPPtr2+1 Q .23 jsr CC.EXP.GetNum bcs .29 bra .30 *-------------------------------------- -.24 cmp #'"' String literal +.24 cmp #''' + bne .25 + + jsr CC.EXP.GetChar + bcs .29 + + bra .30 + +.25 cmp #'"' String literal bne CC.EXP.Eval.ESYN jsr CC.EXP.AddConstCharP @@ -132,7 +140,7 @@ CC.EXP.Eval ldx ZPPtr1 local : returned T/Q .30 jsr CC.GetCharNB bcs CC.EXP.Eval.ESYN -.31 jsr CC.IsEndArg , ; ) ? +.31 jsr CC.IsEndArg , ; ) ? : bcc CC.EXP.Eval.End jsr CC.IsOPChar @@ -267,55 +275,6 @@ CC.EXP.BOPS bit #SYM.Q.PPPOINTER clc rts *-------------------------------------- -CC.EXP.AddConstCharP - lda ZPCCConst - ldx ZPCCConst+1 - - jsr CODE.LDAXI - bcs .99 - - >LDYA L.PCC.PushIAddr - jsr CODE.EmitPCC - bcs .99 - - jsr CODE.DSSelect - bcs .99 - - ldy #0 - -.1 jsr CC.GetNextChar - bcs .9 - -* TODO : add support for \ to next line - - cmp #C.CR - beq .9 - - cmp #'"' - beq .2 - - jsr CODE.EmitData - bcs .99 - - iny - bra .1 - -.2 lda #0 - jsr CODE.EmitData - bcs .99 - - jsr CODE.CSSelect - bcs .99 - - jsr CC.GetNextChar Skip " - - clc - rts - -.9 lda #E.ESYN - sec -.99 rts -*-------------------------------------- CC.EXP.IntConst >PUSHW ZPLineBufPtr >PUSHWI ZPLineBufPtr >PUSHBI 10 @@ -336,14 +295,14 @@ CC.EXP.GetNum cpy #SYM.T.FLOAT beq .11 - lda #E.TMISMATCH +.90 lda #E.TMISMATCH * sec rts .11 >PUSHW ZPLineBufPtr >PUSHWI ZPLineBufPtr >SYSCALL StrToF -* bcs .9 +* bcs .99 ldy #4 @@ -368,7 +327,7 @@ CC.EXP.GetNum cpy #SYM.T.FLOAT .2 >SYSCALL StrToL -.3 bcs .9 +.3 bcs .99 ldy #1 anticipate 2 bytes if * lda ZPPtr2+1 @@ -388,7 +347,89 @@ CC.EXP.GetNum cpy #SYM.T.FLOAT >POP 4 * clc -.9 rts +.99 rts +*-------------------------------------- +* https://riptutorial.com/c/example/16255/character-literals +* 'c', '\n', '\123', '\xAB' +*-------------------------------------- +CC.EXP.GetChar ldy ZPPtr2+1 + bne .9 + + lda ZPPtr2 + cmp #SYM.T.UCHAR + beq .1 + + cmp #SYM.T.SCHAR + bne .9 + +.1 jsr CC.GetNextCharEsc + bcs .9 + + jsr CODE.PUSHI + bcs .99 + + jsr CC.GetNextChar + bcs .9 + + cmp #''' + bne .9 + + jsr CC.GetNextCharNB skip ' + + + clc + rts + +.9 lda #E.ESYN + sec +.99 rts +*-------------------------------------- +CC.EXP.AddConstCharP + lda ZPCCConst + ldx ZPCCConst+1 + + jsr CODE.LDAXI + bcs .99 + + >LDYA L.PCC.PushIAddr + jsr CODE.EmitPCC + bcs .99 + + jsr CODE.DSSelect + bcs .99 + +.1 jsr CC.GetNextCharEsc + bcs .9 + + bvs .2 ESCaped +* TODO : add support for \ to next line + + cmp #C.CR + beq .9 + + cmp #'"' + beq .3 + +.2 jsr CODE.EmitData + bcs .99 + + bra .1 + +.3 jsr CC.GetNextCharNBNL Skip " + bcs .8 + + cmp #'"' + beq .1 + +.8 lda #0 + jsr CODE.EmitData + bcs .99 + + jmp CODE.CSSelect + +.9 lda #E.ESYN + sec +.99 rts *-------------------------------------- * ZPPtr2 = expected T/Q * ZPPtr3+1 = PREOPS @@ -424,40 +465,8 @@ CC.EXP.GetVar stz ExpState .7 jsr CC.EXP.PushValue bcs .99 -.8 lda ZPPtr2 target T - beq .3 +.8 jmp CC.SYM.LookupCheckTQ - cmp #SYM.T.VOID - beq .2 - - lda (ZPLookupSymPtr) SYM.T - cmp #SYM.T.VOID - beq .2 - - cmp ZPPtr2 T - bne .9 - -.2 lda ZPPtr2+1 Q - - ldy #SYM.Q - cmp (ZPLookupSymPtr),y - bne .9 - - clc - rts - -.3 lda (ZPLookupSymPtr) SYM.T - sta ZPPtr2 T - - ldy #SYM.Q - lda (ZPLookupSymPtr),y - sta ZPPtr2+1 Q - - clc - rts - -.9 lda #E.TMISMATCH - sec .99 rts *-------------------------------------- * POSTOPS @@ -559,17 +568,76 @@ CC.EXP.postdec lda ExpState sec .99 rts *-------------------------------------- -CC.EXP.array ldy #SYM.Q +CC.EXP.Idx ldy #SYM.Q lda (ZPLookupSymPtr),y - and #SYM.Q.AAARRAY - beq .39 - ldy #SYM.Def + bit #SYM.Q.AAARRAY + bne CC.EXP.array + + and #SYM.Q.PPPOINTER + cmp #SYM.Q.POINTER + bne .98 + + lda (ZPLookupSymPtr),y + eor #SYM.Q.POINTER+SYM.Q.ARRAY + sta (ZPLookupSymPtr),y convert from *type to type[] + + jsr CC.EXP.GetAddr2 + bcs .99 + + >LDYA L.PCC.PushDeref2 + jsr CODE.EmitPCC + bcs .99 + + jsr CC.EXP.array.getIdx ...int16 on stack... + bcs .99 + + jsr CC.EXP.GetSymSizeOfInAXC + cmp #1 + bne .1 + + cpx #0 + beq .2 sizeof=1, no MUL required + +.1 jsr CODE.PUSHAXI ...sizeof on stack... + bcs .99 + + ldx #FPU.wMUL + jsr CODE.FPUCALL ...sizeof*int16... + bcs .99 + +.2 ldx #FPU.wAdd + jsr CODE.FPUCALL ...add to base address + bcs .99 + + jsr CC.GetCharNB + bcs .97 + + cmp #']' + bne .97 + + jsr CC.GetNextCharNB skip ']' + + lda #ExpState.AonStack + sta ExpState + + clc + rts + +.97 lda #E.ESYN + sec + rts + +.98 lda #E.TMISMATCH + sec +.99 rts +*-------------------------------------- +CC.EXP.array ldy #SYM.Def lda (ZPLookupSymPtr),y iny ora (ZPLookupSymPtr),y beq .1 - +* jsr CODE.DEBUG jsr CC.EXP.PushAddr array[int]... bcc .2 @@ -581,7 +649,7 @@ CC.EXP.array ldy #SYM.Q >LDYA L.PCC.PushDeref2 jsr CODE.EmitPCC bcs .9 - + .2 jsr CC.EXP.array.getIdx ...int16 on stack... bcs .9 @@ -589,11 +657,11 @@ CC.EXP.array ldy #SYM.Q jsr CODE.PUSHAXI ...sizeof on stack... bcs .9 - ldx #FPU.iMUL + ldx #FPU.wMUL jsr CODE.FPUCALL ...sizeof*int16... bcs .9 - ldx #FPU.iAdd + ldx #FPU.wAdd jsr CODE.FPUCALL ...add to base address bcs .9 @@ -621,17 +689,17 @@ CC.EXP.array ldy #SYM.Q lda (ZPLookupSymPtr),y jsr CODE.PUSHAXI [][SIZE] on stack - ldx #FPU.iMUL + ldx #FPU.wMUL jsr CODE.FPUCALL [][SIZE] * int16 on stack jsr CC.EXP.GetSymSizeOfInAXC jsr CODE.PUSHAXI ...sizeof on stack... bcs .9 - ldx #FPU.iMUL + ldx #FPU.wMUL jsr CODE.FPUCALL ...sizeof*int16... - ldx #FPU.iAdd + ldx #FPU.wAdd jsr CODE.FPUCALL ...add to base address bcs .9 @@ -698,10 +766,12 @@ CC.EXP.PREOPS bmi .8 *-------------------------------------- CC.EXP.Ref ldy #SYM.Q lda (ZPLookupSymPtr),y + clc adc #SYM.Q.POINTER bcs .9 more than *** + and #%11001111 sta (ZPLookupSymPtr),y bit ExpState @@ -906,10 +976,21 @@ CC.EXP.PushValue jsr CC.EXP.GetSymSizeOfInAXC tay dey - jsr CODE.LDYI + bne .1 + + >LDYA L.PCC.PushValue1 + jmp CODE.EmitPCC + +.1 cpy #1 + bne .2 + + >LDYA L.PCC.PushValue2 + jmp CODE.EmitPCC + +.2 jsr CODE.LDYI bcs .99 - >LDYA L.PCC.PushValue + >LDYA L.PCC.PushValueY jmp CODE.EmitPCC .99 rts diff --git a/BIN/CC.S.F.txt b/BIN/CC.S.F.txt index f3519348..c4e401f9 100644 --- a/BIN/CC.S.F.txt +++ b/BIN/CC.S.F.txt @@ -165,9 +165,6 @@ CC.F.Def.END >LDYA L.PCC.LEAVE jsr CODE.EmitPCC bcs .9 - jsr CC.Pop T - jsr CC.Pop Q - jsr CC.SYM.FreeScope stz LocalPtr back to global @@ -208,33 +205,11 @@ CC.F.CallRetV sec jsr CODE.nAddLocal .20 jsr CC.GetNextCharNB skip '(' - bcs .10 + bcs .90 - ldy #SYM.Q -* >DEBUG - lda ZPPtr2 expected T - bne .1 - - lda (ZPLookupSymPtr) no check required - sta ZPPtr2 - - lda (ZPLookupSymPtr),y - and #$fC ignore SYM.Q.FUNC,SYM.Q.FASTCALL - bra .2 - -.1 cmp #SYM.T.VOID - beq .11 - - cmp (ZPLookupSymPtr) - bne .91 - -.11 lda (ZPLookupSymPtr),y - and #$fC ignore SYM.Q.FUNC,SYM.Q.FASTCALL - cmp ZPPtr2+1 expected Q - bne .91 + jsr CC.SYM.LookupCheckTQ + bcs .93 *-------------------------------------- -.2 sta ZPPtr2+1 - stz ZPPtr1 Reset VARIADIC byte count lda #SYM.Def @@ -274,12 +249,12 @@ CC.F.CallRetV sec .5 jsr CC.GetCharNB -.10 bcs .90 + bcs .90 cmp #',' bne .6 - jsr CC.GetNextCharNB Skip ',' + jsr CC.GetNextCharNBNL Skip ',' jsr CC.F.GetTQ bne .3 Another ARG.... @@ -310,9 +285,6 @@ CC.F.CallRetV sec bra .93 .90 lda #E.CSYN - bra .92 - -.91 lda #E.TMISMATCH .92 sec @@ -375,8 +347,8 @@ CC.F.Call2 ldy #SYM.Q .5 ldy #SYM.Addr+1 lda (ZPLookupSymPtr),y - cmp #3 - bcs .8 not a SYS/FPU call...Ret value on stack + cmp #3+LIBS.MAX + bcs .8 not a SYS/FPU/LIB call...Ret value on stack >LDYA ZPPtr2 function T/Q jsr CC.TYPE.SizeOf @@ -419,7 +391,12 @@ CC.F.Call3 ldy #SYM.Addr+1 jmp CODE.FPUCALL -.2 lda #$EA NOP +.2 cpy #3+LIBS.MAX + bcs .3 + + jmp CODE.LIBCALL + +.3 lda #$EA NOP jsr CODE.EmitByte bcs .99 diff --git a/BIN/CC.S.FIO.txt b/BIN/CC.S.FIO.txt index bdf9fcfb..2809b965 100644 --- a/BIN/CC.S.FIO.txt +++ b/BIN/CC.S.FIO.txt @@ -1,6 +1,62 @@ NEW AUTO 3,1 *-------------------------------------- +CC.FIO.LoadLIB.o + >LDA.G LibCount + cmp #LIBS.MAX + bne .1 + + lda #E.OOH + sec +.9 rts + +.1 clc + adc #hLibNs + tay + + lda ArgIndex + sta (pData),y + + >PUSHW L.ENV.LIB + >PUSHW pData >PUSHEA.G PathBuf + >SYSCALL GetEnv + bcs .9 + + >PUSHW pData + + lda ArgIndex + >SYSCALL ArgV + >PUSHYA + >SYSCALL strcat + + >PUSHW pData + >PUSHW L.LIB.O + >SYSCALL strcat + + >PUSHW L.MSG.READING + >PUSHW pData + >PUSHBI 2 + >SYSCALL PrintF + + >PUSHW pData + >PUSHBI O.RDONLY + >PUSHBI S.FI.T.BIN + >PUSHWZ Aux type + >SYSCALL loadfile + bcs .99 + + >LDA.G LibCount + clc + adc #hLibOs + tay + txa + sta (pData),y + + >INC.G LibCount + clc + +.99 rts +*-------------------------------------- CC.FIO.FOpen1st >LDA.G CC.InFileArg >SYSCALL ArgV @@ -100,7 +156,30 @@ CC.FIO.FClose >LDA.G hFilePtr .8 rts *-------------------------------------- -CC.FIO.FCreate >LDA.G CC.OutFileArg +CC.FIO.FCreate lda ZPCCCode+1 + sta PCC.FH+PCC.FH.CONST+1 + sec + sbc #$20 + sta PCC.FH+PCC.FH.CSSIZE+1 + + lda ZPCCCode + sta PCC.FH+PCC.FH.CSSIZE + sta PCC.FH+PCC.FH.CONST + clc + adc ZPCCConst + sta PCC.FH+PCC.FH.LIBS + + lda ZPCCCode+1 + adc ZPCCConst+1 + sta PCC.FH+PCC.FH.LIBS+1 + + lda ZPCCData + sta PCC.FH+PCC.FH.DSSIZE + + lda ZPCCData+1 + sta PCC.FH+PCC.FH.DSSIZE+1 + + >LDA.G CC.OutFileArg >SYSCALL ArgV >STYA ZPPtr1 diff --git a/BIN/CC.S.KW.txt b/BIN/CC.S.KW.txt index 496da9d8..c8006d2d 100644 --- a/BIN/CC.S.KW.txt +++ b/BIN/CC.S.KW.txt @@ -3,7 +3,7 @@ NEW *-------------------------------------- * Built in Keywords *-------------------------------------- -CC.KW.IF jsr CC.KW.BEGIN +CC.KW.IF jsr CC.KW.BEGIN00 bcs .99 jsr CC.GetCharNB @@ -96,7 +96,7 @@ CC.KW.ELSE.END lda #'X' define EXIT Label clv pop context .99 rts *-------------------------------------- -CC.KW.WHILE jsr CC.KW.BEGIN +CC.KW.WHILE jsr CC.KW.BEGIN00 bcs .99 lda #'C' define CONT Label @@ -153,7 +153,7 @@ CC.KW.WHILE.END lda #'C' .99 rts *-------------------------------------- -CC.KW.DO jsr CC.KW.BEGIN +CC.KW.DO jsr CC.KW.BEGIN00 bcs .99 lda #'C' define CONT Label @@ -233,7 +233,7 @@ CC.KW.FOR jsr CC.GetCharNB cmp #'(' bne .29 - jsr CC.KW.BEGIN + jsr CC.KW.BEGIN00 bcs .29 jsr CC.GetNextCharNB skip '(' @@ -340,12 +340,123 @@ CC.KW.FOR.END lda #$60 .99 rts *-------------------------------------- -CC.KW.SWITCH -CC.KW.CASE -CC.KW.DEFAULT - lda #E.CSYN +CC.KW.SWITCH jsr CC.GetCharNB + bcs .98 + + cmp #'(' + bne .98 + + jsr CC.GetNextCharNB + bcs .98 + + jsr CC.EXP.Eval00 Any var type + bcs .99 Y,A=T/Q + + tax + bne .97 + + cpy #SYM.T.UCHAR + bcc .97 + + cpy #SYM.T.FLOAT + bcs .97 + + phy + tya + jsr CC.Push push integral type + ply + bcs .99 + + lda CC.TYPESIZE-1,y + + jsr CC.Push push SizeOf(type) + bcs .99 + + jsr CC.KW.BEGIN + bcs .99 + + jsr CC.GetCharNB + bcs .99 + + cmp #')' + bne .98 + + jmp CC.KW.STMT + +.97 lda #E.TMISMATCH sec + rts + +.98 lda #E.CSYN + sec +.99 rts +*-------------------------------------- +CC.KW.SWITCH.END + lda #'B' define BREAK Label + jsr CC.KW.NewLabel + bcs .99 + + clv pop context + +.99 rts +*-------------------------------------- +CC.KW.CASE ldy CStackPtr + beq .9 + + iny skip ; or } + lda (ZPCCStack),y + cmp #10 SWITCH ?? + bne .9 + + lda CStackPtr + clc + adc #7 + tay + + lda (ZPCCStack),y type + tay + lda #0 for integral type + + jsr CC.EXP.Eval + bcs .99 + + jsr CC.GetCharNB + bcs .9 + + cmp #':' + bne .9 + + jsr CC.GetNextCharNB skip ':' + + clc rts + +.9 lda #E.CSYN + sec +.99 rts +*-------------------------------------- +CC.KW.DEFAULT ldy CStackPtr + beq .9 + + iny skip ; or } + lda (ZPCCStack),y + cmp #10 SWITCH ?? + bne .9 + + jsr CC.GetCharNB + bcs .9 + + cmp #':' + bne .9 + + jsr CC.GetNextCharNB skip ':' + + clc + rts + +.9 lda #E.CSYN + sec +.99 rts *-------------------------------------- CC.KW.BREAK lda #'B' @@ -375,8 +486,6 @@ CC.KW.RETURN ldy CStackPtr beq .9 .1 iny skip ; or } - beq .9 - lda (ZPCCStack),y bmi .7 f() @@ -457,6 +566,19 @@ CC.KW.STRUCT >ENTER 4 .99 >LEAVE rts *-------------------------------------- +CC.KW.UNION +CC.KW.ENUM + lda #E.CSYN + sec + rts +*-------------------------------------- +CC.KW.BEGIN00 lda #0 + jsr CC.Push no T/Q + bcs CC.KW.BEGIN.RTS + + jsr CC.Push + bcs CC.KW.BEGIN.RTS + CC.KW.BEGIN jsr CC.SYM.NewCPSID bcs .99 @@ -479,7 +601,8 @@ CC.KW.BEGIN jsr CC.SYM.NewCPSID >LDA.G CC.CmdSave jmp CC.Push -.99 rts +.99 +CC.KW.BEGIN.RTS rts *-------------------------------------- CC.KW.STMT jsr CC.GetNextCharNBNL bcs .9 @@ -558,6 +681,9 @@ CC.KW.LookupLabel lda (ZPCCStack),y iny + iny + iny + sty ArgIndex ply diff --git a/BIN/CC.S.LINK.txt b/BIN/CC.S.LINK.txt index a289f01c..7497f4c7 100644 --- a/BIN/CC.S.LINK.txt +++ b/BIN/CC.S.LINK.txt @@ -24,7 +24,7 @@ CC.Link >LDYA L.MSG.LINKING >PUSHWI $ffff All >PUSHWZ from Start >SYSCALL SListGetData - bcs .9 + bcs .99 ldy #SYM.Addr+1 lda (ZPSymBufPtr),y @@ -32,74 +32,124 @@ CC.Link >LDYA L.MSG.LINKING ora (ZPSymBufPtr),y bne .6 - jsr CC.Link.LIBC - bcc .6 - - jsr CC.Link.Dump - lda #E.FUNDEF - sec - bra .9 + jsr CC.Link.Lookup + bcs .9 + + jsr CC.Link.Update + bcs .99 .6 >LDA.G bTrace bpl .7 jsr CC.Link.Dump - bcs .9 + bcs .99 .7 >LDYA ZPPtr2 jmp .1 .8 clc + rts -.9 rts +.9 jsr CC.Link.Dump + lda #E.FUNDEF + sec +.99 rts *-------------------------------------- * Input : pData = Symbol *-------------------------------------- -CC.Link.LIBC >LDYA L.CC.LIBC +CC.Link.Lookup >LDYA L.CC.SYSCALL + jsr CC.Link.LookupYA + ldx #1 + bcc .99 + + >LDYA L.CC.FPUCALL + jsr CC.Link.LookupYA + ldx #2 + bcc .99 + + >LDA.G LibCount +* sec + beq .99 + + lda #0 + sta ArgIndex + clc + +.1 adc #hLibOs + tay + lda (pData),y + + >SYSCALL GetMemPtr + jsr CC.Link.LookupYA + bcs .2 + + ldx ArgIndex + inx + inx + inx + rts + +.2 inc ArgIndex + lda ArgIndex + >CMP.G LibCount + bcc .1 + +.99 rts +*-------------------------------------- +CC.Link.LookupYA >STYA ZPLookupPtr ldy #$ff -.10 iny +.1 iny lda (pData),y - bne .10 + bne .1 - phy Symbol Len + tya + tax Symbol Len - ldx #0 - -.1 lda (ZPLookupPtr) +.2 lda (ZPLookupPtr) beq .9 Ending 0, not found.... - pla - pha Get Back Len + txa Get Back Len cmp (ZPLookupPtr) Same Len ? bne .4 tay -.2 lda (ZPLookupPtr),y +.3 lda (ZPLookupPtr),y dey cmp (pData),y bne .4 tya - bne .2 + bne .3 lda (ZPLookupPtr) - jsr CC.ZPLookupPtrAddAp1 Skip LEN\Symbol + tay + iny + lda (ZPLookupPtr),y get fID + + clc + rts - ldy #2 Skip LEN - lda (ZPLookupPtr),y - pha - dey - lda (ZPLookupPtr),y - ply +.4 lda (ZPLookupPtr) + inc + jsr CC.ZPLookupPtrAddAp1 Skip LEN\Symbol\ID + bra .2 - jsr CC.SYM.SetAddrYA - - plx +.9 sec + rts +*-------------------------------------- +* A=ID X=SYS|FPU|LIB +*-------------------------------------- +CC.Link.Update ldy #SYM.Addr + sta (ZPSymBufPtr),y + + iny + txa + sta (ZPSymBufPtr),y >PUSHB.G CC.hScopes >PUSHW ZPPtr1 SymID @@ -110,20 +160,6 @@ CC.Link.LIBC >LDYA L.CC.LIBC >PUSHA >SYSCALL SListSetData rts - -.4 inx - inx - - lda (ZPLookupPtr) - jsr CC.ZPLookupPtrAddAp1 Skip LEN\Symbol - - lda (ZPLookupPtr) - jsr CC.ZPLookupPtrAddAp1 Skip LEN\definition - bra .1 - -.9 plx - sec - rts *-------------------------------------- CC.Link.Dump >PUSHW L.MSG.LINKING2 diff --git a/BIN/CC.S.PCC.txt b/BIN/CC.S.PCC.txt index c0b94675..1e997589 100644 --- a/BIN/CC.S.PCC.txt +++ b/BIN/CC.S.PCC.txt @@ -7,16 +7,16 @@ ZS.RT.Ptr1 .EQ ZPBIN ZS.RT.Ptr2 .EQ ZPBIN+2 *-------------------------------------- PCC.FH .PH $2000 -PCC.FH.2000 cld +PCC.FH.ORG cld jmp (PCC.FH.JMP,x) .DA #$61 6502,Level 1 (65c02) .DA #1 BIN Layout Version 1 .DA #0 S.PS.F.EVENT .DA #0 -PCC.FH.CSSIZE .EQ *-PCC.FH.2000 - .DA $FFFF * Code Size (without Constants) -PCC.FH.DSSIZE .EQ *-PCC.FH.2000 - .DA $FFFF * Data Size +PCC.FH.CSSIZE .EQ *-PCC.FH.ORG + .DA $FFFF Code Size (without Constants) +PCC.FH.DSSIZE .EQ *-PCC.FH.ORG + .DA $FFFF Data Size .DA #256 Stack Size .DA #4 ZP Size .DA 0 @@ -25,15 +25,83 @@ PCC.FH.JMP .DA PCC.FH.INIT .DA PCC.FH.RUN .DA PCC.FH.DOEVENT .DA PCC.FH.QUIT -PCC.FH.IDATA .EQ *-PCC.FH.2000 +PCC.FH.CONST .EQ *-PCC.FH.ORG + .DA $FFFF +PCC.FH.LIBS .EQ *-PCC.FH.ORG .DA $FFFF .DA 0 -PCC.FH.INIT -* TODO : LoadLib code -PCC.FH.QUIT -* TODO : UnloadLib code -PCC.FH.DOEVENT clc +PCC.FH.INIT >LDYA PCC.FH.ORG+PCC.FH.LIBS + >STYA ZS.RT.Ptr1 + + ldx #0 + +.1 lda (ZS.RT.Ptr1) + beq .8 + + phx + + >LDYA ZS.RT.Ptr1 + >SYSCALL LoadLib + plx + bcs .9 + + sta PCC.PH.hLIBs,x + phx + >SYSCALL GetMemPtr + plx + >STYA PCC.PH.JMPLIBs+1,x + inx + inx + inx + inx + + ldy #0 + +.2 iny + lda (ZS.RT.Ptr1),y + bne .2 + + tya + sec + adc ZS.RT.Ptr1 + sta ZS.RT.Ptr1 + bcc .1 + + inc ZS.RT.Ptr1+1 + bra .1 + +.8 clc +.9 rts + +PCC.FH.QUIT ldx #12 + +.1 lda PCC.PH.hLIBs,x + beq .2 + + phx + >SYSCALL UnloadLib + plx + +.2 dex + dex + dex + dex + bpl .1 + + clc + rts + +PCC.PH.hLIBs .DA #0 +PCC.PH.JMPLIBs jmp $FFFF + .DA #0 + jmp $FFFF + .DA #0 + jmp $FFFF + .DA #0 + jmp $FFFF + +PCC.FH.DOEVENT sec do not discard TIMER event rts * int main(int argc, char *argv[]) ; @@ -66,17 +134,20 @@ PCC.FH.RUN lda #0 jsr PCC.FH.CS Execute INIT code - >PUSHWZ returned int=0 - lda #0 + >PUSHA returned int=0 >PUSHA + + >PUSHA int ARGC (hi byte) + ldy #S.PS.ARGC lda (pPS),y - >PUSHA int ARGC + >PUSHA int ARGC (lo byte) + >PUSHW pData *char[] ARGV * >DEBUG -PCC.FH.MAIN .EQ *-PCC.FH.2000+1 - jsr $FFFF * jsr main +PCC.FH.MAIN .EQ *-PCC.FH.ORG+1 + jsr $FFFF jsr main >PULLA inc pStack pull returned int sec @@ -213,12 +284,12 @@ PCC.PushLAddrL.L .EQ *-PCC.PushLAddrL *-------------------------------------- PCC.PushIAddr .DA #PCC.PushIAddr.L clc - adc PCC.FH.2000+PCC.FH.IDATA + adc PCC.FH.ORG+PCC.FH.CONST dec pStack >PUSHA txa - adc PCC.FH.2000+PCC.FH.IDATA+1 + adc PCC.FH.ORG+PCC.FH.CONST+1 ldy #1 sta (pStack),y @@ -248,10 +319,10 @@ PCC.GetLAddr1.L .EQ *-PCC.GetLAddr1 *-------------------------------------- PCC.GetIAddr1 .DA #PCC.GetIAddr1.L clc - adc PCC.FH.2000+PCC.FH.IDATA + adc PCC.FH.ORG+PCC.FH.CONST sta ZS.RT.Ptr1 txa - adc PCC.FH.2000+PCC.FH.IDATA+1 + adc PCC.FH.ORG+PCC.FH.CONST+1 sta ZS.RT.Ptr1+1 PCC.GetIAddr1.L .EQ *-PCC.GetIAddr1 @@ -274,13 +345,32 @@ PCC.PopAddr1 .DA #PCC.PopAddr1.L PCC.PopAddr1.L .EQ *-PCC.PopAddr1 *-------------------------------------- -PCC.SetValue .DA #PCC.SetValue.L -.1 lda (pStack),y +PCC.PopValue1 .DA #PCC.PopValue1.L + >PULLA + sta (ZS.RT.Ptr1) + +PCC.PopValue1.L .EQ *-PCC.PopValue1 +*-------------------------------------- +PCC.PopValue2 .DA #PCC.PopValue2.L + >PULLA + sta (ZS.RT.Ptr1) + >PULLA + ldy #1 sta (ZS.RT.Ptr1),y - dey + +PCC.PopValue2.L .EQ *-PCC.PopValue2 +*-------------------------------------- +PCC.PopValueX .DA #PCC.PopValueX.L + + ldy #0 + +.1 >PULLA + sta (ZS.RT.Ptr1),y + iny + dex bpl .1 -PCC.SetValue.L .EQ *-PCC.SetValue +PCC.PopValueX.L .EQ *-PCC.PopValueX *-------------------------------------- PCC.GetLAddr2 .DA #PCC.GetLAddr2.L clc @@ -293,10 +383,10 @@ PCC.GetLAddr2.L .EQ *-PCC.GetLAddr2 *-------------------------------------- PCC.GetIAddr2 .DA #PCC.GetIAddr2.L clc - adc PCC.FH.2000+PCC.FH.IDATA + adc PCC.FH.ORG+PCC.FH.CONST sta ZS.RT.Ptr2 txa - adc PCC.FH.2000+PCC.FH.IDATA+1 + adc PCC.FH.ORG+PCC.FH.CONST+1 sta ZS.RT.Ptr2+1 PCC.GetIAddr2.L .EQ *-PCC.GetIAddr2 @@ -337,14 +427,31 @@ PCC.PushDeref2 .DA #PCC.PushDeref2.L PCC.PushDeref2.L .EQ *-PCC.PushDeref2 *-------------------------------------- -PCC.PushValue .DA #PCC.PushValue.L +PCC.PushValue1 .DA #PCC.PushValue1.L + + lda (ZS.RT.Ptr2) + >PUSHA + +PCC.PushValue1.L .EQ *-PCC.PushValue1 +*-------------------------------------- +PCC.PushValue2 .DA #PCC.PushValue2.L + + ldy #1 + lda (ZS.RT.Ptr2),y + >PUSHA + lda (ZS.RT.Ptr2) + >PUSHA + +PCC.PushValue2.L .EQ *-PCC.PushValue2 +*-------------------------------------- +PCC.PushValueY .DA #PCC.PushValueY.L .1 lda (ZS.RT.Ptr2),y >PUSHA dey bpl .1 -PCC.PushValue.L .EQ *-PCC.PushValue +PCC.PushValueY.L .EQ *-PCC.PushValueY *-------------------------------------- PCC.Inc1 .DA #PCC.Inc1.L lda (ZS.RT.Ptr2) @@ -433,7 +540,33 @@ PCC.Dec4 .DA #PCC.Dec4.L PCC.Dec4.L .EQ *-PCC.Dec4 *-------------------------------------- -PCC.BOPS.bMUL +PCC.BOPS.bMUL .DA #PCC.BOPS.bMUL.L + ldx #0 result + + >PULLA + tay b2 + +.1 tya + beq .8 + + lsr + tay + bcc .2 + + clc + txa + adc (pStack) b1 + tax + +.2 lda (pStack) b1*2 + asl + sta (pStack) + bne .1 + +.8 txa + sta (pStack) + +PCC.BOPS.bMUL.L .EQ *-PCC.BOPS.bMUL *-------------------------------------- PCC.BOPS.cMUL *-------------------------------------- diff --git a/BIN/CC.S.STMT.txt b/BIN/CC.S.STMT.txt index c3e550cc..a229cb4a 100644 --- a/BIN/CC.S.STMT.txt +++ b/BIN/CC.S.STMT.txt @@ -28,7 +28,7 @@ CC.STMT jsr CC.GetCharNB jmp CC.SYM.LookupFree -.60 jsr CC.CORE.SetVar +.60 jsr STMT.SetVar bcs .99 jmp CC.SYM.LookupFree @@ -36,6 +36,68 @@ CC.STMT jsr CC.GetCharNB .9 lda #E.CSYN sec .99 rts +*-------------------------------------- +STMT.SetVar stz ExpState + + jsr CC.EXP.POSTOPS var++, var[0]... ? + bcs .99 + + ldx StmtPreOp + jsr CC.EXP.PREOPS apply ++var, .... + bcs .99 + + jsr CC.GetCharNB + bcs .90 + + jsr CC.IsEndArg var++; or ++var; ? + bcc .8 + + jsr CC.LookupAOP var=, var+= ... ? + bcs .90 + + cpx #0 TOTO : all AOPS + bne * + + lda ExpState + bmi .90 VonStack + + asl + + bmi .7 AinPTR + + asl + bmi .6 AonStack + + jsr CC.EXP.GetAddr1 + bcc .7 + + rts + +.6 >LDYA L.PCC.PopAddr1 + jsr CODE.EmitPCC + bcs .99 + +.7 ldy #SYM.Q + lda (ZPLookupSymPtr),y + pha + lda (ZPLookupSymPtr) + tay + pla get expected T/Q + + jsr CC.EXP.Eval + bcs .99 + + jmp CC.SYM.PopValue + +.8 clc + rts + +.90 lda #E.CSYN + sec + +.99 rts +*-------------------------------------- + *-------------------------------------- * X = KW.ID *-------------------------------------- @@ -73,7 +135,7 @@ CC.STMT.Stmt.END beq .8 cmp #';' must be ';' on stack.... - bra CC.STMT.CPStmt.POP + bra CC.STMT.POP .8 clc @@ -85,8 +147,8 @@ CC.STMT.CPStmt.END bcs CC.STMT.Stmt.RTS cmp #'}' must be '}' on stack.... -CC.STMT.CPStmt.POP - bne .98 + +CC.STMT.POP bne .98 iny lda (ZPCCStack),y @@ -98,7 +160,7 @@ CC.STMT.CPStmt.POP lda CStackPtr * clc - adc #5 + adc #7 sta CStackPtr jsr CC.Pop Locals diff --git a/BIN/CC.S.SYM.txt b/BIN/CC.S.SYM.txt index 5a800a49..2ba6fe00 100644 --- a/BIN/CC.S.SYM.txt +++ b/BIN/CC.S.SYM.txt @@ -613,53 +613,72 @@ CC.SYM.LookupFree .99 rts *-------------------------------------- -CC.SYM.LookupFreeAll +* ZPPtr2 = expected T/Q +* ZPLookupSymPtr +*-------------------------------------- +CC.SYM.LookupCheckTQ + lda ZPPtr2 target T + bne .1 -.1 jsr CC.SYM.LookupFree - bcc .1 + lda (ZPLookupSymPtr) SYM.T + sta ZPPtr2 T + + ldy #SYM.Q + lda (ZPLookupSymPtr),y + and #$F8 ignore VOLATILE|FUNC|FASTCALL + sta ZPPtr2+1 Q clc rts + +.1 cmp #SYM.T.VOID + beq .2 + + lda (ZPLookupSymPtr) SYM.T + cmp #SYM.T.VOID + beq .2 + + cmp ZPPtr2 T + bne .9 + +.2 lda ZPPtr2+1 Q + + ldy #SYM.Q + eor (ZPLookupSymPtr),y + and #$F8 ignore VOLATILE|FUNC|FASTCALL + bne .9 + + clc + rts + +.9 lda #E.TMISMATCH + sec +.99 rts *-------------------------------------- * on RT stack : Addr,value *-------------------------------------- -CC.SYM.SetValue jsr CC.SYM.GetSymSizeOfInAXC - tay - dey - jsr CODE.LDYI +CC.SYM.PopValue jsr CC.SYM.GetYASizeOfInAXC + tax + dex + bne .1 + + >LDYA L.PCC.PopValue1 + jmp CODE.EmitPCC + +.1 cpx #1 + bne .2 + + >LDYA L.PCC.PopValue2 + jmp CODE.EmitPCC + +.2 jsr CODE.LDXI bcs .9 - >LDYA L.PCC.SetValue + >LDYA L.PCC.PopValueX jmp CODE.EmitPCC .9 rts *-------------------------------------- -* in : Y,A = T/Q -* out : CC -* CS, A = E.TMISMATCH -*-------------------------------------- -CC.SYM.CheckTypeYA.OLD - pha - tya - cmp (ZPSymBufPtr) - bne .9 - - pla - - ldy #SYM.Q - eor (ZPSymBufPtr),y - and #$FC ignore SYM.Q.FUNC+SYM.Q.FASTCALL - bne .9 - - clc - rts - -.9 pla - - lda #E.TMISMATCH - sec - rts -*-------------------------------------- * out : Y,A = T/Q *-------------------------------------- CC.SYM.GetTypeInYA @@ -671,16 +690,6 @@ CC.SYM.GetTypeInYA pla rts *-------------------------------------- -* in : Y,A = T/Q -*-------------------------------------- -CC.SYM.SetTypeYA.OLD - phy - ldy #SYM.Q - sta (ZPSymBufPtr),y - pla - sta (ZPSymBufPtr) - rts -*-------------------------------------- * out : A,X,C = size *-------------------------------------- CC.SYM.GetSymSizeOfInAXC diff --git a/BIN/CC.S.txt b/BIN/CC.S.txt index 6c1a8916..88a98f53 100644 --- a/BIN/CC.S.txt +++ b/BIN/CC.S.txt @@ -11,6 +11,7 @@ NEW .INB inc/mli.e.i *-------------------------------------- FILES.MAX .EQ 4 +LIBS.MAX .EQ 4 SCOPE.MAX .EQ 16 LOOKUP.MAX .EQ 16 *-------------------------------------- @@ -23,6 +24,9 @@ SYM.T.SINT .EQ 5 SYM.T.ULONG .EQ 6 SYM.T.SLONG .EQ 7 SYM.T.FLOAT .EQ 8 +SYM.T.STRUCT .EQ 9 +SYM.T.UNION .EQ 10 +SYM.T.ENUM .EQ 11 SYM.T.VARIADIC .EQ $FF SYM.Q .EQ 1 SYM.Q.POINTER .EQ %01000000 @@ -50,6 +54,12 @@ SYM.Def .EQ 8 Funtions : fTQ,a1TQ,a2TQ.... * SYM .EQ 10 *-------------------------------------- +STRUCTF.T .EQ 0 +STRUCTF.Q .EQ 1 +STRUCTF.BitOfs .EQ 2 +STRUCTF.BitWidth .EQ 3 +STRUCTF.Name .EQ 4 +*-------------------------------------- * Zero Page Segment, up to 32 bytes *-------------------------------------- .DUMMY @@ -120,6 +130,8 @@ L.MSG.ERROR .DA MSG.ERROR L.MSG.SUMMARY .DA MSG.SUMMARY L.MSG.NOMAIN .DA MSG.NOMAIN L.ENV.INCLUDE .DA ENV.INCLUDE +L.ENV.LIB .DA ENV.LIB +L.LIB.O .DA LIB.O *-------------------------------------- L.CC.AOPS .DA CC.AOPS L.CC.PREOPS .DA CC.PREOPS @@ -134,7 +146,7 @@ J.CC.PREOPS .DA CC.EXP.Ref L.CC.POSTOPS .DA CC.POSTOPS J.CC.POSTOPS .DA CC.EXP.postinc .DA CC.EXP.postdec - .DA CC.EXP.array + .DA CC.EXP.idx .DA CC.EXP.Struct .DA CC.EXP.pStruct L.CC.BOPS .DA CC.BOPS @@ -164,12 +176,15 @@ J.CC.KW .DA CC.KW.IF *-------------------------------------- .DA CC.KW.SIZEOF .DA CC.KW.STRUCT + .DA CC.KW.UNION + .DA CC.KW.ENUM *-------------------------------------- J.CC.KW.END .DA CC.KW.IF.END .DA CC.KW.WHILE.END .DA CC.KW.ELSE.END .DA CC.KW.DO.END .DA CC.KW.FOR.END + .DA CC.KW.SWITCH.END *-------------------------------------- J.CC.SCSPEC .DA CC.SCSPEC.AUTO .DA CC.SCSPEC.REGISTER @@ -194,7 +209,8 @@ J.CC.STYPES .DA CC.TYPE.SCHAR .DA CC.TYPE.SLONG *-------------------------------------- L.CC.MAIN .DA CC.MAIN -L.CC.LIBC .DA CC.LIBC +L.CC.SYSCALL .DA CC.SYSCALL +L.CC.FPUCALL .DA CC.FPUCALL L.PCC.FH .DA PCC.FH *-------------------------------------- L.PCC.DEBUG .DA PCC.DEBUG @@ -217,14 +233,18 @@ L.PCC.GetLAddr1 .DA PCC.GetLAddr1 L.PCC.GetIAddr1 .DA PCC.GetIAddr1 L.PCC.GetUAddr1 .DA PCC.GetUAddr1 L.PCC.PopAddr1 .DA PCC.PopAddr1 -L.PCC.SetValue .DA PCC.SetValue +L.PCC.PopValue1 .DA PCC.PopValue1 +L.PCC.PopValue2 .DA PCC.PopValue2 +L.PCC.PopValueX .DA PCC.PopValueX L.PCC.GetLAddr2 .DA PCC.GetLAddr2 L.PCC.GetIAddr2 .DA PCC.GetIAddr2 L.PCC.GetUAddr2 .DA PCC.GetUAddr2 L.PCC.PopAddr2 .DA PCC.PopAddr2 L.PCC.Deref2 .DA PCC.Deref2 L.PCC.PushDeref2 .DA PCC.PushDeref2 -L.PCC.PushValue .DA PCC.PushValue +L.PCC.PushValue1 .DA PCC.PushValue1 +L.PCC.PushValue2 .DA PCC.PushValue2 +L.PCC.PushValueY .DA PCC.PushValueY L.PCC.Inc1 .DA PCC.Inc1 L.PCC.Inc2 .DA PCC.Inc2 L.PCC.Inc4 .DA PCC.Inc4 @@ -304,10 +324,11 @@ CS.RUN >PUSHW L.MSG.GREETINGS jsr CS.RUN.ARGS bcs CS.INIT.RTS - jsr CC.CORE.Init + jsr CORE.Init bcs CS.INIT.RTS jsr CODE.Init + bcs CS.INIT.RTS jsr CC.FIO.FOpen1st bcs CS.INIT.RTS @@ -344,6 +365,9 @@ CS.RUN.CLOOP jsr CC.CompileFile cmp #MLI.E.EOF bne .9 + + jsr CODE.EmitTail + bcs .9 jsr CC.FIO.FClose bne .2 @@ -371,6 +395,7 @@ CS.RUN.ARGS inc ArgIndex ldy #1 lda (ZPPtr1),y + beq .90 ldx #OptionVars-OptionList-1 @@ -382,7 +407,21 @@ CS.RUN.ARGS inc ArgIndex bra .90 -.2 ldy OptionVars,x +.2 cpx #4 + bcc .3 + + inc ArgIndex + + lda ArgIndex + >SYSCALL ArgV + bcs .90 + + jsr CC.FIO.LoadLIB.o + bcc CS.RUN.ARGS + + rts + +.3 ldy OptionVars,x lda #$ff sta (pData),y bra CS.RUN.ARGS @@ -422,9 +461,22 @@ CS.DOEVENT sec rts *-------------------------------------- CS.QUIT jsr CODE.Quit - jsr CC.CORE.Quit + jsr CORE.Quit + +.1 >LDA.G LibCount + beq .6 + + dec + sta (pData),y - >LDA.G hLineBuf + clc + adc #hLibOs + tay + lda (pData),y + >SYSCALL FreeMem + bra .1 + +.6 >LDA.G hLineBuf beq .8 >SYSCALL FreeMem @@ -540,29 +592,14 @@ PrintErrorMsg >LDA.G CC.hDefineBuf >SYSCALL FPrintF rts *-------------------------------------- -PrintSummary lda ZPCCCode+1 - sta PCC.FH+PCC.FH.IDATA+1 +PrintSummary >PUSHW L.MSG.SUMMARY + lda ZPCCCode+1 sec sbc #$20 - sta PCC.FH+PCC.FH.CSSIZE+1 - - lda ZPCCCode - sta PCC.FH+PCC.FH.CSSIZE - sta PCC.FH+PCC.FH.IDATA - - >PUSHW L.MSG.SUMMARY - - >PUSHW PCC.FH+PCC.FH.CSSIZE - + >PUSHA + >PUSHB ZPCCCode >PUSHW ZPCCConst - - lda ZPCCData+1 - >PUSHA - sta PCC.FH+PCC.FH.DSSIZE+1 - lda ZPCCData - >PUSHA - sta PCC.FH+PCC.FH.DSSIZE - + >PUSHW ZPCCData >PUSHBI 6 >SYSCALL PrintF * >DEBUG @@ -588,8 +625,8 @@ CS.END MSG.GREETINGS .AZ "\r\nA2osX C Compiler %d.%d\r\n\r\n" MSG.USAGE .AS "Usage : CC