Kernel 0.93 : ASM

This commit is contained in:
Rémy GIBERT 2019-03-25 07:04:40 +00:00
parent 80de403038
commit a7585c2417
27 changed files with 304 additions and 213 deletions

View File

@ -1,4 +1,4 @@
# A2osX Macro Assembler (0.9.1) # A2osX Macro Assembler (0.9.3)
## Description ## Description
@ -9,7 +9,7 @@ Multi-CPU macro assembler based on S-C MASM 3.0 dialect
| Code | Description | Compatibility | Status | Syntax | Comment | | Code | Description | Compatibility | Status | Syntax | Comment |
|-|-|-|-|-|-| |-|-|-|-|-|-|
| .AC | Ascii Compressed string| S-C | NOT IMPL. | | As strings are supposed to be printed with A2osX API, Printf cannot handle 'AC' compressed strings | | .AC | Ascii Compressed string| S-C | NOT IMPL. | | As strings are supposed to be printed with A2osX API, Printf cannot handle 'AC' compressed strings |
| .AS | Ascii String | S-C,A2osX | Working | `.AS dTEXTd` where d is any delimiter `.AS -"TEXT"`produce ascii code with b7=1 | | | .AS | Ascii String | S-C,A2osX | Working | `.AS dTEXTd` where d is any delimiter `.AS -"TEXT"`produce ascii code with b7=1 | |
| .AT | Ascii string Terminated | S-C,A2osX | Working | (same as above) | | | .AT | Ascii string Terminated | S-C,A2osX | Working | (same as above) | |
| .AZ | Ascii string Zero terminated (C String) | S-C,A2osX | Working | (same as above) | | | .AZ | Ascii string Zero terminated (C String) | S-C,A2osX | Working | (same as above) | |
| .BS | Block Storage | S-C,A2osX | Working | | | | .BS | Block Storage | S-C,A2osX | Working | | |

Binary file not shown.

Binary file not shown.

View File

@ -60,7 +60,7 @@ DIR.AS clc
.3 jsr OUT.EmitByte no, emit prev char .3 jsr OUT.EmitByte no, emit prev char
bcc .2 bcc .2
.9 lda #ERR.SYNTAX.ERROR .9 lda #E.SYNTAX.ERROR
sec sec
rts rts
@ -132,11 +132,11 @@ DIR.BS jsr SRC.GetNextCharNB
.8 clc .8 clc
.9 rts .9 rts
.99 lda #ERR.RANGE .99 lda #E.RANGE
sec sec
rts rts
.98 lda #ERR.SYNTAX.ERROR .98 lda #E.SYNTAX.ERROR
sec sec
rts rts
*--------------------------------------- *---------------------------------------
@ -171,7 +171,7 @@ DIR.DA jsr SRC.GetNextCharNB
jsr SRC.GetNextChar jsr SRC.GetNextChar
bcc .1 bcc .1
.98 lda #ERR.SYNTAX.ERROR .98 lda #E.SYNTAX.ERROR
clc clc
.9 rts .9 rts
@ -208,7 +208,7 @@ DIR.DO >LDA.G ASM.DO.StackPtr
clc clc
rts rts
.98 lda #ERR.TOO.MANY.DO .98 lda #E.TOO.MANY.DO
sec sec
.99 rts .99 rts
*--------------------------------------- *---------------------------------------
@ -224,7 +224,7 @@ DIR.DU >LDA.G ASM.DU.ON
clc clc
rts rts
DIR.DU.ERR lda #ERR.INV.DIR DIR.DU.ERR lda #E.INV.DIR
sec sec
rts rts
*--------------------------------------- *---------------------------------------
@ -240,7 +240,7 @@ DIR.ED >LDA.G ASM.DU.ON
clc clc
rts rts
.9 lda #ERR.INV.DIR .9 lda #E.INV.DIR
sec sec
rts rts
*--------------------------------------- *---------------------------------------
@ -257,11 +257,11 @@ DIR.EL >LDA.G ASM.DO.StackPtr
clc clc
rts rts
.9 lda #ERR.ELSE.WITHOUT.DO .9 lda #E.ELSE.WITHOUT.DO
sec sec
rts rts
*--------------------------------------- *---------------------------------------
DIR.EM lda #ERR.MACRO.INV.DEF DIR.EM lda #E.MACRO.INV.DEF
sec sec
rts rts
*--------------------------------------- *---------------------------------------
@ -280,7 +280,7 @@ DIR.EP >LDA.G ASM.PH.ON
clc clc
rts rts
.9 lda #ERR.INV.DIR .9 lda #E.INV.DIR
sec sec
rts rts
*--------------------------------------- *---------------------------------------
@ -326,7 +326,7 @@ DIR.EQ clc
clc clc
rts rts
.99 lda #ERR.SYNTAX.ERROR .99 lda #E.SYNTAX.ERROR
sec sec
.9 rts .9 rts
*--------------------------------------- *---------------------------------------
@ -344,7 +344,7 @@ DIR.FI ldy #ASM.DO.StackPtr
.1 clc .1 clc
rts rts
.99 lda #ERR.INV.DIR .99 lda #E.INV.DIR
sec sec
rts rts
*--------------------------------------- *---------------------------------------
@ -409,7 +409,7 @@ DIR.HS jsr SRC.GetNextCharNB
jsr SRC.IsDigit16 jsr SRC.IsDigit16
bcc .1 bcc .1
.99 lda #ERR.SYNTAX.ERROR .99 lda #E.SYNTAX.ERROR
sec sec
.9 rts .9 rts
@ -436,7 +436,7 @@ DIR.IN jsr SRC.GetNextCharNB
plp plp
rts rts
.9 lda #ERR.SYNTAX.ERROR .9 lda #E.SYNTAX.ERROR
sec sec
rts rts
*--------------------------------------- *---------------------------------------
@ -457,7 +457,7 @@ DIR.LI jsr SRC.GetNextChar
cmp #' ' cmp #' '
beq .8 beq .8
.9 lda #ERR.SYNTAX.ERROR .9 lda #E.SYNTAX.ERROR
sec sec
rts rts
@ -524,7 +524,7 @@ DIR.MA >LDA.G ASM.MA.ON
clc clc
rts rts
.9 lda #ERR.MACRO.INV.DEF .9 lda #E.MACRO.INV.DEF
sec sec
.99 rts .99 rts
*--------------------------------------- *---------------------------------------
@ -534,7 +534,7 @@ DIR.OP jsr SRC.GetNextCharNB
>LDYA ZPLinePtr >LDYA ZPLinePtr
jmp FIO.LOAD.ASM.T jmp FIO.LOAD.ASM.T
DIR.OP.SYNERR lda #ERR.SYNTAX.ERROR DIR.OP.SYNERR lda #E.SYNTAX.ERROR
sec sec
rts rts
*--------------------------------------- *---------------------------------------
@ -570,7 +570,7 @@ DIR.PH >LDA.G ASM.PH.ON
jmp DIR.OR jmp DIR.OR
.9 lda #ERR.INV.DIR .9 lda #E.INV.DIR
sec sec
rts rts
*--------------------------------------- *---------------------------------------

View File

@ -16,7 +16,7 @@ AUTO 4,1
* * = PC * * = PC
*--------------------------------------- *---------------------------------------
EXP.Eval.Missing EXP.Eval.Missing
lda #ERR.MISSING.EXP lda #E.MISSING.EXP
sec sec
rts rts
@ -148,11 +148,11 @@ EXP.EvalExitOK >LDA.G EXP.Modifier
.8 clc .8 clc
EXP.EvalExitRTS rts EXP.EvalExitRTS rts
EXP.EvalExitSYN lda #ERR.SYNTAX.ERROR EXP.EvalExitSYN lda #E.SYNTAX.ERROR
sec sec
rts rts
EXP.EvalExitUND lda #ERR.UNDEF.SYMBOL EXP.EvalExitUND lda #E.UNDEF.SYMBOL
sec sec
rts rts
*--------------------------------------- *---------------------------------------
@ -211,7 +211,7 @@ EXP.GetLocal jsr SRC.GetNextChar
clc clc
rts rts
.9 lda #ERR.SYNTAX.ERROR .9 lda #E.SYNTAX.ERROR
sec sec
.8 rts .8 rts
*--------------------------------------- *---------------------------------------
@ -272,7 +272,7 @@ EXP.Compute ldx SRC.ACC.SIZE
.1 >LDA.G ASM.PASS .1 >LDA.G ASM.PASS
beq .8 beq .8
lda #ERR.UNDEF.SYMBOL lda #E.UNDEF.SYMBOL
sec sec
rts rts
@ -361,7 +361,7 @@ EXP.OP.ADD ldx #0 ARG-ACC->ACC
bcc .8 bcc .8
lda #ERR.VAL.TOO.BIG lda #E.VAL.TOO.BIG
.8 rts .8 rts
*--------------------------------------- *---------------------------------------
EXP.OP.SUB ldx #0 ARG-ACC->ACC EXP.OP.SUB ldx #0 ARG-ACC->ACC
@ -378,7 +378,7 @@ EXP.OP.SUB ldx #0 ARG-ACC->ACC
bcs .8 bcs .8
lda #ERR.VAL.TOO.BIG lda #E.VAL.TOO.BIG
sec sec
rts rts

View File

@ -116,7 +116,7 @@ FIO.OpenFile >STYA ZPPtr1
cmp #IN.MAXDEPTH cmp #IN.MAXDEPTH
bne .1 bne .1
lda #ERR.SRC.TOO.MANY.IN lda #E.SRC.TOO.MANY.IN
sec sec
rts rts
@ -176,7 +176,7 @@ FIO.OpenFile >STYA ZPPtr1
clc clc
rts rts
.98 lda #ERR.SRC.INV.TYPE .98 lda #E.SRC.INV.TYPE
sec sec
.99 rts .99 rts
@ -201,8 +201,14 @@ FIO.ReadLine >LDYA ZPLineBuf
beq .13 beq .13
dey dey
lda #0 replace ending $0D with $00 lda (ZPLineBuf),y
eor #C.CR
beq .22
iny
.22 lda #0 replace ending $0D with $00
.13 sta (ZPLineBuf),y .13 sta (ZPLineBuf),y
>INC.G SRC.LINENUM >INC.G SRC.LINENUM
@ -295,7 +301,7 @@ FIO.ReadLine >LDYA ZPLineBuf
.8 clc .8 clc
.9 rts .9 rts
.99 lda #ERR.LINE.TOO.LONG .99 lda #E.LINE.TOO.LONG
sec sec
rts rts
*-------------------------------------- *--------------------------------------
@ -313,7 +319,7 @@ FIO.ReadFromFile
tax $100 byte transfered ? tax $100 byte transfered ?
beq .9 beq .9
lda #ERR.LINE.TOO.LONG lda #E.LINE.TOO.LONG
sec sec
.9 rts .9 rts
*--------------------------------------- *---------------------------------------

View File

@ -2,7 +2,7 @@ NEW
PREFIX PREFIX
AUTO 4,1 AUTO 4,1
*--------------------------------------- *---------------------------------------
OUT.Init lda #20 OUT.Init lda #PAGE.LEN
>STA.G OUT.LineCnt >STA.G OUT.LineCnt
rts rts
*--------------------------------------- *---------------------------------------
@ -187,7 +187,7 @@ OUT.PrintCR lda #13
OUT.Print1 >DEC.G OUT.LineCnt OUT.Print1 >DEC.G OUT.LineCnt
bne .8 bne .8
lda #20 lda #PAGE.LEN
sta (pData),y sta (pData),y
lda #$80 lda #$80

View File

@ -182,12 +182,12 @@ SRC.ParseLine.Err
rts rts
SRC.ParseLine.InvLbl SRC.ParseLine.InvLbl
lda #ERR.INV.LABEL lda #E.INV.LABEL
sec sec
rts rts
SRC.ParseLine.InvDir SRC.ParseLine.InvDir
lda #ERR.INV.DIR lda #E.INV.DIR
sec sec
rts rts
*--------------------------------------- *---------------------------------------
@ -224,17 +224,15 @@ SRC.ParseLine.ExecMacro
clc clc
rts rts
.90 lda #ERR.MACRO.INV .90 lda #E.MACRO.INV
sec sec
rts rts
.91 lda #ERR.MACRO.INV .91 lda #E.MACRO.INV
sec sec
rts rts
*--------------------------------------- *---------------------------------------
SRC.ParseLine.OpCode SRC.ParseLine.OpCode
stz SRC.AM.StrBuf
>LDYA ZPOpsPtr >LDYA ZPOpsPtr
>STYA ZPOpDefPtr >STYA ZPOpDefPtr
@ -272,11 +270,11 @@ SRC.ParseLine.OpCode
dex dex
bne .2 bne .2
lda (ZPLinePtr),y lda (ZPLinePtr),y
beq .8 End of Line, no AM beq .8 End of Line, no AM
cmp #' ' A space after opcode ? cmp #C.SPACE A space after opcode ?
bne .7 bne .7
tya tya
@ -301,18 +299,24 @@ SRC.ParseLine.OpCode
sta ZPOpDefPtr+1 sta ZPOpDefPtr+1
bra .1 bra .1
.8 jmp SRC.ParseLine.OPAMCheckFF .8 lda #$ff
>STA.G SRC.AMID
jsr SRC.ParseLine.AMCheck4OP
bcs .99
jmp SRC.ParseLine.Emit
.9 lda #ERR.INV.OPCODE .9 lda #E.INV.OPCODE
sec sec
.99 rts .99 rts
*--------------------------------------- *---------------------------------------
SRC.ParseLine.AM SRC.ParseLine.AM
stz SRC.AM.StrBuf
.1 jsr SRC.GetChar .1 jsr SRC.GetChar
bcs SRC.ParseLine.AMCheck bcs .8
.10 cmp #' ' another space ? .10 cmp #' ' another space ?
beq SRC.ParseLine.AMCheck ignore end of line (comment) beq .8 ignore end of line (comment)
jsr SRC.IsAMReserved jsr SRC.IsAMReserved
bcs .2 bcs .2
@ -375,23 +379,49 @@ SRC.ParseLine.AM
.7 jsr SRC.GetNextChar .7 jsr SRC.GetNextChar
bcc .10 bcc .10
jmp SRC.ParseLine.AMCheck .8 jsr SRC.ParseLine.AMCheck
bcs .9
.9 lda #ERR.INV.AM.SYN jsr SRC.ParseLine.AMCheck4OP
bcc .88
.80 jsr SRC.ExpandAddress
cpx #5
bne .8
.9 lda #E.INV.AM
sec sec
.99 rts .99 rts
.88 jmp SRC.ParseLine.Emit
*--------------------------------------- *---------------------------------------
SRC.ParseLine.AMCheck SRC.ParseLine.AMCheck
lda SRC.AM.StrBuf * ldx #5
beq SRC.ParseLine.OPAMCheckFF
*.10 lda SRC.ACC.F,x
* >PUSHA
* dex
* bpl .10
* >PUSHBI 6
* >LDYA L.MSG.ACC
* >SYSCALL printf
>LDYA ZPAMPtr * >LDYA L.SRC.AM.StrBuf
* jsr DEBUG.PSTR
>LDYA ZPAMPtr Check if AM is valid for CPU
>STYA ZPPtr1 >STYA ZPPtr1
ldx #0 ldx #0
.1 inx .1 inx
* phx
* lda #'?'
* >SYSCALL putchar
* >LDYA ZPPtr1
* jsr DEBUG.PSTR
* plx
lda (ZPPtr1) lda (ZPPtr1)
beq .9 beq .9
@ -408,7 +438,9 @@ SRC.ParseLine.AMCheck
txa txa
>STA.G SRC.AMID >STA.G SRC.AMID
bra SRC.ParseLine.OPAMCheck
clc
rts
.6 lda (ZPPtr1) .6 lda (ZPPtr1)
.7 sec .7 sec
@ -418,43 +450,55 @@ SRC.ParseLine.AMCheck
inc ZPPtr1+1 inc ZPPtr1+1
bra .1 bra .1
.9 lda #ERR.INV.AM .9 sec
sec
rts rts
*--------------------------------------- *---------------------------------------
SRC.ParseLine.OPAMCheckFF SRC.ParseLine.AMCheck4OP
lda #$ff Default to no AM lda ZPOpDefPtr Skip nextLoHi,L,"ADC"
>STA.G SRC.AMID ldx ZPOpDefPtr+1
clc
SRC.ParseLine.OPAMCheck adc #2 Skip nextLoHi
ldy #2 Skip nPtr+Len+OP bcc .11
lda (ZPOpDefPtr),y LEN inx
sec LEN Byte
adc #2 nPtr
adc ZPOpDefPtr
sta ZPOpDefPtr
bcc .10
inc ZPOpDefPtr+1
.10 lda (ZPOpDefPtr) .11 sec skip LEN Byte
ldy #2 LEN Byte
adc (ZPOpDefPtr),y
bcc .10
inx
.10 sta ZPPtr1
stx ZPPtr1+1
lda (ZPPtr1) AMID...
.1 >CMP.G SRC.AMID .1 >CMP.G SRC.AMID
beq SRC.ParseLine.Emit beq .8
ldy #1 lda ZPPtr1 Skip AMID,L,"39aa"
lda (ZPOpDefPtr),y ldx ZPPtr1+1
inc inc AMID....
sec bne .12
adc ZPOpDefPtr inx
sta ZPOpDefPtr
.12 sec LEN byte...
ldy #1 String...
adc (ZPPtr1),y
bcc .2 bcc .2
inc ZPOpDefPtr+1 inx
.2 lda (ZPOpDefPtr)
bne .1
.99 lda #ERR.INV.AM.4.OC .2 sta ZPPtr1
stx ZPPtr1+1
lda (ZPPtr1)
bne .1
lda #E.INV.AM.4.OC
sec sec
rts rts
.8 >LDYA ZPPtr1
>STYA ZPOpDefPtr
clc
rts
*--------------------------------------- *---------------------------------------
SRC.ParseLine.Emit SRC.ParseLine.Emit
stz SRC.ACCTMP index in ACC stz SRC.ACCTMP index in ACC
@ -532,11 +576,11 @@ SRC.ParseLine.Emit
.8 clc .8 clc
.9 rts .9 rts
.90 lda #ERR.INV.T.FILE .90 lda #E.INV.T.FILE
sec sec
rts rts
.91 lda #ERR.RANGE .91 lda #E.RANGE
sec sec
rts rts
*--------------------------------------- *---------------------------------------
@ -545,6 +589,33 @@ SRC.AddToBuf inc SRC.AM.StrBuf
sta SRC.AM.StrBuf,y sta SRC.AM.StrBuf,y
rts rts
*--------------------------------------- *---------------------------------------
SRC.ExpandAddress
ldy SRC.AM.StrBuf
.1 lda SRC.AM.StrBuf,y
sta SRC.AM.StrBuf+1,y
dey
cmp #'a'
bne .1
ldx #2 "aa"
tya
beq .8
.2 lda SRC.AM.StrBuf,y
cmp #'a'
bne .8
inx "aaa"
.3 dey
bne .2
.8 inc SRC.AM.StrBuf
rts
*---------------------------------------
SRC.ComputeRel8 jsr SRC.ComputeRel SRC.ComputeRel8 jsr SRC.ComputeRel
bcc .1 bcc .1
@ -675,14 +746,14 @@ SRC.GetDecimal jsr SRC.GetChar
inc SRC.ACC+3 inc SRC.ACC+3
bne .1 bne .1
.9 lda #ERR.VAL.TOO.BIG .9 lda #E.VAL.TOO.BIG
sec sec
rts rts
.8 clc .8 clc
rts rts
.99 lda #ERR.SYNTAX.ERROR .99 lda #E.SYNTAX.ERROR
sec sec
rts rts
*--------------------------------------- *---------------------------------------
@ -726,11 +797,11 @@ SRC.GetHex jsr SRC.GetNextChar skip '$'
.8 clc .8 clc
rts rts
.9 lda #ERR.VAL.TOO.BIG .9 lda #E.VAL.TOO.BIG
sec sec
rts rts
.99 lda #ERR.SYNTAX.ERROR .99 lda #E.SYNTAX.ERROR
sec sec
rts rts
*--------------------------------------- *---------------------------------------
@ -782,11 +853,11 @@ SRC.GetOctal jsr SRC.GetNextChar skip '&'
.8 clc .8 clc
rts rts
.9 lda #ERR.VAL.TOO.BIG .9 lda #E.VAL.TOO.BIG
sec sec
rts rts
.99 lda #ERR.SYNTAX.ERROR .99 lda #E.SYNTAX.ERROR
sec sec
rts rts
*--------------------------------------- *---------------------------------------
@ -836,11 +907,11 @@ SRC.GetBinary jsr SRC.GetNextChar skip '%'
.8 clc .8 clc
rts rts
.9 lda #ERR.VAL.TOO.BIG .9 lda #E.VAL.TOO.BIG
sec sec
rts rts
.99 lda #ERR.SYNTAX.ERROR .99 lda #E.SYNTAX.ERROR
sec sec
rts rts
*--------------------------------------- *---------------------------------------
@ -865,7 +936,7 @@ SRC.GetKeyword >STYA ZPPtr1 KeyWord table
iny iny
cmp (ZPPtr1),y cmp (ZPPtr1),y
bne .6 bne .7
dex dex
bne .3 bne .3
@ -874,11 +945,11 @@ SRC.GetKeyword >STYA ZPPtr1 KeyWord table
beq .4 End of Line ? beq .4 End of Line ?
jsr SRC.IsKeywordLetterUC jsr SRC.IsKeywordLetterUC
bcc .6 Additional letters... bcc .7 Additional letters...
.4 lda ZPLinePtr .4 lda ZPLinePtr found!
clc clc
adc (ZPPtr1) adc (ZPPtr1) skip KW in source line
sta ZPLinePtr sta ZPLinePtr
bcc .5 bcc .5
inc ZPLinePtr+1 inc ZPLinePtr+1
@ -887,15 +958,17 @@ SRC.GetKeyword >STYA ZPPtr1 KeyWord table
clc clc
rts rts
.6 lda (ZPPtr1) .6
.7 lda (ZPPtr1)
sec Add keyword Len+1 sec Add keyword Len+1
adc ZPPtr1 adc ZPPtr1
sta ZPPtr1 sta ZPPtr1
bcc .7 bcc .8
inc ZPPtr1+1 inc ZPPtr1+1
.7 plx Keyword.ID .8 plx Keyword.ID
inx inx
inx inx
bra .1 bra .1
@ -962,8 +1035,6 @@ SRC.IsKeywordLetterUC
.9 sec .9 sec
.99 rts .99 rts
*---------------------------------------
*--------------------------------------- *---------------------------------------
SRC.IsLetterOrDigit SRC.IsLetterOrDigit
jsr SRC.IsDigit10 jsr SRC.IsDigit10
@ -1108,6 +1179,12 @@ SRC.ACC10 lda SRC.ACC ACC*2-> ACC & ACCTMP
.9 rts .9 rts
*--------------------------------------- *---------------------------------------
DEBUG.PSTR >PUSHYA
>PUSHBI 2
>LDYA L.MSG.PSTR
>SYSCALL printf
rts
*---------------------------------------
MAN MAN
SAVE USR/SRC/BIN/ASM.S.SRC SAVE USR/SRC/BIN/ASM.S.SRC
LOAD USR/SRC/BIN/ASM.S LOAD USR/SRC/BIN/ASM.S

View File

@ -24,14 +24,6 @@ SYM.Init >SYSCALL SListNew
>SYSCALL getmem >SYSCALL getmem
bcs .9 bcs .9
>STYA ZPNameBuf
txa
>STA.G SYM.hNameBuf
>LDYAI 256
>SYSCALL getmem
bcs .9
>STYA ZPGlobalBuf >STYA ZPGlobalBuf
txa txa
>STA.G SYM.hGlobalBuf >STA.G SYM.hGlobalBuf
@ -41,12 +33,7 @@ SYM.Init >SYSCALL SListNew
SYM.Reset >STZ.G SYM.bInGlobal SYM.Reset >STZ.G SYM.bInGlobal
rts rts
*--------------------------------------- *---------------------------------------
SYM.Quit >LDA.G SYM.hNameBuf SYM.Quit >LDA.G SYM.hGlobalBuf
beq .2
>SYSCALL FreeMem
.2 >LDA.G SYM.hGlobalBuf
beq .3 beq .3
>SYSCALL FreeMem >SYSCALL FreeMem
@ -56,7 +43,13 @@ SYM.Quit >LDA.G SYM.hNameBuf
>SYSCALL SListFree >SYSCALL SListFree
SYM.Quit.8 clc SYM.Quit.8 clc
SYM.Quit.RTS rts rts
*---------------------------------------
SYM.Dump.End >PUSHW ZPPtr2
>PUSHBI 2
>LDYA L.MSG.SUMMARY
jmp OUT.Print
SYM.Dump.RTS rts
*--------------------------------------- *---------------------------------------
SYM.Dump >LDA.G ASM.LI.ON SYM.Dump >LDA.G ASM.LI.ON
bpl SYM.Quit.8 bpl SYM.Quit.8
@ -70,11 +63,11 @@ SYM.Dump >LDA.G ASM.LI.ON
.1 >LDYA ZPPtr2 .1 >LDYA ZPPtr2
>STYA ZPPtr1 >STYA ZPPtr1
>PUSHW ZPNameBuf >PUSHW ZPTmpBuf
>PUSHW ZPPtr1 >PUSHW ZPPtr1
>LDA.G SYM.hGlobalList >LDA.G SYM.hGlobalList
>SYSCALL SListGetByID >SYSCALL SListGetByID
bcs SYM.Quit.8 bcs SYM.Dump.End
>STYA ZPPtr2 Save Next ID >STYA ZPPtr2 Save Next ID
@ -85,7 +78,7 @@ SYM.Dump >LDA.G ASM.LI.ON
>LDA.G SYM.hGlobalList >LDA.G SYM.hGlobalList
>SYSCALL SListGetData >SYSCALL SListGetData
bcs SYM.Quit.RTS bcs SYM.Dump.RTS
ldy #SYMG.SIZE Get Symbol Size ldy #SYMG.SIZE Get Symbol Size
lda (ZPGlobalBuf),y lda (ZPGlobalBuf),y
@ -112,7 +105,7 @@ SYM.Dump >LDA.G ASM.LI.ON
>SYSCALL printf >SYSCALL printf
>PUSHBI 0 >PUSHBI 0
>LDYA ZPNameBuf Label >LDYA ZPTmpBuf Label
>SYSCALL printf >SYSCALL printf
lda (ZPGlobalBuf) lda (ZPGlobalBuf)
@ -187,7 +180,7 @@ SYM.NewGlobal jsr SYM.StoreGlobal
clc clc
rts rts
.9 lda #ERR.SYMBOL.REDEF .9 lda #E.SYMBOL.REDEF
sec sec
.99 rts .99 rts
*--------------------------------------- *---------------------------------------
@ -217,7 +210,7 @@ SYM.GetGlobal >PUSHW ZPLinePtr Pass #2: should be already defined...
* clc * clc
rts rts
.9 lda #ERR.UNDEF.SYMBOL .9 lda #E.UNDEF.SYMBOL
sec sec
.99 rts .99 rts
*--------------------------------------- *---------------------------------------
@ -262,7 +255,7 @@ SYM.LookupGlobal
>SYSCALL SListGetData >SYSCALL SListGetData
rts rts
.9 lda #ERR.UNDEF.SYMBOL .9 lda #E.UNDEF.SYMBOL
sec sec
rts rts
*--------------------------------------- *---------------------------------------
@ -331,9 +324,9 @@ SYM.Acc2Global ldy #SYMG-1
.2 lda SRC.ACC.F,y .2 lda SRC.ACC.F,y
sta (ZPGlobalBuf),y sta (ZPGlobalBuf),y
dey dey
bpl .2 bpl .2
rts rts
*--------------------------------------- *---------------------------------------
* Local Symbol Record: (5 bytes) * Local Symbol Record: (5 bytes)
@ -347,7 +340,7 @@ SYM.NewOrGetLocalA
bpl .91 bpl .91
>LDA.G ASM.PASS Pass #2: should be already defined... >LDA.G ASM.PASS Pass #2: should be already defined...
bne SYM.GetLocalX bne .8
jsr SYM.GetLocalX Pass #1; try to add jsr SYM.GetLocalX Pass #1; try to add
bcc .9 Already Defined bcc .9 Already Defined
@ -385,18 +378,22 @@ SYM.NewOrGetLocalA
lda #0 lda #0
sta (ZPGlobalBuf),y sta (ZPGlobalBuf),y
clc lda (ZPGlobalBuf)
ora #SYMG.F.LOCALS
sta (ZPGlobalBuf)
.8 clc
rts rts
.91 lda #ERR.INV.LABEL .91 lda #E.INV.LABEL
sec sec
rts rts
.90 lda #ERR.TOO.MANY.LOCAL .90 lda #E.TOO.MANY.LOCAL
sec sec
rts rts
.9 lda #ERR.SYMBOL.REDEF .9 lda #E.SYMBOL.REDEF
sec sec
rts rts
*--------------------------------------- *---------------------------------------
@ -404,7 +401,7 @@ SYM.GetLocalX lda (ZPGlobalBuf)
and #SYMG.F.LOCALS and #SYMG.F.LOCALS
beq .9 beq .9
ldy #SYML ldy #SYMG
.1 lda (ZPGlobalBuf),y .1 lda (ZPGlobalBuf),y
beq .9 beq .9
@ -413,15 +410,18 @@ SYM.GetLocalX lda (ZPGlobalBuf)
cmp (ZPGlobalBuf),y cmp (ZPGlobalBuf),y
bne .3 bne .3
ldx #4 ldx #0
stx SRC.ACC.SIZE
.2 iny .2 iny
lda (ZPGlobalBuf),y lda (ZPGlobalBuf),y
sta SRC.ACC.SIZE,x sta SRC.ACC,x
dex inx
cpx #4
bne .2 bne .2
lda #2
sta SRC.ACC.SIZE
clc clc
rts rts
@ -431,7 +431,7 @@ SYM.GetLocalX lda (ZPGlobalBuf)
tay tay
bne .1 bne .1
.9 lda #ERR.UNDEF.SYMBOL .9 lda #E.UNDEF.SYMBOL
sec sec
rts rts
*--------------------------------------- *---------------------------------------

View File

@ -4,10 +4,13 @@ AUTO 4,1
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
.TF BIN/DEV/ASM .TF BIN/ASM
*---------------------------------------
PAGE.LEN .EQ 23
*--------------------------------------- *---------------------------------------
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/A2OSX.I .INB INC/A2OSX.I
.INB INC/MLI.E.I
*--------------------------------------- *---------------------------------------
.DUMMY .DUMMY
.OR ZPBIN .OR ZPBIN
@ -15,9 +18,9 @@ ZS.START
ZPPtr1 .BS 2 ZPPtr1 .BS 2
ZPPtr2 .BS 2 ZPPtr2 .BS 2
ZPTmpBuf .BS 2
ZPLineBuf .BS 2 ZPLineBuf .BS 2
ZPLinePtr .BS 2 ZPLinePtr .BS 2
ZPNameBuf .BS 2
ZPGlobalBuf .BS 2 ZPGlobalBuf .BS 2
ZPMacroBuf .BS 2 ZPMacroBuf .BS 2
@ -28,7 +31,6 @@ ZPRPtr .BS 2
ZPOpsPtr .BS 2 ZPOpsPtr .BS 2
ZPOpDefPtr .BS 2 ZPOpDefPtr .BS 2
ZPTmpBuf .BS 2
ZS.END .ED ZS.END .ED
*--------------------------------------- *---------------------------------------
* Symbols * Symbols
@ -60,33 +62,34 @@ DO.MAXDEPTH .EQ 8
IN.MAXDEPTH .EQ 7 IN.MAXDEPTH .EQ 7
MA.MAXDEPTH .EQ 8 MA.MAXDEPTH .EQ 8
*--------------------------------------- *---------------------------------------
ERR.INV.ARGS .EQ $80 E.SYNTAX.ERROR .EQ $A0
ERR.INV.T.FILE .EQ $81 E.SYM.TOO.LONG .EQ $A1
ERR.SRC.INV.TYPE .EQ $90 E.VAL.TOO.BIG .EQ $A2
ERR.SRC.TOO.MANY.IN .EQ $91 E.LINE.TOO.LONG .EQ $A3
ERR.SRC.UNEXP.EOF .EQ $92 E.INV.LABEL .EQ $A4
ERR.SYNTAX.ERROR .EQ $A0 E.INV.DIR .EQ $A5
ERR.SYM.TOO.LONG .EQ $A1 E.INV.OPCODE .EQ $A6
ERR.VAL.TOO.BIG .EQ $A2 E.INV.AM.SYN .EQ $A7
ERR.LINE.TOO.LONG .EQ $A3 E.INV.AM .EQ $A8
ERR.INV.LABEL .EQ $A4 E.INV.AM.4.OC .EQ $A9
ERR.INV.DIR .EQ $A5 E.RANGE .EQ $AA
ERR.INV.OPCODE .EQ $A6 E.UNDEF.SYMBOL .EQ $AB
ERR.INV.AM.SYN .EQ $A7 E.SYMBOL.REDEF .EQ $AC
ERR.INV.AM .EQ $A8 E.TOO.MANY.DO .EQ $AD
ERR.INV.AM.4.OC .EQ $A9 E.ELSE.WITHOUT.DO .EQ $AE
ERR.RANGE .EQ $AA E.TOO.MANY.LOCAL .EQ $AF
ERR.UNDEF.SYMBOL .EQ $AB E.MISSING.EXP .EQ $B0
ERR.SYMBOL.REDEF .EQ $AC E.EXP.SYN.ERROR .EQ $B1
ERR.TOO.MANY.DO .EQ $AD E.MACRO.INV.DEF .EQ $B2
ERR.ELSE.WITHOUT.DO .EQ $AE E.MACRO.TOO.BIG .EQ $B3
ERR.TOO.MANY.LOCAL .EQ $AF E.MACRO.INV .EQ $B4
ERR.MISSING.EXP .EQ $B0 E.MACRO.TOO.MANY .EQ $B5
ERR.EXP.SYN.ERROR .EQ $B1 *
ERR.MACRO.INV.DEF .EQ $E0 E.INV.ARGS .EQ $BA
ERR.MACRO.TOO.BIG .EQ $E1 E.INV.T.FILE .EQ $BC
ERR.MACRO.INV .EQ $E2 E.SRC.INV.TYPE .EQ $BD
ERR.MACRO.TOO.MANY .EQ $E3 E.SRC.TOO.MANY.IN .EQ $BE
E.SRC.UNEXP.EOF .EQ $BF
*-------------------------------------- *--------------------------------------
* File Header (16 Bytes) * File Header (16 Bytes)
*-------------------------------------- *--------------------------------------
@ -118,13 +121,16 @@ L.MSG.EQU0 .DA MSG.EQU0
.DA MSG.EQU2 .DA MSG.EQU2
.DA MSG.EQU3 .DA MSG.EQU3
.DA MSG.EQU4 .DA MSG.EQU4
L.MSG.LSYMBOL .DA MSG.LSYMBOL L.MSG.PASS .DA MSG.PASS
L.MSG.SRCLINE .DA MSG.SRCLINE L.MSG.SRCLINE .DA MSG.SRCLINE
L.MSG.ERROR .DA MSG.ERROR L.MSG.ERROR .DA MSG.ERROR
L.MSG.SYMBOLS .DA MSG.SYMBOLS L.MSG.SYMBOLS .DA MSG.SYMBOLS
L.MSG.CRLF .DA MSG.CRLF L.MSG.LSYMBOL .DA MSG.LSYMBOL
L.MSG.SUMMARY .DA MSG.SUMMARY L.MSG.SUMMARY .DA MSG.SUMMARY
L.MSG.PASS .DA MSG.PASS L.MSG.END .DA MSG.END
L.MSG.PSTR .DA MSG.PSTR
L.MSG.CRLF .DA MSG.CRLF
L.MSG.ACC .DA MSG.ACC
L.MSG.SRC.FILE .DA MSG.SRC.FILE L.MSG.SRC.FILE .DA MSG.SRC.FILE
L.MSG.OBJ.FILE .DA MSG.OBJ.FILE L.MSG.OBJ.FILE .DA MSG.OBJ.FILE
L.MSG.T.FILE .DA MSG.T.FILE L.MSG.T.FILE .DA MSG.T.FILE
@ -244,7 +250,7 @@ CS.INIT ldy #S.PS.ARGC
.99 >PUSHBI 0 .99 >PUSHBI 0
>LDYA L.MSG.HELP >LDYA L.MSG.HELP
>SYSCALL printf >SYSCALL printf
lda #ERR.INV.ARGS lda #E.INV.ARGS
sec sec
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
@ -304,16 +310,18 @@ CS.RUN ldy #S.PS.hStdIn
.10 jsr FIO.ReadLine .10 jsr FIO.ReadLine
bcc .2 bcc .2
cmp #$4C End Of File? cmp #MLI.E.EOF End Of File?
bne .9 bne .9
jsr FIO.FileClose jsr FIO.FileClose
ldy #SRC.COUNT end of root file ? >LDA.G SRC.COUNT end of root file ?
lda (pData),y bne .8 no continue back to previous file
bne .8 no continue back to previous file
>DEBUG
>LDA.G ASM.PASS End of pass #2 ?? jsr SYM.StoreGlobal Make sure last Global flushed
>LDA.G ASM.PASS End of pass #2 ??
bne .1 bne .1
inc inc
sta (pData),y sta (pData),y
@ -322,12 +330,10 @@ CS.RUN ldy #S.PS.hStdIn
.1 jsr SYM.Dump .1 jsr SYM.Dump
>PUSHW ZPLinePtr >LDYA L.MSG.END
>PUSHBI 2 >SYSCALL puts
>LDYA L.MSG.SUMMARY
jsr OUT.Print
lda #0 End of assembly, exit with no error lda #0 End of assembly, exit with no error
sec sec
rts rts
@ -341,7 +347,8 @@ CS.RUN ldy #S.PS.hStdIn
.9 pha .9 pha
jsr OUT.PrintLineErr jsr OUT.PrintLineErr
>DEBUG
jsr SYM.StoreGlobal Make sure last Global flushed
jsr SYM.Dump jsr SYM.Dump
pla pla
sec sec
@ -456,12 +463,15 @@ MSG.EQU1 .AZ " [ %h] "
MSG.EQU2 .AZ " [ %h%h] " MSG.EQU2 .AZ " [ %h%h] "
MSG.EQU3 .AZ " [ %h%h%h] " MSG.EQU3 .AZ " [ %h%h%h] "
MSG.EQU4 .AZ " [%h%h%h%h] " MSG.EQU4 .AZ " [%h%h%h%h] "
MSG.LSYMBOL .AZ " .%d=%h%h%h%h"
MSG.SRCLINE .AZ " %05D %s\r\n" MSG.SRCLINE .AZ " %05D %s\r\n"
MSG.ERROR .AZ "**** Fatal Error $%h" MSG.ERROR .AZ "**** Fatal Error $%h"
MSG.SYMBOLS .AZ "Symbol Table:" MSG.SYMBOLS .AZ "Symbol Table:"
MSG.CRLF .AZ " \r\n" MSG.LSYMBOL .AZ " .%d=%h%h%h%h"
MSG.SUMMARY .AZ "\r\nSymbol Table Size : %5D Bytes.\r\nEnd Of Assembly.\r\n" MSG.SUMMARY .AZ "\r\nSymbol Table Size : %5D Bytes.\r\n"
MSG.END .AZ "End Of Assembly."
MSG.PSTR .AS "{%S}"
MSG.CRLF .AZ "\r\n"
MSG.ACC .AZ "%b,%d,%h%h%h%h\r\n"
SRC.MOD.RESERVED >PSTR "#/^<>" SRC.MOD.RESERVED >PSTR "#/^<>"
SRC.EXP.RESERVED >PSTR "^!|&<=>+-*/" SRC.EXP.RESERVED >PSTR "^!|&<=>+-*/"
SRC.AM.RESERVED >PSTR "[]()," SRC.AM.RESERVED >PSTR "[](),"
@ -538,8 +548,6 @@ SYM.GlobalID .BS 2
SYM.hGlobalBuf .BS 1 SYM.hGlobalBuf .BS 1
SYM.GlobalPtr .BS 1 SYM.GlobalPtr .BS 1
SYM.hNameBuf .BS 1
SYM.LookupID .BS 2 SYM.LookupID .BS 2
MAC.hMacroList .BS 1 MAC.hMacroList .BS 1

View File

@ -1,5 +1,5 @@
NEW NEW
PREFIX /A2OSX.BUILD PREFIX
AUTO 4,1 AUTO 4,1
*--------------------------------------- *---------------------------------------
T.ADDR.MODES .EQ * T.ADDR.MODES .EQ *

View File

@ -1,5 +1,5 @@
NEW NEW
PREFIX /A2OSX.BUILD PREFIX
AUTO 4,1 AUTO 4,1
*--------------------------------------- *---------------------------------------
T.OPCODES .EQ * T.OPCODES .EQ *

View File

@ -1,5 +1,5 @@
NEW NEW
PREFIX /A2OSX.BUILD PREFIX
AUTO 4,1 AUTO 4,1
.LIST OFF .LIST OFF
.OR $0 .OR $0

View File

@ -1,5 +1,5 @@
NEW NEW
PREFIX /A2OSX.BUILD PREFIX
AUTO 4,1 AUTO 4,1
*--------------------------------------- *---------------------------------------
T.ADDR.MODES .EQ * T.ADDR.MODES .EQ *

View File

@ -1,5 +1,5 @@
NEW NEW
PREFIX /A2OSX.BUILD PREFIX
AUTO 4,1 AUTO 4,1
*--------------------------------------- *---------------------------------------
T.OPCODES .EQ * T.OPCODES .EQ *

View File

@ -1,5 +1,5 @@
NEW NEW
PREFIX /A2OSX.BUILD PREFIX
AUTO 4,1 AUTO 4,1
.LIST OFF .LIST OFF
.OR $0 .OR $0

View File

@ -1,5 +1,5 @@
NEW NEW
PREFIX /A2OSX.BUILD PREFIX
AUTO 4,1 AUTO 4,1
*--------------------------------------- *---------------------------------------
T.ADDR.MODES .EQ * T.ADDR.MODES .EQ *

View File

@ -1,5 +1,5 @@
NEW NEW
PREFIX /A2OSX.BUILD PREFIX
AUTO 4,1 AUTO 4,1
*--------------------------------------- *---------------------------------------
T.OPCODES .EQ * T.OPCODES .EQ *

View File

@ -1,5 +1,5 @@
NEW NEW
PREFIX /A2OSX.BUILD PREFIX
AUTO 4,1 AUTO 4,1
.LIST OFF .LIST OFF
.OR $0 .OR $0

View File

@ -1,5 +1,5 @@
NEW NEW
PREFIX PREFIX
AUTO 4,1 AUTO 4,1
*--------------------------------------- *---------------------------------------
T.ADDR.MODES .EQ * T.ADDR.MODES .EQ *
@ -58,6 +58,6 @@ T.REGISTERS .EQ *
.HS 00 .HS 00
*--------------------------------------- *---------------------------------------
MAN MAN
SAVE /A2OSX.BUILD/BIN/DEV/ASM.T.SW16.A SAVE USR/SRC/BIN/ASM.T.SW16.A
LOAD /A2OSX.BUILD/BIN/DEV/ASM.T.SW16.S LOAD USR/SRC/BIN/ASM.T.SW16.S
ASM ASM

View File

@ -1,5 +1,5 @@
NEW NEW
PREFIX PREFIX
AUTO 4,1 AUTO 4,1
*--------------------------------------- *---------------------------------------
T.OPCODES .EQ * T.OPCODES .EQ *
@ -337,6 +337,6 @@ SUB.E .HS 00
.HS 0000 .HS 0000
*--------------------------------------- *---------------------------------------
MAN MAN
SAVE /A2OSX.BUILD/BIN/DEV/ASM.T.SW16.O SAVE USR/SRC/BIN/ASM.T.SW16.O
LOAD /A2OSX.BUILD/BIN/DEV/ASM.T.SW16.S LOAD USR/SRC/BIN/ASM.T.SW16.S
ASM ASM

View File

@ -1,5 +1,5 @@
NEW NEW
PREFIX PREFIX
AUTO 4,1 AUTO 4,1
.LIST OFF .LIST OFF
.OR $0 .OR $0
@ -9,9 +9,9 @@ AUTO 4,1
.DA T.REGISTERS .DA T.REGISTERS
.DA T.OPCODES .DA T.OPCODES
*--------------------------------------- *---------------------------------------
.INB BIN/DEV/ASM.T.SW16.O .INB USR/SRC/BIN/ASM.T.SW16.O
.INB BIN/DEV/ASM.T.SW16.A .INB USR/SRC/BIN/ASM.T.SW16.A
*--------------------------------------- *---------------------------------------
MAN MAN
SAVE /A2OSX.BUILD/BIN/DEV/ASM.T.SW16.S SAVE USR/SRC/BIN/ASM.T.SW16.S
ASM ASM

View File

@ -1,5 +1,5 @@
NEW NEW
PREFIX /A2OSX.BUILD PREFIX
AUTO 4,1 AUTO 4,1
*--------------------------------------- *---------------------------------------
T.ADDR.MODES .EQ * T.ADDR.MODES .EQ *

View File

@ -1,5 +1,5 @@
NEW NEW
PREFIX /A2OSX.BUILD PREFIX
AUTO 4,1 AUTO 4,1
*--------------------------------------- *---------------------------------------
T.OPCODES .EQ * T.OPCODES .EQ *

View File

@ -1,5 +1,5 @@
NEW NEW
PREFIX /A2OSX.BUILD PREFIX
AUTO 4,1 AUTO 4,1
.LIST OFF .LIST OFF
.OR $0 .OR $0

View File

@ -1,10 +1,10 @@
NEW NEW
PREFIX PREFIX
AUTO 4,1 AUTO 4,1
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
.TF BIN/DEV/MEMDUMP .TF BIN/MEMDUMP
*-------------------------------------- *--------------------------------------
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/A2OSX.I .INB INC/A2OSX.I

View File

@ -1,10 +1,10 @@
NEW NEW
PREFIX PREFIX
AUTO 4,1 AUTO 4,1
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
.TF BIN/DEV/RPCDUMP .TF BIN/RPCDUMP
*-------------------------------------- *--------------------------------------
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/A2OSX.I .INB INC/A2OSX.I