diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 74b432a5..fe3d9170 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/.Tools/ASM.T.xlsm b/.Tools/ASM.T.xlsm index be371f28..30a5c2f4 100644 Binary files a/.Tools/ASM.T.xlsm and b/.Tools/ASM.T.xlsm differ diff --git a/BIN/ASM.T.6502.A.txt b/BIN/ASM.6502.A.txt similarity index 80% rename from BIN/ASM.T.6502.A.txt rename to BIN/ASM.6502.A.txt index d545f435..ce2b91bf 100644 --- a/BIN/ASM.T.6502.A.txt +++ b/BIN/ASM.6502.A.txt @@ -1,6 +1,5 @@ NEW - PREFIX -AUTO 4,1 + AUTO 3,1 *--------------------------------------- T.ADDR.MODES .EQ * .DA #2,$$"#a" @@ -21,6 +20,6 @@ T.REGISTERS .EQ * .HS 00 *--------------------------------------- MAN -SAVE USR/SRC/BIN/ASM.T.6502.A -LOAD USR/SRC/BIN/ASM.T.6502.S +SAVE USR/SRC/BIN/ASM.6502.A +LOAD USR/SRC/BIN/ASM.6502.S ASM diff --git a/BIN/ASM.T.6502.O.txt b/BIN/ASM.6502.O.txt similarity index 93% rename from BIN/ASM.T.6502.O.txt rename to BIN/ASM.6502.O.txt index 5810ec54..91e09663 100644 --- a/BIN/ASM.T.6502.O.txt +++ b/BIN/ASM.6502.O.txt @@ -1,6 +1,5 @@ NEW - PREFIX -AUTO 4,1 + AUTO 3,1 *--------------------------------------- T.OPCODES .EQ * ADC .DA ADC.E+1-* @@ -325,6 +324,6 @@ TYA.E .HS 00 .HS 0000 *--------------------------------------- MAN -SAVE USR/SRC/BIN/ASM.T.6502.O -LOAD USR/SRC/BIN/ASM.T.6502.S +SAVE USR/SRC/BIN/ASM.6502.O +LOAD USR/SRC/BIN/ASM.6502.S ASM diff --git a/BIN/ASM.T.Z80.S.txt b/BIN/ASM.6502.S.txt similarity index 59% rename from BIN/ASM.T.Z80.S.txt rename to BIN/ASM.6502.S.txt index c303b7db..61652afe 100644 --- a/BIN/ASM.T.Z80.S.txt +++ b/BIN/ASM.6502.S.txt @@ -1,17 +1,16 @@ NEW - PREFIX -AUTO 4,1 + AUTO 3,1 .LIST OFF .OR $0 - .TF BIN/ASM.T.Z80 + .TF bin/asm.6502 *--------------------------------------- .DA T.ADDR.MODES .DA T.REGISTERS .DA T.OPCODES *--------------------------------------- - .INB USR/SRC/BIN/ASM.T.Z80.O - .INB USR/SRC/BIN/ASM.T.Z80.A + .INB USR/SRC/BIN/ASM.6502.O + .INB USR/SRC/BIN/ASM.6502.A *--------------------------------------- MAN -SAVE USR/SRC/BIN/ASM.T.Z80.S +SAVE USR/SRC/BIN/ASM.6502.S ASM diff --git a/BIN/ASM.T.65816.A.txt b/BIN/ASM.65816.A.txt similarity index 84% rename from BIN/ASM.T.65816.A.txt rename to BIN/ASM.65816.A.txt index a21dff5f..ba2f64f9 100644 --- a/BIN/ASM.T.65816.A.txt +++ b/BIN/ASM.65816.A.txt @@ -1,6 +1,5 @@ NEW - PREFIX -AUTO 4,1 + AUTO 3,1 *--------------------------------------- T.ADDR.MODES .EQ * .DA #2,$$"#a" @@ -32,6 +31,6 @@ T.REGISTERS .EQ * .HS 00 *--------------------------------------- MAN -SAVE USR/SRC/BIN/ASM.T.65816.A -LOAD USR/SRC/BIN/ASM.T.65816.S +SAVE USR/SRC/BIN/ASM.65816.A +LOAD USR/SRC/BIN/ASM.65816.S ASM diff --git a/BIN/ASM.T.65816.O.txt b/BIN/ASM.65816.O.txt similarity index 94% rename from BIN/ASM.T.65816.O.txt rename to BIN/ASM.65816.O.txt index 6e8f4f8f..a5a11b10 100644 --- a/BIN/ASM.T.65816.O.txt +++ b/BIN/ASM.65816.O.txt @@ -1,6 +1,5 @@ NEW - PREFIX -AUTO 4,1 + AUTO 3,1 *--------------------------------------- T.OPCODES .EQ * ADC .DA ADC.E+1-* @@ -532,6 +531,6 @@ XCE.E .HS 00 .HS 0000 *--------------------------------------- MAN -SAVE USR/SRC/BIN/ASM.T.65816.O -LOAD USR/SRC/BIN/ASM.T.65816.S +SAVE USR/SRC/BIN/ASM.65816.O +LOAD USR/SRC/BIN/ASM.65816.S ASM diff --git a/BIN/ASM.T.SW16.S.txt b/BIN/ASM.65816.S.txt similarity index 58% rename from BIN/ASM.T.SW16.S.txt rename to BIN/ASM.65816.S.txt index f9451f31..3cbee8ac 100644 --- a/BIN/ASM.T.SW16.S.txt +++ b/BIN/ASM.65816.S.txt @@ -1,17 +1,16 @@ NEW - PREFIX -AUTO 4,1 + AUTO 3,1 .LIST OFF .OR $0 - .TF BIN/ASM.T.SW16 + .TF bin/asm.65816 *--------------------------------------- .DA T.ADDR.MODES .DA T.REGISTERS .DA T.OPCODES *--------------------------------------- - .INB USR/SRC/BIN/ASM.T.SW16.O - .INB USR/SRC/BIN/ASM.T.SW16.A + .INB USR/SRC/BIN/ASM.65816.O + .INB USR/SRC/BIN/ASM.65816.A *--------------------------------------- MAN -SAVE USR/SRC/BIN/ASM.T.SW16.S +SAVE USR/SRC/BIN/ASM.65816.S ASM diff --git a/BIN/ASM.T.65C02.A.txt b/BIN/ASM.65C02.A.txt similarity index 81% rename from BIN/ASM.T.65C02.A.txt rename to BIN/ASM.65C02.A.txt index 638ef6da..56aaf738 100644 --- a/BIN/ASM.T.65C02.A.txt +++ b/BIN/ASM.65C02.A.txt @@ -1,6 +1,5 @@ NEW - PREFIX -AUTO 4,1 + AUTO 3,1 *--------------------------------------- T.ADDR.MODES .EQ * .DA #2,$$"#a" @@ -23,6 +22,6 @@ T.REGISTERS .EQ * .HS 00 *--------------------------------------- MAN -SAVE USR/SRC/BIN/ASM.T.65C02.A -LOAD USR/SRC/BIN/ASM.T.65C02.S +SAVE USR/SRC/BIN/ASM.65C02.A +LOAD USR/SRC/BIN/ASM.65C02.S ASM diff --git a/BIN/ASM.T.65C02.O.txt b/BIN/ASM.65C02.O.txt similarity index 94% rename from BIN/ASM.T.65C02.O.txt rename to BIN/ASM.65C02.O.txt index 98f9b9bd..7b007340 100644 --- a/BIN/ASM.T.65C02.O.txt +++ b/BIN/ASM.65C02.O.txt @@ -1,6 +1,5 @@ NEW - PREFIX -AUTO 4,1 + AUTO 3,1 *--------------------------------------- T.OPCODES .EQ * ADC .DA ADC.E+1-* @@ -384,6 +383,6 @@ WAI.E .HS 00 .HS 0000 *--------------------------------------- MAN -SAVE USR/SRC/BIN/ASM.T.65C02.O -LOAD USR/SRC/BIN/ASM.T.65C02.S +SAVE USR/SRC/BIN/ASM.65C02.O +LOAD USR/SRC/BIN/ASM.65C02.S ASM diff --git a/BIN/ASM.T.6502.S.txt b/BIN/ASM.65C02.S.txt similarity index 58% rename from BIN/ASM.T.6502.S.txt rename to BIN/ASM.65C02.S.txt index ef57f0b5..80c0fd9a 100644 --- a/BIN/ASM.T.6502.S.txt +++ b/BIN/ASM.65C02.S.txt @@ -1,17 +1,16 @@ NEW - PREFIX -AUTO 4,1 + AUTO 3,1 .LIST OFF .OR $0 - .TF BIN/ASM.T.6502 + .TF bin/asm.65C02 *--------------------------------------- .DA T.ADDR.MODES .DA T.REGISTERS .DA T.OPCODES *--------------------------------------- - .INB USR/SRC/BIN/ASM.T.6502.O - .INB USR/SRC/BIN/ASM.T.6502.A + .INB USR/SRC/BIN/ASM.65C02.O + .INB USR/SRC/BIN/ASM.65C02.A *--------------------------------------- MAN -SAVE USR/SRC/BIN/ASM.T.6502.S +SAVE USR/SRC/BIN/ASM.65C02.S ASM diff --git a/BIN/ASM.T.65R02.A.txt b/BIN/ASM.65R02.A.txt similarity index 81% rename from BIN/ASM.T.65R02.A.txt rename to BIN/ASM.65R02.A.txt index 7457bfcb..a790306d 100644 --- a/BIN/ASM.T.65R02.A.txt +++ b/BIN/ASM.65R02.A.txt @@ -1,6 +1,5 @@ NEW - PREFIX -AUTO 4,1 + AUTO 3,1 *--------------------------------------- T.ADDR.MODES .EQ * .DA #2,$$"#a" @@ -24,6 +23,6 @@ T.REGISTERS .EQ * .HS 00 *--------------------------------------- MAN -SAVE USR/SRC/BIN/ASM.T.65R02.A -LOAD USR/SRC/BIN/ASM.T.65R02.S +SAVE USR/SRC/BIN/ASM.65R02.A +LOAD USR/SRC/BIN/ASM.65R02.S ASM diff --git a/BIN/ASM.T.65R02.O.txt b/BIN/ASM.65R02.O.txt similarity index 94% rename from BIN/ASM.T.65R02.O.txt rename to BIN/ASM.65R02.O.txt index 38dc4c51..d6de4ea9 100644 --- a/BIN/ASM.T.65R02.O.txt +++ b/BIN/ASM.65R02.O.txt @@ -1,6 +1,5 @@ NEW - PREFIX -AUTO 4,1 + AUTO 3,1 *--------------------------------------- T.OPCODES .EQ * ADC .DA ADC.E+1-* @@ -504,6 +503,6 @@ TYA.E .HS 00 .HS 0000 *--------------------------------------- MAN -SAVE USR/SRC/BIN/ASM.T.65R02.O -LOAD USR/SRC/BIN/ASM.T.65R02.S +SAVE USR/SRC/BIN/ASM.65R02.O +LOAD USR/SRC/BIN/ASM.65R02.S ASM diff --git a/BIN/ASM.T.65C02.S.txt b/BIN/ASM.65R02.S.txt similarity index 58% rename from BIN/ASM.T.65C02.S.txt rename to BIN/ASM.65R02.S.txt index 02fe961e..53aaaf69 100644 --- a/BIN/ASM.T.65C02.S.txt +++ b/BIN/ASM.65R02.S.txt @@ -1,17 +1,16 @@ NEW - PREFIX -AUTO 4,1 + AUTO 3,1 .LIST OFF .OR $0 - .TF BIN/ASM.T.65C02 + .TF bin/asm.65R02 *--------------------------------------- .DA T.ADDR.MODES .DA T.REGISTERS .DA T.OPCODES *--------------------------------------- - .INB USR/SRC/BIN/ASM.T.65C02.O - .INB USR/SRC/BIN/ASM.T.65C02.A + .INB USR/SRC/BIN/ASM.65R02.O + .INB USR/SRC/BIN/ASM.65R02.A *--------------------------------------- MAN -SAVE USR/SRC/BIN/ASM.T.65C02.S +SAVE USR/SRC/BIN/ASM.65R02.S ASM diff --git a/BIN/ASM.S.DIR.txt b/BIN/ASM.S.DIR.txt index cbfab5af..92f7b414 100644 --- a/BIN/ASM.S.DIR.txt +++ b/BIN/ASM.S.DIR.txt @@ -253,8 +253,8 @@ DIR.EQ clc bcs .9 jsr SYM.Acc2Global jmp SYM.StoreGlobal - .2 - lda (ZPSymbolBuf) PASS#2 + +.2 lda (ZPSymbolBuf) PASS#2 and #SYMG.F.FWREF beq .3 @@ -345,8 +345,10 @@ DIR.HS jsr SRC.GetNextCharNB *--------------------------------------- DIR.IN jsr SRC.GetNextCharNB bcs .9 + >LDYA ZPLinePtr jmp FIO.OpenFile + .9 lda #E.SYNTAX.ERROR sec rts @@ -410,15 +412,19 @@ DIR.MA >LDA.G ASM.MA.ON jsr SRC.GetNextCharNB beq DIR.OP.SYNERR + + >PUSHB.G MAC.hList >PUSHW ZPLinePtr - >LDA.G MAC.hList >SYSCALL SListNewKey bcs .99 + >STYA.G MAC.ID + .8 lda #$ff >STA.G ASM.MA.ON clc rts + .9 lda #E.MACRO.INV.DEF sec .99 rts @@ -426,7 +432,8 @@ DIR.MA >LDA.G ASM.MA.ON DIR.OP jsr SRC.GetNextCharNB bcs DIR.OP.SYNERR >LDYA ZPLinePtr - jmp FIO.LOAD.ASM.T + + jmp FIO.LOAD.CPU DIR.OP.SYNERR lda #E.SYNTAX.ERROR sec rts diff --git a/BIN/ASM.S.EXP.txt b/BIN/ASM.S.EXP.txt index 76ba95d2..7bb78b8a 100644 --- a/BIN/ASM.S.EXP.txt +++ b/BIN/ASM.S.EXP.txt @@ -18,6 +18,7 @@ EXP.Eval.Missing lda #E.MISSING.EXP sec rts + EXP.Eval >STZ.G EXP.Modifier >STZ.G EXP.Prefix >STZ.G EXP.Operator @@ -162,6 +163,7 @@ EXP.EvalOperator *--------------------------------------- EXP.GetLocal jsr SRC.GetNextChar bcs .9 + jsr SRC.GetDecimal bcs EXP.EvalExitSYN lda SRC.ACC+1 @@ -173,6 +175,7 @@ EXP.GetLocal jsr SRC.GetNextChar jsr SYM.GetLocalX bcc .8 + >LDA.G ASM.PASS pass#2? bne EXP.EvalExitUND lda #SYMG.F.FWREF Mark ACC as pending @@ -329,7 +332,7 @@ EXP.OP.SUB ldx #0 ARG-ACC->ACC .8 clc rts *--------------------------------------- -EXP.OP.MUL +EXP.OP.MUL *--------------------------------------- EXP.OP.DIV clc diff --git a/BIN/ASM.S.FIO.txt b/BIN/ASM.S.FIO.txt index 2ff5357e..2400cf64 100644 --- a/BIN/ASM.S.FIO.txt +++ b/BIN/ASM.S.FIO.txt @@ -2,7 +2,7 @@ NEW AUTO 3,1 *--------------------------------------- FIO.Init >LDYA L.ASM.6502 -FIO.LOAD.ASM.T >STYA ZPPtr2 +FIO.LOAD.CPU >STYA ZPPtr2 ldy #S.PS.hARGV lda (pPS),y @@ -11,23 +11,15 @@ FIO.LOAD.ASM.T >STYA ZPPtr2 >STYA ZPPtr1 ldy #$ff ldx #$ff + .1 iny inx lda (ZPPtr1),y - sta ASM.T.FILENAME,x + sta ASM.CPU.FILE,x bne .1 - lda #'.' - sta ASM.T.FILENAME,x - - inx - - lda #'T' - sta ASM.T.FILENAME,x - - inx lda #'.' - sta ASM.T.FILENAME,x + sta ASM.CPU.FILE,x ldy #$ff .2 iny @@ -35,29 +27,34 @@ FIO.LOAD.ASM.T >STYA ZPPtr2 lda (ZPPtr2),y jsr SRC.IsLetterOrDigit bcs .3 - sta ASM.T.FILENAME,x + + sta ASM.CPU.FILE,x bra .2 -.3 stz ASM.T.FILENAME,x - ldy #ASM.T.hMem - lda (pData),y + +.3 stz ASM.CPU.FILE,x + + >LDA.G ASM.T.hMem beq .4 + >SYSCALL FreeMem - ldy #ASM.T.hMem - lda #0 - sta (pData),y -.4 >PUSHW L.ASM.T.FILENAME + + >STZ.G ASM.T.hMem + +.4 >PUSHW L.MSG.T.FILE + >PUSHW L.ASM.CPU.FILE >PUSHBI 2 - >LDYA L.MSG.T.FILE jsr OUT.Print - >PUSHWZ Aux type - >PUSHBI 6 S.FI.T.BIN + + >PUSHW L.ASM.CPU.FILE >PUSHBI O.RDONLY - >LDYA L.ASM.T.FILENAME + >PUSHBI S.FI.T.BIN + >PUSHWZ Aux type >SYSCALL LoadFile bcs .9 + txa - ldy #ASM.T.hMem - sta (pData),y + >STA.G ASM.T.hMem + >SYSCALL GetMemPtr >STYA ZPPtr1 @@ -91,48 +88,52 @@ FIO.LOAD.ASM.T >STYA ZPPtr2 .9 rts *--------------------------------------- FIO.OpenFile >STYA ZPPtr1 + >PUSHW L.MSG.SRC.FILE >PUSHW ZPPtr1 >PUSHBI 2 - >LDYA L.MSG.SRC.FILE jsr OUT.Print - ldy #SRC.COUNT - lda (pData),y + + >LDA.G SRC.COUNT cmp #IN.MAXDEPTH bne .1 + lda #E.SRC.TOO.MANY.IN sec rts -.1 >PUSHW L.FIO.Stat - >LDYA ZPPtr1 + +.1 >PUSHW ZPPtr1 + >PUSHW L.FIO.Stat >SYSCALL Stat bcs .99 + lda FIO.Stat+S.STAT.P.TYPE - cmp #$04 TXT ? + cmp #S.FI.T.TXT bne .2 - >PUSHWZ - >PUSHBI 4 - >PUSHBI O.RDONLY+O.TEXT + ldx #O.RDONLY+O.TEXT bra .3 + .2 cmp #$FA S-C/BAS? bne .98 + + ldx #O.RDONLY + +.3 >PUSHW ZPPtr1 + txa + >PUSHA + >PUSHB FIO.Stat+S.STAT.P.TYPE >PUSHWZ - >PUSHBI $FA - >PUSHBI O.RDONLY -.3 >LDYA ZPPtr1 >SYSCALL FOpen bcs .99 pha - ldy #SRC.COUNT - lda (pData),y + >LDA.G SRC.COUNT clc adc #SRC.hFILES tay pla sta (pData),y - ldy #SRC.COUNT - lda (pData),y + >LDA.G SRC.COUNT clc adc #SRC.hFILETYPES tay @@ -140,22 +141,21 @@ FIO.OpenFile >STYA ZPPtr1 lda FIO.Stat+S.STAT.P.TYPE sta (pData),y - ldy #SRC.COUNT - lda (pData),y - inc - sta (pData),y + >INC.G SRC.COUNT + lda #0 >STA.G SRC.LINENUM iny sta (pData),y + clc rts + .98 lda #E.SRC.INV.TYPE sec .99 rts *--------------------------------------- -FIO.ReadLine ldy #SRC.COUNT - lda (pData),y +FIO.ReadLine >LDA.G SRC.COUNT clc adc #SRC.hFILETYPES-1 tay @@ -258,8 +258,7 @@ FIO.ReadLine ldy #SRC.COUNT rts *-------------------------------------- FIO.ReadFromFile - ldy #SRC.COUNT - lda (pData),y + >LDA.G SRC.COUNT clc adc #SRC.hFILES-1 tay @@ -267,24 +266,24 @@ FIO.ReadFromFile >SYSCALL FRead bcs .9 - tax $100 byte transfered ? + tax $100 byte transfered ? beq .9 lda #E.LINE.TOO.LONG sec .9 rts *--------------------------------------- -FIO.FileClose ldy #SRC.COUNT - lda (pData),y +FIO.FileClose >LDA.G SRC.COUNT beq .8 - clc + + dec + sta (pData),y + + sec adc #SRC.hFILES-1 tay lda (pData),y >SYSCALL fclose - ldy #SRC.COUNT - lda (pData),y - dec - sta (pData),y + .8 clc rts *--------------------------------------- diff --git a/BIN/ASM.S.MAC.txt b/BIN/ASM.S.MAC.txt index 78ccc0c0..ae241f7c 100644 --- a/BIN/ASM.S.MAC.txt +++ b/BIN/ASM.S.MAC.txt @@ -5,16 +5,26 @@ MAC.Init >SYSCALL SListNew bcs .9 >STA.G MAC.hList + >LDYAI 256 >SYSCALL getmem bcs .9 - >STYA ZPMacroBuf + txa >STA.G MAC.hBuf >LDYAI 256 >SYSCALL getmem bcs .9 + + >STYA ZPMacroArgBuf + txa + >STA.G MAC.hArgBuf + + >LDYAI 256 + >SYSCALL getmem + bcs .9 + >STYA ZPMacroStk txa >STA.G MAC.hStk @@ -28,20 +38,131 @@ MAC.Quit >LDA.G MAC.hStk beq .1 >SYSCALL FreeMem + .1 >LDA.G MAC.hBuf + beq .2 + + >SYSCALL FreeMem + +.2 >LDA.G MAC.hArgBuf beq .3 >SYSCALL FreeMem + .3 >LDA.G MAC.hList beq .8 + + >PUSHA >SYSCALL SListFree .8 clc rts *--------------------------------------- +MAC.Learn >LDA.G MAC.hBuf + >SYSCALL GetMemPtr + >STYA ZPMacroBuf + + >STZ.G MAC.BufPtr + sta (ZPMacroBuf) + lda (ZPLinePtr) + cmp #C.SPACE No label, scan to DIR/OP if any + bne .1 + + jsr SRC.GetNextCharNB + bcs .8 + + lda #C.SPACE Store ONE blank + jsr MAC.AddChar + bcs .90 + + lda (ZPLinePtr) get back non blank char + bra .2 + +.1 jsr MAC.AddChar + bcs .99 + + jsr SRC.GetNextChar + bcs .80 + + cmp #C.SPACE + bne .1 + + jsr MAC.AddChar +.90 bcs .99 + + jsr SRC.GetNextCharNB + bcs .80 + +.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 >STZ.G ASM.MA.ON +.8 clc + rts + +.80 lda #C.CR + jmp MAC.AddChar + +.3 lda (ZPLinePtr) + +.4 jsr MAC.AddChar + bcs .99 + + jsr SRC.GetNextChar + bcs .80 + + cmp #C.SPACE + bne .4 + + jsr SRC.GetNextChar + bcs .8 + + cmp #C.SPACE + beq .80 Comments... + + pha + lda #C.SPACE + jsr MAC.AddChar + pla + + bcs .99 + +.5 jsr MAC.AddChar Store ARG.... + bcs .99 + + jsr SRC.GetNextChar + bcs .80 + + cmp #C.SPACE + bne .5 + bra .80 End of Line + +.99 rts +*--------------------------------------- MAC.AddChar tax - >LDA.G ASM.PASS If Pass#2, ignore + >LDA.G ASM.PASS If Pass#2, ignore bne .8 + >LDA.G MAC.BufPtr tay txa @@ -52,93 +173,28 @@ MAC.AddChar tax cmp #C.CR bne .8 -.1 >LDA.G MAC.BufPtr + +.1 >PUSHB.G MAC.hList + >PUSHW.G MAC.ID + >PUSHW ZPMacroBuf + >LDA.G MAC.BufPtr tay lda #0 >PUSHYA - >PUSHW ZPMacroBuf - >PUSHW.G MAC.ID - >LDA.G MAC.hList >SYSCALL SListAddData rts + .8 clc -MAC.AddChar.RTS rts -*--------------------------------------- -MAC.ReadLine >LDA.G MAC.StkPtr - - tay - dey - lda (ZPMacroStk),y - sta ZPPtr1 - dey - lda (ZPMacroStk),y - sta ZPPtr1+1 pop mac ID - dey - lda (ZPMacroStk),y - sta ZPPtr2 - dey - lda (ZPMacroStk),y - sta ZPPtr2+1 pop offset - dey - lda (ZPMacroStk),y - sta ZPMacroBuf - dey - lda (ZPMacroStk),y - sta ZPMacroBuf+1 pop args - - tya - >STA.G MAC.StkPtr - >PUSHW ZPPtr2 offset - >PUSHWZ len = 0 (string mode) - >PUSHW ZPLineBuf - >PUSHW ZPPtr1 Mac ID - >LDA.G MAC.hList - >SYSCALL SListGetData - bcs MAC.AddChar.RTS - - pha - tya -* clc - adc ZPPtr2 - sta ZPPtr2 - pla - adc ZPPtr2+1 - sta ZPPtr2+1 - >LDYA ZPMacroBuf - >SYSCALL puts - >LDA.G MAC.StkPtr - tay - lda ZPLinePtr+1 push args - sta (ZPMacroStk),y - iny - lda ZPLinePtr - sta (ZPMacroStk),y - iny -*--------------------------------------- -MAC.Push lda ZPPtr2+1 push offset - sta (ZPMacroStk),y - iny - lda ZPPtr2 - sta (ZPMacroStk),y - iny - lda ZPPtr1+1 push MAC.ID - sta (ZPMacroStk),y - iny - lda ZPPtr1 - sta (ZPMacroStk),y - iny - tya - >STA.G MAC.StkPtr - clc rts *--------------------------------------- MAC.Exec jsr SRC.GetNextChar skip '>' bcs .90 + >PUSHB.G MAC.hList >PUSHW ZPLinePtr - >LDA.G MAC.hList >SYSCALL SListLookup bcs .90 + >STYA ZPPtr1 MAC.ID txa * clc @@ -146,42 +202,271 @@ MAC.Exec jsr SRC.GetNextChar skip '>' sta ZPLinePtr bcc .1 inc ZPLinePtr+1 + .1 jsr SRC.GetChar bcs .8 - cmp #' ' + + cmp #C.SPACE bne .92 + jsr SRC.GetNextChar beq .8 eol.. - cmp #' ' some arg... + + cmp #C.SPACE some arg... bne .8 + .2 jsr SRC.GetNextChar comment....skip bcc .2 -.8 >LDA.G MAC.StkPtr - cmp #MA.MAXDEPTH*8 - beq .91 - stz ZPPtr2 - stz ZPPtr2+1 offset = 0 - >INC.G MAC.CtxID - >INC.G MAC.Depth - >LDA.G MAC.StkPtr - tay - lda ZPLinePtr+1 push args - sta (ZPMacroStk),y - iny - lda ZPLinePtr - sta (ZPMacroStk),y - iny - jmp MAC.Push +.8 jmp MAC.Push + .90 lda #E.MACRO.INV sec rts -.91 lda #E.MACRO.TOO.MANY - sec - rts + .92 lda #E.SYNTAX.ERROR sec - rts +MAC.Exec.RTS rts +*--------------------------------------- +MAC.ReadLine >LDA.G MAC.hBuf + >SYSCALL GetMemPtr + >STYA ZPMacroBuf + + jsr MAC.Get ZPMacroArgBuf = args + + >PUSHB.G MAC.hList + >PUSHW ZPPtr1 Mac ID + >PUSHW ZPMacroBuf + >PUSHWZ len = 0 (string mode) + >PUSHW ZPPtr2 offset + >SYSCALL SListGetData + bcs MAC.Exec.RTS + + pha + tya + sec +1 for CR + adc ZPPtr2 + sta ZPPtr2 + pla + adc ZPPtr2+1 + sta ZPPtr2+1 + + ldy #0 + +.1 lda (ZPMacroBuf) + beq .7 + + inc ZPMacroBuf + bne .2 + inc ZPMacroBuf+1 + +.2 cmp #']' + bne .7 + + lda (ZPMacroBuf) + beq .9 + + + inc ZPMacroBuf + bne .21 + inc ZPMacroBuf+1 + +.21 cmp #'#' + bne .20 + + jsr MAC.GetArgCnt + ora #$30 + bra .7 + +.20 cmp #'1' + bcc .9 + + cmp #'9'+1 + bcs .9 + + and #$0f + tax + jsr MAC.GetArgX + bcs .9 + +.3 lda (ZPPtr1) + sta (ZPLineBuf),y + iny + + inc ZPPtr1 + bne .4 + inc ZPPtr1+1 + +.4 dex + bne .3 + + bra .1 + +.7 sta (ZPLineBuf),y + beq .8 + + iny + bra .1 + +.8 jmp MAC.Put + +.9 lda #E.SYNTAX.ERROR + sec + rts +*--------------------------------------- +MAC.Put >LDA.G MAC.StkPtr + + tay + + dey + dey skip mac ID + + dey + lda ZPPtr2 + sta (ZPMacroStk),y + dey + lda ZPPtr2+1 + sta (ZPMacroStk),y get offset + rts +*--------------------------------------- +MAC.Push >LDA.G MAC.StkPtr + cmp #MA.MAXDEPTH*8 + beq .9 + + stz ZPPtr2 + stz ZPPtr2+1 offset = 0 + + >INC.G MAC.CtxID + >INC.G MAC.Depth + + >LDYA ZPLinePtr + >SYSCALL strdup Args + bcs .99 + + >LDA.G MAC.StkPtr + tay + txa push args + sta (ZPMacroStk),y + iny + + lda ZPPtr2+1 push offset + sta (ZPMacroStk),y + iny + lda ZPPtr2 + sta (ZPMacroStk),y + + iny + lda ZPPtr1+1 push MAC.ID + sta (ZPMacroStk),y + iny + lda ZPPtr1 + sta (ZPMacroStk),y + + iny + tya + >STA.G MAC.StkPtr + clc + rts + +.9 lda #E.MACRO.TOO.MANY + sec +.99 rts +*--------------------------------------- +MAC.Pop >LDA.G MAC.StkPtr + + dec + dec + + dec + dec + + dec + + sta (pData),y 5 bytes off stack + + tay + lda (ZPMacroStk),y + >SYSCALL freemem + + >DEC.G MAC.CtxID + >DEC.G MAC.Depth + clc + rts +*--------------------------------------- +MAC.Get >LDA.G MAC.StkPtr + + tay + + dey + lda (ZPMacroStk),y + sta ZPPtr1 + dey + lda (ZPMacroStk),y + sta ZPPtr1+1 get mac ID + + dey + lda (ZPMacroStk),y + sta ZPPtr2 + dey + lda (ZPMacroStk),y + sta ZPPtr2+1 get offset + + dey + lda (ZPMacroStk),y + >SYSCALL GetMemPtr + + >STYA ZPMacroArgBuf get args + rts +*--------------------------------------- +MAC.GetArgCnt phy + + ldx #0 + + ldy #$ff + +.1 iny + lda (ZPMacroArgBuf),y + + ply + clc + rts +*--------------------------------------- +MAC.GetArgX phy + + >LDYA ZPMacroArgBuf + >STYA ZPPtr1 + + ldy #$ff + +.1 iny + lda (ZPPtr1),y + beq .7 + + cmp #',' + bne .1 + +.2 dex + beq .7 + + tya + beq .9 + + clc + adc ZPPtr1 + bcc .7 + inc ZPPtr1+1 + +.7 tya + tax + beq .9 + + ply + clc + rts + +.9 ply + sec + rts *--------------------------------------- MAN SAVE USR/SRC/BIN/ASM.S.MAC diff --git a/BIN/ASM.S.OUT.txt b/BIN/ASM.S.OUT.txt index e5201f25..8e66d027 100644 --- a/BIN/ASM.S.OUT.txt +++ b/BIN/ASM.S.OUT.txt @@ -25,8 +25,8 @@ OUT.Reset ldx #4 rts *--------------------------------------- OUT.PrintLineOn -* clc -* rts + clc + rts >LDA.G ASM.LI.ON bpl .9 >LDA.G ASM.MA.ON MACRO Mode ? @@ -51,56 +51,68 @@ OUT.PrintLineOn rts *--------------------------------------- OUT.PrintLineErr - >STA.G DIR.Byte Save Error code + >STA.G DIR.Byte Save Error code jsr OUT.PrintLine.1 bcs .9 -.1 >PUSHB.G DIR.Byte + +.1 >PUSHW L.MSG.ERROR + >PUSHB.G DIR.Byte >PUSHBI 1 - >LDYA L.MSG.ERROR >SYSCALL printf + ldx ZPLinePtr cpx ZPLineBuf beq .4 + .3 phx lda #'-' >SYSCALL PutChar plx bcs .9 + dex cpx ZPLineBuf bne .3 + .4 lda #'^' phy >SYSCALL PutChar ply bcs .9 -.5 jmp OUT.PrintCR + jmp OUT.PrintCR .9 rts *--------------------------------------- OUT.PrintLine jsr OUT.PrintLineOn bcs OUT.Print.RTS + OUT.PrintLine.1 jsr OUT.PrintLineOutBuf bcs OUT.Print.RTS + >LDA.G SRC.COUNT + .1 dec - bmi .2 + beq .2 + pha - >LDA.G '>' + lda #'>' >SYSCALL putchar pla bra .1 -.2 >PUSHW.G SRC.LINENUM + +.2 >PUSHW L.MSG.LINENUM + >PUSHW.G SRC.LINENUM >PUSHBI 2 - >LDYA L.MSG.LINENUM >SYSCALL printf >LDA.G MAC.Depth + .3 dec bmi .4 + pha - >LDA.G '>' + lda #'>' >SYSCALL putchar pla bra .3 @@ -117,53 +129,64 @@ OUT.Print.RTS rts *--------------------------------------- OUT.PrintLineOutBuf >LDA.G OUT.bEquate - bne OUT.PrintLineAcc - >LDA.G OUT.Buf - beq .2 - tax - clc - adc #OUT.Buf - tay -.1 >PUSHB (pData),y - dey - dex - bne .1 -.2 ldy #OUT.PC+1 - >PUSHB (pData),y - dey - >PUSHB (pData),y + bne OUT.PrintLineEQU + >LDA.G OUT.Buf pha - inc - inc - >PUSHA Byte Count+2 for PC - pla asl tax - ldy L.MSG.OUT0,x - lda L.MSG.OUT0+1,x - >SYSCALL printf - rts -*--------------------------------------- -OUT.PrintLineAcc - lda SRC.ACC.SIZE + >PUSHB L.MSG.OUT0+1,x + >PUSHB L.MSG.OUT0,x + + ldy #OUT.PC+1 + >PUSHB (pData),y + dey + >PUSHB (pData),y + + pla beq .2 + tax - ldy #0 -.1 >PUSHB SRC.ACC,y - iny + + ldy #OUT.Buf + + pha + +.1 iny + >PUSHB (pData),y dex bne .1 + + pla + +.2 inc + inc + >PUSHA Byte Count+2 for PC + >SYSCALL printf + + rts +*--------------------------------------- +OUT.PrintLineEQU + lda SRC.ACC.SIZE + asl + tax + + >PUSHB L.MSG.EQU0+1,x + >PUSHB L.MSG.EQU0,x + + lda SRC.ACC.SIZE + beq .2 + + tay + +.1 dey + >PUSHB SRC.ACC,y + tya + bne .1 + lda SRC.ACC.SIZE .2 >PUSHA Byte Count - asl - tax - cpx #9 - bcs * - - ldy L.MSG.EQU0,x - lda L.MSG.EQU0+1,x >SYSCALL printf rts *--------------------------------------- @@ -203,12 +226,13 @@ OUT.EmitByte phy clc rts *--------------------------------------- -OUT.PrintCR >PUSHBI 0 - >LDYA L.MSG.CRLF +OUT.PrintCR >PUSHW L.MSG.CRLF + >PUSHBI 0 >SYSCALL printf - >DEBUG + OUT.PrintCR1 >DEC.G OUT.LineCnt bne .8 + lda #PAGE.LEN sta (pData),y * lda #$80 diff --git a/BIN/ASM.S.SRC.txt b/BIN/ASM.S.SRC.txt index 5509b883..0d7e859e 100644 --- a/BIN/ASM.S.SRC.txt +++ b/BIN/ASM.S.SRC.txt @@ -10,99 +10,34 @@ SRC.ParseLine jsr OUT.Reset beq .8 >LDA.G ASM.DO.StackPtr beq .1 + clc adc #ASM.DO.Stack-1 tay lda (pData),y beq .8 + .1 >LDA.G ASM.MA.ON - bmi SRC.ParseLine.MACRO + bpl SRC.ParseLine.LABEL + + jmp MAC.Learn - jmp SRC.ParseLine.LABEL .8 clc -.9 rts -*--------------------------------------- -SRC.ParseLine.Macro - >STZ.G MAC.BufPtr - sta (ZPMacroBuf) - 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 .90 - lda (ZPLinePtr) get back non blank char - bra .2 -.1 jsr MAC.AddChar - bcs .99 - jsr SRC.GetNextChar - bcs .80 - cmp #' ' - bne .1 - jsr MAC.AddChar -.90 bcs .99 - jsr SRC.GetNextCharNB - bcs .80 -.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 >STZ.G ASM.MA.ON -.8 clc - rts - -.80 lda #C.CR - jmp MAC.AddChar -.3 lda (ZPLinePtr) -.4 jsr MAC.AddChar - bcs .99 - jsr SRC.GetNextChar - bcs .80 - cmp #' ' - bne .4 - jsr SRC.GetNextChar - bcs .8 - cmp #' ' - beq .80 Comments... - pha - lda #' ' - jsr MAC.AddChar - pla - bcs .99 -.5 jsr MAC.AddChar Store ARG.... - bcs .99 - jsr SRC.GetNextChar - bcs .80 - cmp #' ' - bne .5 - bra .80 End of Line -.99 SRC.ParseLine.RTS +SRC.ParseLine.RTS rts *--------------------------------------- SRC.ParseLine.LABEL jsr SRC.GetChar - cmp #' ' no label...go scan dir/opcode + cmp #C.SPACE no label...go scan dir/opcode beq SRC.ParseLine.DirOp + tax save char... cmp #'.' local symbol? beq .1 + cmp #':' private symbol? bne .8 + >LDA.G MAC.StkPtr beq SRC.ParseLine.InvLbl @@ -121,8 +56,11 @@ SRC.ParseLine.LABEL cpx #':' beq .2 + jsr SYM.NewLocalA - bra .3 + bcs SRC.ParseLine.RTS + bra SRC.ParseLine.DirOp + .2 jsr SYM.NewPrivateA .3 bcs SRC.ParseLine.RTS @@ -136,10 +74,13 @@ SRC.ParseLine.DirOp bcs SRC.ParseLine.Ok cmp #'.' bne .5 + jsr SRC.GetNextChar bcs SRC.ParseLine.InvDir + jsr SRC.ParseLine.Dir bcs SRC.ParseLine.Err + bra SRC.ParseLine.Ok .5 cmp #'>' @@ -953,9 +894,11 @@ SRC.ACC10 lda SRC.ACC ACC*2-> ACC & ACCTMP sta SRC.ACC+3 CS if overflow .9 rts *--------------------------------------- -DEBUG.PSTR >PUSHYA +DEBUG.PSTR pha + >PUSHW L.MSG.PSTR + pla + >PUSHYA >PUSHBI 2 - >LDYA L.MSG.PSTR >SYSCALL printf rts *--------------------------------------- diff --git a/BIN/ASM.S.SYM.txt b/BIN/ASM.S.SYM.txt index 2ac841d0..b7d971a5 100644 --- a/BIN/ASM.S.SYM.txt +++ b/BIN/ASM.S.SYM.txt @@ -31,21 +31,27 @@ SYM.Reset >STZ.G SYM.bInGlobal *--------------------------------------- SYM.Quit >LDA.G SYM.hGlobalBuf beq .3 + >SYSCALL FreeMem + .3 >LDA.G SYM.hList beq SYM.Quit.8 + + >PUSHA >SYSCALL SListFree + SYM.Quit.8 clc rts *--------------------------------------- -SYM.Dump.End >PUSHW ZPPtr2 +SYM.Dump.End >PUSHW L.MSG.SUMMARY + >PUSHW ZPPtr2 >PUSHBI 2 - >LDYA L.MSG.SUMMARY jmp OUT.Print -SYM.Dump.RTS rts + rts *--------------------------------------- SYM.Dump >LDA.G ASM.LI.ON bpl SYM.Quit.8 + >LDYA L.MSG.SYMBOLS >SYSCALL puts @@ -55,41 +61,51 @@ SYM.Dump >LDA.G ASM.LI.ON .1 >LDYA ZPPtr2 >STYA ZPPtr1 - >PUSHW ZPTmpBuf + >PUSHB.G SYM.hList >PUSHW ZPPtr1 - >LDA.G SYM.hList + >PUSHW ZPTmpBuf >SYSCALL SListGetByID bcs SYM.Dump.End - >STYA ZPPtr2 Save Next ID - >PUSHWZ Start - >PUSHWI $ffff End - >PUSHW ZPSymbolBuf - >PUSHW ZPPtr1 KeyID - >LDA.G SYM.hList + >STYA ZPPtr2 Save Next ID + + >PUSHB.G SYM.hList + >PUSHW ZPPtr1 KeyID + >PUSHW ZPSymbolBuf + >PUSHWI $ffff All + >PUSHWZ from Start >SYSCALL SListGetData - bcs SYM.Dump.RTS + bcs .9 + ldy #SYMG.SIZE Get Symbol Size lda (ZPSymbolBuf),y tax beq .3 phx + + asl + tax + >PUSHB L.MSG.EQU0+1,x + >PUSHB L.MSG.EQU0,x + + plx + phx + .2 iny lda (ZPSymbolBuf),y >PUSHA dex bne .2 + pla Byte Count - asl - tax + .3 >PUSHA - ldy L.MSG.EQU0,x - lda L.MSG.EQU0+1,x + >SYSCALL printf + >PUSHW ZPTmpBuf Label >PUSHBI 0 - >LDYA ZPTmpBuf Label >SYSCALL printf lda (ZPSymbolBuf) @@ -100,44 +116,59 @@ SYM.Dump >LDA.G ASM.LI.ON jsr SYM.Dump.LP .7 jsr OUT.PrintCR jmp .1 +.9 rts *--------------------------------------- SYM.Dump.LP ldy #SYMG -.4 lda (ZPSymbolBuf),y +.1 lda (ZPSymbolBuf),y beq .8 + phy - + + tax ID + iny - ldx #4 -.5 iny + lda (ZPSymbolBuf),y MacID + beq .2 + + >PUSHW L.MSG.LSYMBOL + txa + >PUSHA + + >PUSHB (ZPSymbolBuf),y + bra .3 + +.2 >PUSHW L.MSG.LSYMBOL + txa + >PUSHA + + phx + +.3 ldx #4 + +.4 iny lda (ZPSymbolBuf),y >PUSHA dex - bne .5 - ply - iny - lda (ZPSymbolBuf),y - tax - beq .55 - >PUSHA -.55 dey - lda (ZPSymbolBuf),y - >PUSHA - phy - txa - beq .6 - >PUSHBI 6 - >LDYA L.MSG.PSYMBOL - bra .66 -.6 >PUSHBI 5 - >LDYA L.MSG.LSYMBOL -.66 >SYSCALL printf + bne .4 + + lda #5 + plx + beq .5 + + inc + +.5 >PUSHA + + >SYSCALL printf + pla clc adc #SYML tay - bra .4 + bra .1 + .8 rts *--------------------------------------- SYM.NewOrGetGlobal @@ -147,18 +178,21 @@ SYM.NewOrGetGlobal SYM.NewGlobal jsr SYM.StoreGlobal bcs .99 - >PUSHW ZPLinePtr Pass #1; try to add global... - >LDA.G SYM.hList + >PUSHB.G SYM.hList + >PUSHW ZPLinePtr Pass #1: try to add global... >SYSCALL SListNewKey bcs .9 Already Defined + >STYA.G SYM.GlobalID txa adc ZPLinePtr sta ZPLinePtr bcc .1 inc ZPLinePtr+1 + .1 jsr SYM.PC2Acc jsr SYM.Acc2Global + lda #SYMG >STA.G SYM.GlobalPtr tay @@ -172,12 +206,13 @@ SYM.NewGlobal jsr SYM.StoreGlobal * >SYSCALL printf clc rts + .9 lda #E.SYMBOL.REDEF sec .99 rts *--------------------------------------- -SYM.GetGlobal >PUSHW ZPLinePtr Pass #2: should be already defined... - >LDA.G SYM.hList +SYM.GetGlobal >PUSHB.G SYM.hList + >PUSHW ZPLinePtr Pass #2: should be already defined... >SYSCALL SListLookup bcs .9 >STYA.G SYM.GlobalID @@ -187,13 +222,15 @@ SYM.GetGlobal >PUSHW ZPLinePtr Pass #2: should be already defined... sta ZPLinePtr bcc .1 inc ZPLinePtr+1 -.1 >PUSHWZ Start - >PUSHWI $ffff End - >PUSHW ZPSymbolBuf + +.1 >PUSHB.G SYM.hList >PUSHW.G SYM.GlobalID - >LDA.G SYM.hList + >PUSHW ZPSymbolBuf + >PUSHWI $ffff all + >PUSHWZ from Start >SYSCALL SListGetData bcs .99 + lda #$ff >STA.G SYM.bInGlobal * clc @@ -204,23 +241,27 @@ SYM.GetGlobal >PUSHW ZPLinePtr Pass #2: should be already defined... .99 rts *--------------------------------------- SYM.LookupGlobal + >PUSHB.G SYM.hList >PUSHW ZPLinePtr - >LDA.G SYM.hList >SYSCALL SListLookup bcs .9 + >STYA ZPPtr1 txa adc ZPLinePtr sta ZPLinePtr bcc .1 inc ZPLinePtr+1 + .1 >LDA.G SYM.GlobalID cmp ZPPtr1 bne .3 + iny SYM.GlobalID+1 lda (pData),y cmp ZPPtr1+1 bne .3 + ldy #SYMG-1 .2 lda (ZPSymbolBuf),y sta SRC.ACC.F,y @@ -230,13 +271,14 @@ SYM.LookupGlobal clc rts -.3 >PUSHWZ Start - >PUSHWI SYMG Get only Global value - >PUSHW L.SRC.ACC.F +.3 >PUSHB.G SYM.hList >PUSHW ZPPtr1 - >LDA.G SYM.hList + >PUSHW L.SRC.ACC.F + >PUSHWI SYMG Get only Global value + >PUSHWZ Start >SYSCALL SListGetData rts + .9 lda #E.UNDEF.SYMBOL sec rts @@ -247,43 +289,49 @@ SYM.StoreGlobal >LDA.G ASM.PASS >LDA.G SYM.bInGlobal bpl .8 + >PUSHB.G SYM.hList + >PUSHW.G SYM.GlobalID + >PUSHW ZPSymbolBuf + >LDA.G SYM.GlobalPtr tay lda #0 cpy #SYMG beq .1 + lda (ZPSymbolBuf) ora #SYMG.F.LOCALS sta (ZPSymbolBuf) + lda #0 sta (ZPSymbolBuf),y iny bne .1 inc + .1 >PUSHYA - >PUSHW ZPSymbolBuf - >PUSHW.G SYM.GlobalID - >LDA.G SYM.hList >SYSCALL SListAddData bcs .9 + lda #0 >STA.G SYM.bInGlobal >STA.G MAC.CtxID - rts + .8 clc .9 rts *--------------------------------------- SYM.UpdateGlobal - >PUSHWI SYMG - >PUSHW L.SRC.ACC.F + >PUSHB.G SYM.hList >PUSHW.G SYM.GlobalID - >LDA.G SYM.hList + >PUSHW L.SRC.ACC.F + >PUSHWI SYMG >SYSCALL SListSetData rts *--------------------------------------- SYM.PC2Acc ldy #ASM.PC+3 ldx #3 + .1 lda (pData),y sta SRC.ACC,x dey @@ -317,6 +365,7 @@ SYM.NewLocalA clc >LDA.G SYM.bInGlobal not in a global label bpl .91 + >LDA.G ASM.PASS Pass #2: should be already defined... bne .8 @@ -326,23 +375,30 @@ SYM.NewLocalA clc >LDA.G SYM.GlobalPtr cmp #252 6*42 beq .90 + ldy #ASM.PC+4 + .1 dey lda (pData),y pha cpy #ASM.PC bne .1 + lda #0 bit ZPPtr1 bpl .11 local, Ctx = 0 + >LDA.G MAC.CtxID Get Macro Context ID + .11 pha + >LDA.G SYM.GlobalPtr tay txa Get Back ID sta (ZPSymbolBuf),y ldx #5 MAC ID + PC (4) + .2 pla iny sta (ZPSymbolBuf),y @@ -353,16 +409,20 @@ SYM.NewLocalA clc lda #0 sta (ZPSymbolBuf),y tya +* >DEBUG >STA.G SYM.GlobalPtr + lda (ZPSymbolBuf) ora #SYMG.F.LOCALS sta (ZPSymbolBuf) + .8 clc rts .91 lda #E.INV.LABEL sec rts + .90 lda #E.TOO.MANY.LOCAL sec rts @@ -374,10 +434,12 @@ SYM.NewLocalA clc SYM.GetLocalX lda (ZPSymbolBuf) and #SYMG.F.LOCALS beq .9 + ldy #SYMG .1 lda (ZPSymbolBuf),y beq .9 + txa cmp (ZPSymbolBuf),y bne .4 @@ -390,11 +452,13 @@ SYM.GetLocalX lda (ZPSymbolBuf) bne .3 ldx #0 + .2 iny lda (ZPSymbolBuf),y sta SRC.ACC,x inx cpx #4 + bne .2 lda #2 @@ -408,6 +472,7 @@ SYM.GetLocalX lda (ZPSymbolBuf) adc #SYML tay bra .1 + .9 lda #E.UNDEF.SYMBOL sec rts diff --git a/BIN/ASM.S.txt b/BIN/ASM.S.txt index 4c29f2fb..8547995f 100644 --- a/BIN/ASM.S.txt +++ b/BIN/ASM.S.txt @@ -1,10 +1,9 @@ NEW AUTO 3,1 -*--------------------------------------- .LIST OFF .OP 65C02 .OR $2000 - .TF BIN/ASM + .TF bin/asm *--------------------------------------- PAGE.LEN .EQ 23 DO.MAXDEPTH .EQ 8 @@ -13,27 +12,29 @@ MA.MAXDEPTH .EQ 8 *--------------------------------------- .INB INC/MACROS.I .INB INC/A2OSX.I + .INB INC/MLI.I .INB INC/MLI.E.I *--------------------------------------- .DUMMY .OR ZPBIN ZS.START -ZPPtr1 .BS 2 -ZPPtr2 .BS 2 - ZPTmpBuf .BS 2 ZPLineBuf .BS 2 ZPLinePtr .BS 2 ZPSymbolBuf .BS 2 -ZPMacroBuf .BS 2 -ZPMacroStk .BS 2 - ZPAMPtr .BS 2 ZPRPtr .BS 2 ZPOpsPtr .BS 2 ZPOpDefPtr .BS 2 +ZPMacroStk .BS 2 +ZPMacroBuf .BS 2 +ZPMacroArgBuf .BS 2 + +ZPPtr1 .BS 2 +ZPPtr2 .BS 2 + ZS.END .ED *--------------------------------------- * Symbols @@ -92,12 +93,12 @@ CS.START cld jmp (.1,x) .DA #$61 6502,Level 1 (65c02) .DA #1 BIN Layout Version 1 - .DA #S.PS.F.EVENT S.PS.F + .DA #0 S.PS.F.EVENT .DA #0 .DA CS.END-CS.START CS .DA DS.END-DS.START DS - .DA #ZS.END-ZS.START Zero Page Size - .DA #64 ZP + .DA #64 SS + .DA #ZS.END-ZS.START ZP .DA 0 *-------------------------------------- * Relocation Table @@ -133,7 +134,7 @@ L.MSG.OBJ.FILE .DA MSG.OBJ.FILE L.MSG.T.FILE .DA MSG.T.FILE L.SRC.AM.StrBuf .DA SRC.AM.StrBuf L.ASM.6502 .DA ASM.6502 -L.ASM.T.FILENAME .DA ASM.T.FILENAME +L.ASM.CPU.FILE .DA ASM.CPU.FILE L.FIO.Stat .DA FIO.Stat L.SRC.ACC.F .DA SRC.ACC.F L.T.DIRECTIVES .DA T.DIRECTIVES @@ -207,14 +208,15 @@ J.EXP.OP .DA EXP.OP.EOR ^!|&<=>+-*/ CS.INIT ldy #S.PS.ARGC lda (pPs),y beq .99 + lda #1 >SYSCALL ArgV >PUSHYA >PUSHWI 0 Allocate >SYSCALL RealPath txa - ldy #SRC.hFILENAME - sta (pData),y + >STA.G SRC.hFILENAME + jsr FIO.Init bcs .9 @@ -223,6 +225,7 @@ CS.INIT ldy #S.PS.ARGC jsr MAC.Init bcs .9 + jsr OUT.Init >LDYAI 256 @@ -238,10 +241,12 @@ CS.INIT ldy #S.PS.ARGC >STYA ZPTmpBuf txa >STA.G SRC.hTmpBuf + clc rts -.99 >PUSHBI 0 - >LDYA L.MSG.HELP + +.99 >PUSHW L.MSG.HELP + >PUSHBI 0 >SYSCALL printf lda #E.INV.ARGS sec @@ -259,6 +264,7 @@ CS.RUN ldy #S.PS.hStdIn cmp #$03 Ctrl-C beq .99 Abort....beq=CS + cmp #$13 Ctrl-S bne .11 @@ -267,44 +273,58 @@ CS.RUN ldy #S.PS.hStdIn sta (pData),y bpl .12 + clc rts + .13 >LDA.G bPause bpl .11 + clc .99 rts + .11 >STZ.G bPause .12 >LDA.G SRC.COUNT root file is already opened? bne .10 + + >PUSHW L.MSG.PASS >LDA.G ASM.PASS inc >PUSHA >PUSHBI 1 - >LDYA L.MSG.PASS jsr OUT.Print - - ldy #SRC.hFILENAME - lda (pData),y + + >LDA.G SRC.hFILENAME >SYSCALL GetMemPtr jsr FIO.OpenFile bcs .99 + jsr DIR.Reset jsr SYM.Reset jsr MAC.Reset + .10 >LDYA ZPLineBuf >STYA ZPLinePtr + >LDA.G MAC.StkPtr beq .20 - jsr MAC.ReadLine + +.15 jsr MAC.ReadLine bcc .2 + cmp #E.EMPTYKEY bne .9 - >DEC.G MAC.Depth + + jsr MAC.Pop + bne .15 + .20 jsr FIO.ReadLine bcc .2 + cmp #MLI.E.EOF End Of File? bne .9 + jsr FIO.FileClose >LDA.G SRC.COUNT end of root file ? bne .8 no continue back to previous file @@ -317,6 +337,7 @@ CS.RUN ldy #S.PS.hStdIn sta (pData),y clc rts + .1 jsr SYM.Dump >LDYA L.MSG.END @@ -324,8 +345,10 @@ CS.RUN ldy #S.PS.hStdIn lda #0 End of assembly, exit with no error sec rts + .2 jsr SRC.ParseLine bcs .9 + jsr OUT.PrintLine .8 clc rts @@ -346,17 +369,21 @@ CS.QUIT jsr FIO.FileClose bne CS.QUIT jsr MAC.Quit + jsr SYM.Quit - >LDA.G ASM.T.hMem - beq .1 - >SYSCALL FreeMem -.1 >LDA.G SRC.hFILENAME - beq .2 - >SYSCALL FreeMem -.2 >LDA.G SRC.hLineBuf - beq .3 - >SYSCALL FreeMem -.3 >LDA.G SRC.hTmpBuf + + ldy #ASM.T.hMem + jsr .7 + + ldy #SRC.hFILENAME + jsr .7 + + ldy #SRC.hLineBuf + jsr .7 + + ldy #SRC.hTmpBuf + +.7 lda (pData),y beq .8 >SYSCALL FreeMem @@ -424,9 +451,15 @@ T.LI >PSTR "ON" >PSTR "XOFF" .HS 00 *--------------------------------------- -ASM..T. .AZ ".T." +SRC.MOD.RESERVED >PSTR "#/^<>" +SRC.EXP.RESERVED >PSTR "^!|&<=>+-*/" +SRC.AM.RESERVED >PSTR "[]()," +*--------------------------------------- ASM.6502 .AZ "6502" -MSG.HELP .AZ "A2osX-Macro Assembler (S-C MASM 3.0 Based)\r\nUsage : ASM [type TXT ($04) or S-C/BAS ($FA)]\r\n" +MSG.HELP .AS "A2osX-Macro Assembler (S-C MASM 3.0 Based)\r\n" + .AS "Usage : ASM [type TXT ($04) or S-C/BAS ($FA)]\r\n" + .AS " -L : Override .LIST (C,M,X)OFF\r\n" + .AZ " -T : Override .TF directive\r\n" MSG.PASS .AZ "**** Pass:#%d ****" MSG.SRC.FILE .AZ "**** Reading SRC File:%s" MSG.OBJ.FILE .AZ "**** Writing OBJ File:%s, Type=%02x" @@ -451,11 +484,8 @@ MSG.PSTR .AS "{%S}" MSG.CRLF .AZ "\r\n" MSG.WORD .AZ ">$%H" MSG.ACC .AZ "%b,%d,%h%h%h%h\r\n" -SRC.MOD.RESERVED >PSTR "#/^<>" -SRC.EXP.RESERVED >PSTR "^!|&<=>+-*/" -SRC.AM.RESERVED >PSTR "[]()," *--------------------------------------- -ASM.T.FILENAME .BS 65 +ASM.CPU.FILE .BS 65 FIO.Stat .BS S.STAT @@ -532,6 +562,7 @@ MAC.hBuf .BS 1 MAC.BufPtr .BS 1 MAC.hStk .BS 1 MAC.StkPtr .BS 1 +MAC.hArgBuf .BS 1 MAC.CtxID .BS 1 MAC.ID .BS 2 MAC.Depth .BS 1 diff --git a/BIN/ASM.T.SW16.A.txt b/BIN/ASM.SW16.A.txt similarity index 88% rename from BIN/ASM.T.SW16.A.txt rename to BIN/ASM.SW16.A.txt index 4bf42bc3..d4e13e8a 100644 --- a/BIN/ASM.T.SW16.A.txt +++ b/BIN/ASM.SW16.A.txt @@ -1,6 +1,5 @@ NEW - PREFIX -AUTO 4,1 + AUTO 3,1 *--------------------------------------- T.ADDR.MODES .EQ * .DA #2,$$"R0" @@ -58,6 +57,6 @@ T.REGISTERS .EQ * .HS 00 *--------------------------------------- MAN -SAVE USR/SRC/BIN/ASM.T.SW16.A -LOAD USR/SRC/BIN/ASM.T.SW16.S +SAVE USR/SRC/BIN/ASM.SW16.A +LOAD USR/SRC/BIN/ASM.SW16.S ASM diff --git a/BIN/ASM.T.SW16.O.txt b/BIN/ASM.SW16.O.txt similarity index 94% rename from BIN/ASM.T.SW16.O.txt rename to BIN/ASM.SW16.O.txt index 1a2934b6..f23355e1 100644 --- a/BIN/ASM.T.SW16.O.txt +++ b/BIN/ASM.SW16.O.txt @@ -1,6 +1,5 @@ NEW - PREFIX -AUTO 4,1 + AUTO 3,1 *--------------------------------------- T.OPCODES .EQ * ADD .DA ADD.E+1-* @@ -337,6 +336,6 @@ SUB.E .HS 00 .HS 0000 *--------------------------------------- MAN -SAVE USR/SRC/BIN/ASM.T.SW16.O -LOAD USR/SRC/BIN/ASM.T.SW16.S +SAVE USR/SRC/BIN/ASM.SW16.O +LOAD USR/SRC/BIN/ASM.SW16.S ASM diff --git a/BIN/ASM.SW16.S.txt b/BIN/ASM.SW16.S.txt new file mode 100644 index 00000000..bbf0a777 --- /dev/null +++ b/BIN/ASM.SW16.S.txt @@ -0,0 +1,16 @@ +NEW + AUTO 3,1 + .LIST OFF + .OR $0 + .TF bin/asm.SW16 +*--------------------------------------- + .DA T.ADDR.MODES + .DA T.REGISTERS + .DA T.OPCODES +*--------------------------------------- + .INB USR/SRC/BIN/ASM.SW16.O + .INB USR/SRC/BIN/ASM.SW16.A +*--------------------------------------- +MAN +SAVE USR/SRC/BIN/ASM.SW16.S +ASM diff --git a/BIN/ASM.T.65816.S.txt b/BIN/ASM.T.65816.S.txt deleted file mode 100644 index 2982f78d..00000000 --- a/BIN/ASM.T.65816.S.txt +++ /dev/null @@ -1,17 +0,0 @@ -NEW - PREFIX -AUTO 4,1 - .LIST OFF - .OR $0 - .TF BIN/ASM.T.65816 -*--------------------------------------- - .DA T.ADDR.MODES - .DA T.REGISTERS - .DA T.OPCODES -*--------------------------------------- - .INB USR/SRC/BIN/ASM.T.65816.O - .INB USR/SRC/BIN/ASM.T.65816.A -*--------------------------------------- -MAN -SAVE USR/SRC/BIN/ASM.T.65816.S -ASM diff --git a/BIN/ASM.T.65R02.S.txt b/BIN/ASM.T.65R02.S.txt deleted file mode 100644 index 3c8647e3..00000000 --- a/BIN/ASM.T.65R02.S.txt +++ /dev/null @@ -1,17 +0,0 @@ -NEW - PREFIX -AUTO 4,1 - .LIST OFF - .OR $0 - .TF BIN/ASM.T.65R02 -*--------------------------------------- - .DA T.ADDR.MODES - .DA T.REGISTERS - .DA T.OPCODES -*--------------------------------------- - .INB USR/SRC/BIN/ASM.T.65R02.O - .INB USR/SRC/BIN/ASM.T.65R02.A -*--------------------------------------- -MAN -SAVE USR/SRC/BIN/ASM.T.65R02.S -ASM diff --git a/BIN/ASM.T.Z80.A.txt b/BIN/ASM.Z80.A.txt similarity index 93% rename from BIN/ASM.T.Z80.A.txt rename to BIN/ASM.Z80.A.txt index d292171b..0998eeb8 100644 --- a/BIN/ASM.T.Z80.A.txt +++ b/BIN/ASM.Z80.A.txt @@ -1,6 +1,5 @@ NEW - PREFIX -AUTO 4,1 + AUTO 3,1 *--------------------------------------- T.ADDR.MODES .EQ * .DA #6,$$"A,(HL)" @@ -210,6 +209,6 @@ T.REGISTERS .EQ * .HS 00 *--------------------------------------- MAN -SAVE USR/SRC/BIN/ASM.T.Z80.A -LOAD USR/SRC/BIN/ASM.T.Z80.S +SAVE USR/SRC/BIN/ASM.Z80.A +LOAD USR/SRC/BIN/ASM.Z80.S ASM diff --git a/BIN/ASM.T.Z80.O.txt b/BIN/ASM.Z80.O.txt similarity index 95% rename from BIN/ASM.T.Z80.O.txt rename to BIN/ASM.Z80.O.txt index 30077b37..fe24d574 100644 --- a/BIN/ASM.T.Z80.O.txt +++ b/BIN/ASM.Z80.O.txt @@ -1,6 +1,5 @@ NEW - PREFIX -AUTO 4,1 + AUTO 3,1 *--------------------------------------- T.OPCODES .EQ * ADC .DA ADC.E+1-* @@ -1078,6 +1077,6 @@ XOR.E .HS 00 .HS 0000 *--------------------------------------- MAN -SAVE USR/SRC/BIN/ASM.T.Z80.O -LOAD USR/SRC/BIN/ASM.T.Z80.S +SAVE USR/SRC/BIN/ASM.Z80.O +LOAD USR/SRC/BIN/ASM.Z80.S ASM diff --git a/BIN/ASM.Z80.S.txt b/BIN/ASM.Z80.S.txt new file mode 100644 index 00000000..db48cba7 --- /dev/null +++ b/BIN/ASM.Z80.S.txt @@ -0,0 +1,16 @@ +NEW + AUTO 3,1 + .LIST OFF + .OR $0 + .TF bin/asm.Z80 +*--------------------------------------- + .DA T.ADDR.MODES + .DA T.REGISTERS + .DA T.OPCODES +*--------------------------------------- + .INB USR/SRC/BIN/ASM.Z80.O + .INB USR/SRC/BIN/ASM.Z80.A +*--------------------------------------- +MAN +SAVE USR/SRC/BIN/ASM.Z80.S +ASM diff --git a/BIN/CSH.S.CORE.txt b/BIN/CSH.S.CORE.txt index b000acb9..224db4c8 100644 --- a/BIN/CSH.S.CORE.txt +++ b/BIN/CSH.S.CORE.txt @@ -44,8 +44,8 @@ CSH.Init >SYSCALL SListNew lda #0 >STA.G CSH.ConstPtr >STA.G CSH.StackPtr - sta (ZPCSHConst) - sta (ZPCSHStack) +* sta (ZPCSHConst) +* sta (ZPCSHStack) * >DEC.G bTrace * >DEC.G bDebug @@ -217,7 +217,8 @@ CSH.DIR.DEFINE jsr CSH.CheckSpace jsr CSH.IsLetter bcs .90 - jsr CSH.AddDefine + >LDA.G CSH.hDefines + jsr CSH.NewKey bcs .99 >STYA ZPVarID @@ -360,13 +361,18 @@ CSH.SIZEOF sec rts *-------------------------------------- -CSH.STRUCT jsr CSH.GetCharNB +CSH.STRUCT >ENTER 4 + + jsr CSH.GetCharNB bcs .99 >LDA.G CSH.hTags jsr CSH.NewKey bcs .99 + sta (pStack) + + jsr CSH.GetNextCharNB bcs .99 cmp #'{' @@ -380,7 +386,8 @@ CSH.STRUCT jsr CSH.GetCharNB jsr CSH.GetNextCharNB skip } clc -.99 rts +.99 >LEAVE + rts *-------------------------------------- * Built in Types *-------------------------------------- @@ -725,9 +732,7 @@ CSH.ExpEval ldx ZPPtr1 lda ZPPtr2+1 get OP(n) pha push OP(n) on stack - jsr CSH.GetCharNB - bcs .90 - jmp .11 go check for next token + jmp .10 go check for next token *-------------------------------------- .80 plx any OP on stack ? bmi .88 @@ -930,12 +935,6 @@ CSH.GetNumOnStack * Input : ZPFileBufPtr * Output : Y,A = VarID *-------------------------------------- -CSH.AddDefine >LDA.G CSH.hDefines - jsr CSH.NewKey - bcs .9 - -.9 rts - CSH.AddVar >LDA.G CSH.hSymbols jsr CSH.NewKey bcs .9 diff --git a/BIN/MKDIR.S.txt b/BIN/MKDIR.S.txt index afc04f5e..fa07cec7 100644 --- a/BIN/MKDIR.S.txt +++ b/BIN/MKDIR.S.txt @@ -1,10 +1,9 @@ NEW -PREFIX -AUTO 4,1 + AUTO 3,1 .LIST OFF .OP 65C02 .OR $2000 - .TF BIN/MKDIR + .TF bin/mkdir *-------------------------------------- .INB INC/MACROS.I .INB INC/A2OSX.I diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index cf40ad0f..6ba0b9a3 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -28,13 +28,14 @@ CORE.PSCount .EQ $D1 pPs .EQ $D2 pEvent .EQ $D4 +* .EQ $D6 *-------------------------------------- * PS Context : 40 bytes MAX *-------------------------------------- pCode .EQ $D8 pData .EQ $DA pStack .EQ $DC -pLocal .EQ $DE 8 Bytes +pBase .EQ $DE 8 Bytes ZPBIN .EQ $E0 32 bytes ZPBIN.SIZE .EQ 32 diff --git a/INC/MACROS.I.txt b/INC/MACROS.I.txt index 9b1a799c..85d46426 100644 --- a/INC/MACROS.I.txt +++ b/INC/MACROS.I.txt @@ -447,6 +447,23 @@ FPU.FOUT .EQ 58 PrintF cpy #5 bne :1 .EM +*-------------------------------------- + .MA ENTER + >PUSHB pBase + lda pStack + sta pBase + sec + sbc #]1 + sta pStack + .EM +*-------------------------------------- + .MA LEAVE + pha + lda pStack + sta pBase + >PULLB pBase + pla + .EM *-------------------------------------- .MA POP .DO ]1=1 diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index 3ab87fba..4594fc4a 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -107,7 +107,7 @@ Kernel.Init3 sta SETALTZP sta CORE.PSCount >LDYAI K.STACKTOP >STYA pStack - sta pLocal+1 + sta pBase+1 >PUSHWI FD.NULL >PUSHWI FD.NULL.NAME diff --git a/SYS/KERNEL.S.Z80.txt b/SYS/KERNEL.S.Z80.txt index 7d179453..24c4599a 100644 --- a/SYS/KERNEL.S.Z80.txt +++ b/SYS/KERNEL.S.Z80.txt @@ -1,13 +1,12 @@ NEW -PREFIX -AUTO 4,1 + AUTO 3,1 *-------------------------------------- Z80.pPs .EQ pPs+0F000H Z80.pCode .EQ pCode+0F000H Z80.pData .EQ pData+0F000H Z80.pStack .EQ pStack+0F000H -Z80.pLocal .EQ pLocal+0F000H +Z80.pBase .EQ pBase+0F000H *-------------------------------------- Z80.6502P.N .EQ %10000000 Z80.6502P.V .EQ %01000000