https://github.com/Xkeeper0/smb2
Super Mario Bros. 2, discombobulated
https://github.com/Xkeeper0/smb2
6502-assembly assembly-6502 mario-bros nes reverse-engineering
Last synced: 3 months ago
JSON representation
Super Mario Bros. 2, discombobulated
- Host: GitHub
- URL: https://github.com/Xkeeper0/smb2
- Owner: Xkeeper0
- Created: 2018-03-05T07:55:44.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2023-02-21T04:56:37.000Z (over 2 years ago)
- Last Synced: 2024-08-05T10:09:26.054Z (about 1 year ago)
- Topics: 6502-assembly, assembly-6502, mario-bros, nes, reverse-engineering
- Language: Assembly
- Homepage: https://discord.gg/TsWMMeV
- Size: 3.12 MB
- Stars: 77
- Watchers: 12
- Forks: 18
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Super Mario Bros. 2, Discombobulated
[](https://xkeeper0.github.io/smb2)\
A disassembly of Super Mario Bros. 2.This project is intended to fully disassemble, comment, and understand
everything about the game *Super Mario Bros. 2* on the NES. In addition to the
disassembly, there is also [documentation about the game's formats](https://xkeeper0.github.io/smb2),
though those are more of a work in progress than the disassembly.As an added bonus, a fully understood disassembly will also make modifying and
changing the game easier!----
## Building
This is designed for use with [asm6f](https://github.com/freem/asm6f/).
For your convenience, binaries of that have been included. (Windows/Linux)[](https://travis-ci.com/Xkeeper0/smb2)
### Windows
Open a command prompt window and run:build (builds PRG0)
build -dREV_A (builds PRG1)
build -dSM_USA (builds Super Mario USA)This will build the ROM from the assembly, and print any errors in the process.
It will then output the SHA-256 hashes of PRG0 and PRG1, as well as the SHA-256
hash of the assembled ROM, useful if you intend to keep a one-to-one build.### Linux, etc
A version of `asm6f` built under Ubuntu has been included under `tools/`.
To build, run the following command:./build.sh (builds PRG0)
./build.sh -dREV_A (builds PRG1)
./build.sh -dSM_USA (builds Super Mario USA)
./build.sh test (builds both PRG0 and PRG1, verifying they match)The build script will also display a message if the built ROM's SHA-256 hash
matches either PRG0 or PRG1.### Output
The build process will generate a few files:* `bin/smb2.nes`, your assembled ROM.
* `bin/smb2.lst`, the assembler listing. Use this to see how the code assembled.
* `bin/assembler.txt`, the log from the assembler
* `bin/smb2.*.nl`, name-listing files for FCEUX's debugger.
* Some other cruft, probably. welp**By default, the build script will create a byte-for-byte copy of the game**,
matching these two SHA-256 hashes:* PRG0: `47ba60fad332fdea5ae44b7979fe1ee78de1d316ee027fea2ad5fe3c0d86f25a`
* PRG1: `6ca47e9da206914730895e45fef4f7393e59772c1c80e9b9befc1a01d7ecf724`You can edit `config.asm` to change some build options; see that file for details.
## Assembly
The "source" lives in the `src` directory:* `prg-x-x.asm` are the program banks. They are grouped in pairs, as that is how
SMB2 loads them. If you want to change this, you will need to split them apart again.
* `defs.asm` defines various enums and identifiers.
* `ram.asm` contains labels and definitions for RAM addresses.
* `extras/` contains some additional fun things (see `config.asm`).
* `levels/` contains level and enemy data.
* `music/` contains music and sound data.
* This list is growing as we split the disassembly into smaller parts.## Contributing
* Fork the repository.
* Make changes.
* Submit a pull request!
* You are also encouraged to visit the [Discord server](https://discord.gg/TsWMMeV)
if you have any questions.## See Also
* [Data Crystal's SMB2 page](http://datacrystal.romhacking.net/wiki/Super_Mario_Bros._2)
* [CaptainSouthbird's SMB3 disassembly](https://github.com/Drakim/smb3) and [Drakim's asm6f version](https://github.com/Drakim/smb3)
* [Our Discord server](https://discord.gg/TsWMMeV)