Time Pilot

A 16 KB cartridge where the plane does not move: it turns. The shots and the end-of-era machine are not sprites but screen characters that look before they write, and the interrupt spreads its work over a six-frame cycle.

Konami · ©KONAMI 1983 · An RC-703 16 KB cartridge · MSX1 · page 1 · Dump 183e8026…

There is not one screenshot here. The pictures are drawn by repeating what the cartridge does: the same bytes go up to video memory at the same addresses, and the screen is built from its own label lists. Everything else —the listing and the numbers— comes from the binary and is reproducible with make.

The game in numbers

100%of the binary explained
5eras, from 1910 to 2001
16directions of flight
8enemy behaviours
8,911bytes of code
7,473bytes of data
0bytes unidentified
50.1%of the frame goes on the interrupt, measured

What turned up when we took it apart

The fourth era is 1984, not 1982

The five years the panel paints are at 0x4E7C, four characters each: 1910, 1940, 1970, 1984 and 2001. In the arcade that fourth era is 1982, the year of the original; this conversion changed it, even though the cartridge itself signs ©KONAMI 1983.

The attract mode flies by reading the cartridge itself

When the game is left alone, the joystick does not come from any random generator. 0x546B takes the R register —the memory refresh one— and uses it to pick a byte of the code from 0x5399 on; that byte goes straight into 0xE009 as if it came from the controls.

So the demo flies by reading the very program that is flying it.

The shots are characters that look before they write

The MSX can only show four sprites on a line, so Time Pilot keeps the sprites for the planes and draws the eight shots in the name table. Each slot is four bytes (0xE230): the cell, the direction and the character.

Before painting itself, each shot reads the cell it is heading for (0x557B): if what is there is not sky, it is not drawn. That way they neither overwrite each other nor cover the scenery.

The plane does not move: it turns

The controls say which of the sixteen directions you want (0x545B), and the plane turns one step at a time until it gets there, always the short way round (0x53CE). Each direction has its own 32 bytes of artwork at 0x6F2B, and only the one in use is in video memory: it goes up as soon as it changes.

The interrupt spreads its work over six frames

0xE01F counts from 0 to 5 and a six-entry table (0x4118) says what is due: on one frame the shots, the clouds and the plane; on another the background; on another the big machine; and on the remaining three, the enemies. Splitting it like that is what lets it move so much on an MSX1.

The same letters, twice in VRAM and once in the cartridge

The bytes from 0x798B on are uploaded into two different character sets, one for the menu and one for the font. Since colour in SCREEN 2 goes per character, having the same drawing under two numbers is what allows the same alphabet in two colours without spending twice the cartridge. The digits (0x79D3) do the same.

Silence is an empty sound program

To shut channel 2 up at once, 0x5C8F does not touch the PSG: it points the channel at the 0xFF that closes the program at 0x7E40. The channel reads the end and goes quiet on its own, the usual way.

The helicopters do not turn because there are no drawings

Every era uploads its enemies’ patterns, and the biplane, the fighter and the jet each bring eight rotations. The era 3 helicopter brings 96 bytes: three drawings (0x75F2).

And that era gets exactly behaviours 5, 6 and 7, the only three that do not turn. The behaviours are handed out according to the drawings there are.

The interrupt eats half the frame

Measured in openMSX over a recorded game: 50.11% of the frame, 10.09 ms out of 20.1, with two independent methods agreeing. And the six-phase split comes out even, from 8.81 to 11.10 ms.

With the attract mode running, which fires non-stop, it goes up to 71.32%.

This cartridge does not carry Konami’s hidden mark

Other cartridges from the same house hide their catalogue number and their title in katakana at the end of the ROM, a detail documented by Manuel Pazos. There is nothing here: from 0x7F1E to the last byte there are just 226 padding bytes, all 0xFF.

What the cartridge draws

Each of these pictures is the cartridge replayed outside it: the characters go up the way the ROM sends them, with their colours, and the screen is built from the same label lists. Under each caption is the address it comes from.

0x4A62 — the title screen, built from the label lists at 0x4EAB and 0x4E90 over the characters INIT uploads
0x4A62 — the title screen, built from the label lists at 0x4EAB and 0x4E90 over the characters INIT uploads
0x4EE8 — and with the four menu options on top: one or two players, with joystick or keyboard. Each option is one more label list
0x4EE8 — and with the four menu options on top: one or two players, with joystick or keyboard. Each option is one more label list
0x7792 and 0x798B — the characters all of that is written with, in their colours. On the right are the same bytes uploaded again under another character number, which is how they come out in two colours
0x7792 and 0x798B — the characters all of that is written with, in their colours. On the right are the same bytes uploaded again under another character number, which is how they come out in two colours
0x6F2B — the sixteen drawings of the plane, one per direction of flight, 32 bytes each. Only one is in video memory: the one in use
0x6F2B — the sixteen drawings of the plane, one per direction of flight, 32 bytes each. Only one is in video memory: the one in use
0x712B — some of the common sprite patterns, the ones that work for every era
0x712B — some of the common sprite patterns, the ones that work for every era
the era 1 screen built in full: the sky and its colours (0x4D39), the nine clouds in the cells 0x4CE9 gives, the plane, and the scoreboard with its year, its lives and the marks for the enemies still to go
the era 1 screen built in full: the sky and its colours (0x4D39), the nine clouds in the cells 0x4CE9 gives, the plane, and the scoreboard with its year, its lives and the marks for the enemies still to go
0x6D3C — the era 3 big machine with its shifted copies, exactly as it goes up to video memory: it is not a sprite but 24 characters written into the name table
0x6D3C — the era 3 big machine with its shifted copies, exactly as it goes up to video memory: it is not a sprite but 24 characters written into the name table
the first sixteen characters of the game, in their colours: the eight drawings of the shot —those little dots— and the little ship of the lives (0x6A85), the sky, the mark for an enemy still to go (0x6AD0) and the cell that goes underneath the plane (0x6AF0)
the first sixteen characters of the game, in their colours: the eight drawings of the shot —those little dots— and the little ship of the lives (0x6A85), the sky, the mark for an enemy still to go (0x6AD0) and the cell that goes underneath the plane (0x6AF0)