diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index dbe59bcc..ae7e0668 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/BIN/ASM.S.DIR.txt b/BIN/ASM.S.DIR.txt index 6ce2d9f8..0b73012d 100644 --- a/BIN/ASM.S.DIR.txt +++ b/BIN/ASM.S.DIR.txt @@ -293,7 +293,11 @@ DIR.EQ >LDA.G SYM.bNewGlobal jsr SRC.GetNextCharNB bcs .99 - jmp EXP.Eval + jsr EXP.Eval + bcs .9 + + jsr SYM.Acc2Global + jmp SYM.StoreGlobal .99 lda #ERR.SYNTAX.ERROR sec diff --git a/BIN/ASM.S.EXP.txt b/BIN/ASM.S.EXP.txt index 0e096952..804ff254 100644 --- a/BIN/ASM.S.EXP.txt +++ b/BIN/ASM.S.EXP.txt @@ -194,16 +194,19 @@ EXP.GetSymL jsr SRC.GetNextChar ora SRC.ACC+2 ora SRC.ACC+3 bne EXP.EvalExitSYN Max .255 - lda SRC.ACC + ldx SRC.ACC beq EXP.EvalExitSYN .0 is not allowed - jsr SYM.LookupLocal + jsr SYM.GetLocalX bcc .8 >LDA.G ASM.PASS pass#2? bne EXP.EvalExitUND - lda #0 Mark ACC as pending - sta SRC.ACC.SIZE + + lda #SYMG.F.FWREF Mark ACC as pending + sta SRC.ACC.F + stz SRC.ACC.SIZE + clc rts @@ -214,7 +217,7 @@ EXP.GetSymL jsr SRC.GetNextChar EXP.GetSymG jsr SYM.LookupGlobal bcs .2 - jsr SYM.Lookup2Acc +* jsr SYM.Lookup2Acc clc rts diff --git a/BIN/ASM.S.SRC.txt b/BIN/ASM.S.SRC.txt index 71ddcc64..6c306dad 100644 --- a/BIN/ASM.S.SRC.txt +++ b/BIN/ASM.S.SRC.txt @@ -361,7 +361,7 @@ SRC.ParseLine.AM .74 lda SRC.ACC.SIZE beq .72 Pending...assume 2 bytes... - + tax .73 lda SRC.ACC-1,x @@ -391,9 +391,8 @@ SRC.ParseLine.AM *--------------------------------------- SRC.ParseLine.AMCheck * jsr OUT.PrintLine.1 -* >PUSHW L.SRC.AM.StrBuf -* >LDYA L.MSG.PSTRCRLF -* >SYSCALL printf +* >LDYA L.SRC.AM.StrBuf +* >SYSCALL puts * >DEBUG lda SRC.AM.StrBuf beq SRC.ParseLine.OPAMCheckFF diff --git a/BIN/ASM.S.SYM.txt b/BIN/ASM.S.SYM.txt index 68d0ee33..247bd97f 100644 --- a/BIN/ASM.S.SYM.txt +++ b/BIN/ASM.S.SYM.txt @@ -63,79 +63,80 @@ SYM.Quit >LDA.G SYM.hLookupBuf beq .3 >SYSCALL FreeMem + .3 >LDA.G SYM.hGlobalList - beq .8 + beq SYM.Quit.8 >SYSCALL SListFree -.8 clc - rts +SYM.Quit.8 clc +SYM.Quit.RTS rts *--------------------------------------- -SYM.Dump stz ZPPtr2 - stz ZPPtr2+1 - - >LDA.G ASM.LI.ON - bpl .1 +SYM.Dump >LDA.G ASM.LI.ON + bpl SYM.Quit.8 >LDYA L.MSG.SYMBOLS >SYSCALL puts -.1 >PUSHW ZPNameBuf + stz ZPPtr2 + stz ZPPtr2+1 + +.1 >LDYA ZPPtr2 + >STYA ZPPtr1 + + >PUSHW ZPNameBuf >PUSHW ZPPtr1 >LDA.G SYM.hGlobalList >SYSCALL SListGetByID - bcc .10 + bcs SYM.Quit.8 - clc - rts - -.10 >STYA ZPPtr2 Save Next ID + >STYA ZPPtr2 Save Next ID >PUSHW ZPNameBuf Label (PString) >PUSHBI 2 >LDYA L.MSG.PSTR >SYSCALL printf - bcs .9 +.9 bcs SYM.Quit.RTS >PUSHWI 0 Start >PUSHWI $ffff End - >PUSHWI 0 Allocate - >PUSHW ZPPtr1 + >PUSHW ZPGlobalBuf + >PUSHW ZPPtr1 KeyID >LDA.G SYM.hGlobalList >SYSCALL SListGetData bcs .9 - txa - >STA.G hBuf - - ldy #SYMG.F Get Symbol Size + ldy #SYMG.SIZE Get Symbol Size lda (ZPGlobalBuf),y -* and #SYMG.F.SIZE - >PUSHA Byte Count tax beq .3 - asl - pha - + phx + .2 iny lda (ZPGlobalBuf),y >PUSHA dex bne .2 - plx - -.3 ldy L.MSG.EQU0,x + pla Byte Count + asl + tax + +.3 >PUSHA + + ldy L.MSG.EQU0,x lda L.MSG.EQU0+1,x >SYSCALL printf - ldy #SYMG.SIZE - -.4 tya + lda (ZPGlobalBuf) + bit #SYMG.F.LOCALS + beq .7 - cmp (ZPGlobalBuf) - beq .7 No Local Symbol + ldy #SYMG + +.4 lda (ZPGlobalBuf),y + beq .7 End Local Symbol iny lda (ZPGlobalBuf),y Get ID @@ -162,16 +163,15 @@ SYM.Dump stz ZPPtr2 >LDYA L.MSG.CRLF >SYSCALL printf jmp .1 - rts - -.8 clc -.9 rts *--------------------------------------- SYM.NewOrGetGlobal >LDA.G ASM.PASS bne SYM.GetGlobal -SYM.NewGlobal >PUSHW ZPLinePtr Pass #1; try to add global... +SYM.NewGlobal jsr SYM.StoreGlobal + bcs .99 + + >PUSHW ZPLinePtr Pass #1; try to add global... >LDA.G SYM.hGlobalList >SYSCALL SListNewKey bcs .9 Already Defined @@ -184,10 +184,19 @@ SYM.NewGlobal >PUSHW ZPLinePtr Pass #1; try to add global... inc ZPLinePtr+1 -.1 lda #$ff +.1 jsr SYM.PC2Acc + + jsr SYM.Acc2Global + + lda #SYMG + + >STA.G SYM.GlobalPtr + + lda #$ff >STA.G SYM.bNewGlobal - - jmp SYM.PC2Acc + + clc + rts .9 lda #ERR.SYMBOL.REDEF sec @@ -206,8 +215,12 @@ SYM.GetGlobal >PUSHW ZPLinePtr Pass #2: should be already defined... inc ZPLinePtr+1 -.1 - clc +.1 >PUSHWI 0 Start + >PUSHWI $ffff End + >PUSHWI ZPGlobalBuf + >PUSHW SYM.GlobalID + >LDA.G SYM.hGlobalList + >SYSCALL SListGetData rts .9 lda #ERR.UNDEF.SYMBOL @@ -219,27 +232,62 @@ SYM.LookupGlobal >LDA.G SYM.hGlobalList >SYSCALL SListLookup bcs .9 - >STYA.G SYM.GlobalID + + phy + pha + txa adc ZPLinePtr sta ZPLinePtr - bcc .8 + bcc .1 inc ZPLinePtr+1 - clc -.8 -.9 rts + +.1 >PUSHWI 0 Start + >PUSHWI SYMG + >PUSHW L.SRC.ACC.F + pla + ply + >PUSHYA + >LDA.G SYM.hGlobalList + >SYSCALL SListGetData + rts + +.9 lda #ERR.UNDEF.SYMBOL + sec + rts *--------------------------------------- SYM.StoreGlobal >LDA.G ASM.PASS bne .8 - >PUSHWI 5 - >PUSHW L.SRC.ACC.SIZE + >LDA.G SYM.StoreGlobal + bpl .8 + + >LDA.G SYM.GlobalPtr + tay + lda #0 + cpy #SYMG + beq .1 + + lda #SYMG.F.LOCALS + tsb SRC.ACC.F + + lda #0 + sta (ZPGlobalBuf),y + iny + bne .1 + inc + +.1 >PUSHYA + +.2 >PUSHW ZPGlobalBuf >PUSHW.G SYM.GlobalID >LDA.G SYM.hGlobalList >SYSCALL SListAddData bcs .9 + lda #0 + >STA.G SYM.bNewGlobal rts @@ -253,10 +301,20 @@ SYM.PC2Acc ldy #ASM.PC+3 dey bpl .1 - lda #4 + lda #2 sta SRC.ACC.SIZE rts *--------------------------------------- +SYM.Acc2Global ldy #0 + +.2 lda SRC.ACC.F,y + sta (ZPGlobalBuf),y + + iny + cpy #SYMG + bne .2 + rts +*--------------------------------------- SYM.Lookup2Acc ldy #SYMG.F+4 ldx #4 @@ -281,23 +339,18 @@ SYM.NewOrGetLocalA tax Save ID >LDA.G SYM.bNewGlobal not in a global label - bmi .1 + bpl .91 - lda #ERR.INV.LABEL - clc - rts - -.1 >LDA.G ASM.PASS - bne SYM.LookupLocal.1 Pass #2: should be already defined... + >LDA.G ASM.PASS + bne SYM.GetLocalX -SYM.NewLocal jsr SYM.LookupLocal.1 Pass #1; try to add + jsr SYM.GetLocalX Pass #1; try to add bcc .9 Already Defined - lda (ZPGlobalBuf) + >LDA.G SYM.GlobalPtr tay - clc - adc #SYML.SIZE - bcs .90 + inc + beq .90 ldy #ASM.PC+4 @@ -312,9 +365,8 @@ SYM.NewLocal jsr SYM.LookupLocal.1 Pass #1; try to add iny txa Get Back ID - sta (ZPGlobalBuf),y - + ldx #4 .2 pla @@ -324,55 +376,55 @@ SYM.NewLocal jsr SYM.LookupLocal.1 Pass #1; try to add bne .2 tya - sta (ZPGlobalBuf) + >STA.G SYM.GlobalPtr clc rts - + +.91 lda #ERR.INV.LABEL + sec + rts + .90 lda #ERR.TOO.MANY.LOCAL -* sec + sec rts .9 lda #ERR.SYMBOL.REDEF sec rts *--------------------------------------- -SYM.LookupLocal tax -SYM.LookupLocal.1 - ldy #SYMG.SIZE +SYM.GetLocalX >LDA.G SYM.GlobalPtr Pass #2: should be already defined... + + beq .9 - tya - -.1 cmp (ZPGlobalBuf) - beq .9 CS if = - - txa - iny - cmp (ZPGlobalBuf),y - beq .2 - - tya - clc - adc #SYML.SIZE-1 tay - bcc .1 -.9 lda #ERR.UNDEF.SYMBOL -* sec - rts - -.2 ldx #0 - -.3 iny - - lda (ZPGlobalBuf),y - sta SRC.ACC,x - inx - cpx #4 +.1 txa + cmp (ZPGlobalBuf),y bne .3 + ldx #4 + stx SRC.ACC.SIZE + +.2 iny + lda (ZPGlobalBuf),y + sta SRC.ACC.SIZE,x + dex + bne .2 + clc rts + +.3 tya + clc + adc #SYML + tay + inc + bne .1 + +.9 lda #ERR.UNDEF.SYMBOL + sec + rts *--------------------------------------- * Private Symbol Record: (9 bytes) * 0 : Len (8) diff --git a/BIN/ASM.S.txt b/BIN/ASM.S.txt index 95a75e3b..d5d2c502 100644 --- a/BIN/ASM.S.txt +++ b/BIN/ASM.S.txt @@ -12,43 +12,42 @@ AUTO 4,1 .DUMMY .OR ZPBIN ZS.START -ZPPtr1 .EQ ZPBIN -ZPPtr2 .EQ ZPBIN+2 +ZPPtr1 .BS 2 +ZPPtr2 .BS 2 -ZPLineBuf .EQ ZPBIN+4 -ZPLinePtr .EQ ZPBIN+6 -ZPNameBuf .EQ ZPBIN+8 -ZPGlobalBuf .EQ ZPBIN+10 -ZPLookupBuf .EQ ZPBIN+12 +ZPLineBuf .BS 2 +ZPLinePtr .BS 2 +ZPNameBuf .BS 2 +ZPGlobalBuf .BS 2 -ZPMacroBuf .EQ ZPBIN+14 -ZPCtxBuf .EQ ZPBIN+16 +ZPLookupBuf .BS 2 -ZPAMPtr .EQ ZPBIN+18 -ZPRPtr .EQ ZPBIN+20 -ZPOpsPtr .EQ ZPBIN+22 -ZPOpDefPtr .EQ ZPBIN+24 +ZPMacroBuf .BS 2 +ZPCtxBuf .BS 2 -ZPTmpBuf .EQ ZPBIN+26 +ZPAMPtr .BS 2 +ZPRPtr .BS 2 +ZPOpsPtr .BS 2 +ZPOpDefPtr .BS 2 + +ZPTmpBuf .BS 2 ZS.END .ED *--------------------------------------- * Symbols *--------------------------------------- -SYM.F.PENDING .EQ %10000000 -SYM.F.RW .EQ %01000000 -*--------------------------------------- -SYMG.TYPE .EQ 0 1,2,3,4 -SYMG.TYPE.S .EQ $ff String -SYMG.F .EQ 1 +SYMG.F .EQ 0 +SYMG.F.FWREF .EQ %10000000 +SYMG.F.RW .EQ %01000000 +SYMG.F.LOCALS .EQ %00100000 +SYMG.SIZE .EQ 1 1,2,3,4 SYMG.V .EQ 2 * -SYMG.SIZE .EQ 6 DWORD +SYMG .EQ 6 DWORD *--------------------------------------- SYML.ID .EQ 0 1..255 -SYML.F .EQ 1 -SYML.V .EQ 2 DWORD +SYML.V .EQ 1 DWORD * -SYML.SIZE .EQ 6 +SYML .EQ 5 *--------------------------------------- MCTX.LEN .EQ 0 MCTX.PTR .EQ 1 @@ -137,7 +136,7 @@ L.SRC.AM.StrBuf .DA SRC.AM.StrBuf L.ASM.6502 .DA ASM.6502 L.ASM.T.FILENAME .DA ASM.T.FILENAME L.FIO.Stat .DA FIO.Stat -L.SRC.ACC.SIZE .DA SRC.ACC.SIZE +L.SRC.ACC.F .DA SRC.ACC.F L.T.DIRECTIVES .DA T.DIRECTIVES J.DIRECTIVES .DA DIR.AC .DA DIR.AS @@ -476,6 +475,7 @@ ASM.T.FILENAME .BS 65 FIO.Stat .BS S.STAT +SRC.ACC.F .BS 1 SRC.ACC.SIZE .BS 1 SRC.ACC .BS 4 @@ -538,15 +538,14 @@ ASM.PC.PH .BS 4 ASM.PC.DU .BS 4 SYM.hGlobalList .BS 1 -SYM.hNameBuf .BS 1 -SYM.hGlobalBuf .BS 1 -SYM.GlobalID .BS 2 SYM.bNewGlobal .BS 1 +SYM.GlobalID .BS 2 +SYM.hGlobalBuf .BS 1 +SYM.GlobalPtr .BS 1 + +SYM.hNameBuf .BS 1 SYM.hLookupBuf .BS 1 -SYM.hBuf .BS 1 - -SYM.LocalID .BS 2 MAC.hMacroList .BS 1 MAC.hMacroBuf .BS 1