![]() |
Routines |
| Prev: DAC0 | Up: Map | Next: DC26 |
|
Read all the ports to detect a key pressed
|
||||||||
| DBAE | PUSH IY | Save IY | ||||||
| DBB0 | LD IX,$E0E0 | Set IX to the base address for the list of ports to read the keys | ||||||
| DBB4 | LD IY,$A9CC | Set IY to the address pointer of the charset for keypressed | ||||||
| DBB8 | LD B,$08 | Set B to the number of ports to read the keys | ||||||
| DBBA | PUSH BC | Save BC | ||||||
| DBBB | LD C,(IX+$00) | Set BC to the port pointed by IY | ||||||
| DBBE | LD B,(IX+$01) | |||||||
| DBC1 | LD ($A0AB),BC | Save the port at A0AB | ||||||
| DBC5 | IN A,(C) | Read the keys of the port into A | ||||||
| DBC7 | LD B,$05 | Set B to the number of bits to read to check for key pressed | ||||||
| DBC9 | LD E,$00 | Set E to the bit number to check | ||||||
| DBCB | LD D,A | Set D a copy of the result of the port reading | ||||||
| DBCC | RRCA | Rotates right A and check for the bit leaving on the right | ||||||
| DBCD | JP NC,$DBE2 | jump forward if keypressed | ||||||
| DBD0 | INC E | Increment the bit number checked | ||||||
| DBD1 | DJNZ $DBCC | Jump back until all the five bits readed | ||||||
| DBD3 | POP BC | Restore BC | ||||||
| DBD4 | INC IX | Point IX to the next port | ||||||
| DBD6 | INC IX | |||||||
| DBD8 | LD DE,$0005 | Point IY to the next set of chars for the corresponding port | ||||||
| DBDB | ADD IY,DE | |||||||
| DBDD | DJNZ $DBBA | Jump back until all the ports readed | ||||||
| DBDF | JP $DBB0 | Jump back and repeat the process from the beginning | ||||||
|
Detected a key pressed
|
||||||||
| DBE2 | POP BC | Restore BC | ||||||
| DBE3 | PUSH DE | Save DE | ||||||
| DBE4 | LD C,(IX+$00) | Set BC to the port pointed by IY | ||||||
| DBE7 | LD B,(IX+$01) | |||||||
| DBEA | IN A,(C) | Read the keys of the port into A | ||||||
| DBEC | CP D | Compare with the previously readed keys. Is the key still pressed? | ||||||
| DBED | JP Z,$DBE4 | Jump back if so | ||||||
| DBF0 | LD A,E | Set A to the bit number of the key pressed | ||||||
| DBF1 | SLA A | Computes the opcode of BIT to read the corresponent bit number: $47 - BIT 0,a | $4F - BIT 1,a | $57 - BIT 2,a | ... | ||||||
| DBF3 | SLA A | |||||||
| DBF5 | SLA A | |||||||
| DBF7 | LD D,$47 | |||||||
| DBF9 | ADD A,D | |||||||
| DBFA | LD ($A0AD),A | Save corresponent opcode of BIT into A0AD | ||||||
| DBFD | POP DE | Restore in DE the bit number of the pressed key | ||||||
| DBFE | LD D,$00 | Set IY to the corresponding address of the key pressed in the charset table at A9CC | ||||||
| DC00 | ADD IY,DE | |||||||
| DC02 | LD A,(IY+$00) | Set A to the keycode of the key pressed | ||||||
| DC05 | POP IY | Restore IY | ||||||
| DC07 | CP $20 | is SPACE the key pressed? | ||||||
| DC09 | JP Z,$DBAE | Jump back if so and check for another key reading | ||||||
| DC0C | CP $48 | is H the key pressed? | ||||||
| DC0E | JP Z,$DBAE | Jump back if so and check for another key reading | ||||||
| DC11 | LD IY,$DD4E | Set IY to the base address of the rex movement key defined | ||||||
| DC15 | LD B,$05 | Set B to the number of keys to define | ||||||
| DC17 | CP (IY+$00) | Is the key pressed now equals to the key already defined? | ||||||
| DC1A | JP Z,$DBAE | Jump back if so and check for another key reading | ||||||
| DC1D | INC IY | Points IY to the next key alredy defined | ||||||
| DC1F | DJNZ $DC17 | Jump back while there are keys defined to check | ||||||
| DC21 | LD IY,$DD4E | Set IY to the base address of the rex movement key defined | ||||||
| DC25 | RET | |||||||
| Prev: DAC0 | Up: Map | Next: DC26 |