(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-06-24 03:28 AM
0 users currently in ROM Hacking.
Acmlm's Board - I3 Archive - ROM Hacking - GBA romhacking info New poll | |
Add to favorites | Next newer thread | Next older thread
User Post
interdpth

Mole
MZM rapist


 





Since: 11-18-05

Last post: 6286 days
Last view: 6286 days
Posted on 02-20-06 11:39 PM Link | Quote
Ok well i'm trying to find out where the games data starts at like the agbmain()

I heard somewhere in the header points to it but I can't find any GBA pointers in it

So does the game start after the header? or what? Any info would be helpful. As i'm trying to find out how the game loads some tiles based on the tileset number so any helpful on how to find the start of the game data would be great!
labmaster

Red Paragoomba


 





Since: 11-18-05
From: Away for exams, back mid-December.

Last post: 6362 days
Last view: 6291 days
Posted on 02-20-06 11:56 PM Link | Quote
The first instruction that is executed is the ARM opcode at $08000000 (which is 0x0 in the ROM). This is typically a branch instruction, which skips over the header.

GBATEK has a lot of useful information on both the GBA and NDS - it's a very good reference doc to have around.

As for trying to find how a game loads tiles - the first thing I'd do is use the devel version of VBA to do a SWI log and see if anything is copying/decompressing to the VRAM block that you'd interested in. If I remember correctly there's some detailed instructions in a thread in the old board/archive.

Failing that, you'd need to get a debugger with VRAM breakpoints - if it comes to that and there aren't any others out there, I'll see if I can get around to uploading an unreleased version of VBA-H-SDL with experimental VRAM bkpt support (a couple of people out there have it, but I'm not sure if it's being distributed on the web or not).
interdpth

Mole
MZM rapist


 





Since: 11-18-05

Last post: 6286 days
Last view: 6286 days
Posted on 02-21-06 12:00 AM Link | Quote
Well I've cracked the games level stuff nearly completely just missing 2 bytes in level headers.
The game handles tilesets weirdly

It has a Global tileset and a local

But The global is made up several tilesets which it grabs from the global table based on the number

Like the first byte in the header

09 tells it to load local tileset 09 from the Local table

But 09 also tells it to load a list of tiles from the global table

But I haven't found out where it the header directs the game to load what pointers from the global table. That's the only thing preventing me from releasing an editor.
labmaster

Red Paragoomba


 





Since: 11-18-05
From: Away for exams, back mid-December.

Last post: 6362 days
Last view: 6291 days
Posted on 02-21-06 12:22 AM Link | Quote
If you know whereabouts in the global table data is being pulled from a particular level, then you can just put a read breakpoint on that address. If you don't know where in the global table it is, but have the general location of the general table, you can try putting a breakpoint over (what you think is) the entire range.

If you don't actually know where the tiles are coming from, then it's either VRAM breakpoints, or dumping a trace that contains the loading code and looking for something interesting.
interdpth

Mole
MZM rapist


 





Since: 11-18-05

Last post: 6286 days
Last view: 6286 days
Posted on 02-21-06 12:28 AM Link | Quote
I sent you a PM, you seem to know alot about the GBA would you mind answering it, it'd be easier to do in first person but back to the topic.

So I just put a breakpoint on the tables offset? Mind telling me an Emulator that'd do that? VBA dev doesn't
dcahrakos

490


 





Since: 11-17-05

Last post: 6503 days
Last view: 6503 days
Posted on 02-22-06 03:08 PM Link | Quote
I found this emu, it supports breakpoints or so it says.

http://agd.emuunlim.com/
Kyoufu Kawa
Intends to keep Rom Hacking in one piece until the end








Since: 11-18-05
From: Catgirl Central Station

Last post: 6286 days
Last view: 6286 days
Posted on 02-23-06 09:11 AM Link | Quote
Originally posted by interdpth

VBA dev doesn't
VBA SDL does.
labmaster

Red Paragoomba


 





Since: 11-18-05
From: Away for exams, back mid-December.

Last post: 6362 days
Last view: 6291 days
Posted on 02-25-06 12:25 AM Link | Quote
http://metawire.org/~labmaster/files/sdlkl.zip

^^ My private version of VBA-SDL. It's not optimized, so don't bother using it for anything other than hacking.


? Shows this help information. Type ? for command help
adb Toggles Auto Don't Break
ba Adds an ARM breakpoint
bd Deletes a breakpoint
bl Lists breakpoints
bj Break on joypad read
bpr Break on read
bprc Clear break on read
bpw Break on write
bpwc Clear break on write
break Adds a breakpoint on the given function
bt Adds a THUMB breakpoint
c Continues execution
cba Adds a Conditional ARM breakpoint
cbt Adds a Conditional THUMB breakpoint
cow Select break on change or break on write
d Disassembles instructions
da Disassembles ARM instructions
db Don't break at the following address.
dbc Clear the Don't Break list.
dload Load raw data dump from file
dsave Dump raw data to file
dt Disassembles THUMB instructions
eb Modify memory location (byte)
eh Modify memory location (half-word)
er Modify register
ew Modify memory location (word)
h Shows this help information. Type h for command help
io Show I/O registers status
last Trigger the display of the last registers states
lf Log instructions to file
lfc Log instructions to file (doesn't dump register data
load Loads a Fx type savegame
locals Shows local variables
mb Shows memory contents (bytes)
mh Shows memory contents (half-words)
mw Shows memory contents (words)
n Executes the next instruction
print Print the value of a expression (if known)
q Quits the emulator
r Shows ARM registers
radix Sets the print radix
save Creates a Fx type savegame
symbols List symbols
verbose Change verbose setting
where Shows call chain


A couple of things may be broken - I haven't touched it for a very long time. bpw will accept VRAM addresses, and should process these correctly (tip: watch out for DMA writes, it catches these as well. If something doesn't look right, check that it's not a DMA write first). It also accepts SRAM addresses but this -does not work-. Just ignore that.

edit: some additional info about the conditional syntax - it sucks. This is basically how it works:


(address or register) (comparison operator) (address, register or immediate) [(size)]


addresses should be prefixed with '$' and are read as hexadecimal.
registers should be prefixed with 'R'.
immediates should not be prefixed.

valid comparison operators are:
==
!=
<>
<
>

size is for the size of comparison - i.e. specifies whether to read a byte, halfword, or word when loading values from a given address. use 'b', 'h' or 'w'.





(edited by labmaster on 02-24-06 11:35 PM)
(edited by labmaster on 02-24-06 11:36 PM)
Tauwasser

Red Goomba








Since: 11-19-05

Last post: 6378 days
Last view: 6298 days
Posted on 02-25-06 12:40 PM Link | Quote
Why don't you use VBA-H? That's VBA for hackers and as i recall it has many additional functions...

cYa,

Tauwasser
Add to favorites | Next newer thread | Next older thread
Acmlm's Board - I3 Archive - ROM Hacking - GBA romhacking info |


ABII

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

Page rendered in 0.017 seconds; used 390.15 kB (max 478.15 kB)