src/keyboard.h

Mon, 14 Jan 2013 09:50:37 +0000

author
Philip Pemberton <philpem@philpem.me.uk>
date
Mon, 14 Jan 2013 09:50:37 +0000
changeset 120
df40e6668a46
parent 91
781c15e60012
permissions
-rw-r--r--

Max out system memory by default

Set the system memory to 2MiB base, 2MiB ext. This is a fully loaded 3B1
motherboard with a RAM expansion board. 512KiB base/no ext is the minimum
which can be specified (e.g. kernel memory map area only) but does not leave
any room for userspace. The kernel doesn't like that and doesn't handle it
gracefully...!

     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