Language…
8 users online: crm0622, Danik2343, Firstnamebutt,  Losoall, pnaha,  Segment1Zone2, tOaO, Zavok - Guests: 162 - Bots: 392
Users: 64,795 (2,381 active)
Latest user: mathew

Bowser64 - SM64 Memory Editor

  • Pages:
  • 1
  • 2



(Click to view full size)
-
Download Bowser64 Alpha 7.26
Changelog
Todo/ideas list
Script language plans
-

Bowser64 is a Super Mario 64 RAM editor designed to work with any emulator. Right now it features a memory editor tailored for object editing, and two all purpose memory editor windows used for data analysis/comparison and pointer tracking. You'll notice from the screenshot above that all of the data is very colorful for easier readability. The red background colors indicate changing data, the green text represents differences between the two memory windows when comparison mode is turned on, the blue text represents pointers, and the various back colors in the object editor are for data-typing and better readability (which is unfinished).

I've also incorporated a console with the following commands:
Code
segments  - show ram segments table
collision - show collision info
inj       - inject hex data from cmd line
injf      - inject hex file from /injf/
mwarp     - make an injf file that will move Mario
clear     - clear the console
(I ran an example of the 'injf' command in the screenshot above, where I inject a simple asm hack from the file seen in notepad++)

---------
To get started
Make sure SM64 is running in your emulator and then: File -> Open RAM...

^ You'll then see this window; click your emulator's process and then click "Open process". Bowser64 will then look for the emulator's virtual memory base so it can start hacking. A message box will pop up telling you the address of the virtual memory base it will use, click okay. You can then open the tools from the RAM menu.
--------
Many features still to come; be sure to check out the todo/ideas list for future plans !
I'm open to adding any ideas from the community so be sure to post them :D

This project is early alpha so you can expect some bugs, but if you do happen to find something that seems like a serious problem, you can let me know here.

(note: right now it takes a little while for it to find the vm base for pj64 and 1964 because that part's not optimized yet, it will find nemu's right away however)
This works in general with any N64 Game, right?
Originally posted by Mr. GreenThunder
This works in general with any N64 Game, right?



It will as soon as I add better optimization for VM basing. Right now it's just purposed for SM64. In the future I'll probably have it repurposed for all n64 games and have the sm64 stuff just be an add-on module or something.
Originally posted by shyguyhex
Originally posted by Mr. GreenThunder
This works in general with any N64 Game, right?



It will as soon as I add better optimization for VM basing. Right now it's just purposed for SM64. In the future I'll probably have it repurposed for all n64 games and have the sm64 stuff just be an add-on module or something.


Nice tool, you've made there. Currently I'm working on a MIPS R4300i Assembler. This + an assembler can be handy as well.

Also, to add to your "to-do" list, for patching I also suggest BPS. It's way better than PPF and really small.

Originally posted by Tarek701
Nice tool, you've made there. Currently I'm working on a MIPS R4300i Assembler. This + an assembler can be handy as well.

Also, to add to your "to-do" list, for patching I also suggest BPS. It's way better than PPF and really small.


Support for ASM patching/injection is definitely going to be added in the near future. I'm in the process of writing a script language that should encompass it.

I put together a little list of my ideas for the script language here
http://file.s.gp/syntax_example.txt

And as for your BPS idea, I'll see what I can do.

Also I happened to write an r4300i assembler a little while ago in javascript here http://file.s.gp/sgasm.php - feel free to grab any source/ideas from it if it helps :)
Originally posted by shyguyhex
Originally posted by Tarek701
Nice tool, you've made there. Currently I'm working on a MIPS R4300i Assembler. This + an assembler can be handy as well.

Also, to add to your "to-do" list, for patching I also suggest BPS. It's way better than PPF and really small.


Support for ASM patching/injection is definitely going to be added in the near future. I'm in the process of writing a script language that should encompass it.

I put together a little list of my ideas for the script language here
http://file.s.gp/syntax_example.txt

And as for your BPS idea, I'll see what I can do.

Also I happened to write an r4300i assembler a little while ago in javascript here http://file.s.gp/sgasm.php - feel free to grab any source/ideas from it if it helps :)


Ah, I knew that I remember your GUI Style from somewhere, cause I found your site a while ago. You have really good ideas there for the script system.

I've wanted to do my assembler like this:

(Test asm code I wrote up. Made a syntax highlighter for MIPS (Notepad++))

I'm also gonna add some pseudo-instructions, for example "BGE" (Branch on Greater than or equal to" as there seems to be no BGE instruction in real MIPS (only a BGEZ (Branch on Greater than or Equal to Zero) ). Of course, you could do it by hand with SLT, however most people don't seem to be aware of that. So, I wanted to make it a bit easier for them.

There's also a kind of macro thing I'm gonna support, so if you write:
Code
macro1(%reg, %value, %reg2, %value2)
LUI %reg, %value
LW %reg2, %value2(%reg)
endmacro


Then:
Code
macro(T0, $806C, T1, $669D)

Of course, it's just a macro and the assembler will assemble:
Code
LUI T0, $806C
LW T1, $669D(T0)


! starts a label.
dw is a table of 16-bit values and
% is variable.

.ORG is address you want to put your code to.
.BASE let's you set PC without affecting file location. (PC + 4)

Nice macro and psuedo op ideas. I was also considering adding a few psuedocodes to mine, which would handle stack frame sizes and return address storage automatically.

Maybe something like

s_start
# asm code
s_end

# check for any JAL's, put RA on the stack if so
# add 4 to the frame size when there's a store op with an SP destination
# load the return address from the stack back into RA if there were jals
Originally posted by shyguyhex
Nice macro and psuedo op ideas. I was also considering adding a few psuedocodes to mine, which would handle stack frame sizes and return address storage automatically.

Maybe something like

s_start
# asm code
s_end

# check for any JAL's, put RA on the stack if so
# add 4 to the frame size when there's a store op with an SP destination
# load the return address from the stack back into RA if there were jals


Yes, that's a good idea. Many people are too often confused about this, especially the negative rule (Over 0x7FFF is negative). I've written a MIPS Tutorial a few weeks ago (still not done yet, obviously). You may give it a look:
http://www.smwcentral.net/?p=section&a=details&id=6947
(It's colored, etc. If you spot any errors, don't hold back and PM me)

Looking forward to this.





I just wanted to say that I got the base of the b64 script interpreter finished! :D

If anyone wants to test it out: http://bin.smwcentral.net/u/25323/script.exe

The interpreter can work as a standalone provided you feed your emulator's process id and virtual memory base into the command line arguments.

Code
script.exe (mode) (script path) (pid) (vm base)


Example:
Code
script.exe 0 "path/to/script.b64" 3344 10020000

(Mode 0 is ram and 1 is rom, but I haven't added rom patching functionality yet. 10020000 is the static vm base for nemu btw)
Magnificent work, as always. Gonna look forward on the rest you put into this.



So this is basically what the entire language is going to look like when it's finished.

I would also like to add a keyword like "crc_restore" (or "crc" because all of the keywords are 3 letters long) which would auto restore the checksum at 0x10 after patching. If anyone can hook me up with how the crc algorithm works I'd really appreciate it #tb{^V^}

Edit: just found an app called RN64crc which should do the job

(progress update)





The b64 script asm keyword and rom extension/patching options will be available in the next release, along a gameshark code manager, and better options for pointer/seg-offset following. I hope to get this stuff done in the next few days.

And I had two more ideas that I was considering

A patch repo/manager/downloader ?
I was thinking of maybe having patches being hosted on a public server and have a thing for bowser64 that just lets you down download patches, scripts, etc and apply them to roms.

A behavior script assembler ?
This might be somewhat redundant, but it would basically translate something like:
Code
init 0x00
  set 0x05 0x0000
  or  0x01 0x0100
  or  0x03 0x0001
  sphere 0x25 0xA0
  set interaction 0x0080
  ground
main
  call 0x802CB1C0
  call 0x8029CA58
  call 0x802CB264
end

to
Code
00000000
  10050000
  11010100
  11030001
  23000000 002500A0
  102A0080
  1E000000
08000000
  0C000000 802CB1C0
  0C000000 8029CA58
  0C000000 802CB264
09000000


If anyone likes this and would like to suggest some keywords for commands, by all means

Little edit:


yay#w{:>}
Just when things started to get pretty good here, my mom decided that it would be cute to throw my laptop off of our balcony. I tried to salvage the hard drive, but I'm quite certain that it's dead because it sounded like a ratchet hoe when I tried booting with it in another system.

(Also doesn't show up when booting from a linux cd)

tl;dr sorry, no updates for a while

Originally posted by shyguyhex
Just when things started to get pretty good here, my mom decided that it would be cute to throw my laptop off of our balcony. I tried to salvage the hard drive, but I'm quite certain that it's dead because it sounded like a ratchet hoe when I tried booting with it in another system.

(Also doesn't show up when booting from a linux cd)

tl;dr sorry, no updates for a while


Lol. Well, damn.

So sad, yet so funny when I imagine the scene.
However next time you would better upload your files on a remote storage (I use mediafire) or just do your coding stuff on the first floor. #tb{:p}
I'm trying to picture what happened but I cannot.
Originally posted by Frike The Dragon

I'll never understand why there are parents who do that kind of stuff... Anyway are there any hopes yet?

Also, I assume he was doing quite advanced stuff for its age.
And to think at his mother getting mad for that, makes the scene even more hilarious and dramatic.
"GET OUTSIDE SOOOOOOOON!!"

"nah mom, doing advanced coding thats 10x more advanced and complicated that anyone my age is currently doing. I'm actually very close to finishing a program that assembles all that code to issue in a new area of sm64 hacking! :D"

"........HACKING?!!?!?! YOUR NOT MY SON!"

*hurls laptop off balcony*

*hits windshield of nearby car*
New layout by RanAS!
Awww, and I was looking forward to the ctrl+F in RAM feature #w{:<}
Well, sorry for your loss, and I hope you gain motivation to start something as good again..
Damn, sad to hear that your laptop broke. I would have gone ballistic if my mom had thrown mine off of a balcony, that isn't right #ab{:(}

Let's hope that you recover soon.
  • Pages:
  • 1
  • 2