Some premature optimization ;-)

Moved the call to video_spi_wait before the writes.
Otherwise SPI would not operate asynchronously at all.
Minor syntax changes.

OR A, C is more readable than just OR C
added .video_spi_write_A shortcut to directly send the value in A to the video device
keyboard driver: interrupt vector initialization
keyboard: finished initialization, work on interrupt routine

The keyboard_isr now gets called on every incoming bit.

* Makefile: added keyboard.asm
* main.asm: added call to keyboard_init and enable interrupts
* keyboard.asm: see comment above
implemented: read data from the keyboard; next: decode and buffer

*keyboard.asm: implemented serial read (no framing error detection!)
*main.asm: some test code to see if there is data being received
keyboard: implemented frame error detection and reserved 4 status bits for the scancode decoding routine (which has yet to be implemented)

Isn't it nice how we can fit all the data needed by the keyboard driver
into two bytes? This means we can just stuff it all into the small unused
space behind the interrupt vector. This has the advantage that no other
memory needs to be reserved for the keyboard driver. The only restriction
is that the interrupt vector table has to be in RAM, which is a good idea
anyways. Another restriction is that the keyboard driver cannot run in ADL
mode. This doesn't matter. There may be some uses for ADL mode but the
keyboard driver is certainly not one of them.
implemented scancode decoding
added single byte write routines, renamed spi_write to spi_transmit
Merge branches 'keyboard' and 'video'
the keyboard driver is now usable. some updates from video are needed for a simple test program.
small test program: print typed characters on screen.
removed some duplicate code (whoops...)
removed leftover comment