Compare commits

..

19 Commits

Author SHA1 Message Date
Christophe Parent 82a82f47aa Simplify defines/constants 2024-07-08 22:41:50 -07:00
Christophe Parent 0283d5e3da Optimize CMP instruction using a constant 2024-07-08 17:54:59 -07:00
Christophe Parent 41724a5cbd Correct comment about swimming flag 2024-07-02 14:28:26 -07:00
Christophe Parent 7b6e6dd025 Reformat comments and enemy/music data 2024-07-02 11:27:20 -07:00
Christophe Parent bb58b97427 Optimize CMP/CPX/CPY instructions 2024-06-08 23:57:10 -07:00
Christophe Parent 749556d1b9 Optimize ADC and SBC instructions 2024-06-01 08:50:42 -07:00
Christophe Parent 4b63ee3b1b Optimize checks on upper bit 2024-05-30 16:24:56 -07:00
Christophe Parent f0e58c1f1a Remove JMP instruction to RTS 2024-05-29 00:37:58 -07:00
Christophe Parent ae86677590 Optimize subroutine tail calls 2024-05-29 00:32:10 -07:00
Christophe Parent 61b894ae1e Remove residual/unnecessary code and data 2024-05-28 23:44:30 -07:00
Christophe Parent 0e0dc84aeb Remove unused bytes 2024-05-21 11:34:32 -07:00
Christophe Parent 7cbfbf942f Homogenize indentation 2024-05-19 22:31:33 -07:00
Christophe Parent 86bcfe4d3d Add space in front of every comment 2024-05-19 14:49:34 -07:00
Christophe Parent 96398d5f65 Remove trailing spaces 2024-05-01 22:49:20 -07:00
Christophe Parent 6d8ed0eb00 Correct README file 2024-05-01 14:07:25 -07:00
Christophe Parent 6269e5929d Switch to cc65 for building 2024-05-01 13:51:59 -07:00
Christophe Parent db28c0a8ee Switch to Unix-style EOL 2024-04-30 16:02:00 -07:00
Christophe Parent 46b02caeda Rename disassembly file 2024-04-30 15:55:27 -07:00
Christophe Parent a8136bc8a9 Add original disassembly file 2024-04-26 14:32:03 -07:00
6 changed files with 17292 additions and 2 deletions

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
src/chars.bin
src/*.o
target/

24
LICENSE Normal file
View File

@ -0,0 +1,24 @@
Super Mario Bros. Optimized 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 2024 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.

View File

@ -1,3 +1,54 @@
# super-mario-bros-optimized
# Super Mario Bros. Optimized
Super Mario Bros. technically optimized as much as possible.
Super Mario Bros. technically optimized as much as possible.
![Super Mario Bros. Optimized in action](/demo.png)
## 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-optimized.git super_mario_bros_optimized
$ cd super_mario_bros_optimized
```
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_optimized.nes -C src/linker.cfg src/main.asm
```
### Running
To run the game, open the file `target/super_mario_bros_optimized.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-optimized/src/branch/master/LICENSE)).

BIN
demo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

19
src/linker.cfg Normal file
View File

@ -0,0 +1,19 @@
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 = $7FFA, fill = yes, fillval = $FF;
PRGV: file = %O, start = $FFFA, size = $0006, fill = yes, fillval = $FF;
CHR: file = %O, start = $0000, size = $2000, 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;
VECTORS: load = PRGV, type = ro;
CHARS: load = CHR, type = ro, optional = yes;
}

17193
src/main.asm Normal file

File diff suppressed because it is too large Load Diff