Routines |
Prev: 8B78 | Up: Map | Next: 8C4B |
|
||||||||||||||||||||
8B81 | DEFB $01,$00,$00,$0D,$02,$00,$00,$02 | |||||||||||||||||||
8B89 | DEFW $0000 | |||||||||||||||||||
8B8B | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||||||||||||||||||
This entry point is used by the routine at 70F3.
|
||||||||||||||||||||
GetKey | 8B93 | PUSH HL | Stash HL, IX and BC on the stack. | |||||||||||||||||
8B94 | PUSH IX | |||||||||||||||||||
8B96 | PUSH BC | |||||||||||||||||||
8B97 | CALL Pause | Call Pause. | ||||||||||||||||||
8B9A | LD ($8B89),BC | Write $0000 to 8B89. | ||||||||||||||||||
8B9E | LD HL,$8B8B | HL=$8B8B. | ||||||||||||||||||
8BA1 | LD IX,$8B81 | IX=8B81. | ||||||||||||||||||
8BA5 | LD BC,$FEFE | BC=$FEFE. | ||||||||||||||||||
GetKey_Loop | 8BA8 | IN A,(C) | Read from the keyboard port. | |||||||||||||||||
8BAA | AND %00011111 | Keep only bits 0-4. | ||||||||||||||||||
8BAC | OR (IX+$00) | OR against what IX is pointing to. | ||||||||||||||||||
8BAF | PUSH AF | Stash AF on the stack. | ||||||||||||||||||
8BB0 | CPL | Invert the bits (1's complement on A). | ||||||||||||||||||
8BB1 | AND (HL) | Keep bits based on what HL is pointing to. | ||||||||||||||||||
8BB2 | CPL | Invert the bits back (1's complement on A). | ||||||||||||||||||
8BB3 | JR Z,GetKey_ | If it is zero, jump to GetKey_. | ||||||||||||||||||
8BB5 | LD ($8B89),BC | Stash BC at 8B89. | ||||||||||||||||||
8BB9 | LD ($8B89),A | Stash A at 8B89. | ||||||||||||||||||
GetKey_ | 8BBC | POP AF | Restore AF from the stack. | |||||||||||||||||
8BBD | LD (HL),A | Stash A at HL. | ||||||||||||||||||
8BBE | INC HL | Increase HL by one. | ||||||||||||||||||
8BBF | INC IX | Increase IX by one. | ||||||||||||||||||
8BC1 | RLC B | Rotate B left. | ||||||||||||||||||
8BC3 | JR C,GetKey_Loop | If there is carry then this is not a match, jump back to GetKey_Loop to try again. | ||||||||||||||||||
8BC5 | LD BC,($8B89) | BC=8B89. | ||||||||||||||||||
If no key match was found, end...
|
||||||||||||||||||||
8BC9 | LD A,B | If BC is $0000, jump to GetKey_Return. | ||||||||||||||||||
8BCA | OR C | |||||||||||||||||||
8BCB | JR Z,GetKey_Return | |||||||||||||||||||
8BCD | LD A,$FB | A=$FB. | ||||||||||||||||||
8BCF | ADD A,$05 | A=A + 5. | ||||||||||||||||||
8BD1 | RRC B | Rotate B right once. | ||||||||||||||||||
8BD3 | JR C,$8BCF | If there is any carry, jump to 8BCF. | ||||||||||||||||||
8BD5 | DEC A | Decrease A by one, ready for the following loop to begin in the same place. | ||||||||||||||||||
8BD6 | INC A | Increment A by one. | ||||||||||||||||||
8BD7 | RRC C | Rotate C right once. | ||||||||||||||||||
8BD9 | JR C,$8BD6 | If there is any carry, jump to 8BD6. | ||||||||||||||||||
8BDB | LD C,A | Create an offset in BC. | ||||||||||||||||||
8BDC | LD B,$00 | |||||||||||||||||||
8BDE | LD HL,$8BFB | HL=KeyboardMap1. | ||||||||||||||||||
8BE1 | LD A,$FE | Read from the keyboard port.
|
||||||||||||||||||
8BE3 | IN A,($FE) | |||||||||||||||||||
8BE5 | AND %00000001 | Keep only bit 0 (SHIFT). | ||||||||||||||||||
8BE7 | JR Z,GetKey_UseMap2 | If it is zero, jump to GetKey_UseMap2. | ||||||||||||||||||
8BE9 | LD A,$7F | Read from the keyboard port.
|
||||||||||||||||||
8BEB | IN A,($FE) | |||||||||||||||||||
8BED | AND %00000010 | Keep only bit 1 (FULL-STOP). | ||||||||||||||||||
8BEF | JR NZ,GetKey_GetByte | If it is not zero, jump to GetKey_GetByte. | ||||||||||||||||||
GetKey_UseMap2 | 8BF1 | LD HL,$8C23 | HL=KeyboardMap2. | |||||||||||||||||
GetKey_GetByte | 8BF4 | ADD HL,BC | HL=HL + keyboard map offset. | |||||||||||||||||
8BF5 | LD A,(HL) | A=HL (fetched byte from keyboard map). | ||||||||||||||||||
GetKey_Return | 8BF6 | POP BC | Restore BC, IX and HL from the stack. | |||||||||||||||||
8BF7 | POP IX | |||||||||||||||||||
8BF9 | POP HL | |||||||||||||||||||
8BFA | RET | Return. | ||||||||||||||||||
KeyboardMap1 | 8BFB | DEFB $00,$5A,$58,$43,$56 | --, Z, X, C, V | |||||||||||||||||
8C00 | DEFB $41,$53,$44,$46,$47 | A, S, D, F, G | ||||||||||||||||||
8C05 | DEFB $51,$57,$45,$52,$54 | Q, W, E, R, T | ||||||||||||||||||
8C0A | DEFB $00,$00,$00,$00,$08 | --, --, --, --, | ||||||||||||||||||
8C0F | DEFB $08,$00,$09,$5B,$0A | , --, , [, | ||||||||||||||||||
8C14 | DEFB $50,$4F,$49,$55,$59 | P, O, I, U, Y | ||||||||||||||||||
8C19 | DEFB $0D,$4C,$4B,$4A,$48 | , L, K, J, H | ||||||||||||||||||
8C1E | DEFB $20,$00,$4D,$4E,$42 | , --, M, N, B | ||||||||||||||||||
KeyboardMap2 | 8C23 | DEFB $00,$5A,$58,$43,$56 | --, Z, X, C, V | |||||||||||||||||
8C28 | DEFB $41,$53,$44,$46,$47 | A, S, D, F, G | ||||||||||||||||||
8C2D | DEFB $51,$57,$45,$52,$54 | Q, W, E, R, T | ||||||||||||||||||
8C32 | DEFB $00,$40,$00,$00,$08 | --, @, --, --, | ||||||||||||||||||
8C37 | DEFB $18,$00,$09,$5B,$0A | , --, , [, | ||||||||||||||||||
8C3C | DEFB $22,$4F,$49,$55,$59 | ", O, I, U, Y | ||||||||||||||||||
8C41 | DEFB $0D,$4C,$4B,$4A,$48 | , L, K, J, H | ||||||||||||||||||
8C46 | DEFB $02,$00,$2E,$2C,$42 | , --, ., ,, B |
Prev: 8B78 | Up: Map | Next: 8C4B |