Allow LOAD FRAGMENT (#1552)

This was implemented in #736 but removed after discussion in #869.

Fixes #1537
This commit is contained in:
Sylvie
2024-10-24 19:45:44 -04:00
committed by GitHub
parent 0d3980d039
commit 5efd303b7f
24 changed files with 170 additions and 12 deletions

View File

@@ -0,0 +1,12 @@
SECTION "main", ROM0
LOAD FRAGMENT "test", SRAM
ENDL
; The RPN patch for 'jr Label' in section "alt" refers to section "test",
; but the object file puts section "test" after section "alt".
; This case needs to be handled when identifying patches' PC sections.
SECTION "alt", ROM0
LOAD FRAGMENT "test", SRAM
jr Label
Label:
ENDL

View File

Binary file not shown.

View File

@@ -0,0 +1,9 @@
SECTION "Test", ROM0[0]
AA: db 1
LOAD FRAGMENT "RAM section", WRAM0[$c000]
BB: db 2
ENDL
CC: db 3
LOAD FRAGMENT "RAM section", WRAM0
DD: db 4
ENDL

View File

@@ -0,0 +1 @@


View File

@@ -0,0 +1,5 @@
; File generated by rgblink
00:0000 AA
00:0002 CC
00:c000 BB
00:c001 DD

View File

@@ -0,0 +1,4 @@
SECTION "main", ROM0
LOAD FRAGMENT "test", SRAM
db 0
ENDL

View File

@@ -0,0 +1,6 @@
SECTION "SECTION2", ROM0
LOAD FRAGMENT "test", SRAM
jr Label
Label:
dw Label
ENDL

Binary file not shown.

View File

@@ -0,0 +1,8 @@
SECTION FRAGMENT "rom", ROM0
Part1::
LOAD FRAGMENT "ram", WRAM0
wPart1::
jr wPart1
jr wPart3
ENDL
Part1End::

View File

@@ -0,0 +1,4 @@
SECTION FRAGMENT "rom", ROM0
Part2::
db "Hello world!"
Part2End::

View File

@@ -0,0 +1,8 @@
SECTION FRAGMENT "rom", ROM0
Part3::
LOAD FRAGMENT "ram", WRAM0
wPart3::
jr wPart1
jr wPart3
ENDL
Part3End::

Binary file not shown.

View File

@@ -0,0 +1,24 @@
SUMMARY:
ROM0: 20 bytes used / 16364 free
WRAM0: 8 bytes used / 4088 free
ROM0 bank #0:
SECTION: $0000-$0013 ($0014 bytes) ["rom"]
$0000 = Part1
$0004 = Part1End
; Next fragment
$0010 = Part3
$0014 = Part3End
; Next fragment
$0004 = Part2
$0010 = Part2End
EMPTY: $0014-$3fff ($3fec bytes)
TOTAL EMPTY: $3fec bytes
WRAM0 bank #0:
SECTION: $c000-$c007 ($0008 bytes) ["ram"]
$c000 = wPart1
; Next fragment
$c004 = wPart3
EMPTY: $c008-$cfff ($0ff8 bytes)
TOTAL EMPTY: $0ff8 bytes

View File

@@ -0,0 +1,9 @@
; File generated by rgblink
00:0000 Part1
00:0004 Part1End
00:0004 Part2
00:0010 Part3
00:0010 Part2End
00:0014 Part3End
00:c000 wPart1
00:c004 wPart3

View File

@@ -0,0 +1,4 @@
SECTION FRAGMENT "output", ROM0
LOAD FRAGMENT "loaded", SRAM
ds 128
ENDL

View File

@@ -0,0 +1,6 @@
SECTION FRAGMENT "output", ROM0
LOAD FRAGMENT "loaded", SRAM
label:
jr nz, label2
label2:
ENDL

Binary file not shown.

View File

@@ -172,6 +172,36 @@ rgblinkQuiet -o "$gbtemp2" "$outtemp"
tryCmp "$gbtemp" "$gbtemp2"
evaluateTest
test="load-fragment/base"
startTest
"$RGBASM" -o "$otemp" "$test"/a.asm
continueTest
rgblinkQuiet -o "$gbtemp" -n "$outtemp" "$otemp"
tryCmpRom "$test"/ref.out.bin
tryDiff "$test"/ref.out.sym "$outtemp"
evaluateTest
test="load-fragment/multiple-objects"
startTest
"$RGBASM" -o "$otemp" "$test"/a.asm
"$RGBASM" -o "$gbtemp2" "$test"/b.asm
continueTest
rgblinkQuiet -o "$gbtemp" "$otemp" "$gbtemp2"
tryCmpRom "$test"/ref.out.bin
evaluateTest
test="load-fragment/section-fragment"
startTest
"$RGBASM" -o "$otemp" "$test"/a.asm
"$RGBASM" -o "$outtemp" "$test"/b.asm
"$RGBASM" -o "$outtemp2" "$test"/c.asm
continueTest
rgblinkQuiet -o "$gbtemp" -m "$outtemp3" -n "$gbtemp2" "$otemp" "$outtemp" "$outtemp2"
tryCmpRom "$test"/ref.out.bin
tryDiff "$test"/ref.out.map "$outtemp3"
tryDiff "$test"/ref.out.sym "$gbtemp2"
evaluateTest
test="map-file"
startTest
"$RGBASM" -o "$otemp" "$test"/a.asm
@@ -257,6 +287,15 @@ rgblinkQuiet -o "$gbtemp" "$otemp" "$gbtemp2"
tryCmpRom "$test"/ref.out.bin
evaluateTest
test="section-fragment/jr-offset-load"
startTest
"$RGBASM" -o "$otemp" "$test"/a.asm
"$RGBASM" -o "$gbtemp2" "$test"/b.asm
continueTest
rgblinkQuiet -o "$gbtemp" "$otemp" "$gbtemp2"
tryCmpRom "$test"/ref.out.bin
evaluateTest
test="section-normal/same-name"
startTest
"$RGBASM" -o "$otemp" "$test"/a.asm