Wed, 13 Mar 2013 00:43:25 +0000
[wd2010,main] WD2010 disc geometry fixes
I believe I have fixed the geometry problem with FreeBee. The geometry was set
to 17 sectors per track instead of 16, which obviously throws off addressing.
I changed it to use 16 sectors per track. However, s4diag tries to format
sector 17, so I changed the WD2010 emulation to accept any address when
formatting (since the format command doesn't actually do anything, it doesn't
matter). It is now possible to format the hard disk, initialize the file
system, and mount it. However, cpio still fails to copy the system to the hard
disk.
Author: Andrew Warkentin <andreww591 gmail com>
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