diff --git a/src/devices/input/keyboard.c b/src/devices/input/keyboard.c index 9f2a169..eb473d5 100644 --- a/src/devices/input/keyboard.c +++ b/src/devices/input/keyboard.c @@ -8,7 +8,7 @@ * * General keyboard driver interface. * - * Version: @(#)keyboard.c 1.0.13 2019/04/26 + * Version: @(#)keyboard.c 1.0.14 2019/04/26 * * Authors: Fred N. van Kempen, * Miran Grca, @@ -59,7 +59,7 @@ void (*keyboard_send)(uint16_t val); static int recv_key[512]; /* keyboard input buffer */ static int oldkey[512]; -static const scancode *scan_table; /* scancode table for keyboard */ +static const scancode_t *scan_table; /* scancode table for keyboard */ static uint8_t caps_lock = 0; static uint8_t num_lock = 0; @@ -84,41 +84,6 @@ kbd_log(int level, const char *fmt, ...) #endif -/* Reset the keyboard driver. */ -void -keyboard_init(void) -{ - memset(recv_key, 0x00, sizeof(recv_key)); - - keyboard_scan = 1; - keyboard_delay = 0; - scan_table = NULL; - - memset(keyboard_set3_flags, 0x00, sizeof(keyboard_set3_flags)); - keyboard_set3_all_repeat = 0; - keyboard_set3_all_break = 0; -} - - -void -keyboard_reset(void) -{ - uint8_t i; - - /* Initialize the key states from the platform keyboard. */ - i = plat_kbd_state() & 0xff; - - keyboard_set_state(i); -} - - -void -keyboard_set_table(const scancode *ptr) -{ - scan_table = ptr; -} - - static uint8_t fake_shift_needed(uint16_t scan) { @@ -127,6 +92,7 @@ fake_shift_needed(uint16_t scan) case 0x0148: case 0x0149: case 0x014a: + case 0x014b: case 0x014d: case 0x014f: case 0x0150: @@ -141,10 +107,10 @@ fake_shift_needed(uint16_t scan) } -void +static void key_process(uint16_t scan, int down) { - const scancode *codes = scan_table; + const scancode_t *codes = scan_table; int c; if (! keyboard_scan) return; @@ -178,6 +144,61 @@ key_process(uint16_t scan, int down) } +/* Insert keystrokes into the machine's keyboard buffer. */ +static void +keyboard_send_scan(uint8_t val) +{ + if (AT) + keyboard_at_adddata_keyboard_raw(val); + else + keyboard_send(val); +} + + +/* Send the machine a Control-Alt sequence. */ +static void +keyboard_ca(uint8_t sc) +{ + keyboard_send_scan(29); /* Ctrl key pressed */ + keyboard_send_scan(56); /* Alt key pressed */ + + keyboard_send_scan(sc); /* press */ + keyboard_send_scan(sc | 0x80); /* release */ + + keyboard_send_scan(184); /* Alt key released */ + keyboard_send_scan(157); /* Ctrl key released */ +} + + +/* Reset the keyboard driver. */ +void +keyboard_reset(void) +{ + keyboard_scan = 1; + keyboard_delay = 0; + + memset(recv_key, 0x00, sizeof(recv_key)); + + memset(keyboard_set3_flags, 0x00, sizeof(keyboard_set3_flags)); + keyboard_set3_all_repeat = 0; + keyboard_set3_all_break = 0; +} + + +void +keyboard_set_table(const scancode_t *ptr) +{ + scan_table = ptr; +} + + +int +keyboard_recv(uint16_t key) +{ + return(recv_key[key]); +} + + /* Handle a keystroke event from the UI layer. */ void keyboard_input(int down, uint16_t scan) @@ -220,11 +241,11 @@ keyboard_input(int down, uint16_t scan) break; case 0x0038: /* Left Alt */ - shift |= 0x03; + shift |= 0x04; break; case 0x0138: /* Right Alt */ - shift |= 0x30; + shift |= 0x40; break; } } else { @@ -246,11 +267,11 @@ keyboard_input(int down, uint16_t scan) break; case 0x0038: /* Left Alt */ - shift &= ~0x03; + shift &= ~0x04; break; case 0x0138: /* Right Alt */ - shift &= ~0x30; + shift &= ~0x40; break; case 0x003a: /* Caps Lock */ @@ -280,39 +301,67 @@ keyboard_input(int down, uint16_t scan) uiflag |= KBD_FLAG_NUM; if (scroll_lock) uiflag |= KBD_FLAG_SCROLL; - ui_sb_kbstate(uiflag); -//INFO("KBD: input: caps=%d num=%d scrl=%d\n", caps_lock,num_lock,scroll_lock); + + /* Update UI and possibly host. */ + ui_set_kbd_state(uiflag); } - /* - * NOTE: Shouldn't this be some sort of bit shift? - * An array of 8 unsigned 64-bit integers should be enough. - */ -#if 0 - recv_key[scan >> 6] |= ((uint64_t) down << ((uint64_t) scan & 0x3fLL)); -#else - recv_key[scan & 0x01ff] = down; -#endif - DEBUG("Received scan code: %03X (%s)\n",scan & 0x1ff, down ? "down" : "up"); + recv_key[scan & 0x01ff] = down; key_process(scan & 0x01ff, down); } -static uint8_t -keyboard_do_break(uint16_t scan) +void +keyboard_adddata(uint16_t val, void (*add_data)(uint16_t val)) { - const scancode *codes = scan_table; + uint8_t shift_states; - if (AT && ((keyboard_mode & 3) == 3)) { - if (!keyboard_set3_all_break && !recv_key[scan] && - !(keyboard_set3_flags[codes[scan].mk[0]] & 2)) - return(0); + if (add_data == NULL) return; - return(1); + shift_states = shift & STATE_SHIFT_MASK; + + switch(val) { + case FAKE_LSHIFT_ON: + if (num_lock) { + if (! shift_states) { + /* Num lock on and no shifts are pressed, send non-inverted fake shift. */ + add_data(0x2a); + } + } else { + if (shift_states & STATE_LSHIFT) { + /* Num lock off and left shift pressed. */ + add_data(0xaa); + } + if (shift_states & STATE_RSHIFT) { + /* Num lock off and right shift pressed. */ + add_data(0xb6); + } + } + break; + + case FAKE_LSHIFT_OFF: + if (num_lock) { + if (! shift_states) { + /* Num lock on and no shifts are pressed, send non-inverted fake shift. */ + add_data(0xaa); + } + } else { + if (shift_states & STATE_LSHIFT) { + /* Num lock off and left shift pressed. */ + add_data(0x2a); + } + if (shift_states & STATE_RSHIFT) { + /* Num lock off and right shift pressed. */ + add_data(0x36); + } + } + break; + + default: + add_data(val); + break; } - - return(1); } @@ -335,101 +384,10 @@ keyboard_get_state(void) if (scroll_lock) ret |= KBD_FLAG_SCROLL; -//INFO("KBD state: caps=%d num=%d scrl=%d\n", caps_lock,num_lock,scroll_lock); return(ret); } -/* - * Called by the UI to update the states of - * Caps Lock, Num Lock, and Scroll Lock. - */ -void -keyboard_set_state(uint8_t flags) -{ - const scancode *codes = scan_table; - int i, f; - - f = !!(flags & KBD_FLAG_CAPS); - if (caps_lock != f) { -#if 0 - i = 0; - while (codes[0x03a].mk[i] != 0) - keyboard_send(codes[0x03a].mk[i++]); - if (keyboard_do_break(0x03a)) { - i = 0; - while (codes[0x03a].brk[i] != 0) - keyboard_send(codes[0x03a].brk[i++]); - } -#endif - caps_lock = f; - } - - f = !!(flags & KBD_FLAG_NUM); - if (num_lock != f) { -#if 0 - i = 0; - while (codes[0x045].mk[i] != 0) - keyboard_send(codes[0x045].mk[i++]); - if (keyboard_do_break(0x045)) { - i = 0; - while (codes[0x045].brk[i] != 0) - keyboard_send(codes[0x045].brk[i++]); - } -#endif - num_lock = f; - } - - f = !!(flags & KBD_FLAG_SCROLL); - if (scroll_lock != f) { -#if 0 - i = 0; - while (codes[0x046].mk[i] != 0) - keyboard_send(codes[0x046].mk[i++]); - if (keyboard_do_break(0x046)) { - i = 0; - while (codes[0x046].brk[i] != 0) - keyboard_send(codes[0x046].brk[i++]); - } -#endif - scroll_lock = f; - } -} - - -int -keyboard_recv(uint16_t key) -{ - return(recv_key[key]); -} - - -/* Insert keystrokes into the machine's keyboard buffer. */ -static void -keyboard_send_scan(uint8_t val) -{ - if (AT) - keyboard_at_adddata_keyboard_raw(val); - else - keyboard_send(val); -} - - -/* Send the machine a Control-Alt sequence. */ -static void -keyboard_ca(uint8_t sc) -{ - keyboard_send_scan(29); /* Ctrl key pressed */ - keyboard_send_scan(56); /* Alt key pressed */ - - keyboard_send_scan(sc); /* press */ - keyboard_send_scan(sc | 0x80); /* release */ - - keyboard_send_scan(184); /* Alt key released */ - keyboard_send_scan(157); /* Ctrl key released */ -} - - /* Send the machine a Control-Alt-DEL sequence. */ void keyboard_cad(void) diff --git a/src/devices/input/keyboard.h b/src/devices/input/keyboard.h index bcdf334..61008c7 100644 --- a/src/devices/input/keyboard.h +++ b/src/devices/input/keyboard.h @@ -8,7 +8,7 @@ * * Definitions for the keyboard interface. * - * Version: @(#)keyboard.h 1.0.12 2019/04/25 + * Version: @(#)keyboard.h 1.0.13 2019/04/26 * * Authors: Fred N. van Kempen, * Miran Grca, @@ -65,7 +65,7 @@ extern "C" { typedef struct { uint8_t mk[4]; uint8_t brk[4]; -} scancode; +} scancode_t; extern uint8_t keyboard_mode; @@ -78,7 +78,7 @@ extern uint8_t keyboard_set3_all_break; extern int mouse_queue_start, mouse_queue_end; extern int mouse_scan; -extern const scancode scancode_xt[512]; +extern const scancode_t scancode_xt[512]; #ifdef EMU_DEVICE_H extern const device_t keyboard_pc_device; @@ -107,21 +107,17 @@ extern const device_t keyboard_ps2_ami_pci_device; extern void (*keyboard_send)(uint16_t val); -extern void kbd_adddata_process(uint16_t val, void (*adddata)(uint16_t val)); +extern void keyboard_adddata(uint16_t val, void (*adddata)(uint16_t val)); +extern void keyboard_poll_host(void); extern void kbd_log(int level, const char *fmt, ...); -extern void keyboard_init(void); extern void keyboard_reset(void); extern void keyboard_close(void); -extern void keyboard_set_table(const scancode *ptr); -extern void keyboard_poll_host(void); -extern void keyboard_process(void); -extern uint16_t keyboard_convert(int ch); +extern void keyboard_set_table(const scancode_t *ptr); extern void keyboard_input(int down, uint16_t scan); +extern int keyboard_recv(uint16_t key); extern uint8_t keyboard_get_shift(void); extern uint8_t keyboard_get_state(void); -extern void keyboard_set_state(uint8_t); -extern int keyboard_recv(uint16_t key); extern void keyboard_cad(void); extern void keyboard_cae(void); extern void keyboard_cab(void); diff --git a/src/devices/input/keyboard_at.c b/src/devices/input/keyboard_at.c index 76d6e5d..80122fa 100644 --- a/src/devices/input/keyboard_at.c +++ b/src/devices/input/keyboard_at.c @@ -8,10 +8,15 @@ * * Intel 8042 (AT keyboard controller) emulation. * - * NOTE: Several changes to disable Mode1 for now, as this breaks + * **NOTE**: Several changes to disable Mode1 for now, as this breaks * the TSX32 operating system. More cleanups needed.. * - * Version: @(#)keyboard_at.c 1.0.24 2019/04/25 + * **NOTE** The input functions for the Acer KBC chip (used by V30) is + * not OK yet. One of the commands sent is confusuing it, and + * it either will not process ctrl-alt-esc, or it will not do + * ANY input. + * + * Version: @(#)keyboard_at.c 1.0.25 2019/04/26 * * Authors: Fred N. van Kempen, * Miran Grca, @@ -216,7 +221,7 @@ static const uint8_t nont_to_t[256] = { }; #if USE_SET1 -static const scancode scancode_set1[512] = { +static const scancode_t scancode_set1[512] = { { { 0 }, { 0 } }, /* 000 */ { { 0x01 }, { 0x81 } }, { { 0x02 }, { 0x82 } }, @@ -717,7 +722,7 @@ static const scancode scancode_set1[512] = { }; #endif -static const scancode scancode_set2[512] = { +static const scancode_t scancode_set2[512] = { { { 0 }, { 0 } }, /* 000 */ { { 0x76 }, { 0xf0,0x76 } }, { { 0x16 }, { 0xf0,0x16 } }, @@ -1217,7 +1222,7 @@ static const scancode scancode_set2[512] = { { { 0xe0,0xff }, { 0xe0,0xf0,0xff } } }; -static const scancode scancode_set3[512] = { +static const scancode_t scancode_set3[512] = { { { 0 }, { 0 } }, /* 000 */ { { 0x08 }, { 0xf0,0x08 } }, { { 0x16 }, { 0xf0,0x16 } }, @@ -3252,7 +3257,7 @@ kbd_init(const device_t *info, UNUSED(void *parent)) break; case KBC_VEN_ACER: -// kbd->write60_ven = &kbd_write60_acer; + kbd->write60_ven = &kbd_write60_acer; kbd->write64_ven = &kbd_write64_acer; break; } diff --git a/src/devices/input/keyboard_xt.c b/src/devices/input/keyboard_xt.c index 09dc82f..0890032 100644 --- a/src/devices/input/keyboard_xt.c +++ b/src/devices/input/keyboard_xt.c @@ -8,7 +8,9 @@ * * Implementation of the XT-style keyboard. * - * Version: @(#)keyboard_xt.c 1.0.17 2019/04/25 + * **NOTE** The key_queue stuff should be in the device data. + * + * Version: @(#)keyboard_xt.c 1.0.18 2019/04/26 * * Authors: Fred N. van Kempen, * Miran Grca, @@ -98,7 +100,7 @@ typedef struct { /* PC/XT keyboard has no escape scancodes, and no scancodes beyond 53. */ -const scancode scancode_xt[512] = { +const scancode_t scancode_xt[512] = { { { 0 }, { 0 } }, /* 000 */ { { 0x01 }, { 0x81 } }, { { 0x02 }, { 0x82 } }, @@ -652,64 +654,10 @@ kbd_adddata(uint16_t val) } -void -kbd_adddata_process(uint16_t val, void (*adddata)(uint16_t val)) -{ - uint8_t num_lock = 0, shift_states = 0; - - if (adddata == NULL) return; - - num_lock = !!(keyboard_get_state() & KBD_FLAG_NUM); - shift_states = keyboard_get_shift() & STATE_SHIFT_MASK; - - switch(val) { - case FAKE_LSHIFT_ON: - if (num_lock) { - if (! shift_states) { - /* Num lock on and no shifts are pressed, send non-inverted fake shift. */ - adddata(0x2a); - } - } else { - if (shift_states & STATE_LSHIFT) { - /* Num lock off and left shift pressed. */ - adddata(0xaa); - } - if (shift_states & STATE_RSHIFT) { - /* Num lock off and right shift pressed. */ - adddata(0xb6); - } - } - break; - - case FAKE_LSHIFT_OFF: - if (num_lock) { - if (! shift_states) { - /* Num lock on and no shifts are pressed, send non-inverted fake shift. */ - adddata(0xaa); - } - } else { - if (shift_states & STATE_LSHIFT) { - /* Num lock off and left shift pressed. */ - adddata(0x2a); - } - if (shift_states & STATE_RSHIFT) { - /* Num lock off and right shift pressed. */ - adddata(0x36); - } - } - break; - - default: - adddata(val); - break; - } -} - - static void kbd_adddata_ex(uint16_t val) { - kbd_adddata_process(val, kbd_adddata); + keyboard_adddata(val, kbd_adddata); } diff --git a/src/devices/system/nvr_at.c b/src/devices/system/nvr_at.c index 0123392..4aff6be 100644 --- a/src/devices/system/nvr_at.c +++ b/src/devices/system/nvr_at.c @@ -189,7 +189,7 @@ * including the later update (DS12887A) which implemented a * "century" register to be compatible with Y2K. * - * Version: @(#)nvr_at.c 1.0.15 2019/04/25 + * Version: @(#)nvr_at.c 1.0.16 2019/04/26 * * Authors: Fred N. van Kempen, * Miran Grca, @@ -645,8 +645,10 @@ nvr_start(nvr_t *nvr) static void -nvr_recalc(nvr_t *nvr) +nvr_recalc(void *priv) { + nvr_t *nvr = (nvr_t *)priv; + timer_recalc(nvr, 0); } @@ -692,7 +694,6 @@ nvr_at_init(const device_t *info, UNUSED(void *parent)) nvr->reset = nvr_reset; nvr->start = nvr_start; nvr->tick = timer_tick; - nvr->recalc = nvr_recalc; /* Initialize the generic NVR. */ nvr_init(nvr); @@ -730,7 +731,9 @@ const device_t at_nvr_old_device = { 0, NULL, nvr_at_init, nvr_at_close, NULL, - NULL, NULL, NULL, NULL, + NULL, + nvr_recalc, + NULL, NULL, NULL }; @@ -740,7 +743,9 @@ const device_t at_nvr_device = { 1, NULL, nvr_at_init, nvr_at_close, NULL, - NULL, NULL, NULL, NULL, + NULL, + nvr_recalc, + NULL, NULL, NULL }; @@ -750,7 +755,9 @@ const device_t ps_nvr_device = { 2, NULL, nvr_at_init, nvr_at_close, NULL, - NULL, NULL, NULL, NULL, + NULL, + nvr_recalc, + NULL, NULL, NULL }; @@ -760,6 +767,8 @@ const device_t amstrad_nvr_device = { 3, NULL, nvr_at_init, nvr_at_close, NULL, - NULL, NULL, NULL, NULL, + NULL, + nvr_recalc, + NULL, NULL, NULL }; diff --git a/src/devices/video/vid_tvga.c b/src/devices/video/vid_tvga.c index 69fedc5..e0a7722 100644 --- a/src/devices/video/vid_tvga.c +++ b/src/devices/video/vid_tvga.c @@ -8,7 +8,7 @@ * * Trident TVGA (8900B/8900C/8900D) emulation. * - * Version: @(#)vid_tvga.c 1.0.13 2019/04/19 + * Version: @(#)vid_tvga.c 1.0.14 2019/04/26 * * Authors: Fred N. van Kempen, * Miran Grca, @@ -370,11 +370,9 @@ tvga_init(const device_t *info, UNUSED(void *parent)) tvga->svga.ramdac = device_add(&tkd8001_ramdac_device); break; -#if 0 case 1: /* TVGA 8900D */ tvga->svga.ramdac = device_add(&tkd8001_ramdac_device); break; -#endif } if (info->path) diff --git a/src/machines/m_amstrad.c b/src/machines/m_amstrad.c index 00a5f3f..cf0d9a6 100644 --- a/src/machines/m_amstrad.c +++ b/src/machines/m_amstrad.c @@ -15,7 +15,7 @@ * 80 columns. To be fixed... * Also, the DDM bits stuff needs to be verified. * - * Version: @(#)m_amstrad.c 1.0.26 2019/04/25 + * Version: @(#)m_amstrad.c 1.0.27 2019/04/26 * * Authors: Fred N. van Kempen, * Miran Grca, @@ -198,7 +198,7 @@ kbd_adddata(uint16_t val) static void kbd_adddata_ex(uint16_t val) { - kbd_adddata_process(val, kbd_adddata); + keyboard_adddata(val, kbd_adddata); } diff --git a/src/machines/m_olim24.c b/src/machines/m_olim24.c index da7dbff..9aacb8b 100644 --- a/src/machines/m_olim24.c +++ b/src/machines/m_olim24.c @@ -21,7 +21,7 @@ * data at all, so there seems to not be a way to properly do * that.. The chip's interrupt pin is not connected. * - * Version: @(#)m_olim24.c 1.0.18 2019/04/25 + * Version: @(#)m_olim24.c 1.0.19 2019/04/26 * * Authors: Fred N. van Kempen, * Miran Grca, @@ -174,7 +174,7 @@ kbd_adddata(uint16_t val) static void kbd_adddata_ex(uint16_t val) { - kbd_adddata_process(val, kbd_adddata); + keyboard_adddata(val, kbd_adddata); } diff --git a/src/machines/m_pcjr.c b/src/machines/m_pcjr.c index 9011137..106b054 100644 --- a/src/machines/m_pcjr.c +++ b/src/machines/m_pcjr.c @@ -8,7 +8,7 @@ * * Emulation of the IBM PCjr. * - * Version: @(#)m_pcjr.c 1.0.18 2019/04/25 + * Version: @(#)m_pcjr.c 1.0.19 2019/04/26 * * Authors: Fred N. van Kempen, * Miran Grca, @@ -719,7 +719,7 @@ kbd_adddata(uint16_t val) static void kbd_adddata_ex(uint16_t val) { - kbd_adddata_process(val, kbd_adddata); + keyboard_adddata(val, kbd_adddata); } diff --git a/src/machines/m_tandy1000.c b/src/machines/m_tandy1000.c index 585dc7c..fd11be2 100644 --- a/src/machines/m_tandy1000.c +++ b/src/machines/m_tandy1000.c @@ -8,7 +8,7 @@ * * Emulation of Tandy models 1000, 1000HX and 1000SL2. * - * Version: @(#)m_tandy1000.c 1.0.21 2019/04/26 + * Version: @(#)m_tandy1000.c 1.0.22 2019/04/26 * * Authors: Fred N. van Kempen, * Miran Grca, @@ -128,7 +128,7 @@ typedef struct { } tandy_t; -static const scancode scancode_tandy[512] = { +static const scancode_t scancode_tandy[512] = { { { 0 }, { 0 } }, { { 0x01 }, { 0x81 } }, { { 0x02 }, { 0x82 } }, diff --git a/src/mem.c b/src/mem.c index ce3cce5..14b563f 100644 --- a/src/mem.c +++ b/src/mem.c @@ -12,7 +12,7 @@ * The Port92 stuff should be moved to devices/system/memctl.c * as a standard device. * - * Version: @(#)mem.c 1.0.31 2019/04/25 + * Version: @(#)mem.c 1.0.32 2019/04/26 * * Authors: Fred N. van Kempen, * Miran Grca, @@ -505,72 +505,25 @@ writemembl(uint32_t addr, uint8_t val) uint8_t readmemb386l(uint32_t seg, uint32_t addr) { - mem_map_t *map; - if (seg == (uint32_t)-1) { x86gpf("NULL segment", 0); - return 0xff; + return -1; } - mem_logical_addr = addr = addr + seg; - if (addr < 0x100000 && ram_mapped_addr[addr >> 14]) { - addr = (ram_mapped_addr[addr >> 14] & MEM_MAP_TO_SHADOW_RAM_MASK) ? addr : (ram_mapped_addr[addr >> 14] & ~0x3fff) + (addr & 0x3fff); - if (addr < (uint32_t)(1024UL * mem_size)) - return ram[addr]; - return 0xff; - } - - if (cr0 >> 31) { - addr = mmutranslate_read(addr); - if (addr == 0xffffffff) - return 0xff; - } - - addr &= rammask; - - map = read_mapping[addr >> 14]; - if (map && map->read_b) - return map->read_b(addr, map->p); - - return 0xff; + return readmembl(addr + seg); } void writememb386l(uint32_t seg, uint32_t addr, uint8_t val) { - mem_map_t *map; - if (seg == (uint32_t)-1) { x86gpf("NULL segment", 0); return; } - mem_logical_addr = addr = addr + seg; - if (addr < 0x100000 && ram_mapped_addr[addr >> 14]) { - addr = (ram_mapped_addr[addr >> 14] & MEM_MAP_TO_SHADOW_RAM_MASK) ? addr : (ram_mapped_addr[addr >> 14] & ~0x3fff) + (addr & 0x3fff); - if (addr < (uint32_t)(1024UL * mem_size)) - ram[addr] = val; - return; - } - - if (page_lookup[addr>>12]) { - page_lookup[addr>>12]->write_b(addr, val, page_lookup[addr>>12]); - - return; - } - - if (cr0 >> 31) { - addr = mmutranslate_write(addr); - if (addr == 0xffffffff) return; - } - - addr &= rammask; - - map = write_mapping[addr >> 14]; - if (map && map->write_b) - map->write_b(addr, val, map->p); + writemembl(addr + seg, val); } diff --git a/src/nvr.c b/src/nvr.c index 0b98704..edeeef7 100644 --- a/src/nvr.c +++ b/src/nvr.c @@ -8,7 +8,7 @@ * * Implement a generic NVRAM/CMOS/RTC device. * - * Version: @(#)nvr.c 1.0.16 2019/04/25 + * Version: @(#)nvr.c 1.0.17 2019/04/26 * * Author: Fred N. van Kempen, * @@ -136,6 +136,7 @@ onesec_timer(void *priv) } +/* Get current time from internal clock. */ /* Initialize the generic NVRAM/RTC device. */ void nvr_init(nvr_t *nvr) @@ -328,18 +329,6 @@ nvr_save(void) } -void -nvr_period_recalc(void) -{ - /* Make sure we have been initialized. */ - if (saved_nvr == NULL) return; - - if (saved_nvr->recalc && (saved_nvr->size != 0)) - saved_nvr->recalc(saved_nvr); -} - - -/* Get current time from internal clock. */ void nvr_time_get(struct tm *tm) { diff --git a/src/nvr.h b/src/nvr.h index 308517a..cc674c3 100644 --- a/src/nvr.h +++ b/src/nvr.h @@ -8,11 +8,11 @@ * * Definitions for the generic NVRAM/CMOS driver. * - * Version: @(#)nvr.h 1.0.8 2018/09/09 + * Version: @(#)nvr.h 1.0.9 2019/04/26 * * Author: Fred N. van Kempen, * - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2019 Fred N. van Kempen. * * Redistribution and use in source and binary forms, with * or without modification, are permitted provided that the @@ -79,7 +79,6 @@ typedef struct _nvr_ { void (*reset)(struct _nvr_ *); void (*start)(struct _nvr_ *); void (*tick)(struct _nvr_ *); - void (*recalc)(struct _nvr_ *); uint8_t regs[NVR_MAXSIZE]; /* these are the registers */ } nvr_t; @@ -99,7 +98,6 @@ extern void nvr_init(nvr_t *); extern wchar_t *nvr_path(const wchar_t *fn); extern int nvr_load(void); extern int nvr_save(void); -extern void nvr_period_recalc(void); extern int nvr_is_leap(int year); extern int nvr_get_days(int month, int year); diff --git a/src/pc.c b/src/pc.c index 8581bb2..10deec9 100644 --- a/src/pc.c +++ b/src/pc.c @@ -8,7 +8,7 @@ * * Main emulator module where most things are controlled. * - * Version: @(#)pc.c 1.0.69 2019/04/23 + * Version: @(#)pc.c 1.0.71 2019/04/26 * * Authors: Fred N. van Kempen, * Miran Grca, @@ -798,7 +798,6 @@ INFO("PC: set_speed(%i) -> speed %lu\n", turbo, speed); * timer system is built around the CPU clock as a * base unit. So, if we change that, everything does.. */ - nvr_period_recalc(); } @@ -910,7 +909,6 @@ pc_init(void) timer_reset(); - keyboard_init(); joystick_init(); video_init(); @@ -1037,8 +1035,8 @@ pc_reset_hard_init(void) isartc_reset(); /* Reset some basic devices. */ - mouse_reset(); keyboard_reset(); + mouse_reset(); /* Reset sound system. This MAY add a game port, so before joystick! */ sound_reset(); diff --git a/src/ui/ui.h b/src/ui/ui.h index 127f865..e30d596 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -8,11 +8,11 @@ * * Define the various UI functions. * - * Version: @(#)ui.h 1.0.16 2018/11/20 + * Version: @(#)ui.h 1.0.17 2019/04/26 * * Author: Fred N. van Kempen, * - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2019 Fred N. van Kempen. * * Redistribution and use in source and binary forms, with * or without modification, are permitted provided that the @@ -154,6 +154,7 @@ extern void ui_show_cursor(int on); extern void ui_show_render(int on); extern wchar_t *ui_window_title(const wchar_t *s); extern int ui_fdd_icon(int type); +extern void ui_set_kbd_state(int flags); extern void menu_add_item(int idm, int type, int id, const wchar_t *str); extern void menu_enable_item(int idm, int val); extern void menu_set_item(int idm, int val); diff --git a/src/ui/ui_misc.c b/src/ui/ui_misc.c index 32c3396..2d4ffc5 100644 --- a/src/ui/ui_misc.c +++ b/src/ui/ui_misc.c @@ -8,11 +8,11 @@ * * Misc stuff for UI, doesn't fit anywhere else.. * - * Version: @(#)ui_misc.c 1.0.1 2018/09/29 + * Version: @(#)ui_misc.c 1.0.2 2019/04/26 * * Author: Fred N. van Kempen, * - * Copyright 2018 Fred N. van Kempen. + * Copyright 2018,2019 Fred N. van Kempen. * * Redistribution and use in source and binary forms, with * or without modification, are permitted provided that the @@ -54,6 +54,15 @@ #include "ui.h" +/* Update the UI and/or host for the active keyboard state. */ +void +ui_set_kbd_state(int flags) +{ + /* First of all, update our status bar. */ + ui_sb_kbstate(flags); +} + + /* Return icon number based on drive type. */ int ui_fdd_icon(int type)