Split fonts segment into one per font and and replace some segment pointers with linker variables

This commit is contained in:
Ryan Dwyer 2020-08-26 17:24:06 +10:00
parent 23b6bd2643
commit e050353016
9 changed files with 99 additions and 54 deletions

View File

@ -118,7 +118,16 @@ SEGMENT_O_FILES := \
$(B_DIR)/accessingpak.o \
$(B_DIR)/animations.o \
$(B_DIR)/copyright.o \
$(B_DIR)/fonts.o \
$(B_DIR)/font0.o \
$(B_DIR)/font1.o \
$(B_DIR)/font2.o \
$(B_DIR)/font3.o \
$(B_DIR)/font4.o \
$(B_DIR)/font5.o \
$(B_DIR)/font6.o \
$(B_DIR)/font7.o \
$(B_DIR)/font8.o \
$(B_DIR)/font9.o \
$(B_DIR)/romheader.o \
$(B_DIR)/rspboot.o \
$(B_DIR)/seq.ctl.o \
@ -198,7 +207,7 @@ $(B_DIR)/segments/%.bin: $(B_DIR)/stage2.bin
$(B_DIR)/animations.o: $(E_DIR)/segments/animations.bin
TOOLCHAIN=$(TOOLCHAIN) ROMID=$(ROMID) tools/mkrawobject $< $@
$(B_DIR)/fonts.o: $(E_DIR)/segments/fonts.bin
$(B_DIR)/font%.o: $(E_DIR)/segments/font%.bin
TOOLCHAIN=$(TOOLCHAIN) ROMID=$(ROMID) tools/mkrawobject $< $@
$(B_DIR)/rspboot.o: $(E_DIR)/segments/rspboot.bin

View File

@ -36,6 +36,13 @@
} \
END_SEG(mpstrings##lang)
#define FONT(index) \
BEGIN_SEG(font##index) \
{ \
build/ROMID/font##index.o (.data); \
} \
END_SEG(font##index)
/******************************************************************************
* ROM Allocations
* ----------------------------------------------------------------------------
@ -187,6 +194,8 @@ SECTIONS
}
END_SEG(data)
_datazipSegmentRomEnd = _datazipSegmentRomStart + ROMALLOCATION_DATA;
_rspMicrocodeStart = _dataSegmentStart;
_rspMicrocodeStartPlusOne = _rspMicrocodeStart + 1;
_rspMicrocodeEnd = _rspMicrocodeStart + 0x1000;
@ -347,11 +356,16 @@ SECTIONS
* -------------------------------------------------------------------------
*/
BEGIN_SEG(fonts)
{
build/ROMID/fonts.o (.data);
}
END_SEG(fonts)
FONT(0)
FONT(1)
FONT(2)
FONT(3)
FONT(4)
FONT(5)
FONT(6)
FONT(7)
FONT(8)
FONT(9)
/***************************************************************************
* sfxctl

View File

@ -44,7 +44,7 @@
GLOBAL_ASM(
glabel func00001000
/* 1000: 3c088009 */ lui $t0,%hi(var8008ae20)
/* 1000: 3c088009 */ lui $t0,%hi(var8008ae20)
/* 1004: 3c090002 */ lui $t1,0x2
/* 1008: 2508ae20 */ addiu $t0,$t0,%lo(var8008ae20)
/* 100c: 352923a0 */ ori $t1,$t1,0x23a0
@ -588,14 +588,14 @@ glabel func000016cc
/* 1714: ac590000 */ sw $t9,0x0($v0)
/* 1718: ad5950b8 */ sw $t9,0x50b8($t2)
.L0000171c:
/* 171c: 3c040004 */ lui $a0,0x4
/* 1720: 3c0b0005 */ lui $t3,0x5
/* 1724: 3c0c0005 */ lui $t4,0x5
/* 1728: 3c0d0005 */ lui $t5,0x5
/* 172c: 25ade850 */ addiu $t5,$t5,-6064
/* 1730: 258cfc40 */ addiu $t4,$t4,-960
/* 1734: 256be850 */ addiu $t3,$t3,-6064
/* 1738: 24849850 */ addiu $a0,$a0,-26544
/* 171c: 3c040004 */ lui $a0,%hi(_datazipSegmentRomStart)
/* 1720: 3c0b0005 */ lui $t3,%hi(_datazipSegmentRomEnd)
/* 1724: 3c0c0005 */ lui $t4,%hi(_inflateSegmentRomEnd)
/* 1728: 3c0d0005 */ lui $t5,%hi(_inflateSegmentRomStart)
/* 172c: 25ade850 */ addiu $t5,$t5,%lo(_inflateSegmentRomStart)
/* 1730: 258cfc40 */ addiu $t4,$t4,%lo(_inflateSegmentRomEnd)
/* 1734: 256be850 */ addiu $t3,$t3,%lo(_datazipSegmentRomEnd)
/* 1738: 24849850 */ addiu $a0,$a0,%lo(_datazipSegmentRomStart)
/* 173c: 01644023 */ subu $t0,$t3,$a0
/* 1740: 018d7023 */ subu $t6,$t4,$t5
/* 1744: 010e1821 */ addu $v1,$t0,$t6

View File

@ -5441,8 +5441,8 @@ glabel func0f173010
/* f1730f0: 030f3023 */ subu $a2,$t8,$t7
/* f1730f4: 24c6001f */ addiu $a2,$a2,0x1f
/* f1730f8: 2401fff8 */ addiu $at,$zero,-8
/* f1730fc: 3c0a01d6 */ lui $t2,0x1d6
/* f173100: 254a5f40 */ addiu $t2,$t2,0x5f40
/* f1730fc: 3c0a01d6 */ lui $t2,%hi(_texturesSegmentRomStart)
/* f173100: 254a5f40 */ addiu $t2,$t2,%lo(_texturesSegmentRomStart)
/* f173104: 01e1c824 */ and $t9,$t7,$at
/* f173108: 00065902 */ srl $t3,$a2,0x4
/* f17310c: 000b3100 */ sll $a2,$t3,0x4

View File

@ -57,7 +57,7 @@ glabel func000070d0
/* 7160: 25c60002 */ addiu $a2,$t6,0x2
/* 7164: 3c158009 */ lui $s5,%hi(var8008ae30)
/* 7168: 25d60001 */ addiu $s6,$t6,0x1
/* 716c: 3c120005 */ lui $s2,0x5
/* 716c: 3c120005 */ lui $s2,%hi(_gamezipSegmentRomStart)
/* 7170: 26b5ae30 */ addiu $s5,$s5,%lo(var8008ae30)
/* 7174: 05e10003 */ bgez $t7,.L00007184
/* 7178: 000fc303 */ sra $t8,$t7,0xc
@ -84,7 +84,7 @@ glabel func000070d0
/* 71c8: 25a6000f */ addiu $a2,$t5,0xf
/* 71cc: 03212024 */ and $a0,$t9,$at
/* 71d0: 34ce000f */ ori $t6,$a2,0xf
/* 71d4: 2652fc40 */ addiu $s2,$s2,-960
/* 71d4: 2652fc40 */ addiu $s2,$s2,%lo(_gamezipSegmentRomStart)
/* 71d8: 02c0a025 */ or $s4,$s6,$zero
/* 71dc: aea40000 */ sw $a0,0x0($s5)
/* 71e0: 02402825 */ or $a1,$s2,$zero
@ -187,10 +187,10 @@ glabel func000070d0
/* 7344: 240bfff0 */ addiu $t3,$zero,-16
/* 7348: 026c6823 */ subu $t5,$s3,$t4
/* 734c: 25c6000f */ addiu $a2,$t6,0xf
/* 7350: 3c120005 */ lui $s2,0x5
/* 7350: 3c120005 */ lui $s2,%hi(_gamezipSegmentRomStart)
/* 7354: 3c018009 */ lui $at,%hi(var80090b00)
/* 7358: 27160001 */ addiu $s6,$t8,0x1
/* 735c: 2652fc40 */ addiu $s2,$s2,-960
/* 735c: 2652fc40 */ addiu $s2,$s2,%lo(_gamezipSegmentRomStart)
/* 7360: 34cf000f */ ori $t7,$a2,0xf
/* 7364: 01aba824 */ and $s5,$t5,$t3
/* 7368: ac330b00 */ sw $s3,%lo(var80090b00)($at)

View File

@ -332,11 +332,11 @@ glabel mainInit
/* d748: 3c018000 */ lui $at,0x8000
/* d74c: 00418025 */ or $s0,$v0,$at
/* d750: 2610003f */ addiu $s0,$s0,0x3f
/* d754: 3c030200 */ lui $v1,0x200
/* d754: 3c030200 */ lui $v1,%hi(_accessingpakSegmentRomStart)
/* d758: 360e003f */ ori $t6,$s0,0x3f
/* d75c: 3c0b0200 */ lui $t3,0x200
/* d760: 2465f550 */ addiu $a1,$v1,-2736
/* d764: 256bfe00 */ addiu $t3,$t3,-512
/* d75c: 3c0b0200 */ lui $t3,%hi(_accessingpakSegmentRomEnd)
/* d760: 2465f550 */ addiu $a1,$v1,%lo(_accessingpakSegmentRomStart)
/* d764: 256bfe00 */ addiu $t3,$t3,%lo(_accessingpakSegmentRomEnd)
/* d768: 39c4003f */ xori $a0,$t6,0x3f
/* d76c: 00808025 */ or $s0,$a0,$zero
/* d770: 0c003504 */ jal func0000d410
@ -347,11 +347,11 @@ glabel mainInit
/* d780: 3c018000 */ lui $at,0x8000
/* d784: 00418025 */ or $s0,$v0,$at
/* d788: 2610003f */ addiu $s0,$s0,0x3f
/* d78c: 3c030200 */ lui $v1,0x200
/* d78c: 3c030200 */ lui $v1,%hi(_copyrightSegmentRomStart)
/* d790: 3618003f */ ori $t8,$s0,0x3f
/* d794: 3c0f0200 */ lui $t7,0x200
/* d798: 2465ea20 */ addiu $a1,$v1,-5600
/* d79c: 25eff550 */ addiu $t7,$t7,-2736
/* d794: 3c0f0200 */ lui $t7,%hi(_copyrightSegmentRomEnd)
/* d798: 2465ea20 */ addiu $a1,$v1,%lo(_copyrightSegmentRomStart)
/* d79c: 25eff550 */ addiu $t7,$t7,%lo(_copyrightSegmentRomEnd)
/* d7a0: 3b04003f */ xori $a0,$t8,0x3f
/* d7a4: 00808025 */ or $s0,$a0,$zero
/* d7a8: 0c003504 */ jal func0000d410

View File

@ -171,10 +171,10 @@ glabel func0000eb2c
/* eb40: 2652006b */ addiu $s2,$s2,0x6b
/* eb44: 3c118009 */ lui $s1,%hi(var80094ea4)
/* eb48: 364e000f */ ori $t6,$s2,0xf
/* eb4c: 3c100081 */ lui $s0,0x81
/* eb4c: 3c100081 */ lui $s0,%hi(_sfxctlSegmentRomStart)
/* eb50: 26314ea4 */ addiu $s1,$s1,%lo(var80094ea4)
/* eb54: afbf0034 */ sw $ra,0x34($sp)
/* eb58: 2610a250 */ addiu $s0,$s0,-23984
/* eb58: 2610a250 */ addiu $s0,$s0,%lo(_sfxctlSegmentRomStart)
/* eb5c: 39c4000f */ xori $a0,$t6,0xf
/* eb60: afb40030 */ sw $s4,0x30($sp)
/* eb64: afb3002c */ sw $s3,0x2c($sp)
@ -327,12 +327,12 @@ glabel func0000ed68
/* ed70: afb1001c */ sw $s1,0x1c($sp)
/* ed74: 03a08825 */ or $s1,$sp,$zero
/* ed78: 03a09025 */ or $s2,$sp,$zero
/* ed7c: 3c0e0081 */ lui $t6,0x81
/* ed7c: 3c0e0081 */ lui $t6,%hi(_sfxctlSegmentRomStart)
/* ed80: 265200af */ addiu $s2,$s2,0xaf
/* ed84: 2631005f */ addiu $s1,$s1,0x5f
/* ed88: afb40028 */ sw $s4,0x28($sp)
/* ed8c: afb30024 */ sw $s3,0x24($sp)
/* ed90: 25cea250 */ addiu $t6,$t6,-23984
/* ed90: 25cea250 */ addiu $t6,$t6,%lo(_sfxctlSegmentRomStart)
/* ed94: 3639000f */ ori $t9,$s1,0xf
/* ed98: 364f000f */ ori $t7,$s2,0xf
/* ed9c: afbf002c */ sw $ra,0x2c($sp)
@ -406,12 +406,12 @@ glabel func0000ee88
/* ee90: afb1001c */ sw $s1,0x1c($sp)
/* ee94: 03a08825 */ or $s1,$sp,$zero
/* ee98: 03a09025 */ or $s2,$sp,$zero
/* ee9c: 3c0e0081 */ lui $t6,0x81
/* ee9c: 3c0e0081 */ lui $t6,%hi(_sfxctlSegmentRomStart)
/* eea0: 265200af */ addiu $s2,$s2,0xaf
/* eea4: 2631005f */ addiu $s1,$s1,0x5f
/* eea8: afb40028 */ sw $s4,0x28($sp)
/* eeac: afb30024 */ sw $s3,0x24($sp)
/* eeb0: 25cea250 */ addiu $t6,$t6,-23984
/* eeb0: 25cea250 */ addiu $t6,$t6,%lo(_sfxctlSegmentRomStart)
/* eeb4: 3639000f */ ori $t9,$s1,0xf
/* eeb8: 364f000f */ ori $t7,$s2,0xf
/* eebc: afbf002c */ sw $ra,0x2c($sp)
@ -485,12 +485,12 @@ glabel func0000efa8
/* efb0: afb1001c */ sw $s1,0x1c($sp)
/* efb4: 03a08825 */ or $s1,$sp,$zero
/* efb8: 03a09025 */ or $s2,$sp,$zero
/* efbc: 3c0e0081 */ lui $t6,0x81
/* efbc: 3c0e0081 */ lui $t6,%hi(_sfxctlSegmentRomStart)
/* efc0: 265201af */ addiu $s2,$s2,0x1af
/* efc4: 2631005f */ addiu $s1,$s1,0x5f
/* efc8: afb40028 */ sw $s4,0x28($sp)
/* efcc: afb30024 */ sw $s3,0x24($sp)
/* efd0: 25cea250 */ addiu $t6,$t6,-23984
/* efd0: 25cea250 */ addiu $t6,$t6,%lo(_sfxctlSegmentRomStart)
/* efd4: 3639000f */ ori $t9,$s1,0xf
/* efd8: 364f000f */ ori $t7,$s2,0xf
/* efdc: afbf002c */ sw $ra,0x2c($sp)
@ -578,10 +578,10 @@ glabel func0000f0d4
.L0000f104:
/* f104: 03a09025 */ or $s2,$sp,$zero
/* f108: 03a08825 */ or $s1,$sp,$zero
/* f10c: 3c0e0081 */ lui $t6,0x81
/* f10c: 3c0e0081 */ lui $t6,%hi(_sfxctlSegmentRomStart)
/* f110: 2631005f */ addiu $s1,$s1,0x5f
/* f114: 265200af */ addiu $s2,$s2,0xaf
/* f118: 25cea250 */ addiu $t6,$t6,-23984
/* f118: 25cea250 */ addiu $t6,$t6,%lo(_sfxctlSegmentRomStart)
/* f11c: 364f000f */ ori $t7,$s2,0xf
/* f120: 3639000f */ ori $t9,$s1,0xf
/* f124: 028ea021 */ addu $s4,$s4,$t6
@ -663,12 +663,12 @@ glabel func0000f228
/* f230: afb1001c */ sw $s1,0x1c($sp)
/* f234: 03a08825 */ or $s1,$sp,$zero
/* f238: 03a09025 */ or $s2,$sp,$zero
/* f23c: 3c0e0081 */ lui $t6,0x81
/* f23c: 3c0e0081 */ lui $t6,%hi(_sfxctlSegmentRomStart)
/* f240: 265200b7 */ addiu $s2,$s2,0xb7
/* f244: 26310067 */ addiu $s1,$s1,0x67
/* f248: afb40028 */ sw $s4,0x28($sp)
/* f24c: afb30024 */ sw $s3,0x24($sp)
/* f250: 25cea250 */ addiu $t6,$t6,-23984
/* f250: 25cea250 */ addiu $t6,$t6,%lo(_sfxctlSegmentRomStart)
/* f254: 3639000f */ ori $t9,$s1,0xf
/* f258: 364f000f */ ori $t7,$s2,0xf
/* f25c: afbf002c */ sw $ra,0x2c($sp)
@ -719,8 +719,8 @@ glabel func0000f228
/* f304: 2450046c */ addiu $s0,$v0,0x46c
/* f308: ae010000 */ sw $at,0x0($s0)
/* f30c: 8e390004 */ lw $t9,0x4($s1)
/* f310: 3c090084 */ lui $t1,0x84
/* f314: 25299dd0 */ addiu $t1,$t1,-25136
/* f310: 3c090084 */ lui $t1,%hi(_sfxtblSegmentRomStart)
/* f314: 25299dd0 */ addiu $t1,$t1,%lo(_sfxtblSegmentRomStart)
/* f318: ae190004 */ sw $t9,0x4($s0)
/* f31c: 8e210008 */ lw $at,0x8($s1)
/* f320: ae010008 */ sw $at,0x8($s0)
@ -1176,14 +1176,14 @@ glabel func0000f804
/* f95c: 00002825 */ or $a1,$zero,$zero
/* f960: 0c00bec5 */ jal func0002fb14
/* f964: 24070001 */ addiu $a3,$zero,0x1
/* f968: 3c0500d0 */ lui $a1,0xd0
/* f968: 3c0500d0 */ lui $a1,%hi(_seqctlSegmentRomStart)
/* f96c: 00408825 */ or $s1,$v0,$zero
/* f970: 24a5bf30 */ addiu $a1,$a1,-16592
/* f970: 24a5bf30 */ addiu $a1,$a1,%lo(_seqctlSegmentRomStart)
/* f974: 00402025 */ or $a0,$v0,$zero
/* f978: 0c003504 */ jal func0000d410
/* f97c: 02003025 */ or $a2,$s0,$zero
/* f980: 3c0500d0 */ lui $a1,0xd0
/* f984: 24a55f90 */ addiu $a1,$a1,0x5f90
/* f980: 3c0500d0 */ lui $a1,%hi(_seqtblSegmentRomStart)
/* f984: 24a55f90 */ addiu $a1,$a1,%lo(_seqtblSegmentRomStart)
/* f988: 0c00ddc1 */ jal func00037704
/* f98c: 02202025 */ or $a0,$s1,$zero
/* f990: 8e2b0004 */ lw $t3,0x4($s1)
@ -1198,9 +1198,9 @@ glabel func0000f804
/* f9b4: 0c00bec5 */ jal func0002fb14
/* f9b8: ac2b5204 */ sw $t3,%lo(var80095204)($at)
/* f9bc: 3c108009 */ lui $s0,%hi(var80095208)
/* f9c0: 3c1100e8 */ lui $s1,0xe8
/* f9c0: 3c1100e8 */ lui $s1,%hi(_sequencesSegmentRomStart)
/* f9c4: 26105208 */ addiu $s0,$s0,%lo(var80095208)
/* f9c8: 26312000 */ addiu $s1,$s1,0x2000
/* f9c8: 26312000 */ addiu $s1,$s1,%lo(_sequencesSegmentRomStart)
/* f9cc: ae020000 */ sw $v0,0x0($s0)
/* f9d0: 02202825 */ or $a1,$s1,$zero
/* f9d4: 00402025 */ or $a0,$v0,$zero

View File

@ -210,10 +210,22 @@ class Extractor:
addr = self.val('firingrange')
self.write('segments/firingrange.bin', self.rom[addr:addr+0x1550])
def extract_font(self, startvar, endvar):
start = self.val(startvar)
end = self.val(endvar)
self.write('segments/%s.bin' % startvar, self.rom[start:end])
def extract_fonts(self):
start = self.val('unknown1') + 0xb50 + 0x65d0
end = self.val('sfxctl')
self.write('segments/fonts.bin', self.rom[start:end])
self.extract_font('font0', 'font1')
self.extract_font('font1', 'font2')
self.extract_font('font2', 'font3')
self.extract_font('font3', 'font4')
self.extract_font('font4', 'font5')
self.extract_font('font5', 'font6')
self.extract_font('font6', 'font7')
self.extract_font('font7', 'font8')
self.extract_font('font8', 'font9')
self.extract_font('font9', 'sfxctl')
def extract_rspboot(self):
self.write('segments/rspboot.bin', self.rom[0x40:0x1000])
@ -286,6 +298,16 @@ class Extractor:
'mpconfigs': [0x785130, 0x7d0a40, 0x7d0a40, 0x7bc240, 0x7bc240, 0x7c00d0, ],
'firingrange': [0x79e410, 0x7e9d20, 0x7e9d20, 0x7d5520, 0x7d5520, 0x7d93b0, ],
'unknown1': [0x79f960, 0x7eb270, 0x7eb270, 0x7d6a70, 0x7d6a70, 0x7da900, ],
'font0': [0x7f2390, 0x7f2390, 0x7f2390, 0x7ddb90, 0x7ddb90, 0x7e1a20, ],
'font1': [0x7f4930, 0x7f4930, 0x7f4930, 0x7e0130, 0x7e0130, 0x7e3fc0, ],
'font2': [0x7f7860, 0x7f7860, 0x7f7860, 0x7e3060, 0x7e3060, 0x7e6ef0, ],
'font3': [0x7f8b20, 0x7f8b20, 0x7f8b20, 0x7e4320, 0x7e4320, 0x7e81b0, ],
'font4': [0x7f9d30, 0x7f9d30, 0x7f9d30, 0x7e5530, 0x7e5530, 0x7e93b0, ],
'font5': [0x7fbfb0, 0x7fbfb0, 0x7fbfb0, 0x7e87b0, 0x7e87b0, 0x7ec640, ],
'font6': [0x7fdd80, 0x7fdd80, 0x7fdd80, 0x7eae20, 0x7eae20, 0x7eecb0, ],
'font7': [0x8008e0, 0x8008e0, 0x8008e0, 0x7eee70, 0x7eee70, 0x7f2d00, ],
'font8': [0x803da0, 0x803da0, 0x803da0, 0x7f2330, 0x7f2330, 0x7f61c0, ],
'font9': [0x806ac0, 0x806ac0, 0x806ac0, 0x7f5050, 0x7f5050, 0x7f8ee0, ],
'sfxctl': [0x7be940, 0x80a250, 0x80a250, 0x7f87e0, 0x7f87e0, 0x7fc670, ],
'textures': [0x1d12fe0, 0x1d65f40, 0x1d65f40, 0x1d5bb50, 0x1d5ca20, 0x1d61f90, ],
'copyright': [0x1fabac0, 0x1ffea20, 0x1ffea20, 0x1ff4630, 0x1ff5500, 0x1ffd6b0, ],

View File

@ -136,7 +136,7 @@ def main():
pack_data(fd, locations)
pack_game(fd, locations)
if os.environ['MATCHING']:
if os.environ['MATCHING'] == '1':
write_garbage(fd, locations)
fill_tail(fd)