83Plus:Ports:01

From WikiTI
Revision as of 06:32, 26 August 2006 by Dan Englender (Talk | contribs)

Jump to: navigation, search

Synopsis

Port Number: 01h

Function: Keyboard Port

This port reads key presses from the keypad. The keypad is divided into a series of groups.

Read Values

  • Bits are set according whether corresponding keys from selected groups are pressed. Groups are selected through writing to the port. A pressed key reads a 0 bit. An unpressed key reads a 1 bit. The port reads FF after a reset (write FF).

Write Values

  • $FF : Reset the keypad. This unselects all groups and resets the keypad state.
  • Anything else : Any 0 bit adds the corresponding group to the list of monitored groups. When a key in a monitored group is pressed, the corresponding key bit reads 1.

Comments

The key map is laid out as follows:

Group Bit 0 1 2 3 4 5 6 7
Group Mask FE FD FB F7 EF DF BF 7F
Key Bit (Mask)
0 (FE) DOWN ENTER (-) . 0 GRAPH
1 (FD) LEFT + 3 2 1 STO TRACE
2 (FB) RIGHT - 6 5 4 LN ZOOM
3 (F7) UP * 9 8 7 LOG WIND
4 (EF) / ) ( , x2 Y=
5 (DF) ^ TAN COS SIN x-1 2nd
6 (BF) CLEAR VARS PRGM APPS MATH MODE
7 (7F) STAT X,T,θ,n ALPHA DEL
  • Note: Group FB Key FE is NEGATE, not to be confused with SUBTRACT.
  • Note: Group DF Key FE would be ON, but the ON key is tested elsewhere (a "special case" key - after all, it is the ON key).
  • Note: Group EF Key BF (APPS) is called MATRIX on the TI-83.

Example

ld a, 0FFh ;Reset the keypad.
out (1), a
ld a, 0FEh ;Select group 0.
out (1), a
in a, (1) ;Test for keys.
and 0FDh ;Test for Left Arrow key by making A 0 if left was pressed.
call z, LeftArrowPressed ;If 0 then left was pressed.
ld a, 0FFh ;Reset the keypad.
out (1), a