mirror of
https://github.com/A2osX/A2osX.git
synced 2024-11-22 16:31:07 +00:00
Work In Progress (ASM)
This commit is contained in:
parent
7fa3545a19
commit
71a00af938
@ -47,6 +47,12 @@ DIR.EP clc
|
|||||||
*---------------------------------------
|
*---------------------------------------
|
||||||
DIR.EQ jsr EXP.Eval
|
DIR.EQ jsr EXP.Eval
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
|
ldx #3
|
||||||
|
.1 lda SRC.ACC,x
|
||||||
|
sta SRC.GLabel.Value,x
|
||||||
|
dex
|
||||||
|
bpl .1
|
||||||
|
|
||||||
clc
|
clc
|
||||||
.9 rts
|
.9 rts
|
||||||
@ -63,13 +69,23 @@ DIR.IN jsr SRC.GetArg
|
|||||||
>LDYA L.SRC.BUFFER
|
>LDYA L.SRC.BUFFER
|
||||||
>SYSCALL SYS.NewPStrYA
|
>SYSCALL SYS.NewPStrYA
|
||||||
|
|
||||||
|
pha
|
||||||
|
|
||||||
jsr FIO.OpenFileA
|
jsr FIO.OpenFileA
|
||||||
bcs .99
|
plx
|
||||||
|
php
|
||||||
|
pha
|
||||||
|
|
||||||
|
txa
|
||||||
|
>SYSCALL SYS.FreeMemA
|
||||||
|
|
||||||
|
pla
|
||||||
|
plp
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
|
||||||
.9 lda #ERR.SYNTAX.ERROR
|
.9 lda #ERR.SYNTAX.ERROR
|
||||||
.99 sec
|
sec
|
||||||
rts
|
rts
|
||||||
*---------------------------------------
|
*---------------------------------------
|
||||||
DIR.LI >LDYA L.T.LI
|
DIR.LI >LDYA L.T.LI
|
||||||
@ -100,6 +116,10 @@ DIR.LI.ON ldy #ASM.LI.ON
|
|||||||
DIR.LI.OFF ldy #ASM.LI.ON
|
DIR.LI.OFF ldy #ASM.LI.ON
|
||||||
clc
|
clc
|
||||||
DIR.LI.APPLY lsr
|
DIR.LI.APPLY lsr
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
lda #$80
|
||||||
sta (pData),y
|
sta (pData),y
|
||||||
rts
|
rts
|
||||||
*---------------------------------------
|
*---------------------------------------
|
||||||
|
@ -13,22 +13,26 @@ AUTO 6
|
|||||||
* & = octal
|
* & = octal
|
||||||
* * = PC
|
* * = PC
|
||||||
*---------------------------------------
|
*---------------------------------------
|
||||||
EXP.Eval jsr SRC.GetCharNB
|
EXP.Eval stz EXP.Operator
|
||||||
|
|
||||||
|
jsr SRC.GetCharNB
|
||||||
beq .98
|
beq .98
|
||||||
cmp #'*'
|
cmp #'*'
|
||||||
bne .10
|
bne .10
|
||||||
|
|
||||||
ldy #ASM.PC
|
ldy #ASM.PC+3
|
||||||
ldx #0
|
ldx #3
|
||||||
|
|
||||||
.11 lda (pData),y
|
.11 lda (pData),y
|
||||||
sta SRC.ACC,x
|
sta SRC.ACC,x
|
||||||
inx
|
dey
|
||||||
iny
|
dex
|
||||||
cpx #4
|
bpl .11
|
||||||
bne .11
|
|
||||||
|
|
||||||
bra .8
|
jsr SRC.GetCharNB
|
||||||
|
bne .97
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
.10 jsr SRC.IsDigit10 Decimal constant ?
|
.10 jsr SRC.IsDigit10 Decimal constant ?
|
||||||
bcs .1
|
bcs .1
|
||||||
@ -62,7 +66,24 @@ EXP.Eval jsr SRC.GetCharNB
|
|||||||
|
|
||||||
.4 jsr SRC.IsLetter Symbol ?
|
.4 jsr SRC.IsLetter Symbol ?
|
||||||
bcs .97
|
bcs .97
|
||||||
|
dec SRC.BufPtr
|
||||||
|
>LDYA L.SRC.ELabel.Len
|
||||||
|
jsr SRC.GetLabel
|
||||||
|
bcs .97
|
||||||
|
jsr SYM.FindGlobal
|
||||||
|
bcc .41
|
||||||
|
|
||||||
|
ldy #ASM.PASS
|
||||||
|
lda (pData),y pass#2?
|
||||||
|
bne .96 yes, undefined symbol
|
||||||
|
|
||||||
|
jsr
|
||||||
|
|
||||||
|
.41 ldx #3
|
||||||
|
.5 lda SRC.FLabel.Value,x
|
||||||
|
sta SRC.ACC,x
|
||||||
|
dex
|
||||||
|
bpl .5
|
||||||
|
|
||||||
.8 clc
|
.8 clc
|
||||||
rts
|
rts
|
||||||
@ -74,6 +95,10 @@ EXP.Eval jsr SRC.GetCharNB
|
|||||||
.98 lda #ERR.MISSING.EXP
|
.98 lda #ERR.MISSING.EXP
|
||||||
sec
|
sec
|
||||||
.99 rts
|
.99 rts
|
||||||
|
|
||||||
|
.96 lda #ERR.UNDEF.SYMBOL
|
||||||
|
sec
|
||||||
|
rts
|
||||||
*---------------------------------------
|
*---------------------------------------
|
||||||
stz SRC.ACC
|
stz SRC.ACC
|
||||||
stz SRC.ACC+1
|
stz SRC.ACC+1
|
||||||
|
@ -5,21 +5,25 @@ INC 1
|
|||||||
AUTO 6
|
AUTO 6
|
||||||
.LIST OFF
|
.LIST OFF
|
||||||
*---------------------------------------
|
*---------------------------------------
|
||||||
FIO.OpenFileA sta hFileName
|
FIO.OpenFileA sta FIO.hFileName
|
||||||
>SYSCALL SYS.GetMemPtrA
|
>SYSCALL SYS.GetMemPtrA
|
||||||
>STYA ZPPtr1
|
>STYA ZPPtr1
|
||||||
|
|
||||||
|
stz FIO.hFullPath
|
||||||
|
|
||||||
ldy #1
|
ldy #1
|
||||||
lda (ZPPtr1),y
|
lda (ZPPtr1),y
|
||||||
cmp #'/'
|
cmp #'/'
|
||||||
beq .1
|
beq .1
|
||||||
|
|
||||||
>PUSHB hFileName
|
>PUSHB FIO.hFileName
|
||||||
ldy #S.PS.hPREFIX
|
ldy #S.PS.hPREFIX
|
||||||
lda (pPs),y
|
lda (pPs),y
|
||||||
>PUSHA
|
>PUSHA
|
||||||
>SYSCALL SYS.PStrCat
|
>SYSCALL SYS.PStrCat
|
||||||
sta hFileName
|
sta FIO.hFullPath
|
||||||
|
sta FIO.hFileName
|
||||||
|
|
||||||
>SYSCALL SYS.GetMemPtrA
|
>SYSCALL SYS.GetMemPtrA
|
||||||
>STYA ZPPtr1
|
>STYA ZPPtr1
|
||||||
|
|
||||||
@ -34,9 +38,9 @@ FIO.OpenFileA sta hFileName
|
|||||||
|
|
||||||
lda #ERR.SRC.TOO.MANY.IN
|
lda #ERR.SRC.TOO.MANY.IN
|
||||||
sec
|
sec
|
||||||
rts
|
bra FIO.OpenFileA.Exit
|
||||||
|
|
||||||
.10 lda hFileName
|
.10 lda FIO.hFileName
|
||||||
>SYSCALL SYS.MLIOpenA
|
>SYSCALL SYS.MLIOpenA
|
||||||
bcs .99
|
bcs .99
|
||||||
|
|
||||||
@ -57,7 +61,7 @@ FIO.OpenFileA sta hFileName
|
|||||||
txa
|
txa
|
||||||
sta (pData),y
|
sta (pData),y
|
||||||
|
|
||||||
lda hFileName
|
lda FIO.hFileName
|
||||||
>SYSCALL SYS.MLIGetFileInfoA
|
>SYSCALL SYS.MLIGetFileInfoA
|
||||||
bcs .99
|
bcs .99
|
||||||
|
|
||||||
@ -100,11 +104,18 @@ FIO.OpenFileA sta hFileName
|
|||||||
inc
|
inc
|
||||||
sta (pData),y
|
sta (pData),y
|
||||||
clc
|
clc
|
||||||
rts
|
bra FIO.OpenFileA.Exit
|
||||||
|
|
||||||
.98 lda #ERR.SRC.INV.TYPE
|
.98 lda #ERR.SRC.INV.TYPE
|
||||||
|
|
||||||
.99 sec
|
.99 sec
|
||||||
|
FIO.OpenFileA.Exit php
|
||||||
|
pha
|
||||||
|
lda FIO.hFullPath
|
||||||
|
beq .1
|
||||||
|
>SYSCALL SYS.FreeMemA
|
||||||
|
.1 pla
|
||||||
|
plp
|
||||||
rts
|
rts
|
||||||
*---------------------------------------
|
*---------------------------------------
|
||||||
FIO.ReadLine stz SRC.BufPtr
|
FIO.ReadLine stz SRC.BufPtr
|
||||||
|
@ -13,10 +13,12 @@ SRC.ParseLine ldx TmpBuffer256
|
|||||||
cpx #';' Comment?
|
cpx #';' Comment?
|
||||||
beq SRC.ParseLine.Skip
|
beq SRC.ParseLine.Skip
|
||||||
|
|
||||||
|
stz SRC.GLabel.New
|
||||||
|
|
||||||
cpx #' ' no label...go scan dir/opcode
|
cpx #' ' no label...go scan dir/opcode
|
||||||
beq .4
|
beq .4
|
||||||
|
|
||||||
.1 cpx #'.' local symbol?
|
cpx #'.' local symbol?
|
||||||
bne .2
|
bne .2
|
||||||
jsr SRC.ParseLine.SymL
|
jsr SRC.ParseLine.SymL
|
||||||
bra .3
|
bra .3
|
||||||
@ -46,47 +48,117 @@ SRC.ParseLine ldx TmpBuffer256
|
|||||||
bcs SRC.ParseLine.Err
|
bcs SRC.ParseLine.Err
|
||||||
|
|
||||||
|
|
||||||
SRC.ParseLine.Ok lda SRC.GLabel.Len
|
SRC.ParseLine.Ok lda SRC.GLabel.New
|
||||||
beq .1
|
bpl .1
|
||||||
|
|
||||||
* jsr SYM.AddToGBlock
|
lda SRC.GLabel.Flags
|
||||||
* bcs SRC.ParseLine.Err
|
lsr .SE ?
|
||||||
.1
|
bcs .1 yes, update during pass 1 & 2
|
||||||
|
|
||||||
|
ldy #ASM.PASS
|
||||||
|
lda (pData),y pass#2?
|
||||||
|
bne .8 yes, skip to avoid redefinition error
|
||||||
|
|
||||||
|
jsr SYM.FindGlobal
|
||||||
|
bcs SRC.ParseLine.Redef
|
||||||
|
|
||||||
|
.1 jsr SYM.AddGToGBlock
|
||||||
|
bcs SRC.ParseLine.Err
|
||||||
|
|
||||||
|
|
||||||
|
.8
|
||||||
|
|
||||||
SRC.ParseLine.skip clc
|
SRC.ParseLine.skip clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
SRC.ParseLine.Err1 lda #ERR.INVALID.LABEL
|
SRC.ParseLine.Err1 lda #ERR.INVALID.LABEL
|
||||||
SRC.ParseLine.Err sec
|
SRC.ParseLine.Err sec
|
||||||
rts
|
rts
|
||||||
|
SRC.ParseLine.Redef lda #ERR.SYMBOL.REDEFINE
|
||||||
|
sec
|
||||||
|
rts
|
||||||
*---------------------------------------
|
*---------------------------------------
|
||||||
SRC.ParseLine.SymP jsr SRC.GetChar
|
SRC.ParseLine.SymP jsr SRC.GetChar
|
||||||
beq SRC.ParseLine.SymE
|
beq SRC.ParseLine.SymE
|
||||||
jsr SRC.GetDecimal
|
jsr SRC.GetDecimal
|
||||||
bcs SRC.ParseLine.SymR
|
bcs SRC.ParseLine.SymE
|
||||||
jmp SYM.AddPrivate
|
jmp SYM.AddPrivate
|
||||||
*---------------------------------------
|
*---------------------------------------
|
||||||
SRC.ParseLine.SymL jsr SRC.GetChar
|
SRC.ParseLine.SymL jsr SRC.GetChar
|
||||||
beq SRC.ParseLine.SymE
|
beq SRC.ParseLine.SymE
|
||||||
jsr SRC.GetDecimal
|
jsr SRC.GetDecimal
|
||||||
bcs SRC.ParseLine.SymR
|
bcs SRC.ParseLine.SymE
|
||||||
jmp SYM.AddLocal
|
lda SRC.ACC+1
|
||||||
|
ora SRC.ACC+2
|
||||||
|
ora SRC.ACC+3
|
||||||
|
bne SRC.ParseLine.SymE Max .255
|
||||||
|
lda SRC.ACC
|
||||||
|
beq SRC.ParseLine.SymE .0 is not allowed
|
||||||
|
sta SRC.LLabel.ID
|
||||||
|
|
||||||
|
ldy #ASM.PC
|
||||||
|
lda (pData),y
|
||||||
|
ldy #ASM.PC.GLABEL
|
||||||
|
sec
|
||||||
|
sbc (pData),y
|
||||||
|
sta SRC.LLabel.Offset
|
||||||
|
|
||||||
|
ldy #ASM.PC+1
|
||||||
|
lda (pData),y
|
||||||
|
ldy #ASM.PC.GLABEL+1
|
||||||
|
sbc (pData),y
|
||||||
|
bne SRC.ParseLine.SymR
|
||||||
|
|
||||||
|
ldy #ASM.PC+2
|
||||||
|
lda (pData),y
|
||||||
|
ldy #ASM.PC.GLABEL+2
|
||||||
|
sbc (pData),y
|
||||||
|
bne SRC.ParseLine.SymR
|
||||||
|
|
||||||
|
ldy #ASM.PC+3
|
||||||
|
lda (pData),y
|
||||||
|
ldy #ASM.PC.GLABEL+3
|
||||||
|
sbc (pData),y
|
||||||
|
bne SRC.ParseLine.SymR
|
||||||
|
bcc SRC.ParseLine.SymR
|
||||||
|
jmp SYM.AddLToGBlock
|
||||||
*---------------------------------------
|
*---------------------------------------
|
||||||
SRC.ParseLine.SymG jsr SRC.GetGLabel
|
SRC.ParseLine.SymE lda #ERR.INVALID.LABEL
|
||||||
|
sec
|
||||||
|
rts
|
||||||
|
|
||||||
|
SRC.ParseLine.SymR lda #ERR.RANGE
|
||||||
|
sec
|
||||||
|
rts
|
||||||
|
*---------------------------------------
|
||||||
|
SRC.ParseLine.SymG >LDYA L.SRC.GLabel.Len
|
||||||
|
jsr SRC.GetLabel
|
||||||
bcs SRC.ParseLine.SymE
|
bcs SRC.ParseLine.SymE
|
||||||
|
|
||||||
ldx #3 Makes Current Label = PC for now
|
ldx #3 Makes Current Label = PC for now
|
||||||
ldy #ASM.PC
|
ldy #ASM.PC+3
|
||||||
lda (pdata),y
|
|
||||||
.1 sta SRC.GLabel.Value,x
|
.1 lda (pData),y
|
||||||
|
sta SRC.GLabel.Value,x
|
||||||
dey
|
dey
|
||||||
dex
|
dex
|
||||||
bpl .1
|
bpl .1
|
||||||
|
|
||||||
|
ldx #3 Makes Current Label = Ref for next local
|
||||||
|
ldy #ASM.PC.GLABEL+3
|
||||||
|
|
||||||
|
.2 lda SRC.GLabel.Value,x
|
||||||
|
sta (pData),y
|
||||||
|
dey
|
||||||
|
dex
|
||||||
|
bpl .2
|
||||||
|
|
||||||
|
lda #$80 Mark GLabel Flag...
|
||||||
|
sta SRC.GLabel.Flags
|
||||||
|
sta SRC.GLabel.New
|
||||||
|
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
SRC.ParseLine.SymE lda #ERR.INVALID.LABEL
|
|
||||||
sec
|
|
||||||
SRC.ParseLine.SymR rts
|
|
||||||
*---------------------------------------
|
*---------------------------------------
|
||||||
SRC.ParseLine.Dir >LDYA L.T.DIRECTIVES
|
SRC.ParseLine.Dir >LDYA L.T.DIRECTIVES
|
||||||
jsr SRC.GetKeyword
|
jsr SRC.GetKeyword
|
||||||
@ -154,7 +226,18 @@ SRC.ParseLine.OpCode
|
|||||||
|
|
||||||
jsr SRC.ParseLine.AM
|
jsr SRC.ParseLine.AM
|
||||||
bcs .99
|
bcs .99
|
||||||
clc
|
|
||||||
|
ldy #ASM.PC
|
||||||
|
lda (pData),y
|
||||||
|
inc
|
||||||
|
sta (pData),y
|
||||||
|
bne .2
|
||||||
|
iny
|
||||||
|
lda (pData),y
|
||||||
|
inc
|
||||||
|
sta (pData),y
|
||||||
|
|
||||||
|
.2 clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.7 lda ZPPtr1
|
.7 lda ZPPtr1
|
||||||
@ -189,14 +272,7 @@ SRC.ParseLine.AM stz SRC.AM.ID
|
|||||||
sta SRC.AM.StrBuf,x
|
sta SRC.AM.StrBuf,x
|
||||||
bra .1
|
bra .1
|
||||||
|
|
||||||
.8 lda SRC.AM.StrBuf
|
.8 clc
|
||||||
beq .89
|
|
||||||
>PUSHWI TmpBuffer256
|
|
||||||
>PUSHW L.SRC.AM.StrBuf
|
|
||||||
>PUSHB SRC.AM.StrBuf
|
|
||||||
>PUSHW L.MSG.DEBUG
|
|
||||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
|
||||||
.89 clc
|
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.2 jsr SRC.IsLetter Any register?
|
.2 jsr SRC.IsLetter Any register?
|
||||||
@ -207,7 +283,7 @@ SRC.ParseLine.AM stz SRC.AM.ID
|
|||||||
inc SRC.AM.tmpBuf
|
inc SRC.AM.tmpBuf
|
||||||
|
|
||||||
.3 jsr SRC.GetCharUC
|
.3 jsr SRC.GetCharUC
|
||||||
beq .4
|
beq .41
|
||||||
jsr SRC.IsLetterOrDigit
|
jsr SRC.IsLetterOrDigit
|
||||||
bne .4
|
bne .4
|
||||||
inc SRC.AM.tmpBuf
|
inc SRC.AM.tmpBuf
|
||||||
@ -217,7 +293,7 @@ SRC.ParseLine.AM stz SRC.AM.ID
|
|||||||
|
|
||||||
.4 dec SRC.BufPtr back one char
|
.4 dec SRC.BufPtr back one char
|
||||||
|
|
||||||
ldy #0
|
.41 ldy #0
|
||||||
|
|
||||||
.5 lda (ZPPtr3),y
|
.5 lda (ZPPtr3),y
|
||||||
beq .71 last register ?
|
beq .71 last register ?
|
||||||
@ -241,10 +317,11 @@ SRC.ParseLine.AM stz SRC.AM.ID
|
|||||||
|
|
||||||
.61 iny
|
.61 iny
|
||||||
lda SRC.AM.tmpBuf,y
|
lda SRC.AM.tmpBuf,y
|
||||||
sta SRC.AM.StrBuf,x
|
|
||||||
inx
|
inx
|
||||||
|
sta SRC.AM.StrBuf,x
|
||||||
cpy SRC.AM.tmpBuf
|
cpy SRC.AM.tmpBuf
|
||||||
bne .61
|
bne .61
|
||||||
|
|
||||||
stx SRC.AM.StrBuf
|
stx SRC.AM.StrBuf
|
||||||
bra .72
|
bra .72
|
||||||
|
|
||||||
@ -258,7 +335,7 @@ SRC.ParseLine.AM stz SRC.AM.ID
|
|||||||
.70 dec SRC.BufPtr back one char
|
.70 dec SRC.BufPtr back one char
|
||||||
|
|
||||||
|
|
||||||
.71 jsr SRC.GetExp
|
.71 jsr EXP.Eval
|
||||||
bcs .99
|
bcs .99
|
||||||
.72 jmp .1
|
.72 jmp .1
|
||||||
clc
|
clc
|
||||||
@ -313,7 +390,7 @@ SRC.GetDecimal stz SRC.ACC+1
|
|||||||
jsr SRC.ACC10
|
jsr SRC.ACC10
|
||||||
pla
|
pla
|
||||||
bcs .9
|
bcs .9
|
||||||
clc
|
|
||||||
adc SRC.ACC
|
adc SRC.ACC
|
||||||
sta SRC.ACC
|
sta SRC.ACC
|
||||||
bcc .1
|
bcc .1
|
||||||
@ -344,7 +421,7 @@ SRC.GetHex stz SRC.ACC+1
|
|||||||
beq .99
|
beq .99
|
||||||
jsr SRC.IsDigit16
|
jsr SRC.IsDigit16
|
||||||
bcs .99
|
bcs .99
|
||||||
and #$0F
|
|
||||||
sta SRC.ACC
|
sta SRC.ACC
|
||||||
|
|
||||||
.1 jsr SRC.GetChar
|
.1 jsr SRC.GetChar
|
||||||
@ -354,20 +431,16 @@ SRC.GetHex stz SRC.ACC+1
|
|||||||
jsr SRC.IsDigit16
|
jsr SRC.IsDigit16
|
||||||
bcs .99
|
bcs .99
|
||||||
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
|
|
||||||
ldx #4
|
ldx #4
|
||||||
.2 asl
|
.2 asl SRC.ACC
|
||||||
rol SRC.ACC
|
|
||||||
rol SRC.ACC+1
|
rol SRC.ACC+1
|
||||||
rol SRC.ACC+2
|
rol SRC.ACC+2
|
||||||
rol SRC.ACC+3
|
rol SRC.ACC+3
|
||||||
bcs .9
|
bcs .9
|
||||||
dex
|
dex
|
||||||
bne .2
|
bne .2
|
||||||
|
ora SRC.ACC
|
||||||
|
sta SRC.ACC
|
||||||
bra .1
|
bra .1
|
||||||
|
|
||||||
.8 clc
|
.8 clc
|
||||||
@ -467,37 +540,44 @@ SRC.GetBinary stz SRC.ACC+1
|
|||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
*---------------------------------------
|
*---------------------------------------
|
||||||
SRC.GetGLabel jsr SRC.GetCharUC
|
SRC.GetLabel >STYA ZPPtr1
|
||||||
|
jsr SRC.GetCharUC
|
||||||
|
|
||||||
beq .9
|
beq .9
|
||||||
jsr SRC.IsLetter
|
jsr SRC.IsLetter
|
||||||
bcs .9
|
bcs .9
|
||||||
sta SRC.GLabel.Name
|
|
||||||
|
|
||||||
ldy #1
|
ldy #1
|
||||||
|
sta (ZPPtr1),y
|
||||||
|
|
||||||
.1 jsr SRC.GetCharUC
|
.1 jsr SRC.GetCharUC
|
||||||
beq .8
|
beq .8
|
||||||
|
|
||||||
cmp #' '
|
cmp #' '
|
||||||
beq .8
|
beq .8
|
||||||
|
|
||||||
cmp #'.'
|
cmp #'.'
|
||||||
beq .2
|
beq .2
|
||||||
|
|
||||||
|
cmp #'_'
|
||||||
|
beq .2
|
||||||
|
|
||||||
|
jsr SRC.IsEXPReserved
|
||||||
|
bcc .8
|
||||||
jsr SRC.IsLetterOrDigit
|
jsr SRC.IsLetterOrDigit
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
.2 sta SRC.GLabel.Name,y
|
.2 iny
|
||||||
iny
|
sta (ZPPtr1),y
|
||||||
cpy #SRC.GLABEL.MAXLEN
|
cpy #SRC.GLABEL.MAXLEN
|
||||||
bne .1 if equ Carry is set
|
bcc .1 if equ Carry is set
|
||||||
|
|
||||||
.9 sec
|
.9 lda #ERR.SYNTAX.ERROR
|
||||||
|
sec
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.8 tya
|
.8 tya
|
||||||
sta SRC.GLabel.Len
|
sta (ZPPtr1)
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
*---------------------------------------
|
*---------------------------------------
|
||||||
@ -544,7 +624,7 @@ SRC.GetKeyword >STYA ZPPtr1
|
|||||||
.9 sec
|
.9 sec
|
||||||
rts
|
rts
|
||||||
*---------------------------------------
|
*---------------------------------------
|
||||||
SRC.GetExp stz SRC.Exp
|
SRC.GetExp.DELETE stz SRC.Exp
|
||||||
jsr SRC.GetCharUC
|
jsr SRC.GetCharUC
|
||||||
beq .9
|
beq .9
|
||||||
|
|
||||||
@ -634,11 +714,11 @@ SRC.IsDigit16 jsr SRC.IsDigit10
|
|||||||
bcc .8
|
bcc .8
|
||||||
cmp #'A'
|
cmp #'A'
|
||||||
bcc .9
|
bcc .9
|
||||||
cmp #'G'
|
cmp #'F'+1
|
||||||
bcc .1
|
bcc .1
|
||||||
rts cc if ok, cs if not
|
rts cc if ok, cs if not
|
||||||
|
|
||||||
.1 sbc #'A'-10 cc so A->10
|
.1 sbc #'A'-11 cc so A->10 (11-CC)
|
||||||
clc
|
clc
|
||||||
.8 and #$0F
|
.8 and #$0F
|
||||||
rts
|
rts
|
||||||
@ -702,8 +782,8 @@ SRC.ACC10 lda SRC.ACC ACC*2-> ACC & ACCTMP
|
|||||||
sta SRC.ACCTMP+3
|
sta SRC.ACCTMP+3
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
ldx #1
|
ldx #2
|
||||||
.1 asl SRC.ACC ACC=ACC*8
|
.1 asl SRC.ACC ACC=ACC*4
|
||||||
rol SRC.ACC+1
|
rol SRC.ACC+1
|
||||||
rol SRC.ACC+2
|
rol SRC.ACC+2
|
||||||
rol SRC.ACC+3
|
rol SRC.ACC+3
|
||||||
|
@ -6,15 +6,16 @@ AUTO 6
|
|||||||
.LIST OFF
|
.LIST OFF
|
||||||
*---------------------------------------
|
*---------------------------------------
|
||||||
* Global Symbol Record: (8+ bytes)
|
* Global Symbol Record: (8+ bytes)
|
||||||
* 0-3 : 32 bits Value
|
* 0 : Flags:
|
||||||
* 4 : Flags:
|
* b7=Valid Entry
|
||||||
* b7=R/W (.SE)
|
|
||||||
* b6=pending
|
* b6=pending
|
||||||
|
* b0=R/W (.SE)
|
||||||
|
* 1-4 : 32 bits Value
|
||||||
* 5 : Len
|
* 5 : Len
|
||||||
* 6-... Name
|
* 6-... Name
|
||||||
* ......
|
* ......
|
||||||
* Local Symbol Record: (2 bytes)
|
* Local Symbol Record: (2 bytes)
|
||||||
* 2 : Local ID (0->255)
|
* 2 : Local ID (1->255)
|
||||||
* 3 : offset from Global Symbol
|
* 3 : offset from Global Symbol
|
||||||
* ......
|
* ......
|
||||||
* Ending 0
|
* Ending 0
|
||||||
@ -30,7 +31,14 @@ AUTO 6
|
|||||||
*---------------------------------------
|
*---------------------------------------
|
||||||
* Macro Record: ( bytes)
|
* Macro Record: ( bytes)
|
||||||
*---------------------------------------
|
*---------------------------------------
|
||||||
SYM.Init jsr SYM.NewGBlock
|
SYM.Init lda #0
|
||||||
|
ldy #SYM.iCurGBlock
|
||||||
|
sta (pData),y
|
||||||
|
dec
|
||||||
|
ldy #SYM.hCurGBlock
|
||||||
|
sta (pData),y
|
||||||
|
|
||||||
|
jsr SYM.NewGBlock
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
clc
|
clc
|
||||||
@ -39,7 +47,7 @@ SYM.Init jsr SYM.NewGBlock
|
|||||||
SYM.Quit ldy #SYM.LastGBlock
|
SYM.Quit ldy #SYM.LastGBlock
|
||||||
lda (pData),y
|
lda (pData),y
|
||||||
bmi .8
|
bmi .8
|
||||||
|
|
||||||
.1 clc
|
.1 clc
|
||||||
adc #SYM.hGBlocks
|
adc #SYM.hGBlocks
|
||||||
tay
|
tay
|
||||||
@ -54,21 +62,78 @@ SYM.Quit ldy #SYM.LastGBlock
|
|||||||
.8 clc
|
.8 clc
|
||||||
rts
|
rts
|
||||||
*---------------------------------------
|
*---------------------------------------
|
||||||
SYM.AddGlobal
|
SYM.Dump >PUSHW L.MSG.SYMBOLS
|
||||||
clc
|
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||||
rts
|
|
||||||
*---------------------------------------
|
ldy #SYM.DumpCount
|
||||||
SYM.LookupGlobal
|
lda #20
|
||||||
clc
|
sta (pData),y
|
||||||
rts
|
|
||||||
*---------------------------------------
|
jsr SYM.ResetGBlock
|
||||||
SYM.AddLocal
|
|
||||||
clc
|
.1 jsr SYM.GetByteGBlock Get Flags
|
||||||
rts
|
sta SRC.GLabel.Flags
|
||||||
*---------------------------------------
|
bne .10
|
||||||
SYM.LookupLocal
|
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
.10 ldx #0
|
||||||
|
.2 jsr SYM.GetByteGBlock
|
||||||
|
sta SRC.GLabel.Value,x
|
||||||
|
inx
|
||||||
|
cpx #4
|
||||||
|
bne .2
|
||||||
|
|
||||||
|
jsr SYM.GetByteGBlock
|
||||||
|
sta SRC.GLabel.Len
|
||||||
|
|
||||||
|
ldx #0
|
||||||
|
.3 jsr SYM.GetByteGBlock
|
||||||
|
sta SRC.GLabel.Name,x
|
||||||
|
inx
|
||||||
|
cpx SRC.GLabel.Len
|
||||||
|
bne .3
|
||||||
|
|
||||||
|
>PUSHW L.SRC.GLabel.Len
|
||||||
|
|
||||||
|
lda SRC.GLabel.Value+1
|
||||||
|
>PUSHA
|
||||||
|
lda SRC.GLabel.Value
|
||||||
|
>PUSHA
|
||||||
|
lda SRC.GLabel.Value+3
|
||||||
|
>PUSHA
|
||||||
|
lda SRC.GLabel.Value+2
|
||||||
|
>PUSHA
|
||||||
|
|
||||||
|
>PUSHW L.MSG.GSYMBOL
|
||||||
|
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||||
|
* bcs .9
|
||||||
|
|
||||||
|
.4 jsr SYM.GetByteGBlock
|
||||||
|
beq .5 End Locals...proceed next Global
|
||||||
|
|
||||||
|
pha
|
||||||
|
jsr SYM.GetByteGBlock
|
||||||
|
>PUSHA
|
||||||
|
pla
|
||||||
|
>PUSHA
|
||||||
|
>PUSHW L.MSG.LSYMBOL
|
||||||
|
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||||
|
* bcc .4
|
||||||
|
bra .4
|
||||||
|
|
||||||
|
.5 lda #13
|
||||||
|
jsr COUT
|
||||||
|
|
||||||
|
ldy #SYM.DumpCount
|
||||||
|
lda (pData),y
|
||||||
|
dec
|
||||||
|
bne .6
|
||||||
|
>DEBUG
|
||||||
|
lda #20
|
||||||
|
.6 sta (pData),y
|
||||||
|
jmp .1
|
||||||
|
.9 rts
|
||||||
*---------------------------------------
|
*---------------------------------------
|
||||||
SYM.AddPrivate
|
SYM.AddPrivate
|
||||||
clc
|
clc
|
||||||
@ -86,75 +151,183 @@ SYM.LookupMacro
|
|||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
*---------------------------------------
|
*---------------------------------------
|
||||||
SYM.AddToGBlock ldy #SYM.GBlockPtr
|
SYM.UpdateGlobal
|
||||||
lda (pData),y
|
*---------------------------------------
|
||||||
clc
|
SYM.FindGlobal jsr SYM.ResetGBlock
|
||||||
adc #6 Value+Flags+Len
|
|
||||||
bcs .1
|
|
||||||
adc SRC.GLabel.Len
|
|
||||||
bcs .1
|
|
||||||
|
|
||||||
ldy #SYM.LastGBlock
|
.1 jsr SYM.GetByteGBlock Get Flags
|
||||||
lda (pData),y
|
beq .9
|
||||||
>SYSCALL SYS.GetMemPtrA
|
sta SRC.FLabel.Flags
|
||||||
>STYA ZPPtr1
|
|
||||||
bra .2
|
|
||||||
|
|
||||||
.1 jsr SYM.NewGBlock
|
|
||||||
bcs .9
|
|
||||||
>STYA ZPPtr1
|
|
||||||
|
|
||||||
.2 ldx #0
|
|
||||||
ldy #SYM.GBlockPtr
|
|
||||||
|
|
||||||
.3 lda SRC.GLabel.Value,x
|
|
||||||
sta (ZPPtr1),y
|
|
||||||
inx
|
|
||||||
iny
|
|
||||||
cpx #6
|
|
||||||
bne .3
|
|
||||||
|
|
||||||
ldx #0
|
ldx #0
|
||||||
|
|
||||||
.4 lda SRC.GLabel.Name,x
|
.2 jsr SYM.GetByteGBlock
|
||||||
sta (ZPPtr1),y
|
sta SRC.FLabel.Value,x
|
||||||
inx
|
inx
|
||||||
iny
|
cpx #4
|
||||||
cpx SRC.GLabel.Len
|
bne .2
|
||||||
bne .4
|
|
||||||
|
jsr SYM.GetByteGBlock
|
||||||
|
sta SRC.FLabel.Len
|
||||||
|
|
||||||
|
ldx #0
|
||||||
|
.3 jsr SYM.GetByteGBlock
|
||||||
|
sta SRC.FLabel.Name,x
|
||||||
|
inx
|
||||||
|
cpx SRC.FLabel.Len
|
||||||
|
bne .3
|
||||||
|
|
||||||
tya
|
cpx SRC.ELabel.Len
|
||||||
ldy #SYM.GBlockPtr
|
bne .5
|
||||||
sta (pData),y set new SYM.GBlockPtr
|
|
||||||
|
.4 lda SRC.FLabel.Name-1,x
|
||||||
|
cmp SRC.ELabel.Name-1,x
|
||||||
|
bne .5
|
||||||
|
dex
|
||||||
|
bne .4
|
||||||
clc
|
clc
|
||||||
.9
|
rts
|
||||||
|
|
||||||
|
.5 jsr SYM.GetByteGBlock
|
||||||
|
beq .1
|
||||||
|
jsr SYM.GetByteGBlock
|
||||||
|
bra .5
|
||||||
|
|
||||||
|
.9 sec
|
||||||
rts
|
rts
|
||||||
*---------------------------------------
|
*---------------------------------------
|
||||||
SYM.NewGBlock >PUSHWI 256
|
SYM.AddLToGBlock jsr SYM.GetLastGBlock
|
||||||
|
|
||||||
|
lda SRC.LLabel.ID
|
||||||
|
jsr SYM.AddByteGBlock
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
lda SRC.LLabel.Offset
|
||||||
|
jmp SYM.AddByteGBlock
|
||||||
|
.9 rts
|
||||||
|
*---------------------------------------
|
||||||
|
SYM.AddGToGBlock jsr SYM.GetLastGBlock
|
||||||
|
|
||||||
|
ldy #SYM.hCurGBlock 1st Gblock to add?
|
||||||
|
lda (pData),y
|
||||||
|
ldy #SYM.iCurGBlock
|
||||||
|
ora (pData),y
|
||||||
|
beq .10 yes, skip closing previous one
|
||||||
|
|
||||||
|
lda #0 Close Pending Global/Local
|
||||||
|
jsr SYM.AddByteGBlock
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
.10 ldx #0
|
||||||
|
.1 lda SRC.GLabel.Flags,x
|
||||||
|
jsr SYM.AddByteGBlock
|
||||||
|
bcs .9
|
||||||
|
inx
|
||||||
|
cpx #6
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
ldx #0
|
||||||
|
|
||||||
|
.2 lda SRC.GLabel.Name,x
|
||||||
|
jsr SYM.AddByteGBlock
|
||||||
|
bcs .9
|
||||||
|
inx
|
||||||
|
cpx SRC.GLabel.Len
|
||||||
|
bne .2
|
||||||
|
|
||||||
|
clc
|
||||||
|
.9 rts
|
||||||
|
*---------------------------------------
|
||||||
|
SYM.ResetGBlock ldy #SYM.hGBlocks
|
||||||
|
lda (pData),y
|
||||||
|
>SYSCALL SYS.GetMemPtrA
|
||||||
|
>STYA ZPBlockPtr
|
||||||
|
lda #0
|
||||||
|
ldy #SYM.hCurGBlock
|
||||||
|
sta (pData),y
|
||||||
|
ldy #SYM.iCurGBlock
|
||||||
|
sta (pData),y
|
||||||
|
rts
|
||||||
|
*---------------------------------------
|
||||||
|
SYM.GetByteGBlock ldy #SYM.iCurGBlock
|
||||||
|
lda (pData),y
|
||||||
|
tay
|
||||||
|
lda (ZPBlockPtr),y
|
||||||
|
pha
|
||||||
|
|
||||||
|
ldy #SYM.iCurGBlock
|
||||||
|
lda (pData),y
|
||||||
|
inc
|
||||||
|
sta (pData),y
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
ldy #SYM.hCurGBlock
|
||||||
|
lda (pData),y
|
||||||
|
inc
|
||||||
|
sta (pData),y
|
||||||
|
jsr SYM.GetGBlockA
|
||||||
|
|
||||||
|
.1 pla
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
*---------------------------------------
|
||||||
|
SYM.GetLastGBlock ldy #SYM.LastGBlock
|
||||||
|
lda (pData),y
|
||||||
|
SYM.GetGBlockA clc
|
||||||
|
adc #SYM.hGBlocks
|
||||||
|
tay
|
||||||
|
lda (pData),y
|
||||||
|
phx
|
||||||
|
>SYSCALL SYS.GetMemPtrA
|
||||||
|
>STYA ZPBlockPtr
|
||||||
|
plx
|
||||||
|
rts
|
||||||
|
*---------------------------------------
|
||||||
|
SYM.AddByteGBlock pha
|
||||||
|
ldy #SYM.iCurGBlock
|
||||||
|
lda (pData),y
|
||||||
|
tay
|
||||||
|
|
||||||
|
pla
|
||||||
|
sta (ZPBlockPtr),y
|
||||||
|
|
||||||
|
tya
|
||||||
|
inc
|
||||||
|
beq SYM.NewGBlock
|
||||||
|
|
||||||
|
ldy #SYM.iCurGBlock
|
||||||
|
sta (pData),y
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
*---------------------------------------
|
||||||
|
SYM.NewGBlock phx
|
||||||
|
>PUSHWI 256
|
||||||
>PUSHBI S.MEM.F.INIT0
|
>PUSHBI S.MEM.F.INIT0
|
||||||
>SYSCALL SYS.GetMem
|
>SYSCALL SYS.GetMem
|
||||||
|
|
||||||
bcs .9
|
bcs .9
|
||||||
>STYA ZPPtr1
|
>STYA ZPBlockPtr
|
||||||
|
|
||||||
ldy #SYM.LastGBlock
|
ldy #SYM.LastGBlock
|
||||||
lda (pData),y
|
lda (pData),y
|
||||||
inc
|
inc
|
||||||
sta (pData),y
|
sta (pData),y
|
||||||
|
|
||||||
ldy #SYM.hGBlocks
|
|
||||||
clc
|
clc
|
||||||
adc (pData),y
|
adc #SYM.hGBlocks
|
||||||
tay
|
tay
|
||||||
|
|
||||||
txa
|
txa
|
||||||
sta (pData),y
|
sta (pData),y
|
||||||
|
|
||||||
lda #0
|
lda #0
|
||||||
ldy #SYM.GBlockPtr
|
ldy #SYM.iCurGBlock
|
||||||
sta (pData),y
|
sta (pData),y
|
||||||
|
|
||||||
clc
|
clc
|
||||||
.9 rts
|
.9 plx
|
||||||
*---------------------------------------
|
rts
|
||||||
|
*---------------------------------------
|
||||||
MAN
|
MAN
|
||||||
SAVE BIN/ASM.S.SYM
|
SAVE BIN/ASM.S.SYM
|
||||||
LOAD BIN/ASM.S
|
LOAD BIN/ASM.S
|
||||||
|
@ -16,6 +16,7 @@ AUTO 6
|
|||||||
ZPPtr1 .EQ ZPBIN
|
ZPPtr1 .EQ ZPBIN
|
||||||
ZPPtr2 .EQ ZPBIN+2
|
ZPPtr2 .EQ ZPBIN+2
|
||||||
ZPPtr3 .EQ ZPBIN+4
|
ZPPtr3 .EQ ZPBIN+4
|
||||||
|
ZPBlockPtr .EQ ZPBIN+6
|
||||||
*---------------------------------------
|
*---------------------------------------
|
||||||
ASM.T.AM .EQ 0
|
ASM.T.AM .EQ 0
|
||||||
ASM.T.R .EQ 2
|
ASM.T.R .EQ 2
|
||||||
@ -24,7 +25,7 @@ ASM.T.O .EQ 4
|
|||||||
SRC.IN.MAXDEPTH .EQ 7
|
SRC.IN.MAXDEPTH .EQ 7
|
||||||
SRC.GLABEL.MAXLEN .EQ 32
|
SRC.GLABEL.MAXLEN .EQ 32
|
||||||
*---------------------------------------
|
*---------------------------------------
|
||||||
SYM.GBLOCK.MAX .EQ 64 64*256=16k
|
SYM.GBLOCK.MAX .EQ 96 96*256=24k
|
||||||
SYM.SBLOCK.MAX .EQ 16 16*256=4k
|
SYM.SBLOCK.MAX .EQ 16 16*256=4k
|
||||||
SYM.PBLOCK.MAX .EQ 32 32*256=8k
|
SYM.PBLOCK.MAX .EQ 32 32*256=8k
|
||||||
SYM.MBLOCK.MAX .EQ 32 32*256=8k
|
SYM.MBLOCK.MAX .EQ 32 32*256=8k
|
||||||
@ -43,6 +44,9 @@ ERR.INVALID.DIRECTIVE .EQ $A5
|
|||||||
ERR.INVALID.OPCODE .EQ $A6
|
ERR.INVALID.OPCODE .EQ $A6
|
||||||
ERR.INVALID.AM.SYN .EQ $A7
|
ERR.INVALID.AM.SYN .EQ $A7
|
||||||
ERR.INVALID.AM.4.OC .EQ $A8
|
ERR.INVALID.AM.4.OC .EQ $A8
|
||||||
|
ERR.RANGE .EQ $A9
|
||||||
|
ERR.UNDEF.SYMBOL .EQ $AA
|
||||||
|
ERR.SYMBOL.REDEFINE .EQ $AB
|
||||||
ERR.MISSING.EXP .EQ $B0
|
ERR.MISSING.EXP .EQ $B0
|
||||||
ERR.EXP.SYN.ERROR .EQ $B1
|
ERR.EXP.SYN.ERROR .EQ $B1
|
||||||
ERR.INVALID.MACRO.DEF .EQ $E0
|
ERR.INVALID.MACRO.DEF .EQ $E0
|
||||||
@ -71,11 +75,17 @@ L.MSG.HELP2 .DA MSG.HELP2
|
|||||||
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.DEBUG .DA MSG.DEBUG
|
L.MSG.DEBUG .DA MSG.DEBUG
|
||||||
L.SRC.AM.StrBuf .DA SRC.AM.StrBuf
|
L.MSG.SYMBOLS .DA MSG.SYMBOLS
|
||||||
|
L.MSG.GSYMBOL .DA MSG.GSYMBOL
|
||||||
|
L.MSG.LSYMBOL .DA MSG.LSYMBOL
|
||||||
|
L.MSG.SUMMARY .DA MSG.SUMMARY
|
||||||
L.MSG.PASS .DA MSG.PASS
|
L.MSG.PASS .DA MSG.PASS
|
||||||
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
|
||||||
|
L.SRC.AM.StrBuf .DA SRC.AM.StrBuf
|
||||||
|
L.SRC.GLabel.Len .DA SRC.GLabel.Len
|
||||||
|
L.SRC.ELabel.Len .DA SRC.ELabel.Len
|
||||||
L.SRC.BUFFER .DA SRC.BUFFER
|
L.SRC.BUFFER .DA SRC.BUFFER
|
||||||
L.ASM.T.FILENAME .DA ASM.T.FILENAME
|
L.ASM.T.FILENAME .DA ASM.T.FILENAME
|
||||||
L.T.DIRECTIVES .DA T.DIRECTIVES
|
L.T.DIRECTIVES .DA T.DIRECTIVES
|
||||||
@ -177,6 +187,9 @@ CS.INIT >LDYA L.LIBSTR
|
|||||||
jsr LOAD.ASM.T
|
jsr LOAD.ASM.T
|
||||||
bcs .99
|
bcs .99
|
||||||
|
|
||||||
|
jsr SYM.Init
|
||||||
|
bcs .99
|
||||||
|
|
||||||
lda #$80
|
lda #$80
|
||||||
ldy #ASM.LI.ON
|
ldy #ASM.LI.ON
|
||||||
sta (pData),y
|
sta (pData),y
|
||||||
@ -243,7 +256,12 @@ CS.RUN ldy #bCANCEL
|
|||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.1 lda #0 End of assembly, exit with no error
|
.1 jsr SYM.Dump
|
||||||
|
|
||||||
|
>PUSHW L.MSG.SUMMARY
|
||||||
|
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||||
|
|
||||||
|
lda #0 End of assembly, exit with no error
|
||||||
.99 sec
|
.99 sec
|
||||||
rts
|
rts
|
||||||
|
|
||||||
@ -306,6 +324,8 @@ CS.DOEVENT ldy #S.EVT.hDEV is Event from active IN device?
|
|||||||
CS.QUIT jsr FIO.FileClose
|
CS.QUIT jsr FIO.FileClose
|
||||||
bne CS.QUIT
|
bne CS.QUIT
|
||||||
|
|
||||||
|
jsr SYM.Quit
|
||||||
|
|
||||||
ldy #ASM.T.hMem
|
ldy #ASM.T.hMem
|
||||||
lda (pData),y
|
lda (pData),y
|
||||||
beq .1
|
beq .1
|
||||||
@ -322,6 +342,15 @@ CS.QUIT jsr FIO.FileClose
|
|||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
*---------------------------------------
|
*---------------------------------------
|
||||||
|
COUT phx
|
||||||
|
phy
|
||||||
|
ldx #DEVMGR.COUT
|
||||||
|
jsr pDevJmp
|
||||||
|
ply
|
||||||
|
plx
|
||||||
|
rts
|
||||||
|
pDevJmp jmp (pDev)
|
||||||
|
*---------------------------------------
|
||||||
.INB BIN/ASM.S.DIR
|
.INB BIN/ASM.S.DIR
|
||||||
.INB BIN/ASM.S.EXP
|
.INB BIN/ASM.S.EXP
|
||||||
.INB BIN/ASM.S.FIO
|
.INB BIN/ASM.S.FIO
|
||||||
@ -430,19 +459,29 @@ LIBSTR >PSTRING "libstr.o"
|
|||||||
MSG.HELP1 >CSTRING "A2osX-Macro Assembler (S-C MASM 3.0 Based)\n"
|
MSG.HELP1 >CSTRING "A2osX-Macro Assembler (S-C MASM 3.0 Based)\n"
|
||||||
MSG.HELP2 >CSTRING "Usage : ASM <src file> [type TXT ($04) or S-C/BAS ($FA)]\n"
|
MSG.HELP2 >CSTRING "Usage : ASM <src file> [type TXT ($04) or S-C/BAS ($FA)]\n"
|
||||||
MSG.PASS >CSTRING "Pass:#%d\n"
|
MSG.PASS >CSTRING "Pass:#%d\n"
|
||||||
MSG.SRC.FILE >CSTRING "Source File:%S\n"
|
MSG.SRC.FILE >CSTRING "Reading SRC File:%S\n"
|
||||||
MSG.OBJ.FILE >CSTRING "Object File:%S, Type=%02x\n"
|
MSG.OBJ.FILE >CSTRING "Writing OBJ File:%S, Type=%02x\n"
|
||||||
MSG.T.FILE >CSTRING "CPU Definition File:%S\n"
|
MSG.T.FILE >CSTRING "Loading CPU File:%S\n"
|
||||||
MSG.SRCLINE >CSTRING "%05D-%s\n"
|
MSG.SRCLINE >CSTRING "%05D-%s\n"
|
||||||
MSG.ERROR >CSTRING "%05D-Error:$%h\n"
|
MSG.ERROR >CSTRING "%05D-Error:$%h\n"
|
||||||
MSG.DEBUG >CSTRING "DEBUG:%h:%S:%s\n"
|
MSG.DEBUG >CSTRING "DEBUG:%h:%S:%s\n"
|
||||||
|
MSG.SYMBOLS >CSTRING "Symbol Table:\n"
|
||||||
|
MSG.GSYMBOL >CSTRING "$%H%H:%S"
|
||||||
|
MSG.LSYMBOL >CSTRING " .%d:+$%h"
|
||||||
|
MSG.SUMMARY >CSTRING "\nEnd Of Assembly.\n"
|
||||||
SRC.AM.RESERVED >PSTRING "[]#(),"
|
SRC.AM.RESERVED >PSTRING "[]#(),"
|
||||||
|
SRC.MOD.RESERVED >PSTRING "#/<>"
|
||||||
SRC.EXP.RESERVED >PSTRING "^!|&<=>+-*/"
|
SRC.EXP.RESERVED >PSTRING "^!|&<=>+-*/"
|
||||||
ASM.T.DEFAULT .AS ".T.6502"
|
ASM.T.DEFAULT .AS ".T.6502"
|
||||||
ASM.T.FILENAMELEN .BS 1
|
ASM.T.FILENAMELEN .BS 1
|
||||||
ASM.T.FILENAME .BS 65
|
ASM.T.FILENAME .BS 65
|
||||||
hLIBSTR .BS 1
|
hLIBSTR .BS 1
|
||||||
hFileName .BS 1
|
|
||||||
|
FIO.hFileName .BS 1
|
||||||
|
FIO.hFullPath .BS 1
|
||||||
|
|
||||||
|
EXP.Operator .BS 1
|
||||||
|
|
||||||
SRC.LINENUM .BS 2
|
SRC.LINENUM .BS 2
|
||||||
SRC.Directive.ID .BS 1
|
SRC.Directive.ID .BS 1
|
||||||
SRC.Keyword.ID .BS 1
|
SRC.Keyword.ID .BS 1
|
||||||
@ -456,10 +495,21 @@ SRC.BufPtr .BS 1
|
|||||||
SRC.BufPtrSave .BS 1
|
SRC.BufPtrSave .BS 1
|
||||||
SRC.Buffer .BS 256
|
SRC.Buffer .BS 256
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
SRC.GLabel.Value .BS 4
|
SRC.GLabel.New .BS 1
|
||||||
SRC.GLabel.Flags .BS 1
|
SRC.GLabel.Flags .BS 1
|
||||||
|
SRC.GLabel.Value .BS 4
|
||||||
SRC.GLabel.Len .BS 1
|
SRC.GLabel.Len .BS 1
|
||||||
SRC.GLabel.Name .BS SRC.GLABEL.MAXLEN
|
SRC.GLabel.Name .BS SRC.GLABEL.MAXLEN
|
||||||
|
SRC.LLabel.ID .BS 1
|
||||||
|
SRC.LLabel.Offset .BS 1
|
||||||
|
SRC.ELabel.Flags .BS 1
|
||||||
|
SRC.ELabel.Value .BS 4
|
||||||
|
SRC.ELabel.Len .BS 1
|
||||||
|
SRC.ELabel.Name .BS SRC.GLABEL.MAXLEN
|
||||||
|
SRC.FLabel.Flags .BS 1
|
||||||
|
SRC.FLabel.Value .BS 4
|
||||||
|
SRC.FLabel.Len .BS 1
|
||||||
|
SRC.FLabel.Name .BS SRC.GLABEL.MAXLEN
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.DUMMY
|
.DUMMY
|
||||||
.OR 0
|
.OR 0
|
||||||
@ -481,21 +531,27 @@ DST.hFILETYPE .BS 1
|
|||||||
|
|
||||||
ASM.T.hMem .BS 1 handle to ASM.T.xxxxx
|
ASM.T.hMem .BS 1 handle to ASM.T.xxxxx
|
||||||
|
|
||||||
SYM.LastGBlock .BS 1
|
SYM.hCurSBlock .BS 1
|
||||||
SYM.hGBlocks .BS SYM.GBLOCK.MAX
|
SYM.iCurSBlock .BS 1
|
||||||
SYM.GBlockPtr .BS 1
|
|
||||||
|
|
||||||
SYM.LastSBlock .BS 1
|
SYM.LastSBlock .BS 1
|
||||||
SYM.hSBlocks .BS SYM.SBLOCK.MAX
|
SYM.hSBlocks .BS SYM.SBLOCK.MAX
|
||||||
SYM.SBlockPtr .BS 1
|
|
||||||
|
|
||||||
SYM.LastPBlock .BS 1
|
SYM.hCurGBlock .BS 1
|
||||||
|
SYM.iCurGBlock .BS 1
|
||||||
|
SYM.LastGBlock .BS 1
|
||||||
|
SYM.hGBlocks .BS SYM.GBLOCK.MAX
|
||||||
|
|
||||||
|
SYM.hCurPBlock .BS 1
|
||||||
|
SYM.iCurPBlock .BS 1
|
||||||
|
SYM.LastPBlock .BS 1
|
||||||
SYM.hPBlocks .BS SYM.PBLOCK.MAX
|
SYM.hPBlocks .BS SYM.PBLOCK.MAX
|
||||||
SYM.PrivateBlockPtr .BS 1
|
|
||||||
|
|
||||||
SYM.LastMBlock .BS 1
|
SYM.hCurMBlock .BS 1
|
||||||
|
SYM.iCurMBlock .BS 1
|
||||||
|
SYM.LastMBlock .BS 1
|
||||||
SYM.hMBlocks .BS SYM.MBLOCK.MAX
|
SYM.hMBlocks .BS SYM.MBLOCK.MAX
|
||||||
SYM.MBlockPtr .BS 1
|
|
||||||
|
SYM.DumpCount .BS 1
|
||||||
|
|
||||||
ASM.PASS .BS 1
|
ASM.PASS .BS 1
|
||||||
ASM.MACRO.ON .BS 1
|
ASM.MACRO.ON .BS 1
|
||||||
@ -505,10 +561,15 @@ ASM.LI.CON .BS 1
|
|||||||
ASM.LI.XON .BS 1
|
ASM.LI.XON .BS 1
|
||||||
ASM.PC .BS 4 32Bits PC
|
ASM.PC .BS 4 32Bits PC
|
||||||
ASM.PC.PH .BS 4 32Bits PC saved for PH directive
|
ASM.PC.PH .BS 4 32Bits PC saved for PH directive
|
||||||
|
ASM.PC.GLABEL .BS 4 32Bits PC for last Label (for local labels)
|
||||||
ASM.LOCAL.OFFSET .BS 1 Store local offset from last Global Symbol for local (.xx)
|
ASM.LOCAL.OFFSET .BS 1 Store local offset from last Global Symbol for local (.xx)
|
||||||
ASM.LOCAL.INVALID .BS 1 If not in global or offset out of range this flag is set
|
ASM.LOCAL.INVALID .BS 1 If not in global or offset out of range this flag is set
|
||||||
ASM.SYM.ID .BS 2 For reference when a local label is parsed
|
ASM.SYM.ID .BS 2 For reference when a local label is parsed
|
||||||
DS.END .ED
|
DS.END .ED
|
||||||
|
*---------------------------------------
|
||||||
|
.DO DS.END-DS.START>$FF
|
||||||
|
ERROR:DS too big
|
||||||
|
.FIN
|
||||||
*---------------------------------------
|
*---------------------------------------
|
||||||
MAN
|
MAN
|
||||||
SAVE BIN/ASM.S
|
SAVE BIN/ASM.S
|
||||||
|
Loading…
Reference in New Issue
Block a user