Wed, 09 Feb 2011 22:05:42 +0000
merge heads
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;
30 } KEYBOARD_STATE;
32 /**
33 * Initialise a keyboard state block.
34 *
35 * Call this once when the keyboard is added to the emulation.
36 */
37 void keyboard_init(KEYBOARD_STATE *ks);
39 /**
40 * SDL_Event delegation routine.
41 *
42 * Call this when an SDL keyup or keydown event is received.
43 */
44 void keyboard_event(KEYBOARD_STATE *ks, SDL_Event *ev);
46 /**
47 * Keyboard scan routine.
48 *
49 * Call this periodically to scan the keyboard. 60 times/sec should be fine.
50 */
51 void keyboard_scan(KEYBOARD_STATE *ks);
53 bool keyboard_get_irq(KEYBOARD_STATE *ks);
54 uint8_t keyboard_read(KEYBOARD_STATE *ks, uint8_t addr);
55 void keyboard_write(KEYBOARD_STATE *ks, uint8_t addr, uint8_t val);
57 #endif