Kernel 0.9.1 : ASM rewrite....

This commit is contained in:
Rémy GIBERT 2018-01-11 16:34:09 +00:00
parent b3acfa3030
commit 45474d544c
7 changed files with 430 additions and 390 deletions

Binary file not shown.

View File

@ -39,7 +39,7 @@ DIR.BS jsr EXP.Eval
stz DIR.Byte
jsr SRC.GetChar
jsr SRC.GetNextChar
beq .1
cmp #' '
beq .1
@ -134,7 +134,7 @@ DIR.ED clc
DIR.EL clc
rts
*---------------------------------------
DIR.EM lda #ERR.INVALID.MACRO.DEF
DIR.EM lda #ERR.INV.MACRO.DEF
sec
rts
*---------------------------------------
@ -168,7 +168,7 @@ DIR.EP ldy #ASM.PH.ON
clc
rts
.9 lda #ERR.INVALID.DIRECTIVE
.9 lda #ERR.INV.DIRECTIVE
sec
rts
*---------------------------------------
@ -198,22 +198,22 @@ DIR.FI ldy #ASM.DO.Count
.1 clc
rts
.99 lda #ERR.INVALID.DIRECTIVE
.99 lda #ERR.INV.DIRECTIVE
sec
rts
*---------------------------------------
DIR.HS clc
rts
*---------------------------------------
DIR.IN jsr SRC.GetArg
DIR.IN jsr SRC.CheckBlank
bcs .9
>LDYA L.SRC.BUFFER
>SYSCALL NewStr.YA
>LDYA ZPLinePtr
>SYSCALL RealPath.YA
phx
jsr FIO.OpenFileA
jsr FIO.OpenFile
plx
php
pha
@ -230,15 +230,14 @@ DIR.IN jsr SRC.GetArg
sec
rts
*---------------------------------------
DIR.LI >LDYA L.T.LI
DIR.LI jsr SRC.GetNextCharNB
beq DIR.LI.9
>LDYA L.T.LI
jsr SRC.GetKeyword
bcc .1
bcs DIR.LI.9
lda #ERR.SYNTAX.ERROR
sec
rts
.1 jmp (J.LI,x)
jmp (J.LI,x)
DIR.LI.CON ldy #ASM.LI.CON
sec
@ -261,14 +260,18 @@ DIR.LI.APPLY lsr
sta (pData),y
rts
DIR.LI.9 lda #ERR.SYNTAX.ERROR
sec
rts
*---------------------------------------
DIR.MA jsr SRC.GetArg
DIR.MA jsr SRC.CheckBlank Get Macro Name
bcs .9
.1 jsr FIO.ReadLine
bcs .99
lda UsrBuf256
lda (ZPLineBuf)
beq .1
cmp #'*' Comment?
@ -279,21 +282,21 @@ DIR.MA jsr SRC.GetArg
cmp #' ' no label...go scan dir/opcode
beq .3
.2 jsr SRC.GetChar skip label
.2 jsr SRC.GetNextChar skip label
beq .8
cmp #' '
bne .2
.3 jsr SRC.GetCharNB Scan for an Opcode...
.3 jsr SRC.GetNextCharNB Scan for an Opcode...
beq .8
cmp #'.'
bne .8
jsr SRC.GetChar
jsr SRC.GetNextChar
beq .8
cmp #'E'
bne .8
jsr SRC.GetChar
jsr SRC.GetNextChar
beq .8
cmp #'M'
bne .8
@ -310,32 +313,25 @@ DIR.MA jsr SRC.GetArg
clc
rts
.9 lda #ERR.INVALID.MACRO.DEF
.9 lda #ERR.INV.MACRO.DEF
sec
.99 rts
*---------------------------------------
DIR.OP jsr SRC.GetArg
bcs .9
DIR.OP jsr SRC.GetNextCharNB
beq DIR.OP.SYNERR
ldx SRC.Buffer
lda ASM.T.FILENAMELEN
adc SRC.Buffer
sta ASM.T.FILENAME
tay
.1 lda SRC.Buffer,x
sta ASM.T.FILENAME,y
dey
dex
bne .1
>LDYA ZPLinePtr
jmp FIO.LOAD.ASM.T
.9 lda #ERR.SYNTAX.ERROR
DIR.OP.SYNERR lda #ERR.SYNTAX.ERROR
sec
rts
*---------------------------------------
DIR.OR jsr EXP.Eval
DIR.OR jsr SRC.GetNextCharNB
beq DIR.OP.SYNERR
jsr EXP.Eval
bcs .9
ldy #ASM.PC
@ -380,7 +376,7 @@ DIR.PH ldy #ASM.PH.ON
jmp DIR.OR
.9 lda #ERR.INVALID.DIRECTIVE
.9 lda #ERR.INV.DIRECTIVE
sec
rts
*---------------------------------------

View File

@ -14,7 +14,7 @@ EXP.Eval stz EXP.Operator
stz EXP.Modifier
jsr SRC.GetCharNB
lda (ZPLinePtr)
beq EXP.Eval.Missing
jsr SRC.IsMODReserved
@ -27,7 +27,7 @@ EXP.Eval.Missing lda #ERR.MISSING.EXP
sec
rts
EXP.Eval.Next jsr SRC.GetCharUC
EXP.Eval.Next jsr SRC.GetNextCharUC
beq EXP.Eval.Missing
EXP.Eval.Next1 cmp #'.' Local Label?
@ -56,7 +56,6 @@ EXP.Eval.Next1 cmp #'.' Local Label?
.10 jsr SRC.IsDigit10 Decimal constant ?
bcs .1
dec SRC.BufPtr
jsr SRC.GetDecimal
bcs EXP.EvalExitSYN
@ -64,6 +63,10 @@ EXP.Eval.Next1 cmp #'.' Local Label?
.1 cmp #'$' Hex?
bne .2
>DEBUG
jsr SRC.GetNextChar
beq EXP.EvalExitSYN
jsr SRC.GetHex
bcs EXP.EvalExitSYN
@ -87,10 +90,10 @@ EXP.Eval.Next1 cmp #'.' Local Label?
.4 cmp #'''
bne .43
jsr SRC.GetChar
jsr SRC.GetNextChar
beq EXP.EvalExitSYN
jsr EXP.SetAccA
jsr SRC.GetChar
jsr SRC.GetNextChar
beq EXP.EvalOperator
cmp #'''
bne EXP.EvalExitSYN
@ -98,11 +101,11 @@ EXP.Eval.Next1 cmp #'.' Local Label?
.43 cmp '"'
bne .42
jsr SRC.GetChar
jsr SRC.GetNextChar
beq EXP.EvalExitSYN
ora #$80
jsr EXP.SetAccA
jsr SRC.GetChar
jsr SRC.GetNextChar
beq EXP.EvalOperator
cmp #'"'
bne EXP.EvalExitSYN
@ -110,15 +113,12 @@ EXP.Eval.Next1 cmp #'.' Local Label?
.42 jsr SRC.IsLetter Symbol ?
bcs EXP.EvalExitSYN
dec SRC.BufPtr
jsr EXP.GetSymbol
bcs EXP.EvalExitRTS
bra EXP.EvalOperator
EXP.EvalExitOK dec SRC.BufPtr Back One Char
EXP.EvalExitOK1 clc
EXP.EvalExitOK clc
EXP.EvalExitRTS rts
EXP.EvalExitSYN lda #ERR.SYNTAX.ERROR
@ -136,8 +136,8 @@ EXP.EvalOperator lda EXP.Operator
jsr EXP.Compute
bcs EXP.EvalExitRTS
.7 jsr SRC.GetChar
beq EXP.EvalExitOK1
.7 jsr SRC.GetNextChar
beq EXP.EvalExitOK
cmp #' '
beq EXP.EvalExitOK

View File

@ -2,37 +2,55 @@ NEW
PREFIX /A2OSX.BUILD
AUTO 4,1
*---------------------------------------
FIO.Init ldy #S.PS.hARGS
FIO.Init >LDYA L.ASM.6502
FIO.LOAD.ASM.T >STYA ZPPtr2
ldy #S.PS.hARGS
lda (pPS),y
>SYSCALL GetMemPtr.A
>STYA ZPPtr1
ldy #$ff
ldx #$ff
.2 iny
lda (ZPPtr1),y
sta ASM.T.FILENAME,y
bne .2
ldx #0
.3 lda ASM.T.DEFAULT,x
sta ASM.T.FILENAME,y
beq FIO.LOAD.ASM.T
.1 iny
inx
iny
bra .3
*---------------------------------------
FIO.LOAD.ASM.T ldy #ASM.T.hMem
lda (ZPPtr1),y
sta ASM.T.FILENAME,x
bne .1
lda #'.'
sta ASM.T.FILENAME,x
inx
lda #'T'
sta ASM.T.FILENAME,x
inx
lda #'.'
sta ASM.T.FILENAME,x
ldy #$ff
.3 iny
inx
lda (ZPPtr2),y
sta ASM.T.FILENAME,x
bne .3
ldy #ASM.T.hMem
lda (pData),y
beq .1
beq .4
>SYSCALL FreeMem.A
ldy #ASM.T.hMem
lda #0
sta (pData),y
.1 >PUSHW L.ASM.T.FILENAME
.4 >PUSHW L.ASM.T.FILENAME
>LDYA L.MSG.T.FILE
>SYSCALL PrintF.YA
@ -49,8 +67,7 @@ FIO.LOAD.ASM.T ldy #ASM.T.hMem
.9 rts
*---------------------------------------
FIO.OpenFileA >SYSCALL GetMemPtr.A
>STYA ZPPtr1
FIO.OpenFile >STYA ZPPtr1
>PUSHW ZPPtr1
>LDYA L.MSG.SRC.FILE
@ -121,7 +138,8 @@ FIO.OpenFileA >SYSCALL GetMemPtr.A
sec
.99 rts
*---------------------------------------
FIO.ReadLine stz SRC.BufPtr
FIO.ReadLine >LDYA ZPLineBuf
>STYA ZPLinePtr
ldy #SRC.COUNT
lda (pData),y
@ -131,81 +149,94 @@ FIO.ReadLine stz SRC.BufPtr
lda (pData),y
bmi .10
>PUSHW ZPLineBuf
>PUSHWI 256
>PUSHWI UsrBuf256
jsr FIO.ReadFromFile
bcs .19
lda #0 replace ending $0D with $00
sta UsrBuf256,y
sta (ZPLineBuf),y
.19 rts
.10 >PUSHWI 3
>PUSHW L.SRC.Buffer
*---------------------------------------
.10 >PUSHW ZPTmpBuf
>PUSHWI 3
jsr FIO.ReadFromFile
bcs .9
bcs .19
lda SRC.Buffer+1
ldy #1
lda (ZPTmpBuf),y
sta SRC.LINENUM
lda SRC.Buffer+2
iny
lda (ZPTmpBuf),y
sta SRC.LINENUM+1
lda SRC.Buffer LEN
lda (ZPTmpBuf) LEN
sec
sbc #3
bcc .9 LEN should be at least 3
tay
>PUSHW ZPTmpBuf
lda #0
>PUSHYA
>PUSHW L.SRC.BUFFER
jsr FIO.ReadFromFile
bcs .9
>LDYA ZPTmpBuf
>STYA ZPPtr1
ldy #0
ldx #0
.1 lda SRC.Buffer,y
.1 lda (ZPPtr1)
inc ZPPtr1
bne .11
inc ZPPtr1+1
.11 tax
bmi .2
sta UsrBuf256,x
sta (ZPLineBuf),y
beq .8 Ending 00
inx
beq .99
iny
bne .1
bra .99
.2 cmp #$C0 REPEAT char?
bne .5
iny
beq .99
lda SRC.Buffer,y
iny
beq .99
.3 pha
lda SRC.Buffer,y
sta UsrBuf256,x
pla
inx
beq .99
dec
lda (ZPPtr1) Get Repeat Count
inc ZPPtr1
bne .3
inc ZPPtr1+1
.3 tax
lda (ZPPtr1) Get Repeat Char
inc ZPPtr1
bne .3
inc ZPPtr1+1
.4 sta (ZPLineBuf),y
iny
bne .1
beq .99
dex
bne .4
bra .99
.5 and #$3F Compute blank count
.6 pha
tax
lda #$20
sta UsrBuf256,x
pla
inx
beq .99
dec
bne .6
.6 sta (ZPLineBuf),y
iny
bne .1
bra .99
beq .99
dex
bne .6
bra .1
.8 clc
.9 rts
@ -223,8 +254,10 @@ FIO.ReadFromFile ldy #SRC.COUNT
>PUSHA
>SYSCALL FRead
bcs .9
tax $100 byte transfered ?
beq .9
lda #ERR.LINE.TOO.LONG
sec
.9 rts

View File

@ -2,20 +2,17 @@ NEW
PREFIX /A2OSX.BUILD
AUTO 4,1
*---------------------------------------
SRC.PrintLine ldy #ASM.MACRO.ON
lda (pData),y
SRC.PrintLine >LDA.G ASM.MACRO.ON
bpl .1
ldy #ASM.LI.CON
lda (pData),y
>LDA.G ASM.LI.CON
bpl .9
bmi .8
.1 ldy #ASM.LI.ON
lda (pData),y
bpl .9
.1 >LDA.G ASM.LI.ON
* bpl .9
.8 >PUSHWI UsrBuf256
.8 >PUSHW ZPLineBuf
>PUSHW SRC.LINENUM
ldy #ASM.PC+1
>PUSHB (pData),y
@ -25,49 +22,52 @@ SRC.PrintLine ldy #ASM.MACRO.ON
>SYSCALL PrintF.YA
.9 rts
*---------------------------------------
SRC.PrintLineErr ldx #0
.1 lda UsrBuf256,x
beq .2
phx
SRC.PrintLineErr >LDYA ZPLineBuf
>SYSCALL PrintF.YA
bcs .9
lda #13
>SYSCALL PutChar.A
plx
inx
bcc .1
rts
.2 lda #13
bcs .9
lda #10
>SYSCALL PutChar.A
bcs .9
ldx #0
.3 lda UsrBuf256,x
beq .5
inx
cpx SRC.BufPtr
lda ZPLinePtr
sec
sbc ZPLineBuf
tax
beq .4
phx
.3 phx
lda #'-'
>SYSCALL PutChar.A
plx
bcs .9
bra .3
dex
bne .3
.4 lda #'^'
phx
phy
>SYSCALL PutChar.A
plx
ply
bcs .9
.5 lda #13
>SYSCALL PutChar.A
lda #10
>SYSCALL PutChar.A
.9 rts
*---------------------------------------
SRC.ParseLine ldx UsrBuf256
SRC.ParseLine lda (ZPLineBuf)
tax
beq .1
cpx #'*' Comment?
cmp #'*' Comment?
beq .1
cpx #';' Comment?
cmp #';' Comment?
beq .1
ldy #ASM.DO.ON
@ -91,12 +91,14 @@ SRC.ParseLine ldx UsrBuf256
.2 jsr SRC.ParseLine.SymG
.3 bcs SRC.ParseLine.Err
.4 jsr SRC.GetCharNB Scan for an Opcode...
.4 jsr SRC.GetNextCharNB Scan for an Opcode...
beq SRC.ParseLine.Ok
cmp #'.'
bne .5
jsr SRC.GetNextChar Skip .
jsr SRC.ParseLine.Dir
bcs SRC.ParseLine.Err
bra SRC.ParseLine.Ok
@ -108,11 +110,9 @@ SRC.ParseLine ldx UsrBuf256
bcs SRC.ParseLine.Err
bra SRC.ParseLine.Ok
.6 dec SRC.BufPtr Back one char...
jsr SRC.ParseLine.OpCode
.6 jsr SRC.ParseLine.OpCode
bcs SRC.ParseLine.Err
SRC.ParseLine.Ok lda SRC.GLabel.New
bpl .8
@ -146,7 +146,7 @@ SRC.ParseLine.Ok lda SRC.GLabel.New
.8 clc
rts
SRC.ParseLine.Inv lda #ERR.INVALID.LABEL
SRC.ParseLine.Inv lda #ERR.INV.LABEL
SRC.ParseLine.Err sec
rts
@ -154,13 +154,13 @@ SRC.ParseLine.Redef lda #ERR.SYMBOL.REDEFINE
sec
rts
*---------------------------------------
SRC.ParseLine.SymP jsr SRC.GetChar
SRC.ParseLine.SymP jsr SRC.GetNextChar
beq SRC.ParseLine.SymE
jsr SRC.GetDecimal
bcs SRC.ParseLine.SymE
jmp SYM.AddPrivate
*---------------------------------------
SRC.ParseLine.SymL jsr SRC.GetChar
SRC.ParseLine.SymL jsr SRC.GetNextChar
beq SRC.ParseLine.SymE
jsr SRC.GetDecimal
bcs SRC.ParseLine.SymE
@ -199,7 +199,7 @@ SRC.ParseLine.SymL jsr SRC.GetChar
bcc SRC.ParseLine.SymR
jmp SYM.AddLToGBlock
*---------------------------------------
SRC.ParseLine.SymE lda #ERR.INVALID.LABEL
SRC.ParseLine.SymE lda #ERR.INV.LABEL
sec
rts
@ -238,11 +238,12 @@ SRC.ParseLine.SymG >LDYA L.SRC.GLabel.Len
*---------------------------------------
SRC.ParseLine.Dir >LDYA L.T.DIRECTIVES
jsr SRC.GetKeyword
bcs .9
jmp (J.DIRECTIVES,x)
.9 lda #ERR.INVALID.DIRECTIVE
.9 lda #ERR.INV.DIRECTIVE
sec
rts
*---------------------------------------
@ -255,7 +256,7 @@ SRC.ParseLine.Add.Macro
rts
*---------------------------------------
SRC.ParseLine.OpCode
jsr SRC.GetArg
jsr SRC.CheckBlank
bcc .11
rts
@ -264,7 +265,7 @@ SRC.ParseLine.OpCode
>SYSCALL GetMemPtr.A
>STYA ZPPtr1
ldy #ASM.T.O setup Ptr to Opcodes
ldy #ASM.T.O setup Ptr2 to Opcodes
lda (ZPPtr1),y
clc
adc ZPPtr1
@ -274,7 +275,7 @@ SRC.ParseLine.OpCode
adc ZPPtr1+1
sta ZPPtr2+1
ldy #ASM.T.R setup Ptr to Registers
ldy #ASM.T.R setup Ptr3 to Registers
lda (ZPPtr1),y
clc
adc ZPPtr1
@ -285,20 +286,20 @@ SRC.ParseLine.OpCode
sta ZPPtr3+1
.10 lda (ZPPtr2)
ldy #1
ora (ZPPtr2),y
.10 lda (ZPPtr2) End Of OpCode List
beq .9
ldx #$FF
lda (ZPPtr2) Opcode Len
tax
.1 inx
lda SRC.Buffer,x
ldy #0
.1 lda (ZPLinePtr),y
iny
cmp (ZPPtr2),y
bne .7
cpx SRC.Buffer
dex
bne .1
jsr SRC.ParseLine.AM
@ -355,14 +356,14 @@ SRC.ParseLine.OpCode
sta ZPPtr2+1
bra .10
.9 lda #ERR.INVALID.OPCODE
.9 lda #ERR.INV.OPCODE
sec
.99 rts
*---------------------------------------
SRC.ParseLine.AM stz SRC.AM.ID
stz SRC.AM.StrBuf
.1 jsr SRC.GetCharUC any arg immediately after ' '?
.1 jsr SRC.GetNextCharUC any arg immediately after ' '?
beq .8 no, AM.ID=0 (implied)
cmp #' ' another space ?
@ -390,25 +391,25 @@ SRC.ParseLine.AM stz SRC.AM.ID
.21 jsr SRC.IsLetter Any register?
bcs .70 no, try something else
ldx SRC.BufPtr
stx SRC.BufPtrSave
ldx ZPLinePtr
stx SRC.LinePtrSave
ldx ZPLinePtr+1
stx SRC.LinePtrSave+1
stz SRC.AM.tmpBuf
sta SRC.AM.tmpBuf+1
inc SRC.AM.tmpBuf
.3 jsr SRC.GetCharUC
beq .41
.3 jsr SRC.GetNextCharUC
beq .4
jsr SRC.IsLetterOrDigit
bcs .4
inc SRC.AM.tmpBuf
ldx SRC.AM.tmpBuf
sta SRC.AM.tmpBuf,x
bra .3
.4 dec SRC.BufPtr back one char
.41 ldy #0
.4 ldy #0
.5 lda (ZPPtr3),y
beq .71 last register ?
@ -447,12 +448,13 @@ SRC.ParseLine.AM stz SRC.AM.ID
tay
bra .5
.71 lda SRC.BufPtrSave Does not match a register,restore Ptr
sta SRC.BufPtr
.70 dec SRC.BufPtr back one char
jsr EXP.Eval
.71 ldx SRC.LinePtrSave Does not match a register,restore Ptr
stx ZPLinePtr
stx SRC.LinePtrSave+1
stx ZPLinePtr+1
.70 jsr EXP.Eval
bcs .99
@ -475,7 +477,7 @@ SRC.ParseLine.AM stz SRC.AM.ID
.9 lda #ERR.INVALID.AM.SYN
.9 lda #ERR.INV.AM.SYN
sec
.99 rts
*---------------------------------------
@ -483,23 +485,30 @@ SRC.GetDecimal stz SRC.ACC+1
stz SRC.ACC+2
stz SRC.ACC+3
jsr SRC.GetChar
lda (ZPLinePtr)
beq .99
jsr SRC.IsDigit10
bcs .99
and #$0F
sta SRC.ACC
.1 jsr SRC.GetChar
.1 jsr SRC.GetNextChar
beq .8
cmp #' '
beq .88
beq .8
jsr SRC.IsEXPReserved
bcc .88
bcc .8
jsr SRC.IsAMReserved
bcc .88
bcc .8
jsr SRC.IsDigit10
bcs .99
bcs .9
and #$0F
pha
@ -522,7 +531,6 @@ SRC.GetDecimal stz SRC.ACC+1
sec
rts
.88 dec SRC.BufPtr Back One Char
.8 clc
rts
@ -534,21 +542,21 @@ SRC.GetHex stz SRC.ACC+1
stz SRC.ACC+2
stz SRC.ACC+3
jsr SRC.GetChar
lda (ZPLinePtr)
beq .99
jsr SRC.IsDigit16
bcs .99
sta SRC.ACC
.1 jsr SRC.GetChar
.1 jsr SRC.GetNextChar
beq .8
cmp #' '
beq .88
beq .8
jsr SRC.IsEXPReserved
bcc .88
bcc .8
jsr SRC.IsAMReserved
bcc .88
bcc .8
jsr SRC.IsDigit16
bcs .99
@ -564,7 +572,6 @@ SRC.GetHex stz SRC.ACC+1
sta SRC.ACC
bra .1
.88 dec SRC.BufPtr Back One Char
.8 clc
rts
@ -580,23 +587,29 @@ SRC.GetOctal stz SRC.ACC+1
stz SRC.ACC+2
stz SRC.ACC+3
jsr SRC.GetChar
lda (ZPLinePtr)
beq .99
jsr SRC.IsDigit8
bcs .99
and #$0F
sta SRC.ACC
.1 jsr SRC.GetChar
.1 jsr SRC.GetNextChar
beq .8
cmp #' '
beq .88
beq .8
jsr SRC.IsEXPReserved
bcc .88
bcc .8
jsr SRC.IsAMReserved
bcc .88
bcc .8
jsr SRC.IsDigit8
bcs .99
bcs .9
asl
asl
@ -615,7 +628,6 @@ SRC.GetOctal stz SRC.ACC+1
bne .2
bra .1
.88 dec SRC.BufPtr Back One Char
.8 clc
rts
@ -631,25 +643,33 @@ SRC.GetBinary stz SRC.ACC+1
stz SRC.ACC+2
stz SRC.ACC+3
jsr SRC.GetChar
lda (ZPLinePtr)
beq .99
cmp #'1'
beq .10
cmp #'0'
bne .99
.10 and #$01
sta SRC.ACC
.1 jsr SRC.GetChar
.1 jsr SRC.GetNextChar
beq .8
cmp #' '
beq .88
beq .8
jsr SRC.IsEXPReserved
bcc .88
bcc .8
jsr SRC.IsAMReserved
bcc .88
bcc .8
cmp #'1'
beq .11
cmp #'0'
bne .8
@ -662,7 +682,6 @@ SRC.GetBinary stz SRC.ACC+1
bcs .9
bra .1
.88 dec SRC.BufPtr Back One Char
.8 clc
rts
@ -676,7 +695,7 @@ SRC.GetBinary stz SRC.ACC+1
*---------------------------------------
SRC.GetLabel >STYA ZPPtr1
jsr SRC.GetCharUC
lda (ZPLinePtr)
beq .9
jsr SRC.IsLetter
@ -685,7 +704,7 @@ SRC.GetLabel >STYA ZPPtr1
ldy #1
sta (ZPPtr1),y
.1 jsr SRC.GetCharUC
.1 jsr SRC.GetNextCharUC
beq .8
jsr SRC.IsLetterOrDigit
@ -697,12 +716,12 @@ SRC.GetLabel >STYA ZPPtr1
beq .2
cmp #' '
beq .88
beq .8
jsr SRC.IsEXPReserved
bcc .88
bcc .8
jsr SRC.IsAMReserved
bcc .88
bcc .8
.9 lda #ERR.SYNTAX.ERROR
sec
rts
@ -711,73 +730,62 @@ SRC.GetLabel >STYA ZPPtr1
sta (ZPPtr1),y
cpy #SRC.GLABEL.MAXLEN
bcc .1 if equ Carry is set
.88 dec SRC.BufPtr Back One Char
.8 tya
sta (ZPPtr1)
clc
rts
*---------------------------------------
SRC.GetKeyword >STYA ZPPtr1
SRC.GetKeyword >STYA ZPPtr1 KeyWord table
jsr SRC.GetArg
bcs .9
stz SRC.Keyword.ID
ldy #0
.1 lda (ZPPtr1)
beq .9 End Of table
.3 lda (ZPPtr1),y
beq .9
cmp SRC.Buffer
bne .6
phy
tax KW len
ldx #0
.4 iny
inx
lda (ZPPtr1),y
cmp SRC.Buffer,x
bne .5
cpx SRC.Buffer
bne .4
.2 ldy #0
ply
.3 lda (ZPLinePtr),y
beq .5
jsr SRC.IsLetter
bcs .5
ldx SRC.Keyword.ID
clc
rts
.5 ply
.6 tya
sec Add keyword Len+1
adc (ZPPtr1),y
tay
inc SRC.Keyword.ID
inc SRC.Keyword.ID
bra .3
.9 sec
rts
*---------------------------------------
SRC.GetArg jsr SRC.GetCharUC
beq .9
sta SRC.Buffer+1
ldy #1
.1 jsr SRC.GetCharUC
beq .2
cmp #' '
beq .2
iny
sta SRC.Buffer,y
bra .1
cmp (ZPPtr1),y
bne .5
.2 sty SRC.Buffer
dex
bne .3
lda (ZPLinePtr),y All chars match...
beq .4 End of Line ?
jsr SRC.IsLetter
bcc .5 Additional letters...
.4 lda ZPLinePtr
clc
adc (ZPPtr1)
sta ZPLinePtr
bcc .41
inc ZPLinePtr+1
.41 ldx SRC.Keyword.ID
clc
rts
.5 lda (ZPPtr1)
sec Add keyword Len+1
adc ZPPtr1
sta ZPPtr1
bcc .6
inc ZPPtr1+1
.6 inc SRC.Keyword.ID
inc SRC.Keyword.ID
bra .1
.9 sec
rts
@ -860,13 +868,29 @@ SRC.IsDigit8 cmp #'0'
.9 sec
rts
*---------------------------------------
SRC.GetCharNB jsr SRC.GetCharUC
SRC.CheckBlank lda (ZPLinePtr)
beq .9
cmp #' '
beq SRC.GetCharNB
bne .9
.1 jsr SRC.GetNextChar
beq .9
cmp #' '
beq .1
clc
rts
.9 sec
rts
*---------------------------------------
SRC.GetNextCharNB jsr SRC.GetNextCharUC
beq .9
cmp #' '
beq SRC.GetNextCharNB
.9 rts
*---------------------------------------
SRC.GetCharUC jsr SRC.GetChar
SRC.GetNextCharUC jsr SRC.GetNextChar
beq .9
cmp #'a'
bcc .9
@ -875,10 +899,24 @@ SRC.GetCharUC jsr SRC.GetChar
eor #$20 to Uppercase
.9 rts
*---------------------------------------
SRC.GetChar ldx SRC.BufPtr
lda UsrBuf256,x
SRC.GetCharUC lda (ZPLinePtr)
beq .9
inc SRC.BufPtr if 255, will make Z
cmp #'a'
bcc .9
cmp #'z'+1
bcs .9
eor #$20 to Uppercase
.9 rts
*---------------------------------------
SRC.GetNextChar lda (ZPLinePtr)
beq .9
inc ZPLinePtr
bne .1
inc ZPLinePtr+1
.1 lda (ZPLinePtr)
.9 rts
*---------------------------------------
SRC.ACC10 lda SRC.ACC ACC*2-> ACC & ACCTMP
@ -922,7 +960,6 @@ SRC.ACC10 lda SRC.ACC ACC*2-> ACC & ACCTMP
sta SRC.ACC+3 CS if overflow
.9 rts
*---------------------------------------
MAN
SAVE /A2OSX.BUILD/BIN/DEV/ASM.S.SRC

View File

@ -12,8 +12,11 @@ AUTO 4,1
ZPPtr1 .EQ ZPBIN
ZPPtr2 .EQ ZPBIN+2
ZPPtr3 .EQ ZPBIN+4
ZPBlockPtr .EQ ZPBIN+6
ZPSymbolPtr .EQ ZPBIN+8
ZPLineBuf .EQ ZPBIN+6
ZPLinePtr .EQ ZPBIN+8
ZPBlockPtr .EQ ZPBIN+10
ZPSymbolPtr .EQ ZPBIN+12
ZPTmpBuf .EQ ZPBIN+14
*---------------------------------------
ASM.T.AM .EQ 0
ASM.T.R .EQ 2
@ -37,18 +40,18 @@ ERR.SYNTAX.ERROR .EQ $A0
ERR.SYM.TOO.LONG .EQ $A1
ERR.VAL.TOO.BIG .EQ $A2
ERR.LINE.TOO.LONG .EQ $A3
ERR.INVALID.LABEL .EQ $A4
ERR.INVALID.DIRECTIVE .EQ $A5
ERR.INVALID.OPCODE .EQ $A6
ERR.INVALID.AM.SYN .EQ $A7
ERR.INVALID.AM.4.OC .EQ $A8
ERR.INV.LABEL .EQ $A4
ERR.INV.DIRECTIVE .EQ $A5
ERR.INV.OPCODE .EQ $A6
ERR.INV.AM.SYN .EQ $A7
ERR.INV.AM.4.OC .EQ $A8
ERR.RANGE .EQ $A9
ERR.UNDEF.SYMBOL .EQ $AA
ERR.SYMBOL.REDEFINE .EQ $AB
ERR.TOO.MANY.DO .EQ $AC
ERR.MISSING.EXP .EQ $B0
ERR.EXP.SYN.ERROR .EQ $B1
ERR.INVALID.MACRO.DEF .EQ $E0
ERR.INV.MACRO.DEF .EQ $E0
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
@ -59,8 +62,8 @@ CS.START cld
.DA 0
.DA CS.END-CS.START CS
.DA DS.END-DS.START DS
.DA #128 SS
.DA #10 ZP
.DA #0 SS
.DA #16 ZP
.DA 0
*--------------------------------------
* Relocation Table
@ -85,7 +88,7 @@ L.SRC.GLabel.Flags .DA SRC.GLabel.Flags
L.SRC.GLabel.Len .DA SRC.GLabel.Len
L.SRC.ELabel.Flags .DA SRC.ELabel.Flags
L.SRC.ELabel.Len .DA SRC.ELabel.Len
L.SRC.BUFFER .DA SRC.BUFFER
L.ASM.6502 .DA ASM.6502
L.ASM.T.FILENAME .DA ASM.T.FILENAME
L.FIO.Stat .DA FIO.Stat
L.T.DIRECTIVES .DA T.DIRECTIVES
@ -161,7 +164,6 @@ CS.INIT ldy #S.PS.ARGC
ldy #SRC.hFILENAME
sta (pData),y
jsr FIO.Init
bcs .9
@ -170,6 +172,20 @@ CS.INIT ldy #S.PS.ARGC
jsr DIR.Init
>LDYAI 256
>SYSCALL GetMem.YA
bcs .9
>STYA ZPLineBuf
txa
>STA.G SRC.hLineBuf
>LDYAI 256
>SYSCALL GetMem.YA
bcs .9
>STYA ZPTmpBuf
txa
>STA.G SRC.hTmpBuf
* lda (pPs)
* ora #S.PS.F.EVENT
* sta (pPs)
@ -211,12 +227,12 @@ CS.RUN >SYSCALL GetChar
ldy #SRC.hFILENAME
lda (pData),y
jsr FIO.OpenFileA
>SYSCALL GetMemPtr.A
jsr FIO.OpenFile
bcs .99
.10 stz UsrBuf256
>DEBUG
jsr FIO.ReadLine
.10 jsr FIO.ReadLine
bcc .2
cmp #$4C End Of File?
bne .9
@ -273,13 +289,22 @@ CS.QUIT jsr FIO.FileClose
jsr SYM.Quit
ldy #ASM.T.hMem
lda (pData),y
>LDA.G ASM.T.hMem
beq .1
>SYSCALL FreeMem.A
.1 ldy #SRC.hFILENAME
lda (pData),y
.1 >LDA.G SRC.hFILENAME
beq .2
>SYSCALL FreeMem.A
.2 >LDA.G SRC.hLineBuf
beq .3
>SYSCALL FreeMem.A
.3 >LDA.G SRC.hTmpBuf
beq .8
>SYSCALL FreeMem.A
@ -294,101 +319,54 @@ CS.QUIT jsr FIO.FileClose
.INB /A2OSX.BUILD/BIN/DEV/ASM.S.SYM
*---------------------------------------
CS.END
SRC.DIR.MAXLEN .EQ 5
T.DIRECTIVES .HS 02
.AS "AC"
.HS 02
.AS "AS"
.HS 02
.AS "AT"
.HS 02
.AS "AZ"
.HS 02
.AS "BS"
.HS 02
.AS "DA"
.HS 02
.AS "DO"
.HS 02
.AS "DU"
.HS 05
.AS "DUMMY"
.HS 02
.AS "ED"
.HS 04
.AS "ELSE"
.HS 02
.AS "EM"
.HS 02
.AS "EN"
.HS 02
.AS "EP"
.HS 02
.AS "EQ"
.HS 03
.AS "FIN"
.HS 02
.AS "HS"
.HS 02
.AS "IN"
.HS 03
.AS "INB"
.HS 04
.AS "INB1"
.HS 04
.AS "INB2"
.HS 04
.AS "INB3"
.HS 04
.AS "INB4"
.HS 04
.AS "INB5"
.HS 04
.AS "INB6"
.HS 04
.AS "INB7"
.HS 04
.AS "INB8"
.HS 04
.AS "INB9"
.HS 02
.AS "LI"
.HS 04
.AS "LIST"
.HS 02
.AS "MA"
.HS 02
.AS "OP"
.HS 02
.AS "OR"
.HS 02
.AS "PG"
.HS 02
.AS "PH"
.HS 02
.AS "SE"
.HS 02
.AS "TA"
.HS 02
.AS "TF"
.HS 02
.AS "TI"
.HS 02
.AS "US"
T.DIRECTIVES >PSTR "AC"
>PSTR "AS"
>PSTR "AT"
>PSTR "AZ"
>PSTR "BS"
>PSTR "DA"
>PSTR "DO"
>PSTR "DU"
>PSTR "DUMMY"
>PSTR "ED"
>PSTR "ELSE"
>PSTR "EM"
>PSTR "EN"
>PSTR "EP"
>PSTR "EQ"
>PSTR "FIN"
>PSTR "HS"
>PSTR "IN"
>PSTR "INB"
>PSTR "INB1"
>PSTR "INB2"
>PSTR "INB3"
>PSTR "INB4"
>PSTR "INB5"
>PSTR "INB6"
>PSTR "INB7"
>PSTR "INB8"
>PSTR "INB9"
>PSTR "LI"
>PSTR "LIST"
>PSTR "MA"
>PSTR "OP"
>PSTR "OR"
>PSTR "PG"
>PSTR "PH"
>PSTR "SE"
>PSTR "TA"
>PSTR "TF"
>PSTR "TI"
>PSTR "US"
.HS 00
*---------------------------------------
T.LI .HS 03
.AS "CON"
.HS 04
.AS "COFF"
.HS 03
.AS "XON"
.HS 04
.AS "XOFF"
.HS 02
.AS "ON"
.HS 03
.AS "OFF"
T.LI >PSTR "CON"
>PSTR "COFF"
>PSTR "XON"
>PSTR "XOFF"
>PSTR "ON"
>PSTR "OFF"
.HS 00
*---------------------------------------
MSG.HELP >CSTR "A2osX-Macro Assembler (S-C MASM 3.0 Based)\r\nUsage : ASM <src file> [type TXT ($04) or S-C/BAS ($FA)]\r\n"
@ -405,8 +383,8 @@ MSG.SUMMARY >CSTR "\r\nEnd Of Assembly.\r\n"
SRC.AM.RESERVED >PSTR "[](),"
SRC.MOD.RESERVED >PSTR "#/<>"
SRC.EXP.RESERVED >PSTR "^!|&<=>+-*/"
ASM.T.DEFAULT >CSTR ".T.6502"
ASM.T.FILENAMELEN .BS 1
ASM.6502 >CSTR "6502"
*---------------------------------------
ASM.T.FILENAME .BS 65
FIO.Stat .BS S.STAT
@ -418,6 +396,7 @@ SYM.iCurGBlock.Save .BS 1
SYM.pCurGBlock.Save .BS 1
SRC.LINENUM .BS 2
SRC.LinePtrSave .BS 2
SRC.Directive.ID .BS 1
SRC.Keyword.ID .BS 1
SRC.ACC .BS 4
@ -426,10 +405,6 @@ SRC.ARG .BS 4
SRC.AM.ID .BS 1
SRC.AM.StrBuf .BS 32
SRC.AM.tmpBuf .BS 32
SRC.Exp .BS 128
SRC.BufPtr .BS 1
SRC.BufPtrSave .BS 1
SRC.Buffer .BS 256
SRC.GLabel.New .BS 1
SRC.GLabel.Flags .BS 1
SRC.GLabel.Value .BS 4
@ -445,7 +420,6 @@ SRC.FLabel.Flags .BS 1
SRC.FLabel.Value .BS 4
SRC.FLabel.Len .BS 1
SRC.FLabel.Name .BS SRC.GLABEL.MAXLEN
UsrBuf256 .BS 256
*--------------------------------------
.DUMMY
.OR 0
@ -453,6 +427,8 @@ DS.START
bPause .BS 1
SRC.hFILENAME .BS 1
SRC.hLineBuf .BS 1
SRC.hTmpBuf .BS 1
SRC.COUNT .BS 1
SRC.hFILES .BS SRC.IN.MAXDEPTH

View File

@ -1,12 +1,10 @@
PR#3
PREFIX /A2OSX.BUILD
NEW
INC 1
AUTO 6
PREFIX /A2OSX.BUILD
AUTO 4,1
.LIST OFF
.OP 65C02
.OR $2000
.TF /A2OSX.BUILD/TEST
.TF /A2OSX.BUILD/ROOT/TEST
*--------------------------------------
.INB /A2OSX.BUILD/INC/MACROS.I
.INB /A2OSX.BUILD/INC/A2OSX.I
@ -139,5 +137,5 @@ DS.END
.ED
*--------------------------------------
MAN
SAVE /A2OSX.BUILD/TEST.S
SAVE /A2OSX.BUILD/ROOT/TEST.S
ASM