Konami's Boxing

Six opponents, and only three of them drawn. There are six names, but the figures come out of a table of three words: the three of the second round are the first three with the colour swapped. And the cartridge keeps the score upside down —it adds up faults and finishes with 10 - faults—, which is the ten-point must system of real boxing.

Konami - (c) Konami 1985 - An RC-736 32 KB cartridge - MSX1 - pages 1 and 2 - Dump 43b23739...

Not one capture here. Every picture is drawn from the bytes of the ROM, by running in Python the very same decompressors, figure builders and sprite painters the Z80 runs, and then checked byte for byte against openMSX's VRAM: the eight screens dumped from the emulator —the intro, the title and the six rings— come out with zero differences in colour (6,144 bytes), patterns (6,144) and the 768 tiles of the screen, and on the first bout in the two boxers' figures as well. 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
475code blocks measured
52.6%of the listing commented
6,932bytes of code
25,836bytes of data
0bytes unidentified

What turned up when we took it apart

Six opponents, three archives and a hidden piece

The names come from a table of six pointers at 0x5661: RED·WOLF, M.B.ALLI, MOAI·KING, SANCHESS, CHINA·KHAN and MOAI·Jr. The figures, though, come from a table of three words at 0x52C9 —0x825C, 0x9670 and 0xABB4— which 0x4F8D indexes with (0xE207) & 3.

And still the six look different: every opponent figure carries one piece more than it declares —0x5005 does an inc b on the opponent's turn— and 0x5034 only paints it in the second round: for SANCHESS instead of RED WOLF's head (the hair down to the neck), for CHINA KHAN on top of M.B.ALLI's (the pigtail) and for MOAI Jr. instead of MOAI KING's empty sprite. And only the moai gets colour 4 turned into 0x0C by 0x526F and 0x51BE: blue into green. Checked against the emulator's VRAM, sprites included, at zero.

Throwing a punch tires you, and it only lands on two frames

When a punch ends, 0x49BC adds to whoever threw it what the table at 0x6854 says —3, 2, 1 and 1—, and the punch that hurts the other most (0x6850: 12, 10, 9 and 2) is also the one that tires you most. Both tables run in the same order.

And the punch has a window: 0x49FB loads 0xC0 into (0xE24C) or (0xE24D), and 0x4CCF spends it with one srl per frame. Of the two bits, carry only comes out on the seventh and eighth frame: outside that the punch cannot land.

The scorecard is kept upside down

(0xE21E) and (0xE21F) do not add up points: they add up faults. One for carrying three damage levels more than the other, one for having landed fewer punches, and twice whatever (0xE23E) or (0xE261) says. At the end 0x4ECD does 10 - faults and raises both marks together until one reaches ten. It is the ten-point must system of real boxing.

Konami's hidden mark

At 0xBFF0, behind the filler, sit the title in katakana backwards, the length (13), the catalogue number in BCD (0x36) and 0xAA: RC-736 and コナミのボクシング. Finding the format is Manuel Pazos's work; here it is only read.

And at 0x4010 there is a second header "AB" with 07 36 behind it: the one the Konami Game Master reads from the other slot. With this one, eight cartridges in the series carry it.

The machine plays the left-hand boxer

With a single player, the boxer on the left is driven by decide_la_maquina (0x4A6B) and the human is the one on the right, the one wired to port 1 and the cursor keys. Three independent things say so: when they are placed (0x49FE) the one at 0xE232 gets column 22 and the one at 0xE255 column 2; when walking, one closes in by adding and the other by subtracting; and the machine closes in to the right (0x4A83) and backs off to the left (0x4B39), which is what the left-hand corner calls for.

In scene 2 —the attract match— the right-hand boxer is driven by the Z80's R register (0x4836): both of them play on their own.

A three-minute clock, in four tiles

The round timer is not a binary counter: it is the four tiles from (0xE212) to (0xE215), in ASCII, which 0x5798 dumps to row 1, column 14. They count down from the end; when the units wrap from '0' to '9' they borrow from the tens, and when the tens wrap from '0' they go back to '5'. It starts at 3:01, which after the first tick reads 3:00.

The six opponents, one by one

The same screen six times, built from the ROM with what changes on each: the name from the table at 0x5661, the figure from the one at 0x52C9 and, on the second round, the colour swap at 0x526F. Not one is a capture, and all six come out with zero differences against the emulator's VRAM.

RED·WOLF, the first
RED·WOLF, the first
M.B.ALLI
M.B.ALLI
MOAI·KING
MOAI·KING
SANCHESS, second time round (STAGE B)
SANCHESS, second time round (STAGE B)
CHINA·KHAN
CHINA·KHAN
MOAI·Jr., MOAI·KING's son
MOAI·Jr., MOAI·KING's son

What the cartridge draws

Under each picture is where it comes from and what is on it.

The title screen with its four options. Bit 0 of the flags at 0x4563 says whether two play, and bit 4 picks variant B.
The title screen with its four options. Bit 0 of the flags at 0x4563 says whether two play, and bit 4 picks variant B.
The intro. The sign is 26 consecutive tiles in three rows that climb one row every two frames, fourteen times (0x462A).
The intro. The sign is 26 consecutive tiles in three rows that climb one row every two frames, fourteen times (0x462A).
The player's nineteen poses: the tiles placed with each figure's eight layout bytes and the sprites on top.
The player's nineteen poses: the tiles placed with each figure's eight layout bytes and the sprites on top.
RED·WOLF, archive 2 on the first round: the hidden piece is skipped.
RED·WOLF, archive 2 on the first round: the hidden piece is skipped.
M.B.ALLI, archive 3 without the pigtail.
M.B.ALLI, archive 3 without the pigtail.
MOAI·KING, archive 4 in blue with an empty sprite on the face.
MOAI·KING, archive 4 in blue with an empty sprite on the face.
SANCHESS: the same archive 2 with the first piece instead of the second, the hair down to the neck.
SANCHESS: the same archive 2 with the first piece instead of the second, the hair down to the neck.
CHINA·KHAN: archive 3 with every piece, the pigtail included (0xAB2E, colour 1).
CHINA·KHAN: archive 3 with every piece, the pigtail included (0xAB2E, colour 1).
MOAI·Jr.: archive 4 with seven black pixels on the face and colour 4 turned into 0x0C, green.
MOAI·Jr.: archive 4 with seven black pixels on the face and colour 4 turned into 0x0C, green.
The font: forty-six tiles from 0x30, near enough ASCII. There is no Q —0x51 is a middle dot— and no Z, and 0x58 is a glyph with
The font: forty-six tiles from 0x30, near enough ASCII. There is no Q —0x51 is a middle dot— and no Z, and 0x58 is a glyph with "r" and the full stop joined, which is what makes the sixth opponent MOAI·Jr.