ADM: fix forward ref bug

This commit is contained in:
burniouf 2023-07-22 15:41:22 +02:00
parent 94dddcd65e
commit e3246c9c83
7 changed files with 86 additions and 75 deletions

Binary file not shown.

View File

@ -158,7 +158,7 @@ EXP.EvalExitOK >LDA.G EXP.Modifier
asl asl
tax tax
lda #SYMG.F.FWREF lda #SYMG.F.FWREF Reset FW flag because of IMM modifier
trb SRC.ACC.F trb SRC.ACC.F
jmp (J.EXP.MOD-2,x) jmp (J.EXP.MOD-2,x)

View File

@ -248,10 +248,7 @@ SRC.ParseLine.AM
jsr SRC.AddToBuf jsr SRC.AddToBuf
.75 ldx SRC.ACC.SIZE .75 jsr SRC.GetACCSize
beq * SHOULD NEVER APPEND
jsr SRC.GetACCSize
.72 lda #'a' .72 lda #'a'
@ -1139,6 +1136,9 @@ SRC.GetACCSize lda SRC.ACC.F
.1 ldx SRC.ACC.SIZE .1 ldx SRC.ACC.SIZE
beq * SHOULD NEVER APPEND
.2 lda SRC.ACC-1,x .2 lda SRC.ACC-1,x
bne .8 bne .8

View File

@ -71,8 +71,6 @@ SYM.NewGlobal >LDA.G ASM.PASS
>STYA.G SYM.ID >STYA.G SYM.ID
jsr SRC.SkipX
stz SRC.ACC.F stz SRC.ACC.F
lda #SYMG lda #SYMG
@ -81,6 +79,17 @@ SYM.NewGlobal >LDA.G ASM.PASS
lda #0 lda #0
sta (ZPSymbolBuf),y sta (ZPSymbolBuf),y
phx
jsr SYM.LookupFWFef
bcs .1
lda #SYMG.F.FWREF
tsb SRC.ACC.F
.1 plx
jsr SRC.SkipX
jsr SYM.PC2Acc jsr SYM.PC2Acc
jsr SYM.Acc2Global jsr SYM.Acc2Global
@ -113,11 +122,16 @@ SYM.GetGlobal >PUSHB.G SYM.hList Pass #2: should be already defined...
>SYSCALL SListGetData >SYSCALL SListGetData
bcs .99 bcs .99
lda (ZPSymbolBuf) lda (ZPSymbolBuf) #SYMG.F
and #SYMG.F.EQU bit #SYMG.F.EQU
bne .8 bne .8
* bit #SYMG.F.FWREF
* beq .2
* >DEBUG
>LDA.G ASM.PC .2 >LDA.G ASM.PC
ldy #SYMG.V ldy #SYMG.V
cmp (ZPSymbolBuf),y cmp (ZPSymbolBuf),y
bne .7 bne .7
@ -158,10 +172,19 @@ SYM.LookupGlobal
sec sec
rts rts
.11 jmp SYM.AddFWFef .11 lda #SYMG.F.FWREF
tsb SRC.ACC.F
lda #$FF
sta SRC.ACC
sta SRC.ACC+1
jmp SYM.AddFWFef
.10 >STYA ZPPtr1 KeyID .10 >STYA ZPPtr1 KeyID
jsr SRC.SkipX
.1 >LDA.G SYM.ID .1 >LDA.G SYM.ID
cmp ZPPtr1 cmp ZPPtr1
bne .3 bne .3
@ -176,38 +199,19 @@ SYM.LookupGlobal
.2 lda (ZPSymbolBuf),y .2 lda (ZPSymbolBuf),y
sta SRC.ACC.F,y sta SRC.ACC.F,y
dey dey
bne .2 Keep ACC.F unchanged bpl .2
jsr SRC.SkipX
clc clc
rts rts
.3 phx .3 >PUSHB.G SYM.hList
>PUSHB.G SYM.hList
>PUSHW ZPPtr1 KeyID >PUSHW ZPPtr1 KeyID
>PUSHW L.SRC.ACC.SIZE >PUSHW L.SRC.ACC.F
>PUSHWI SYMG-1 Get only Global value >PUSHWI SYMG
>PUSHWI 1 Skip SYMG.F >PUSHWZ
>SYSCALL SListGetData >SYSCALL SListGetData
bcs .90 bcs .90
jsr SYM.LookupFWFef
bcs .8
* lda #2
* cmp SRC.ACC.SIZE
* beq .8
* sta SRC.ACC.SIZE
lda #SYMG.F.FWREF
tsb SRC.ACC.F
.8 plx
jsr SRC.SkipX
clc clc
rts rts
@ -309,18 +313,6 @@ SYM.PC2Acc ldy #ASM.PC+3
dex dex
bpl .1 bpl .1
ldx #4
.2 lda SRC.ACC-1,x
bne .3
dex
bne .2
inx
.3 stx SRC.ACC.SIZE
rts rts
*--------------------------------------- *---------------------------------------
SYM.Acc2Global ldy #SYMG-1 SYM.Acc2Global ldy #SYMG-1
@ -573,20 +565,31 @@ SYM.Dump.GLP jsr SYM.Dump.G
.8 clc .8 clc
.9 rts .9 rts
*--------------------------------------- *---------------------------------------
SYM.Dump.G ldy #SYMG.SIZE Get Symbol Size SYM.Dump.G ldx #8
lda (ZPSymbolBuf),y
ldy #SYMG.V+3
.10 lda (ZPSymbolBuf),y
bne .1
dey
dex
dex
bne .10
.1 txa
lsr
pha pha
asl
tax
>PUSHB L.MSG.EQU0+1,x >PUSHB L.MSG.EQU0+1,x
>PUSHB L.MSG.EQU0,x >PUSHB L.MSG.EQU0,x
pla pla
beq .3
pha pha
tax byte count tax byte count
clc clc
adc #SYMG.V adc #SYMG.V
@ -625,7 +628,7 @@ SYM.Dump.LP ldy #SYMG
>PUSHW L.MSG.LSYMBOL >PUSHW L.MSG.LSYMBOL
txa txa
>PUSHA >PUSHA
* >DEBUG
jsr SYM.Dump.PushValueY jsr SYM.Dump.PushValueY
lda #5 lda #5
@ -692,7 +695,7 @@ SYM.Dump.PushValueY
.2 lda SRC.ACC,x .2 lda SRC.ACC,x
>PUSHA >PUSHA
dex dex
bpl .1 bpl .2
rts rts
*--------------------------------------- *---------------------------------------

View File

@ -52,10 +52,9 @@ SYMG.F.RW .EQ %10000000
SYMG.F.EQU .EQ %01000000 SYMG.F.EQU .EQ %01000000
SYMG.F.LOCALS .EQ %00100000 SYMG.F.LOCALS .EQ %00100000
SYMG.F.FWREF .EQ %00010000 SYMG.F.FWREF .EQ %00010000
SYMG.SIZE .EQ 1 1,2,3,4 SYMG.V .EQ 1 DWORD
SYMG.V .EQ 2 DWORD
* *
SYMG .EQ 6 SYMG .EQ 5
*--------------------------------------- *---------------------------------------
SYML.ID .EQ 0 1..255 SYML.ID .EQ 0 1..255
SYML.CtxID .EQ 1 0 if local, !0 if private SYML.CtxID .EQ 1 0 if local, !0 if private
@ -151,9 +150,7 @@ L.MSG.CPU.FILE .DA MSG.CPU.FILE
L.SRC.AM.StrBuf .DA SRC.AM.StrBuf L.SRC.AM.StrBuf .DA SRC.AM.StrBuf
L.ASM.6502 .DA ASM.6502 L.ASM.6502 .DA ASM.6502
L.ASM.CPU.FILE .DA ASM.CPU.FILE L.ASM.CPU.FILE .DA ASM.CPU.FILE
L.SRC.ACC.SIZE .DA SRC.ACC.SIZE L.SRC.ACC.F .DA SRC.ACC.F
L.SRC.ACC .DA SRC.ACC
L.SRC.ARG .DA SRC.ARG
L.T.DIRECTIVES .DA T.DIRECTIVES L.T.DIRECTIVES .DA T.DIRECTIVES
J.DIRECTIVES .DA DIR.AC J.DIRECTIVES .DA DIR.AC
.DA DIR.AS .DA DIR.AS
@ -589,8 +586,9 @@ MSG.SYMDBG .CZ "SymID=%H\r\n"
*--------------------------------------- *---------------------------------------
ASM.CPU.FILE .BS 65 ASM.CPU.FILE .BS 65
SRC.ACC.F .BS 1
SRC.ACC.SIZE .BS 1 SRC.ACC.SIZE .BS 1
SRC.ACC.F .BS 1
SRC.ACC .BS 4 SRC.ACC .BS 4
SRC.ARG.F .BS 1 SRC.ARG.F .BS 1
SRC.ARG .BS 4 SRC.ARG .BS 4

View File

@ -296,7 +296,7 @@ OPEN lda #S.DIB.S.OPENED
* ldx DEVSLOTx0 Done by CLOSE * ldx DEVSLOTx0 Done by CLOSE
lda #UD.IO.Cmd.NetOpen lda #UD.IO.Cmd.NetOpen
jsr IO.Exec jsr IO.ExecA
bcs .99 bcs .99
ldy #0 ldy #0
@ -321,7 +321,7 @@ OPEN lda #S.DIB.S.OPENED
CLOSE ldx DEVSLOTx0 CLOSE ldx DEVSLOTx0
lda #UD.IO.Cmd.NetClose lda #UD.IO.Cmd.NetClose
jsr IO.Exec jsr IO.ExecA
bcs .9 bcs .9
lda #S.DIB.S.OPENED lda #S.DIB.S.OPENED
@ -338,7 +338,7 @@ READ php
ldx DEVSLOTx0 ldx DEVSLOTx0
lda #UD.IO.Cmd.NetPeek lda #UD.IO.Cmd.NetPeek
jsr IO.Exec jsr IO.ExecA
bcs READWRITE.99 bcs READWRITE.99
lda UD.IO.RData,x lda UD.IO.RData,x
@ -364,7 +364,7 @@ READ php
ldx DEVSLOTx0 ldx DEVSLOTx0
lda #UD.IO.Cmd.NetRcvd lda #UD.IO.Cmd.NetRcvd
jsr IO.Exec jsr IO.ExecA
bcs READWRITE.99 bcs READWRITE.99
lda UD.IO.RData,x lda UD.IO.RData,x
@ -412,6 +412,8 @@ WRITE php
>STYA ZPIOCTL >STYA ZPIOCTL
ldx DEVSLOTx0 ldx DEVSLOTx0
lda #UD.IO.Cmd.NetSend
sta UD.IO.Cmd,x
ldy #S.IOCTL.BYTECNT ldy #S.IOCTL.BYTECNT
lda (ZPIOCTL),y lda (ZPIOCTL),y
@ -422,7 +424,6 @@ WRITE php
iny iny
lda (ZPIOCTL),y lda (ZPIOCTL),y
sta UD.IO.WData,x sta UD.IO.WData,x
lda (ZPIOCTL),y
eor #$ff eor #$ff
sta Counter+1 sta Counter+1
@ -433,6 +434,17 @@ WRITE php
lda (ZPIOCTL),y lda (ZPIOCTL),y
sta ZPBufPtr+1 sta ZPBufPtr+1
ldy #S.ETH.SRCMAC+5
ldx #5
.10 lda DCB+S.DCB.NIC.MAC,x
sta (ZPBufPtr),y
dey
dex
bpl .10
ldx DEVSLOTx0
ldy #0 ldy #0
.1 inc Counter .1 inc Counter
@ -449,9 +461,7 @@ WRITE php
inc ZPBufPtr+1 inc ZPBufPtr+1
bra .1 bra .1
.8 lda #UD.IO.Cmd.NetSend .8 jsr IO.Exec
jsr IO.Exec
bcs WRITE.99 bcs WRITE.99
plp plp
@ -470,7 +480,7 @@ IO.GetStatus stz DCB+S.DCB.NIC.LINK
ldx DEVSLOTx0 ldx DEVSLOTx0
lda #UD.IO.Cmd.NetStatus lda #UD.IO.Cmd.NetStatus
jsr IO.Exec jsr IO.ExecA
bcs .99 bcs .99
lda UD.IO.RData,x PHYCFGR lda UD.IO.RData,x PHYCFGR
@ -494,9 +504,9 @@ IO.GetStatus stz DCB+S.DCB.NIC.LINK
.99 rts .99 rts
*-------------------------------------- *--------------------------------------
IO.Exec sta UD.IO.Cmd,x IO.ExecA sta UD.IO.Cmd,x
stz UD.IO.UnitNum,x IO.Exec stz UD.IO.UnitNum,x
lda UD.IO.Exec,x lda UD.IO.Exec,x

View File

@ -35,7 +35,7 @@ A2osX.BADCALL .EQ $100C
*-------------------------------------- *--------------------------------------
A2osX.SLEEP .EQ $1010 A2osX.SLEEP .EQ $1010
*-------------------------------------- *--------------------------------------
* $BED0->$BEEF : Public Variables * $1ED0->$1EEF : Public Variables
*-------------------------------------- *--------------------------------------
A2osX.SCRNDEVS .EQ $11D0 0=console, 1-8=VT100, 9=GFX A2osX.SCRNDEVS .EQ $11D0 0=console, 1-8=VT100, 9=GFX
A2osX.ASCREEN .EQ $11DA Active Screen A2osX.ASCREEN .EQ $11DA Active Screen
@ -60,7 +60,7 @@ A2osX.HWSubT.LCCard .EQ 2
A2osX.TIMER16 .EQ $11EC WORD A2osX.TIMER16 .EQ $11EC WORD
A2osX.RANDOM16 .EQ $11EE WORD A2osX.RANDOM16 .EQ $11EE WORD
*-------------------------------------- *--------------------------------------
* $BEF0->$BEFF : Kernel Config Block * $11F0->$11FF : Kernel Config Block
*-------------------------------------- *--------------------------------------
A2osX.KCONFIG .EQ $11F0 A2osX.KCONFIG .EQ $11F0
A2osX.HZ .EQ $11F0 5/6 for 50/60Hz A2osX.HZ .EQ $11F0 5/6 for 50/60Hz