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:
waltje
2019-04-30 21:18:29 -05:00
parent 6443e1ffec
commit f56cb9eec8
14 changed files with 124 additions and 114 deletions

View File

@@ -66,6 +66,7 @@
# Build the project.
echo ; echo "Building VARCem #${TRAVIS_BUILD_NUMBER} target ${TARGET}"
echo "Options selected: ${OPTS}"
cd src

View File

@@ -8,7 +8,7 @@
*
* 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>
* Sarah Walker, <tommowalker@tommowalker.co.uk>
@@ -162,7 +162,8 @@ static int ILLEGAL(uint32_t fetchdat)
{
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();
return 0;
}

View File

@@ -16,7 +16,7 @@
* it either will not process ctrl-alt-esc, or it will not do
* 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>
* 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_2 0x03 /* PS2 on PS/2, type 2 */
#define KBC_TYPE_MASK 0x03
#define KBC_TYPE(x) ((x)->flags & KBC_TYPE_MASK)
#define KBC_VEN_GENERIC 0x00
#define KBC_VEN_AMI 0x04
@@ -112,6 +113,7 @@
#define KBC_VEN_IBM_PS1 0x18
#define KBC_VEN_ACER 0x1c
#define KBC_VEN_MASK 0x1c
#define KBC_VENDOR(x) ((x)->flags & KBC_VEN_MASK)
typedef struct {
@@ -1824,14 +1826,15 @@ add_data(atkbd_t *dev, uint8_t val)
static void
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 i;
uint8_t or = 0;
uint8_t send;
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++) {
if (translate) {
@@ -1867,13 +1870,14 @@ static void
add_data_kbd(uint16_t val)
{
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);
uint8_t fake_shift[4];
uint8_t num_lock = 0, shift_states = 0;
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);
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) */
if ((dev != NULL) &&
((dev->flags & KBC_VEN_MASK) == KBC_VEN_TOSHIBA) &&
if ((dev != NULL) && (KBC_VENDOR(dev) == KBC_VEN_TOSHIBA) &&
(keyboard_recv(0xb8) || keyboard_recv(0x9d))) switch (val) {
case 0x4f: t3100e_notify_set(dev->func_priv, 0x01); break; /* End */
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;
/* 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;
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);
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) ||
((dev->flags & KBC_TYPE_MASK) >= KBC_TYPE_PS2_NOREF)) {
if ((KBC_VENDOR(dev) == KBC_VEN_AMI) ||
(KBC_TYPE(dev) >= KBC_TYPE_PS2_NOREF)) {
keyboard_mode &= ~CCB_PCMODE;
mouse_scan = !(val & 0x20);
@@ -2197,7 +2200,7 @@ write64_generic(void *priv, uint8_t val)
switch (val) {
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");
add_data(dev, 0xf1);
return 0;
@@ -2206,7 +2209,7 @@ write64_generic(void *priv, uint8_t val)
break;
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");
set_enable_mouse(dev, 0);
return 0;
@@ -2214,8 +2217,8 @@ write64_generic(void *priv, uint8_t val)
ERRLOG("ATkbd: bad command A7\n");
break;
case 0xa8: /*Enable mouse port*/
if ((dev->flags & KBC_TYPE_MASK) >= KBC_TYPE_PS2_NOREF) {
case 0xa8: /* enable mouse port */
if (KBC_TYPE(dev) >= KBC_TYPE_PS2_NOREF) {
DEBUG("ATkbd: enable mouse port\n");
set_enable_mouse(dev, 1);
return 0;
@@ -2223,9 +2226,9 @@ write64_generic(void *priv, uint8_t val)
ERRLOG("ATkbd: bad command A8\n");
break;
case 0xa9: /*Test mouse port*/
case 0xa9: /* test mouse port */
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)
add_data(dev, 0x00); /* no error */
else
@@ -2242,21 +2245,21 @@ write64_generic(void *priv, uint8_t val)
case 0xc0: /* read input port */
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();
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 & 0xfc) |
(fdd_is_525(current_drive) ? 0x40 : 0x00);
} 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 & 0xfc);
}
return 0;
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");
dev->want60 = 1;
return 0;
@@ -2265,7 +2268,7 @@ write64_generic(void *priv, uint8_t val)
case 0xd4: /* write to mouse */
#if 0
if ((dev->flags & KBC_TYPE_MASK) >= KBC_TYPE_PS2_NOREF) {
if (KBC_TYPE(dev) >= KBC_TYPE_PS2_NOREF) {
#endif
DEBUG("ATkbd: write to mouse\n");
dev->want60 = 1;
@@ -2399,7 +2402,7 @@ write64_ami(void *priv, uint8_t val)
return 0;
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");
write_output(dev, dev->output_port & 0xf3);
add_data(dev, 0x00);
@@ -2408,7 +2411,7 @@ write64_ami(void *priv, uint8_t val)
break;
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");
write_output(dev, dev->output_port | 0x0c);
add_data(dev, 0x00);
@@ -2417,7 +2420,7 @@ write64_ami(void *priv, uint8_t val)
break;
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");
dev->ami_stat &= 0xfe;
return 0;
@@ -2425,7 +2428,7 @@ write64_ami(void *priv, uint8_t val)
break;
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");
dev->ami_stat |= 0x01;
return 0;
@@ -2433,7 +2436,7 @@ write64_ami(void *priv, uint8_t val)
break;
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");
add_data(dev, !!(dev->ami_stat & 1));
return 0;
@@ -2441,7 +2444,7 @@ write64_ami(void *priv, uint8_t val)
break;
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");
dev->ami_stat &= 0xfd;
return 0;
@@ -2449,7 +2452,7 @@ write64_ami(void *priv, uint8_t val)
break;
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");
dev->ami_stat |= 0x02;
return 0;
@@ -2457,7 +2460,7 @@ write64_ami(void *priv, uint8_t val)
break;
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");
add_data(dev, !!(dev->ami_stat & 2));
return 0;
@@ -2703,7 +2706,7 @@ kbd_write(uint16_t port, uint8_t val, void *priv)
int bad = 1;
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;
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 */
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);
break;
@@ -2757,9 +2760,9 @@ kbd_write(uint16_t port, uint8_t val, void *priv)
break;
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);
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);
break;
@@ -2991,9 +2994,8 @@ do_command:
speaker_was_enable = 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));
}
break;
case 0x64:
@@ -3027,7 +3029,7 @@ do_command:
case 0xaa: /* self-test */
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;
if (! dev->initialized) {
dev->initialized = 1;
@@ -3037,7 +3039,7 @@ do_command:
dev->status |= STAT_SYSFLAG;
dev->mem[0] |= 0x04;
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);
write_output(dev, 0xcf);
add_data(dev, 0x55);
@@ -3072,7 +3074,7 @@ do_command:
mask = 0xff;
if (! keyboard_scan)
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;
add_data(dev, dev->output_port & mask);
break;
@@ -3136,7 +3138,7 @@ kbd_read(uint16_t port, void *priv)
atkbd_t *dev = (atkbd_t *)priv;
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;
switch (port) {
@@ -3153,13 +3155,13 @@ kbd_read(uint16_t port, void *priv)
ret = ppi.pb & ~0xe0;
if (ppispeakon)
ret |= 0x20;
if ((dev->flags & KBC_TYPE_MASK) > KBC_TYPE_PS2_NOREF) {
if (KBC_TYPE(dev) > KBC_TYPE_PS2_NOREF) {
if (dev->refresh)
ret |= 0x10;
else
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))
ret |= 0x04;
else
@@ -3214,10 +3216,13 @@ kbd_reset(void *priv)
dev->key_wantdata = 0;
/* 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;
else
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);
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);
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(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->write64_ven = NULL;
switch(dev->flags & KBC_VEN_MASK) {
switch(KBC_VENDOR(dev)) {
case KBC_VEN_GENERIC:
case KBC_VEN_IBM_PS1:
dev->write64_ven = write64_generic;

View File

@@ -32,7 +32,7 @@
* The lower half of the driver can interface to the host system
* 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>
*
@@ -317,23 +317,22 @@ read_fifo(serial_t *dev)
dev->fifo_read = 0;
}
#if 0
/* If we have more, generate (new) int. */
if (sp->fifo_read != sp->fifo_write) {
#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
if (sp->bh != NULL) {
sp->int_status |= SERINT_RECEIVE;
sp->lsr |= LSR_DR;
if (dev->bh != NULL) {
dev->int_status |= SERINT_RECEIVE;
dev->lsr |= LSR_DR;
/* Update interrupt state. */
update_ints(sp);
update_ints(dev);
} else {
sp->delay = 1000*TIMER_USEC;
dev->delay = 1000*TIMER_USEC;
}
#endif
}
}
#endif
@@ -429,17 +428,17 @@ ser_write(uint16_t addr, uint8_t val, void *priv)
/* DLAB clear, regular data write. */
dev->thr = val;
if (dev->ops && dev->ops->write) {
dev->ops->write(dev, dev->ops_arg, dev->thr);
#ifdef USE_HOST_SERIAL
if (dev->bh != NULL) {
} else if (dev->bh != NULL) {
/* We are linked, so send to BH layer. */
plat_serial_write(dev->bh, dev->thr);
} else
#endif
if (dev->ops && dev->ops->write)
dev->ops->write(dev, dev->ops_arg, val);
}
/* WRITE completed, we are ready for more. */
//FIXME: add a callback delay here.
dev->lsr |= LSR_THRE;
dev->int_status |= SER_INT_TX;
update_ints(dev);
@@ -467,8 +466,12 @@ ser_write(uint16_t addr, uint8_t val, void *priv)
case 2: /* FCR */
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;
if (val == 0x00)
dev->iir &= ~IIR_FIFOENB; /* off */
else
dev->iir |= IIR_FIFOENB; /* enabled */
}
break;
@@ -507,10 +510,12 @@ pclog(0,"Serial%i: tried to enable FIFO (%02x), type %d!\n", dev->port, val, dev
break;
case 4: /* MCR */
#if 0
if (dev->bh == NULL) {
/* Not linked, force LOOPBACK mode. */
val |= MCR_LMS;
}
#endif
if ((val & MCR_RTS) && !(dev->mcr & MCR_RTS)) {
/*
@@ -686,6 +691,8 @@ ser_read(uint16_t addr, void *priv)
}
break;
}
DEBUG("Serial%i: read(%i) = %02x\n", dev->port, (addr & 0x0007), ret);
return(ret);
}
@@ -780,7 +787,11 @@ serial_reset(void)
dev = &ports[i];
memset(dev, 0x00, sizeof(serial_t));
dev->port = i;
#if 1
dev->type = UART_TYPE_16550;
#else
dev->type = UART_TYPE_8250;
#endif
/* Set up default port and IRQ for the device. */
switch(i) {
@@ -820,8 +831,8 @@ serial_setup(int id, uint16_t port, int8_t irq)
{
serial_t *dev = &ports[id];
INFO("SERIAL: setting up COM%i as %04X [enabled=%i]\n",
id+1, port, serial_enabled[id]);
INFO("SERIAL: setting up COM%i as %04X,%i [enabled=%i]\n",
id+1, port, irq, serial_enabled[id]);
if (! serial_enabled[id]) return;

View File

@@ -8,7 +8,7 @@
*
* 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>
* Miran Grca, <mgrca8@gmail.com>
@@ -424,7 +424,7 @@ typedef struct voodoo_t
int dst_stride;
} blt;
rgbp_t clutData[33];
rgbp_t clutData[64];
int clutData_dirty;
rgbp_t clutData256[256];
uint32_t video_16to32[0x10000];

View File

@@ -48,7 +48,7 @@
*
* 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>
* Miran Grca, <mgrca8@gmail.com>
@@ -550,7 +550,10 @@ model_50_init(ps2_t *dev)
dev->planar_write = model_50_write;
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);
}
@@ -1437,10 +1440,12 @@ ps2_init(const device_t *info, void *arg)
machine_common_init();
dma16_init();
pic2_init();
ps2_dma_init();
pic2_init();
pit_ps2_init();
nmi_mask = 0x80;
device_add(&ps_nvr_device);
device_add(&fdc_at_device);
@@ -1451,8 +1456,6 @@ ps2_init(const device_t *info, void *arg)
port_92_add(0);
nmi_mask = 0x80;
io_sethandler(0x0091, 1,
ps2_mca_read,NULL,NULL, ps2_mca_write,NULL,NULL, dev);
io_sethandler(0x0094, 1,

View File

@@ -8,7 +8,7 @@
*
* 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>
* Miran Grca, <mgrca8@gmail.com>
@@ -771,7 +771,7 @@ pc_set_speed(int turbo)
* For PC and XT class, this will return max speed.
*/
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) {
/* For 286+, we are done. */

View File

@@ -8,7 +8,7 @@
*
* 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>
* Miran Grca, <mgrca8@gmail.com>
@@ -193,7 +193,7 @@ rom_add_upper_bios(void)
mem_map_add(&bios_mapping[i], base, size,
rom_bios_read,rom_bios_readw,rom_bios_readl,
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);
base += size;
}
@@ -228,7 +228,8 @@ rom_add_bios(void)
mem_map_add(&bios_high_mapping[i], hibase, size,
rom_bios_read,rom_bios_readw,rom_bios_readl,
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;
}
}
@@ -282,7 +283,6 @@ rom_load_interleaved(const wchar_t *fnl, const wchar_t *fnh, uint32_t addr, int
addr = 0;
else
addr &= 0x03ffff;
INFO("ROM: loading %i bytes at %06lx\n", sz, addr);
(void)fseek(fl, off, SEEK_SET);
(void)fseek(fh, off, SEEK_SET);

View File

@@ -17,7 +17,7 @@
* or to use a generic handler, and then pass it a pointer
* 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>
*
@@ -385,20 +385,20 @@ rom_load_bios(romdef_t *r, const wchar_t *fn, int test_only)
return(1);
/* Show the resulting data. */
INFO("Size : %lu\n", r->total);
INFO("Offset : 0x%06lx (%lu)\n", r->offset, r->offset);
INFO("Mode : %s\n", (r->mode == 1)?"interleaved":"linear");
INFO("Files : %i\n", r->nfiles);
INFO(" Size : %lu\n", r->total);
INFO(" Offset : 0x%06lx (%lu)\n", r->offset, r->offset);
INFO(" Mode : %s\n", (r->mode == 1)?"interleaved":"linear");
INFO(" Files : %i\n", r->nfiles);
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].path, r->files[c].skip,
r->files[c].offset, r->files[c].size);
}
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)
INFO("VideoBIOS: '%ls', %i\n", r->vidfn, r->vidsz);
INFO(" VideoBIOS: '%ls', %i\n", r->vidfn, r->vidsz);
/* Actually perform the work. */
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(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,
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
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. */
if (r->fontnum != -1) {
plat_append_filename(temp, path, r->fontfn);
@@ -471,7 +456,7 @@ pclog_repeat(1);
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);
}

View File

@@ -8,7 +8,7 @@
*
* 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>
*
@@ -61,8 +61,11 @@ ui_set_kbd_state(int flags)
/* First of all, update our status bar. */
ui_sb_kbstate(flags);
#if 0
//FIXME: not yet.
/* Let the platform code try to update the host keyboard. */
plat_set_kbd_state(flags);
#endif
}

View File

@@ -8,7 +8,7 @@
*
* 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>
*
@@ -119,7 +119,7 @@ vidapi_set(int api)
{
int i;
INFO("Initializing VIDAPI: api=%d\n", api);
INFO("VIDAPI: initializing (api=%i)\n", api);
/* Lock the blitter. */
plat_startblit();
@@ -218,7 +218,7 @@ vidapi_screenshot(void)
struct tm *info;
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;

View File

@@ -8,7 +8,7 @@
*
* 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>
* Miran Grca, <mgrca8@gmail.com>
@@ -290,7 +290,7 @@ plat_start(void)
timeBeginPeriod(1);
QueryPerformanceFrequency(&qpc);
freq = qpc.QuadPart;
INFO("Main timer precision: %llu\n", freq);
DEBUG("WIN: main timer precision: %llu\n", freq);
/* Start the emulator, really. */
thMain = thread_create(pc_thread, &quited);

View File

@@ -8,7 +8,7 @@
*
* 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>
* 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)) {
old_sel = fdlv_current_sel;
h = GetDlgItem(hdlg, IDC_LIST_FLOPPY_DRIVES);
fdlv_current_sel = floppy_get_selected(hdlg);
if (fdlv_current_sel == old_sel) {
if (fdlv_current_sel == old_sel)
return FALSE;
} else if (fdlv_current_sel == -1) {
if (fdlv_current_sel == -1) {
fd_ignore_change = 1;
fdlv_current_sel = old_sel;
ListView_SetItemState(h, fdlv_current_sel, LVIS_FOCUSED | LVIS_SELECTED, 0x000F);

View File

@@ -8,7 +8,7 @@
*
* 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>
* Miran Grca, <mgrca8@gmail.com>
@@ -1077,7 +1077,9 @@ plat_set_kbd_state(int flags)
kbdata[0].type = kbdata[1].type = INPUT_KEYBOARD;
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) {
/* Save the new flags. */
kbd_flags = flags;