Prev: BDDE Up: Map Next: BF0D
BDF8: Read the controls into INPUT
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.
Output
A the controls: bit 0 turn left, 1 turn right, 2 walk, 3 jump, 4 pick up or put down, 6 fire
C the same
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