Difference between revisions of "83Plus:Hooks:9B88"
(→Using the Hook) |
Thepenguin77 (Talk | contribs) |
||
(2 intermediate revisions by 2 users not shown) | |||
Line 13: | Line 13: | ||
'''Hook Active Flag:''' [[83Plus:Flags:34#Bit_0|0, (iy + 34h)]] | '''Hook Active Flag:''' [[83Plus:Flags:34#Bit_0|0, (iy + 34h)]] | ||
− | This hook is called when the OS scans for keypad activity. (Note, however, that it is only called when the OS is idle in the [[83Plus:BCALLs:4972|GetKey]] routine.) It is called once before the key scan begins, and a second time | + | This hook is called when the OS scans for keypad activity. (Note, however, that it is only called when the OS is idle in the [[83Plus:BCALLs:4972|GetKey]] routine.) It is called once before the key scan begins, and a second time after the keypad has been scanned. It thus operates at a lower level than the [[83Plus:Hooks:9B84|Raw Key hook]], which operates on actual GetKey values. |
== Using the Hook == | == Using the Hook == | ||
Line 19: | Line 19: | ||
* 1Ah: Before the keypad is scanned | * 1Ah: Before the keypad is scanned | ||
− | ** Return with Z set and A = keycode to force a key to be "pressed." | + | ** Return with Z set and A = '''keycode''' to force a key to be "pressed." |
** Return with NZ set and A = 1Ah to scan the keypad normally. | ** Return with NZ set and A = 1Ah to scan the keypad normally. | ||
* 1Bh: After the keypad is scanned | * 1Bh: After the keypad is scanned | ||
** B = scancode found (or 0 if no key pressed) | ** B = scancode found (or 0 if no key pressed) | ||
− | ** Return with NZ set and A = scancode to be returned. | + | ** Return with NZ set and A = '''scancode''' to be returned. |
== Comments == | == Comments == |
Latest revision as of 09:55, 29 July 2011
Synopsis
Name: GetCSC (officially GetKey; there is some disagreement as to the appropriateness of both names)
Hook Pointer Block Address: 9B88
Hook Enable BCALL: 4F7B
Hook Disable BCALL: 4F7E
Hook Call BCALL: 4F78
Hook Active Flag: 0, (iy + 34h)
This hook is called when the OS scans for keypad activity. (Note, however, that it is only called when the OS is idle in the GetKey routine.) It is called once before the key scan begins, and a second time after the keypad has been scanned. It thus operates at a lower level than the Raw Key hook, which operates on actual GetKey values.
Using the Hook
These different values, passed in A, determine what the hook should do.
- 1Ah: Before the keypad is scanned
- Return with Z set and A = keycode to force a key to be "pressed."
- Return with NZ set and A = 1Ah to scan the keypad normally.
- 1Bh: After the keypad is scanned
- B = scancode found (or 0 if no key pressed)
- Return with NZ set and A = scancode to be returned.
Comments
Officially named the "GetKeyHook" by ti83plus.inc. Although it has been pointed out that it is only called during GetKey, referring to it as the "GetKeyHook" is rather misleading, because it deals only with raw scan codes ("GetCSC values") as opposed to the full keypresses returned by GetKey (which depend, for example, on whether 2nd or Alpha are active.)
Example
The following code will swap the 2nd and Alpha keys:
GetKeyHook: .db 83h ; Required for all hooks cp 1Bh ; which condition? ret nz ld a,b ; which key was pressed? cp skAlpha ; was it Alpha? jr z,AlphaKey cp sk2nd ; was it 2nd? ret nz ld a,skAlpha-1 ; change to Alpha inc a ; set NZ ret AlphaKey: ld a,sk2nd-1 ; change to 2nd inc a ; set NZ ret
Credits and Contributions
- Texas Instruments (thanks for all the confusing equates)