There is not one illustration or capture here. The wordmark, the title screen and the in-game screen are drawn from the bytes of the ROM, by running in Python the same steps the Z80 runs, and checked against openMSX's VRAM: zero differences in everything that is not left to chance. The listing and the numbers come from the binary and are reproducible with make.
An MSX cartridge starts with AB, the INIT address, and then STATEMENT, DEVICE, TEXT and six reserved bytes. Here INIT is 0x4004, which is exactly where those fields should begin. Read as instructions they are the start of the game:
4004 31 00 F0 ld sp,0F000h 4007 CD D1 4F call 4FD1h 400A CD 62 50 call 5062h 400D CD 4E 40 call 404Eh
Only the first four bytes of the cartridge are really a header. The other nine are the first four instructions.
The title screen, drawn from the ROM, reads PROGRAMMER:Y.TANAKA and below it T.SASAGAWA. Two of them, not one. And the last line reads PUSH SPACE-KEY OR TORIGER: TORIGER, not TRIGGER.
The texts cannot be read by looking at the bytes: the cartridge's font is not quite ASCII and, on top of that, changes halfway through the game. Byte 0x21, which in ASCII would be a !, is the colon here; that is why reading it raw looked like "PROGRAMMER!". The only way to quote a text out of this cartridge is to draw it.
pon_una_bomba (0x491C) checks the stage number with an and 003h: on multiples of four it does not ask for the trigger and the bomb drops by itself. And there is a label announcing it, blinking at the bottom sixteen frames on and eight off, under exactly the same condition (0x4D37): BOMB AUTO SETTING STAGE.
A whole game mode hidden in two instructions.
Each arm of the blast is four screen tiles, that is two board cells. But the loop is unrolled on purpose and the four are not treated alike: the first two call pinta_una_llama_y_gasta_el_ladrillo (0x4B21), which crumbles the brick over eight frames; the third and fourth call pinta_una_llama_sin_gastar (0x4B5A), which returns without writing if what it finds is a brick.
Measured in openMSX, not deduced: two bombs written by hand into the list, one with a brick right next to it and one with the brick two cells away. Both of the first one's fall; the second one's is still standing.
Under the first brick dealt there is a prize, and not always the same one. The sixteen words of the table at 0x419B point at two-tile blocks, and the destinations say it all: the even ones go to tile 0x0A and the odd ones to 0x1A, which are exactly the four that pinta_el_premio paints.
0x4167 loads a pair of consecutive words — one top half and one bottom half — so the sixteen blocks are eight whole prizes: a telescope on its tripod, a money bag, a penny-farthing, a carriage, a steaming cup, a cocktail glass, a red soda can and a cigarette pack. And which one it is comes from two masks on the stage number, one of them the very same and 003h as the auto-bomb mode: that stage's prize is not the one the following three get.
The same byte of the enemy's record does two things: it picks the drawing (0xC0 + frame*4) and it decides the behaviour. When it is zero, the enemy chases the bomber (0x477B) instead of wandering. And zero is precisely the red frame: the other three are purple.
So the game is telling you when you are being hunted, and it does not spend one byte on saying it.
0x5062 writes a 0xD0 into the first sprite attribute — the "no more" marker — and never touches the list again. Everything that moves is a name-table tile, and everything is two by two.
That explains the whole architecture: the game keeps two 768-byte screens in RAM, one for what is seen and one for what stays, and instead of a map data structure it reads the tile number. The three comparisons that repeat all over the listing are cp 020h ("free"), cp 0e0h ("there is a flame") and cp 0c0h ("there is something that kills"), and the last one covers both flames and monsters because they are laid out next to each other on purpose.
numero_al_azar (0x4EF9) feeds back a sixteen-bit seed and mixes in the Z80's R register. That is not a decoration: if R advanced by the same amount between two draws, the series of cells collapses into three to five values and repeats — a test in the repository checks it, with four different steps.
On the machine that does not happen, because between two draws a varying number of instructions runs depending on how many times the draw had to be repeated. The consequence is that a stage's layout cannot be reproduced from outside: it depends on the instant the trigger was pressed.
Three whole routines — 0x4EF0 (clear a board cell), 0x4F84 (a short wait) and 0x50D6 (write VDP register 7) — without a single call naming them anywhere in the 8 KB. And a fourth: the cp 089h at 0x4AC9, which would check for the pillar on the first tile of each arm, and which an unconditional jr steps over.
That last one changes nothing, and that is why nobody ever fixed it: the next tile hits the other half of the same pillar and the flame stops there anyway. They are declared as code, because instructions is what they are.
And there are six bytes at 0x4864 that do run and do nothing: an ld c,a and four ld b,.. that nobody reads back. In the cartridge's own font they read OBADD.
If a flame reaches the door or the prize, the game notes the spot and brings out four more enemies there (0x453B) as soon as the cell is clear. The door gets uncovered again; the prize is lost.
And if the bonus reaches zero, se_agoto_el_bonus (0x449F) wipes the whole board: the thirty-five bricks, the prize and the door all vanish at once, and with both "already found" flags set they are never looked for again. The stage is left with no way out and can only be finished by killing everything.
Under each picture is where it comes from and what is on it.
siembra_la_fase (0x4E35) and painted with the cartridge's own routines, in the main loop's order. The frame and the thirty-five pillars are where 0x4DB7 puts them, checked against the emulator; the bricks are one of the possible deals, because the real one is decided by the R register. There is a bomb with its fuse starting, another about to go, and a blast already openpinta_el_premio paints — and 0x4167 loads one pair per stage. A telescope on its tripod, a money bag, a penny-farthing, a carriage, a steaming cup, a cocktail glass, a red soda can and a cigarette pack. two more. The one for the first three stages, a chest, comes in the big block and is not here