From fdd4c69416f99d58854ad16cd79fad8251eded21 Mon Sep 17 00:00:00 2001 From: burniouf Date: Sat, 20 Aug 2022 16:37:37 +0200 Subject: [PATCH] CC, Bugfix in EDIT & STDIO --- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes .Floppies/A2OSX.TEST.po | Bin 819200 -> 819200 bytes .Floppies/ProDOSFX.BOOT.po | Bin 143360 -> 143360 bytes BASIC.FX/BASIC.S.XF.txt | 24 +- BIN/CC.S.CODE.txt | 341 ++++++----------- BIN/CC.S.CORE.txt | 376 +++++++++--------- BIN/CC.S.DECL.txt | 87 ++--- BIN/CC.S.DIR.txt | 2 +- BIN/CC.S.EXP.txt | 758 ++++++++++++++++++++++++++----------- BIN/CC.S.F.txt | 185 +++++---- BIN/CC.S.FIO.txt | 131 +++++++ BIN/CC.S.KW.txt | 596 ++++++++++++++++++++--------- BIN/CC.S.LINK.txt | 36 ++ BIN/CC.S.PCC.txt | 595 +++++++++++++++++++++++++++++ BIN/CC.S.STMT.txt | 102 ++++- BIN/CC.S.SYM.txt | 489 +++++++++++++++++------- BIN/CC.S.TYPE.txt | 4 +- BIN/CC.S.txt | 640 ++++++++----------------------- BIN/EDIT.S.CTRL.txt | 120 +++--- BIN/EDIT.S.SCRN.txt | 15 +- INC/IO.D2.I.txt | 10 +- INCLUDE/stdio.h.txt | 2 +- LIB/LIBBLKDEV.S.D2.txt | 38 +- ProDOS.FX/ProDOS.S.XRW.txt | 90 +++-- SHARED/X.BB.FX2.S.txt | 27 +- SYS/KERNEL.S.STDIO.txt | 48 ++- 26 files changed, 2960 insertions(+), 1756 deletions(-) create mode 100644 BIN/CC.S.FIO.txt create mode 100644 BIN/CC.S.PCC.txt diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 272ca6b3e440454ed147ed3980fe80794b79acbb..4bce420cb2400940f6326081754dc4fba978f73a 100644 GIT binary patch delta 138504 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

aES{vV+O%Qb8E4oW&hQyu)2KWh3wo>{eB&R;Np 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 diff --git a/.Floppies/A2OSX.TEST.po b/.Floppies/A2OSX.TEST.po index 9463716913332d23268385259b61c8e7d373a4b9..8ba6098a2532c96fc56536ae0ecb3098b8ac9ae7 100644 GIT binary patch delta 43724 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 i`tY89gyCBY2lf1K_e@@llFxG delta 39366 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

O_7&0~c~Mw+B4&P}*o1Tt5X+m+J=A&T`1E`4 z(~{1qodH5p%^#B10PDTgMt(fRcY{%G*fNx_ahj`Bph3^LjEOtFRakj3l1|S1o~dpT zE%G+pAY+oY_PLnkbXPDUO50J5=gYa+j{Bt+5iw8B`hE+wl7ALsNx-0!(uVJ?J>-*i zs;!F7B@jgdd~`{>=HcrIindh7i=9ZDq9-7iy+ZBg{PdXB44v_DeNU*KJsJ|ggybjt z;WU6*pG_6cnCzWO=u3m?Z9&^Lm7Z*7=;)}rHyAxzNa`fk3v&FJ_676v5tKl)2 zlXfNJlb4oEYdz!td&}Q1C<3-c{qNq|U&bS)+y}b1z42M4R-L4FovrlX*vj%Nv5Q%_&f+6#OUN-Q672a$mO2$;c`s*Y`kmouive! z=bS3@ztrSVQ)+`lIihC1eR7ZlefJd0^x7m@y_jSKxSa!k7(`WKl+klBWU(IT&VGKM z*w!*VDB}S+;nW-7%9N#B$#BNql4MwIJ)nLX5aXjL)>M_g;Y$gO903}OaMFR#!ieY7 z-hzo#=2_F_dZp#bkADA5@F!L!hzd-rrWoA14xqdXW*Fi1jMI?tXkyLq{H4b6A1fGHIH*N?@4- z=D}$>psE4Z&-#og~Cwq>w302RjP~$s2 zU4L0AnT~srWDTPx8}yyvRf^-2w8Ia1QQCY*+*=p@I$FtgG)sXo00Cj;x#(;yma0Sv zf&ADnkVhBt|NBLvQ&qxEL>MrWyi3-JpY#5EY_^9|Gri;3i29%hplc&?tBrGAVzk}o zrZVj~N^G9Bi+!(6^tqs7-k))Zi#qnI^Y>GQy`=U|_39A<4@OI8HAl)Q;zag~rG7uE zBC5bwJN=o^VyGz18XwWWjN>!I!8f}Xmo51evpc=c0L+kirMMMv`WxBGtQ{O7Diz$M zDFe2xS+d4+h}%YiSf!A$uPIqf#k}^3pJd}reFR_D^L~)bY}P5DK$km45){AJ)M{gY zA0Q3p48LV&PKP{CM?Ahc73`JOzEq)7kdRwT#z>AZ9MjrxrG#5C>vmFdKgiLeBA#UI z8V|$#0+3D4HSrB%3t6{5p;a;<&8 z0Vc1|eL%fmatqPQ&`GL=K{kGwSW)e>`|B)jZt2^XH?kr5#$E0K&Z${@LKW@h0L!3y z=fIcc!ZW&uGOjJCxMh9bVw-CpS@qNT1BgO42jPQOTF|Mt_-DV!UoVw=E{aDhpuZxb zsA$jX4OOsbBJy-s_@Qp$I#mQ;G#P7J*bf$EmSL8zE4t|##mWkGu@n>o+kd~YR>}tI z&H|s>fAYN1>d(*Za(jO@`lN!Ht=o@BOsJZ*;)?u2L^q+k9PAO6W>41V8wB0cuhy=t z9%yZfhKy)I07ZPmNi?P!{ZWCp(W7!=C1Nx#&JOJ&^SjghCJ`H|<&#jSqIIA!eiS#q z-GB=VmY@AM1sg|2KTH5UBlr%7tR@Jg`JBvK!vjtqs3($D)otjju42lbcr{%ZcU~{1 zZN}ootE5$)-wwZdJ5&!B4*tXc?N`K@^}(Z%%Im1X-pfjO&46m~GJjw1Z%7>x9?ipj z{X}jlRC7fC==bhJSuJdJW52;|sbM*OACn;~{$EOFY>OvX3hp|HB1h(M5MaTUn*nT7 z z6e&-o_>Qm-YdMi6^dVYO4`gFQ2mz;@cS%t{&ffQ+tyzEPa%pFf9Ua4DOXg)@BO7AL z%dc|O@o@bA0g?W)<_g< zxVtB9H#3a+ zyv!1o^gW?o)WmSEDfFNiE*#gXNJ?;#)7U2w?Ssh?3=gu;aHte`Hm$)h{K^S&FUag?mW9MRDZL@TK?KRv|gp9`Wg3{h&BP;Ey(jo*Ai>Nw=im z@j9zXSR4HgX@a}uRZ}i6K$L(D82@jYU2tv?ea1%kNUQY*kQ8*Im_OBWHJe)?LqP{$ z4DZEZc6~cVZ`6q;7b<{Xx-_jfVh-3}RLM=i#6=|=HMD>GG%`$nxVT2fh{W3un0WH( zwIC~`fYCL}hzkTnr^rC@ zKXTtoN)ummqc2mjzvs?ithejnI9G6PFGkg>+ehe(#PO(HZ1wa6aj*FZ_?+KRIFpx{ z{~oTG<9ZQ6Xm&Z-!Bu{)N6SWjf$IEz8;*9BGknSl7Z0LaXM@HhLOhQDC!02bvRI;? zrM~{jMnARFpX`0NbqsX5oFucf%8)qAWt)j37sy*Tu#Xqnsxef<8|invwguf07cEO~aV^_3%6Y>*m8mw+kMkZEY_{v${BojmzDa&=iLy4ZzGLQvh=O z(NnOkoHW8lJeL3vQ4b|)H)b0L$?wWiOlOkiIM&}%Vm35{-bz}h!RH%44s*<;vB}Wn z1RQJKtZzggH6QRVDo6bZ`67`%7m2B%BKtXYzhLVx_f2@n zj>9HwRLQm)-@-2}=^Spg%w%I{axZPtWsBA+?ulMo_^K{1B0t@Ht8ALH#0zvCsq)U; zj1!&aH4%uw4sbn3+`vCZvraPOJeaNJo5vWdv)x2mU`j*|PV4G~);t%p?CymC6???8 z1SfwZT#C`<%s1T!_}BBTOb5&ef|ER+T&H)7;9Leb8M=HGt%6r4c{>Kb6BUXzKm&XD ze3BcE1uXr0n`cD&^Y4Sodj(QH9lx6hmPnjj0i3+Y<8Mz-&#gTOei$y~Pdz5|;Fz%f F{{Y0QEPwz2 diff --git a/.Floppies/ProDOSFX.BOOT.po b/.Floppies/ProDOSFX.BOOT.po index 8eadcff7d09396b5283fa4ddf9338cffae5674d4..b44ae9361c7027791e0f99f730de4f992d2cb988 100644 GIT binary patch delta 7473 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 JpRWqp`5&U%G!_5= delta 7314 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 T, must move out @@ -119,13 +121,15 @@ BSX.MoveHead sta BSX.TargetQTrack jsr BSX.Wait25600usec + lda IO.D2.Ph0Off,y + bcc .10 - lda IO.D2.Ph0Off,x + clc -.10 lda IO.D2.Ph0Off,y + lda IO.D2.Ph0Off,x - rts +.10 rts *-------------------------------------- BSX.SeekPhOnY and #6 ora BSX.Slotn0 @@ -139,7 +143,7 @@ BSX.Wait25600usec BSX.Wait100usecA phx -.1 ldx #20 (2) +.1 ldx #19 (2) .2 dex (2) bne .2 (3) diff --git a/BIN/CC.S.CODE.txt b/BIN/CC.S.CODE.txt index 8fb6b1f9..0a71d8fb 100644 --- a/BIN/CC.S.CODE.txt +++ b/BIN/CC.S.CODE.txt @@ -3,283 +3,127 @@ NEW *-------------------------------------- CODE.Init stz ZPCCConst stz ZPCCConst+1 - + + stz bInitCode + >LDYAI PCC.FH.CS >STYA ZPCCCode - + >LDYAI 20 char *ARGV[10] >STYA ZPCCData - + + lda #'_' + >STA.G CC.CPSPFX+1 + + lda #'A' + >STA.G CC.CPSID + + iny CC.CPSID+1 + sta (pData),y + clc .9 rts *-------------------------------------- CODE.Quit >LDA.G CC.hOutFile beq .8 - + >SYSCALL FClose .8 clc rts *-------------------------------------- -CODE.Debug ldx #PCC.DEBUG.L - ldy #0 - -.1 lda PCC.DEBUG,y - jsr CODE.EmitByte - iny - dex - bne .1 - - rts -*-------------------------------------- -CODE.Enter ldx #PCC.ENTER.L - ldy #0 - -.1 lda PCC.ENTER,y - jsr CODE.EmitByte - iny - dex - bne .1 - - rts -*-------------------------------------- CODE.nAddLocal eor #$FF inc - -CODE.AddLocal pha - lda #$A9 LDA #imm - jsr CODE.EmitByte - pla - jsr CODE.EmitByte - ldx #PCC.ADDLOCAL.L - ldy #0 +CODE.AddLocal jsr CODE.LDAI + bcs .9 -.1 lda PCC.ADDLOCAL,y - jsr CODE.EmitByte - iny - dex - bne .1 + >LDYA L.PCC.ADDLOCAL + jmp CODE.EmitPCC - rts -*-------------------------------------- -CODE.GetLocal lda #$A9 LDA #imm - jsr CODE.EmitByte - tya - eor #$FF - inc - jsr CODE.EmitByte - - ldx #PCC.GETLOCAL.L - ldy #0 - -.1 lda PCC.GETLOCAL,y - jsr CODE.EmitByte - iny - dex - bne .1 - - rts +.9 rts *-------------------------------------- CODE.SetRetValue jsr CODE.LDXI + bcs .9 - ldx #PCC.SETRETVALUE.L - ldy #0 + >LDYA L.PCC.SetRetValue + jmp CODE.EmitPCC -.1 lda PCC.SETRETVALUE,y - jsr CODE.EmitByte - iny - dex - bne .1 - - rts +.9 rts *-------------------------------------- -CODE.Leave ldx #PCC.LEAVE.L - ldy #0 - -.1 lda PCC.LEAVE,y - jsr CODE.EmitByte - iny - dex - bne .1 - - rts -*-------------------------------------- -CODE.PushXFromYA - ldx #PCC.PushXFromYA.L - ldy #0 - -.1 lda PCC.PushXFromYA,y - jsr CODE.EmitByte - iny - dex - bne .1 - - rts -*-------------------------------------- -CODE.PopXToYA ldx #PCC.PopXToYA.L - ldy #0 - -.1 lda PCC.PopXToYA,y - jsr CODE.EmitByte - iny - dex - bne .1 - - rts -*-------------------------------------- -CODE.SetXToYA ldx #PCC.SetXToYA.L - ldy #0 - -.1 lda PCC.SetXToYA,y - jsr CODE.EmitByte - iny - dex - bne .1 - - rts -*-------------------------------------- -CODE.Deref ldx #PCC.Deref.L - ldy #0 - -.1 lda PCC.Deref,y - jsr CODE.EmitByte - iny - dex - bne .1 - - rts -*-------------------------------------- -CODE.SETpBASEp1 ldx #PCC.SETpBASEp1.L - ldy #0 - -.1 lda PCC.SETpBASEp1,y - jsr CODE.EmitByte - iny - dex - bne .1 - - rts -*-------------------------------------- -CODE.SETpBASEpA ldx #PCC.SETpBASEpA.L - ldy #0 - -.1 lda PCC.SETpBASEpA,y - jsr CODE.EmitByte - iny - dex - bne .1 - - rts -*-------------------------------------- -CODE.PUSHpBASEp1 - ldx #PCC.PUSHpBASEp1.L - ldy #0 - -.1 lda PCC.PUSHpBASEp1,y - jsr CODE.EmitByte - iny - dex - bne .1 - - rts -*-------------------------------------- -CODE.PUSHpBASEpA - ldx #PCC.PUSHpBASEpA.L - ldy #0 - -.1 lda PCC.PUSHpBASEpA,y - jsr CODE.EmitByte - iny - dex - bne .1 - - rts -*-------------------------------------- -CODE.PushFromPtr - pha - lda #$A0 LDY #imm - jsr CODE.EmitByte +CODE.PUSHAXI pha + txa + jsr CODE.PUSHI + bcs CODE.LDAXI.RTS + pla - dec BPL loop - jsr CODE.EmitByte - - ldx #PCC.PushFromPtr.L - ldy #0 - -.1 lda PCC.PushFromPtr,y - jsr CODE.EmitByte - iny - dex - bne .1 - - rts -*-------------------------------------- -CODE.PushConstP lda #$A9 LDA #imm - jsr CODE.EmitByte - bcs .9 - - lda ZPCCConst - jsr CODE.EmitByte - bcs .9 - - lda #$A2 LDX #imm - jsr CODE.EmitByte - bcs .9 - - lda ZPCCConst+1 - jsr CODE.EmitByte - bcs .9 - - ldx #PCC.PushConstPAX.L - ldy #0 - -.1 lda PCC.PushConstPAX,y - jsr CODE.EmitByte - bcs .9 - - iny - dex - bne .1 - - clc -.9 rts *-------------------------------------- CODE.PUSHI pha lda #$A9 LDA #imm jsr CODE.EmitByte + bcs CODE.LDAXI.RTS + pla jsr CODE.EmitByte + bcs CODE.LDAXI.RTS + bra CODE.PUSHA *-------------------------------------- CODE.LDYAI pha lda #$A0 LDY #imm jsr CODE.EmitByte + bcs CODE.LDAXI.RTS + tya jsr CODE.EmitByte - + bcs CODE.LDAXI.RTS + lda #$A9 LDA #imm jsr CODE.EmitByte - + bcs CODE.LDAXI.RTS + pla jmp CODE.EmitByte *-------------------------------------- +CODE.LDAXI jsr CODE.LDAI + bcc CODE.LDXI + +CODE.LDAXI.RTS rts +*-------------------------------------- +CODE.LDYI lda #$A0 LDY #imm + jsr CODE.EmitByte + bcs .9 + + tya + jmp CODE.EmitByte + +.9 rts +*-------------------------------------- CODE.LDXI lda #$A2 LDX #imm jsr CODE.EmitByte + bcs .9 + txa jmp CODE.EmitByte + +.9 rts *-------------------------------------- CODE.LDAI pha lda #$A9 LDA #imm jsr CODE.EmitByte + bcs .9 + pla jmp CODE.EmitByte + +.9 plx + rts *-------------------------------------- CODE.PUSHYA jsr CODE.PUSHA - lda #$AA TYA + lda #$98 TYA jsr CODE.EmitByte *-------------------------------------- CODE.PUSHA lda #$C6 DEC zp @@ -315,27 +159,57 @@ CODE.TOABSYX jsr CODE.EmitByte A=opcode : JMP, JSR ..... tya bra CODE.EmitByte *-------------------------------------- -CODE.SYSCALL lda #$A2 LDX #imm - jsr CODE.EmitByte - txa - jsr 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 + +.9 rts *-------------------------------------- -CODE.FPUCALL lda #$A2 LDX #imm - jsr CODE.EmitByte - txa - jsr CODE.EmitByte +CODE.FPUCALL jsr CODE.LDXI + bcs .9 + lda #$20 JSR jsr CODE.EmitByte + bcs .9 + lda #A2osX.FPUCALL jsr CODE.EmitByte + bcs .9 + lda /A2osX.FPUCALL bra CODE.EmitByte + +.9 rts +*-------------------------------------- +CODE.DEBUG >LDYA L.PCC.DEBUG +*-------------------------------------- +CODE.EmitPCC >STYA ZPLookupPtr + + lda (ZPLookupPtr) + tax + dex + + ldy #1 + +.1 lda (ZPLookupPtr),y + jsr CODE.EmitByte + bcs .9 + + iny + dex + bne .1 + +.9 rts *-------------------------------------- CODE.EmitByte clc if Pass 1... bit bPass2 @@ -344,12 +218,12 @@ CODE.EmitByte clc if Pass 1... phx phy tax - + >PUSHB.G CC.hOutFile txa >PUSHA >SYSCALL fputc - + ply plx @@ -367,7 +241,7 @@ CODE.EmitDATA clc phx phy tax - + >PUSHB.G CC.hOutFile txa >PUSHA @@ -385,9 +259,9 @@ CODE.EmitDATA clc CODE.CSSelect clc bit bPass2 bpl .8 - + >PUSHB.G CC.hOutFile - >PUSHWI 0 + >PUSHWZ lda ZPCCCode+1 sec sbc #$20 @@ -404,8 +278,7 @@ CODE.DSSelect clc bpl .8 >PUSHB.G CC.hOutFile - >PUSHWI 0 - + >PUSHWZ lda ZPCCConst clc adc PCC.FH+PCC.FH.IDATA diff --git a/BIN/CC.S.CORE.txt b/BIN/CC.S.CORE.txt index e7c5871b..72f1b44b 100644 --- a/BIN/CC.S.CORE.txt +++ b/BIN/CC.S.CORE.txt @@ -40,7 +40,7 @@ CC.CORE.Init >SYSCALL SListNew * clc .9 rts *-------------------------------------- -CC.CORE.Quit jsr CS.RUN.FClose +CC.CORE.Quit jsr CC.FIO.FClose bne CC.CORE.Quit ldy ScopeIdx @@ -78,9 +78,11 @@ CC.CORE.Quit jsr CS.RUN.FClose >LDA.G CC.hStack -.7 beq CC.Quit.RTS +.7 beq .8 + >SYSCALL FreeMem -CC.Quit.RTS rts + +.8 rts *-------------------------------------- CC.CompileFile >SLEEP @@ -98,7 +100,7 @@ CC.CompileFile >SLEEP cmp #3 Ctrl-C beq .9 -.1 jsr CS.RUN.FGetS +.1 jsr CC.FIO.FGetS bcs .9 jsr CC.CompileLine @@ -114,176 +116,143 @@ CC.CompileFile >SLEEP .9 rts *-------------------------------------- CC.CompileLine jsr CC.GetCharNB - bcs CC.Quit.RTS + bcs .9 -CC.CompileLine.1 - cmp #C.CR empty line.... - beq .2 + cmp #C.CR EOL.... + beq .8 - cmp #'/' - bne .3 comments ... - - jmp CC.Comments - -.2 clc - rts - -.3 cmp #'#' directive ? - bne .4 + cmp #'#' directive ? + bne .1 jmp CC.DIR -.4 cmp #'}' End of CPStmt ? - bne .10 +.1 cmp #'/' + bne .2 comments ... + + jmp CC.Comments + +.2 cmp #'}' End of CPStmt ? + bne .3 jsr CC.GetNextCharNB Skip '}' - jmp CC.STMT.CPStmt.END -*-------------------------------------- -.10 jsr CC.IsLetter - bcc .20 + jsr CC.STMT.CPStmt.END + bcs .9 -* TODO: PREOPS ++ --..... + bra CC.CompileLine - bcs .29 +.3 cmp #';' End of Stmt ? + bne .4 + + jsr CC.GetNextCharNB Skip ';' + + jsr CC.STMT.Stmt.END + bcs .9 + + bra CC.CompileLine + +.4 jsr CC.CompileStmt + bcs .9 + + bra CC.CompileLine + +.8 clc +.9 rts *-------------------------------------- -.20 >LDYA L.CC.TYPEQUAL +* keyword : for, while .... +*-------------------------------------- +CC.CompileStmt >LDYA L.CC.KW jsr CC.LookupID - bcs .50 + bcs .10 not an internal CC keyword.... - jsr CC.TYPE.Decl - bcs .59 - - ldx #SYM.SC.STATIC Y,A = Type/Qual - bit bLocalScope - bpl .25 - - bit #SYM.Q.FUNC someone wants to add a local f() ? - sec - bne .29 - - ldx #SYM.SC.AUTO - -.25 jsr CC.SYM.New Y,A=T/Q, add with undef value... - bcs .29 OOM or DUP - - jsr CC.GetCharNB - bcs .69 - - cmp #';' - beq .28 - - cmp #'{' - bne .26 - - jsr CC.GetNextCharNB skip '{' - bcs .69 - - jmp CC.SYM.StoreF + txa + >STA.G CC.CmdSave + jmp (J.CC.KW,x) *-------------------------------------- - -* TODO: AOPS - +* Declaration : int var or int func() *-------------------------------------- -.26 cmp #'=' - sec - bne .69 -*-------------------------------------- - jsr CC.GetNextCharNB skip '=' - bcs .69 - - jsr CC.SYM.GetTypeInYA expected T/Q - jsr CC.EXP.Eval - bcs .59 - - jsr CC.SYM.PopValue Y,A = T/Q, Set value to this var -.29 bcs .9 - -.28 jsr CC.SYM.Store - bcs .9 - - - - bra .68 -*-------------------------------------- -.21 jsr CC.GetCharNB - bcs .99 - - cmp #';' - beq .8 - - cmp #'{' - bne .99 - - jsr CC.GetNextCharNB skip '{' - bcs .99 - - jmp CC.CompileLine.1 -*-------------------------------------- -.50 >LDYA L.CC.KW +.10 >LDYA L.CC.TYPEQUAL jsr CC.LookupID - bcs .6 not an internal CC keyword.... + bcs .6 - jsr CC.KW.JMP -.59 bcs .9 - - bra .8 + jmp CC.DECL *-------------------------------------- -.6 jsr CC.SYM.Lookup var= or func() ? -.69 bcs .99 - - ldy #SYM.Q - lda (ZPLookupSymPtr),y - bit #SYM.Q.FUNC - beq .60 - - ldy #0 func( ... ); - lda #0 - jsr CC.F.CallNoRetV - bcs .9 - - jsr CC.SYM.LookupFree - - bra .8 +* Statement : ++var, var=, func(); *-------------------------------------- -.60 jsr CC.GetCharNB var = ? - bcs .99 - - cmp #'=' TODO: all AOPS - bne .99 - - jsr CC.GetNextChar Skip = - bcs .99 - - jsr CC.SYM.GetTypeInYA - jsr CC.EXP.Eval - bcs .9 - - jsr CC.SYM.PopValue - bcs .9 - - jsr CC.SYM.LookupFree +.6 jmp CC.STMT *-------------------------------------- -.68 jsr CC.GetCharNB - cmp #';' - beq .8 - .99 lda #E.CSYN sec .9 rts *-------------------------------------- -.8 jsr CC.GetNextCharNB Skip ; - bcs .9 +CC.CORE.SetVar stz ExpState - cmp #C.CR - beq .80 + jsr CC.EXP.POSTOPS var++, var[0]... ? + bcs .99 - jmp CC.CompileLine.1 + 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 -.80 clc rts -*-------------------------------------- -CC.Comments jsr CC.GetNextChar + +.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 @@ -304,10 +273,32 @@ CC.SkipLine jsr CC.GetNextChar .9 rts *-------------------------------------- CC.LookupID >STYA ZPLookupPtr - jsr CC.GetIDLen bra CC.Lookup +CC.LookupAOP >LDYA L.CC.AOPS + >STYA ZPLookupPtr + + ldy #$ff + +.1 iny + lda (ZPLineBufPtr),y + sec + beq .9 + + jsr CC.IsOPChar + bcs .9 + + cmp #'=' + bne .1 + + iny + +.8 tya + bra CC.Lookup + +.9 rts + CC.LookupOP >STYA ZPLookupPtr jsr CC.GetOPLen @@ -342,7 +333,7 @@ CC.Lookup phy Y = len lda ZPLookupPtr+1 adc #0 clc Y,A = F() def, X = F() index -.8 rts + rts .4 inx inx @@ -350,32 +341,11 @@ CC.Lookup phy Y = len jsr CC.ZPLookupPtrAddAp1 bra .1 -.9 pla +.9 ldx #$FF + pla sec rts *-------------------------------------- -CC.SListLookup >PUSHA hSList - >PUSHA ...for SListGetData - >PUSHW ZPLineBufPtr - >SYSCALL SListLookup - bcs .99 - - >PUSHA KeyID.HI - tya - >PUSHA KeyID.LO - - jsr CC.SkipX - - >PUSHWZ allocate - >PUSHWI 65535 all - >PUSHWZ From Start - >SYSCALL SListGetData - -.9 rts Y,A = SymSize, X = hSymBuf - -.99 inc pStack discard extra hSList - rts -*-------------------------------------- CC.ZPLookupPtrAddAp1 sec adc ZPLookupPtr @@ -400,6 +370,28 @@ CC.GetDefine >LDA.G CC.hDefines .9 rts *-------------------------------------- +CC.SListLookup >PUSHA hSList + >PUSHA ...for SListGetData + >PUSHW ZPLineBufPtr + >SYSCALL SListLookup + bcs .99 + + >PUSHA KeyID.HI + tya + >PUSHA KeyID.LO + + jsr CC.SkipX + + >PUSHWZ allocate + >PUSHWI 65535 all + >PUSHWZ From Start + >SYSCALL SListGetData + +.9 rts Y,A = SymSize, X = hSymBuf + +.99 inc pStack discard extra hSList + rts +*-------------------------------------- * CT Stack *-------------------------------------- CC.PushTQ ldy #SYM.Q @@ -455,13 +447,19 @@ CC.PopYA ldy CStackPtr sec rts *-------------------------------------- -CC.Pop ldy CStackPtr +CC.Pop jsr CC.Get + + inc CStackPtr + +* clc + +.9 rts +*-------------------------------------- +CC.Get ldy CStackPtr beq .9 lda (ZPCCStack),y - inc CStackPtr - clc rts @@ -521,6 +519,32 @@ CC.GetNextCharNB CC.GetNextCharNB.RTS rts *-------------------------------------- +CC.GetCharNBNL jsr CC.GetChar + bcs CC.GetNextCharNB.RTS + + jsr CC.CheckCharNB + bcs CC.GetNextCharNBNL + + cmp #C.CR + clc + bne CC.GetNextCharNB.RTS + + jsr CC.FIO.FGetS + bcs CC.GetNextCharNB.RTS +*-------------------------------------- +CC.GetNextCharNBNL + jsr CC.GetNextCharNB + bcs CC.GetNextCharNB.RTS + + cmp #C.CR + clc + bne .9 + + jsr CC.FIO.FGetS + bcc CC.GetNextCharNBNL + +.9 rts +*-------------------------------------- CC.CheckSpace jsr CC.GetChar bcs .90 @@ -578,10 +602,10 @@ CC.GetChar lda (ZPLineBufPtr) CC.IsEndArg cmp #']' beq .8 - cmp #';' + cmp #',' beq .8 - cmp #',' + cmp #';' beq .8 cmp #')' diff --git a/BIN/CC.S.DECL.txt b/BIN/CC.S.DECL.txt index 8629d30e..9a407789 100644 --- a/BIN/CC.S.DECL.txt +++ b/BIN/CC.S.DECL.txt @@ -1,68 +1,69 @@ NEW AUTO 3,1 *-------------------------------------- -CC.DECL jsr CC.IsLetter - bcs .80 - -.10 >LDYA L.CC.SCSPEC - jsr CC.LookupID - bcs .20 - -* TODO: typedef .... - - bcs .90 - -.20 >LDYA L.CC.TYPEQUAL - jsr CC.LookupID - bcs .80 - - jsr CC.TYPE.Decl - bcs .99 +* X = type qual +*-------------------------------------- +CC.DECL jsr CC.TYPE.Decl + bcs .9 ldx #SYM.SC.STATIC Y,A = Type/Qual bit bLocalScope - bpl .21 + bpl .25 bit #SYM.Q.FUNC someone wants to add a local f() ? - bne .90 + sec + bne .29 ldx #SYM.SC.AUTO -.21 jsr CC.SYM.New Y,A=T/Q, add with undef value... +.25 jsr CC.SYM.New Y,A=T/Q, add with undef value... + bcs .29 OOM or DUP + +.22 jsr CC.GetCharNB bcs .99 - jsr CC.SYM.Store - bcs .99 + cmp #';' + beq .28 -* TODO: AOPS + cmp #'{' + bne .26 + + jsr CC.GetNextCharNB skip '{' + bcs .99 + + jmp CC.SYM.StoreF +*-------------------------------------- +* Initializer +*-------------------------------------- +.26 cmp #'=' type var = value ? + bne .99 - cmp #'=' - bne .90 - jsr CC.GetNextCharNB skip '=' - bcs .99 - + bcs .99 + jsr CC.SYM.GetTypeInYA expected T/Q jsr CC.EXP.Eval - bcs .99 + bcs .9 - jsr CC.SYM.PopValue Y,A = T/Q, Set value to this var -.29 bcs .99 + jsr CC.SYM.GetAddr1 + bcs .9 + + jsr CC.SYM.SetValue Y,A = T/Q, Set value to this var +.29 bcs .9 +.28 jsr CC.SYM.Store + bcs .9 + + jsr CC.GetCharNB + cmp #';' + bne .99 - - - clv clc rts - -.80 bit #$60 - clc - rts - -.90 lda #E.CSYN +*-------------------------------------- +.99 lda #E.CSYN sec -.99 rts +.9 rts *-------------------------------------- CC.SCSPEC.AUTO CC.SCSPEC.REGISTER @@ -71,9 +72,9 @@ CC.SCSPEC.EXTERN CC.SCSPEC.TYPEDEF -.99 lda #E.CSYN +.98 lda #E.CSYN sec -.9 rts +.99 rts *-------------------------------------- MAN SAVE usr/src/bin/cc.s.decl diff --git a/BIN/CC.S.DIR.txt b/BIN/CC.S.DIR.txt index a10cc225..c1c5acd9 100644 --- a/BIN/CC.S.DIR.txt +++ b/BIN/CC.S.DIR.txt @@ -134,7 +134,7 @@ CC.DIR.INCLUDE lda #0 >STZ.G PathBuf rts .5 >LDYA pData - jmp CS.RUN.FOpen + jmp CC.FIO.FOpen *-------------------------------------- MAN SAVE usr/src/bin/cc.s.dir diff --git a/BIN/CC.S.EXP.txt b/BIN/CC.S.EXP.txt index 585abebd..e8a52361 100644 --- a/BIN/CC.S.EXP.txt +++ b/BIN/CC.S.EXP.txt @@ -10,7 +10,12 @@ NEW CC.EXP.Eval00 lda #0 tay -CC.EXP.Eval ldx ZPPtr2 local : expected T/Q +CC.EXP.Eval ldx ZPPtr1 local : returned T/Q + phx + ldx ZPPtr1+1 + phx + + ldx ZPPtr2 local : expected T/Q phx ldx ZPPtr2+1 phx @@ -22,7 +27,11 @@ CC.EXP.Eval ldx ZPPtr2 local : expected T/Q >STYA ZPPtr2 + stz ZPPtr1 + stz ZPPtr1+1 + lda #$ff no previous OP + sta ZPPtr3+1 no PREOPS pha *-------------------------------------- .10 jsr CC.GetCharNB @@ -60,7 +69,11 @@ CC.EXP.Eval ldx ZPPtr2 local : expected T/Q .19 jmp CC.EXP.Eval.ESYN *-------------------------------------- -.20 jsr CC.ExpPreops +.20 >LDYA L.CC.PREOPS + jsr CC.LookupOP + stx ZPPtr3+1 + + jsr CC.GetCharNB bcs .29 jsr CC.IsLetter define, f() or Var ? @@ -77,10 +90,7 @@ CC.EXP.Eval ldx ZPPtr2 local : expected T/Q and #SYM.Q.FUNC bne .21 - jsr CC.EXP.CheckGetSymType - bcs .29 - - jsr CC.EXP.Get Check T/Q & Get value on stack + jsr CC.EXP.GetVar Check T/Q & Get value on stack bcs .29 jsr CC.SYM.LookupFree @@ -116,7 +126,7 @@ CC.EXP.Eval ldx ZPPtr2 local : expected T/Q .24 cmp #'"' String literal bne CC.EXP.Eval.ESYN - jsr CC.AddContCharP + jsr CC.EXP.AddConstCharP .29 bcs CC.EXP.Eval.Err *-------------------------------------- .30 jsr CC.GetCharNB @@ -157,6 +167,7 @@ CC.EXP.Eval.End plx any OP on stack ? bmi CC.EXP.Eval.Exit >LDYA ZPPtr2 Var Type + jsr CC.EXP.BOPS bcc CC.EXP.Eval.End @@ -173,7 +184,13 @@ CC.EXP.Eval.Err bra CC.EXP.Eval.ExitErr *-------------------------------------- CC.EXP.Eval.Exit + lda ZPPtr1+1 + ldy ZPPtr1 + bne .1 + >LDYA ZPPtr2 Type/Qual + +.1 and #$FC ignore SYM.Q.FUNC+SYM.Q.FASTCALL clc CC.EXP.Eval.ExitErr @@ -187,43 +204,17 @@ CC.EXP.Eval.ExitErr plx stx ZPPtr2 - rts -*-------------------------------------- -CC.EXP.CheckGetSymType - lda ZPPtr2 - ora ZPPtr2+1 - bne .1 + plx + stx ZPPtr1+1 + plx + stx ZPPtr1 - lda (ZPLookupSymPtr) - sta ZPPtr2 - - ldy #SYM.Q - lda (ZPLookupSymPtr),y - sta ZPPtr2+1 - - clc - rts - -.1 lda ZPPtr2 - cmp (ZPLookupSymPtr) #SYM.T - bne .9 - - lda ZPPtr2+1 - ldy #SYM.Q - cmp (ZPLookupSymPtr),y - bne .9 - - clc - rts - -.9 lda #E.TMISMATCH - sec rts *-------------------------------------- CC.EXP.Cast jsr CC.TYPE.Decl bcs .99 - >STYA ZPPtr2 + >STYA ZPPtr1 jsr CC.GetCharNB bcs .9 @@ -240,20 +231,15 @@ CC.EXP.Cast jsr CC.TYPE.Decl sec .99 rts *-------------------------------------- -CC.ExpPreops >LDYA L.CC.PREOPS - - jsr CC.LookupOP - bcc .8 - - ldx #$ff - -.8 stx ZPPtr3+1 - - jmp CC.GetCharNB -*-------------------------------------- * Y,A = Type/Qual, X = OP *-------------------------------------- -CC.EXP.BOPS cpy #SYM.T.UINT +CC.EXP.BOPS bit #SYM.Q.PPPOINTER + beq .10 + + ldy #SYM.T.UINT + bra .3 + +.10 cpy #SYM.T.UINT bcs .3 cpy #SYM.T.UCHAR @@ -261,26 +247,16 @@ CC.EXP.BOPS cpy #SYM.T.UINT cpy #SYM.T.SCHAR beq .2 - + lda #E.TMISMATCH sec rts -.1 lda J.CC.bBOPS,x - ldy J.CC.bBOPS+1,x - tax - lda #$20 JSR - jsr CODE.TOABSYX - clc - rts +.1 >LDYA L.PCC.bBOPS,x + jmp CODE.EmitPCC -.2 lda J.CC.cBOPS,x - ldy J.CC.cBOPS+1,x - tax - lda #$20 JSR - jsr CODE.TOABSYX - clc - rts +.2 >LDYA L.PCC.bBOPS,x + jmp CODE.EmitPCC .3 txa clc @@ -291,9 +267,17 @@ CC.EXP.BOPS cpy #SYM.T.UINT clc rts *-------------------------------------- -CC.AddContCharP jsr CODE.PushConstP +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 @@ -312,14 +296,14 @@ CC.AddContCharP jsr CODE.PushConstP jsr CODE.EmitData bcs .99 - + iny bra .1 .2 lda #0 jsr CODE.EmitData bcs .99 - + jsr CODE.CSSelect bcs .99 @@ -332,6 +316,21 @@ CC.AddContCharP jsr CODE.PushConstP sec .99 rts *-------------------------------------- +CC.EXP.IntConst >PUSHW ZPLineBufPtr + >PUSHWI ZPLineBufPtr + >PUSHBI 10 + >SYSCALL StrToUL + + >PULLA + tay + + >PULLA + + inc pStack + inc pStack + + rts +*-------------------------------------- CC.EXP.GetNum cpy #SYM.T.FLOAT bcc .1 @@ -394,35 +393,43 @@ CC.EXP.GetNum cpy #SYM.T.FLOAT * ZPPtr2 = expected T/Q * ZPPtr3+1 = PREOPS *-------------------------------------- -CC.EXP.Get >LDYA L.CC.AOPS - jsr CC.LookupOP - bcs .20 +CC.EXP.GetVar stz ExpState - >LDYA ZPPtr2 get expected T/Q - jsr CC.EXP.Eval + jsr CC.EXP.POSTOPS var++, var[0]... ? bcs .99 - jsr CC.SYM.SetValue + ldx ZPPtr3+1 preop &, * ... + jsr CC.EXP.PREOPS bcs .99 - clc - rts -*-------------------------------------- -.20 >LDYA L.CC.POSTOPS - jsr CC.LookupOP - bcs .1 + lda ExpState + bmi .8 VonStack - cpx #4 '[' - bne * + asl - jmp CC.EXP.Array -*-------------------------------------- -.1 ldx ZPPtr3+1 preop - bpl .8 + bmi .7 AinPTR - lda ZPPtr2 target T + asl + bmi .6 AonStack + + jsr CC.EXP.GetAddr2 + bcs .99 + + bra .7 + +.6 >LDYA L.PCC.PopAddr2 + jsr CODE.EmitPCC + bcs .99 + +.7 jsr CC.EXP.PushValue + bcs .99 + +.8 lda ZPPtr2 target T beq .3 + cmp #SYM.T.VOID + beq .2 + lda (ZPLookupSymPtr) SYM.T cmp #SYM.T.VOID beq .2 @@ -435,190 +442,503 @@ CC.EXP.Get >LDYA L.CC.AOPS ldy #SYM.Q cmp (ZPLookupSymPtr),y bne .9 + + clc + rts .3 lda (ZPLookupSymPtr) SYM.T sta ZPPtr2 T - pha + ldy #SYM.Q lda (ZPLookupSymPtr),y sta ZPPtr2+1 Q - ply Y,A = T/Q - - jsr CC.SYM.PushValue clc -.99 rts + rts .9 lda #E.TMISMATCH sec - rts - -.8 jmp (J.CC.PREOPS,x) +.99 rts *-------------------------------------- -CC.EXP.Array ldy #SYM.Q +* POSTOPS +*-------------------------------------- +CC.EXP.POSTOPS >LDYA L.CC.POSTOPS + jsr CC.LookupOP + bcs .8 + + jmp (J.CC.POSTOPS,x) + +.8 clc + rts +*-------------------------------------- +CC.EXP.postinc lda ExpState + bit #ExpState.AinPTR + bne .1 + + jsr CC.EXP.GetAddr2 + bcs .99 + + lda #ExpState.AinPTR + tsb ExpState + +.1 ldy #SYM.Q + lda (ZPLookupSymPtr),y + and #SYM.Q.AAARRAY+SYM.Q.PPPOINTER + bne .8 + + lda (ZPLookupSymPtr) #SYM.T + cmp #SYM.T.FLOAT + bcs .98 + + tay + + lda CC.TYPESIZE-1,y + lsr + bcc .2 + + >LDYA L.PCC.Inc1 + jmp CODE.EmitPCC + +.2 lsr + bcc .4 + + >LDYA L.PCC.Inc2 + jmp CODE.EmitPCC + +.4 >LDYA L.PCC.Inc4 + jmp CODE.EmitPCC + + +.8 + +.98 lda #E.ESYN + sec +.99 rts +*-------------------------------------- +CC.EXP.postdec lda ExpState + bit #ExpState.AinPTR + bne .1 + + jsr CC.EXP.GetAddr2 + bcs .99 + + lda #ExpState.AinPTR + tsb ExpState + +.1 ldy #SYM.Q + lda (ZPLookupSymPtr),y + and #SYM.Q.AAARRAY+SYM.Q.PPPOINTER + bne .8 + + lda (ZPLookupSymPtr) #SYM.T + cmp #SYM.T.FLOAT + bcs .98 + + tay + + lda CC.TYPESIZE-1,y + lsr + bcc .2 + + >LDYA L.PCC.Dec1 + jmp CODE.EmitPCC + +.2 lsr + bcc .4 + + >LDYA L.PCC.Dec2 + jmp CODE.EmitPCC + +.4 >LDYA L.PCC.Dec4 + jmp CODE.EmitPCC + + +.8 + +.98 lda #E.ESYN + sec +.99 rts +*-------------------------------------- +CC.EXP.array ldy #SYM.Q lda (ZPLookupSymPtr),y and #SYM.Q.AAARRAY - beq .9 + beq .39 - jsr CC.EXP.PushDeref push base address + ldy #SYM.Def + lda (ZPLookupSymPtr),y + iny + ora (ZPLookupSymPtr),y + beq .1 + jsr CC.EXP.PushAddr array[int]... + bcc .2 + + rts + +.1 jsr CC.EXP.GetAddr2 array[]...it is a * + bcs .9 + + >LDYA L.PCC.PushDeref2 + jsr CODE.EmitPCC + bcs .9 + +.2 jsr CC.EXP.array.getIdx ...int16 on stack... + bcs .9 + + jsr CC.EXP.GetSymSizeOfInAXC + jsr CODE.PUSHAXI ...sizeof on stack... + bcs .9 + + ldx #FPU.iMUL + jsr CODE.FPUCALL ...sizeof*int16... + bcs .9 + + ldx #FPU.iAdd + jsr CODE.FPUCALL ...add to base address + bcs .9 + +.3 jsr CC.GetNextCharNB skip ']' + bcs .98 + + cmp #'[' + bne .8 + + jsr CC.GetNextCharNB skip '[' + bcs .98 + + ldy #SYM.Q + lda (ZPLookupSymPtr),y + and #SYM.Q.AAARRAY +.39 beq .99 + + jsr CC.EXP.array.getIdx ...int16 on stack... + bcs .9 + + ldy #SYM.Def+3 + lda (ZPLookupSymPtr),y + tax + dey + lda (ZPLookupSymPtr),y + jsr CODE.PUSHAXI [][SIZE] on stack + + ldx #FPU.iMUL + jsr CODE.FPUCALL [][SIZE] * int16 on stack + + jsr CC.EXP.GetSymSizeOfInAXC + jsr CODE.PUSHAXI ...sizeof on stack... + bcs .9 + + ldx #FPU.iMUL + jsr CODE.FPUCALL ...sizeof*int16... + + ldx #FPU.iAdd + jsr CODE.FPUCALL ...add to base address + bcs .9 + + jsr CC.GetNextCharNB skip ']' + bcs .98 + + +* TODO : [][][] + +.8 lda #ExpState.AonStack + sta ExpState + + clc + rts + +.98 lda #E.ESYN + sec + rts + +.99 lda #E.TMISMATCH + sec +.9 rts +*-------------------------------------- +CC.EXP.array.getIdx ldy #SYM.T.SINT lda #0 jsr CC.EXP.Eval - bcs .99 int16 on stack + bcs .9 jsr CC.GetCharNB - bcs .9 + bcs .98 cmp #']' - bne .9 - - jsr CC.GetNextCharNB skip ']' - bcs .9 - - jsr CC.SYM.GetSymSizeOfInAXC - - pha - txa - jsr CODE.PUSHI - pla - jsr CODE.PUSHI sizeof on stack - - ldx #FPU.iMUL - jsr CODE.FPUCALL sizeof*int16 - - ldx #FPU.iAdd - jsr CODE.FPUCALL add to base address - - lda (ZPLookupSymPtr) SYM.T - pha + bne .98 ldy #SYM.Q lda (ZPLookupSymPtr),y sec sbc #SYM.Q.ARRAY - ply - - jsr CC.SYM.GetYASizeOfInAXC - jsr CODE.PushFromPtr A = byte count - + sta (ZPLookupSymPtr),y + clc rts -.9 lda #E.ESYN +.98 lda #E.ESYN sec -.99 rts -*-------------------------------------- -CC.EXP.PushAddr ldy #SYM.Addr+1 - lda (ZPLookupSymPtr),y - bne .7 -* LOCAL - jsr CODE.PUSHpBASEp1 - - ldy #SYM.Addr - lda (ZPLookupSymPtr),y - eor #$FF - inc - jsr CODE.LDAI - jsr CODE.PUSHpBASEpA - - clc - rts -* DATASEG -.7 jsr CODE.PUSHI - - ldy #SYM.Addr - lda (ZPLookupSymPtr),y - jsr CODE.PUSHI - - clc - rts -*-------------------------------------- -CC.EXP.PushDeref - ldy #SYM.Addr+1 - lda (ZPLookupSymPtr),y - bne .7 -* LOCAL - jsr CODE.SETpBASEp1 - - ldy #SYM.Addr - lda (ZPLookupSymPtr),y - eor #$FF - inc - jsr CODE.LDAI - jsr CODE.SETpBASEpA - - jsr CODE.Deref - - clc - rts -* DATASEG -.7 jsr CODE.LDAI - - lda #$85 STA zp - jsr CODE.EmitByte - lda #ZS.RT.Ptr1+1 - jsr CODE.EmitByte - - ldy #SYM.Addr - lda (ZPLookupSymPtr),y - jsr CODE.LDAI - - lda #$85 STA zp - jsr CODE.EmitByte - lda #ZS.RT.Ptr1+1 - jsr CODE.EmitByte - - jsr CODE.Deref - - clc .9 rts *-------------------------------------- -CC.EXP.GetRef ldy #SYM.Addr+1 - lda (ZPLookupSymPtr),y - jsr CODE.PUSHI +CC.EXP.Struct +*-------------------------------------- +CC.EXP.pStruct lda #E.ESYN + sec + rts +*-------------------------------------- +* PREOPS +*-------------------------------------- +CC.EXP.PREOPS bmi .8 - ldy #SYM.Addr - lda (ZPLookupSymPtr),y - jsr CODE.PUSHI + jmp (J.CC.PREOPS,x) - lda (ZPLookupSymPtr) SYM.T - - sta ZPPtr2 T - - ldy #SYM.Q +.8 clc + rts +*-------------------------------------- +CC.EXP.Ref ldy #SYM.Q lda (ZPLookupSymPtr),y clc adc #SYM.Q.POINTER bcs .9 more than *** - sta ZPPtr2+1 Q + sta (ZPLookupSymPtr),y + + bit ExpState + bvs .8 + + jsr CC.EXP.PushAddr + bcs .99 + +.8 lda #ExpState.VonStack + sta ExpState + +* clc Addr on stack + rts + +.9 lda #E.TMISMATCH +* sec +.99 rts +*-------------------------------------- +CC.EXP.Deref ldy #SYM.Q + lda (ZPLookupSymPtr),y + bit #SYM.Q.PPPOINTER + beq .9 + + sec + sbc #SYM.Q.POINTER + sta (ZPLookupSymPtr),y + + jsr CC.EXP.GetAddr2 + bcs .99 + + >LDYA L.PCC.Deref2 + jsr CODE.EmitPCC + bcs .99 + + lda #ExpState.AinPTR + sta ExpState + * clc rts .9 lda #E.TMISMATCH sec - rts +.99 rts *-------------------------------------- -CC.EXP.GetDeref +CC.EXP.Abs + + clc + +.99 rts +*-------------------------------------- +CC.EXP.negate + + clc + +.99 rts +*-------------------------------------- +CC.EXP.lnot + + clc + +.99 rts +*-------------------------------------- +CC.EXP.bnot + + clc + +.99 rts +*-------------------------------------- +CC.EXP.preinc + + clc + +.99 rts +*-------------------------------------- +CC.EXP.predec + + clc + +.99 rts +*-------------------------------------- +CC.EXP.PushAddr ldy #SYM.SC + lda (ZPLookupSymPtr),y + beq .1 SYM.SC.STATIC +* LOCAL + + >LDYA L.PCC.PushLAddrH + jsr CODE.EmitPCC + bcs .9 + + ldy #SYM.Addr + lda (ZPLookupSymPtr),y + eor #$FF + inc + jsr CODE.LDAI + bcs .9 + + >LDYA L.PCC.PushLAddrL + jmp CODE.EmitPCC + +* GLOBAL + +.1 ldy #SYM.Addr+1 + lda (ZPLookupSymPtr),y + tax + + dey + lda (ZPLookupSymPtr),y + + jsr CODE.LDAXI + bcs .9 + + ldy #SYM.Q + lda (ZPLookupSymPtr),y + and #SYM.Q.CONST + beq .2 + + >LDYA L.PCC.PushIAddr + jmp CODE.EmitPCC + +.2 >LDYA L.PCC.PushUAddr + jmp CODE.EmitPCC + +.9 rts +*-------------------------------------- +CC.EXP.GetAddr1 ldy #SYM.SC + lda (ZPLookupSymPtr),y + beq .1 SYM.SC.STATIC +* LOCAL + ldy #SYM.Addr + lda (ZPLookupSymPtr),y + eor #$FF + inc + jsr CODE.LDAI + bcs .9 + + >LDYA L.PCC.GetLAddr1 + jmp CODE.EmitPCC +* GLOBAL + +.1 ldy #SYM.Addr+1 + lda (ZPLookupSymPtr),y + tax + + dey + lda (ZPLookupSymPtr),y + + jsr CODE.LDAXI + bcs .9 + + ldy #SYM.Q + lda (ZPLookupSymPtr),y + and #SYM.Q.CONST + beq .2 + + >LDYA L.PCC.GetIAddr1 + jmp CODE.EmitPCC + +.2 >LDYA L.PCC.GetUAddr1 + jmp CODE.EmitPCC + +.9 rts +*-------------------------------------- +CC.EXP.GetAddr2 ldy #SYM.SC + lda (ZPLookupSymPtr),y + beq .1 SYM.SC.STATIC +* LOCAL + ldy #SYM.Addr + lda (ZPLookupSymPtr),y + eor #$FF + inc + jsr CODE.LDAI + bcs .9 + + >LDYA L.PCC.GetLAddr2 + jmp CODE.EmitPCC +* GLOBAL + +.1 ldy #SYM.Addr+1 + lda (ZPLookupSymPtr),y + tax + + dey + lda (ZPLookupSymPtr),y + + jsr CODE.LDAXI + bcs .9 + + ldy #SYM.Q + lda (ZPLookupSymPtr),y + and #SYM.Q.CONST + beq .2 + + >LDYA L.PCC.GetIAddr2 + jmp CODE.EmitPCC + +.2 >LDYA L.PCC.GetUAddr2 + jmp CODE.EmitPCC + +.9 rts +*-------------------------------------- +CC.EXP.PushValue + jsr CC.EXP.GetSymSizeOfInAXC + tay + dey + jsr CODE.LDYI + bcs .99 + + >LDYA L.PCC.PushValue + jmp CODE.EmitPCC + +.99 rts +*-------------------------------------- +* out : A,X,C = size +*-------------------------------------- +CC.EXP.GetSymSizeOfInAXC + ldy #SYM.Q + lda (ZPLookupSymPtr),y + pha + lda (ZPLookupSymPtr) SYM.T + tay + pla + +CC.EXP.GetYASizeOfInAXC + + bit #SYM.Q.PPPOINTER+SYM.Q.AAARRAY + bne .1 + + lda CC.TYPESIZE-1,y + ldx #0 clc rts -*-------------------------------------- -CC.EXP.IntConst >PUSHW ZPLineBufPtr - >PUSHWI ZPLineBufPtr - >PUSHBI 10 - >SYSCALL StrToUL - >PULLA - tay - - >PULLA - - inc pStack - inc pStack +.1 lda #2 pointer + ldx #0 + sec +1 for hMem Storage rts *-------------------------------------- MAN diff --git a/BIN/CC.S.F.txt b/BIN/CC.S.F.txt index ac1afcd6..f3519348 100644 --- a/BIN/CC.S.F.txt +++ b/BIN/CC.S.F.txt @@ -7,7 +7,7 @@ CC.F.Decl stz LocalPtr bcs .99 ldx #$80 CPStmt.fDef state - jsr CC.STMT.CPStmt + jsr CC.STMT.CPStmt.NEW bcs .99 jsr CC.SYM.NewScope @@ -24,7 +24,7 @@ CC.F.Decl stz LocalPtr >STYA ZPPtr2 Save T/Q - jsr CC.F.AddTQ + jsr CC.SYM.AddWord jsr CC.GetCharNB bcs .9 @@ -53,9 +53,9 @@ CC.F.Decl stz LocalPtr *-------------------------------------- .6 ldy #0 lda #0 - jsr CC.F.AddTQ + jsr CC.SYM.AddWord definition End - jsr CC.GetNextCharNB Skip ) + jsr CC.GetNextCharNBNL Skip ) bcs .9 cmp #';' @@ -65,8 +65,8 @@ CC.F.Decl stz LocalPtr lda CStackPtr clc - adc #6 - sta CStackPtr discard this CPStmt + adc #8 + sta CStackPtr discard this CPStmt + T/Q stz LocalPtr reset for DEBUG Message @@ -76,15 +76,25 @@ CC.F.Decl stz LocalPtr .7 cmp #'{' bne .9 - >LDYA ZPCCCode f() Code starts HERE + bit bInitCode + bmi .8 + + dec bInitCode + + lda #$60 RTS + jsr CODE.EmitByte Close INIT code + bcs .99 + + +.8 >LDYA ZPCCCode f() Code starts HERE jsr CC.SYM.SetAddrYA lda LocalPtr jsr CODE.LDAI A = f() ARGS size - jsr CODE.Enter + bcs .99 - clc Store f() Declaration / Start Definition - rts + >LDYA L.PCC.ENTER + jmp CODE.EmitPCC Store f() Declaration / Start Definition *-------------------------------------- CC.F.DeclGetTQ lda (ZPLineBufPtr) cmp #'.' @@ -130,7 +140,7 @@ CC.F.DeclGetTQ lda (ZPLineBufPtr) *-------------------------------------- CC.F.NewArg >LDYA.G CC.SymID >STYA.G CC.SymIDSave - + >LEA.G CC.ArgBuf >STYA ZPSymBufPtr @@ -145,49 +155,33 @@ CC.F.NewArg >LDYA.G CC.SymID >LDA.G CC.hSymBuf >SYSCALL GetMemPtr >STYA ZPSymBufPtr - + >LDYA.G CC.SymIDSave >STYA.G CC.SymID - + .9 rts *-------------------------------------- -CC.F.Def.END jsr CODE.Leave +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 + clv pop context clc - rts -*-------------------------------------- -CC.F.AddTQ pha - phy - - ldy #SYM.DefSize - lda (ZPSymBufPtr),y - pha - - inc - inc - sta (ZPSymBufPtr),y - - ply - - pla - sta (ZPSymBufPtr),y - iny - pla - sta (ZPSymBufPtr),y - - rts +.9 rts *-------------------------------------- * in : ZPSymPtr * Y,A = Expected T/Q *-------------------------------------- -CC.F.CallNoRetV clc +CC.F.CallNoRetV ldy #0 no expected T/Q + tya + clc .HS B0 BCS CC.F.CallRetV sec @@ -204,44 +198,51 @@ CC.F.CallRetV sec >STYA ZPPtr2 ror ZPPtr1+1 bRetV - bpl .20 no return value on stack - - ldy #SYM.Addr+1 - lda (ZPLookupSymPtr),y - beq .20 SYS/LIB/FPU call, no ret value space - - jsr CC.SYM.GetSymSizeOfInAXC - jsr CODE.nAddLocal - -.20 stz ZPPtr1 Reset VARIADIC byte count +* bpl .20 no return value on stack - jsr CC.GetNextCharNB skip '(' +* ldy #SYM.Addr+1 +* lda (ZPLookupSymPtr),y +* beq .20 SYS/LIB/FPU call, no ret value space + + jsr CC.EXP.GetSymSizeOfInAXC + jsr CODE.nAddLocal + +.20 jsr CC.GetNextCharNB skip '(' bcs .10 - jsr CC.SYM.GetTypeInYA Y,A = f() Return value T/Q + ldy #SYM.Q +* >DEBUG + lda ZPPtr2 expected T + bne .1 - ldx ZPPtr2 expected T - beq .1 no check required - - cpy ZPPtr2 - bne .24 - - tax save full Q + lda (ZPLookupSymPtr) no check required + sta ZPPtr2 + lda (ZPLookupSymPtr),y and #$fC ignore SYM.Q.FUNC,SYM.Q.FASTCALL - cmp ZPPtr2+1 -.24 bne .91 + bra .2 - txa +.1 cmp #SYM.T.VOID + beq .11 -.1 >STYA ZPPtr2 save full T/Q for later + cmp (ZPLookupSymPtr) + bne .91 + +.11 lda (ZPLookupSymPtr),y + and #$fC ignore SYM.Q.FUNC,SYM.Q.FASTCALL + cmp ZPPtr2+1 expected Q + bne .91 +*-------------------------------------- +.2 sta ZPPtr2+1 + + stz ZPPtr1 Reset VARIADIC byte count lda #SYM.Def >STA.G CC.LookupSymPtr jsr CC.F.GetTQ get First Arg T/Q beq .7 end of list, go check ending ')' -*-------------------------------------- + .3 cpy #SYM.T.VARIADIC bne .4 @@ -253,7 +254,7 @@ CC.F.CallRetV sec jsr CC.EXP.Eval bcs .93 - jsr CC.SYM.GetYASizeOfInAXC + jsr CC.EXP.GetYASizeOfInAXC tax save Sizeof in X jsr CC.F.GetTQ @@ -295,7 +296,6 @@ CC.F.CallRetV sec bne .90 missing arg lda ZPPtr1 push VARIADIC byte count - jsr CODE.PUSHI .7 jsr CC.GetCharNB @@ -330,8 +330,9 @@ CC.F.CallRetV sec *-------------------------------------- * X = last var size *-------------------------------------- -CC.F.Call2 lda ZPPtr2+1 - bit #SYM.Q.FASTCALL +CC.F.Call2 ldy #SYM.Q + lda (ZPLookupSymPtr),y + and #SYM.Q.FASTCALL beq .1 ldy #SYM.Def Get first (only) argument @@ -371,11 +372,12 @@ CC.F.Call2 lda ZPPtr2+1 * Return Value : call & put result on stack if in Y,A -.5 ldy #SYM.Addr+1 +.5 + ldy #SYM.Addr+1 lda (ZPLookupSymPtr),y - cmp #2 + cmp #3 bcs .8 not a SYS/FPU call...Ret value on stack - + >LDYA ZPPtr2 function T/Q jsr CC.TYPE.SizeOf cpx #3 @@ -384,13 +386,13 @@ CC.F.Call2 lda ZPPtr2+1 dex bne .60 - jsr CODE.PUSHA push ONE byte one stack + jsr CODE.PUSHA push ONE byte on stack bra .8 -.60 jsr CODE.PUSHYA push TWO bytes one stack +.60 jsr CODE.PUSHYA push TWO bytes on stack .8 >LDYA ZPPtr2 T/Q - and #$FC ignore SYM.Q.FUNC+SYM.Q.FASTCALL + clc rts *-------------------------------------- @@ -405,50 +407,47 @@ CC.F.Call3 ldy #SYM.Addr+1 lda (ZPLookupSymPtr),y tax - ply + ply Y=HI,X=LO cpy #1 bne .1 - jsr CODE.SYSCALL - clc - rts + jmp CODE.SYSCALL .1 cpy #2 bne .2 - jsr CODE.FPUCALL - clc - rts + jmp CODE.FPUCALL -.2 lda #$EA +.2 lda #$EA NOP jsr CODE.EmitByte - lda #$EA + bcs .99 + + lda #$EA NOP jsr CODE.EmitByte - + bcs .99 + lda #$20 JSR abs - jsr CODE.TOABSYX Y=HI,X=LO - clc - rts + jmp CODE.TOABSYX .9 bit bPass2 - bmi .99 - + bmi .91 + lda #5 leave room for LDX #imm, JSR abs clc adc ZPCCCode sta ZPCCCode - + bcc .90 - + inc ZPCCCode+1 - + .90 clc rts - -.99 lda #E.FUNDEF + +.91 lda #E.FUNDEF sec - rts +.99 rts *-------------------------------------- CC.F.GetTQ >LDA.G CC.LookupSymPtr tay diff --git a/BIN/CC.S.FIO.txt b/BIN/CC.S.FIO.txt new file mode 100644 index 00000000..bdf9fcfb --- /dev/null +++ b/BIN/CC.S.FIO.txt @@ -0,0 +1,131 @@ +NEW + AUTO 3,1 +*-------------------------------------- +CC.FIO.FOpen1st >LDA.G CC.InFileArg + >SYSCALL ArgV + +CC.FIO.FOpen phy + pha + + >PUSHW L.MSG.READING + pla + pha + >PUSHYA + >PUSHBI 2 + >SYSCALL PrintF + + pla + ply + >PUSHYA + >PUSHBI O.RDONLY + >PUSHBI S.FI.T.TXT + >PUSHWZ Aux type + >SYSCALL FOpen + bcs .9 + + tax + + >LDA.G hFilePtr + inc + sta (pData),y + tay + txa + sta (pData),y + + >LDA.G LineCntPtr + inc + inc + sta (pData),y + tay + lda #0 + sta (pData),y + iny + sta (pData),y + +.9 rts +*-------------------------------------- +CC.FIO.FGetS >LDYA.G LineBufPtr + >STYA ZPLineBufPtr + + >LDA.G LineCntPtr + tay + lda (pData),y + inc + sta (pData),y + bne .1 + + iny + lda (pData),y + inc + sta (pData),y + +.1 >LDA.G hFilePtr + tay + lda (pData),y + >PUSHA + + >PUSHW ZPLineBufPtr + >PUSHWI 255 + >SYSCALL FGetS + bcs .9 + + >LDA.G bTrace + bpl .8 + + jsr PrintTraceMsg + +.8 + +.9 rts +*-------------------------------------- +CC.FIO.FClose >LDA.G hFilePtr + cmp #hFilePtr + beq .8 + + tay + lda (pData),y + + >SYSCALL FClose + + >LDA.G hFilePtr + dec + sta (pData),y + cmp #hFilePtr + beq .8 + + >LDA.G LineCntPtr + dec + dec + sta (pData),y NZ + +.8 rts +*-------------------------------------- +CC.FIO.FCreate >LDA.G CC.OutFileArg + >SYSCALL ArgV + >STYA ZPPtr1 + + >PUSHW L.MSG.GENERATING + >PUSHW ZPPtr1 + >PUSHBI 2 + >SYSCALL PrintF + + >PUSHW ZPPtr1 + >PUSHBI O.WRONLY+O.CREATE + >PUSHBI S.FI.T.BIN + >PUSHWI $2000 Aux type + >SYSCALL FOpen + bcs .9 + + >STA.G CC.hOutFile + + >PUSHA A = CC.hOutFile + >PUSHW L.PCC.FH + >PUSHWI PCC.FH.L + >SYSCALL FWrite + +.9 rts +*-------------------------------------- +MAN +SAVE usr/src/bin/cc.s.fio +LOAD usr/src/bin/cc.s +ASM diff --git a/BIN/CC.S.KW.txt b/BIN/CC.S.KW.txt index 562647cb..496da9d8 100644 --- a/BIN/CC.S.KW.txt +++ b/BIN/CC.S.KW.txt @@ -3,14 +3,107 @@ NEW *-------------------------------------- * Built in Keywords *-------------------------------------- -CC.KW.JMP txa - >STA.G CC.CmdSave - jmp (J.CC.KW,x) +CC.KW.IF jsr CC.KW.BEGIN + bcs .99 + + jsr CC.GetCharNB + bcs .9 + + cmp #'(' + bne .9 + + jsr CC.GetNextCharNB + bcs .9 + + jsr CC.EXP.Eval00 Any var type + bcs .99 + + jsr CC.KW.TestZero Y,A=T/Q + + lda #'E' + jsr CC.SYM.LookupA + bcs .99 + + lda #$4C emit JMP else + jsr CODE.TOABSYX + bcs .99 + + jsr CC.GetCharNB + bcs .99 + + cmp #')' + bne .9 + + jmp CC.KW.STMT + +.9 lda #E.CSYN + sec +.99 rts *-------------------------------------- -CC.KW.WHILE jsr CC.PushCS push cont: for WHILE loop - bcs CC.KW.IF.RTS +CC.KW.IF.END jsr CC.GetCharNBNL + bcs .1 + + cmp #';' + beq .1 + + >LDYA L.CC.KW2.IF Check allowed KW for IF.... + jsr CC.LookupID + bcc .2 + +.1 lda #'E' define ELSE Label + jsr CC.KW.NewLabel + bcs .99 + + clv pop context + rts *-------------------------------------- -CC.KW.IF jsr CC.GetCharNB +.2 lda #'X' + jsr CC.SYM.LookupA + bcs .99 + + lda #$4C emit JMP exit + jsr CODE.TOABSYX + bcs .99 + + lda #'E' define ELSE Label + jsr CC.KW.NewLabel + bcs .99 + + inc CStackPtr pop ; or } + + lda #4 replace IF by ELSE keyword + ldy CStackPtr + sta (ZPCCStack),y + + jsr CC.KW.STMT + bcs .99 + + bit .99 set V : DONT pop context + rts + +.9 lda #E.CSYN + sec +.99 rts +*-------------------------------------- +CC.KW.ELSE lda #E.CSYN illegal + sec + rts +*-------------------------------------- +CC.KW.ELSE.END lda #'X' define EXIT Label + jsr CC.KW.NewLabel + bcs .99 + + clv pop context +.99 rts +*-------------------------------------- +CC.KW.WHILE jsr CC.KW.BEGIN + bcs .99 + + lda #'C' define CONT Label + jsr CC.SYM.NewA + bcs .99 + + jsr CC.GetCharNB bcs .9 cmp #'(' @@ -24,10 +117,13 @@ CC.KW.IF jsr CC.GetCharNB jsr CC.KW.TestZero - jsr CC.PushCS push place to set JMP false + lda #'B' + jsr CC.SYM.LookupA bcs .99 - jsr CC.KW.ZPCCCodeAdd2 + lda #$4C emit JMP break: + jsr CODE.TOABSYX + bcs .99 jsr CC.GetCharNB bcs .99 @@ -35,89 +131,44 @@ CC.KW.IF jsr CC.GetCharNB cmp #')' bne .9 - jmp CC.KW.BEGIN + jmp CC.KW.STMT .9 lda #E.CSYN sec -.99 -CC.KW.IF.RTS rts +.99 rts *-------------------------------------- -CC.KW.IF.END jsr CC.PopYA +CC.KW.WHILE.END lda #'C' + jsr CC.KW.GetLabel + bcs .99 + + lda #$4C + jsr CODE.TOABSYX emit JMP cont: + bcs .99 + + lda #'B' define BREAK Label + jsr CC.KW.NewLabel + bcs .99 + + clv pop context + +.99 rts +*-------------------------------------- +CC.KW.DO jsr CC.KW.BEGIN + bcs .99 + + lda #'C' define CONT Label + jsr CC.SYM.NewA + bcs .99 + + jmp CC.KW.STMT + +.99 rts +*-------------------------------------- +CC.KW.DO.END >LDYA L.CC.KW2.DO Check allowed KW for DO.... + jsr CC.LookupID bcs .9 - >STYA ZPPtr1 set JMP false - - lda ZPCCCode -* sta (ZPPtr1) - - ldy #1 - lda ZPCCCode+1 -* sta (ZPPtr1),y - -* clc - -.9 rts -*-------------------------------------- -CC.KW.ELSE - - clc - rts -*-------------------------------------- -CC.KW.ELSE.END - - clc - rts -*-------------------------------------- -CC.KW.WHILE.END jsr CC.PopYA Get JMP false location - bcs .9 - - >STYA ZPPtr1 - - jsr CC.PopYA Get cont: address - bcs .9 - - phy - tay HI byte - plx - - lda #$4C JMP cont: - jsr CODE.TOABSYX - - lda ZPCCCode -* sta (ZPPtr1) - - ldy #1 - lda ZPCCCode+1 -* sta (ZPPtr1),y - - clc - -.9 rts -*-------------------------------------- -CC.KW.DO - lda #E.CSYN - sec - rts -*-------------------------------------- -CC.KW.DO.END - clc - rts -*-------------------------------------- -* for (e1;e2;e3) s; -* -* { <- new scope : allows for(int i=1; ....) -* e1; -* loop: -* while (e2) -* { -* s; -* cont: -* e3; -* } -* break: -* } -*-------------------------------------- -CC.KW.FOR jsr CC.GetCharNB + jsr CC.GetCharNB bcs .9 cmp #'(' @@ -126,12 +177,83 @@ CC.KW.FOR jsr CC.GetCharNB jsr CC.GetNextCharNB bcs .9 - jsr CC.EXP.Eval00 get e1 - bcs .9 + jsr CC.EXP.Eval00 Any var type + bcs .99 - jsr CC.KW.StackDiscard + jsr CC.KW.TestnZero + + lda #'C' + jsr CC.KW.GetLabel + bcs .99 + + lda #$4C emit JMP cont + jsr CODE.TOABSYX + bcs .99 + + lda #'B' define BREAK Label + jsr CC.KW.NewLabel + bcs .99 jsr CC.GetCharNB + bcs .99 + + cmp #')' + bne .9 + + jsr CC.GetNextCharNB + bcs .9 + + clv pop context + clc + rts + +.9 lda #E.CSYN + sec +.99 rts +*-------------------------------------- +* for (s1;e2;s3) s; +* +* { <- new scope : allows for(int i=1; ....) +* s1; +* loop: +* while (e2) jmp break: +* { +* s; jsr s: +* cont: +* s3; jmp loop: +* } +* s: +* ; +* break: +* } +*-------------------------------------- +CC.KW.FOR jsr CC.GetCharNB + bcs .29 + + cmp #'(' + bne .29 + + jsr CC.KW.BEGIN + bcs .29 + + jsr CC.GetNextCharNB skip '(' + bcs .29 + + >LDYA L.CC.TYPEQUAL + jsr CC.LookupID + bcs .1 + + jsr CC.DECL + bcc .2 + +.19 rts + +.1 jsr CC.STMT get s1 + bcs .19 + +* jsr CC.KW.StackDiscard + +.2 jsr CC.GetCharNB bcs .9 cmp #';' @@ -140,26 +262,29 @@ CC.KW.FOR jsr CC.GetCharNB jsr CC.GetNextCharNB skip ';' bcs .9 *-------------------------------------- - >LDYA ZPCCCode - >STYA ZPPtr2 save LOOP address + lda #'L' LOOP Label + jsr CC.SYM.NewA + bcs .99 jsr CC.EXP.Eval00 get e2 .29 bcs .99 jsr CC.KW.TestZero - - jsr CC.PushCS push place to set JMP break: bcs .99 - jsr CC.KW.ZPCCCodeAdd2 + lda #'B' + jsr CC.SYM.LookupA + bcs .99 - lda #$20 emit JSR s; - jsr CODE.EmitByte + lda #$4C emit JMP break: + jsr CODE.TOABSYX - >LDYA ZPCCCode - >STYA ZPPtr3 save place to set JSR s + lda #'S' + jsr CC.SYM.LookupA + bcs .99 - jsr CC.KW.ZPCCCodeAdd2 space for 2-bytes address + lda #$20 emit JSR s: + jsr CODE.TOABSYX jsr CC.GetCharNB bcs .9 @@ -170,12 +295,14 @@ CC.KW.FOR jsr CC.GetCharNB jsr CC.GetNextCharNB skip ';' bcs .9 *-------------------------------------- - jsr CC.PushCS push cont: address - - jsr CC.EXP.Eval00 get e3 + lda #'C' CONT Label + jsr CC.SYM.NewA bcs .99 - jsr CC.KW.StackDiscard + jsr CC.STMT get s3 + bcs .99 + +* jsr CC.KW.StackDiscard jsr CC.GetCharNB bcs .9 @@ -183,19 +310,18 @@ CC.KW.FOR jsr CC.GetCharNB cmp #')' bne .9 + lda #'L' + jsr CC.SYM.LookupA + bcs .99 + lda #$4C - ldx ZPPtr2 - ldy ZPPtr2+1 - jsr CODE.TOABSYX JMP e2 + jsr CODE.TOABSYX emit JMP loop - lda ZPCCCode setup JSR s; -* sta (ZPPtr3) + lda #'S' S Label + jsr CC.SYM.NewA + bcs .99 - lda ZPCCCode+1 - ldy #1 -* sta (ZPPtr3),y - - jmp CC.KW.BEGIN + jmp CC.KW.STMT .9 lda #E.CSYN sec @@ -203,43 +329,45 @@ CC.KW.FOR jsr CC.GetCharNB *-------------------------------------- CC.KW.FOR.END lda #$60 - jsr CODE.EmitByte set RTS for JSR s; + jsr CODE.EmitByte set RTS for JSR code; + bcs .99 - jsr CC.Pop - bcs .9 + lda #'B' define BREAK Label + jsr CC.KW.NewLabel + bcs .99 - jsr CC.Pop discard cont: location - bcs .9 + clv pop context - jsr CC.PopYA - bcs .9 - - >STYA ZPPtr1 get JMP break: location - - lda ZPCCCode -* sta (ZPPtr1) - - ldy #1 - lda ZPCCCode+1 -* sta (ZPPtr1),y - - clc - -.9 rts +.99 rts *-------------------------------------- CC.KW.SWITCH CC.KW.CASE +CC.KW.DEFAULT lda #E.CSYN sec rts *-------------------------------------- -CC.KW.BREAK - lda #E.CSYN +CC.KW.BREAK lda #'B' + + jsr CC.KW.LookupLabel + bcs .9 + + lda #$4C emit JMP break + jmp CODE.TOABSYX + +.9 lda #E.CSYN sec rts *-------------------------------------- -CC.KW.CONTINUE - lda #E.CSYN +CC.KW.CONTINUE lda #'C' + + jsr CC.KW.LookupLabel + bcs .9 + + lda #$4C emit JMP cont + jmp CODE.TOABSYX + +.9 lda #E.CSYN sec rts *-------------------------------------- @@ -254,7 +382,7 @@ CC.KW.RETURN ldy CStackPtr tya clc - adc #3 skip CPStmt (4 bytes) + adc #5 skip CPStmt (6 bytes) tay bcc .1 @@ -265,6 +393,9 @@ CC.KW.RETURN ldy CStackPtr .7 iny skip bState iny skip Locals + iny + iny skip CPSID + iny get SYM.T lda (ZPCCStack),y @@ -281,11 +412,10 @@ CC.KW.RETURN ldy CStackPtr jsr CC.SYM.GetYASizeOfInAXC Y,A=T/Q tax X = sizeof jsr CODE.SetRetValue + bcs .99 - jsr CODE.Leave - - clc - rts + >LDYA L.PCC.LEAVE + jmp CODE.EmitPCC *-------------------------------------- CC.KW.SIZEOF lda #E.CSYN @@ -321,66 +451,178 @@ CC.KW.STRUCT >ENTER 4 cmp #'}' bne .1 - jsr CC.GetNextCharNB skip } + jsr CC.GetNextCharNB skip '}' clc .99 >LEAVE rts *-------------------------------------- -CC.KW.BEGIN jsr CC.GetNextCharNB - bcs .9 +CC.KW.BEGIN jsr CC.SYM.NewCPSID + bcs .99 - cmp #'{' - bne .7 - - >LDA.G CC.CmdSave - tax - jmp CC.STMT.CPStmt - -.7 >LDA.G CC.CmdSave + >LDA.G CC.CPSPFX+3 jsr CC.Push bcs .99 - lda #';' + >LDA.G CC.CPSPFX+2 + jsr CC.Push + bcs .99 + + lda LocalPtr Locals + jsr CC.Push + bcs .99 + + lda #0 bState + jsr CC.Push + bcs .99 + + >LDA.G CC.CmdSave + jmp CC.Push + +.99 rts +*-------------------------------------- +CC.KW.STMT jsr CC.GetNextCharNBNL + bcs .9 + + cmp #'{' + bne .1 + + jsr CC.GetNextCharNB skip '{' + bcs .99 + + lda #'}' + jmp CC.Push + +.1 lda #';' jmp CC.Push .9 lda #E.CSYN sec .99 rts *-------------------------------------- -* Input : Value on Stack, Y,A = Type/Qual -* Output : CC = true, CS = false -*-------------------------------------- -CC.KW.TestZero jsr CC.SYM.GetYASizeOfInAXC - tax +CC.KW.NewLabel pha -.6 lda #$A2 LDX #imm - jsr CODE.EmitByte - txa - jsr CODE.EmitByte + lda CStackPtr + clc + adc #4 + tay - ldx #PCC.Test0X.L - ldy #0 - -.7 lda PCC.Test0X,y - jsr CODE.EmitByte + lda (ZPCCStack),y + pha iny - dex - bne .7 + lda (ZPCCStack),y + ply + >STYA.G CC.CPSPFX+2 - clc - rts + pla + jmp CC.SYM.NewA *-------------------------------------- -CC.KW.ZPCCCodeAdd2 - lda ZPCCCode +CC.KW.GetLabel pha + + lda CStackPtr clc - adc #2 - sta ZPCCCode - bcc .8 + adc #4 + tay - inc ZPCCCode+1 + lda (ZPCCStack),y + pha + iny + lda (ZPCCStack),y + ply + >STYA.G CC.CPSPFX+2 + pla + jmp CC.SYM.LookupA +*-------------------------------------- +CC.KW.LookupLabel + pha + + ldy CStackPtr + sty ArgIndex + +.1 ldy ArgIndex + beq .9 + + iny skip ; or } + + lda (ZPCCStack),y + bmi .9 f() + + iny + iny + iny + + lda (ZPCCStack),y + pha + iny + lda (ZPCCStack),y + iny + + sty ArgIndex + + ply + >STYA.G CC.CPSPFX+2 + + pla + pha + jsr CC.SYM.LookupA + bcs .1 + + pla .8 rts + +.9 pla + lda #E.CSYN + sec +.99 rts +*-------------------------------------- +* Input : Value on Stack, Y,A = Type/Qual +*-------------------------------------- +CC.KW.TestZero jsr CC.EXP.GetYASizeOfInAXC + tax + cpx #1 + bne .1 + + >LDYA L.PCC.TestZero1 + jmp CODE.EmitPCC + +.1 cpx #2 + bne .2 + + >LDYA L.PCC.TestZero2 + jmp CODE.EmitPCC + +.2 jsr CODE.LDXI + bcs .9 + + >LDYA L.PCC.TestZeroX + jmp CODE.EmitPCC + +.9 rts +*-------------------------------------- +* Input : Value on Stack, Y,A = Type/Qual +*-------------------------------------- +CC.KW.TestnZero jsr CC.EXP.GetYASizeOfInAXC + tax + cpx #1 + bne .1 + + >LDYA L.PCC.TestnZero1 + jmp CODE.EmitPCC + +.1 cpx #2 + bne .2 + + >LDYA L.PCC.TestnZero2 + jmp CODE.EmitPCC + +.2 jsr CODE.LDXI + bcs .9 + + >LDYA L.PCC.TestnZeroX + jmp CODE.EmitPCC + +.9 rts *-------------------------------------- * Input : Value on Stack, Y,A = Type/Qual *-------------------------------------- diff --git a/BIN/CC.S.LINK.txt b/BIN/CC.S.LINK.txt index 171f350b..a289f01c 100644 --- a/BIN/CC.S.LINK.txt +++ b/BIN/CC.S.LINK.txt @@ -156,7 +156,43 @@ CC.Link.Dump >PUSHW L.MSG.LINKING2 >SYSCALL PrintF rts *-------------------------------------- +CC.Link.CheckMain + >PUSHB.G CC.hScopes + >PUSHW L.CC.MAIN + >SYSCALL SListLookup + bcs .9 + >STYA ZPPtr1 SymID + + >PUSHB.G CC.hScopes + >PUSHW ZPPtr1 SymID + >PUSHW ZPSymBufPtr + >PUSHWI 65535 all + >PUSHWZ From Start + >SYSCALL SListGetData + bcs .99 + + ldy #SYM.Addr + lda (ZPSymBufPtr),y + iny + ora (ZPSymBufPtr),y + beq .9 + + lda (ZPSymBufPtr),y + sta PCC.FH+PCC.FH.MAIN+1 + dey + lda (ZPSymBufPtr),y + sta PCC.FH+PCC.FH.MAIN + +* clc + + rts + +.9 >LDYA L.MSG.NOMAIN + >SYSCALL puts + lda #E.CSYN + sec +.99 rts *-------------------------------------- MAN SAVE usr/src/bin/cc.s.link diff --git a/BIN/CC.S.PCC.txt b/BIN/CC.S.PCC.txt new file mode 100644 index 00000000..c0b94675 --- /dev/null +++ b/BIN/CC.S.PCC.txt @@ -0,0 +1,595 @@ +NEW + AUTO 3,1 +*-------------------------------------- +* PCC = Pre Compiled Code +*-------------------------------------- +ZS.RT.Ptr1 .EQ ZPBIN +ZS.RT.Ptr2 .EQ ZPBIN+2 +*-------------------------------------- +PCC.FH .PH $2000 +PCC.FH.2000 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 + .DA #256 Stack Size + .DA #4 ZP Size + .DA 0 + +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 + .DA $FFFF + .DA 0 + +PCC.FH.INIT +* TODO : LoadLib code +PCC.FH.QUIT +* TODO : UnloadLib code +PCC.FH.DOEVENT clc + rts + +* int main(int argc, char *argv[]) ; + +PCC.FH.RUN lda #0 + +.1 pha + >SYSCALL ArgV + bcs .2 + + >STYA ZS.RT.Ptr1 + + pla + pha + asl + tay + + lda ZS.RT.Ptr1 + sta (pData),y + + lda ZS.RT.Ptr1+1 + iny + sta (pData),y + + pla + inc + bra .1 + +.2 pla + + jsr PCC.FH.CS Execute INIT code + + >PUSHWZ returned int=0 + + lda #0 + >PUSHA + ldy #S.PS.ARGC + lda (pPS),y + >PUSHA int ARGC + >PUSHW pData *char[] ARGV +* >DEBUG +PCC.FH.MAIN .EQ *-PCC.FH.2000+1 + jsr $FFFF * jsr main + >PULLA + inc pStack pull returned int + sec + rts + +*PCC.FH.SYSCALL jsr A2osX.SYSCALL +* bcc .8 + +* inc pStack +* eor #$ff +* inc +* >PUSHA int -ERROR code... +* ldy #1 +* lda #$FF +* sta (pStack),y FFxx on stack + +*.8 + +PCC.FH.CS .EP +PCC.FH.L .EQ *-PCC.FH +*-------------------------------------- +PCC.DEBUG .DA #PCC.DEBUG.L + >DEBUG +PCC.DEBUG.L .EQ *-PCC.DEBUG +*-------------------------------------- +PCC.SLEEP .DA #PCC.SLEEP.L + >SLEEP +PCC.SLEEP.L .EQ *-PCC.SLEEP +*-------------------------------------- +PCC.ENTER .DA #PCC.ENTER.L + ldx pBase + phx + clc + adc pStack A = Local Size + sta pBase + +PCC.ENTER.L .EQ *-PCC.ENTER +*-------------------------------------- +PCC.LEAVE .DA #PCC.LEAVE.L + ldx pBase + stx pStack + plx + stx pBase + rts + +PCC.LEAVE.L .EQ *-PCC.LEAVE +*-------------------------------------- +PCC.ADDLOCAL .DA #PCC.ADDLOCAL.L + clc + adc pStack + sta pStack + +PCC.ADDLOCAL.L .EQ *-PCC.ADDLOCAL +*-------------------------------------- +PCC.SetRetValue .DA #PCC.SetRetValue.L + + ldy #0 + +.1 >PULLA + sta (pBase),y + iny + dex + bne .1 + +PCC.SetRetValue.L .EQ *-PCC.SetRetValue +*-------------------------------------- +PCC.TestZero1 .DA #PCC.TestZero1.L + >PULLA + tay +.2 bne .2+5 skip JMP abs + +PCC.TestZero1.L .EQ *-PCC.TestZero1 +*-------------------------------------- +PCC.TestZero2 .DA #PCC.TestZero2.L + >PULLA + ora (pStack) + inc pStack + tay +.2 bne .2+5 skip JMP abs + +PCC.TestZero2.L .EQ *-PCC.TestZero2 +*-------------------------------------- +PCC.TestZeroX .DA #PCC.TestZeroX.L + lda #0 + +.1 ora (pStack) + inc pStack + dex + bne .1 + + tay +.2 bne .2+5 skip JMP abs + +PCC.TestZeroX.L .EQ *-PCC.TestZeroX +*-------------------------------------- +PCC.TestnZero1 .DA #PCC.TestnZero1.L + >PULLA + tay +.2 beq .2+5 skip JMP abs + +PCC.TestnZero1.L .EQ *-PCC.TestnZero1 +*-------------------------------------- +PCC.TestnZero2 .DA #PCC.TestnZero2.L + >PULLA + ora (pStack) + inc pStack + tay +.2 beq .2+5 skip JMP abs + +PCC.TestnZero2.L .EQ *-PCC.TestnZero2 +*-------------------------------------- +PCC.TestnZeroX .DA #PCC.TestnZeroX.L + lda #0 + +.1 ora (pStack) + inc pStack + dex + bne .1 + + tay +.2 beq .2+5 skip JMP abs + +PCC.TestnZeroX.L .EQ *-PCC.TestnZeroX +*-------------------------------------- +PCC.PushLAddrH .DA #PCC.PushLAddrH.L + >PUSHB pBase+1 +PCC.PushLAddrH.L .EQ *-PCC.PushLAddrH +*-------------------------------------- +PCC.PushLAddrL .DA #PCC.PushLAddrL.L + clc + adc pBase + >PUSHA +PCC.PushLAddrL.L .EQ *-PCC.PushLAddrL +*-------------------------------------- +PCC.PushIAddr .DA #PCC.PushIAddr.L + clc + adc PCC.FH.2000+PCC.FH.IDATA + dec pStack + >PUSHA + + txa + adc PCC.FH.2000+PCC.FH.IDATA+1 + ldy #1 + sta (pStack),y + +PCC.PushIAddr.L .EQ *-PCC.PushIAddr +*-------------------------------------- +PCC.PushUAddr .DA #PCC.PushUAddr.L + clc + adc pData + dec pStack + >PUSHA + + txa + adc pData+1 + ldy #1 + sta (pStack),y + +PCC.PushUAddr.L .EQ *-PCC.PushUAddr +*-------------------------------------- +PCC.GetLAddr1 .DA #PCC.GetLAddr1.L + clc + adc pBase + sta ZS.RT.Ptr1 + lda pBase+1 + sta ZS.RT.Ptr1+1 + +PCC.GetLAddr1.L .EQ *-PCC.GetLAddr1 +*-------------------------------------- +PCC.GetIAddr1 .DA #PCC.GetIAddr1.L + clc + adc PCC.FH.2000+PCC.FH.IDATA + sta ZS.RT.Ptr1 + txa + adc PCC.FH.2000+PCC.FH.IDATA+1 + sta ZS.RT.Ptr1+1 + +PCC.GetIAddr1.L .EQ *-PCC.GetIAddr1 +*-------------------------------------- +PCC.GetUAddr1 .DA #PCC.GetUAddr1.L + clc + adc pData + sta ZS.RT.Ptr1 + txa + adc pData+1 + sta ZS.RT.Ptr1+1 + +PCC.GetUAddr1.L .EQ *-PCC.GetUAddr1 +*-------------------------------------- +PCC.PopAddr1 .DA #PCC.PopAddr1.L + >PULLA + sta ZS.RT.Ptr1 + >PULLA + sta ZS.RT.Ptr1+1 + +PCC.PopAddr1.L .EQ *-PCC.PopAddr1 +*-------------------------------------- +PCC.SetValue .DA #PCC.SetValue.L +.1 lda (pStack),y + sta (ZS.RT.Ptr1),y + dey + bpl .1 + +PCC.SetValue.L .EQ *-PCC.SetValue +*-------------------------------------- +PCC.GetLAddr2 .DA #PCC.GetLAddr2.L + clc + adc pBase + sta ZS.RT.Ptr2 + lda pBase+1 + sta ZS.RT.Ptr2+1 + +PCC.GetLAddr2.L .EQ *-PCC.GetLAddr2 +*-------------------------------------- +PCC.GetIAddr2 .DA #PCC.GetIAddr2.L + clc + adc PCC.FH.2000+PCC.FH.IDATA + sta ZS.RT.Ptr2 + txa + adc PCC.FH.2000+PCC.FH.IDATA+1 + sta ZS.RT.Ptr2+1 + +PCC.GetIAddr2.L .EQ *-PCC.GetIAddr2 +*-------------------------------------- +PCC.GetUAddr2 .DA #PCC.GetUAddr2.L + clc + adc pData + sta ZS.RT.Ptr2 + txa + adc pData+1 + sta ZS.RT.Ptr2+1 + +PCC.GetUAddr2.L .EQ *-PCC.GetUAddr2 +*-------------------------------------- +PCC.PopAddr2 .DA #PCC.PopAddr2.L + >PULLA + sta ZS.RT.Ptr2 + >PULLA + sta ZS.RT.Ptr2+1 + +PCC.PopAddr2.L .EQ *-PCC.PopAddr2 +*-------------------------------------- +PCC.Deref2 .DA #PCC.Deref2.L + ldy #1 + lda (ZS.RT.Ptr2),y + tay + lda (ZS.RT.Ptr2) + + sta ZS.RT.Ptr2 + sty ZS.RT.Ptr2+1 + +PCC.Deref2.L .EQ *-PCC.Deref2 +*-------------------------------------- +PCC.PushDeref2 .DA #PCC.PushDeref2.L + ldy #1 + >PUSHB (ZS.RT.Ptr2),y + >PUSHB (ZS.RT.Ptr2) + +PCC.PushDeref2.L .EQ *-PCC.PushDeref2 +*-------------------------------------- +PCC.PushValue .DA #PCC.PushValue.L + +.1 lda (ZS.RT.Ptr2),y + >PUSHA + dey + bpl .1 + +PCC.PushValue.L .EQ *-PCC.PushValue +*-------------------------------------- +PCC.Inc1 .DA #PCC.Inc1.L + lda (ZS.RT.Ptr2) + inc + sta (ZS.RT.Ptr2) +PCC.Inc1.L .EQ *-PCC.Inc1 +*-------------------------------------- +PCC.Inc2 .DA #PCC.Inc2.L + lda (ZS.RT.Ptr2) + inc + sta (ZS.RT.Ptr2) + bne .1 + + ldy #1 + lda (ZS.RT.Ptr2),y + inc + sta (ZS.RT.Ptr2),y + +.1 + +PCC.Inc2.L .EQ *-PCC.Inc2 +*-------------------------------------- +PCC.Inc4 .DA #PCC.Inc4.L + lda (ZS.RT.Ptr2) + inc + sta (ZS.RT.Ptr2) + bne .2 + + ldy #1 + +.1 lda (ZS.RT.Ptr2),y + inc + sta (ZS.RT.Ptr2),y + beq .2 + + iny + cpy #4 + bne .1 + +.2 + +PCC.Inc4.L .EQ *-PCC.Inc4 +*-------------------------------------- +PCC.Dec1 .DA #PCC.Dec1.L + lda (ZS.RT.Ptr2) + dec + sta (ZS.RT.Ptr2) +PCC.Dec1.L .EQ *-PCC.Dec1 +*-------------------------------------- +PCC.Dec2 .DA #PCC.Dec2.L + lda (ZS.RT.Ptr2) + php + dec + sta (ZS.RT.Ptr2) + plp + bne .1 + + ldy #1 + lda (ZS.RT.Ptr2),y + dec + sta (ZS.RT.Ptr2),y + +.1 + +PCC.Dec2.L .EQ *-PCC.Dec2 +*-------------------------------------- +PCC.Dec4 .DA #PCC.Dec4.L + lda (ZS.RT.Ptr2) + clc + sbc #0 + sta (ZS.RT.Ptr2) + bcs .2 + + ldy #1 + +.1 lda (ZS.RT.Ptr2),y + sbc #0 + sta (ZS.RT.Ptr2),y + bcs .2 + + iny + cpy #4 + bne .1 + +.2 + +PCC.Dec4.L .EQ *-PCC.Dec4 +*-------------------------------------- +PCC.BOPS.bMUL +*-------------------------------------- +PCC.BOPS.cMUL +*-------------------------------------- +PCC.BOPS.bDIV +*-------------------------------------- +PCC.BOPS.cDIV +*-------------------------------------- +PCC.BOPS.bMOD +*-------------------------------------- +PCC.BOPS.cMOD +*-------------------------------------- +PCC.BOPS.ADD .DA #PCC.BOPS.ADD.L + clc + >PULLA + adc (pStack) + sta (pStack) +PCC.BOPS.ADD.L .EQ *-PCC.BOPS.ADD +*-------------------------------------- +PCC.BOPS.SUB .DA #PCC.BOPS.SUB.L + sec + ldy #1 + lda (pStack),y + sbc (pStack) + sta (pStack),y + inc pStack +PCC.BOPS.SUB.L .EQ *-PCC.BOPS.SUB +*-------------------------------------- +PCC.BOPS.SHL .DA #PCC.BOPS.SHL.L + >PULLA + tax + beq .8 + + lda (pStack) + +.1 asl + dex + bne .1 + + sta (pStack) + +.8 +PCC.BOPS.SHL.L .EQ *-PCC.BOPS.SHL +*-------------------------------------- +PCC.BOPS.SHR .DA #PCC.BOPS.SHR.L + >PULLA + tax + beq .8 + + lda (pStack) + +.1 lsr + dex + bne .1 + + sta (pStack) + +.8 +PCC.BOPS.SHR.L .EQ *-PCC.BOPS.SHR +*-------------------------------------- +PCC.BOPS.L .DA #PCC.BOPS.L.L + >PULLA + cmp (pStack) + bcc .8 + + lda #0 + sta (pStack) + rts + +.8 lda #1 + sta (pStack) +PCC.BOPS.L.L .EQ *-PCC.BOPS.L +*-------------------------------------- +PCC.BOPS.G .DA #PCC.BOPS.G.L + >PULLA + cmp (pStack) + beq .1 + bcs .8 + +.1 lda #0 + sta (pStack) + rts + +.8 lda #1 + sta (pStack) +PCC.BOPS.G.L .EQ *-PCC.BOPS.G +*-------------------------------------- +PCC.BOPS.LE .DA #PCC.BOPS.LE.L + >PULLA + cmp (pStack) + bcc .8 + beq .8 + + lda #0 + sta (pStack) + rts + +.8 lda #1 + sta (pStack) +PCC.BOPS.LE.L .EQ *-PCC.BOPS.LE +*-------------------------------------- +PCC.BOPS.GE .DA #PCC.BOPS.GE.L + >PULLA + cmp (pStack) + bcs .8 + + lda #0 + sta (pStack) + rts + +.8 lda #1 + sta (pStack) +PCC.BOPS.GE.L .EQ *-PCC.BOPS.GE +*-------------------------------------- +PCC.BOPS.EQ .DA #PCC.BOPS.EQ.L + >PULLA + cmp (pStack) + beq .1 + + lda #0 + clc + +.1 ror + sta (pStack) + +PCC.BOPS.EQ.L .EQ *-PCC.BOPS.EQ +*-------------------------------------- +PCC.BOPS.NE .DA #PCC.BOPS.NE.L + >PULLA + eor (pStack) + sta (pStack) + +PCC.BOPS.NE.L .EQ *-PCC.BOPS.NE +*-------------------------------------- +PCC.BOPS.LAND +*-------------------------------------- +PCC.BOPS.AND .DA #PCC.BOPS.AND.L + >PULLA + and (pStack) + sta (pStack) +PCC.BOPS.AND.L .EQ *-PCC.BOPS.AND +*-------------------------------------- +PCC.BOPS.LOR +*-------------------------------------- +PCC.BOPS.OR .DA #PCC.BOPS.OR.L + >PULLA + ora (pStack) + sta (pStack) +PCC.BOPS.OR.L .EQ *-PCC.BOPS.OR +*-------------------------------------- +PCC.BOPS.EOR .DA #PCC.BOPS.EOR.L + >PULLA + eor (pStack) + sta (pStack) +PCC.BOPS.EOR.L .EQ *-PCC.BOPS.EOR +*-------------------------------------- +MAN +SAVE usr/src/bin/cc.s.pcc +LOAD usr/src/bin/cc.s +ASM diff --git a/BIN/CC.S.STMT.txt b/BIN/CC.S.STMT.txt index aeb31eb3..c3e550cc 100644 --- a/BIN/CC.S.STMT.txt +++ b/BIN/CC.S.STMT.txt @@ -1,12 +1,57 @@ NEW AUTO 3,1 *-------------------------------------- +CC.STMT jsr CC.GetCharNB + jsr CC.IsLetter + ldx #$ff + bcc .20 + + >LDYA L.CC.PREOPS ++var ? + jsr CC.LookupOP + bcs .9 + +.20 stx StmtPreOp + + jsr CC.SYM.Lookup var or func() ? + bcs .99 + + ldy #SYM.Q + lda (ZPLookupSymPtr),y + bit #SYM.Q.FUNC + beq .60 + + bit StmtPreOp + bpl .9 ++func ???????? + + jsr CC.F.CallNoRetV func( ... ); + bcs .99 + + jmp CC.SYM.LookupFree + +.60 jsr CC.CORE.SetVar + bcs .99 + + jmp CC.SYM.LookupFree + +.9 lda #E.CSYN + sec +.99 rts +*-------------------------------------- * X = KW.ID *-------------------------------------- -CC.STMT.CPStmt lda LocalPtr Locals +CC.STMT.CPStmt.NEW + >LDA.G CC.CPSID+1 jsr CC.Push bcs .99 - + + >LDA.G CC.CPSID + jsr CC.Push + bcs .99 + + lda LocalPtr Locals + jsr CC.Push + bcs .99 + lda #0 bState jsr CC.Push bcs .99 @@ -20,33 +65,58 @@ CC.STMT.CPStmt lda LocalPtr Locals .99 rts *-------------------------------------- +CC.STMT.Stmt.END + jsr CC.Get + bcs .8 + + cmp #'}' + beq .8 + + cmp #';' must be ';' on stack.... + bra CC.STMT.CPStmt.POP + +.8 clc + +CC.STMT.Stmt.RTS + rts +*-------------------------------------- CC.STMT.CPStmt.END - jsr CC.Pop - bcs .9 + jsr CC.Get + bcs CC.STMT.Stmt.RTS cmp #'}' must be '}' on stack.... - bne .9 +CC.STMT.CPStmt.POP + bne .98 - jsr CC.Pop get stacked KW... - tax + iny + lda (ZPCCStack),y - jsr CC.Pop bState + jsr .7 + bcs .99 + + bvs .1 DONT POP reused context (ELSE....) + + lda CStackPtr +* clc + adc #5 + sta CStackPtr jsr CC.Pop Locals sta LocalPtr - - txa - bmi .5 + +.1 clc + rts +*-------------------------------------- +.7 tax + bmi .8 jmp (J.CC.KW.END,x) -.5 jmp CC.F.Def.END +.8 jmp CC.F.Def.END -.9 lda #E.CSYN +.98 lda #E.CSYN sec - rts -*-------------------------------------- -CC.CPS.New +.99 rts *-------------------------------------- MAN SAVE usr/src/bin/cc.s.stmt diff --git a/BIN/CC.S.SYM.txt b/BIN/CC.S.SYM.txt index 7628e4b0..5a800a49 100644 --- a/BIN/CC.S.SYM.txt +++ b/BIN/CC.S.SYM.txt @@ -17,7 +17,7 @@ CC.SYM.New >STYA ZPPtr2 T/Q >PUSHW ZPLineBufPtr >SYSCALL SListLookup - bcs .9 + bcs CC.SYM.New.9 >STYA.G CC.SymID Y,A = KeyID @@ -29,21 +29,14 @@ CC.SYM.New >STYA ZPPtr2 T/Q >PUSHWI 65535 all >PUSHWZ From Start >SYSCALL SListGetData - bcs .9 + bcc CC.SYM.New2 - jsr CC.GetCharNB - cmp #'(' - bne .8 - - jmp CC.F.Decl - -.8 clc -.9 rts Y,A = SymSize +CC.SYM.New.9 rts Y,A = SymSize *-------------------------------------- CC.SYM.New1 ldy ScopeIdx lda (pData),y jsr CC.SYM.NewKey - bcs .9 + bcs CC.SYM.New.9 >STYA.G CC.SymID Y,A = KeyID @@ -71,8 +64,8 @@ CC.SYM.New1 ldy ScopeIdx tya ldy #SYM.DefSize sta (ZPSymBufPtr),y - - jsr CC.GetCharNB +*-------------------------------------- +CC.SYM.New2 jsr CC.GetCharNB bcs CC.SYM.SetAddr cmp #'(' @@ -84,45 +77,45 @@ CC.SYM.New1 ldy ScopeIdx sta (ZPSymBufPtr),y jmp CC.F.Decl - -.9 rts *-------------------------------------- CC.SYM.NewV cmp #'[' bne CC.SYM.SetAddr + ldy #SYM.Q + lda (ZPSymBufPtr),y + and #%11001111 + sta (ZPSymBufPtr),y + + lda #SYM.Def + ldy #SYM.DefSize + sta (ZPSymBufPtr),y + + ldy #SYM.Q + +.1 lda (ZPSymBufPtr),y + clc + adc #SYM.Q.ARRAY + sta (ZPSymBufPtr),y + jsr CC.GetNextCharNB Skip [ bcs .99 cmp #']' - bne .3 + bne .2 -.2 ldy #SYM.Q + ldy #SYM.Q lda (ZPSymBufPtr),y - bit #SYM.Q.PPPOINTER - beq .99 + and #SYM.Q.PPPOINTER + beq .99 [] only allowed for * - and #SYM.Q.AAARRAY - cmp #SYM.Q.AAARRAY + >LDYAI 0 set as [0] (deref) + jsr CC.SYM.AddWord + bra .3 + +.2 jsr CC.EXP.IntConst bcs .99 -* ldy #SYM.Q - lda (ZPSymBufPtr),y -* clc - adc #SYM.Q.ARRAY - sta (ZPSymBufPtr),y - - jsr CC.GetNextCharNB Skip ] - bcs CC.SYM.SetAddr - - cmp #'[' - beq .2 - - bra CC.SYM.SetAddr -*-------------------------------------- -.3 jsr CC.EXP.IntConst - bcs .9 - - jsr CC.SYM.SetSizeOf + jsr CC.SYM.AddWord jsr CC.GetCharNB bcs .99 @@ -130,17 +123,22 @@ CC.SYM.NewV cmp #'[' cmp #']' bne .99 - jsr CC.GetNextCharNB Skip ] +.3 jsr CC.GetNextCharNB Skip ] bcs CC.SYM.SetAddr -* cmp #'[' -* bne CC.SYM.SetAddr + cmp #'[' + bne CC.SYM.SetAddr - bra CC.SYM.SetAddr + ldy #SYM.Q + lda (ZPSymBufPtr),y + and #SYM.Q.AAARRAY + cmp #SYM.Q.AAARRAY + beq .99 already [][][] + + bra .1 .99 lda #E.CSYN sec - .9 rts *-------------------------------------- CC.SYM.SetAddr ldy #SYM.Q @@ -164,19 +162,23 @@ CC.SYM.SetAddrG jsr CC.SYM.GetSymSizeOfInAXC * clc / sec A,X=Size, CS if pointer + pha + ldy #SYM.Addr lda ZPCCData sta (ZPSymBufPtr),y - adc ZPCCData - sta ZPCCData - iny lda ZPCCData+1 sta (ZPSymBufPtr),y + pla + clc + adc ZPCCData + sta ZPCCData + txa adc ZPCCData+1 sta ZPCCData+1 @@ -214,6 +216,125 @@ CC.SYM.SetAddrL jsr CC.SYM.GetSymSizeOfInAXC sec rts *-------------------------------------- +CC.SYM.PushAddr ldy #SYM.SC + lda (ZPSymBufPtr),y + beq .1 SYM.SC.STATIC +* LOCAL + >LDYA L.PCC.PushLAddrH + jsr CODE.EmitPCC + bcs .9 + + ldy #SYM.Addr + lda (ZPSymBufPtr),y + eor #$FF + inc + jsr CODE.LDAI + bcs .9 + + >LDYA L.PCC.PushLAddrL + jmp CODE.EmitPCC + +* GLOBAL + +.1 ldy #SYM.Addr+1 + lda (ZPSymBufPtr),y + tax + + dey + lda (ZPSymBufPtr),y + + jsr CODE.LDAXI + bcs .9 + + ldy #SYM.Q + lda (ZPSymBufPtr),y + and #SYM.Q.CONST + beq .2 + + >LDYA L.PCC.PushIAddr + jmp CODE.EmitPCC + +.2 >LDYA L.PCC.PushUAddr + jmp CODE.EmitPCC + +.9 rts +*-------------------------------------- +CC.SYM.GetAddr1 ldy #SYM.SC + lda (ZPSymBufPtr),y + beq .1 SYM.SC.STATIC +* LOCAL + ldy #SYM.Addr + lda (ZPSymBufPtr),y + eor #$FF + inc + jsr CODE.LDAI + bcs .9 + + >LDYA L.PCC.GetLAddr1 + jmp CODE.EmitPCC +* GLOBAL + +.1 ldy #SYM.Addr+1 + lda (ZPSymBufPtr),y + tax + + dey + lda (ZPSymBufPtr),y + + jsr CODE.LDAXI + bcs .9 + + ldy #SYM.Q + lda (ZPSymBufPtr),y + and #SYM.Q.CONST + beq .2 + + >LDYA L.PCC.GetIAddr1 + jmp CODE.EmitPCC + +.2 >LDYA L.PCC.GetUAddr1 + jmp CODE.EmitPCC + +.9 rts +*-------------------------------------- +CC.SYM.GetAddr2 ldy #SYM.SC + lda (ZPSymBufPtr),y + beq .1 SYM.SC.STATIC +* LOCAL + ldy #SYM.Addr + lda (ZPSymBufPtr),y + eor #$FF + inc + jsr CODE.LDAI + bcs .9 + + >LDYA L.PCC.GetLAddr2 + jmp CODE.EmitPCC +* GLOBAL + +.1 ldy #SYM.Addr+1 + lda (ZPSymBufPtr),y + tax + + dey + lda (ZPSymBufPtr),y + + jsr CODE.LDAXI + bcs .9 + + ldy #SYM.Q + lda (ZPSymBufPtr),y + and #SYM.Q.CONST + beq .2 + + >LDYA L.PCC.GetIAddr2 + jmp CODE.EmitPCC + +.2 >LDYA L.PCC.GetUAddr2 + jmp CODE.EmitPCC + +.9 rts +*-------------------------------------- CC.SYM.NewKey >PUSHA >PUSHW ZPLineBufPtr >SYSCALL SListNewKey @@ -223,11 +344,106 @@ CC.SYM.NewKey >PUSHA .9 rts Y,A = KeyID, X = KeyLen *-------------------------------------- +CC.SYM.AddWord pha + phy + + ldy #SYM.DefSize + lda (ZPSymBufPtr),y + pha + + inc + inc + sta (ZPSymBufPtr),y + + ply + + pla + sta (ZPSymBufPtr),y + iny + pla + sta (ZPSymBufPtr),y +CC.SYM.AddWord.RTS + rts +*-------------------------------------- +CC.SYM.NewCPSID >LDYA.G CC.CPSID + >STYA.G CC.CPSPFX+2 + + >LDA.G CC.CPSID+1 + inc + cmp #'Z'+1 + bne .1 + + dey CC.CPSID + lda (pData),y + inc + cmp #'Z'+1 + beq .9 + + sta (pData),y + + lda #'A' + iny CC.CPSID+1 + +.1 sta (pData),y + + clc + rts + +.9 lda #E.OOH +* sec + rts +*-------------------------------------- +CC.SYM.NewA bit bPass2 + bmi .8 + + >STA.G CC.CPSPFX A = "B"reak, "C"ontinue... + + >PUSHB.G CC.hScopes Global Scope + >PUSHEA.G CC.CPSPFX + + >SYSCALL SListNewKey + bcs CC.SYM.AddWord.RTS + + >STYA.G CC.SymID Y,A = KeyID + + lda #SYM.T.VOID + sta (ZPSymBufPtr) #SYM.T + + lda #SYM.Q.POINTER + ldy #SYM.Q + sta (ZPSymBufPtr),y + + lda #SYM.SC.STATIC + iny #SYM.SC + sta (ZPSymBufPtr),y + + iny + lda #0 + +.1 sta (ZPSymBufPtr),y + iny + cpy #SYM.Def + bne .1 + + tya + ldy #SYM.DefSize + sta (ZPSymBufPtr),y + + >LDYA ZPCCCode + jsr CC.SYM.SetAddrYA + + >LDA.G CC.hScopes Global Scope + jmp CC.SYM.Store.1 + +.8 clc + +.99 rts +*-------------------------------------- CC.SYM.StoreF >LDA.G CC.hScopes bit bPass2 bpl CC.SYM.Store.1 - + clc rts *-------------------------------------- @@ -332,6 +548,44 @@ CC.SYM.Lookup >LDA.G CC.LookupIdx * sec rts *-------------------------------------- +CC.SYM.LookupA bit bPass2 + bmi .1 + + ldx #0 + ldy #0 + clc + rts + +.1 >STA.G CC.CPSPFX A = "B"reak, "C"ontinue... + + >PUSHB.G CC.hScopes Global Scope + >PUSHEA.G CC.CPSPFX + >SYSCALL SListLookup + bcs .99 + + >STYA.G CC.SymID Y,A = KeyID + + >PUSHB.G CC.hScopes + >PUSHW.G CC.SymID + >PUSHW ZPSymBufPtr + >PUSHWI 65535 all + >PUSHWZ From Start + >SYSCALL SListGetData + bcs .99 + + ldy #SYM.Addr + lda (ZPSymBufPtr),y + + tax + + iny + lda (ZPSymBufPtr),y + tay + +* clc + +.99 rts +*-------------------------------------- CC.SYM.LookupFree >LDA.G CC.LookupIdx cmp #CC.LookupIdx @@ -367,92 +621,35 @@ CC.SYM.LookupFreeAll clc rts *-------------------------------------- -* Y,A = value T/Q +* on RT stack : Addr,value *-------------------------------------- -CC.SYM.PushValue - jsr CC.SYM.CheckTypeYA +CC.SYM.SetValue jsr CC.SYM.GetSymSizeOfInAXC + tay + dey + jsr CODE.LDYI bcs .9 - jsr CC.SYM.GetSymSizeOfInAXC - tax - jsr CODE.LDXI + >LDYA L.PCC.SetValue + jmp CODE.EmitPCC - jsr CC.SYM.GetAddrInYA - beq .1 - - jsr CODE.LDYAI - jsr CODE.PushXFromYA - - clc - rts - -.1 jsr CODE.GetLocal Y = local address - jsr CODE.PushXFromYA - - clc -.9 rts -*-------------------------------------- -CC.SYM.PopValue jsr CC.SYM.CheckTypeYA - bcs .9 - - jsr CC.SYM.GetSymSizeOfInAXC - tax - jsr CODE.LDXI - - jsr CC.SYM.GetAddrInYA - beq .1 - - jsr CODE.LDYAI - jsr CODE.PopXToYA - - clc - rts - -.1 jsr CODE.GetLocal Y = local address - jsr CODE.PopXToYA - - clc -.9 rts -*-------------------------------------- -CC.SYM.SetValue jsr CC.SYM.CheckTypeYA - bcs .9 - - jsr CC.SYM.GetSymSizeOfInAXC - tax - jsr CODE.LDXI - - jsr CC.SYM.GetAddrInYA - beq .1 - - jsr CODE.LDYAI - jsr CODE.SetXToYA - - clc - rts - -.1 jsr CODE.GetLocal Y = local address - jsr CODE.SetXToYA - - clc .9 rts *-------------------------------------- * in : Y,A = T/Q * out : CC * CS, A = E.TMISMATCH *-------------------------------------- -CC.SYM.CheckTypeYA +CC.SYM.CheckTypeYA.OLD pha tya cmp (ZPSymBufPtr) bne .9 pla - phy - ldy #SYM.Q - cmp (ZPSymBufPtr),y - bne .9 - ply + ldy #SYM.Q + eor (ZPSymBufPtr),y + and #$FC ignore SYM.Q.FUNC+SYM.Q.FASTCALL + bne .9 clc rts @@ -476,7 +673,7 @@ CC.SYM.GetTypeInYA *-------------------------------------- * in : Y,A = T/Q *-------------------------------------- -CC.SYM.SetTypeYA +CC.SYM.SetTypeYA.OLD phy ldy #SYM.Q sta (ZPSymBufPtr),y @@ -497,7 +694,16 @@ CC.SYM.GetSymSizeOfInAXC CC.SYM.GetYASizeOfInAXC bit #SYM.Q.PPPOINTER - bne .1 + beq .1 + + lda #2 pointer + ldx #0 + + sec +1 for hMem Storage + rts + +.1 bit #SYM.Q.AAARRAY + bne .2 lda CC.TYPESIZE-1,y ldx #0 @@ -505,10 +711,36 @@ CC.SYM.GetYASizeOfInAXC clc rts -.1 lda #2 pointer - ldx #0 +.2 ldx CC.TYPESIZE-1,y - sec +1 for hMem Storage + ldy #SYM.Def + lda (ZPSymBufPtr),y + >PUSHA + iny + lda (ZPSymBufPtr),y + >PUSHA + + ldy #1 + +.3 dex + beq .5 + +.4 lda (pStack),y + clc + adc (pStack),y + sta (pStack),y + + lda (pStack) + adc (pStack) + sta (pStack) + dex + bne .4 + +.5 >PULLA + tax + >PULLA + + clc rts *-------------------------------------- * in/out : A,X,C = size @@ -526,19 +758,6 @@ CC.SYM.SetSizeOf pla rts *-------------------------------------- -CC.SYM.GetAddrInYA - ldy #SYM.Addr+1 - lda (ZPSymBufPtr),y - pha - - dey - lda (ZPSymBufPtr),y - tay - - pla Z if Local - - rts -*-------------------------------------- CC.SYM.SetAddrYA phy diff --git a/BIN/CC.S.TYPE.txt b/BIN/CC.S.TYPE.txt index a3eb2099..d49f7f77 100644 --- a/BIN/CC.S.TYPE.txt +++ b/BIN/CC.S.TYPE.txt @@ -150,7 +150,7 @@ CC.TYPE sta (pStack) T .10 jsr CC.IsLetter bcs .8 - >LDYA L.CC.FTYPES + >LDYA L.CC.FTYPES int fastcall f() ? jsr CC.LookupID bcs .8 next char is an identifier @@ -163,7 +163,7 @@ CC.TYPE sta (pStack) T bcs .9 next char is an identifier, ",", "(",")" .8 clc - rts + rts *-------------------------------------- * in : Y,A = type/qual * out : X = size diff --git a/BIN/CC.S.txt b/BIN/CC.S.txt index 0f87fbac..6c1a8916 100644 --- a/BIN/CC.S.txt +++ b/BIN/CC.S.txt @@ -50,14 +50,6 @@ SYM.Def .EQ 8 Funtions : fTQ,a1TQ,a2TQ.... * SYM .EQ 10 *-------------------------------------- -CPS.ParentID .EQ 0 -CPS.hSYM .EQ 2 -* -CPS.Cont .EQ 4 -CPS.Break .EQ 6 -* -CPS .EQ 8 -*-------------------------------------- * Zero Page Segment, up to 32 bytes *-------------------------------------- .DUMMY @@ -76,20 +68,22 @@ ZPCCStack .BS 2 ZPLineBufPtr .BS 2 ZPLookupPtr .BS 2 - CStackPtr .BS 1 LocalPtr .BS 1 - ScopeIdx .BS 1 bLocalScope .BS 1 ZPSymBufPtr .BS 2 - -* .BS 1 -* .BS 1 - ZPLookupSymPtr .BS 2 +bInitCode .BS 1 +StmtPreOp .BS 1 +ExpState .BS 1 +*ExpState.VinYA .EQ $10 +ExpState.AonStack .EQ $20 +ExpState.AinPTR .EQ $40 +ExpState.VonStack .EQ $80 +ZPState .BS 1 ZS.END .ED *-------------------------------------- * File Header (16 Bytes) @@ -127,50 +121,27 @@ L.MSG.SUMMARY .DA MSG.SUMMARY L.MSG.NOMAIN .DA MSG.NOMAIN L.ENV.INCLUDE .DA ENV.INCLUDE *-------------------------------------- -L.CC.PREOPS .DA CC.PREOPS -J.CC.PREOPS .DA CC.EXP.GetRef - .DA CC.EXP.GetDeref -L.CC.POSTOPS .DA CC.POSTOPS L.CC.AOPS .DA CC.AOPS +L.CC.PREOPS .DA CC.PREOPS +J.CC.PREOPS .DA CC.EXP.Ref + .DA CC.EXP.Deref + .DA CC.EXP.Abs + .DA CC.EXP.negate + .DA CC.EXP.lnot + .DA CC.EXP.bnot + .DA CC.EXP.preinc + .DA CC.EXP.predec +L.CC.POSTOPS .DA CC.POSTOPS +J.CC.POSTOPS .DA CC.EXP.postinc + .DA CC.EXP.postdec + .DA CC.EXP.array + .DA CC.EXP.Struct + .DA CC.EXP.pStruct L.CC.BOPS .DA CC.BOPS -J.CC.bBOPS .DA CC.BOPS.bMUL - .DA CC.BOPS.bDIV - .DA CC.BOPS.bMOD - .DA CC.BOPS.ADD - .DA CC.BOPS.SUB - .DA CC.BOPS.SHL - .DA CC.BOPS.SHR - .DA CC.BOPS.L - .DA CC.BOPS.LE - .DA CC.BOPS.G - .DA CC.BOPS.GE - .DA CC.BOPS.EQ - .DA CC.BOPS.NE - .DA CC.BOPS.AND - .DA CC.BOPS.OR - .DA CC.BOPS.EOR - .DA CC.BOPS.LAND - .DA CC.BOPS.LOR -J.CC.cBOPS .DA CC.BOPS.cMUL - .DA CC.BOPS.cDIV - .DA CC.BOPS.cMOD - .DA CC.BOPS.ADD - .DA CC.BOPS.SUB - .DA CC.BOPS.SHL - .DA CC.BOPS.SHR - .DA CC.BOPS.L - .DA CC.BOPS.LE - .DA CC.BOPS.G - .DA CC.BOPS.GE - .DA CC.BOPS.EQ - .DA CC.BOPS.NE - .DA CC.BOPS.AND - .DA CC.BOPS.OR - .DA CC.BOPS.EOR - .DA CC.BOPS.LAND - .DA CC.BOPS.LOR L.CC.DIRS .DA CC.DIRS L.CC.KW .DA CC.KW +L.CC.KW2.IF .DA CC.KW2.IF +L.CC.KW2.DO .DA CC.KW2.DO L.CC.SCSPEC .DA CC.SCSPEC L.CC.TYPEQUAL .DA CC.TYPEQUAL L.CC.TYPESPEC .DA CC.TYPESPEC @@ -186,6 +157,7 @@ J.CC.KW .DA CC.KW.IF .DA CC.KW.FOR .DA CC.KW.SWITCH .DA CC.KW.CASE + .DA CC.KW.DEFAULT .DA CC.KW.BREAK .DA CC.KW.CONTINUE .DA CC.KW.RETURN @@ -224,6 +196,80 @@ J.CC.STYPES .DA CC.TYPE.SCHAR L.CC.MAIN .DA CC.MAIN L.CC.LIBC .DA CC.LIBC L.PCC.FH .DA PCC.FH +*-------------------------------------- +L.PCC.DEBUG .DA PCC.DEBUG +L.PCC.SLEEP .DA PCC.SLEEP +L.PCC.ENTER .DA PCC.ENTER +L.PCC.LEAVE .DA PCC.LEAVE +L.PCC.ADDLOCAL .DA PCC.ADDLOCAL +L.PCC.SetRetValue .DA PCC.SetRetValue +L.PCC.TestZero1 .DA PCC.TestZero1 +L.PCC.TestZero2 .DA PCC.TestZero2 +L.PCC.TestZeroX .DA PCC.TestZeroX +L.PCC.TestnZero1 .DA PCC.TestnZero1 +L.PCC.TestnZero2 .DA PCC.TestnZero2 +L.PCC.TestnZeroX .DA PCC.TestnZeroX +L.PCC.PushLAddrH .DA PCC.PushLAddrH +L.PCC.PushLAddrL .DA PCC.PushLAddrL +L.PCC.PushIAddr .DA PCC.PushIAddr +L.PCC.PushUAddr .DA PCC.PushUAddr +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.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.Inc1 .DA PCC.Inc1 +L.PCC.Inc2 .DA PCC.Inc2 +L.PCC.Inc4 .DA PCC.Inc4 +L.PCC.Dec1 .DA PCC.Dec1 +L.PCC.Dec2 .DA PCC.Dec2 +L.PCC.Dec4 .DA PCC.Dec4 +*-------------------------------------- +L.PCC.bBOPS .DA PCC.BOPS.bMUL + .DA PCC.BOPS.bDIV + .DA PCC.BOPS.bMOD + .DA PCC.BOPS.ADD + .DA PCC.BOPS.SUB + .DA PCC.BOPS.SHL + .DA PCC.BOPS.SHR + .DA PCC.BOPS.L + .DA PCC.BOPS.G + .DA PCC.BOPS.LE + .DA PCC.BOPS.GE + .DA PCC.BOPS.EQ + .DA PCC.BOPS.NE + .DA PCC.BOPS.LAND + .DA PCC.BOPS.AND + .DA PCC.BOPS.LOR + .DA PCC.BOPS.OR + .DA PCC.BOPS.EOR +*-------------------------------------- +L.PCC.cBOPS .DA PCC.BOPS.cMUL + .DA PCC.BOPS.cDIV + .DA PCC.BOPS.cMOD + .DA PCC.BOPS.ADD + .DA PCC.BOPS.SUB + .DA PCC.BOPS.SHL + .DA PCC.BOPS.SHR + .DA PCC.BOPS.L + .DA PCC.BOPS.G + .DA PCC.BOPS.LE + .DA PCC.BOPS.GE + .DA PCC.BOPS.EQ + .DA PCC.BOPS.NE + .DA PCC.BOPS.LAND + .DA PCC.BOPS.AND + .DA PCC.BOPS.LOR + .DA PCC.BOPS.OR + .DA PCC.BOPS.EOR +*-------------------------------------- .DA 0 *-------------------------------------- * Called once at process creation @@ -263,7 +309,7 @@ CS.RUN >PUSHW L.MSG.GREETINGS jsr CODE.Init - jsr CS.RUN.FOpen1st + jsr CC.FIO.FOpen1st bcs CS.INIT.RTS *-------------------------------------- CS.RUN.CLOOP jsr CC.CompileFile @@ -271,7 +317,7 @@ CS.RUN.CLOOP jsr CC.CompileFile cmp #MLI.E.EOF bne .9 - jsr CS.RUN.FClose + jsr CC.FIO.FClose bne CS.RUN.CLOOP *-------------------------------------- jsr PrintSummary @@ -279,19 +325,19 @@ CS.RUN.CLOOP jsr CC.CompileFile jsr CC.Link bcs .99 - - jsr CheckMain +* >DEBUG + jsr CC.Link.CheckMain bcs .99 dec bPass2 - jsr CS.RUN.FCreate + jsr CC.FIO.FCreate bcs .99 jsr CODE.Init bcs .99 - jsr CS.RUN.FOpen1st + jsr CC.FIO.FOpen1st bcs .99 *-------------------------------------- .2 jsr CC.CompileFile @@ -299,7 +345,7 @@ CS.RUN.CLOOP jsr CC.CompileFile cmp #MLI.E.EOF bne .9 - jsr CS.RUN.FClose + jsr CC.FIO.FClose bne .2 *-------------------------------------- .8 lda #0 Exit Code = Success @@ -372,130 +418,6 @@ CS.RUN.ARGS inc ArgIndex sec rts *-------------------------------------- -CS.RUN.FOpen1st >LDA.G CC.InFileArg - >SYSCALL ArgV - -CS.RUN.FOpen phy - pha - - >PUSHW L.MSG.READING - pla - pha - >PUSHYA - >PUSHBI 2 - >SYSCALL PrintF - - pla - ply - >PUSHYA - >PUSHBI O.RDONLY - >PUSHBI S.FI.T.TXT - >PUSHWZ Aux type - >SYSCALL FOpen - bcs .9 - - tax - - >LDA.G hFilePtr - inc - sta (pData),y - tay - txa - sta (pData),y - - >LDA.G LineCntPtr - inc - inc - sta (pData),y - tay - lda #0 - sta (pData),y - iny - sta (pData),y - -.9 rts -*-------------------------------------- -CS.RUN.FGetS >LDYA.G LineBufPtr - >STYA ZPLineBufPtr - - >LDA.G LineCntPtr - tay - lda (pData),y - inc - sta (pData),y - bne .1 - - iny - lda (pData),y - inc - sta (pData),y - -.1 >LDA.G hFilePtr - tay - lda (pData),y - >PUSHA - - >PUSHW ZPLineBufPtr - >PUSHWI 255 - >SYSCALL FGetS - bcs .9 - - >LDA.G bTrace - bpl .8 - - jsr PrintTraceMsg - -.8 - -.9 rts -*-------------------------------------- -CS.RUN.FClose >LDA.G hFilePtr - cmp #hFilePtr - beq .8 - - tay - lda (pData),y - - >SYSCALL FClose - - >LDA.G hFilePtr - dec - sta (pData),y - cmp #hFilePtr - beq .8 - - >LDA.G LineCntPtr - dec - dec - sta (pData),y NZ - -.8 rts -*-------------------------------------- -CS.RUN.FCreate >LDA.G CC.OutFileArg - >SYSCALL ArgV - >STYA ZPPtr1 - - >PUSHW L.MSG.GENERATING - >PUSHW ZPPtr1 - >PUSHBI 2 - >SYSCALL PrintF - - >PUSHW ZPPtr1 - >PUSHBI O.WRONLY+O.CREATE - >PUSHBI S.FI.T.BIN - >PUSHWI $2000 Aux type - >SYSCALL FOpen - bcs .9 - - >STA.G CC.hOutFile - - >PUSHA A = CC.hOutFile - >PUSHW L.PCC.FH - >PUSHWI PCC.FH.L - >SYSCALL FWrite - -.9 rts -*-------------------------------------- CS.DOEVENT sec rts *-------------------------------------- @@ -510,7 +432,9 @@ CS.QUIT jsr CODE.Quit .8 clc rts *-------------------------------------- -PrintTraceMsg ldy #S.PS.hStdErr +PrintTraceMsg + ldy #S.PS.hStdOut +* ldy #S.PS.hStdErr lda (pPS),y >PUSHA @@ -641,45 +565,8 @@ PrintSummary lda ZPCCCode+1 >PUSHBI 6 >SYSCALL PrintF +* >DEBUG rts -*-------------------------------------- -CheckMain >PUSHB.G CC.hScopes - - >PUSHW L.CC.MAIN - >SYSCALL SListLookup - bcs .9 - - >STYA ZPPtr1 SymID - - >PUSHB.G CC.hScopes - >PUSHW ZPPtr1 SymID - >PUSHW ZPSymBufPtr - >PUSHWI 65535 all - >PUSHWZ From Start - >SYSCALL SListGetData - bcs .99 - - ldy #SYM.Addr - lda (ZPSymBufPtr),y - iny - ora (ZPSymBufPtr),y - beq .9 - - lda (ZPSymBufPtr),y - sta PCC.FH+PCC.FH.MAIN+1 - dey - lda (ZPSymBufPtr),y - sta PCC.FH+PCC.FH.MAIN - -* clc - - rts - -.9 >LDYA L.MSG.NOMAIN - >SYSCALL puts - lda #E.CSYN - sec -.99 rts *-------------------------------------- .INB usr/src/bin/cc.s.code .INB usr/src/bin/cc.s.core @@ -692,7 +579,7 @@ CheckMain >PUSHB.G CC.hScopes .INB usr/src/bin/cc.s.exp .INB usr/src/bin/cc.s.sym .INB usr/src/bin/cc.s.link - .INB usr/src/bin/cc.s.exec + .INB usr/src/bin/cc.s.fio *-------------------------------------- CS.END *-------------------------------------- @@ -712,276 +599,18 @@ MSG.DEBUG .AS "*** pCode=%H, pConst=%H, pData=%H, pStack=%H\r\n" MSG.TRACE .AZ "%5D> %s\r\n" MSG.RTSTK .AZ "\r\n" MSG.ERROR .AZ " %s^\r\n" -MSG.SUMMARY .AZ "\r\n*** Compilation OK : Code size=%5D, iData size=%5D, uData size=%5D\r\n\r\n" +MSG.SUMMARY .AZ "*** Compilation OK : Code size=%5D, iData size=%5D, uData size=%5D\r\n" MSG.NOMAIN .AZ "*** No 'main()' function defined." *-------------------------------------- -ENV.INCLUDE .AZ "INCLUDE" -ENV.LIB .AZ "LIB" -*-------------------------------------- OptionList .AS "DdTt" OptionVars .DA #bDebug,#bDebug,#bTrace,#bTrace *-------------------------------------- -* PCC = Pre Compiled Code -*-------------------------------------- -ZS.RT.Ptr1 .EQ ZPBIN -*-------------------------------------- -PCC.FH .PH $2000 -PCC.FH.2000 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 - .DA #256 Stack Size - .DA #2 ZP Size - .DA 0 - -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 - .DA $FFFF - .DA 0 - -PCC.FH.INIT -* TODO : LoadLib code -PCC.FH.QUIT -* TODO : UnloadLib code -PCC.FH.DOEVENT clc - rts - -* int main(int argc, char *argv[]) ; - -PCC.FH.RUN ldy #S.PS.ARGC - lda (pPS),y - -.1 pha - >SYSCALL ArgV - bcs .2 - - >STYA ZS.RT.Ptr1 - - pla - pha - asl - tay - - lda ZS.RT.Ptr1 - sta (pData),y - - lda ZS.RT.Ptr1+1 - iny - sta (pData),y - - pla - inc - bra .1 - -.2 pla - - >PUSHWI 0 returned int - - lda #0 - >PUSHA - ldy #S.PS.ARGC - lda (pPS),y - >PUSHA int ARGC - >PUSHW pData *char[] ARGV - >DEBUG -PCC.FH.MAIN .EQ *-PCC.FH.2000+1 - jsr $FFFF * jsr main - >PULLA - inc pStack pull returned int - sec - rts - -PCC.FH.SYSCALL jsr A2osX.SYSCALL - bcc .8 - - inc pStack - eor #$ff - inc - >PUSHA int -ERROR code... - ldy #1 - lda #$FF - sta (pStack),y on stack - rts - -.8 - -PCC.FH.CS .EP -PCC.FH.L .EQ *-PCC.FH -*-------------------------------------- -PCC.DEBUG >DEBUG -PCC.DEBUG.L .EQ *-PCC.DEBUG -*-------------------------------------- -PCC.SLEEP >SLEEP -PCC.SLEEP.L .EQ *-PCC.SLEEP -*-------------------------------------- -PCC.ENTER ldx pBase - phx - clc - adc pStack A = Local Size - sta pBase - -PCC.ENTER.L .EQ *-PCC.ENTER -*-------------------------------------- -PCC.LEAVE lda pBase - sta pStack - pla - sta pBase - rts - -PCC.LEAVE.L .EQ *-PCC.LEAVE -*-------------------------------------- -PCC.ADDLOCAL clc - adc pStack - sta pStack - -PCC.ADDLOCAL.L .EQ *-PCC.ADDLOCAL -*-------------------------------------- -PCC.GETLOCAL clc - adc pBase - tay - lda pBase+1 - -PCC.GETLOCAL.L .EQ *-PCC.GETLOCAL -*-------------------------------------- -PCC.SETRETVALUE ldy #0 -.1 >PULLA - sta (pBase),y - iny - dex - bne .1 - -PCC.SETRETVALUE.L .EQ *-PCC.SETRETVALUE -*-------------------------------------- -PCC.PushXFromYA >STYA ZS.RT.Ptr1 - txa - dec - tay - -.1 lda (ZS.RT.Ptr1),y - >PUSHA - dey - bpl .1 - -PCC.PushXFromYA.L .EQ *-PCC.PushXFromYA -*-------------------------------------- -PCC.PopXToYA >STYA ZS.RT.Ptr1 - - ldy #0 - -.1 >PULLA - sta (ZS.RT.Ptr1),y - iny - dex - bne .1 - -PCC.PopXToYA.L .EQ *-PCC.PopXToYA -*-------------------------------------- -PCC.SetXToYA >STYA ZS.RT.Ptr1 - - ldy #0 - -.1 lda (pStack),y - sta (ZS.RT.Ptr1),y - iny - dex - bne .1 - -PCC.SetXToYA.L .EQ *-PCC.SetXToYA -*-------------------------------------- -PCC.Test0X lda #0 - -.1 ora (pStack) - inc pStack - dex - bne .1 - - tay -.2 bne .2+5 - .HS 4C JMP abs - -PCC.Test0X.L .EQ *-PCC.Test0X -*-------------------------------------- -PCC.SETpBASEp1 lda pBase+1 - sta ZS.RT.Ptr1+1 - -PCC.SETpBASEp1.L .EQ *-PCC.SETpBASEp1 -*-------------------------------------- -PCC.SETpBASEpA clc - adc pBase - sta ZS.RT.Ptr1 - ldy #1 - -PCC.SETpBASEpA.L .EQ *-PCC.SETpBASEpA -*-------------------------------------- -PCC.Deref >PUSHB (ZS.RT.Ptr1),y - >PUSHB (ZS.RT.Ptr1) - -PCC.Deref.L .EQ *-PCC.Deref -*-------------------------------------- -PCC.PUSHpBASEp1 >PUSHB pBase+1 - -PCC.PUSHpBASEp1.L .EQ *-PCC.PUSHpBASEp1 -*-------------------------------------- -PCC.PUSHpBASEpA clc - adc pBase - >PUSHA - -PCC.PUSHpBASEpA.L .EQ *-PCC.PUSHpBASEpA -*-------------------------------------- -PCC.PushFromPtr >PULLW ZS.RT.Ptr1 - -.1 lda (ZS.RT.Ptr1),y - >PUSHA - dey - bpl .1 - -PCC.PushFromPtr.L .EQ *-PCC.PushFromPtr -*-------------------------------------- -PCC.PushConstPAX - clc - adc PCC.FH.2000+PCC.FH.IDATA - tay - txa - adc PCC.FH.2000+PCC.FH.IDATA+1 - >PUSHA - tya - >PUSHA - -PCC.PushConstPAX.L .EQ *-PCC.PushConstPAX +ENV.INCLUDE .AZ "INCLUDE" +ENV.LIB .AZ "LIB" *-------------------------------------- CC.OPChars .AS "!~+-*/%=&|^<>[" CC.OPChars.Cnt .EQ *-CC.OPChars *-------------------------------------- -* Pre Operators: & * + - ! ~ ++ -- -*-------------------------------------- -CC.PREOPS >PSTR "&" ref - >PSTR "*" deref - >PSTR "+" abs - >PSTR "-" change sign - >PSTR "!" logical not - >PSTR "~" bitwise not - >PSTR "++" pre increase - >PSTR "--" pre decrease - .HS 00 -*-------------------------------------- -* Post Operators: ++ -- -*-------------------------------------- -CC.POSTOPS >PSTR "++" - >PSTR "--" - >PSTR "[" - >PSTR "." - >PSTR "->" - .HS 00 -*-------------------------------------- * Assignment Operators: = += -= *= /= %= <<= >>= &= ^= |= *-------------------------------------- CC.AOPS >PSTR "=" @@ -996,6 +625,27 @@ CC.AOPS >PSTR "=" >PSTR "^=" >PSTR "!=" .HS 00 +*-------------------------------------- +* Pre Operators: & * + - ! ~ ++ -- +*-------------------------------------- +CC.PREOPS >PSTR "&" ref + >PSTR "*" deref + >PSTR "+" abs + >PSTR "-" negate + >PSTR "!" logical not + >PSTR "~" bitwise not + >PSTR "++" pre increase + >PSTR "--" pre decrease + .HS 00 +*-------------------------------------- +* Post Operators: ++ -- +*-------------------------------------- +CC.POSTOPS >PSTR "++" + >PSTR "--" + >PSTR "[" + >PSTR "." + >PSTR "->" + .HS 00 *-- Binary ---- H to L precedence ----- * Arithmetic Operators: * / % * Arithmetic Operators: + - @@ -1039,12 +689,17 @@ CC.KW >PSTR "if" >PSTR "for" >PSTR "switch" >PSTR "case" + >PSTR "default" >PSTR "break" >PSTR "continue" >PSTR "return" >PSTR "sizeof" >PSTR "struct" .HS 00 +CC.KW2.IF >PSTR "else" + .HS 00 +CC.KW2.DO >PSTR "while" + .HS 00 *-------------------------------------- CC.SCSPEC >PSTR "auto" >PSTR "register" @@ -1201,10 +856,10 @@ CC.LIBC >PSTR "chtyp" .DA #2,#1,#SYS.StrToL >PSTR "strtoul" .DA #2,#1,#SYS.StrToUL -* >PSTR "realpath" -* .DA #2,#1,#0 -* >PSTR "expand" -* .DA #2,#1,#0 + >PSTR "realpath" + .DA #2,#1,#SYS.RealPath + >PSTR "expand" + .DA #2,#1,#SYS.Expand >PSTR "strlen" .DA #2,#1,#SYS.StrLen >PSTR "strcpy" @@ -1353,6 +1008,8 @@ CC.LIBC >PSTR "chtyp" >PSTR "lrintf" .DA #2,#2,#FPU.QINT .HS 00 +*-------------------------------------- + .INB usr/src/bin/cc.s.pcc *-------------------------------------- .DUMMY .OR 0 @@ -1387,6 +1044,9 @@ CC.hTags .BS 1 CC.hStack .BS 1 CC.hScopes .BS 1+SCOPE.MAX 1 Global+ MAX locals + +CC.CPSID .BS 2 AA +CC.CPSPFX .BS 5 X_id\0 *-------------------------------------- CC.hSymBuf .BS 1 CC.SymID .BS 2 diff --git a/BIN/EDIT.S.CTRL.txt b/BIN/EDIT.S.CTRL.txt index 38552546..af9675fe 100644 --- a/BIN/EDIT.S.CTRL.txt +++ b/BIN/EDIT.S.CTRL.txt @@ -22,14 +22,14 @@ NEW * ^R = Replace... * ^S = Save * ^T = Go To Top of file -******** ^U = FS +******** ^U = FS * ^V = Paste Block * ^W = Erase line * ^X = Cut Block * ^Y = End Of File *-------------------------------------- Ctrl.DEL jsr BUF.ComputeCOffset - + lda BUF.COffset ora BUF.COffset+1 No Backspace possible beq .8 @@ -41,7 +41,7 @@ Ctrl.DEL jsr BUF.ComputeCOffset .8 clc .9 rts *-------------------------------------- -Ctrl.Invalid +Ctrl.Invalid clc Ctrl.Invalid.RTS rts @@ -57,18 +57,18 @@ Ctrl.A >STZ.G bUpdateStatus ldy TmpByte jsr SCRN.GotoXY bcs .9 - + lda (ZPPTR1) beq .8 - + >PUSHW L.MSG.HELPLINE >PUSHW ZPPTR1 >PUSHBI 2 >SYSCALL PrintF bcs .9 - + inc TmpByte - + lda (ZPPTR1) sec adc ZPPTR1 @@ -84,15 +84,15 @@ Ctrl.A >STZ.G bUpdateStatus >PUSHBI 0 jsr SCRN.LineBufSprintf bcs .9 - + jsr SCRN.LineBufOut bcs .9 jsr GetCh bcs .9 - + jmp SCRN.Repaint - + .9 rts *-------------------------------------- Ctrl.C jmp BUF.SelToClipboard @@ -122,7 +122,7 @@ Ctrl.G >LDA.G FileX lda #0 sta (pData),y - + jmp SCRN.UpdateViewPort .8 clc @@ -165,16 +165,16 @@ Ctrl.TAB jsr BUF.InsertTAB lda TmpByte beq .9 nothing to do - + * clc >ADC.G FileX sta (pData),y - + >LDA.G CurX clc adc TmpByte sta (pData),y - + sec >SBC.G ScreenX sec @@ -183,19 +183,19 @@ Ctrl.TAB jsr BUF.InsertTAB jsr SCRN.UpdateCurrentLine bcs .9 - + bra .8 - + .1 lda TmpByte clc >ADC.G ScreenX sta (pData),y jsr SCRN.UpdateViewPort - -.8 jsr SCRN.GotoCurXCurY + +.8 jsr SCRN.GotoCurXCurY jmp SCRN.UpdateStatusBar - + .9 rts *-------------------------------------- Ctrl.LF jsr BUF.GetNextLine @@ -204,7 +204,7 @@ Ctrl.LF jsr BUF.GetNextLine tya Y = line length >CMP.G FileX bcs .2 - + sta (pData),y .2 >INCW.G FileY @@ -234,7 +234,7 @@ Ctrl.VT >LDA.G FileY+1 bcs .2 sta (pData),y - + .2 >DECW.G FileY jmp SCRN.UpdateViewPort @@ -258,22 +258,22 @@ Ctrl.CR lda #C.CR >STZ.G FileX >INCW.G FileY - + >STZ.G CurX >LDA.G CurY >CMP.G ViewPortHm1 bne .1 - + jsr SCRN.LineBufOut Bottom line, CEOL... bcs .99 jmp SCRN.UpdateViewPort ...and scroll - + .1 dec >CMP.G ViewPortHm1 beq .6 No scroll needed - + >PUSHW LineBufPtr >PUSHW L.SEQ.SCROLLCURDN @@ -286,7 +286,7 @@ Ctrl.CR lda #C.CR >PUSHA >PUSHBI 2 jsr SCRN.LineBufSprintf - + .99 bcs .9 >PUSHW LineBufPtr @@ -321,7 +321,7 @@ Ctrl.O ldy #FileY+1 txa sbc #0 bcc .8 - + ldy #FileY+1 sta (pData),y dey @@ -371,7 +371,7 @@ Ctrl.P ldy #FileY+1 dey pla sta (pData),y - + >LDA.G ViewPortH clc >ADC.G ScreenY @@ -380,7 +380,7 @@ Ctrl.P ldy #FileY+1 lda (pData),y adc #0 sta (pData),y - + >STZ.G FileX >STA.G ScreenX @@ -409,16 +409,16 @@ Ctrl.Y jsr BUF.GetNextLine >LDA.G FileY+1 sbc #0 bcs .2 - + >LDA.G FileY tax lda #0 - + .2 >STA.G ScreenY+1 dey txa sta (pData),y - + jmp SCRN.UpdateMainAndStatus *-------------------------------------- Ctrl.F >LDYA L.DLG.FIND @@ -427,10 +427,10 @@ Ctrl.F >LDYA L.DLG.FIND cmp #C.CR bne .8 - + .8 jsr DLG.Close - + clc rts *-------------------------------------- @@ -443,7 +443,7 @@ Ctrl.R clc *-------------------------------------- Ctrl.Q >LDA.G bUnSaved beq .8 - + >STZ.G bUpdateStatus jsr SCRN.ResetStatusBar @@ -453,28 +453,28 @@ Ctrl.Q >LDA.G bUnSaved >PUSHBI 0 jsr SCRN.LineBufSprintf bcs .9 - + jsr SCRN.LineBufOut bcs .9 .1 jsr GetCh bcs .9 - + cmp #'a bcc .2 cmp #'z'+1 bcs .2 - + eor #$20 - + .2 cmp #'Y' beq .8 - + cmp #'N' beq .80 - + bra .1 - + .8 lda #$ff >STA.G bExit @@ -488,16 +488,16 @@ Ctrl.S >LDYA L.DLG.SAVE jsr DLG.Run pha - + jsr DLG.Close - + pla cmp #C.CR bne .8 - + jsr FILE.Save bcc .1 - + pha jsr SCRN.ResetStatusBar @@ -508,22 +508,22 @@ Ctrl.S >LDYA L.DLG.SAVE bra .2 .1 jsr SCRN.ResetStatusBar - + >PUSHW LineBufPtr >PUSHW L.MSG.STATUSBAR.S >LDA.G hFileName >SYSCALL GetMemPtr >PUSHYA - + >PUSHBI 2 - + .2 jsr SCRN.LineBufSprintf jsr SCRN.LineBufOut bcs .9 .8 jsr SCRN.UpdateTopBar - + jmp SCRN.GotoCurXCurY .9 rts @@ -554,6 +554,7 @@ Ctrl.FS jsr BUF.GetLine *-------------------------------------- Ctrl.V jsr BUF.InsertClipboard bcs .9 + jsr SCRN.UnSaved jmp SCRN.UpdateMainAndStatus @@ -572,8 +573,10 @@ Ctrl.W jsr BUF.ComputeCOffset Y=line len ply Get back line len clc lda (BufPtr),y - beq .1 last line \0 ending + beq .1 last line \0 ending + sec delete CR + .1 tya adc BUF.LOffset @@ -592,11 +595,13 @@ Ctrl.X jsr BUF.SelToClipboard Ctrl.D jsr BUF.DelSel bcs Ctrl.D.8 + jsr BUF.ResetSel jsr SCRN.CursorAdjust + jsr SCRN.UpdateViewPort jsr SCRN.UnSaved will update TopBar jmp SCRN.UpdateMainAndStatus - + Ctrl.D.8 clc rts *-------------------------------------- @@ -605,6 +610,7 @@ Ctrl.Z jsr BUF.ComputeCOffset lda BUF.COffset eor FileLen bne .1 + lda BUF.COffset+1 eor FileLen+1 beq Ctrl.D.8 @@ -619,11 +625,11 @@ Ctrl.Z jsr BUF.ComputeCOffset >CMP.G ViewPortHm1 beq .8 Bottom line, all done - + dec >CMP.G ViewPortHm1 beq .8 No scroll needed - + >PUSHW L.SEQ.SCROLLCURUP >LDA.G CurY inc @@ -638,20 +644,20 @@ Ctrl.Z jsr BUF.ComputeCOffset jsr SCRN.ResetScrollRgn bcs .9 - + jsr SCRN.UpdateCurrentLine bcs .9 jsr SCRN.UpdateLast bcs .9 - + .8 jsr SCRN.UpdateCurrentLine bcs .9 .80 jsr SCRN.UnSaved jsr SCRN.GotoCurXCurY jmp SCRN.UpdateStatusBar -.9 rts +.9 rts *-------------------------------------- MAN SAVE usr/src/bin/edit.s.ctrl diff --git a/BIN/EDIT.S.SCRN.txt b/BIN/EDIT.S.SCRN.txt index a17ee051..04784420 100644 --- a/BIN/EDIT.S.SCRN.txt +++ b/BIN/EDIT.S.SCRN.txt @@ -474,13 +474,20 @@ SCRN.ResetStatusBar *-------------------------------------- SCRN.CursorAdjust .1 jsr BUF.ComputeCOffset - bcc .8 - >DECW.G FileY - >STZ.G FileX + bcc .2 Y = linelen + >DECW.G FileY +* >STZ.G FileX bra .1 -.8 rts +.2 tya + >CMP.G FileX + bcs .8 + + >STA.G FileX + +.8 clc + rts *-------------------------------------- SCRN.GotoCurXCurY ldy #CurX diff --git a/INC/IO.D2.I.txt b/INC/IO.D2.I.txt index 944c89bd..3061674f 100644 --- a/INC/IO.D2.I.txt +++ b/INC/IO.D2.I.txt @@ -1,11 +1,11 @@ NEW AUTO 3,1 *-------------------------------------- -IO.D2.SeekTimeR .EQ 42 LIBBLKDEV Recalibration -IO.D2.SeekTimeF .EQ 56 LIBBLKDEV Track Formatter -IO.D2.SeekTimeB .EQ 56 LIBBLKDEV Boot Block -IO.D2.SeekTimeP .EQ 28 ProDOS.FX initial -IO.D2.SeekTimeI .EQ 14 ProDOS.FX increment -> until > 128 +IO.D2.SeekTimeR .EQ 45 LIBBLKDEV Recalibration +IO.D2.SeekTimeF .EQ 75 LIBBLKDEV Track Formatter +IO.D2.SeekTimeB .EQ 52 LIBBLKDEV Boot Block +IO.D2.SeekTimeP .EQ 32 ProDOS.FX initial +IO.D2.SeekTimeI .EQ 10 ProDOS.FX increment -> until > 128 *-------------------------------------- IO.D2.Ph0Off .EQ $C080 IO.D2.Ph0On .EQ $C081 diff --git a/INCLUDE/stdio.h.txt b/INCLUDE/stdio.h.txt index 044d4b7f..0d9d280e 100644 --- a/INCLUDE/stdio.h.txt +++ b/INCLUDE/stdio.h.txt @@ -16,7 +16,7 @@ NEW #define SEEK_END 2 short int fopen(const char*,short int,short int,int); -int fastcall fclose(short int); +short int fastcall fclose(short int); int fread(short int,void*,int); int fwrite(short int,const void*,int); diff --git a/LIB/LIBBLKDEV.S.D2.txt b/LIB/LIBBLKDEV.S.D2.txt index 55dab790..2923d8a7 100644 --- a/LIB/LIBBLKDEV.S.D2.txt +++ b/LIB/LIBBLKDEV.S.D2.txt @@ -30,19 +30,19 @@ D2.Recalibrate >PULLB D2.DrvSlt lda #IO.D2.SeekTimeR jsr D2.Wait100usecA - lda #168 41 x 4 Qtracks + lda #160 40 x 4 Qtracks + + php + sei .1 dec dec pha - and #6 - ora D2.Slotn0 phy plx - tay - lda IO.D2.Ph0On,y + jsr D2.SeekPhOnY lda #IO.D2.SeekTimeR jsr D2.Wait100usecA @@ -59,9 +59,12 @@ D2.Recalibrate >PULLB D2.DrvSlt lda IO.D2.Ph0Off,y - jsr D2.Wait25600usec + plp + +* clc + + jmp D2.Wait25600usec - clc .9 rts */-------------------------------------- *\-------------------------------------- @@ -105,30 +108,30 @@ D2.MoveHead >PULLB D2.TargetQTrack D2.MoveHead.SEI lda D2.CurrentQTrack - bit #1 + bit #1 A = Current QT beq .2 we are on 0/4 or 2/4 track pha cmp D2.TargetQTrack we are on 1/4 or 3/4 track bcc .1 if CC, C < T, must move in - + inc move out: X = Ph(N+1) - + .1 jsr D2.SeekPhOnY move in : X = Ph(N) tya tax pla - + bcs .2 if CS, C > T, must move out inc move in : Y = Ph(N+1) .2 jsr D2.SeekPhOnY move out: Y = Ph(N) - bra .9 no wait + bra .9 Ph ON to go to 0/4 or 2/4, no wait *-------------------------------------- .3 bcs .4 if CS, C > T, must move out @@ -156,6 +159,7 @@ D2.MoveHead.SEI lda D2.CurrentQTrack .6 jsr D2.SeekPhOnY now X and Y on .8 lda #IO.D2.SeekTimeF + jsr D2.Wait100usecA ...wait... .9 lda D2.CurrentQTrack @@ -166,13 +170,15 @@ D2.MoveHead.SEI lda D2.CurrentQTrack jsr D2.Wait25600usec + lda IO.D2.Ph0Off,y + bcc .10 + + clc lda IO.D2.Ph0Off,x - - clc -.10 lda IO.D2.Ph0Off,y +.10 jsr D2.Wait25600usec rts *-------------------------------------- @@ -444,7 +450,7 @@ D2.Wait25600usec D2.Wait100usecA phx -.1 ldx #20 (2) +.1 ldx #19 (2) .2 dex (2) bne .2 (3) diff --git a/ProDOS.FX/ProDOS.S.XRW.txt b/ProDOS.FX/ProDOS.S.XRW.txt index 3b152c90..780292cf 100644 --- a/ProDOS.FX/ProDOS.S.XRW.txt +++ b/ProDOS.FX/ProDOS.S.XRW.txt @@ -54,7 +54,7 @@ XRW.START cld $D8 to flag language card bank 1 (main) *-------------------------------------- XRW.Blk2TS lda bloknml sta XRW.ReqTrack - + and #7 cmp #4 php @@ -63,9 +63,9 @@ XRW.Blk2TS lda bloknml plp rol sta XRW.ReqSector - + lda bloknml+1 - + ldx #3 .1 lsr @@ -165,7 +165,7 @@ XRW.Cmd lda A4L get command # jsr XRW.Recalibrate bcc .3 - + bcs XRW.E.IO .4 inc buf+1 @@ -207,7 +207,7 @@ XRW.SectorIO bit XRW.bWrite .1 stz XRW.RetryCnt -.2 jsr XRW.ReadAddr +.2 jsr XRW.ReadAddr (..14) bcs .3 (2) lda XRW.AddrField.S (4) @@ -390,17 +390,18 @@ XRW.TestWP ldx A2L * writes data from nbuf1 and buf. first nbuf2, high to low then direct * from (buf), low to high. assumes 1 usec cycle time. self modified code !! * -* on entry: x = slotnum times 16 +* on entry: x = slotnum times 16 (35us since read $DE) *-------------------------------------- .LIST ON -XRW.Write bit IO.D2.ReadProt,x (4) PREWRITE MODE +XRW.Write lda IO.D2.ReadProt,x (4) PREWRITE MODE .LIST OFF - bit IO.D2.ReadMode,x (4) - - lda #$FF (2) + lda IO.D2.ReadMode,x (4) + + jsr XRW.Write.RTS (12) nop (2) - nop (2) + + lda #$FF (2) sta IO.D2.WriteMode,x (5) goto write mode ora IO.D2.WShift,x (4) @@ -408,7 +409,7 @@ XRW.Write bit IO.D2.ReadProt,x (4) PREWRITE MODE ldy nbuf2 (4) sty pcl (3) - ldy #5 (2) + ldy #6 (2) nop (2) .1 pha (3) exact timing. @@ -535,15 +536,12 @@ wrefd5 ldx #$60 (2) restore slot. warning: modified by prenib bpl .1 (3) if not. bmi .2 (3) + .2 nop (2) tya (2) Y = $FF from DEY BMI jsr wnibl (11..10) write turn off byte. -* jsr XRW.Write.RTS (12) -* jsr XRW.Write.RTS (12) -* nop (2) - XRW.ReadMode lda IO.D2.ReadMode,x (4) out of write mode lda IO.D2.WShift,x (4) to read mode. @@ -567,11 +565,11 @@ XRW.Wait25600usec .HS 2C BIT ABS XRW.Wait100usec lda #1 - + XRW.Wait100usecA phx -.1 ldx #20 (2) +.1 ldx #17 (2) .2 dex (2) bne .2 (3) @@ -663,14 +661,13 @@ XRW.ReadAddr ldy #$FC tay if final checksum non-zero, bne .99 (2) then error. - clc (2) - .9 lda IO.D2.RData,x (4) bpl .9 (2) eor #$DE (2) bne .99 (2) + clc (2) rts (6) .99 sec @@ -692,7 +689,7 @@ XRW.TrackSelect lda #2 jsr XRW.Recalibrate bcc .1 - + rts *-------------------------------------- .4 ldx XRW.UnitIndex @@ -713,15 +710,15 @@ XRW.TrackSelect lda #2 lda XRW.ReqTrack and #1 - + rol A = 0/2 - + ora A2L tay y = n0/n2 - + lda IO.D2.Ph0On,y lda IO.D2.Ph0On+4,y - + jsr XRW.Wait100usec lda IO.D2.Ph0Off,y @@ -748,7 +745,7 @@ XRW.TrackSelect lda #2 sta XRW.SeekTime sta XRW.D2SeekTime-1,x - + .7 ldy XRW.D2Trk-1,x From actual Pos... lda XRW.ReqTrack ....to Req jsr XRW.SeekYA X = XRW.UnitIndex @@ -762,12 +759,12 @@ XRW.TrackSelect.RTS XRW.Recalibrate sec dec XRW.RecalibrateCnt beq XRW.TrackSelect.RTS - + ldx XRW.UnitIndex - ldy #41 from 41... (4/4) + ldy #40 from 40... (4/4) lda #0 ....to 0 - sta XRW.D2VolNum-1,x reset volnum for seeking 41 4/4 tracks + sta XRW.D2VolNum-1,x reset volnum for seeking 40->0 4/4 tracks *-------------------------------------- XRW.SeekYA sta XRW.D2Trk-1,x will be current track at the end @@ -802,7 +799,7 @@ XRW.SeekYA sta XRW.D2Trk-1,x will be current track at the end .2 jsr XRW.SeekPhOnY move out: Y = Ph(N) - bra .9 no wait + bra .9 Ph ON to go to 0/4 or 2/4, no wait *-------------------------------------- .3 bcs .4 if CS, C > T, must move out @@ -819,17 +816,18 @@ XRW.SeekYA sta XRW.D2Trk-1,x will be current track at the end lda IO.D2.Ph0Off,x we must go to 0/4 or 2/4 : PhX Off bra .8 go wait.... - + .5 phy we must go on 1/4 or 3/4 plx Y already ON, -> X for Ph0Off,x - + bcs .6 if CS, C > T, must move out inc CC: C < T, ON next PH .6 jsr XRW.SeekPhOnY now X and Y on -.8 lda #IO.D2.SeekTimeF XRW.SeekTime +.8 lda XRW.SeekTime + jsr XRW.Wait100usecA ...wait... .9 lda XRW.CurrentQTrack @@ -837,18 +835,18 @@ XRW.SeekYA sta XRW.D2Trk-1,x will be current track at the end bne .3 lsr CS if X,Y on - + jsr XRW.Wait25600usec + lda IO.D2.Ph0Off,y + bcc .10 - lda IO.D2.Ph0Off,x - clc Exit wit CC (recalibrate) - -.10 lda IO.D2.Ph0Off,y - rts + lda IO.D2.Ph0Off,x + +.10 rts *-------------------------------------- XRW.SeekPhOnY and #6 ora A2L @@ -857,7 +855,7 @@ XRW.SeekPhOnY and #6 rts *-------------------------------------- * In: -* A = Logical Track 0 -> 159, +* A = Logical Track 0 -> 159, * X = XRW.UnitIndex * D2VolNum : d0000sss * Out: @@ -872,8 +870,8 @@ XRW.Trk2Qtrk sta pch asl asl rts - -.1 bpl .2 + +.1 bpl .2 cmp #$85 bcs .10 > 192 ? must be a buggy 254 @@ -882,16 +880,16 @@ XRW.Trk2Qtrk sta pch .2 phx and #%00000111 stepping tax - + lda #0 clc - + .3 adc pch dex bne .3 - + plx - + .8 rts *-------------------------------------- * preniblize subroutine (16 sector format) diff --git a/SHARED/X.BB.FX2.S.txt b/SHARED/X.BB.FX2.S.txt index 49a8d9be..d837fd70 100644 --- a/SHARED/X.BB.FX2.S.txt +++ b/SHARED/X.BB.FX2.S.txt @@ -262,29 +262,29 @@ BB.FX2.SeekReadD2 cmp BB.TargetQTrack beq BB.FX2.ReadSectD2 - bit #1 + bit #1 A = Current QT beq .2 we are on 0/4 or 2/4 track - + pha bcc .1 if CC, C < T, must move in - - inc -.1 jsr BB.FX2.SeekPhOnY move in : X = Ph(N) - + inc move out: X = Ph(N+1) + +.1 jsr BB.FX2.SeekPhOnY move in : X = Ph(N) + tya tax - + pla - + bcs .2 if CS, C > T, must move out inc move in : Y = Ph(N+1) .2 jsr BB.FX2.SeekPhOnY move out: Y = Ph(N) - bra .9 Ph ON to go to 0/4 or 2/4, then wait + bra .9 Ph ON to go to 0/4 or 2/4, no wait *-------------------------------------- .3 bcs .4 if CS, C > T, must move out @@ -312,6 +312,7 @@ BB.FX2.SeekReadD2 .6 jsr BB.FX2.SeekPhOnY now X and Y on .8 lda #IO.D2.SeekTimeB + jsr BB.Wait100usecA ...wait... .9 lda BB.CurrentQTrack @@ -323,11 +324,15 @@ BB.FX2.SeekReadD2 lda #0 jsr BB.Wait100usecA + lda IO.D2.Ph0Off,y + bcc .10 + clc + lda IO.D2.Ph0Off,x -.10 lda IO.D2.Ph0Off,y +.10 *-------------------------------------- BB.FX2.ReadSectD2 ldx ROM.D2.Slotn0 @@ -455,7 +460,7 @@ goseek jmp BB.FX2.SeekReadD2 *-------------------------------------- BB.Wait100usecA phx (3) -.1 ldx #20 (2) +.1 ldx #19 (2) .2 dex (2) bne .2 (3) diff --git a/SYS/KERNEL.S.STDIO.txt b/SYS/KERNEL.S.STDIO.txt index 3f7a4d75..a087ef50 100644 --- a/SYS/KERNEL.S.STDIO.txt +++ b/SYS/KERNEL.S.STDIO.txt @@ -234,6 +234,7 @@ K.FGetS ldy #3 inc ZPPtr1 bne .4 + inc ZPPtr1+1 bne .4 @@ -262,6 +263,7 @@ K.FGetS ldy #3 .8 lda #0 sta (ZPPtr2) terminate string + tay return NULL (TODO: return s) clc .9 >RET 5 */-------------------------------------- @@ -372,23 +374,23 @@ K.FOpen jsr PFT.CheckPath4 bcs K.FOpen.99 ldx IO.hFILE - + lda (pFD) bne K.FOpen.8 - + K.FOpen.REGDIR >LDYAI K.Buf256 - >SYSCALL2 StrDup + >SYSCALL2 StrDup bcs K.FOpen.90 - + txa ldx IO.hFILE sta hFDs.hName-1,x - + K.FOpen.8 inc hFDs.oCnt-1,x txa -* clc +* clc rts - + K.FOpen.90 pha jsr UNISTD.Close pla @@ -416,31 +418,31 @@ K.FClose jsr PFT.CheckNodeA ldx IO.hFILE dec hFDs.oCnt-1,x bne .8 - + lda hFDs.hName-1,x its a DEV, don't clear FD beq .8 stz hFDs.hName-1,x jsr K.FreeMem - + lda (pFD) tay - + ldx IO.hFILE lda hFDs-1,x beq .8 - + stz hFDs-1,x - + cpy #S.FD.T.DSOCK SOCKS will free FDs beq .8 - + cpy #S.FD.T.SSOCK beq .8 jmp K.FreeMem - + .8 clc rts */-------------------------------------- @@ -534,15 +536,18 @@ K.FSeek ldy #5 jsr PFT.CheckNodeY bcc .11 - >RET 5 + >RET 6 -.11 lda (pFD) - bne STDIO.IOERR - - >PULLA whence +.11 >PULLA whence tax - >PULLL ACC32 + >PULLL ACC32 offset + + inc pStack discard hFile + + lda (pFD) + bne STDIO.IOERR + cpx #SEEK.END beq .30 @@ -582,10 +587,13 @@ K.FSeek ldy #5 .82 >MLICALL MLISETMARK bcc .9 + cmp #MLI.E.BEYEOF bne .9 + >MLICALL MLISETEOF bcc .82 + .9 rts .98 lda #E.BADARG