![]() |
Routines |
| Prev: BDDE | Up: Map | Next: BF0D |
|
Used by the routine at PLAYER_LEGS.
Reads the keyboard or a joystick, by the method in bits 1-2 of CONTROL, into one byte for this turn, kept in INPUT for the rest of the turn's code (CHK_PICKUP_DROP, FIRE). Bit 5 is never set, nor bit 7.
The keyboard: Z, C, M and B turn left and X, V, SYMBOL SHIFT and N right; the whole of the A-G and H-ENTER rows walk; Q, E, T, U and O jump; W, R, Y, I and P fire; any number key picks up or puts down. Every key in a half-row does the same, except the top letter row, which is shared between jump and fire key by key. SPACE and CAPS SHIFT do nothing here; PAUSE reads SPACE for the pause.
A joystick: left and right turn, up walks, down jumps and fire fires, and any key on the bottom row but CAPS SHIFT and SPACE picks up or puts down. The Kempston stick is read from port 31; the cursor keys are 5 left, 8 right, 7 up, 6 down and 0 fire; Interface II is the 6-0 keys for one stick and 1-5 for the other, read together. Knight Lore's joysticks also had direction controls with pick-up moved to bit 5; Pentagram offers neither.
|
||||||||||
| READ_CONTROLS | BDF8 | LD A,(CONTROL) | bits 1-2 of CONTROL: 0 keyboard, 1 Kempston, 2 cursor keys... | |||||||
| BDFB | RRCA | |||||||||
| BDFC | AND $03 | |||||||||
| BDFE | JP Z,READ_KEYBOARD | |||||||||
| BE01 | DEC A | |||||||||
| BE02 | JR Z,READ_KEMPSTON | |||||||||
| BE04 | DEC A | |||||||||
| BE05 | JR Z,READ_CURSOR | |||||||||
|
Interface II: its two sticks are the keys 6-0 and 1-5.
|
||||||||||
| BE07 | LD A,$F7 | ...3 Interface II: keys 1-5, their order reversed into C, so that 5 is bit 0 and 1 is bit 4, the same as 0 and 6 on the other half-row | ||||||||
| BE09 | CALL READ_KEYS | |||||||||
| BE0C | PUSH BC | |||||||||
| BE0D | LD B,$05 | |||||||||
| READ_CONTROLS_0 | BE0F | RRA | ||||||||
| BE10 | RL C | |||||||||
| BE12 | DJNZ READ_CONTROLS_0 | |||||||||
| BE14 | LD A,C | |||||||||
| BE15 | POP BC | |||||||||
| BE16 | LD C,A | |||||||||
| BE17 | LD A,$EF | OR in keys 6-0: bit 0 fire (0 or 5), 1 up (9 or 4), 2 down (8 or 3), 3 right (7 or 2), 4 left (6 or 1) | ||||||||
| BE19 | CALL READ_KEYS | |||||||||
| BE1C | OR C | |||||||||
| BE1D | LD C,$00 | fire | ||||||||
| BE1F | BIT 0,A | |||||||||
| BE21 | JR Z,READ_CONTROLS_1 | |||||||||
| BE23 | SET 6,C | |||||||||
| READ_CONTROLS_1 | BE25 | BIT 1,A | up: walk | |||||||
| BE27 | JR Z,READ_CONTROLS_2 | |||||||||
| BE29 | SET 2,C | |||||||||
| READ_CONTROLS_2 | BE2B | BIT 2,A | down: jump | |||||||
| BE2D | JR Z,READ_CONTROLS_3 | |||||||||
| BE2F | SET 3,C | |||||||||
| READ_CONTROLS_3 | BE31 | BIT 3,A | right: turn right | |||||||
| BE33 | JR Z,READ_CONTROLS_4 | |||||||||
| BE35 | SET 1,C | |||||||||
| READ_CONTROLS_4 | BE37 | BIT 4,A | left: turn left; then the bottom row for pick-up | |||||||
| BE39 | JR Z,READ_CONTROLS_5 | |||||||||
| BE3B | SET 0,C | |||||||||
| READ_CONTROLS_5 | BE3D | JP READ_BOTTOM_ROW | ||||||||
|
The Kempston joystick: bit 0 right, 1 left, 2 down, 3 up, 4 fire.
|
||||||||||
| READ_KEMPSTON | BE40 | IN A,($1F) | right: turn right | |||||||
| BE42 | LD C,$00 | |||||||||
| BE44 | BIT 0,A | |||||||||
| BE46 | JR Z,READ_CONTROLS_6 | |||||||||
| BE48 | SET 1,C | |||||||||
| READ_CONTROLS_6 | BE4A | BIT 1,A | left: turn left | |||||||
| BE4C | JR Z,READ_CONTROLS_7 | |||||||||
| BE4E | SET 0,C | |||||||||
| READ_CONTROLS_7 | BE50 | BIT 2,A | down: jump | |||||||
| BE52 | JR Z,READ_CONTROLS_8 | |||||||||
| BE54 | SET 3,C | |||||||||
| READ_CONTROLS_8 | BE56 | BIT 3,A | up: walk | |||||||
| BE58 | JR Z,READ_CONTROLS_9 | |||||||||
| BE5A | SET 2,C | |||||||||
| READ_CONTROLS_9 | BE5C | BIT 4,A | fire; then the bottom row for pick-up | |||||||
| BE5E | JR Z,READ_CONTROLS_10 | |||||||||
| BE60 | SET 6,C | |||||||||
| READ_CONTROLS_10 | BE62 | JP READ_BOTTOM_ROW | ||||||||
|
The cursor keys: 5 left, 6 down, 7 up, 8 right, 0 fire.
|
||||||||||
| READ_CURSOR | BE65 | LD C,$00 | 5: turn left | |||||||
| BE67 | LD A,$F7 | |||||||||
| BE69 | CALL READ_KEYS | |||||||||
| BE6C | BIT 4,A | |||||||||
| BE6E | JR Z,READ_CONTROLS_11 | |||||||||
| BE70 | SET 0,C | |||||||||
| READ_CONTROLS_11 | BE72 | LD A,$EF | 0: fire | |||||||
| BE74 | CALL READ_KEYS | |||||||||
| BE77 | BIT 0,A | |||||||||
| BE79 | JR Z,READ_CONTROLS_12 | |||||||||
| BE7B | SET 6,C | |||||||||
| READ_CONTROLS_12 | BE7D | BIT 3,A | 7: walk | |||||||
| BE7F | JR Z,READ_CONTROLS_13 | |||||||||
| BE81 | SET 2,C | |||||||||
| READ_CONTROLS_13 | BE83 | BIT 2,A | 8: turn right | |||||||
| BE85 | JR Z,READ_CONTROLS_14 | |||||||||
| BE87 | SET 1,C | |||||||||
| READ_CONTROLS_14 | BE89 | BIT 4,A | 6: jump; then the bottom row for pick-up | |||||||
| BE8B | JR Z,READ_BOTTOM_ROW | |||||||||
| BE8D | SET 3,C | |||||||||
| BE8F | JR READ_BOTTOM_ROW | |||||||||
|
The keyboard.
|
||||||||||
| READ_KEYBOARD | BE91 | LD A,$FE | CAPS SHIFT to V: bits 1 and 2 (Z and X) and bits 3 and 4 (C and V) are both brought down to bits 0 and 1, turn left and turn right; CAPS SHIFT is dropped | |||||||
| BE93 | CALL READ_KEYS | |||||||||
| BE96 | RRCA | |||||||||
| BE97 | LD C,A | |||||||||
| BE98 | AND $03 | |||||||||
| BE9A | SRL C | |||||||||
| BE9C | SRL C | |||||||||
| BE9E | OR C | |||||||||
| BE9F | AND $03 | |||||||||
| BEA1 | LD C,A | |||||||||
| BEA2 | LD A,$7F | SYMBOL SHIFT or N turns right... | ||||||||
| BEA4 | CALL READ_KEYS | |||||||||
| BEA7 | BIT 1,A | |||||||||
| BEA9 | JR Z,READ_CONTROLS_15 | |||||||||
| BEAB | SET 1,C | |||||||||
| READ_CONTROLS_15 | BEAD | BIT 2,A | ...M turns left... | |||||||
| BEAF | JR Z,READ_CONTROLS_16 | |||||||||
| BEB1 | SET 0,C | |||||||||
| READ_CONTROLS_16 | BEB3 | BIT 3,A | ...N turns right... | |||||||
| BEB5 | JR Z,READ_CONTROLS_17 | |||||||||
| BEB7 | SET 1,C | |||||||||
| READ_CONTROLS_17 | BEB9 | BIT 4,A | ...B turns left | |||||||
| BEBB | JR Z,READ_CONTROLS_18 | |||||||||
| BEBD | SET 0,C | |||||||||
| READ_CONTROLS_18 | BEBF | LD A,$BD | any key on the A-G or H-ENTER rows (both half-rows read at once): walk | |||||||
| BEC1 | CALL READ_KEYS | |||||||||
| BEC4 | JR Z,READ_CONTROLS_19 | |||||||||
| BEC6 | SET 2,C | |||||||||
| READ_CONTROLS_19 | BEC8 | LD A,$DF | O or U: jump | |||||||
| BECA | CALL READ_KEYS | |||||||||
| BECD | LD B,A | |||||||||
| BECE | AND $0A | |||||||||
| BED0 | JR NZ,READ_CONTROLS_20 | |||||||||
| BED2 | LD A,$FB | or Q, E or T: jump | ||||||||
| BED4 | CALL READ_KEYS | |||||||||
| BED7 | LD E,A | |||||||||
| BED8 | AND $15 | |||||||||
| BEDA | JR Z,READ_CONTROLS_21 | |||||||||
| READ_CONTROLS_20 | BEDC | SET 3,C | ||||||||
| READ_CONTROLS_21 | BEDE | LD A,$E7 | any number key (both half-rows at once): pick up or put down | |||||||
| BEE0 | CALL READ_KEYS | |||||||||
| BEE3 | JR Z,READ_CONTROLS_22 | |||||||||
| BEE5 | SET 4,C | |||||||||
| READ_CONTROLS_22 | BEE7 | LD A,$DF | P, I or Y: fire | |||||||
| BEE9 | CALL READ_KEYS | |||||||||
| BEEC | AND $15 | |||||||||
| BEEE | JR NZ,READ_CONTROLS_23 | |||||||||
| BEF0 | LD A,$FB | or W or R: fire; done, without the bottom row | ||||||||
| BEF2 | CALL READ_KEYS | |||||||||
| BEF5 | AND $0A | |||||||||
| BEF7 | JR Z,READ_CONTROLS_24 | |||||||||
| READ_CONTROLS_23 | BEF9 | SET 6,C | ||||||||
| BEFB | JR READ_CONTROLS_24 | |||||||||
| READ_BOTTOM_ROW | BEFD | LD A,$7E | the joysticks: any of Z, X, C, V, SYMBOL SHIFT, M, N and B (both half-rows at once, bits 1-4) picks up or puts down | |||||||
| BEFF | CALL READ_KEYS | |||||||||
| BF02 | AND $1E | |||||||||
| BF04 | JR Z,READ_CONTROLS_24 | |||||||||
| BF06 | SET 4,C | |||||||||
| READ_CONTROLS_24 | BF08 | LD A,C | this turn's controls into INPUT, and in A and C | |||||||
| BF09 | LD (INPUT),A | |||||||||
| BF0C | RET | |||||||||
| Prev: BDDE | Up: Map | Next: BF0D |