src/keyboard.h

Wed, 09 Feb 2011 23:45:55 +0000

author
Philip Pemberton <philpem@philpem.me.uk>
date
Wed, 09 Feb 2011 23:45:55 +0000
changeset 91
781c15e60012
parent 90
934ae2efdd01
permissions
-rw-r--r--

only send kb state when the state changes, use kb command constants

     1 #ifndef _KEYBOARD_H
     2 #define _KEYBOARD_H
     4 #include "SDL.h"
     6 /// Keyboard buffer size in bytes
     7 #define KEYBOARD_BUFFER_SIZE 256
     9 typedef struct {
    10 	/// Key states
    11 	int keystate[0x80];
    13 	/// Keyboard buffer
    14 	uint8_t buffer[KEYBOARD_BUFFER_SIZE];
    16 	/// Read pointer
    17 	size_t readp;
    19 	/// Write pointer
    20 	size_t writep;
    22 	/// Number of bytes in keyboard buffer
    23 	size_t buflen;
    25 	/// Transmit Interrupt Enable
    26 	bool txie;
    28 	/// Receive Interrupt Enable
    29 	bool rxie;
    31 	/// "Keyboard State Changed" flag
    32 	bool update_flag;
    33 } KEYBOARD_STATE;
    35 /**
    36  * Initialise a keyboard state block.
    37  *
    38  * Call this once when the keyboard is added to the emulation.
    39  */
    40 void keyboard_init(KEYBOARD_STATE *ks);
    42 /**
    43  * SDL_Event delegation routine.
    44  *
    45  * Call this when an SDL keyup or keydown event is received.
    46  */
    47 void keyboard_event(KEYBOARD_STATE *ks, SDL_Event *ev);
    49 /**
    50  * Keyboard scan routine.
    51  *
    52  * Call this periodically to scan the keyboard. 60 times/sec should be fine.
    53  */
    54 void keyboard_scan(KEYBOARD_STATE *ks);
    56 bool keyboard_get_irq(KEYBOARD_STATE *ks);
    57 uint8_t keyboard_read(KEYBOARD_STATE *ks, uint8_t addr);
    58 void keyboard_write(KEYBOARD_STATE *ks, uint8_t addr, uint8_t val);
    60 #endif