MISSILE COMMAND

The default high score table is the result of an informal two day high score contest with everyone who contributed to the game. The contest happened near the end of the game’s development, the result of which became the default table (see picture):

DFT - Dave Theurer (designer and lead programmer)
DLS - Dave Sherman (hardware lead)
SRC - Steve Calfee (Chief Engineer of Software Engineering
RDA - Rich Adam (junior programmer. Contributed many sound routines and contributed idea for bombers and satellites)
MJP - Mary Pepper (electrical engineer)
JED - Jed Margolin (Head of Special Projects in Engineering. Designed power supply and other components)
DEW - Dave Wiebenson
GJL - Gerry Lichac (Trak-Ball designer)

There's an unpopulated portion of the board that is there to drive lights on the prototype's marquee that responded to events in the game. Someone has reverse-engineered and gotten it to work though the code to drive it hasn't been found (LINK).

BUG: The 2nd manual revision has the trak-ball dip switch settings reversed.

BUG: Free cities – At about 810,000 points you’re awarded exactly 176 bonus cities. You can’t earn any more until you roll the score.

Once a player reaches screen 255 the following code is executed to calculate the point values* bonus multiplier. When the screen number ($A7) is 255,the addition of 1 gives a value of 0 in Reg A. When this is compared to 6 it is less so 0 will be used as the multiplier. In the code after label LBL295 0 is used as a counter to sum up the bonus, but when the counter is decremented the first time 0 goes to 255 causing the code to do (25*256) instead of the wanted (25*6). On screen 256 this same problem will occur. The screen number will be 0; adding 1 to this then do a LSR will give a value of 0 in Reg A.

As for why there is no attack on screen 256 the following code explains it. On screen 256 the screen number value is 0 which is used as an index in a lookup table to get the number of missiles and smart bombs for that screen. However the games programmer never expected a player to get to screen 256 so the lookup in the table is not valid. Luckily the values read are both 0, this tells the game that there are no missiles or smart bombs to launch, so the screen is over and the game just adds up the 30 missiles and the remaining cities. After this the screen number increments to 1 which is the value at the start of the game so that's why it looks like the game starts over. Hopefully that explains why Missile Command does what it does at screen 255 and 256.

In the code below entering subroutine 170 the dip switches are read and used to get the number of points for a bonus city. If the game is set to no bonus cities then the code is not run which is why the bug is not seen in TGTS. The upper 4 digits of the player score are read and stored in $98 and $99. The 6502 is put in Binary Coded Decimal mode to do the actual calculation. The bonus city value is then subtracted from the users score and if the result is not negative then the temp bonus city counter is incremented. If the players score is still positive after the subtraction then it is done again. The bug occurs when the upper 2 digits are 81. When the bonus city value of 1 is subtracted the result is 80 letting the N flag be set causing the BMI branch to be taken in error. When the bonus city calculation is done after LBL357 the temp city count is 0 because of the error, the previous bonus city value is 0x50 because of the city awarded at 800K. When we do 0 - 0x50 we get 0xb0 which is 176 added to the bonus city count. The previous city count is then updated to 0. As long as the score stays over 810K the BMI branch will be taken in error and no more bonus cities will be given until the score roles over.

 


Return to main menu