diff --git a/Makefile b/Makefile index eb58380a5..ae8c8aa92 100644 --- a/Makefile +++ b/Makefile @@ -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 diff --git a/ld/pd.ld b/ld/pd.ld index 5d064be82..97926a0a0 100644 --- a/ld/pd.ld +++ b/ld/pd.ld @@ -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 diff --git a/src/boot/boot.c b/src/boot/boot.c index 17e99d231..c7431b65a 100644 --- a/src/boot/boot.c +++ b/src/boot/boot.c @@ -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 diff --git a/src/game/game_16e810.c b/src/game/game_16e810.c index ca1f3b4b9..fe1c61010 100644 --- a/src/game/game_16e810.c +++ b/src/game/game_16e810.c @@ -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 diff --git a/src/lib/lib_070d0.c b/src/lib/lib_070d0.c index 0bd171359..a50dfd880 100644 --- a/src/lib/lib_070d0.c +++ b/src/lib/lib_070d0.c @@ -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) diff --git a/src/lib/lib_0d520.c b/src/lib/lib_0d520.c index b2260b5ea..0330bcf0e 100644 --- a/src/lib/lib_0d520.c +++ b/src/lib/lib_0d520.c @@ -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 diff --git a/src/lib/lib_0e9d0.c b/src/lib/lib_0e9d0.c index 1c1c52b82..44d349676 100644 --- a/src/lib/lib_0e9d0.c +++ b/src/lib/lib_0e9d0.c @@ -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 diff --git a/tools/extract b/tools/extract index c931827ab..991bd614f 100755 --- a/tools/extract +++ b/tools/extract @@ -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, ], diff --git a/tools/packrom b/tools/packrom index fc25b551f..7fccaab13 100755 --- a/tools/packrom +++ b/tools/packrom @@ -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)