Update module loader to handle 8 bit fixups generated by EDASM

This commit is contained in:
David Schmenk 2024-02-24 11:13:46 -08:00
parent a89b1b9b40
commit 6efc2b1a98
10 changed files with 256 additions and 73 deletions

BIN
images/apple/ASM-TK.po Executable file

Binary file not shown.

View File

@ -152,7 +152,9 @@ cp samplesrc/fppow.pla prodos/bld/samples/FPPOW.PLA.TXT
cp utilsrc/apple/mon.pla prodos/bld/samples/MON.PLA.TXT
cp utilsrc/apple/zipchip.pla prodos/bld/samples/ZIPCHIP.PLA.TXT
cp libsrc/apple/dhgrlib.pla prodos/bld/DHGR.PLA.TXT
cp libsrc/apple/dhgrlib.pla prodos/bld/samples/DHGR.PLA.TXT
cp samplesrc/testrel.asm prodos/bld/samples/TESTREL.ASM.TXT
cp samplesrc/testext.asm prodos/bld/samples/TESTEXT.ASM.TXT
mkdir prodos/bld/scripts
cp scripts/rod.4th prodos/bld/scripts/ROD.4TH.TXT

View File

@ -1,42 +0,0 @@
REL
ORG $1000
;
ESTKH EQU $C0
ESTKL EQU $D0
;
EXTRN PUTS
EXTRN PUTLN
;
; EXT HEADER
;
DW $6502
DW 0 ; SYSFLAGS
DW DEFSEG ; DEF OFFSET
DW 1 ; DEF COUNT (INCLUDING INIT)
DW MODINIT ; MOD INIT
MSB ON
ASC "CMDSY" ; MOD DEPENDENCIES
MSB OFF
ASC "S"
DB 0
;
; DATA AND 6502 CODE SEGMENT
;
MSG STR "Hello"
MSGADDR DW MSG
ASMINIT LDA MSGADDR
LDY MSGADDR+1
DEX
STA ESTKL,X
STY ESTKH,X
JSR PUTS
JMP PUTLN
;
; BYTECODE DEFS SEGMENT
;
DEFSEG EQU *
MODINIT DB $54 ; CALL ASMINIT
DW ASMINIT
DB $2C ; CW
DW $2000 ; MODKEEP
DB $5C ; RET

86
src/samplesrc/testext.asm Normal file
View File

@ -0,0 +1,86 @@
;
; EXTENDED REL MODULE WITH DEPENDENCIES, BYTECODE SEGMENT, AND INIT
;
REL
ORG $1000
;
; USEFUL ZERO PAGE LOCATIONS
;
SRC EQU $06
SRCL EQU SRC
SRCH EQU SRC+1
DST EQU SRC+2
DSTL EQU DST
DSTH EQU DST+1
TMP EQU $E7
TMPL EQU TMP
TMPH EQU TMP+1
ESTKH EQU $C0
ESTKL EQU $D0
DROPOP EQU $EF
NEXTOP EQU $F0
FETCHOP EQU NEXTOP+1
;
; JUMP TO BYTECODE INTERPRETER ADDRESS
;
INTERP EQU $03D0
;
; EXTERNALS USED BY THIS MODULE
;
EXTRN PUTS
EXTRN PUTLN
;
; EXT HEADER
;
DW $6502
DW 0 ; SYSFLAGS
DW DEFSEG ; DEF OFFSET
DW 1 ; DEF COUNT (INCLUDING INIT)
DW MODINIT ; MOD INIT
MSB ON
ASC "CMDSY" ; MOD DEPENDENCIES (DCI BACKWARDS HI/LO BIT FROM REL FILE)
MSB OFF
ASC "S"
DB 0
;
; DATA AND 6502 CODE SEGMENT
;
HIMSG STR "Hello"
HELLO DEF HELLO ; CALLABLE FROM EXTERNAL MODULES
LDA #>HIMSG
LDY #<HIMSG
DEX
STA ESTKL,X
STY ESTKH,X
JSR PUTS
JMP PUTLN
BYEMSG STR "Goodbye"
GOODBYE DEF GOODBYE ; CALLABLE FROM EXTERNAL MODULES
LDA #>BYEMSG
LDY #<BYEMSG
DEX
STA ESTKL,X
STY ESTKH,X
JSR PUTS
JMP PUTLN
;
; INITIALIZE MODULE AND RETURN SUCCESS
;
INIT LDA #$00
JSR HELLO
LDY #$00
DEX
STA ESTKL,X
STY ESTKH,X
RTS
;
; BYTECODE DEFS SEGMENT
;
DB 0 ; PAD BYE
DEFSEG EQU *
;
; INIT CODE RUNS WHEN MODULE LOADED
;
MODINIT DB $54 ; CALL ASM INIT
DW INIT
DB $5C ; RET

52
src/samplesrc/testrel.asm Normal file
View File

@ -0,0 +1,52 @@
;
; SIMPLE REL FILE - NO DEPENDENCIES, NO INIT CODE
;
REL
ORG $1000
;
; USEFUL ZERO PAGE LOCATIONS
;
SRC EQU $06
SRCL EQU SRC
SRCH EQU SRC+1
DST EQU SRC+2
DSTL EQU DST
DSTH EQU DST+1
TMP EQU $E7
TMPL EQU TMP
TMPH EQU TMP+1
ESTKH EQU $C0
ESTKL EQU $D0
DROPOP EQU $EF
NEXTOP EQU $F0
FETCHOP EQU NEXTOP+1
;
; JUMP TO BYTECODE INTERPRETER ADDRESS
;
INTERP EQU $03D0
;
; EXTERNALS USED BY THIS MODULE
;
EXTRN PUTS
EXTRN PUTLN
;
; DATA AND MACHINE CODE FOR THIS REL MODULE
;
HIMSG STR "Hello"
HELLO DEF HELLO
LDA #>HIMSG
LDY #<HIMSG
DEX
STA ESTKL,X
STY ESTKH,X
JSR PUTS
JMP PUTLN
BYEMSG STR "Goodbye"
GOODBYE DEF GOODBYE
LDA #>BYEMSG
LDY #<BYEMSG
DEX
STA ESTKL,X
STY ESTKH,X
JSR PUTS
JMP PUTLN

View File

@ -666,25 +666,42 @@ asm reloc(modfix, modofst, bytecode, rld)#3
LDY #$00
- LDA (SRC),Y
BEQ RLDEX ; END OF RLD
PHA
INY
LDA (SRC),Y
INY
CLC
ADC ESTKL+3,X ; ADDR=ENTRY=>1+MODFIX
STA DSTL
INY
LDA (SRC),Y
ADC ESTKH+3,X
STA DSTH
PLA
LDY #$00
LDA (SRC),Y
AND #$10 ; EXTERN REF - EXIT
BNE RLDEX
TAY ; FIXUP=*ADDR+MODOFST
LDA (SRC),Y
BMI FIX16
AND #$40
BNE FIXMSB
FIXLSB LDA (DST),Y
CLC
ADC ESTKL+2,X
CLC
BCC FIX8
FIXMSB LDY #$03
LDA (SRC),Y ; FIXUPH=(ENTRY->3+MODOFSTL)+(^ADDR+MODOFSTH)
CLC
ADC ESTKL+2,X
LDY #$00
LDA (DST),Y
INY
ADC ESTKH+2,X
CLC
BCC FIX8
FIX16 LDA (DST),Y ; FIXUP=*ADDR+MODOFST
CLC
ADC ESTKL+2,X
STA TMPL
INY
LDA (DST),Y
ADC ESTKH+2,X
CMP ESTKH+1,X ; FIXUP >= BYTECODE?
@ -698,7 +715,7 @@ asm reloc(modfix, modofst, bytecode, rld)#3
+ STA (DST),Y ; *ADDR=FIXUP
DEY
LDA TMPL
STA (DST),Y
FIX8 STA (DST),Y
LDA SRCL ; NEXT ENTRY
; CLC
ADC #$04

View File

@ -753,25 +753,42 @@ asm reloc(modfix, modofst, bytecode, rld)#3
LDY #$00
- LDA (SRC),Y
BEQ RLDEX ; END OF RLD
PHA
INY
LDA (SRC),Y
INY
CLC
ADC ESTKL+3,X ; ADDR=ENTRY=>1+MODFIX
STA DSTL
INY
LDA (SRC),Y
ADC ESTKH+3,X
STA DSTH
PLA
LDY #$00
LDA (SRC),Y
AND #$10 ; EXTERN REF - EXIT
BNE RLDEX
TAY ; FIXUP=*ADDR+MODOFST
LDA (SRC),Y
BMI FIX16
AND #$40
BNE FIXMSB
FIXLSB LDA (DST),Y
CLC
ADC ESTKL+2,X
CLC
BCC FIX8
FIXMSB LDY #$03
LDA (SRC),Y ; FIXUPH=(ENTRY->3+MODOFSTL)+(^ADDR+MODOFSTH)
CLC
ADC ESTKL+2,X
LDY #$00
LDA (DST),Y
INY
ADC ESTKH+2,X
CLC
BCC FIX8
FIX16 LDA (DST),Y ; FIXUP=*ADDR+MODOFST
CLC
ADC ESTKL+2,X
STA TMPL
INY
LDA (DST),Y
ADC ESTKH+2,X
CMP ESTKH+1,X ; FIXUP >= BYTECODE?
@ -785,7 +802,7 @@ asm reloc(modfix, modofst, bytecode, rld)#3
+ STA (DST),Y ; *ADDR=FIXUP
DEY
LDA TMPL
STA (DST),Y
FIX8 STA (DST),Y
LDA SRCL ; NEXT ENTRY
; CLC
ADC #$04

View File

@ -773,25 +773,42 @@ asm reloc(modfix, modofst, bytecode, rld)#3
LDY #$00
- LDA (SRC),Y
BEQ RLDEX ; END OF RLD
PHA
INY
LDA (SRC),Y
INY
CLC
ADC ESTKL+3,X ; ADDR=ENTRY=>1+MODFIX
STA DSTL
INY
LDA (SRC),Y
ADC ESTKH+3,X
STA DSTH
PLA
LDY #$00
LDA (SRC),Y
AND #$10 ; EXTERN REF - EXIT
BNE RLDEX
TAY ; FIXUP=*ADDR+MODOFST
LDA (SRC),Y
BMI FIX16
AND #$40
BNE FIXMSB
FIXLSB LDA (DST),Y
CLC
ADC ESTKL+2,X
CLC
BCC FIX8
FIXMSB LDY #$03
LDA (SRC),Y ; FIXUPH=(ENTRY->3+MODOFSTL)+(^ADDR+MODOFSTH)
CLC
ADC ESTKL+2,X
LDY #$00
LDA (DST),Y
INY
ADC ESTKH+2,X
CLC
BCC FIX8
FIX16 LDA (DST),Y ; FIXUP=*ADDR+MODOFST
CLC
ADC ESTKL+2,X
STA TMPL
INY
LDA (DST),Y
ADC ESTKH+2,X
CMP ESTKH+1,X ; FIXUP >= BYTECODE?
@ -805,7 +822,7 @@ asm reloc(modfix, modofst, bytecode, rld)#3
+ STA (DST),Y ; *ADDR=FIXUP
DEY
LDA TMPL
STA (DST),Y
FIX8 STA (DST),Y
LDA SRCL ; NEXT ENTRY
; CLC
ADC #$04

View File

@ -731,25 +731,42 @@ asm reloc(modfix, modofst, bytecode, rld)#3
LDY #$00
- LDA (SRC),Y
BEQ RLDEX ; END OF RLD
PHA
INY
LDA (SRC),Y
INY
CLC
ADC ESTKL+3,X ; ADDR=ENTRY=>1+MODFIX
STA DSTL
INY
LDA (SRC),Y
ADC ESTKH+3,X
STA DSTH
PLA
LDY #$00
LDA (SRC),Y
AND #$10 ; EXTERN REF - EXIT
BNE RLDEX
TAY ; FIXUP=*ADDR+MODOFST
LDA (SRC),Y
BMI FIX16
AND #$40
BNE FIXMSB
FIXLSB LDA (DST),Y
CLC
ADC ESTKL+2,X
CLC
BCC FIX8
FIXMSB LDY #$03
LDA (SRC),Y ; FIXUPH=(ENTRY->3+MODOFSTL)+(^ADDR+MODOFSTH)
CLC
ADC ESTKL+2,X
LDY #$00
LDA (DST),Y
INY
ADC ESTKH+2,X
CLC
BCC FIX8
FIX16 LDA (DST),Y ; FIXUP=*ADDR+MODOFST
CLC
ADC ESTKL+2,X
STA TMPL
INY
LDA (DST),Y
ADC ESTKH+2,X
CMP ESTKH+1,X ; FIXUP >= BYTECODE?
@ -763,7 +780,7 @@ asm reloc(modfix, modofst, bytecode, rld)#3
+ STA (DST),Y ; *ADDR=FIXUP
DEY
LDA TMPL
STA (DST),Y
FIX8 STA (DST),Y
LDA SRCL ; NEXT ENTRY
; CLC
ADC #$04

View File

@ -742,25 +742,42 @@ asm reloc(modfix, modofst, bytecode, rld)#3
LDY #$00
- LDA (SRC),Y
BEQ RLDEX ; END OF RLD
PHA
INY
LDA (SRC),Y
INY
CLC
ADC ESTKL+3,X ; ADDR=ENTRY=>1+MODFIX
STA DSTL
INY
LDA (SRC),Y
ADC ESTKH+3,X
STA DSTH
PLA
LDY #$00
LDA (SRC),Y
AND #$10 ; EXTERN REF - EXIT
BNE RLDEX
TAY ; FIXUP=*ADDR+MODOFST
LDA (SRC),Y
BMI FIX16
AND #$40
BNE FIXMSB
FIXLSB LDA (DST),Y
CLC
ADC ESTKL+2,X
CLC
BCC FIX8
FIXMSB LDY #$03
LDA (SRC),Y ; FIXUPH=(ENTRY->3+MODOFSTL)+(^ADDR+MODOFSTH)
CLC
ADC ESTKL+2,X
LDY #$00
LDA (DST),Y
INY
ADC ESTKH+2,X
CLC
BCC FIX8
FIX16 LDA (DST),Y ; FIXUP=*ADDR+MODOFST
CLC
ADC ESTKL+2,X
STA TMPL
INY
LDA (DST),Y
ADC ESTKH+2,X
CMP ESTKH+1,X ; FIXUP >= BYTECODE?
@ -774,7 +791,7 @@ asm reloc(modfix, modofst, bytecode, rld)#3
+ STA (DST),Y ; *ADDR=FIXUP
DEY
LDA TMPL
STA (DST),Y
FIX8 STA (DST),Y
LDA SRCL ; NEXT ENTRY
; CLC
ADC #$04