Description of PLANE & TANK BATTLE
This information contains: General device description and differences between models:
- General description and differences between models.
- Features and controls.
- Game description.
- Trivia information.
- Some possible and believable guesses. (About internal sofware designs, etc.)
This game is found in 2 main formats: As lcd wrist watch and as handheld lcd game.
It has been sold under many different brands, including different designs per brand.
These brands include:
- Tandy / Radio Shack.
- AVI France.
- Nelsonic (This unit is a wrist watch game.)
- Mercury 3655. (This is also a wrist watch game.)
- Others... (Really, there are more...)
About the name, on units, it usually says only "Plane & Tank", but on the box and user guide booklet, it says "Plane & Tank Battle".
The name for the AVI France unit is "Bataille Air-Sol".
One MiniArcade model's name is only "Tanker".
Nelsonic watch is named "Tank Battle" or "Tanks & Planes".
The oldest reference to this game that I could find is Mercury unit, as published in Popular Mechanics July 1983, pages 76/77. Presented as one technologically advanced gadget watch. This unit is referenced to as "Mercury 3655 Plane/Tank". Pictures in that magazine show that lcd hud segments are relocated, so it does not contain exactly the same lcd image as handhelds in smaller size. That issue is online on Google Books.
I believe that handheld units date between 1985 and 1987, and probably, first released by MiniArcade.
Other differences are found in box designs. Boxes are different even for units sold under same brand and model.
All the following information is specific to MiniArcade model 737, so if you have or are familiar with other brands or models, you could find some minor inconsistencies. Examples of these, are most obviously, the names of buttons, and external aesthetical differences including design, and the constant background, presented as a printed cartoon placed behind the lcd crystal in some units, and printed on the same lcd crystal in others. Besides, it is possible to find internal differences, that is either hardware or software behaving differently, but that is uncertain, since it would have required more money investment to redesign the ROM software and/or using new hardware.
Unit has five buttons DATE, MODE, SET, LEFT and RIGHT. As already mentioned, these names are changed in other designs. Features and Controls:
- Clock in format selectable from AM/PM 12 hrs and 24 hrs cycles.
- Clock includes calendar.
- Hourly chime and alarm.
- Game in two difficulty levels: PRO 1 and PRO 2.
The game uses an LR43, LR44 or LS44 cell battery or compatible, and it lasts for about 1 whole year under heavy usage.
There are three main modes of operation:
* Normal Time Mode. Some demo slow action, HUD displays time.
* Game Mode. Action paused when not playing. HUD displays score and lives.
* Alarm Setting Mode. Action paused. HUD displays current alarm time set.
There are two submodes directly accessible from Normal Time Mode:
* Time Setting Mode, to set time.
* Hourly Chime And Alarm Toggle Mode, to toggle those features.
The HUD features 4 big digits (used for displaying hours:minutes / month day / score) and 2 small digits (used for displaying seconds / date / number of lives / AL indication). To cycle through main operation modes:
Pressing mode button, you cycle through these main modes of operation as follows:
Normal time mode =>
Game mode* =>
Alarm set mode =>
again normal time mode.
* I call Game Mode to the game related screen/scene, even when playing has not started yet.
Whenever not playing and not in Normal Time Mode, leave the unit alone for a minute and it will automatically return to Normal Time Mode.
When you are playing, you can't change operation mode. Controls in Normal Time Mode:
To enter Time Setting Mode, press SET button: demo action pauses, alarm and chime indicators disappear and seconds start to blink.
(Note: you might have to make a "doble click" on the SET button because it is not always responsive, never press it hard, because it won't still work and you might damage it. This applies when ENTERING Time Setting Mode only, then it works normally. Probably they tried to make it a caution to avoid setting wrong time accidentaly, but sometimes it works by just pressing it only once, so it is most probably a bug.)
Once in time setting mode, every time you press SET button, you select next setting item:
seconds => hours => minutes =>(*) month => day => (*)again seconds.
(*) At these points, hud changes between displaying time and calendar. Calendar format is month day.
The current setting item is the blinking one.
When you have the desired item blinking, you press LEFT button to increment the value by one, or you can hold this button for fast continuous increments, except when setting seconds which reset to 00 (If seconds are >= 30, minutes also increment in 1).
For the calendar, February is always 28 days long when it auto increments at AM 12:00 o'clock but you can manually set it to month 2 day 29, as required every 4 years.
After you have set the time, press mode to return to Normal time mode, demo action resumes, alarm and chime indicators reapper if so activated.
Again in Normal Time Mode, press and hold RIGHT button to enter Alarm and Hourly Chime Toggle Mode. Demo action goes to pause, and HUD changes to current alarm time. Without releasing RIGHT button, press MODE several times to toggle the alarm and hourly chime indicators, in the following sequence:
Hourly chime on, alarm off => both on => hourly chime off, alarm on => both off => restart.
If you leave the hourly chime activated, the device beeps at every o'clock hour. If you leave alarm activated, the unit will sound for 20 seconds when it is alarm time. These features only work if device is in Normal Time Mode when those events happen.
Release RIGHT button when you're done, to return to Normal Time Mode.
In Normal time mode, you toggle display of seconds/date in small digits place by pressing DATE button. There is no display for month number other than when setting time.
In Normal time mode, you toggle the AM/PM 12 hrs or 24 hrs cycles by holding LEFT button down for a second. If it is an hour earlier than noon and later than AM 1:00, you won't be able to distinguish which hours cycle you had selected, since there is no AM indicator, only PM. Controls in Game Mode:
When not playing, in Game mode, you select difficulty level by pressing SET button, indicated by PRO 1 and PRO 2 segments at bottom of screen.
When not playing, in Game mode, press and hold DATE button and current highscore will be shown, when you release the button, game starts and score is shown. When playing, you can't pause, and can't quit by pressing MODE button, the only way to quit is to lose all lives. The unit keeps two highscores, one for PRO1 and one for PRO2 game difficulty levels.
When playing, only working buttons are LEFT and RIGHT, use them to move the tank one position per every button press. Controls in Alarm Setting Mode:
Alarm Setting Mode behaves much the same as Time Setting Mode, except you can only select hours and minutes by pressing SET button. Increment the blinking item pressing LEFT button, or return to normal time mode by pressing MODE button. Alarm time is displayed in same 24 hrs or AM/PM 12 hrs cycle format as selected in Normal Time Mode. Reset:
This game doesn't automatically reset (ACL, all clear?) when battery is just inserted, so you have to manually do it, as recommended by manual, in case that game malfuctions due to some garbage data left in RAM memory. To do this, press all buttons for a moment, all segments will be displayed, when you release buttons, the unit is reset. Game description:
Game consists in controling and saving battle tanks. As you play, there are three planes dropping bombs on you.You have to avoid these bombs and save the tanks by making them cross the bridge to the fortification.
Additionally, the bridge goes up and down in contanst intervals of time. When the bridge goes up, you can't cross and a STOP signal is displayed. Then this signal goes changing into WAIT, READY and finally GO, when the bridge gets down and you can cross. Every time you cross the bridge, another tank appears on left, under the cave. This is a safe position, where bombs can't affect you. But if you stay there for 5 seconds, tank automatically gets out. Once it got out, it can't return.
Number of lives is displayed in small digit on the HUD, next to score. At the begining, you have 4 lives.
Every 3 bombs avoided, you get 1 point.
Every time you cross the bridge, you get 10 points.
When you reach 200 or 500 points, you get an extra life. As score wraps to 000 after 999 points, you can get extra lives again, and the maximum number of lives is 9.
Of course, when a bomb gets to you, a life is lost. When the number of lives reaches 0, game is over.
PRO 1 is game in normal speed, until you reach 500 points, when it goes to fast speed.
PRO 2 is game in fast speed. PRO 2 always goes the same speed.
In PRO 1, after getting more than 999 points and wrapping score counter back to 000, game will eventually return to initial PRO 1 speed.
The game doesn't only count on speed to get harder. It also relies on number of bombs thrown by planes. In scores 000 - 099, you have the minimum quantity of bombs. In scores 100 - 599, you have a bigger quantity of bombs. Finally, in scores 600 - 999, you have to be a real experienced gamer if you want to survive.
Finally, this game is usually considered a basic "avoid the items by moving left or right" game. But indeed, it is quite a complex game, giving you random like sequences of bombs, with increasing difficulty as player progresses, both by adding more bombs and by speeding up, and it also presents a goal for the player to get. And most important, it is one of the most playable and fun lcd games of that time. Although this is just an opinion from this text's author. Some trivia information:
Next, some trivia about this game. Ranging from obvious to not so obvious info, and as a bonus, an invulnerability cheat and a time bug.
From here on, when I say game demo, I mean the slow action demo displayed when game is in Normal Time Mode. When I refer to a tank position, I assigned number 1 to position under cave, and count up as it moves to the right.
All the following paragraphs are not necessarily related to each other. Instead, they contain individual pieces of info. OBVIOUS INFO
Bombs usually appear on empty space, and not under planes.
There are really 3 action speeds, and not 2. In Normal Time Mode, there is a demo action which is even slower than initial PRO 1 speed. VERY SLOWLY. Maybe they initially wanted to make PRO1 even slower with three different speeds as score increased. It is good they didn't include the slowest speed when playing, which would have been too boring.
There are four columns of bombs. These move one column after another and are sync'ed to planes movements. Everytime planes move, one column of bombs move.
So planes/bombs movements ratio is 4:1. Each column of bombs has five possible positions.
Bridge has a constant period: 3.5 seconds STOP signal, 0.5 secondsWAIT, 0.5 seconds READY signals, and 3.5 seconds GO and bridge down. That is: 4.5 seconds blocked, 3.5 seconds unblocked.
After 1000 points, score returns to 000, but in PRO 1, speed doesn't get slower immediatly. It makes you keep an open eye for the sudden slow down which may be dangerous since your movements unexpectedly get out of sync and you may lose a life. It is a code in the main clock seconds counter that checks for the speed reduction. I've made tests, with another watch sync'ed to game main clock, and everytime game returned to slow, moved my eyes to the other watch and it was displaying seconds equal to 00.
There are some wrong informations in some user manuals. Therefore, you could think maximum number of lives is 6 instead of 9, for example. Also, some manuals imply you can play without sound, which is also incorrect. That leads me to think that there can actually be differences in the internal hardware and/or software across different brands. But I can't prove it. Nevertheless, if you have another brand/model, you can compare to this info and make your own conclusions.
There is no need to press all five buttons to ACL (All Clear?) reset the unit. You can leave DATE button released. Not all variables are clear after reset. If you reset, pay attention to the first bombs dropped in game demo, then reset again and pay attention to the first bombs again, you would see that they are not always the same.
On some boxes, there is a screenshot that seems true to original, but at closer look, lcd segments are only black silhouettes, and in real game they are very detailed images (Probably, segments shown in these boxes are taken from a wrist watch unit, I don't know for sure, but it seems feasible that the wrist watch unit has less detailed segments, given its small screen size) NOT SO OBVIOUS INFO
Game pauses for 2 to 3 seconds whenever you lost a life or you earned an extra life. Nevertheless, bridge keeps on going during those pauses. The precise duration for this pause is sync'ed to main clock seconds. It last through 3 main clock seconds increments, that is, 2 whole seconds plus the fraction of the actual second when event happened. The sound emited is also sync'ed to this.
There are some interesting effects when pressing more than one button at same time. They usually mimic pressing the first button again, but not always. These don't seem to be hardware related, since pressing the same sequence, these behaviour change according to main sate. Bug:
In Time Setting Mode, you can independently set month to any value in range 1-12 and day to any value in range 1-31.
FIRST POINT is: You can even set INVALID DATES. Example: month 2, day 30; or month 6, day 31.
But when you return to Normal Time Mode, date is validated or corrected. This validation compares day number to 30 or 31 depending on month number. So if you set month 6 day 31, when you return to Normal Time Mode, date is corrected to month 7 day 1, that is because month 6 (June) is only 30 days long.
At AM 12:00, date is automatically updated: Usually, date returns to day 1 after day 30 or 31 (or 28th), depending on month number, and month is incremented.
SECOND POINT is: As long as you don't have INVALID DATES, it works correctly.
The trick is to combine the FIRST POINT with the SECOND POINT. The date correction/validation occurs only when you LEAVE the time setting mode. So you can momentaneously have an invalid date. If date is automatically incremented when you have an invalid date, things go wrong.
Follow this steps to make the bug show: When day number is 32
- Enter time setting mode.
- Set invalid date month 4, day 31.
- Set time to PM 11:58 (It doesn't matter if it reads 23:58 instead).
- Never return to Normal Time Mode until it is AM 12:00, so keep pressing SET button from time to time to avoid the game returning automatically to Normal Time Mode (So date won't be corrected.).
- At AM 12:00, date will update to month 4, day 32. There you have it!
Now you can manually increment it or let it increment once a day by itself.
If you reenter Time Setting Mode, the bug remains only for shorter months (only 30 days long months), for longer months and February, date is corrected. For other greater day numbers
These corrections are left aside if you set day to number >= 33, for any month except 2.
For month 2, the bug only remains if you set day to any number >= 40, because for month 2, the correction code checks if first digit in day number is 3. Therefore, day number is most probably saved as 2 BCDs (binary coded decimal).
As days go by, day number will keep on counting until it reaches 99. After that, it will jump back to 20 and month will not be incremented until day number reaches past 30 or 31 (or 28) again. I don't know what causes it to jump from 99 to 20. It might be binary related but I can't figure exactly how. Cheat:
When playing, normally tank automatically gets out of cave after 5 seconds of inactivity. When you press the right button to cross the low bridge and get 10 points, hold it down. Tank respawns under cave as normal but as long as you hold button down, your tank stays in safe. Pretty boring but fine if you can't defeat your friend's highscore. You can rest your thumb if you change buttons without leaving all af them released at the same time. Just do not use MODE button since this one doesn't work. When you release the button, wait 5 seconds and tank moves out of there as expected. The give me a break kind of a cheat:
This is not really a cheat, until its inner workings is completely devailed.
It makes game stop dropping bombs at you for at most 1 whole minute, as long as you don't move either.
You have to play in PRO 2, it seems to be easier with score over 100. You also need another clock with seconds display sync'ed to game main clock.
You have to move tank to position 3, which correspond to the second column of bombs. Try to stay the longer you can in there, when you have a bomb on you, that is when there is a bomb in the last position of said column, move only one position backward to avoid that bomb. Right when position 3 gets clear again, return your tank to that position. Ideally, you should make only two movements each time: 1 to avoid the bombs, and 1 to return as soon as posible. Always wait until the last bomb segment in that column is clear before you return. Do these things exactly as described, the least you move, the better, and repeat it the times it takes. The game will eventually stop dropping bombs.
If score is > 100, it seems that game always restart putting bombs when seconds displays 00 or 01.
If the trick is activated at seconds 58, you won't even notice, but you can try all the times you need. If you manage to activate the trick at seconds 01, you might get lucky and get almost 1 whole minute of relax.
If you have less than 100 points, the trick also works, but it is more chaotical, and usually doesn't last more than a few seconds.
Remember, if you move, bombs start falling again immediatly. Other interesting thing: If you don't move but you press DATE or SET button, bombs also start falling again. MODE button doesn't interrupt this relax. Play on the radio trick:
Last, an interesting trick which is appliable to many different lcd games: Turn on a transistor AM radio tuner. Tune some empty frequency, but choose one without too much background noise. Put the game unit close to it and play. There you have it. It sounds awful on the radio!
Note: I think AM band is called MW in some countries. Depending on the tuner internal design, you should put the game next to it, behind it, on it, or try moving it around by the tuner. Some possible and believable guesses on internal functioning:
This section is more related to programmers'point of view, but I tried to make it understandable for everyone, if not in details, at least in global idea.
This section is a freedom that I took in order to expose other ideas and questions.
Issues from here on, are subject to correction or deletion as time goes by and new info is available.
For this and the following sections, everytime I say "one button", I mean any button except MODE, unless I explicitly include that too. About the sequence of bombs:
Here, we try to discover a way to duplicate the sequence which would allow to implement an accurate simulator.
For a while, study the sequence of bombs that fall in game demo. It is a short sequence that repeats and repeats and it won't take you long before you start recognizing it. But when you play, you always see random sequences.
But you can get the same sequence when playing if you make tank stay under cave by using the cheat described earlier. The sequence remains the same always, but as score increases, it replaces some empty places with new bombs. Other way to get the same sequence in any tank position is to hold one button down but this way it is harder to keep for long.
Here, I'll call this the "special sequence", in contrast to the other "general sequences".
Given that these processors are not fast, have very limited amount of RAM and ROM, and don't have a huge instruction set, one could be sure that it must implement some kind of simple algorythm to generate the sequence of bombs. As the CPU would have 16 opcodes at most, forget about MULs, DIVs and stick to ADDs, SUBs, INCs and DECs and SHIFTs.
With that guess as a base, I managed to reproduce that special sequence, by simply using two 4 bits vars which I call rowcounter and output. Not telling how I got it since that'd be way too long as it wasn't so easy, even if by seeing it you would think it was, I only give the current findings.
The 4 bits output, represents a whole row. A 1 bit represents a bomb, and a 0 bit represents an empty space. For example, decimal 11, is binary 1011, which is bomb-space-bomb-bomb. Please consider that it isn't easy to visualize, since columns of bombs move one after another, you should consider a row value according to its state right after the fourth column has moved and before the first column moves again. In game demo, you can "pause" the action by holding right button down, which helps.
This row output could be any number in range 00-15 decimal, but some values are replaced by 00 depending on current score, i.e., a whole row replaced by empty space.
For scores <100, output values 01, 02, 03, 04 are set to 0.
For scores <600, output values 07, 12, 13, 14 are set to 0.
Output value 15 is never achieved.
When first column is about to move, we increment rowcounter. If it equals 15, we clear it to 0.
We copy rowcounter into output with bits pair 3-2 and bits pair 1-0 interchanged. And that's it, it should give you this sequence: 00, 04, 08, 12, 01, 05, 09, 13, 02, 06, 10, 14, 03, 07, 11.
Then according to current score, you should clear some output values to 00. In game demo, you get the same sequence as in score = 0, so you would see 00, 00, 08, 00, 00, 05, 09, 00, 00, 06, 10, 00, 00, 00, 11.
This is checked by playing at all scores and proved accurate.
So far, the problem is that this is a special case algorythm, it doesn't work in general situations, only when you maintain the tank under cave, or you hold one button down.
Next, some examples of general sequences.
In PRO 2, for tank position 3, bombs will fall in the following sequence: 11, 10, 09, 08, 00, 06, 05, ... which is a downcounting sequence replacing some rows by 00 given the current score, but sometimes any of the rows could be repeated once or more, like 11, 10, 09, 08, 08, 08, 00, 06...
It is easier to see position 3 sequence, if you achieve the "give me a break" cheat, and wait for bombs to restart falling, and even easier, if you first fill a grid paper with the sequence decoded into items to fall.
For tank position 2, the sequence seems to be 05, 06, 00, 08, 09, 10, 11, 00... which is an upcounting sequence, and you also get the random row repetition.
These are candidates to play a role in the sequence generation:
It seems there is an event, which triggers a row repetition.
It also seems that either tank position or last button pressed plays another role in the sequence of bombs.
Another possible factor is that rowcounter increments at fixed speed, since those general sequences don't seem to be the same in PRO 1, although special sequence is still there. For this, we should consider the interrupts explained in the following topic.
I know this info here is vague, there is some more, but it wouldn't enlighten, so I've just put these examples to give a general idea.
So far, I have been unsuccesful in writing an algorythm that faithfully reproduces the exact sequences in all general cases, but I think I'm on good road. Any enlightening suggestion is welcome. About the speeds:
Processors attend a certain number of interrupts per second. These interrupts could be self generated or received from processor external circuitry. According to the applications needs, it could be time related on different numbers of ints/sec. Nevertheless, for these lcd games (198?), it is probable that the number of ints is a small power of 2, ranging from 16 to, a huge improbable 128 at most.
These interrupts are used as the real time base, all movements are dependant to them, and these movements can give us clues about this quantity.
It takes 8 movements to a plane to return to original position, that is, it must go through the six visible positions, plus two unseen positions (out of screen). When the formation leaves the screen to the left, there is a moment in which there is only one plane on screen, the other two are in those unseen positions. Then they reappear on the right.
Let's choose a reference segment to count planes movements in one minute. If you select Game Mode but don't start the game, you can see the segment of the first plane. That will be our reference segment. When you reset the game, planes start at same position. Do it, and forget about the planes, keep your eyes only on that reference segment and count how many times it goes from OFF state to ON state
until seconds become 00 again. It should be easy since you have the seconds display near that segment. Everytime it changes state to on, it means that first plane completed one full cycle. In a minute you'll have counted exactly 12. That means, the first plane made 12 complete cycles and as it takes 8 movements to complete the cycle, that is 96 planes movements in 60 seconds in Normal Time Mode.
Now if you suppose that the processor responds to 16 ints/sec, it is the same as 960 ints/min (multiplied by 60, the seconds in a minute) .
If you divide 960 ints / 96 movements you have exactly 10 ints / 1 movement.
That is a nice round exact division!
That means that probably the program increments a GLOBAL COUNTER in the interrupt handler code, this counter is meant for many uses. There should be another related ACTION COUNTER sync'ed to that. In game demo, this ACTION COUNTER is loaded a value of 10.
At every interrupt ticks, this counter decrement. When the ACTION COUNTER reaches 0, it is reloaded with original value, and planes move one position, along with one column of bombs.
Using same technique, but with a digital watch next to me to display seconds, I measure the planes movements in PRO 1 speed, I counted 30 complete planes cycles in one minute, which results in 240 movements per minute, that is 960 ints / 240 moves, exactly 4 ints / 1 move.
And as for PRO 2, I counted 60 complete planes cycles, which results in 480 movements in 1 minute, that is 960 ints / 480 moves, exactly 2 ints / 1 move.
Note that you could have the same speeds using a bigger number of ints pers sec, but that would be a too much big number for this kind of games, and if real number was 32 ints/sec, you would have to countdown from 20 before moving items in game demo, and 20 doesn't fit into a 4 bits var.
If this is not correct, at least we know for sure the following:
Items move once every 1 sec / 16 * 10 in game demo (once every 0.625 secs).
Items move once every 1 sec / 16 * 4 in PRO 1 (once every 0.25 secs).
Items move once every 1 sec / 16 * 2 in PRO 2 (once every 0.125 secs). About internal data representation:
Software doesn't use a 4 bits integer variable to represent tank position (like playerPos = 0; playerPos++;). It uses bit shifts to move the tank (like playerPos >>= 1; or playerPos <<= 1;).
It seems there is a small window of RAM addresses reserved for lcd segments. Write a nibble in one of this addresses and you toggle on/off 4 segments at once. In contrast, I believe hud digits are stored in 6 binary coded decimals, and automatically decoded into lcd segments by hardware. How to get to this:
You might kill your unit by trying the following! Do it only at your own will and risk. Don't blame me later. One friend of mine destroyed his game doing it in front of me. I saw it does kill your game! *********
You have to make game malfunction to check it. Not recommended, just believe what you read below.
As the unit does not ACL (reset) when battery is inserted, it is easy to make it malfunction by slightly moving the battery when playing. It has to be a very very slight movement.
It is difficult to do it, one has to try over and over again, but sometimes, if you do it while playing, 2 tanks appear.
If the software represented the tank position as an integer position from 0 to 6, the two tanks would be there only until you press the button to move (You'd increment position, and redraw at new position.). Nevertheless, when there were two tanks, you could move them both at same time. When one of them is blocked for the move, both are blocked. If one of them gets hit by a bomb, both are destroyed and one life is lost.
When the tank in front crosses the low bridge, both advance one position, and both disappear when tank respawns under cave, leaving you with only one tank.
Only way to do it is by storing the tank position as as 1 bit and then shifting it to the left or right.
Planes are also moved by using bit shifts. They are also affected by these malfunctions and sometimes you ended up with only one plane, or four, etc. Even with spaces inbetween them. That number of planes will remain for the rest of game.
With all this, probably bombs are also moved by bit shifts.
One thing to note: 1 single nibble (4 bits) is not enough for all tank positions: there are five active tank positions, plus the positions when you cross the bridge, and the destroyed tank. For playing position, one should consider the use of the carry bit in order to shift the bit beyond the 4 bits nibble.
The destroyed tank position seems to share the nibble used by PRO 1 and PRO 2 segments. When game is over, the destroyed tank remains under bridge. If you want to play again in other difficulty level, you'll press SET button to change difficulty setting and destroyed tank will disappear when PRO1/2 indicators toggle.
In C, the code would be something like:
(Of course, the language should be assembler, but it is just to explain the idea.)
/*Game Over. Press set button*/
/* Destroyed tank bit is set in difficultyNibble, which is a 4 segments mapped var. */
if(difficultyNibble & PRO1bit)
difficultyNibble = PRO2bit; /* Clears destroyed tank. */
else difficultyNibble = PRO1bit; /* Also clears it. */
One single nibble is not enough to store all bombs position in a column. I think that either the last or first row is treated in a separate nibble.
Moving the battery there are other curious interesting malfunctions which give clues about internal sofware design:
About implementation itself and why are there games so similar:
- When you play: score with lower 2 digits or upper digit blinking like when you set the time.
- Normal play but hud shared between normal time and score: Hud displays time, increment score and HUD shows score for a while, until seconds digits increment, then hud displays time again.
- Keep on moving the tank while rest of action (bombs, planes and bridge) is paused.
- Fake tens digit in lives counter. That is, it reads for example 24 instead of 4, but when it reaches 20, game is over.
- Normal Time Mode, with game sound in PRO 2 speed.
There are some games which are controled by exactly the same button presses. They emit the same sound effects and when you interchange their lcd screens, they keep on working normally but showing new drawings. Even they put the same sequence of items when playing. You could wonder why.
The reason is that the processor used is an all in one chip, which includes RAM, ROM, and other things.
The game maker writes the program ROM and gives a binary file to the CPU manufacturer which then includes this file into the ROM section of the CPU.
The expensive part is making the "masks" used for the ROM implementation.
So it is cheaper having 20000 CPUs all with the same ROM program than having 10000 CPUs with one program and another 10000 CPUs with other program.
If 20000 copies of same game seems to much to sell, you could change game by only ordering/making new themed lcd screens. Then you would sell 5 different games, 4000 copies each, which share same software.