Register | Login | |||||
Main
| Memberlist
| Active users
| Calendar
| Chat
| Online users Ranks | FAQ | ACS | Stats | Color Chart | Search | Photo album |
| |
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: 6430 days Last view: 6430 days |
| ||
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: 6506 days Last view: 6436 days |
| ||
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: 6430 days Last view: 6430 days |
| ||
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: 6506 days Last view: 6436 days |
| ||
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: 6430 days Last view: 6430 days |
| ||
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: 6648 days Last view: 6648 days |
| ||
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: 6430 days Last view: 6430 days |
| ||
Originally posted by interdpthVBA SDL does. |
|||
labmaster Red Paragoomba Since: 11-18-05 From: Away for exams, back mid-December. Last post: 6506 days Last view: 6436 days |
| ||
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 ? 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 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 exp 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: 6522 days Last view: 6443 days |
| ||
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 | | |