Compare commits
30 Commits
Author | SHA1 | Date |
---|---|---|
|
3f9725dba5 | |
|
6b19efaa2c | |
|
296a3233c2 | |
|
a09108a349 | |
|
ca736cc7a6 | |
|
4b3dcd6d60 | |
|
fb8a5fcda3 | |
|
5fcfb5ac61 | |
|
acfebaaae9 | |
|
609828b274 | |
|
0b81c08d8d | |
|
f7793b12e4 | |
|
acc90317a8 | |
|
c98ecb4e2d | |
|
8eed2bd31a | |
|
9711b4ecc1 | |
|
23ac63a261 | |
|
3df5a940a4 | |
|
2a307755a3 | |
|
6a75efded7 | |
|
b58b4dbc1f | |
|
839982c7bd | |
|
2072532f1b | |
|
2627bc1ac3 | |
|
2c48f59c68 | |
|
77f35f881d | |
|
9e5c548b34 | |
|
7076a091c9 | |
|
053db6ea68 | |
|
2fa07f41f4 |
|
@ -0,0 +1,3 @@
|
||||||
|
src/chars.bin
|
||||||
|
src/*.o
|
||||||
|
target/
|
|
@ -0,0 +1,24 @@
|
||||||
|
Super Mario Bros.: Tale of the Black Koopa is published with no license. It is distributed as is in the hope that it will be useful, but WITHOUT ANY WARRANTY.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Credits:
|
||||||
|
* Original work on Super Mario Bros.: Copyright 1985 Nintendo
|
||||||
|
* Original work on disassembly: Copyright 2012, 2015 doppelganger
|
||||||
|
* Additional work: Copyright 2023 Christophe Parent
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Original words from doppelganger (doppelheathen@gmail.com):
|
||||||
|
|
||||||
|
There are so many people I have to thank for this, and without their help this would
|
||||||
|
probably not be possible. So I thank all the peeps in the nesdev scene whose insight into
|
||||||
|
the 6502 and the NES helped me learn how it works (you guys know who you are, there's no
|
||||||
|
way I could have done this without your help), as well as the authors of x816 and SMB
|
||||||
|
Utility, and the reverse-engineers who did the original Super Mario Bros. Hacking Project,
|
||||||
|
which I compared notes with but did not copy from. Last but certainly not least, I thank
|
||||||
|
Nintendo for creating this game and the NES, without which this disassembly would
|
||||||
|
only be theory.
|
||||||
|
|
||||||
|
Update: removed residual note under ChkStart label. Thanks to ShaneM for pointing out
|
||||||
|
the error.
|
55
README.md
55
README.md
|
@ -1,3 +1,54 @@
|
||||||
# super-mario-bros-tale-of-the-black-koopa
|
# Super Mario Bros.: Tale of the Black Koopa
|
||||||
|
|
||||||
A hack of Super Mario Bros.
|
A hack of Super Mario Bros.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
|
||||||
|
cc65 must be installed on your system; the oldest supported version is `2.18`. No other dependencies are required.
|
||||||
|
|
||||||
|
Additionally a file containing the graphics for the original Super Mario Bros. game must be present on your system. This file is not provided.
|
||||||
|
|
||||||
|
### Installing
|
||||||
|
|
||||||
|
Clone this repository locally:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ git clone https://forge.thatspaceandtime.org/ooxie/super-mario-bros-tale-of-the-black-koopa.git super_mario_bros_tale_of_the_black_koopa
|
||||||
|
$ cd super_mario_bros_tale_of_the_black_koopa
|
||||||
|
```
|
||||||
|
|
||||||
|
Copy the graphics file:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ cp <path_to_the_graphics_file> src/chars.bin
|
||||||
|
```
|
||||||
|
|
||||||
|
Create the target directory:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ mkdir target
|
||||||
|
```
|
||||||
|
|
||||||
|
### Building
|
||||||
|
|
||||||
|
To build the binary, execute:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ cl65 -t nes -o target/super_mario_bros_tale_of_the_black_koopa.nes -C src/linker.cfg src/main.asm
|
||||||
|
```
|
||||||
|
|
||||||
|
### Running
|
||||||
|
|
||||||
|
To run the game, open the file `target/super_mario_bros_tale_of_the_black_koopa.nes` in your favorite NES emulator. Alternatively you can run it on original hardware.
|
||||||
|
|
||||||
|
### Playing
|
||||||
|
|
||||||
|
Refer to the original manual for Super Mario Bros.
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
The source code of this project is not licensed, as the original work it is based on is not (see [LICENSE](/ooxie/super-mario-bros-tale-of-the-black-koopa/src/branch/master/LICENSE)).
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
MEMORY {
|
||||||
|
ZP: file = "", start = $0000, size = $0100;
|
||||||
|
OAM: file = "", start = $0200, size = $0100, define = yes;
|
||||||
|
RAM: file = "", start = $0300, size = $0500;
|
||||||
|
HDR: file = %O, start = $0000, size = $0010, fill = yes;
|
||||||
|
PRG0: file = %O, start = $8000, size = $4000, fill = yes, fillval = $FF;
|
||||||
|
PRG1: file = %O, start = $8000, size = $4000, fill = yes, fillval = $FF;
|
||||||
|
PRG2: file = %O, start = $8000, size = $4000, fill = yes, fillval = $FF;
|
||||||
|
PRG3: file = %O, start = $C000, size = $3FFA, fill = yes, fillval = $FF;
|
||||||
|
PRGV: file = %O, start = $FFFA, size = $0006, fill = yes, fillval = $FF;
|
||||||
|
}
|
||||||
|
|
||||||
|
SEGMENTS {
|
||||||
|
ZEROPAGE: load = ZP, type = zp, optional = yes;
|
||||||
|
SPRITE: load = OAM, type = bss, optional = yes;
|
||||||
|
BSS: load = RAM, type = bss, optional = yes;
|
||||||
|
HEADER: load = HDR, type = ro;
|
||||||
|
STARTUP: load = PRG0, type = ro;
|
||||||
|
BANK0: load = PRG0, type = ro, optional = yes;
|
||||||
|
AREADATA: load = PRG1, type = ro, optional = yes;
|
||||||
|
ENEMYDATA: load = PRG1, type = ro, optional = yes;
|
||||||
|
CHARS: load = PRG2, type = ro, optional = yes;
|
||||||
|
SOUNDENGINE: load = PRG2, type = ro, optional = yes;
|
||||||
|
BANK3: load = PRG3, type = ro, optional = yes;
|
||||||
|
BANKSWITCH: load = PRG3, type = ro, optional = yes;
|
||||||
|
VECTORS: load = PRGV, type = ro;
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue