Magical Tree

A nine-stage tree the cartridge keeps in VRAM, a screen that doubles as the map, and all nine stages drawn from the tables without one cell differing from the emulator.

Konami - (c) Konami 1984 - An RC-713 16 KB cartridge - MSX1 - page 1 - Dump a3f3ad0d...

Not one capture here. Every picture is drawn from the bytes of the ROM: the screens with the cartridge's own set-up chain rewritten in Python, and the tree with each stage's script and its scenery step, checked against openMSX down to zero cells. The listing and the numbers are reproducible with make, and reassembling gives back the ROM byte for byte.

The cartridge in numbers

100%of the binary explained
628named routines
47.4%of the listing commented
8,537bytes of code
7,847bytes of data
0bytes unidentified

What turned up when we took it apart

The level lives in VRAM

0x52BB uploads the stage script to 0x3B80, behind the sprite attribute table: between 723 and 918 bytes, depending on the stage. The game has one kilobyte of RAM and reads its level back from the VDP as you climb.

The pieces that do not erase

0x6889 only erases the row an object leaves behind when its type does not have bit 7 set. The ones that do leave their first row behind, and that is how the spiders' threads grow.

The screen is the map

There is no copy of the level in RAM. To know where the player stands, 0x61A3 reads the two cells under the player's feet from VRAM, and the creatures, before moving, ask the screen whether the cell ahead lets them through.

Randomness is the R register

Nine ld a,r: the Z80's refresh counter, which ticks by itself with every instruction, decides a creature's colour, where it appears or which projectile comes out.

Nine skies, one mask

The empty cell of each stage takes the colour of (0xE05D): cyan, light green, light yellow, grey, black... The first one does not come from the table at 0x741F but from the initial values at 0x51C1; with the table's first value, the check drifts by 1,809 bytes of colour.

Circus Charlie's sibling

The decompressor has the same fourteen-byte signature as the RC-712's, the chromatic scale is the same twelve bytes and the extra life follows the same rule: the same code, somewhere else.

What the cartridge draws

Under each picture is where it comes from and what is on it. The nine whole stages are in The game.

The nine whole stages side by side, standing on the ground: they are climbed bottom to top. Each one, full size, in The game.
The nine whole stages side by side, standing on the ground: they are climbed bottom to top. Each one, full size, in The game.
Stage 1 at the start: its first screen, from the ROM's script and checked against openMSX down to 0 cells.
Stage 1 at the start: its first screen, from the ROM's script and checked against openMSX down to 0 cells.
Stage 2 at the start: its first screen, from the ROM's script and checked against openMSX down to 0 cells.
Stage 2 at the start: its first screen, from the ROM's script and checked against openMSX down to 0 cells.
Stage 3 at the start: its first screen, from the ROM's script and checked against openMSX down to 0 cells.
Stage 3 at the start: its first screen, from the ROM's script and checked against openMSX down to 0 cells.
Stage 4 at the start: its first screen, from the ROM's script and checked against openMSX down to 0 cells.
Stage 4 at the start: its first screen, from the ROM's script and checked against openMSX down to 0 cells.
Stage 5 at the start: its first screen, from the ROM's script and checked against openMSX down to 0 cells.
Stage 5 at the start: its first screen, from the ROM's script and checked against openMSX down to 0 cells.
Stage 6 at the start: its first screen, from the ROM's script and checked against openMSX down to 0 cells.
Stage 6 at the start: its first screen, from the ROM's script and checked against openMSX down to 0 cells.
Stage 7 at the start: its first screen, from the ROM's script and checked against openMSX down to 0 cells.
Stage 7 at the start: its first screen, from the ROM's script and checked against openMSX down to 0 cells.
Stage 8 at the start: its first screen, from the ROM's script and checked against openMSX down to 0 cells.
Stage 8 at the start: its first screen, from the ROM's script and checked against openMSX down to 0 cells.
Stage 9 at the start: its first screen, from the ROM's script and checked against openMSX down to 0 cells.
Stage 9 at the start: its first screen, from the ROM's script and checked against openMSX down to 0 cells.
The company screen, built from the ROM and checked down to 0 bytes.
The company screen, built from the ROM and checked down to 0 bytes.
The title screen, built the same way and checked down to 0 bytes.
The title screen, built the same way and checked down to 0 bytes.
The tree 0x7629 paints when the stage changes, from the middle outwards and in the colours of the stage that starts (here, stage 2). Checked down to 0 bytes.
The tree 0x7629 paints when the stage changes, from the middle outwards and in the colours of the stage that starts (here, stage 2). Checked down to 0 bytes.
The castle, after the ninth stage: its columns from the middle outwards, the windows at 0x7600 with the two characters and the sign. Checked down to 0 bytes.
The castle, after the ninth stage: its columns from the middle outwards, the windows at 0x7600 with the two characters and the sign. Checked down to 0 bytes.
The stage's patterns, with the first stage's colour mask.
The stage's patterns, with the first stage's colour mask.
The 16x16 sprites, from the ROM's blocks.
The 16x16 sprites, from the ROM's blocks.