Not one capture here. Every picture is drawn from the bytes of the ROM, by running in Python the same decompressor, figure engine and label interpreter the Z80 runs, and then checked byte for byte against openMSX's VRAM: all five screens come out with zero differences in colour, patterns and sprite patterns. The listing and the numbers are reproducible with make, and reassembling gives back the ROM byte for byte.
The twelve bytes INIT copies from 0x40CF to 0xE053 are the four marks to beat: 1'45"34 for cycling, 17.97 m for the triple jump, 100 points for curling and 5.90 m for the pole vault. They are the only values in the whole work RAM that do not start at zero.
They sit in RAM rather than ROM because the game overwrites them: 0x93D1 writes the cyclist's time straight over the record as soon as it is improved. The ROM holds no record at all: it holds a starting value, and from then on the mark to beat is the player's own.
The demo is not played by a machine, it is replayed. Each event has its own tape of controller readings stored in ROM, and the loop feeds it frame by frame as if it were the joystick. That is why the demo always does exactly the same thing, down to the marks.
And there is one exception you can see: cycling has no recording. There the rival moves off ld a,r -the DRAM refresh register, which climbs with every instruction- used as a die. It is the only event whose demo never comes out the same twice.
The table at 0x7346 is not a curve drawn by eye: it is ninety degrees of sine, one byte per degree, with 0xFF at ninety. With it and a quarter-turn offset you get both components of any angle.
And in curling the angle is never worked out at all: the stone's two curves normalise the vector -divide it by its approximate modulus- and keep the two components. The stone travels straight without the cartridge ever knowing how many degrees it is on.
The sound period table looked like it had ten entries, and two indices were left over that nobody could place. The two missing ones are hidden inside entry [0] of the track table, the one written off as dead because no track uses it: its two bytes are the continuation of the table next door.
It is the same trick as the pole vault bar table, pointed at two bytes low so the index can start at one instead of zero. Two bytes saved, twice.
All four events move the screen, and no two do it the same way:
Cycling does not keep the circuit in VRAM at all. It lives in two RAM windows -0xE140 and 0xE260, nine rows of thirty-two tiles- that shift one column per frame and are dumped whole. And the cyclist is not a sprite either: he is four tiles from the pattern table, with eight copies of the drawing each shifted one pixel, generated when the event starts by rotating the bits.
The jumps -triple and pole vault- store the track twice, in place and shifted four pixels, and alternate: that is why it moves half a tile at a time. The shifting is done in RAM, with chained sla and rl across twelve consecutive tiles.
And curling does not store half a rink: the right half of the ice is mirrored by hand, bit by bit, as it is built.
The last sixteen bytes of the cartridge -0xBFF0 to 0xBFFF- carry the game's title in katakana, backwards: ハイパースポーツ3, its length (0x0D), the 0x33 of RC-733 and an 0xAA to close. Nothing reads it: not one instruction in the cartridge points there.
The mark was discovered by Manuel Pazos, and it is in many of Konami's cartridges from these years. Here it is complete and it matches the catalogue number.
Under each picture is where it comes from and what is on it.