The long-awaited Centipede is now here. What's the big hoopla about this? The game is great, a super port from the arcade. Atari's CX7801, the first of all ProSystem games. Probably the grand-daddy of all 7800 games. But did it ever receive the attention that its cousin Asteroids received? I don't think so. How many people do you see playing 7800 Centipede today? None. It's laid in the dust for decades at my home. Although Centipede was rumored to be one of two choices to be the internal cart ("pack-in" instead of "pack-out" as they say) vs. the other candidate Pole Position 2 (and Asteroids in PAL), that never happened. In the mid 1980s people seemed more captivated with the tumbling boulders in Asteroids - it was quite a piece of work. But now Centipede steps up with the newly-released disassembly and new-era sample game. ENJOY!!!
ABOUT THE DISASSEMBLY…
Beware if you go to print this beast, it's about 110 pages for every 16 kilobytes of game code. A tree grows in Brooklyn, so a tree can fall in Brooklyn. A recommended trick is if there's interesting piece(s) of code to look at, copy and paste these section(s) into another file and print those out. The format I use is .rtf (rich text format) which readable by just about every word app on the planet, even Word 6.0.1 on OS9. This is for the people who don't have the tools or the patience to try to read source code listings. I use the Courier font as it is has fixed column spacing, or you could change to the Menlo font if you prefer slashes through your zeroes. As you'll eventually see, you don't have to be a degreed engineer to read the code. In fact, the way to start to read the code is to go to the bottom of the Centipede disassembly document (below) and read the second to last pair of bytes. In Centipede it's $04, $D8. The 6502 microprocessor is hard-wired to read addresses $FFFC and $FFFD to fetch the vector where the code begins to execute. These bytes are read-in backwards, so the vector address for Centipede is D804. Scroll up the disassembly document to address D804 and sure enough, this is where the game begins. For further info, search the internet for 6502 programming, and gain a further understanding of what goes into these Atari games. Look out, you could be programming 7800 games some day!
This disassembly was particularly difficult as the source list we have on file apparently was a much earlier version than was released to cartridge. Also it was clear in the early stages of research and development at GCC in Cambridge Mass, the code on the cartridge went through several iterations, in fact this unused code is still on the cartridge!!! This added confusion as I thought I was disassembling one section of code only to find I was somewhere else on the cartridge. Specifically, $F800 is very similar to $E800, but $F800 contains illegal codes and therefore obviously not used during the execution of code in the Centipede game. I never recommend shipping code this way, so my code sample (below) has this block of code zeroed out, and we gained more than a kilobyte of excess space. There is another bug in the code at $CF35, but I ran out of time to study this section of code, which clearly isn't executed during the course of Centipede game play. Also, obviously in the very early stages everyone lent their hands at coding this game. It was too big a job for one person to do everything quickly enough and like at any other start-up company, everyone wanted their chance to showcase their programming skills. The source list shows this, although I've done a lot to make things look universal and added a lot of color, etc, so that the 7800 Centipede can finally gain the recognition that it could have had almost 30 years ago. Usually when I disassemble 16K of code I have about 2 dozen errors detected during cross-check. As I went through so many gyrations to complete this project, there were over 70 errors detected. So this was a big deal to complete this one. Now we have it for all-time, the original code at its complete glory…
A WORD ABOUT TRAKBALL GAMES…
The original 1984 Centipede code has some (all?) Trakball code resident in the game. In this case it's been bypassed for Joystick input only. Eventually the Centipede Trakball version was developed and released. Does anyone know who/where this came from? Just curious. I recommend when we build 7800 Millipede that there's a select for Trakball and/or Joystick input on the game set-up screen. Millipede probably won't cram on a 16K cart, so just like the 5200, the Centipede was 16K and the Millipede was 32K. Just dreaming...
CENTIPEDE disassembly
Centipede 78 Disassembly7.rtf 300.38K
10 downloads
Upon developing my "invincible" version it was found that the game hiccups if you start with 0 (zero) extra lives or more than 31 extra lives. In the 0 extra lives case, there's a zillion mushrooms placed at the top of the screen which you can't shoot and "kill" (actually there are 7 rows of 31 mushrooms and one row of 13 mushrooms for a total of 230 mushrooms). When you lose your first life, the mushrooms are converted to 5 points per mushroom bonus and then you die and then - game over - nothing you can do about it. Starting the game with over 31 lives results with a crazy situation as well. The game begins with 2 rows of 31 mushrooms and 1 row of 12 mushrooms at the top which you can't shoot/kill. At the first death, you get 5 points bonus for each mushroom at the top of the screen and at re-rack you go invisible and you're trapped at the top of the screen in a jungle of mushrooms, at the 2nd level. You start shooting and work your way to the bottom of the screen, and everything is normal except you're invisible, or actually 1 pixel wide so you're not invincible. At the second death your shooter is back to normal and the game returns to normal, sort of. I didn't opt to use either of these versions. Given the mod instructions given below, you could easily create these sample programs and view their operation for yourself.
Introducing…CENTIPEDE+…an all-new game, and yet the same old game built-in.
CENTIPEDE+ FEATURES…
* Starts with 1 extra life instead of 2 in the original game. You will not need to start with any more extra lives.
* Additional Life added at 12,000 points just like the original game, and every 12,000 points thereafter, up to 31 lives, instead of 6 in the original game.
* New concept - when you die, you don't lose a life. I kinda like that.
HOW IT WAS DONE…
First the game was disassembled so we know what happens where and when. For a 16K game, the 27128 EPROM spans from $0000-$3FFF, and when the cartridge is installed the code is mapped to $C000-$FFFF.
CODE CHANGES FOR CENTIPEDE+
$DE3A changes from $C9 $06 to $C9 $1F (maximum of 31 extra lives)
$E478 changes from $A2 $02 to $A2 $01 (# of extra lives at start of single-player game)
$E488 changes from $A2 $04 to $A2 $02 (# of extra lives at start of dual-player game)
$E628 changes from $DE $0E $21 to $EA $EA $EA (we don't want GAME OVER)
$E6E7 changes from $20 $D9 $E7 $CE $0E $21 to $EA $EA $EA $EA $EA $EA
$E717 changes from $20 $D9 $E7 $CE $0F $21 to $EA $EA $EA $EA $EA $EA
$E722 changes from $20 $D9 $E7 $DE $0E $21 to $EA $EA $EA $EA $EA $EA
CODE CHANGES FOR TRAKBALL CENTIPEDE+
$DE36 changes from $C9 $06 to $C9 $1F (maximum of 31 extra lives)
$E46B changes from $A2 $02 to $A2 $01 (# of extra lives at start of single-player game)
$E47B changes from $A2 $04 to $A2 $02 (# of extra lives at start of dual-player game)
$E616 changes from $DE $0E $21 to $EA $EA $EA (we don't want GAME OVER)
$E6D4 changes from $20 $C7 $E7 $CE $0E $21 to $EA $EA $EA $EA $EA $EA (no GAME OVER)
$E705 changes from $20 $C7 $E7 $CE $0F $21 to $EA $EA $EA $EA $EA $EA (no GAME OVER)
$E710 changes from $20 $C7 $E7 $DE $0E $21 to $EA $EA $EA $EA $EA $EA (no GAME OVER)
There was once, and always will be a PacMan Plus. Now there's a Centipede Plus. New for 2013.
NTSC Centipede+
CENTIPEDEPLUS_NTSC_C5BC.bin 16K
10 downloads
CentipedePlus_NTSC_16K.a78 16.13K
13 downloads
PAL Centipede+
(There was no PAL Centipede according to my records. If you have it, gimme it and I'll "fix" it).
Centipede+'s brother, Trakball Centipede+
CENTIPEDEPLUS_TBALL_NTSC_6FDB.bin 16K
7 downloads
CentipedePlusTball_NTSC_16K.a78 16.13K
7 downloads
Does this work on SDL/MESS? Trakball emulation isn't on the ProSystem Emulator.
Whew, that was a lot of work.
NEXT UP> 7800 GALAGA
ABOUT THE DISASSEMBLY…
Beware if you go to print this beast, it's about 110 pages for every 16 kilobytes of game code. A tree grows in Brooklyn, so a tree can fall in Brooklyn. A recommended trick is if there's interesting piece(s) of code to look at, copy and paste these section(s) into another file and print those out. The format I use is .rtf (rich text format) which readable by just about every word app on the planet, even Word 6.0.1 on OS9. This is for the people who don't have the tools or the patience to try to read source code listings. I use the Courier font as it is has fixed column spacing, or you could change to the Menlo font if you prefer slashes through your zeroes. As you'll eventually see, you don't have to be a degreed engineer to read the code. In fact, the way to start to read the code is to go to the bottom of the Centipede disassembly document (below) and read the second to last pair of bytes. In Centipede it's $04, $D8. The 6502 microprocessor is hard-wired to read addresses $FFFC and $FFFD to fetch the vector where the code begins to execute. These bytes are read-in backwards, so the vector address for Centipede is D804. Scroll up the disassembly document to address D804 and sure enough, this is where the game begins. For further info, search the internet for 6502 programming, and gain a further understanding of what goes into these Atari games. Look out, you could be programming 7800 games some day!
This disassembly was particularly difficult as the source list we have on file apparently was a much earlier version than was released to cartridge. Also it was clear in the early stages of research and development at GCC in Cambridge Mass, the code on the cartridge went through several iterations, in fact this unused code is still on the cartridge!!! This added confusion as I thought I was disassembling one section of code only to find I was somewhere else on the cartridge. Specifically, $F800 is very similar to $E800, but $F800 contains illegal codes and therefore obviously not used during the execution of code in the Centipede game. I never recommend shipping code this way, so my code sample (below) has this block of code zeroed out, and we gained more than a kilobyte of excess space. There is another bug in the code at $CF35, but I ran out of time to study this section of code, which clearly isn't executed during the course of Centipede game play. Also, obviously in the very early stages everyone lent their hands at coding this game. It was too big a job for one person to do everything quickly enough and like at any other start-up company, everyone wanted their chance to showcase their programming skills. The source list shows this, although I've done a lot to make things look universal and added a lot of color, etc, so that the 7800 Centipede can finally gain the recognition that it could have had almost 30 years ago. Usually when I disassemble 16K of code I have about 2 dozen errors detected during cross-check. As I went through so many gyrations to complete this project, there were over 70 errors detected. So this was a big deal to complete this one. Now we have it for all-time, the original code at its complete glory…
A WORD ABOUT TRAKBALL GAMES…
The original 1984 Centipede code has some (all?) Trakball code resident in the game. In this case it's been bypassed for Joystick input only. Eventually the Centipede Trakball version was developed and released. Does anyone know who/where this came from? Just curious. I recommend when we build 7800 Millipede that there's a select for Trakball and/or Joystick input on the game set-up screen. Millipede probably won't cram on a 16K cart, so just like the 5200, the Centipede was 16K and the Millipede was 32K. Just dreaming...
CENTIPEDE disassembly

Upon developing my "invincible" version it was found that the game hiccups if you start with 0 (zero) extra lives or more than 31 extra lives. In the 0 extra lives case, there's a zillion mushrooms placed at the top of the screen which you can't shoot and "kill" (actually there are 7 rows of 31 mushrooms and one row of 13 mushrooms for a total of 230 mushrooms). When you lose your first life, the mushrooms are converted to 5 points per mushroom bonus and then you die and then - game over - nothing you can do about it. Starting the game with over 31 lives results with a crazy situation as well. The game begins with 2 rows of 31 mushrooms and 1 row of 12 mushrooms at the top which you can't shoot/kill. At the first death, you get 5 points bonus for each mushroom at the top of the screen and at re-rack you go invisible and you're trapped at the top of the screen in a jungle of mushrooms, at the 2nd level. You start shooting and work your way to the bottom of the screen, and everything is normal except you're invisible, or actually 1 pixel wide so you're not invincible. At the second death your shooter is back to normal and the game returns to normal, sort of. I didn't opt to use either of these versions. Given the mod instructions given below, you could easily create these sample programs and view their operation for yourself.
Introducing…CENTIPEDE+…an all-new game, and yet the same old game built-in.
CENTIPEDE+ FEATURES…
* Starts with 1 extra life instead of 2 in the original game. You will not need to start with any more extra lives.
* Additional Life added at 12,000 points just like the original game, and every 12,000 points thereafter, up to 31 lives, instead of 6 in the original game.
* New concept - when you die, you don't lose a life. I kinda like that.
HOW IT WAS DONE…
First the game was disassembled so we know what happens where and when. For a 16K game, the 27128 EPROM spans from $0000-$3FFF, and when the cartridge is installed the code is mapped to $C000-$FFFF.
CODE CHANGES FOR CENTIPEDE+
$DE3A changes from $C9 $06 to $C9 $1F (maximum of 31 extra lives)
$E478 changes from $A2 $02 to $A2 $01 (# of extra lives at start of single-player game)
$E488 changes from $A2 $04 to $A2 $02 (# of extra lives at start of dual-player game)
$E628 changes from $DE $0E $21 to $EA $EA $EA (we don't want GAME OVER)
$E6E7 changes from $20 $D9 $E7 $CE $0E $21 to $EA $EA $EA $EA $EA $EA
$E717 changes from $20 $D9 $E7 $CE $0F $21 to $EA $EA $EA $EA $EA $EA
$E722 changes from $20 $D9 $E7 $DE $0E $21 to $EA $EA $EA $EA $EA $EA
CODE CHANGES FOR TRAKBALL CENTIPEDE+
$DE36 changes from $C9 $06 to $C9 $1F (maximum of 31 extra lives)
$E46B changes from $A2 $02 to $A2 $01 (# of extra lives at start of single-player game)
$E47B changes from $A2 $04 to $A2 $02 (# of extra lives at start of dual-player game)
$E616 changes from $DE $0E $21 to $EA $EA $EA (we don't want GAME OVER)
$E6D4 changes from $20 $C7 $E7 $CE $0E $21 to $EA $EA $EA $EA $EA $EA (no GAME OVER)
$E705 changes from $20 $C7 $E7 $CE $0F $21 to $EA $EA $EA $EA $EA $EA (no GAME OVER)
$E710 changes from $20 $C7 $E7 $DE $0E $21 to $EA $EA $EA $EA $EA $EA (no GAME OVER)
There was once, and always will be a PacMan Plus. Now there's a Centipede Plus. New for 2013.
NTSC Centipede+


PAL Centipede+
(There was no PAL Centipede according to my records. If you have it, gimme it and I'll "fix" it).
Centipede+'s brother, Trakball Centipede+


Does this work on SDL/MESS? Trakball emulation isn't on the ProSystem Emulator.
Whew, that was a lot of work.
NEXT UP> 7800 GALAGA