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
@ -9,7 +9,7 @@ Multi-CPU macro assembler based on S-C MASM 3.0 dialect
| 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 |
| .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) | |
| .AZ | Ascii string Zero terminated (C String) | S-C,A2osX | Working | (same as above) | |
| .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
bcc .2
.9 lda #ERR.SYNTAX.ERROR
.9 lda #E.SYNTAX.ERROR
sec
rts
@ -132,11 +132,11 @@ DIR.BS jsr SRC.GetNextCharNB
.8 clc
.9 rts
.99 lda #ERR.RANGE
.99 lda #E.RANGE
sec
rts
.98 lda #ERR.SYNTAX.ERROR
.98 lda #E.SYNTAX.ERROR
sec
rts
*---------------------------------------
@ -171,7 +171,7 @@ DIR.DA jsr SRC.GetNextCharNB
jsr SRC.GetNextChar
bcc .1
.98 lda #ERR.SYNTAX.ERROR
.98 lda #E.SYNTAX.ERROR
clc
.9 rts
@ -208,7 +208,7 @@ DIR.DO >LDA.G ASM.DO.StackPtr
clc
rts
.98 lda #ERR.TOO.MANY.DO
.98 lda #E.TOO.MANY.DO
sec
.99 rts
*---------------------------------------
@ -224,7 +224,7 @@ DIR.DU >LDA.G ASM.DU.ON
clc
rts
DIR.DU.ERR lda #ERR.INV.DIR
DIR.DU.ERR lda #E.INV.DIR
sec
rts
*---------------------------------------
@ -240,7 +240,7 @@ DIR.ED >LDA.G ASM.DU.ON
clc
rts
.9 lda #ERR.INV.DIR
.9 lda #E.INV.DIR
sec
rts
*---------------------------------------
@ -257,11 +257,11 @@ DIR.EL >LDA.G ASM.DO.StackPtr
clc
rts
.9 lda #ERR.ELSE.WITHOUT.DO
.9 lda #E.ELSE.WITHOUT.DO
sec
rts
*---------------------------------------
DIR.EM lda #ERR.MACRO.INV.DEF
DIR.EM lda #E.MACRO.INV.DEF
sec
rts
*---------------------------------------
@ -280,7 +280,7 @@ DIR.EP >LDA.G ASM.PH.ON
clc
rts
.9 lda #ERR.INV.DIR
.9 lda #E.INV.DIR
sec
rts
*---------------------------------------
@ -326,7 +326,7 @@ DIR.EQ clc
clc
rts
.99 lda #ERR.SYNTAX.ERROR
.99 lda #E.SYNTAX.ERROR
sec
.9 rts
*---------------------------------------
@ -344,7 +344,7 @@ DIR.FI ldy #ASM.DO.StackPtr
.1 clc
rts
.99 lda #ERR.INV.DIR
.99 lda #E.INV.DIR
sec
rts
*---------------------------------------
@ -409,7 +409,7 @@ DIR.HS jsr SRC.GetNextCharNB
jsr SRC.IsDigit16
bcc .1
.99 lda #ERR.SYNTAX.ERROR
.99 lda #E.SYNTAX.ERROR
sec
.9 rts
@ -436,7 +436,7 @@ DIR.IN jsr SRC.GetNextCharNB
plp
rts
.9 lda #ERR.SYNTAX.ERROR
.9 lda #E.SYNTAX.ERROR
sec
rts
*---------------------------------------
@ -457,7 +457,7 @@ DIR.LI jsr SRC.GetNextChar
cmp #' '
beq .8
.9 lda #ERR.SYNTAX.ERROR
.9 lda #E.SYNTAX.ERROR
sec
rts
@ -524,7 +524,7 @@ DIR.MA >LDA.G ASM.MA.ON
clc
rts
.9 lda #ERR.MACRO.INV.DEF
.9 lda #E.MACRO.INV.DEF
sec
.99 rts
*---------------------------------------
@ -534,7 +534,7 @@ DIR.OP jsr SRC.GetNextCharNB
>LDYA ZPLinePtr
jmp FIO.LOAD.ASM.T
DIR.OP.SYNERR lda #ERR.SYNTAX.ERROR
DIR.OP.SYNERR lda #E.SYNTAX.ERROR
sec
rts
*---------------------------------------
@ -570,7 +570,7 @@ DIR.PH >LDA.G ASM.PH.ON
jmp DIR.OR
.9 lda #ERR.INV.DIR
.9 lda #E.INV.DIR
sec
rts
*---------------------------------------

View File

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

View File

@ -116,7 +116,7 @@ FIO.OpenFile >STYA ZPPtr1
cmp #IN.MAXDEPTH
bne .1
lda #ERR.SRC.TOO.MANY.IN
lda #E.SRC.TOO.MANY.IN
sec
rts
@ -176,7 +176,7 @@ FIO.OpenFile >STYA ZPPtr1
clc
rts
.98 lda #ERR.SRC.INV.TYPE
.98 lda #E.SRC.INV.TYPE
sec
.99 rts
@ -201,8 +201,14 @@ FIO.ReadLine >LDYA ZPLineBuf
beq .13
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
>INC.G SRC.LINENUM
@ -295,7 +301,7 @@ FIO.ReadLine >LDYA ZPLineBuf
.8 clc
.9 rts
.99 lda #ERR.LINE.TOO.LONG
.99 lda #E.LINE.TOO.LONG
sec
rts
*--------------------------------------
@ -313,7 +319,7 @@ FIO.ReadFromFile
tax $100 byte transfered ?
beq .9
lda #ERR.LINE.TOO.LONG
lda #E.LINE.TOO.LONG
sec
.9 rts
*---------------------------------------

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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