# Keyboard Interface Adapter (KIA)

The KIA provides a dedicated PS/2 input controller.  It provides a 16-deep FIFO (of which up to 15 bytes can be queued at any given time).

## Register Map

|Byte Offset|Name|R/W|Purpose|
|:---------:|:--:|:-:|:------|
|0|STAT|R|8-bit status register|
|2|DATA|R|8-bit data input port|
|2|POP |W|Strobe to pop the FIFO.|

**NOTE.**  Attempting to access the KIA registers with 16-bit or wider accesses will yield unpredictable results.  **Always use 8-bit loads** when accessing the KIA core.

## `STAT` Register

|Bit|Name|Purpose|
|:-:|:--:|:------|
|`7-2`||*unassigned*|
|`1`|`QF`|0 if the KIA input queue is not yet full; 1 if no further data can be accepted.|
|`0`|`QE`|0 if the KIA input queue is not empty; 1 if the queue is empty.|

## `DATA` Register

|Bit|Name|Purpose|
|:-:|:--:|:------|
|`7-0`|`DATA`|The head of the PS/2 scancode FIFO.|

**NOTE**.  Multiple reads of this port will return *the same byte value*.  Once a keyboard driver reads a byte from the FIFO, it *must* "pop the queue" by writing a value to `POP`.

## `POP` Strobe

This write-only register ignores all 8 bits written to it.  Its sole purpose is to pop the FIFO, thus revealing the next available byte, if any.