(Link to AcmlmWiki) Offline: thank ||bass
Register | Login
Views: 13,040,846
Main | Memberlist | Active users | Calendar | Chat | Online users
Ranks | FAQ | ACS | Stats | Color Chart | Search | Photo album
05-05-24 04:30 AM
0 users currently in ROM Hacking.
Acmlm's Board - I3 Archive - ROM Hacking - Compression broken, problems caused New poll | |
Add to favorites | Next newer thread | Next older thread
User Post
Gideon Zhi

Keese








Since: 12-05-05
From: ...behind you! Boo!

Last post: 6287 days
Last view: 6285 days
Posted on 04-06-06 03:04 AM Link | Quote
Okay, so I've hit a bit of a problem. I'm working on this game whose text originally was compressed. I broke the compression, preferring to store my data decompressed in-rom.

The problem is that each of the compressed strings stored the decompressed size with the string, PASCAL style. Now, the game's still expecting those bytes to be at the beginning of my strings, and it really doesn't like it when those values aren't there - or when the values that are there are much bigger than it's used to handling. Here's some example code...

From the original...
$81/F86E C2 20       REP #$20                A:F99A X:9821 Y:0000 P:eNvMxdizc

$81/F870 E6 23 INC $23 [$00:0023] A:F99A X:9821 Y:0000 P:eNvmxdizc
$81/F872 E6 23 INC $23 [$00:0023] A:F99A X:9821 Y:0000 P:eNvmxdizc
$81/F874 BD 00 00 LDA $0000,x[$B0:9821] A:F99A X:9821 Y:0000 P:eNvmxdizc
$81/F877 85 0E STA $0E [$00:000E] A:0021 X:9821 Y:0000 P:envmxdizc
$81/F879 E8 INX A:0021 X:9821 Y:0000 P:envmxdizc
$81/F87A E8 INX A:0021 X:9822 Y:0000 P:eNvmxdizc
$81/F87B 80 1E BRA $1E [$F89B] A:0021 X:9823 Y:0000 P:eNvmxdizc
$81/F89B E2 20 SEP #$20 A:0021 X:9823 Y:0000 P:eNvmxdizc
$81/F89D 64 0D STZ $0D [$00:000D] A:0021 X:9823 Y:0000 P:eNvMxdizc
$81/F89F A5 25 LDA $25 [$00:0025] A:0021 X:9823 Y:0000 P:eNvMxdizc
$81/F8A1 85 AE STA $AE [$00:00AE] A:00A1 X:9823 Y:0000 P:eNvMxdizc
$81/F8A3 A0 00 00 LDY #$0000 A:00A1 X:9823 Y:0000 P:eNvMxdizc
$81/F8A6 A9 FF LDA #$FF A:00A1 X:9823 Y:0000 P:envMxdiZc
$81/F8A8 85 07 STA $07 [$00:0007] A:00FF X:9823 Y:0000 P:eNvMxdizc
$81/F8AA BD 00 00 LDA $0000,x[$B0:9823] A:00FF X:9823 Y:0000 P:eNvMxdizc
$81/F8AD 85 06 STA $06 [$00:0006] A:003F X:9823 Y:0000 P:envMxdizc
$81/F8AF E8 INX A:003F X:9823 Y:0000 P:envMxdizc
$81/F8B0 06 06 ASL $06 [$00:0006] A:003F X:9824 Y:0000 P:eNvMxdizc
$81/F8B2 90 11 BCC $11 [$F8C5] A:003F X:9824 Y:0000 P:envMxdizc
$81/F8C5 BD 00 00 LDA $0000,x[$B0:9824] A:003F X:9824 Y:0000 P:envMxdizc
$81/F8C8 20 96 F9 JSR $F996 [$81:F996] A:000D X:9824 Y:0000 P:envMxdizc


From the new build, with the direct-from-ROM load in place...
$81/F86E C2 20       REP #$20                A:F99A X:B0A5 Y:0000 P:eNvMxdizc

$81/F870 E6 23 INC $23 [$00:0023] A:F99A X:B0A5 Y:0000 P:eNvmxdizc
$81/F872 E6 23 INC $23 [$00:0023] A:F99A X:B0A5 Y:0000 P:eNvmxdizc
$81/F874 BD 00 00 LDA $0000,x[$E8:B0A5] A:F99A X:B0A5 Y:0000 P:eNvmxdizc
$81/F877 85 0E STA $0E [$00:000E] A:47F4 X:B0A5 Y:0000 P:envmxdizc
$81/F879 E8 INX A:47F4 X:B0A5 Y:0000 P:envmxdizc
$81/F87A E8 INX A:47F4 X:B0A6 Y:0000 P:eNvmxdizc
$81/F87B 80 1E BRA $1E [$F89B] A:47F4 X:B0A7 Y:0000 P:eNvmxdizc
$81/F89B E2 20 SEP #$20 A:47F4 X:B0A7 Y:0000 P:eNvmxdizc
$81/F89D 64 0D STZ $0D [$00:000D] A:47F4 X:B0A7 Y:0000 P:eNvMxdizc
$81/F89F A5 25 LDA $25 [$00:0025] A:47F4 X:B0A7 Y:0000 P:eNvMxdizc
$81/F8A1 85 AE STA $AE [$00:00AE] A:47A1 X:B0A7 Y:0000 P:eNvMxdizc
$81/F8A3 A0 00 00 LDY #$0000 A:47A1 X:B0A7 Y:0000 P:eNvMxdizc
$81/F8A6 A9 FF LDA #$FF A:47A1 X:B0A7 Y:0000 P:envMxdiZc
$81/F8A8 85 07 STA $07 [$00:0007] A:47FF X:B0A7 Y:0000 P:eNvMxdizc
$81/F8AA BD 00 00 LDA $0000,x[$E8:B0A7] A:47FF X:B0A7 Y:0000 P:eNvMxdizc
$81/F8AD 85 06 STA $06 [$00:0006] A:4716 X:B0A7 Y:0000 P:envMxdizc
$81/F8AF E8 INX A:4716 X:B0A7 Y:0000 P:envMxdizc
$81/F8B0 06 06 ASL $06 [$00:0006] A:4716 X:B0A8 Y:0000 P:eNvMxdizc
$81/F8B2 90 11 BCC $11 [$F8C5] A:4716 X:B0A8 Y:0000 P:envMxdizc
$81/F8C5 BD 00 00 LDA $0000,x[$E8:B0A8] A:4716 X:B0A8 Y:0000 P:envMxdizc
$81/F8C8 20 96 F9 JSR $F996 [$81:F996] A:47D4 X:B0A8 Y:0000 P:eNvMxdizc


I'm sure you can see what the problem is. Those values control MVNs, and 0006 specifically causes a lot of loops. I've run a full-execution trace without squelching in geiger snes9x, and that BCC never fails to resolve with the new script in place. To compound on things, this code is used for other compression-related things as well, so breaking it to load an absolute doesn't work. (It did elsewhere, though.)

Any suggestions?


(edited by Gideon Zhi on 04-06-06 02:04 AM)
Add to favorites | Next newer thread | Next older thread
Acmlm's Board - I3 Archive - ROM Hacking - Compression broken, problems caused |


ABII

Acmlmboard 1.92.999, 9/17/2006
©2000-2006 Acmlm, Emuz, Blades, Xkeeper

Page rendered in 0.032 seconds; used 338.14 kB (max 419.46 kB)