diff --git a/.Docs/KERNEL.md b/.Docs/KERNEL.md index 791ca9b1..7267c211 100644 --- a/.Docs/KERNEL.md +++ b/.Docs/KERNEL.md @@ -293,6 +293,7 @@ Create a new copy of this C-String ## Out: + A = Key Length ++ X,Y = KeyID # SListLookup @@ -313,7 +314,7 @@ Create a new copy of this C-String + PUSHW = Data Ptr (KEY+DATA) ## Out: -+ Y,A = Next ID ++ X,Y = Next KeyID # SListUpdateByID diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 55095007..a660e498 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/.Floppies/A2OSX.SRC.po b/.Floppies/A2OSX.SRC.po index e51c2365..4f1374d3 100644 Binary files a/.Floppies/A2OSX.SRC.po and b/.Floppies/A2OSX.SRC.po differ diff --git a/BIN/ASM.S.DIR.txt b/BIN/ASM.S.DIR.txt index b6c2ffa6..fbe91999 100644 --- a/BIN/ASM.S.DIR.txt +++ b/BIN/ASM.S.DIR.txt @@ -138,7 +138,7 @@ DIR.ED clc DIR.EL clc rts *--------------------------------------- -DIR.EM lda #ERR.INV.MACRO.DEF +DIR.EM lda #ERR.MACRO.INV.DEF sec rts *--------------------------------------- @@ -267,7 +267,7 @@ DIR.LI.ON ldy #ASM.LI.ON bra DIR.LI.APPLY DIR.LI.OFF ldy #ASM.LI.ON clc -DIR.LI.APPLY lsr +DIR.LI.APPLY asl sta (pData),y clc @@ -277,63 +277,26 @@ DIR.LI.9 lda #ERR.SYNTAX.ERROR sec rts *--------------------------------------- -DIR.MA jsr SRC.GetNextCharNB - bcs .9 - -.1 jsr FIO.ReadLine - bcs .99 - - jsr SRC.PrintLine - - lda SRC.GetChar - beq .1 - - cmp #'*' Comment? - beq .8 - cmp #';' Comment? - beq .8 - - cmp #' ' no label...go scan dir/opcode - beq .3 +DIR.MA >LDA.G MAC.bAdd + bmi .9 -.2 jsr SRC.GetNextChar skip label - bcs .8 - - cmp #' ' - bne .2 - -.3 jsr SRC.GetNextCharNB Scan for an Opcode... - bcs .8 - - cmp #'.' + >LDA.G ASM.PASS If Pass#2, ignore bne .8 - - jsr SRC.GetNextChar - bcs .8 - - cmp #'E' - bne .8 - - jsr SRC.GetNextChar - bcs .8 - - cmp #'M' - bne .8 - clc - rts -.8 >LDA.G ASM.PASS If Pass#2, ignore - bne .1 + jsr SRC.GetNextCharNB + beq DIR.OP.SYNERR + jsr MAC.Clear +.8 lda #$ff + >STA.G MAC.bAdd - bra .1 clc rts -.9 lda #ERR.INV.MACRO.DEF +.9 lda #ERR.MACRO.INV.DEF sec -.99 rts + rts *--------------------------------------- DIR.OP jsr SRC.GetNextCharNB beq DIR.OP.SYNERR diff --git a/BIN/ASM.S.FIO.txt b/BIN/ASM.S.FIO.txt index a1d4c405..6cc95780 100644 --- a/BIN/ASM.S.FIO.txt +++ b/BIN/ASM.S.FIO.txt @@ -35,12 +35,15 @@ FIO.LOAD.ASM.T >STYA ZPPtr2 ldy #$ff -.3 iny +.2 iny inx lda (ZPPtr2),y + jsr SRC.IsLetterOrDigit + bcs .3 sta ASM.T.FILENAME,x - bne .3 + bra .2 +.3 stz ASM.T.FILENAME,x ldy #ASM.T.hMem lda (pData),y beq .4 @@ -123,7 +126,7 @@ FIO.OpenFile >STYA ZPPtr1 lda FIO.Stat+S.STAT.P.TYPE cmp #$04 TXT ? bne .2 - + >PUSHWI 0 >PUSHBI 4 >PUSHBI SYS.FOpen.R+SYS.FOpen.T @@ -149,7 +152,6 @@ FIO.OpenFile >STYA ZPPtr1 pla sta (pData),y - ldy #SRC.COUNT lda (pData),y clc @@ -163,6 +165,12 @@ FIO.OpenFile >STYA ZPPtr1 lda (pData),y inc sta (pData),y + + lda #0 + >STA.G SRC.LINENUM + iny + sta (pData),y + clc rts @@ -181,14 +189,24 @@ FIO.ReadLine >LDYA ZPLineBuf tay lda (pData),y bmi .10 - + >PUSHW ZPLineBuf >PUSHWI 256 + jsr FIO.ReadFromFile bcs .19 + tya + beq .13 + + dey + lda #0 replace ending $0D with $00 - sta (ZPLineBuf),y +.13 sta (ZPLineBuf),y + + >INC.G SRC.LINENUM + bne .19 + >INC.G SRC.LINENUM+1 .19 rts *--------------------------------------- .10 >PUSHW ZPTmpBuf @@ -198,10 +216,12 @@ FIO.ReadLine >LDYA ZPLineBuf ldy #1 lda (ZPTmpBuf),y - sta SRC.LINENUM + pha iny lda (ZPTmpBuf),y - sta SRC.LINENUM+1 + >STA.G SRC.LINENUM+1 + pla + >STA.G SRC.LINENUM lda (ZPTmpBuf) LEN sec diff --git a/BIN/ASM.S.MAC.txt b/BIN/ASM.S.MAC.txt index 3401baab..0224ec2e 100644 --- a/BIN/ASM.S.MAC.txt +++ b/BIN/ASM.S.MAC.txt @@ -19,7 +19,7 @@ MAC.Init >SYSCALL SListNew *--------------------------------------- MAC.Quit >LDA.G MAC.hBuf beq .1 - + >SYSCALL FreeMem.A .1 >LDA.G MAC.hMacros @@ -29,6 +29,35 @@ MAC.Quit >LDA.G MAC.hBuf .8 clc rts *--------------------------------------- +MAC.Clear lda #0 + tay + +.1 sta (ZPMacroBuf),y + iny + bne .1 + + rts +*--------------------------------------- +MAC.AddChar tax + lda (ZPMacroBuf) + cmp #254 + beq .9 CS if EQ + + inc + sta (ZPMacroBuf) + + tay + txa + + sta (ZPMacroBuf),y + clc +.9 rts +*--------------------------------------- +MAC.Store clc + rts +*--------------------------------------- + + MAN SAVE /A2OSX.BUILD/BIN/DEV/ASM.S.MAC LOAD /A2OSX.BUILD/BIN/DEV/ASM.S diff --git a/BIN/ASM.S.SRC.txt b/BIN/ASM.S.SRC.txt index a4ddc7cd..3bcc13ed 100644 --- a/BIN/ASM.S.SRC.txt +++ b/BIN/ASM.S.SRC.txt @@ -13,7 +13,7 @@ SRC.PrintLine >LDA.G ASM.MACRO.ON bpl .9 .8 >PUSHW ZPLineBuf - >PUSHW SRC.LINENUM + >PUSHW.G SRC.LINENUM ldy #ASM.PC+1 >PUSHB (pData),y dey @@ -53,11 +53,7 @@ SRC.PrintLineErr >PUSHW ZPLineBuf .9 rts *--------------------------------------- -SRC.ParseLine lda #0 - sta (ZPLocalBuf) - >STA.G SYM.bGlobal - - jsr SRC.GetChar +SRC.ParseLine jsr SRC.GetChar bcs .8 cmp #'*' Comment? @@ -65,6 +61,111 @@ SRC.ParseLine lda #0 cmp #';' Comment? beq .8 + >LDA.G MAC.bAdd + bmi SRC.ParseLine.MACRO + + jmp SRC.ParseLine.LABEL + +.8 clc + rts + +SRC.ParseLine.Macro >LDA.G ASM.PASS If Pass#2, ignore + bne .8 + + lda (ZPLinePtr) + cmp #' ' No label, scan to DIR/OP if any + bne .1 + + jsr SRC.GetNextCharNB + bcs .8 + + lda #' ' Store ONE blank + jsr MAC.AddChar + bcs .99 + + lda (ZPLinePtr) get back non blank char + bra .2 + +.1 jsr MAC.AddChar + bcs .99 + + jsr SRC.GetNextChar + bcs .8 + cmp #' ' + bne .1 + + jsr MAC.AddChar + bcs .99 + + jsr SRC.GetNextCharNB + bcs .8 + +.2 cmp #'.' Directive ? + bne .4 + + ldy #1 + lda (ZPLinePtr),y + beq .3 + cmp #'E' + beq .21 + cmp #'e' + bne .3 + +.21 iny + lda (ZPLinePtr),y + beq .3 + cmp #'M' + beq .22 + cmp #'m' + bne .3 + +.22 jsr MAC.Store + bcs SRC.ParseLine.RTS + + lda #0 + >STA.G MAC.bAdd + +.8 clc + rts + +.3 lda (ZPLinePtr) + +.4 jsr MAC.AddChar + bcs .99 + + jsr SRC.GetNextChar + bcs .8 + cmp #' ' + bne .4 + + jsr SRC.GetNextChar + bcs .8 + cmp #' ' + beq .8 Comments... + +.5 jsr MAC.AddChar Store ARG.... + bcs .99 + + jsr SRC.GetNextChar + bcs .8 + cmp #' ' + bne .5 + + lda #0 + jsr MAC.AddChar End of Line + clc + rts + +.99 lda #ERR.MACRO.TOO.BIG + sec + +SRC.ParseLine.RTS rts +*--------------------------------------- +SRC.ParseLine.LABEL lda #0 + sta (ZPLocalBuf) + >STA.G SYM.bGlobal + + jsr SRC.GetChar cmp #' ' no label...go scan dir/opcode beq SRC.ParseLine.DirOp @@ -84,12 +185,9 @@ SRC.ParseLine lda #0 beq SRC.ParseLine.InvLbl .0 is not allowed jsr SYM.AddLocalPC - bcs .9 + bcs SRC.ParseLine.RTS bra SRC.ParseLine.DirOp - -.8 clc -.9 rts - + .1 lda #$ff >STA.G SYM.bGlobal @@ -111,10 +209,10 @@ SRC.ParseLine lda #0 .2 jsr SYM.UpdateGlobal bra SRC.ParseLine.DirOp -.3 jsr SYM.LookupGlobal Pass #2: shoould be already defined... +.3 jsr SYM.LookupGlobal Pass #2: should be already defined... bcs SRC.ParseLine.Undef - jsr SYM.UpdateGlobal + jsr SYM.UpdateGlobalPC *--------------------------------------- SRC.ParseLine.DirOp jsr SRC.GetNextCharNB Scan for an Opcode... @@ -133,7 +231,7 @@ SRC.ParseLine.DirOp jsr SRC.GetNextCharNB Scan for an Opcode... .5 cmp #'>' bne .6 - jsr SRC.ParseLine.Macro + jsr SRC.ParseLine.ExecMacro bcs SRC.ParseLine.Err bra SRC.ParseLine.Ok @@ -167,13 +265,9 @@ SRC.ParseLine.Dir >LDYA L.T.DIRECTIVES jmp (J.DIRECTIVES,x) *--------------------------------------- -SRC.ParseLine.Macro >LDA.G ASM.PASS - bne .1 +SRC.ParseLine.ExecMacro - - -.1 clc rts *--------------------------------------- diff --git a/BIN/ASM.S.SYM.txt b/BIN/ASM.S.SYM.txt index 52cd545c..18f29d41 100644 --- a/BIN/ASM.S.SYM.txt +++ b/BIN/ASM.S.SYM.txt @@ -53,18 +53,29 @@ SYM.Quit >LDA.G SYM.hLocalBuf .8 clc rts *--------------------------------------- -SYM.Dump >LDYA L.MSG.SYMBOLS - >SYSCALL PrintF.YA - - stz ZPLinePtr +SYM.Dump stz ZPLinePtr stz ZPLinePtr+1 + >LDA.G ASM.LI.ON + bpl .1 + + >LDYA L.MSG.SYMBOLS + >SYSCALL PrintF.YA + .1 >PUSHB.G SYM.hGlobals >PUSHW ZPLinePtr >PUSHW ZPTmpBuf >SYSCALL SListGetByID + pha + txa + sta ZPLinePtr + tya + sta ZPLinePtr+1 + pla bcs .8 - >STYA ZPLinePtr + + >LDA.G ASM.LI.ON + bpl .1 >PUSHW ZPTmpBuf Label (PString) @@ -94,25 +105,7 @@ SYM.Dump >LDYA L.MSG.SYMBOLS .8 clc rts *--------------------------------------- -SYM.AddGlobalPC ldx #4 - - ldy #ASM.PC - -.1 lda (pData),y - pha - iny - dex - bne .1 - - ldx #4 - - ldy #SYM.Global+SYM.V+3 - -.2 pla - sta (pData),y - dey - dex - bne .2 +SYM.AddGlobalPC jsr SYM.PC2Global lda #SYM.F.RESOLVED *--------------------------------------- @@ -134,14 +127,16 @@ SYM.AddGlobal >STA.G SYM.Global+SYM.F bcc .1 inc ZPLinePtr+1 - clc - -.1 tya + +.1 clc + .HS B0 BCS +.9 sec + tya >STA.G SYM.ID+1 dey txa sta (pData),y -.9 rts + rts *--------------------------------------- SYM.LookupGlobal >PUSHB.G SYM.hGlobals >PUSHW ZPLinePtr @@ -163,6 +158,9 @@ SYM.LookupGlobal >PUSHB.G SYM.hGlobals .9 rts *--------------------------------------- +SYM.UpdateGlobalPC jsr SYM.PC2Global + bra SYM.UpdateGlobal +*--------------------------------------- SYM.UpdateGlobalAcc ldx #3 ldy #SYM.Global+SYM.V+3 @@ -186,6 +184,27 @@ SYM.UpdateGlobal lda #SYM.F.RESOLVED >SYSCALL SListUpdateByID rts *--------------------------------------- +SYM.PC2Global ldx #4 + + ldy #ASM.PC + +.1 lda (pData),y + pha + iny + dex + bne .1 + + ldx #4 + + ldy #SYM.Global+SYM.V+3 + +.2 pla + sta (pData),y + dey + dex + bne .2 + rts +*--------------------------------------- SYM.AddLocalPC tax Save ID >LDA.G SYM.LocalIndex diff --git a/BIN/ASM.S.txt b/BIN/ASM.S.txt index 2650ad06..5382e217 100644 --- a/BIN/ASM.S.txt +++ b/BIN/ASM.S.txt @@ -54,7 +54,8 @@ ERR.TOO.MANY.DO .EQ $AC ERR.TOO.MANY.LOCAL .EQ $AD ERR.MISSING.EXP .EQ $B0 ERR.EXP.SYN.ERROR .EQ $B1 -ERR.INV.MACRO.DEF .EQ $E0 +ERR.MACRO.INV.DEF .EQ $E0 +ERR.MACRO.TOO.BIG .EQ $E1 *-------------------------------------- * File Header (16 Bytes) *-------------------------------------- @@ -253,7 +254,7 @@ CS.RUN >SYSCALL GetChar rts .1 jsr SYM.Dump - + >PUSHW ZPLinePtr >LDYA L.MSG.SUMMARY >SYSCALL PrintF.YA @@ -261,11 +262,11 @@ CS.RUN >SYSCALL GetChar .99 sec rts -.2 jsr SRC.PrintLine - - jsr SRC.ParseLine +.2 jsr SRC.ParseLine bcs .9 + jsr SRC.PrintLine + .8 clc rts @@ -274,7 +275,7 @@ CS.RUN >SYSCALL GetChar pla pha >PUSHA - >PUSHW SRC.LINENUM + >PUSHW.G SRC.LINENUM >LDYA L.MSG.ERROR >SYSCALL PrintF.YA pla @@ -381,7 +382,7 @@ MSG.LINECR >CSTR "%s\r\n" MSG.ERROR >CSTR "%05D-Error:$%h\r\n" MSG.SYMBOLS >CSTR "Symbol Table:\r\n" MSG.GSYMBOL >CSTR "$%h%h%h%h:%S\r\n" -MSG.SUMMARY >CSTR "\r\nEnd Of Assembly.\r\n" +MSG.SUMMARY >CSTR "\r\nSymbol Table Size : %5D Bytes.\r\nEnd Of Assembly.\r\n" SRC.AM.RESERVED >PSTR "[]()," SRC.MOD.RESERVED >PSTR "#/<>" SRC.EXP.RESERVED >PSTR "^!|&<=>+-*/" @@ -394,7 +395,6 @@ FIO.Stat .BS S.STAT EXP.Operator .BS 1 EXP.Modifier .BS 1 -SRC.LINENUM .BS 2 SRC.Keyword.ID .BS 1 SRC.ACC .BS 4 SRC.ACCTMP .BS 4 @@ -419,6 +419,7 @@ DST.hFILENAME .BS 1 DST.hREFNUM .BS 1 DST.hBUFFER .BS 1 DST.hFILETYPE .BS 1 +SRC.LINENUM .BS 2 ASM.T.hMem .BS 1 @@ -449,6 +450,7 @@ SYM.Lookup .BS 6 MAC.hMacros .BS 1 MAC.hBuf .BS 1 +MAC.bAdd .BS 1 DS.END .ED *--------------------------------------- diff --git a/SYS/KERNEL.S.MEM.txt b/SYS/KERNEL.S.MEM.txt index 34c7f816..78234848 100644 --- a/SYS/KERNEL.S.MEM.txt +++ b/SYS/KERNEL.S.MEM.txt @@ -517,7 +517,7 @@ K.SListLookup * PUSHW = KeyID * PUSHW = Data Ptr (KEY+DATA) * ## Out: -* Y,A = Next ID +* X,Y = Next KeyID *\-------------------------------------- K.SListGetByID */-------------------------------------- diff --git a/SYS/KERNEL.S.SLIST.txt b/SYS/KERNEL.S.SLIST.txt index c6317ab8..ae822775 100644 --- a/SYS/KERNEL.S.SLIST.txt +++ b/SYS/KERNEL.S.SLIST.txt @@ -53,16 +53,16 @@ SLIST.Add jsr SLIST.Search dex bne .4 -.8 lda #$ff SELF MODIFIED +.8 lda #$ff SELF MODIFIED + + clc + .HS B0 BCS + +.99 sec ldx SLIST.ID ldy SLIST.ID+1 - clc -.9 rts -.99 ldx SLIST.ID - ldy SLIST.ID+1 - sec - rts +.9 rts *-------------------------------------- SLIST.Lookup jsr SLIST.Search @@ -120,13 +120,11 @@ SLIST.GetByID jsr SLIST.Select jsr SLIST.GetNextBlockByte - lda SLIST.IndexOfs - ldy SLIST.BlockOfs - clc - rts - + .HS B0 BCS .9 sec + ldx SLIST.BlockOfs + ldy SLIST.IndexOfs rts *-------------------------------------- SLIST.UpdateByID