![]() |
Routines |
| Prev: FE00 | Up: Map | Next: FE7E |
|
This is the input routine for Protek (cursor) joysticks. The Protek interface maps Up/Down/Left/Right/Fire to keys 7/6/5/8/0.
|
||||||||
| inputroutine_protek | FE47 | LD BC,$F7FE | Load BC with the port number of the keyboard half row for keys 1/2/3/4/5 | |||||
| FE4A | IN A,(C) | Read that port. We'll receive xxx54321 | ||||||
| FE4C | CPL | The keyboard is active low, so complement the value | ||||||
|
Check for left
|
||||||||
| FE4D | AND $10 | Is '5' pressed? | ||||||
| FE4F | LD E,$03 | left_right = input_LEFT | ||||||
| FE51 | LD B,$EF | Load BC with the port number of the keyboard half row for keys 0/9/8/7/6 | ||||||
| FE53 | JR NZ,inputroutine_protek_0 | Jump forward if '5'/left was pressed | ||||||
|
Check for right
|
||||||||
| FE55 | IN A,(C) | Read that port. We'll receive xxx67890 | ||||||
| FE57 | CPL | The keyboard is active low, so complement the value | ||||||
| FE58 | AND $04 | Is '8' pressed? | ||||||
| FE5A | LD E,$06 | left_right = input_RIGHT | ||||||
| FE5C | JR NZ,inputroutine_protek_0 | Jump forward if '8'/right was pressed | ||||||
| FE5E | LD E,$00 | Otherwise left_right = 0 | ||||||
| inputroutine_protek_0 | FE60 | IN A,(C) | Read $EFFE again | |||||
| FE62 | CPL | The keyboard is active low, so complement the value | ||||||
| FE63 | LD D,A | Save a copy of the port value | ||||||
|
Check for up
|
||||||||
| FE64 | AND $08 | Is '7' pressed? | ||||||
| FE66 | LD A,$01 | up_down = input_UP | ||||||
| FE68 | JR NZ,inputroutine_protek_1 | Jump forward if '7'/up was pressed | ||||||
|
Check for down
|
||||||||
| FE6A | LD A,D | Restore the port value | ||||||
| FE6B | AND $10 | Is '6' pressed? | ||||||
| FE6D | LD A,$02 | up_down = input_DOWN | ||||||
| FE6F | JR NZ,inputroutine_protek_1 | Jump forward if '6'/down was pressed | ||||||
| FE71 | XOR A | Otherwise up_down = 0 | ||||||
| inputroutine_protek_1 | FE72 | ADD A,E | Combine the up_down and left_right values | |||||
| FE73 | LD E,A | |||||||
|
Check for fire
|
||||||||
| FE74 | LD A,D | Restore the port value | ||||||
| FE75 | AND $01 | Is '0' pressed? | ||||||
| FE77 | LD A,$09 | fire = input_FIRE | ||||||
| FE79 | JR NZ,inputroutine_protek_2 | Jump forward if fire was pressed | ||||||
| FE7B | XOR A | fire = 0 | ||||||
| inputroutine_protek_2 | FE7C | ADD A,E | Combine the (up_down + left_right) and fire values | |||||
| FE7D | RET | Return | ||||||
| Prev: FE00 | Up: Map | Next: FE7E |