The game was inspired by the old games, usually found on cheap devices for "gaming". The purpose of the game is to dodge the incoming "cars" by moving up or down. There are four difficulties randing from EASY
to IMPOSSIBLE
. You can get hit 3 times as there is a health system (displayed on the bar graph
). The game also has background sounds and diffrent sounds for each action.
When the FGPA
Board first loads, press one of the difficulty selection buttons 1
2
3
X
Buttons on the keypad in order to start the game. The bar graph (top right with 10 segments, only 8 working) will light up from the left to the right. When the loading time ends, the game will start by spawning diffrent obstacles on the right. You are the left most display.
Marked with P
is the Player, marked with X
are obstacles, marked with _
will be empty spaces.
Difficulty Level | Layout | Description |
---|---|---|
1 | P____X |
Spawn only one obstacle at a time |
2 | P__X_X |
Spawn two obstacles |
3 | PX_X_X |
Spawn three obstacles |
X | PXXXXX |
Fill all the possible displays with an obstacle |
Health is displayed on the Bar Graph at the start of the game (after difficulty selection). The starting default health of the player is three (3). After each hit with a obstacle, the bar graph will turn off one segment. If the health is one (1) and the player gets hit, the game is over, the board plays a sound and restarts to the difficulty selection menu.
Each game has a sequence of a given size (6 by default) that is randomly generated by a Python script (MU0PAL
). After the program has passed the sequence once, it will start looping the same sequence. All obstacles get spawned on dp0
, the digit on the right, and shift every delay to the left. Your goal is to the dodge the obstacles for as long as possible.
After loading the program on the FGPA
Board, you will have to select a difficulty (Start of game). After that your player gets spawned and obstacles start appearing. You can move your player in two dirrections:
- UP, by pressing the left switch
- DOWN, by pressing the right switch
Both switcehes can be found on the top, left side of the FGPA
Board. Pressing both buttons at the same time will not move the player.
MU0 Has a small limited set of instructions.
Code | Mneomonic | Use | Description |
---|---|---|---|
0000 | LDA | LDA S | Load the value S into the ACC |
0001 | STA | STA S | Store the value from ACC into S |
0010 | ADD | ADD S | Add S to ACC (ACC = ACC + S ) |
0011 | SUB | SUB S | Sub S from ACC (ACC = ACC - S ) |
0100 | JMP | JMP S | Set the PC to the value of S |
0101 | JGE | JGE S | Set the PC to the value of S if ACC >= 0 |
0110 | JNE | JNE S | Set the PC to the value of S if ACC != 0 |
0111 | STP | STP | Stop the program from running. |
The following memory locations have been alocated for accessing the FGPA Board
features:
EQU | Feature | Address | Description |
---|---|---|---|
kr1 | KeyRow 1 | &FEF | Using the AC button for sending the KILL signal to the system. |
kr3 | KeyRow 3 | &FF1 | Using the 1 2 3 X buttons for choosing difficulty. |
kr4 | KeyRow 4 | &FF2 | Using the RESET button to FLUSH the displays and SHIFT for tests. |
ksw | Switch | &FEE | Using the two switches for moving the player (display5 ) up or down. |
bzz | Buzzer Input | &FFD | Used for playing "music". |
bsy | Buzzer Busy | &FF3 | Decide if buzzer can play the next sound. |
dgb | Graph Bar | &FFE | Display loading times. |
EQU | Display | Address | Description |
---|---|---|---|
dp0 | 0 | &FF5 | Obstacle |
dp1 | 1 | &FF6 | Obstacle |
dp2 | 2 | &FF7 | Obstacle |
dp3 | 3 | &FF8 | Obstacle |
dp4 | 4 | &FF9 | Obstacle |
dp5 | 5 | &FFA | player |
DEFW | Type | Description | Default |
---|---|---|---|
nul | constant | Constant decimal value | 0x0 |
one | constant | Constant decimal value | 0x1 |
six | constant | Constant decimal value | 0x6 |
top | signal | Seven-Segment Decoder signal for top segment | 0x1 |
mid | signal | Seven-Segment Decoder signal for middle segment | 0x2 |
bot | signal | Sever-Segment Decoder signal for bottom segment | 0x3 |
fff | constant | Bar Graph full display, turn on all 8 segments | 0xFF |
php | variable | Store the health value of the player, used for the bar graph | 0b0111 |
ph3 | constant | Used to set player health to 3/3 | 0b0111 |
ph2 | constant | Used to set player health to 2/3 | 0b0011 |
ph1 | constant | Used to set player health to 1/3 | 0b0001 |
hlt | signal | Default (1), goes to (0) on halt |
0x1 |
krt | key | Key value of Reset on KeyRow 4 |
0x80 |
kst | key | Key value of AC on KeyRow 1 |
0x02 |
ksa | key | Key value of C on KeyRow 1 |
0x04 |
ksf | key | Key value of Shift on KeyRow 4 |
0x40 |
df1 | key | Key value of 1 on KeyRow 3 |
0x20 |
df2 | key | Key value of 2 on KeyRow 3 |
0x10 |
df3 | key | Key value of 3 on KeyRow 3 |
0x08 |
dfx | key | Key value of X on KeyRow 3 |
0x04 |
tmv | switch | Key value of left switch move up |
0x01 |
bmv | switch | Key value of right switch move down |
0x02 |
mmv | switch | Key value of both switches, move middle | 0x03 |
dly | delay | Global delay time for each loop | 50000 |
dlc | delay | Initial load screen number of loops | 0x7 |
dlp | delay | Skip/Input number of loops | 0x2 |
sqc | sequence | Count current sequence, added to sequence jump | 0x0 |
sma | sequence | Max sequence count, used as max limit | 0x6 |
dff | variable | On start/restart store selected dificulty | 0x0 |
jop | operation | Value of JMP jump operation |
0x4000 |
spr | sound | Reset sound | 0b1000010001001000 |
sht | sound | Stop sound | 0b1000010000010001 |
sdu | sound | Move up sound | 0b1000001001010110 |
smd | sound | Move down sound | 0b1000001000110110 |
sgo | sound | Hit sound | 0b1000001000010000 |
sbm | sound | Background (every tick) sound | 0b1000001000100011 |
Label | Description |
---|---|
mrst | Reset or Stop the program based on hlt |
mlal | Set the value of all displays (dp ) to the value in ACC |
mtop | Move the player (dp5 ) up by one segment |
mbot | Move the player (dp5 ) down by one segment |
shift | Move contents of obstacle displays to the left by one, then spawn next (mcemp ) |
mcemp | Check the status of each display based on dff then jump to sequence |
mhit | On player collision with obstacle, check health (php ) and substract one bar or reset game if dead |