Updated travis-build script to display build options (for clarity.)
Fixed a buffer overflow in vid_voodoo.c (thanks DS) Fixed the BIOS-loading error that caused the PS/2 M50 to not boot. Small changes here and there. Disabled writing keyboard to the host (for now.)
This commit is contained in:
@@ -66,6 +66,7 @@
|
|||||||
|
|
||||||
# Build the project.
|
# Build the project.
|
||||||
echo ; echo "Building VARCem #${TRAVIS_BUILD_NUMBER} target ${TARGET}"
|
echo ; echo "Building VARCem #${TRAVIS_BUILD_NUMBER} target ${TARGET}"
|
||||||
|
echo "Options selected: ${OPTS}"
|
||||||
|
|
||||||
cd src
|
cd src
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
* 286/386+ instruction handlers list.
|
* 286/386+ instruction handlers list.
|
||||||
*
|
*
|
||||||
* Version: @(#)386_ops.h 1.0.4 2019/04/11
|
* Version: @(#)386_ops.h 1.0.5 2019/04/30
|
||||||
*
|
*
|
||||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||||
* Sarah Walker, <tommowalker@tommowalker.co.uk>
|
* Sarah Walker, <tommowalker@tommowalker.co.uk>
|
||||||
@@ -162,7 +162,8 @@ static int ILLEGAL(uint32_t fetchdat)
|
|||||||
{
|
{
|
||||||
cpu_state.pc = cpu_state.oldpc;
|
cpu_state.pc = cpu_state.oldpc;
|
||||||
|
|
||||||
ERRLOG("CPU: illegal instruction %08X (%02X)\n", fetchdat, fopcode);
|
ERRLOG("CPU: illegal instruction %08X (%02X) @%s\n",
|
||||||
|
fetchdat, fopcode, cpu_current_pc(NULL));
|
||||||
x86illegal();
|
x86illegal();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
* it either will not process ctrl-alt-esc, or it will not do
|
* it either will not process ctrl-alt-esc, or it will not do
|
||||||
* ANY input.
|
* ANY input.
|
||||||
*
|
*
|
||||||
* Version: @(#)keyboard_at.c 1.0.26 2019/04/27
|
* Version: @(#)keyboard_at.c 1.0.27 2019/04/30
|
||||||
*
|
*
|
||||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||||
* Miran Grca, <mgrca8@gmail.com>
|
* Miran Grca, <mgrca8@gmail.com>
|
||||||
@@ -102,6 +102,7 @@
|
|||||||
#define KBC_TYPE_PS2_1 0x02 /* PS2 on PS/2, type 1 */
|
#define KBC_TYPE_PS2_1 0x02 /* PS2 on PS/2, type 1 */
|
||||||
#define KBC_TYPE_PS2_2 0x03 /* PS2 on PS/2, type 2 */
|
#define KBC_TYPE_PS2_2 0x03 /* PS2 on PS/2, type 2 */
|
||||||
#define KBC_TYPE_MASK 0x03
|
#define KBC_TYPE_MASK 0x03
|
||||||
|
#define KBC_TYPE(x) ((x)->flags & KBC_TYPE_MASK)
|
||||||
|
|
||||||
#define KBC_VEN_GENERIC 0x00
|
#define KBC_VEN_GENERIC 0x00
|
||||||
#define KBC_VEN_AMI 0x04
|
#define KBC_VEN_AMI 0x04
|
||||||
@@ -112,6 +113,7 @@
|
|||||||
#define KBC_VEN_IBM_PS1 0x18
|
#define KBC_VEN_IBM_PS1 0x18
|
||||||
#define KBC_VEN_ACER 0x1c
|
#define KBC_VEN_ACER 0x1c
|
||||||
#define KBC_VEN_MASK 0x1c
|
#define KBC_VEN_MASK 0x1c
|
||||||
|
#define KBC_VENDOR(x) ((x)->flags & KBC_VEN_MASK)
|
||||||
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@@ -1824,14 +1826,15 @@ add_data(atkbd_t *dev, uint8_t val)
|
|||||||
static void
|
static void
|
||||||
add_data_vals(atkbd_t *dev, uint8_t *val, uint8_t len)
|
add_data_vals(atkbd_t *dev, uint8_t *val, uint8_t len)
|
||||||
{
|
{
|
||||||
int xt_mode = (keyboard_mode & 0x20) && ((dev->flags & KBC_TYPE_MASK) < KBC_TYPE_PS2_NOREF);
|
int xt_mode = (keyboard_mode & 0x20) &&
|
||||||
|
(KBC_TYPE(dev) < KBC_TYPE_PS2_NOREF);
|
||||||
int translate = (keyboard_mode & 0x40);
|
int translate = (keyboard_mode & 0x40);
|
||||||
int i;
|
int i;
|
||||||
uint8_t or = 0;
|
uint8_t or = 0;
|
||||||
uint8_t send;
|
uint8_t send;
|
||||||
|
|
||||||
translate = translate || (keyboard_mode & 0x40) || xt_mode;
|
translate = translate || (keyboard_mode & 0x40) || xt_mode;
|
||||||
translate = translate || ((dev->flags & KBC_TYPE_MASK) == KBC_TYPE_PS2_2);
|
translate = translate || (KBC_TYPE(dev) == KBC_TYPE_PS2_2);
|
||||||
|
|
||||||
for (i = 0; i < len; i++) {
|
for (i = 0; i < len; i++) {
|
||||||
if (translate) {
|
if (translate) {
|
||||||
@@ -1867,13 +1870,14 @@ static void
|
|||||||
add_data_kbd(uint16_t val)
|
add_data_kbd(uint16_t val)
|
||||||
{
|
{
|
||||||
atkbd_t *dev = SavedKbd;
|
atkbd_t *dev = SavedKbd;
|
||||||
int xt_mode = (keyboard_mode & 0x20) && ((dev->flags & KBC_TYPE_MASK) < KBC_TYPE_PS2_NOREF);
|
int xt_mode = (keyboard_mode & 0x20) &&
|
||||||
|
(KBC_TYPE(dev) < KBC_TYPE_PS2_NOREF);
|
||||||
int translate = (keyboard_mode & 0x40);
|
int translate = (keyboard_mode & 0x40);
|
||||||
uint8_t fake_shift[4];
|
uint8_t fake_shift[4];
|
||||||
uint8_t num_lock = 0, shift_states = 0;
|
uint8_t num_lock = 0, shift_states = 0;
|
||||||
|
|
||||||
translate = translate || (keyboard_mode & 0x40) || xt_mode;
|
translate = translate || (keyboard_mode & 0x40) || xt_mode;
|
||||||
translate = translate || ((dev->flags & KBC_TYPE_MASK) == KBC_TYPE_PS2_2);
|
translate = translate || (KBC_TYPE(dev) == KBC_TYPE_PS2_2);
|
||||||
|
|
||||||
num_lock = !!(keyboard_get_state() & KBD_FLAG_NUM);
|
num_lock = !!(keyboard_get_state() & KBD_FLAG_NUM);
|
||||||
shift_states = keyboard_get_shift() & STATE_SHIFT_MASK;
|
shift_states = keyboard_get_shift() & STATE_SHIFT_MASK;
|
||||||
@@ -1893,8 +1897,7 @@ add_data_kbd(uint16_t val)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Test for T3100E 'Fn' key (Right Alt / Right Ctrl) */
|
/* Test for T3100E 'Fn' key (Right Alt / Right Ctrl) */
|
||||||
if ((dev != NULL) &&
|
if ((dev != NULL) && (KBC_VENDOR(dev) == KBC_VEN_TOSHIBA) &&
|
||||||
((dev->flags & KBC_VEN_MASK) == KBC_VEN_TOSHIBA) &&
|
|
||||||
(keyboard_recv(0xb8) || keyboard_recv(0x9d))) switch (val) {
|
(keyboard_recv(0xb8) || keyboard_recv(0x9d))) switch (val) {
|
||||||
case 0x4f: t3100e_notify_set(dev->func_priv, 0x01); break; /* End */
|
case 0x4f: t3100e_notify_set(dev->func_priv, 0x01); break; /* End */
|
||||||
case 0x50: t3100e_notify_set(dev->func_priv, 0x02); break; /* Down */
|
case 0x50: t3100e_notify_set(dev->func_priv, 0x02); break; /* Down */
|
||||||
@@ -2114,7 +2117,7 @@ write_cmd(atkbd_t *dev, uint8_t val)
|
|||||||
dev->wantirq = 0;
|
dev->wantirq = 0;
|
||||||
|
|
||||||
/* PS/2 type 2 keyboard controllers always force the XLAT bit to 0. */
|
/* PS/2 type 2 keyboard controllers always force the XLAT bit to 0. */
|
||||||
if ((dev->flags & KBC_TYPE_MASK) == KBC_TYPE_PS2_2) {
|
if (KBC_TYPE(dev) == KBC_TYPE_PS2_2) {
|
||||||
val &= ~CCB_TRANSLATE;
|
val &= ~CCB_TRANSLATE;
|
||||||
dev->mem[0] &= ~CCB_TRANSLATE;
|
dev->mem[0] &= ~CCB_TRANSLATE;
|
||||||
}
|
}
|
||||||
@@ -2129,8 +2132,8 @@ write_cmd(atkbd_t *dev, uint8_t val)
|
|||||||
|
|
||||||
/* ISA AT keyboard controllers use bit 5 for keyboard mode (1 = PC/XT, 2 = AT);
|
/* ISA AT keyboard controllers use bit 5 for keyboard mode (1 = PC/XT, 2 = AT);
|
||||||
PS/2 (and EISA/PCI) keyboard controllers use it as the PS/2 mouse enable switch. */
|
PS/2 (and EISA/PCI) keyboard controllers use it as the PS/2 mouse enable switch. */
|
||||||
if (((dev->flags & KBC_VEN_MASK) == KBC_VEN_AMI) ||
|
if ((KBC_VENDOR(dev) == KBC_VEN_AMI) ||
|
||||||
((dev->flags & KBC_TYPE_MASK) >= KBC_TYPE_PS2_NOREF)) {
|
(KBC_TYPE(dev) >= KBC_TYPE_PS2_NOREF)) {
|
||||||
keyboard_mode &= ~CCB_PCMODE;
|
keyboard_mode &= ~CCB_PCMODE;
|
||||||
|
|
||||||
mouse_scan = !(val & 0x20);
|
mouse_scan = !(val & 0x20);
|
||||||
@@ -2197,7 +2200,7 @@ write64_generic(void *priv, uint8_t val)
|
|||||||
|
|
||||||
switch (val) {
|
switch (val) {
|
||||||
case 0xa4: /* check if password installed */
|
case 0xa4: /* check if password installed */
|
||||||
if ((dev->flags & KBC_TYPE_MASK) >= KBC_TYPE_PS2_NOREF) {
|
if (KBC_TYPE(dev) >= KBC_TYPE_PS2_NOREF) {
|
||||||
DEBUG("ATkbd: check if password installed\n");
|
DEBUG("ATkbd: check if password installed\n");
|
||||||
add_data(dev, 0xf1);
|
add_data(dev, 0xf1);
|
||||||
return 0;
|
return 0;
|
||||||
@@ -2206,7 +2209,7 @@ write64_generic(void *priv, uint8_t val)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 0xa7: /* disable mouse port */
|
case 0xa7: /* disable mouse port */
|
||||||
if ((dev->flags & KBC_TYPE_MASK) >= KBC_TYPE_PS2_NOREF) {
|
if (KBC_TYPE(dev) >= KBC_TYPE_PS2_NOREF) {
|
||||||
DEBUG("ATkbd: disable mouse port\n");
|
DEBUG("ATkbd: disable mouse port\n");
|
||||||
set_enable_mouse(dev, 0);
|
set_enable_mouse(dev, 0);
|
||||||
return 0;
|
return 0;
|
||||||
@@ -2214,8 +2217,8 @@ write64_generic(void *priv, uint8_t val)
|
|||||||
ERRLOG("ATkbd: bad command A7\n");
|
ERRLOG("ATkbd: bad command A7\n");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0xa8: /*Enable mouse port*/
|
case 0xa8: /* enable mouse port */
|
||||||
if ((dev->flags & KBC_TYPE_MASK) >= KBC_TYPE_PS2_NOREF) {
|
if (KBC_TYPE(dev) >= KBC_TYPE_PS2_NOREF) {
|
||||||
DEBUG("ATkbd: enable mouse port\n");
|
DEBUG("ATkbd: enable mouse port\n");
|
||||||
set_enable_mouse(dev, 1);
|
set_enable_mouse(dev, 1);
|
||||||
return 0;
|
return 0;
|
||||||
@@ -2223,9 +2226,9 @@ write64_generic(void *priv, uint8_t val)
|
|||||||
ERRLOG("ATkbd: bad command A8\n");
|
ERRLOG("ATkbd: bad command A8\n");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0xa9: /*Test mouse port*/
|
case 0xa9: /* test mouse port */
|
||||||
DEBUG("ATkbd: test mouse port\n");
|
DEBUG("ATkbd: test mouse port\n");
|
||||||
if ((dev->flags & KBC_TYPE_MASK) >= KBC_TYPE_PS2_NOREF) {
|
if (KBC_TYPE(dev) >= KBC_TYPE_PS2_NOREF) {
|
||||||
if (mouse_write)
|
if (mouse_write)
|
||||||
add_data(dev, 0x00); /* no error */
|
add_data(dev, 0x00); /* no error */
|
||||||
else
|
else
|
||||||
@@ -2242,21 +2245,21 @@ write64_generic(void *priv, uint8_t val)
|
|||||||
|
|
||||||
case 0xc0: /* read input port */
|
case 0xc0: /* read input port */
|
||||||
DEBUG("ATkbd: read input port\n");
|
DEBUG("ATkbd: read input port\n");
|
||||||
if ((dev->flags & KBC_VEN_MASK) == KBC_VEN_IBM_PS1) {
|
if (KBC_VENDOR(dev) == KBC_VEN_IBM_PS1) {
|
||||||
current_drive = fdc_get_current_drive();
|
current_drive = fdc_get_current_drive();
|
||||||
add_data(dev, dev->input_port | 4 | (fdd_is_525(current_drive) ? 0x40 : 0x00));
|
add_data(dev, dev->input_port | (fdd_is_525(current_drive) ? 0x40 : 0x00));
|
||||||
dev->input_port = ((dev->input_port + 1) & 3) |
|
dev->input_port = ((dev->input_port + 1) & 3) |
|
||||||
(dev->input_port & 0xfc) |
|
(dev->input_port & 0xfc) |
|
||||||
(fdd_is_525(current_drive) ? 0x40 : 0x00);
|
(fdd_is_525(current_drive) ? 0x40 : 0x00);
|
||||||
} else {
|
} else {
|
||||||
add_data(dev, dev->input_port | 4);
|
add_data(dev, dev->input_port);
|
||||||
dev->input_port = ((dev->input_port + 1) & 3) |
|
dev->input_port = ((dev->input_port + 1) & 3) |
|
||||||
(dev->input_port & 0xfc);
|
(dev->input_port & 0xfc);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case 0xd3: /* write mouse output buffer */
|
case 0xd3: /* write mouse output buffer */
|
||||||
if ((dev->flags & KBC_TYPE_MASK) >= KBC_TYPE_PS2_NOREF) {
|
if (KBC_TYPE(dev) >= KBC_TYPE_PS2_NOREF) {
|
||||||
DEBUG("ATkbd: write mouse output buffer\n");
|
DEBUG("ATkbd: write mouse output buffer\n");
|
||||||
dev->want60 = 1;
|
dev->want60 = 1;
|
||||||
return 0;
|
return 0;
|
||||||
@@ -2265,7 +2268,7 @@ write64_generic(void *priv, uint8_t val)
|
|||||||
|
|
||||||
case 0xd4: /* write to mouse */
|
case 0xd4: /* write to mouse */
|
||||||
#if 0
|
#if 0
|
||||||
if ((dev->flags & KBC_TYPE_MASK) >= KBC_TYPE_PS2_NOREF) {
|
if (KBC_TYPE(dev) >= KBC_TYPE_PS2_NOREF) {
|
||||||
#endif
|
#endif
|
||||||
DEBUG("ATkbd: write to mouse\n");
|
DEBUG("ATkbd: write to mouse\n");
|
||||||
dev->want60 = 1;
|
dev->want60 = 1;
|
||||||
@@ -2399,7 +2402,7 @@ write64_ami(void *priv, uint8_t val)
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case 0xa2: /* clear keyboard controller lines P22/P23 */
|
case 0xa2: /* clear keyboard controller lines P22/P23 */
|
||||||
if ((dev->flags & KBC_TYPE_MASK) < KBC_TYPE_PS2_NOREF) {
|
if (KBC_TYPE(dev) < KBC_TYPE_PS2_NOREF) {
|
||||||
DEBUG("ATkbd: clear KBC lines P22/P23 (AMI)\n");
|
DEBUG("ATkbd: clear KBC lines P22/P23 (AMI)\n");
|
||||||
write_output(dev, dev->output_port & 0xf3);
|
write_output(dev, dev->output_port & 0xf3);
|
||||||
add_data(dev, 0x00);
|
add_data(dev, 0x00);
|
||||||
@@ -2408,7 +2411,7 @@ write64_ami(void *priv, uint8_t val)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 0xa3: /* set keyboard controller lines P22/P23 */
|
case 0xa3: /* set keyboard controller lines P22/P23 */
|
||||||
if ((dev->flags & KBC_TYPE_MASK) < KBC_TYPE_PS2_NOREF) {
|
if (KBC_TYPE(dev) < KBC_TYPE_PS2_NOREF) {
|
||||||
DEBUG("ATkbd: set KBC lines P22/P23 (AMI)\n");
|
DEBUG("ATkbd: set KBC lines P22/P23 (AMI)\n");
|
||||||
write_output(dev, dev->output_port | 0x0c);
|
write_output(dev, dev->output_port | 0x0c);
|
||||||
add_data(dev, 0x00);
|
add_data(dev, 0x00);
|
||||||
@@ -2417,7 +2420,7 @@ write64_ami(void *priv, uint8_t val)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 0xa4: /* write clock = low */
|
case 0xa4: /* write clock = low */
|
||||||
if ((dev->flags & KBC_TYPE_MASK) < KBC_TYPE_PS2_NOREF) {
|
if (KBC_TYPE(dev) < KBC_TYPE_PS2_NOREF) {
|
||||||
DEBUG("ATkbd: write clock=low (AMI)\n");
|
DEBUG("ATkbd: write clock=low (AMI)\n");
|
||||||
dev->ami_stat &= 0xfe;
|
dev->ami_stat &= 0xfe;
|
||||||
return 0;
|
return 0;
|
||||||
@@ -2425,7 +2428,7 @@ write64_ami(void *priv, uint8_t val)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 0xa5: /* write clock = high */
|
case 0xa5: /* write clock = high */
|
||||||
if ((dev->flags & KBC_TYPE_MASK) < KBC_TYPE_PS2_NOREF) {
|
if (KBC_TYPE(dev) < KBC_TYPE_PS2_NOREF) {
|
||||||
DEBUG("ATkbd: write clock=high (AMI)\n");
|
DEBUG("ATkbd: write clock=high (AMI)\n");
|
||||||
dev->ami_stat |= 0x01;
|
dev->ami_stat |= 0x01;
|
||||||
return 0;
|
return 0;
|
||||||
@@ -2433,7 +2436,7 @@ write64_ami(void *priv, uint8_t val)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 0xa6: /* read clock */
|
case 0xa6: /* read clock */
|
||||||
if ((dev->flags & KBC_TYPE_MASK) < KBC_TYPE_PS2_NOREF) {
|
if (KBC_TYPE(dev) < KBC_TYPE_PS2_NOREF) {
|
||||||
DEBUG("ATkbd: read clock (AMI)\n");
|
DEBUG("ATkbd: read clock (AMI)\n");
|
||||||
add_data(dev, !!(dev->ami_stat & 1));
|
add_data(dev, !!(dev->ami_stat & 1));
|
||||||
return 0;
|
return 0;
|
||||||
@@ -2441,7 +2444,7 @@ write64_ami(void *priv, uint8_t val)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 0xa7: /* write cache bad */
|
case 0xa7: /* write cache bad */
|
||||||
if ((dev->flags & KBC_TYPE_MASK) < KBC_TYPE_PS2_NOREF) {
|
if (KBC_TYPE(dev) < KBC_TYPE_PS2_NOREF) {
|
||||||
DEBUG("ATkbd: write cache bad (AMI)\n");
|
DEBUG("ATkbd: write cache bad (AMI)\n");
|
||||||
dev->ami_stat &= 0xfd;
|
dev->ami_stat &= 0xfd;
|
||||||
return 0;
|
return 0;
|
||||||
@@ -2449,7 +2452,7 @@ write64_ami(void *priv, uint8_t val)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 0xa8: /* write cache good */
|
case 0xa8: /* write cache good */
|
||||||
if ((dev->flags & KBC_TYPE_MASK) < KBC_TYPE_PS2_NOREF) {
|
if (KBC_TYPE(dev) < KBC_TYPE_PS2_NOREF) {
|
||||||
DEBUG("ATkbd: write cache good (AMI)\n");
|
DEBUG("ATkbd: write cache good (AMI)\n");
|
||||||
dev->ami_stat |= 0x02;
|
dev->ami_stat |= 0x02;
|
||||||
return 0;
|
return 0;
|
||||||
@@ -2457,7 +2460,7 @@ write64_ami(void *priv, uint8_t val)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 0xa9: /* read cache */
|
case 0xa9: /* read cache */
|
||||||
if ((dev->flags & KBC_TYPE_MASK) < KBC_TYPE_PS2_NOREF) {
|
if (KBC_TYPE(dev) < KBC_TYPE_PS2_NOREF) {
|
||||||
DEBUG("ATkbd: read cache (AMI)\n");
|
DEBUG("ATkbd: read cache (AMI)\n");
|
||||||
add_data(dev, !!(dev->ami_stat & 2));
|
add_data(dev, !!(dev->ami_stat & 2));
|
||||||
return 0;
|
return 0;
|
||||||
@@ -2703,7 +2706,7 @@ kbd_write(uint16_t port, uint8_t val, void *priv)
|
|||||||
int bad = 1;
|
int bad = 1;
|
||||||
uint8_t mask;
|
uint8_t mask;
|
||||||
|
|
||||||
if (((dev->flags & KBC_VEN_MASK) == KBC_VEN_XI8088) && (port == 0x63))
|
if ((KBC_VENDOR(dev) == KBC_VEN_XI8088) && (port == 0x63))
|
||||||
port = 0x61;
|
port = 0x61;
|
||||||
|
|
||||||
DBGLOG(2, "ATkbd: write(%04x, %02x)\n", port, val);
|
DBGLOG(2, "ATkbd: write(%04x, %02x)\n", port, val);
|
||||||
@@ -2746,7 +2749,7 @@ kbd_write(uint16_t port, uint8_t val, void *priv)
|
|||||||
|
|
||||||
case 0xd3: /* write to mouse output buffer */
|
case 0xd3: /* write to mouse output buffer */
|
||||||
DEBUG("ATkbd: write to mouse output buffer\n");
|
DEBUG("ATkbd: write to mouse output buffer\n");
|
||||||
if (mouse_write && ((dev->flags & KBC_TYPE_MASK) >= KBC_TYPE_PS2_NOREF))
|
if (mouse_write && (KBC_TYPE(dev) >= KBC_TYPE_PS2_NOREF))
|
||||||
keyboard_at_adddata_mouse(val);
|
keyboard_at_adddata_mouse(val);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -2757,9 +2760,9 @@ kbd_write(uint16_t port, uint8_t val, void *priv)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
set_enable_mouse(dev, 1);
|
set_enable_mouse(dev, 1);
|
||||||
if (mouse_write && ((dev->flags & KBC_TYPE_MASK) >= KBC_TYPE_PS2_NOREF))
|
if (mouse_write && (KBC_TYPE(dev) >= KBC_TYPE_PS2_NOREF))
|
||||||
mouse_write(val, mouse_p);
|
mouse_write(val, mouse_p);
|
||||||
else if (!mouse_write && ((dev->flags & KBC_TYPE_MASK) >= KBC_TYPE_PS2_NOREF))
|
else if (!mouse_write && (KBC_TYPE(dev) >= KBC_TYPE_PS2_NOREF))
|
||||||
keyboard_at_adddata_mouse(0xff);
|
keyboard_at_adddata_mouse(0xff);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -2991,9 +2994,8 @@ do_command:
|
|||||||
speaker_was_enable = 1;
|
speaker_was_enable = 1;
|
||||||
pit_set_gate(&pit, 2, val & 1);
|
pit_set_gate(&pit, 2, val & 1);
|
||||||
|
|
||||||
if ((dev->flags & KBC_VEN_MASK) == KBC_VEN_XI8088) {
|
if (KBC_VENDOR(dev) == KBC_VEN_XI8088)
|
||||||
dev->write_func(dev->func_priv, !!(val & 0x04));
|
dev->write_func(dev->func_priv, !!(val & 0x04));
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x64:
|
case 0x64:
|
||||||
@@ -3027,7 +3029,7 @@ do_command:
|
|||||||
|
|
||||||
case 0xaa: /* self-test */
|
case 0xaa: /* self-test */
|
||||||
DEBUG("ATkbd: self-test\n");
|
DEBUG("ATkbd: self-test\n");
|
||||||
if ((dev->flags & KBC_VEN_MASK) == KBC_VEN_TOSHIBA)
|
if (KBC_VENDOR(dev) == KBC_VEN_TOSHIBA)
|
||||||
dev->status |= STAT_IFULL;
|
dev->status |= STAT_IFULL;
|
||||||
if (! dev->initialized) {
|
if (! dev->initialized) {
|
||||||
dev->initialized = 1;
|
dev->initialized = 1;
|
||||||
@@ -3037,7 +3039,7 @@ do_command:
|
|||||||
dev->status |= STAT_SYSFLAG;
|
dev->status |= STAT_SYSFLAG;
|
||||||
dev->mem[0] |= 0x04;
|
dev->mem[0] |= 0x04;
|
||||||
set_enable_kbd(dev, 1);
|
set_enable_kbd(dev, 1);
|
||||||
if ((dev->flags & KBC_TYPE_MASK) >= KBC_TYPE_PS2_NOREF)
|
if (KBC_TYPE(dev) >= KBC_TYPE_PS2_NOREF)
|
||||||
set_enable_mouse(dev, 1);
|
set_enable_mouse(dev, 1);
|
||||||
write_output(dev, 0xcf);
|
write_output(dev, 0xcf);
|
||||||
add_data(dev, 0x55);
|
add_data(dev, 0x55);
|
||||||
@@ -3072,7 +3074,7 @@ do_command:
|
|||||||
mask = 0xff;
|
mask = 0xff;
|
||||||
if (! keyboard_scan)
|
if (! keyboard_scan)
|
||||||
mask &= 0xbf;
|
mask &= 0xbf;
|
||||||
if (!mouse_scan && ((dev->flags & KBC_TYPE_MASK) >= KBC_TYPE_PS2_NOREF))
|
if (!mouse_scan && (KBC_TYPE(dev) >= KBC_TYPE_PS2_NOREF))
|
||||||
mask &= 0xf7;
|
mask &= 0xf7;
|
||||||
add_data(dev, dev->output_port & mask);
|
add_data(dev, dev->output_port & mask);
|
||||||
break;
|
break;
|
||||||
@@ -3136,7 +3138,7 @@ kbd_read(uint16_t port, void *priv)
|
|||||||
atkbd_t *dev = (atkbd_t *)priv;
|
atkbd_t *dev = (atkbd_t *)priv;
|
||||||
uint8_t ret = 0xff;
|
uint8_t ret = 0xff;
|
||||||
|
|
||||||
if (((dev->flags & KBC_VEN_MASK) == KBC_VEN_XI8088) && (port == 0x63))
|
if ((KBC_VENDOR(dev) == KBC_VEN_XI8088) && (port == 0x63))
|
||||||
port = 0x61;
|
port = 0x61;
|
||||||
|
|
||||||
switch (port) {
|
switch (port) {
|
||||||
@@ -3153,13 +3155,13 @@ kbd_read(uint16_t port, void *priv)
|
|||||||
ret = ppi.pb & ~0xe0;
|
ret = ppi.pb & ~0xe0;
|
||||||
if (ppispeakon)
|
if (ppispeakon)
|
||||||
ret |= 0x20;
|
ret |= 0x20;
|
||||||
if ((dev->flags & KBC_TYPE_MASK) > KBC_TYPE_PS2_NOREF) {
|
if (KBC_TYPE(dev) > KBC_TYPE_PS2_NOREF) {
|
||||||
if (dev->refresh)
|
if (dev->refresh)
|
||||||
ret |= 0x10;
|
ret |= 0x10;
|
||||||
else
|
else
|
||||||
ret &= ~0x10;
|
ret &= ~0x10;
|
||||||
}
|
}
|
||||||
if ((dev->flags & KBC_VEN_MASK) == KBC_VEN_XI8088) {
|
if (KBC_VENDOR(dev) == KBC_VEN_XI8088) {
|
||||||
if (dev->read_func(dev->func_priv))
|
if (dev->read_func(dev->func_priv))
|
||||||
ret |= 0x04;
|
ret |= 0x04;
|
||||||
else
|
else
|
||||||
@@ -3214,10 +3216,13 @@ kbd_reset(void *priv)
|
|||||||
dev->key_wantdata = 0;
|
dev->key_wantdata = 0;
|
||||||
|
|
||||||
/* Set up the correct Video Type bits. */
|
/* Set up the correct Video Type bits. */
|
||||||
if ((dev->flags & KBC_VEN_MASK) == KBC_VEN_XI8088)
|
if (KBC_VENDOR(dev) == KBC_VEN_XI8088)
|
||||||
dev->input_port = (video_type() == VID_TYPE_MDA) ? 0xb0 : 0xf0;
|
dev->input_port = (video_type() == VID_TYPE_MDA) ? 0xb0 : 0xf0;
|
||||||
else
|
else
|
||||||
dev->input_port = (video_type() == VID_TYPE_MDA) ? 0xf0 : 0xb0;
|
dev->input_port = (video_type() == VID_TYPE_MDA) ? 0xf0 : 0xb0;
|
||||||
|
|
||||||
|
/* For now, always assume high-speed mode. */
|
||||||
|
dev->input_port |= 0x04;
|
||||||
DEBUG("ATkbd: input port = %02x\n", dev->input_port);
|
DEBUG("ATkbd: input port = %02x\n", dev->input_port);
|
||||||
|
|
||||||
keyboard_mode = 0x02 | dev->dtrans;
|
keyboard_mode = 0x02 | dev->dtrans;
|
||||||
@@ -3274,7 +3279,7 @@ kbd_init(const device_t *info, UNUSED(void *parent))
|
|||||||
|
|
||||||
timer_add(kbd_poll, dev, &keyboard_delay, TIMER_ALWAYS_ENABLED);
|
timer_add(kbd_poll, dev, &keyboard_delay, TIMER_ALWAYS_ENABLED);
|
||||||
|
|
||||||
if ((dev->flags & KBC_TYPE_MASK) > KBC_TYPE_PS2_NOREF)
|
if (KBC_TYPE(dev) > KBC_TYPE_PS2_NOREF)
|
||||||
timer_add(kbd_refresh, dev, &dev->refresh_time, TIMER_ALWAYS_ENABLED);
|
timer_add(kbd_refresh, dev, &dev->refresh_time, TIMER_ALWAYS_ENABLED);
|
||||||
|
|
||||||
timer_add(pulse_poll, dev, &dev->pulse_cb, &dev->pulse_cb);
|
timer_add(pulse_poll, dev, &dev->pulse_cb, &dev->pulse_cb);
|
||||||
@@ -3282,7 +3287,7 @@ kbd_init(const device_t *info, UNUSED(void *parent))
|
|||||||
dev->write60_ven = NULL;
|
dev->write60_ven = NULL;
|
||||||
dev->write64_ven = NULL;
|
dev->write64_ven = NULL;
|
||||||
|
|
||||||
switch(dev->flags & KBC_VEN_MASK) {
|
switch(KBC_VENDOR(dev)) {
|
||||||
case KBC_VEN_GENERIC:
|
case KBC_VEN_GENERIC:
|
||||||
case KBC_VEN_IBM_PS1:
|
case KBC_VEN_IBM_PS1:
|
||||||
dev->write64_ven = write64_generic;
|
dev->write64_ven = write64_generic;
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
* The lower half of the driver can interface to the host system
|
* The lower half of the driver can interface to the host system
|
||||||
* serial ports, or other channels, for real-world access.
|
* serial ports, or other channels, for real-world access.
|
||||||
*
|
*
|
||||||
* Version: @(#)serial.c 1.0.15 2019/04/25
|
* Version: @(#)serial.c 1.0.16 2019/04/30
|
||||||
*
|
*
|
||||||
* Author: Fred N. van Kempen, <decwiz@yahoo.com>
|
* Author: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||||
*
|
*
|
||||||
@@ -317,23 +317,22 @@ read_fifo(serial_t *dev)
|
|||||||
dev->fifo_read = 0;
|
dev->fifo_read = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
/* If we have more, generate (new) int. */
|
|
||||||
if (sp->fifo_read != sp->fifo_write) {
|
|
||||||
#if 1
|
#if 1
|
||||||
sp->delay = 1000*TIMER_USEC;
|
/* If we have more, generate (new) int. */
|
||||||
|
if (dev->fifo_read != dev->fifo_write) {
|
||||||
|
#if 1
|
||||||
|
dev->delay = 1000*TIMER_USEC;
|
||||||
#else
|
#else
|
||||||
if (sp->bh != NULL) {
|
if (dev->bh != NULL) {
|
||||||
sp->int_status |= SERINT_RECEIVE;
|
dev->int_status |= SERINT_RECEIVE;
|
||||||
sp->lsr |= LSR_DR;
|
dev->lsr |= LSR_DR;
|
||||||
|
|
||||||
/* Update interrupt state. */
|
/* Update interrupt state. */
|
||||||
update_ints(sp);
|
update_ints(dev);
|
||||||
} else {
|
} else {
|
||||||
sp->delay = 1000*TIMER_USEC;
|
dev->delay = 1000*TIMER_USEC;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -429,17 +428,17 @@ ser_write(uint16_t addr, uint8_t val, void *priv)
|
|||||||
/* DLAB clear, regular data write. */
|
/* DLAB clear, regular data write. */
|
||||||
dev->thr = val;
|
dev->thr = val;
|
||||||
|
|
||||||
|
if (dev->ops && dev->ops->write) {
|
||||||
|
dev->ops->write(dev, dev->ops_arg, dev->thr);
|
||||||
#ifdef USE_HOST_SERIAL
|
#ifdef USE_HOST_SERIAL
|
||||||
if (dev->bh != NULL) {
|
} else if (dev->bh != NULL) {
|
||||||
/* We are linked, so send to BH layer. */
|
/* We are linked, so send to BH layer. */
|
||||||
plat_serial_write(dev->bh, dev->thr);
|
plat_serial_write(dev->bh, dev->thr);
|
||||||
} else
|
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
if (dev->ops && dev->ops->write)
|
|
||||||
dev->ops->write(dev, dev->ops_arg, val);
|
|
||||||
|
|
||||||
/* WRITE completed, we are ready for more. */
|
/* WRITE completed, we are ready for more. */
|
||||||
|
//FIXME: add a callback delay here.
|
||||||
dev->lsr |= LSR_THRE;
|
dev->lsr |= LSR_THRE;
|
||||||
dev->int_status |= SER_INT_TX;
|
dev->int_status |= SER_INT_TX;
|
||||||
update_ints(dev);
|
update_ints(dev);
|
||||||
@@ -467,8 +466,12 @@ ser_write(uint16_t addr, uint8_t val, void *priv)
|
|||||||
|
|
||||||
case 2: /* FCR */
|
case 2: /* FCR */
|
||||||
if (dev->type >= UART_TYPE_16550) {
|
if (dev->type >= UART_TYPE_16550) {
|
||||||
pclog(0,"Serial%i: tried to enable FIFO (%02x), type %d!\n", dev->port, val, dev->type);
|
INFO("Serial%i: enable FIFO (%02x), type %i!\n", dev->port, val, dev->type);
|
||||||
dev->fcr = val;
|
dev->fcr = val;
|
||||||
|
if (val == 0x00)
|
||||||
|
dev->iir &= ~IIR_FIFOENB; /* off */
|
||||||
|
else
|
||||||
|
dev->iir |= IIR_FIFOENB; /* enabled */
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -507,10 +510,12 @@ pclog(0,"Serial%i: tried to enable FIFO (%02x), type %d!\n", dev->port, val, dev
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 4: /* MCR */
|
case 4: /* MCR */
|
||||||
|
#if 0
|
||||||
if (dev->bh == NULL) {
|
if (dev->bh == NULL) {
|
||||||
/* Not linked, force LOOPBACK mode. */
|
/* Not linked, force LOOPBACK mode. */
|
||||||
val |= MCR_LMS;
|
val |= MCR_LMS;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if ((val & MCR_RTS) && !(dev->mcr & MCR_RTS)) {
|
if ((val & MCR_RTS) && !(dev->mcr & MCR_RTS)) {
|
||||||
/*
|
/*
|
||||||
@@ -687,6 +692,8 @@ ser_read(uint16_t addr, void *priv)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DEBUG("Serial%i: read(%i) = %02x\n", dev->port, (addr & 0x0007), ret);
|
||||||
|
|
||||||
return(ret);
|
return(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -780,7 +787,11 @@ serial_reset(void)
|
|||||||
dev = &ports[i];
|
dev = &ports[i];
|
||||||
memset(dev, 0x00, sizeof(serial_t));
|
memset(dev, 0x00, sizeof(serial_t));
|
||||||
dev->port = i;
|
dev->port = i;
|
||||||
|
#if 1
|
||||||
|
dev->type = UART_TYPE_16550;
|
||||||
|
#else
|
||||||
dev->type = UART_TYPE_8250;
|
dev->type = UART_TYPE_8250;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Set up default port and IRQ for the device. */
|
/* Set up default port and IRQ for the device. */
|
||||||
switch(i) {
|
switch(i) {
|
||||||
@@ -820,8 +831,8 @@ serial_setup(int id, uint16_t port, int8_t irq)
|
|||||||
{
|
{
|
||||||
serial_t *dev = &ports[id];
|
serial_t *dev = &ports[id];
|
||||||
|
|
||||||
INFO("SERIAL: setting up COM%i as %04X [enabled=%i]\n",
|
INFO("SERIAL: setting up COM%i as %04X,%i [enabled=%i]\n",
|
||||||
id+1, port, serial_enabled[id]);
|
id+1, port, irq, serial_enabled[id]);
|
||||||
|
|
||||||
if (! serial_enabled[id]) return;
|
if (! serial_enabled[id]) return;
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
* Emulation of the 3DFX Voodoo Graphics controller.
|
* Emulation of the 3DFX Voodoo Graphics controller.
|
||||||
*
|
*
|
||||||
* Version: @(#)vid_voodoo.c 1.0.19 2019/04/25
|
* Version: @(#)vid_voodoo.c 1.0.20 2019/04/30
|
||||||
*
|
*
|
||||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||||
* Miran Grca, <mgrca8@gmail.com>
|
* Miran Grca, <mgrca8@gmail.com>
|
||||||
@@ -424,7 +424,7 @@ typedef struct voodoo_t
|
|||||||
int dst_stride;
|
int dst_stride;
|
||||||
} blt;
|
} blt;
|
||||||
|
|
||||||
rgbp_t clutData[33];
|
rgbp_t clutData[64];
|
||||||
int clutData_dirty;
|
int clutData_dirty;
|
||||||
rgbp_t clutData256[256];
|
rgbp_t clutData256[256];
|
||||||
uint32_t video_16to32[0x10000];
|
uint32_t video_16to32[0x10000];
|
||||||
|
|||||||
@@ -48,7 +48,7 @@
|
|||||||
*
|
*
|
||||||
* This works around the timing loop mentioned above.
|
* This works around the timing loop mentioned above.
|
||||||
*
|
*
|
||||||
* Version: @(#)m_ps2_mca.c 1.0.24 2019/04/29
|
* Version: @(#)m_ps2_mca.c 1.0.24 2019/04/30
|
||||||
*
|
*
|
||||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||||
* Miran Grca, <mgrca8@gmail.com>
|
* Miran Grca, <mgrca8@gmail.com>
|
||||||
@@ -550,7 +550,10 @@ model_50_init(ps2_t *dev)
|
|||||||
dev->planar_write = model_50_write;
|
dev->planar_write = model_50_write;
|
||||||
|
|
||||||
if (mem_size > 2048) {
|
if (mem_size > 2048) {
|
||||||
/* Only 2 MB supported on planar, create a memory expansion card for the rest */
|
/*
|
||||||
|
* The M50 planar only supports up to 2 MB.
|
||||||
|
* If we have more, create a memory expansion card for the rest.
|
||||||
|
*/
|
||||||
mem_fffc_init(dev, 2);
|
mem_fffc_init(dev, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1437,10 +1440,12 @@ ps2_init(const device_t *info, void *arg)
|
|||||||
machine_common_init();
|
machine_common_init();
|
||||||
|
|
||||||
dma16_init();
|
dma16_init();
|
||||||
pic2_init();
|
|
||||||
ps2_dma_init();
|
ps2_dma_init();
|
||||||
|
pic2_init();
|
||||||
pit_ps2_init();
|
pit_ps2_init();
|
||||||
|
|
||||||
|
nmi_mask = 0x80;
|
||||||
|
|
||||||
device_add(&ps_nvr_device);
|
device_add(&ps_nvr_device);
|
||||||
|
|
||||||
device_add(&fdc_at_device);
|
device_add(&fdc_at_device);
|
||||||
@@ -1451,8 +1456,6 @@ ps2_init(const device_t *info, void *arg)
|
|||||||
|
|
||||||
port_92_add(0);
|
port_92_add(0);
|
||||||
|
|
||||||
nmi_mask = 0x80;
|
|
||||||
|
|
||||||
io_sethandler(0x0091, 1,
|
io_sethandler(0x0091, 1,
|
||||||
ps2_mca_read,NULL,NULL, ps2_mca_write,NULL,NULL, dev);
|
ps2_mca_read,NULL,NULL, ps2_mca_write,NULL,NULL, dev);
|
||||||
io_sethandler(0x0094, 1,
|
io_sethandler(0x0094, 1,
|
||||||
|
|||||||
4
src/pc.c
4
src/pc.c
@@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
* Main emulator module where most things are controlled.
|
* Main emulator module where most things are controlled.
|
||||||
*
|
*
|
||||||
* Version: @(#)pc.c 1.0.72 2019/04/29
|
* Version: @(#)pc.c 1.0.73 2019/04/30
|
||||||
*
|
*
|
||||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||||
* Miran Grca, <mgrca8@gmail.com>
|
* Miran Grca, <mgrca8@gmail.com>
|
||||||
@@ -771,7 +771,7 @@ pc_set_speed(int turbo)
|
|||||||
* For PC and XT class, this will return max speed.
|
* For PC and XT class, this will return max speed.
|
||||||
*/
|
*/
|
||||||
speed = machine_get_speed(turbo);
|
speed = machine_get_speed(turbo);
|
||||||
INFO("PC: set_speed(%i) -> speed %lu\n", turbo, speed);
|
DEBUG("PC: set_speed(%i) -> speed %lu\n", turbo, speed);
|
||||||
|
|
||||||
if (cpu_get_type() >= CPU_286) {
|
if (cpu_get_type() >= CPU_286) {
|
||||||
/* For 286+, we are done. */
|
/* For 286+, we are done. */
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
* Handling of ROM image files.
|
* Handling of ROM image files.
|
||||||
*
|
*
|
||||||
* Version: @(#)rom.c 1.0.18 2019/04/11
|
* Version: @(#)rom.c 1.0.19 2019/04/30
|
||||||
*
|
*
|
||||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||||
* Miran Grca, <mgrca8@gmail.com>
|
* Miran Grca, <mgrca8@gmail.com>
|
||||||
@@ -193,7 +193,7 @@ rom_add_upper_bios(void)
|
|||||||
mem_map_add(&bios_mapping[i], base, size,
|
mem_map_add(&bios_mapping[i], base, size,
|
||||||
rom_bios_read,rom_bios_readw,rom_bios_readl,
|
rom_bios_read,rom_bios_readw,rom_bios_readl,
|
||||||
mem_write_null,mem_write_nullw,mem_write_nulll,
|
mem_write_null,mem_write_nullw,mem_write_nulll,
|
||||||
bios + ((0x10000 + (size * i)) & biosmask),
|
bios + ((size * i) & biosmask),
|
||||||
MEM_MAPPING_EXTERNAL|MEM_MAPPING_ROM, 0);
|
MEM_MAPPING_EXTERNAL|MEM_MAPPING_ROM, 0);
|
||||||
base += size;
|
base += size;
|
||||||
}
|
}
|
||||||
@@ -228,7 +228,8 @@ rom_add_bios(void)
|
|||||||
mem_map_add(&bios_high_mapping[i], hibase, size,
|
mem_map_add(&bios_high_mapping[i], hibase, size,
|
||||||
rom_bios_read,rom_bios_readw,rom_bios_readl,
|
rom_bios_read,rom_bios_readw,rom_bios_readl,
|
||||||
mem_write_null,mem_write_nullw,mem_write_nulll,
|
mem_write_null,mem_write_nullw,mem_write_nulll,
|
||||||
bios + ((size * i) & biosmask), MEM_MAPPING_ROM, 0);
|
bios + ((size * i) & biosmask),
|
||||||
|
MEM_MAPPING_ROM, 0);
|
||||||
hibase += size;
|
hibase += size;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -282,7 +283,6 @@ rom_load_interleaved(const wchar_t *fnl, const wchar_t *fnh, uint32_t addr, int
|
|||||||
addr = 0;
|
addr = 0;
|
||||||
else
|
else
|
||||||
addr &= 0x03ffff;
|
addr &= 0x03ffff;
|
||||||
INFO("ROM: loading %i bytes at %06lx\n", sz, addr);
|
|
||||||
|
|
||||||
(void)fseek(fl, off, SEEK_SET);
|
(void)fseek(fl, off, SEEK_SET);
|
||||||
(void)fseek(fh, off, SEEK_SET);
|
(void)fseek(fh, off, SEEK_SET);
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
* or to use a generic handler, and then pass it a pointer
|
* or to use a generic handler, and then pass it a pointer
|
||||||
* to a command table. For now, we don't.
|
* to a command table. For now, we don't.
|
||||||
*
|
*
|
||||||
* Version: @(#)rom_load.c 1.0.14 2019/03/17
|
* Version: @(#)rom_load.c 1.0.15 2019/04/30
|
||||||
*
|
*
|
||||||
* Author: Fred N. van Kempen, <decwiz@yahoo.com>
|
* Author: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||||
*
|
*
|
||||||
@@ -385,20 +385,20 @@ rom_load_bios(romdef_t *r, const wchar_t *fn, int test_only)
|
|||||||
return(1);
|
return(1);
|
||||||
|
|
||||||
/* Show the resulting data. */
|
/* Show the resulting data. */
|
||||||
INFO("Size : %lu\n", r->total);
|
INFO(" Size : %lu\n", r->total);
|
||||||
INFO("Offset : 0x%06lx (%lu)\n", r->offset, r->offset);
|
INFO(" Offset : 0x%06lx (%lu)\n", r->offset, r->offset);
|
||||||
INFO("Mode : %s\n", (r->mode == 1)?"interleaved":"linear");
|
INFO(" Mode : %s\n", (r->mode == 1)?"interleaved":"linear");
|
||||||
INFO("Files : %i\n", r->nfiles);
|
INFO(" Files : %i\n", r->nfiles);
|
||||||
for (c = 0; c < r->nfiles; c++) {
|
for (c = 0; c < r->nfiles; c++) {
|
||||||
INFO("%c[%i] : '%ls', %i, 0x%06lx, %i\n",
|
INFO(" %c[%i] : '%ls', %i, 0x%06lx, %i\n",
|
||||||
(r->files[c].offset==0xffffffff)?'*':' ', c+1,
|
(r->files[c].offset==0xffffffff)?'*':' ', c+1,
|
||||||
r->files[c].path, r->files[c].skip,
|
r->files[c].path, r->files[c].skip,
|
||||||
r->files[c].offset, r->files[c].size);
|
r->files[c].offset, r->files[c].size);
|
||||||
}
|
}
|
||||||
if (r->fontnum != -1)
|
if (r->fontnum != -1)
|
||||||
INFO("Font : %i, '%ls'\n", r->fontnum, r->fontfn);
|
INFO(" Font : %i, '%ls'\n", r->fontnum, r->fontfn);
|
||||||
if (r->vidsz != 0)
|
if (r->vidsz != 0)
|
||||||
INFO("VideoBIOS: '%ls', %i\n", r->vidfn, r->vidsz);
|
INFO(" VideoBIOS: '%ls', %i\n", r->vidfn, r->vidsz);
|
||||||
|
|
||||||
/* Actually perform the work. */
|
/* Actually perform the work. */
|
||||||
switch(r->mode) {
|
switch(r->mode) {
|
||||||
@@ -428,7 +428,6 @@ rom_load_bios(romdef_t *r, const wchar_t *fn, int test_only)
|
|||||||
|
|
||||||
pc_path(script, sizeof_w(script), r->files[c].path);
|
pc_path(script, sizeof_w(script), r->files[c].path);
|
||||||
pc_path(temp, sizeof_w(temp), r->files[c+1].path);
|
pc_path(temp, sizeof_w(temp), r->files[c+1].path);
|
||||||
INFO("ROM: loading '%ls'/'%ls' at %06lx, size=%i, skip=%i\n", script, temp, r->files[c].offset, r->files[c].size, r->files[c].skip);
|
|
||||||
|
|
||||||
i = rom_load_interleaved(script, temp,
|
i = rom_load_interleaved(script, temp,
|
||||||
r->files[c].offset,
|
r->files[c].offset,
|
||||||
@@ -445,20 +444,6 @@ INFO("ROM: loading '%ls'/'%ls' at %06lx, size=%i, skip=%i\n", script, temp, r->f
|
|||||||
else
|
else
|
||||||
biosmask = 0x00ffff;
|
biosmask = 0x00ffff;
|
||||||
|
|
||||||
#if defined(WALTJE) && defined(_DEBUG)
|
|
||||||
//FIXME: this will go away again!
|
|
||||||
{
|
|
||||||
char foo[32768];
|
|
||||||
INFO("ROM loaded, total=%i, mask=%06x\n", r->total, biosmask);
|
|
||||||
pclog_repeat(0);
|
|
||||||
for (i = 0; i < r->total; i += 4096) {
|
|
||||||
hexdump_p(foo, i, &bios[i], 4096);
|
|
||||||
pclog(0, foo);
|
|
||||||
}
|
|
||||||
pclog_repeat(1);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Create a full pathname for the video font file. */
|
/* Create a full pathname for the video font file. */
|
||||||
if (r->fontnum != -1) {
|
if (r->fontnum != -1) {
|
||||||
plat_append_filename(temp, path, r->fontfn);
|
plat_append_filename(temp, path, r->fontfn);
|
||||||
@@ -471,7 +456,7 @@ pclog_repeat(1);
|
|||||||
pc_path(r->vidfn, sizeof_w(r->vidfn), temp);
|
pc_path(r->vidfn, sizeof_w(r->vidfn), temp);
|
||||||
}
|
}
|
||||||
|
|
||||||
INFO("ROM: tot %lu, mask 0x%06lx\n", r->total, biosmask);
|
INFO("ROM: total %lu, mask 0x%06lx\n", r->total, biosmask);
|
||||||
|
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
* Misc stuff for UI, doesn't fit anywhere else..
|
* Misc stuff for UI, doesn't fit anywhere else..
|
||||||
*
|
*
|
||||||
* Version: @(#)ui_misc.c 1.0.3 2019/04/26
|
* Version: @(#)ui_misc.c 1.0.4 2019/04/30
|
||||||
*
|
*
|
||||||
* Author: Fred N. van Kempen, <decwiz@yahoo.com>
|
* Author: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||||
*
|
*
|
||||||
@@ -61,8 +61,11 @@ ui_set_kbd_state(int flags)
|
|||||||
/* First of all, update our status bar. */
|
/* First of all, update our status bar. */
|
||||||
ui_sb_kbstate(flags);
|
ui_sb_kbstate(flags);
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
//FIXME: not yet.
|
||||||
/* Let the platform code try to update the host keyboard. */
|
/* Let the platform code try to update the host keyboard. */
|
||||||
plat_set_kbd_state(flags);
|
plat_set_kbd_state(flags);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
* Handle the various video renderer modules.
|
* Handle the various video renderer modules.
|
||||||
*
|
*
|
||||||
* Version: @(#)ui_vidapi.c 1.0.6 2019/04/29
|
* Version: @(#)ui_vidapi.c 1.0.6 2019/04/30
|
||||||
*
|
*
|
||||||
* Author: Fred N. van Kempen, <decwiz@yahoo.com>
|
* Author: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||||
*
|
*
|
||||||
@@ -119,7 +119,7 @@ vidapi_set(int api)
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
INFO("Initializing VIDAPI: api=%d\n", api);
|
INFO("VIDAPI: initializing (api=%i)\n", api);
|
||||||
|
|
||||||
/* Lock the blitter. */
|
/* Lock the blitter. */
|
||||||
plat_startblit();
|
plat_startblit();
|
||||||
@@ -218,7 +218,7 @@ vidapi_screenshot(void)
|
|||||||
struct tm *info;
|
struct tm *info;
|
||||||
time_t now;
|
time_t now;
|
||||||
|
|
||||||
DEBUG("Screenshot: video API is: %i\n", vid_api);
|
DEBUG("VIDAPI: screenshot (api=%i)\n", vid_api);
|
||||||
|
|
||||||
if (vid_api < 0) return;
|
if (vid_api < 0) return;
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
* Platform main support module for Windows.
|
* Platform main support module for Windows.
|
||||||
*
|
*
|
||||||
* Version: @(#)win.c 1.0.27 2019/03/05
|
* Version: @(#)win.c 1.0.28 2019/04/30
|
||||||
*
|
*
|
||||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||||
* Miran Grca, <mgrca8@gmail.com>
|
* Miran Grca, <mgrca8@gmail.com>
|
||||||
@@ -290,7 +290,7 @@ plat_start(void)
|
|||||||
timeBeginPeriod(1);
|
timeBeginPeriod(1);
|
||||||
QueryPerformanceFrequency(&qpc);
|
QueryPerformanceFrequency(&qpc);
|
||||||
freq = qpc.QuadPart;
|
freq = qpc.QuadPart;
|
||||||
INFO("Main timer precision: %llu\n", freq);
|
DEBUG("WIN: main timer precision: %llu\n", freq);
|
||||||
|
|
||||||
/* Start the emulator, really. */
|
/* Start the emulator, really. */
|
||||||
thMain = thread_create(pc_thread, &quited);
|
thMain = thread_create(pc_thread, &quited);
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
* Implementation of the Settings dialog.
|
* Implementation of the Settings dialog.
|
||||||
*
|
*
|
||||||
* Version: @(#)win_settings_floppy.h 1.0.11 2019/03/21
|
* Version: @(#)win_settings_floppy.h 1.0.12 2019/04/30
|
||||||
*
|
*
|
||||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||||
* Miran Grca, <mgrca8@gmail.com>
|
* Miran Grca, <mgrca8@gmail.com>
|
||||||
@@ -252,11 +252,10 @@ floppy_proc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
|
|
||||||
if ((((LPNMHDR)lParam)->code == LVN_ITEMCHANGED) && (((LPNMHDR)lParam)->idFrom == IDC_LIST_FLOPPY_DRIVES)) {
|
if ((((LPNMHDR)lParam)->code == LVN_ITEMCHANGED) && (((LPNMHDR)lParam)->idFrom == IDC_LIST_FLOPPY_DRIVES)) {
|
||||||
old_sel = fdlv_current_sel;
|
old_sel = fdlv_current_sel;
|
||||||
h = GetDlgItem(hdlg, IDC_LIST_FLOPPY_DRIVES);
|
|
||||||
fdlv_current_sel = floppy_get_selected(hdlg);
|
fdlv_current_sel = floppy_get_selected(hdlg);
|
||||||
if (fdlv_current_sel == old_sel) {
|
if (fdlv_current_sel == old_sel)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
} else if (fdlv_current_sel == -1) {
|
if (fdlv_current_sel == -1) {
|
||||||
fd_ignore_change = 1;
|
fd_ignore_change = 1;
|
||||||
fdlv_current_sel = old_sel;
|
fdlv_current_sel = old_sel;
|
||||||
ListView_SetItemState(h, fdlv_current_sel, LVIS_FOCUSED | LVIS_SELECTED, 0x000F);
|
ListView_SetItemState(h, fdlv_current_sel, LVIS_FOCUSED | LVIS_SELECTED, 0x000F);
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
* Implement the user Interface module.
|
* Implement the user Interface module.
|
||||||
*
|
*
|
||||||
* Version: @(#)win_ui.c 1.0.36 2019/04/29
|
* Version: @(#)win_ui.c 1.0.37 2019/04/30
|
||||||
*
|
*
|
||||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||||
* Miran Grca, <mgrca8@gmail.com>
|
* Miran Grca, <mgrca8@gmail.com>
|
||||||
@@ -1077,7 +1077,9 @@ plat_set_kbd_state(int flags)
|
|||||||
kbdata[0].type = kbdata[1].type = INPUT_KEYBOARD;
|
kbdata[0].type = kbdata[1].type = INPUT_KEYBOARD;
|
||||||
kbdata[1].ki.dwFlags = KEYEVENTF_KEYUP;
|
kbdata[1].ki.dwFlags = KEYEVENTF_KEYUP;
|
||||||
|
|
||||||
INFO("WIN kbd_state(%04x) [%04x] focus=%d\n" , flags, kbd_flags, infocus);
|
DEBUG("WIN: set_kbd_state(%04x) [%04x] focus=%d\n",
|
||||||
|
flags, kbd_flags, infocus);
|
||||||
|
|
||||||
if (kbd_flags != flags) {
|
if (kbd_flags != flags) {
|
||||||
/* Save the new flags. */
|
/* Save the new flags. */
|
||||||
kbd_flags = flags;
|
kbd_flags = flags;
|
||||||
|
|||||||
Reference in New Issue
Block a user