Removed ROM set checking from several files.
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Definitions for the keyboard interface.
|
||||
*
|
||||
* Version: @(#)keyboard.h 1.0.15 2018/03/26
|
||||
* Version: @(#)keyboard.h 1.0.16 2018/09/15
|
||||
*
|
||||
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -60,12 +60,17 @@ extern int mouse_queue_start, mouse_queue_end;
|
||||
extern int mouse_scan;
|
||||
|
||||
#ifdef EMU_DEVICE_H
|
||||
extern const device_t keyboard_pc_device;
|
||||
extern const device_t keyboard_xt_device;
|
||||
extern const device_t keyboard_tandy_device;
|
||||
#if defined(DEV_BRANCH) && defined(USE_LASERXT)
|
||||
extern const device_t keyboard_xt_lxt3_device;
|
||||
#endif
|
||||
extern const device_t keyboard_at_device;
|
||||
extern const device_t keyboard_at_ami_device;
|
||||
extern const device_t keyboard_at_toshiba_device;
|
||||
extern const device_t keyboard_ps2_device;
|
||||
extern const device_t keyboard_ps2_xi8088_device;
|
||||
extern const device_t keyboard_ps2_ami_device;
|
||||
extern const device_t keyboard_ps2_mca_device;
|
||||
extern const device_t keyboard_ps2_mca_2_device;
|
||||
|
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Intel 8042 (AT keyboard controller) emulation.
|
||||
*
|
||||
* Version: @(#)keyboard_at.c 1.0.38 2018/09/12
|
||||
* Version: @(#)keyboard_at.c 1.0.39 2018/09/15
|
||||
*
|
||||
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -79,6 +79,7 @@
|
||||
#define KBC_VEN_IBM_MCA 0x08
|
||||
#define KBC_VEN_QUADTEL 0x0c
|
||||
#define KBC_VEN_TOSHIBA 0x10
|
||||
#define KBC_VEN_XI8088 0x14
|
||||
#define KBC_VEN_MASK 0x1c
|
||||
|
||||
|
||||
@@ -785,7 +786,7 @@ kbd_adddata_keyboard(uint16_t val)
|
||||
}
|
||||
|
||||
/* Test for T3100E 'Fn' key (Right Alt / Right Ctrl) */
|
||||
if (romset == ROM_T3100E && (keyboard_recv(0xb8) || keyboard_recv(0x9d))) {
|
||||
if (CurrentKbd && ((CurrentKbd->flags & KBC_VEN_MASK) == KBC_VEN_TOSHIBA) && (keyboard_recv(0xb8) || keyboard_recv(0x9d))) {
|
||||
switch (val) {
|
||||
case 0x4f: t3100e_notify_set(0x01); break; /* End */
|
||||
case 0x50: t3100e_notify_set(0x02); break; /* Down */
|
||||
@@ -1644,7 +1645,7 @@ kbd_write(uint16_t port, uint8_t val, void *priv)
|
||||
int bad = 1;
|
||||
uint8_t mask;
|
||||
|
||||
if (romset == ROM_XI8088 && port == 0x63)
|
||||
if (((kbd->flags & KBC_VEN_MASK) == KBC_VEN_XI8088) && (port == 0x63))
|
||||
port = 0x61;
|
||||
|
||||
#ifdef _DEBUG
|
||||
@@ -1952,7 +1953,7 @@ do_command:
|
||||
was_speaker_enable = 1;
|
||||
pit_set_gate(&pit, 2, val & 1);
|
||||
|
||||
if (romset == ROM_XI8088) {
|
||||
if ((kbd->flags & KBC_VEN_MASK) == KBC_VEN_XI8088) {
|
||||
if (val & 0x04)
|
||||
xi8088_turbo_set(1);
|
||||
else
|
||||
@@ -2126,7 +2127,7 @@ kbd_read(uint16_t port, void *priv)
|
||||
atkbd_t *kbd = (atkbd_t *)priv;
|
||||
uint8_t ret = 0xff;
|
||||
|
||||
if (romset == ROM_XI8088 && port == 0x63)
|
||||
if (((kbd->flags & KBC_VEN_MASK) == KBC_VEN_XI8088) && (port == 0x63))
|
||||
port = 0x61;
|
||||
|
||||
switch (port) {
|
||||
@@ -2148,7 +2149,7 @@ kbd_read(uint16_t port, void *priv)
|
||||
else
|
||||
ret &= ~0x10;
|
||||
}
|
||||
if (romset == ROM_XI8088){
|
||||
if ((kbd->flags & KBC_VEN_MASK) == KBC_VEN_XI8088) {
|
||||
if (xi8088_turbo_get())
|
||||
ret |= 0x04;
|
||||
else
|
||||
@@ -2352,6 +2353,16 @@ const device_t keyboard_ps2_device = {
|
||||
NULL, NULL, NULL, NULL
|
||||
};
|
||||
|
||||
const device_t keyboard_ps2_xi8088_device = {
|
||||
"PS/2 Keyboard (Xi8088)",
|
||||
0,
|
||||
KBC_TYPE_PS2_1 | KBC_VEN_XI8088,
|
||||
kbd_init,
|
||||
kbd_close,
|
||||
kbd_reset,
|
||||
NULL, NULL, NULL, NULL
|
||||
};
|
||||
|
||||
const device_t keyboard_ps2_ami_device = {
|
||||
"PS/2 Keyboard (AMI)",
|
||||
0,
|
||||
|
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Implementation of the XT-style keyboard.
|
||||
*
|
||||
* Version: @(#)keyboard_xt.c 1.0.12 2018/04/26
|
||||
* Version: @(#)keyboard_xt.c 1.0.13 2018/09/15
|
||||
*
|
||||
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -56,6 +56,7 @@ typedef struct {
|
||||
uint8_t pb;
|
||||
|
||||
int tandy;
|
||||
int type;
|
||||
} xtkbd_t;
|
||||
|
||||
|
||||
@@ -460,7 +461,7 @@ kbd_read(uint16_t port, void *priv)
|
||||
|
||||
switch (port) {
|
||||
case 0x60:
|
||||
if ((romset == ROM_IBMPC) && (kbd->pb & 0x80)) {
|
||||
if (!kbd->type && (kbd->pb & 0x80)) {
|
||||
if (video_is_ega_vga())
|
||||
ret = 0x4d;
|
||||
else if (video_is_mda())
|
||||
@@ -476,7 +477,7 @@ kbd_read(uint16_t port, void *priv)
|
||||
break;
|
||||
|
||||
case 0x62:
|
||||
if (romset == ROM_IBMPC) {
|
||||
if (!kbd->type) {
|
||||
if (kbd->pb & 0x04)
|
||||
ret = ((mem_size-64) / 32) & 0x0f;
|
||||
else
|
||||
@@ -493,7 +494,7 @@ kbd_read(uint16_t port, void *priv)
|
||||
/* LaserXT = Always 512k RAM;
|
||||
LaserXT/3 = Bit 0: set = 512k, clear = 256k. */
|
||||
#if defined(DEV_BRANCH) && defined(USE_LASERXT)
|
||||
if (romset == ROM_LXT3)
|
||||
if (kbd->type == 3)
|
||||
ret = (mem_size == 512) ? 0x0d : 0x0c;
|
||||
else
|
||||
#endif
|
||||
@@ -502,7 +503,7 @@ kbd_read(uint16_t port, void *priv)
|
||||
}
|
||||
ret |= (ppispeakon ? 0x20 : 0);
|
||||
|
||||
if (kbd->tandy)
|
||||
if (kbd->type == 2)
|
||||
ret |= (tandy1k_eeprom_read() ? 0x10 : 0);
|
||||
break;
|
||||
|
||||
@@ -539,9 +540,7 @@ kbd_init(const device_t *info)
|
||||
|
||||
keyboard_set_table(scancode_xt);
|
||||
|
||||
if (info->local == 1) {
|
||||
kbd->tandy = 1;
|
||||
}
|
||||
kbd->type = info->local;
|
||||
|
||||
keyboard_scan = 1;
|
||||
|
||||
@@ -574,10 +573,20 @@ kbd_close(void *priv)
|
||||
}
|
||||
|
||||
|
||||
const device_t keyboard_pc_device = {
|
||||
"IBM PC Keyboard",
|
||||
0,
|
||||
0,
|
||||
kbd_init,
|
||||
kbd_close,
|
||||
kbd_reset,
|
||||
NULL, NULL, NULL
|
||||
};
|
||||
|
||||
const device_t keyboard_xt_device = {
|
||||
"PC/XT Keyboard",
|
||||
0,
|
||||
"XT Keyboard",
|
||||
0,
|
||||
1,
|
||||
kbd_init,
|
||||
kbd_close,
|
||||
kbd_reset,
|
||||
@@ -587,9 +596,21 @@ const device_t keyboard_xt_device = {
|
||||
const device_t keyboard_tandy_device = {
|
||||
"Tandy 1000 Keyboard",
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
kbd_init,
|
||||
kbd_close,
|
||||
kbd_reset,
|
||||
NULL, NULL, NULL
|
||||
};
|
||||
|
||||
#if defined(DEV_BRANCH) && defined(USE_LASERXT)
|
||||
const device_t keyboard_xt_lxt3_device = {
|
||||
"VTech Laser XT3 Keyboard",
|
||||
0,
|
||||
3,
|
||||
kbd_init,
|
||||
kbd_close,
|
||||
kbd_reset,
|
||||
NULL, NULL, NULL
|
||||
};
|
||||
#endif
|
||||
|
@@ -28,7 +28,7 @@
|
||||
* boot. Sometimes, they do, and then it shows an "Incorrect
|
||||
* DOS" error message?? --FvK
|
||||
*
|
||||
* Version: @(#)m_ps1.c 1.0.10 2018/09/02
|
||||
* Version: @(#)m_ps1.c 1.0.11 2018/09/15
|
||||
*
|
||||
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -476,6 +476,10 @@ ps1_setup(int model)
|
||||
|
||||
ps1_hdc_inform(priv, ps);
|
||||
}
|
||||
|
||||
mem_mapping_add(&romext_mapping, 0xc8000, 0x08000,
|
||||
mem_read_romext,mem_read_romextw,mem_read_romextl,
|
||||
NULL,NULL, NULL, romext, 0, NULL);
|
||||
}
|
||||
|
||||
if (model == 2121) {
|
||||
|
@@ -14,6 +14,21 @@
|
||||
#include "machine.h"
|
||||
|
||||
|
||||
void
|
||||
machine_pc_init(const machine_t *model)
|
||||
{
|
||||
machine_common_init(model);
|
||||
|
||||
pit_set_out_func(&pit, 1, pit_refresh_timer_xt);
|
||||
|
||||
device_add(&keyboard_pc_device);
|
||||
device_add(&fdc_xt_device);
|
||||
nmi_init();
|
||||
if (joystick_type != 7)
|
||||
device_add(&gameport_device);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
machine_xt_init(const machine_t *model)
|
||||
{
|
||||
|
@@ -7,8 +7,15 @@
|
||||
#include "../cpu/cpu.h"
|
||||
#include "../io.h"
|
||||
#include "../mem.h"
|
||||
#include "../nmi.h"
|
||||
#include "../pit.h"
|
||||
#include "../rom.h"
|
||||
#include "machine.h"
|
||||
#include "../device.h"
|
||||
#include "../floppy/fdd.h"
|
||||
#include "../floppy/fdc.h"
|
||||
#include "../game/gameport.h"
|
||||
#include "../keyboard.h"
|
||||
|
||||
|
||||
static int laserxt_emspage[4];
|
||||
@@ -138,3 +145,20 @@ machine_xt_laserxt_init(const machine_t *model)
|
||||
|
||||
laserxt_init();
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
machine_xt_lxt3_init(const machine_t *model)
|
||||
{
|
||||
machine_common_init(model);
|
||||
|
||||
pit_set_out_func(&pit, 1, pit_refresh_timer_xt);
|
||||
|
||||
device_add(&keyboard_xt_lxt3_device);
|
||||
device_add(&fdc_xt_device);
|
||||
nmi_init();
|
||||
if (joystick_type != 7)
|
||||
device_add(&gameport_device);
|
||||
|
||||
laserxt_init();
|
||||
}
|
||||
|
@@ -51,7 +51,7 @@
|
||||
* NOTE: Still need to figure out a way to load/save ConfigSys and
|
||||
* HardRAM stuff. Needs to be linked in to the NVR code.
|
||||
*
|
||||
* Version: @(#)m_xt_t1000.c 1.0.9 2018/08/16
|
||||
* Version: @(#)m_xt_t1000.c 1.0.10 2018/09/15
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -446,9 +446,9 @@ ems_set_port(t1000_t *sys, uint8_t val)
|
||||
ems_set_port(t1000_t *sys, uint8_t val)
|
||||
{
|
||||
int n;
|
||||
|
||||
|
||||
#if 0
|
||||
t1000_log("ems_set_port(%d)", val & 0x0f);
|
||||
t1000_log("ems_set_port(%d)", val & 0x0f);
|
||||
#endif
|
||||
if (sys->ems_port) {
|
||||
for (n = 0; n <= 0xc000; n += 0x4000) {
|
||||
@@ -913,6 +913,9 @@ machine_xt_t1000_init(const machine_t *model)
|
||||
nmi_init();
|
||||
|
||||
tc8521_init(&t1000.nvr, model->nvrmask + 1);
|
||||
|
||||
t1000_nvr_load();
|
||||
nvr_set_ven_save(t1000_nvr_save);
|
||||
|
||||
if (gfxcard == GFX_INTERNAL)
|
||||
device_add(&t1000_video_device);
|
||||
@@ -967,8 +970,11 @@ machine_xt_t1200_init(const machine_t *model)
|
||||
nmi_init();
|
||||
|
||||
tc8521_init(&t1000.nvr, model->nvrmask + 1);
|
||||
|
||||
if (gfxcard == GFX_INTERNAL)
|
||||
|
||||
t1200_nvr_load();
|
||||
nvr_set_ven_save(t1200_nvr_save);
|
||||
|
||||
if (gfxcard == GFX_INTERNAL)
|
||||
device_add(&t1200_video_device);
|
||||
}
|
||||
|
||||
|
@@ -124,9 +124,11 @@ xi8088_get_device(void)
|
||||
void machine_xt_xi8088_init(const machine_t *model)
|
||||
{
|
||||
/* TODO: set UMBs? See if PCem always sets when we have > 640KB ram and avoids conflicts when a peripheral uses the same memory space */
|
||||
if (xi8088_bios_128kb())
|
||||
mem_add_upper_bios();
|
||||
machine_common_init(model);
|
||||
device_add(&fdc_xt_device);
|
||||
device_add(&keyboard_ps2_device);
|
||||
device_add(&keyboard_ps2_xi8088_device);
|
||||
nmi_init();
|
||||
device_add(&at_nvr_device);
|
||||
pic2_init();
|
||||
|
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Handling of the emulated machines.
|
||||
*
|
||||
* Version: @(#)machine.h 1.0.28 2018/09/12
|
||||
* Version: @(#)machine.h 1.0.29 2018/09/15
|
||||
*
|
||||
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -37,6 +37,7 @@
|
||||
#define MACHINE_HDC_PS2 0x002000 /* sys has int PS/2 HDC */
|
||||
#define MACHINE_MOUSE 0x004000 /* sys has int mouse */
|
||||
#define MACHINE_VIDEO 0x008000 /* sys has int video */
|
||||
#define MACHINE_NONMI 0x010000 /* sys does not have NMI's */
|
||||
|
||||
#define IS_ARCH(m, a) (machines[(m)].flags & (a)) ? 1 : 0;
|
||||
|
||||
@@ -147,6 +148,7 @@ extern void machine_at_r418_init(const machine_t *);
|
||||
|
||||
extern void machine_at_wd76c10_init(const machine_t *);
|
||||
|
||||
extern void machine_pc_init(const machine_t *);
|
||||
extern void machine_pcjr_init(const machine_t *);
|
||||
|
||||
extern void machine_ps1_m2011_init(const machine_t *);
|
||||
@@ -185,6 +187,7 @@ extern void machine_xt_init(const machine_t *);
|
||||
extern void machine_xt_compaq_init(const machine_t *);
|
||||
#if defined(DEV_BRANCH) && defined(USE_LASERXT)
|
||||
extern void machine_xt_laserxt_init(const machine_t *);
|
||||
extern void machine_xt_lxt3_init(const machine_t *);
|
||||
#endif
|
||||
|
||||
extern void machine_xt_t1000_init(const machine_t *);
|
||||
|
@@ -11,7 +11,7 @@
|
||||
* NOTES: OpenAT wip for 286-class machine with open BIOS.
|
||||
* PS2_M80-486 wip, pending receipt of TRM's for machine.
|
||||
*
|
||||
* Version: @(#)machine_table.c 1.0.37 2018/09/12
|
||||
* Version: @(#)machine_table.c 1.0.38 2018/09/15
|
||||
*
|
||||
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -37,16 +37,16 @@ const machine_t machines[] = {
|
||||
{ "[8088] AMI XT clone", ROM_AMIXT, "amixt", {{"Intel", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA, 64, 640, 64, 0, machine_xt_init, NULL },
|
||||
{ "[8088] Compaq Portable", ROM_PORTABLE, "portable", {{"Intel", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_VIDEO, 128, 640, 128, 0, machine_xt_compaq_init, NULL },
|
||||
{ "[8088] DTK XT clone", ROM_DTKXT, "dtk", {{"Intel", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA, 64, 640, 64, 0, machine_xt_init, NULL },
|
||||
{ "[8088] IBM PC", ROM_IBMPC, "ibmpc", {{"Intel", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA, 64, 640, 32, 0, machine_xt_init, NULL },
|
||||
{ "[8088] IBM PC", ROM_IBMPC, "ibmpc", {{"Intel", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA, 64, 640, 32, 0, machine_pc_init, NULL },
|
||||
{ "[8088] IBM PCjr", ROM_IBMPCJR, "ibmpcjr", {{"Intel", cpus_pcjr}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA | MACHINE_VIDEO, 128, 640, 128, 0, machine_pcjr_init, pcjr_get_device },
|
||||
{ "[8088] IBM XT", ROM_IBMXT, "ibmxt", {{"Intel", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA, 64, 640, 64, 0, machine_xt_init, NULL },
|
||||
{ "[8088] Generic XT clone", ROM_GENXT, "genxt", {{"Intel", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA, 64, 640, 64, 0, machine_xt_init, NULL },
|
||||
{ "[8088] Juko XT clone", ROM_JUKOPC, "jukopc", {{"Intel", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA, 64, 640, 64, 0, machine_xt_init, NULL },
|
||||
{ "[8088] Phoenix XT clone", ROM_PXXT, "pxxt", {{"Intel", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA, 64, 640, 64, 0, machine_xt_init, NULL },
|
||||
{ "[8088] Schneider EuroPC", ROM_EUROPC, "europc", {{"Siemens", cpus_europc}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_HDC | MACHINE_VIDEO | MACHINE_MOUSE, 512, 640, 128, 15, machine_europc_init, NULL },
|
||||
{ "[8088] Schneider EuroPC", ROM_EUROPC, "europc", {{"Siemens", cpus_europc}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_HDC | MACHINE_VIDEO | MACHINE_MOUSE, 512, 640, 128, 15, machine_europc_init, NULL },
|
||||
{ "[8088] Tandy 1000", ROM_TANDY, "tandy", {{"Intel", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA, 128, 640, 128, 0, machine_tandy1k_init, tandy1k_get_device },
|
||||
{ "[8088] Tandy 1000 HX", ROM_TANDY1000HX, "tandy1000hx", {{"Intel", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA, 256, 640, 128, 0, machine_tandy1k_init, tandy1k_hx_get_device },
|
||||
{ "[8088] Toshiba T1000", ROM_T1000, "t1000", {{"Intel", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_VIDEO, 512, 1280, 768, 63, machine_xt_t1000_init, t1000_get_device },
|
||||
{ "[8088] Toshiba T1000", ROM_T1000, "t1000", {{"Intel", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_VIDEO, 512, 1280, 768, 63, machine_xt_t1000_init, t1000_get_device },
|
||||
#if defined(DEV_BRANCH) && defined(USE_LASERXT)
|
||||
{ "[8088] VTech Laser Turbo XT", ROM_LTXT, "ltxt", {{"Intel", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA, 512, 512, 256, 0, machine_xt_laserxt_init, NULL },
|
||||
#endif
|
||||
@@ -59,9 +59,9 @@ const machine_t machines[] = {
|
||||
{ "[8086] Amstrad PC20(0)", ROM_PC200, "pc200", {{"Intel", cpus_8086}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA | MACHINE_VIDEO | MACHINE_MOUSE, 512, 640, 128, 63, machine_amstrad_init, NULL },
|
||||
{ "[8086] Olivetti M24", ROM_OLIM24, "olivetti_m24", {{"Intel", cpus_8086}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA | MACHINE_VIDEO | MACHINE_MOUSE, 128, 640, 128, 0, machine_olim24_init, NULL },
|
||||
{ "[8086] Tandy 1000 SL/2", ROM_TANDY1000SL2, "tandy1000sl2", {{"Intel", cpus_8086}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA, 512, 768, 128, 0, machine_tandy1k_init, NULL },
|
||||
{ "[8086] Toshiba T1200", ROM_T1200, "t1200", {{"Intel", cpus_8086}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_VIDEO, 1024, 2048,1024, 63, machine_xt_t1200_init, t1200_get_device },
|
||||
{ "[8086] Toshiba T1200", ROM_T1200, "t1200", {{"Intel", cpus_8086}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_VIDEO, 1024, 2048,1024, 63, machine_xt_t1200_init, t1200_get_device },
|
||||
#if defined(DEV_BRANCH) && defined(USE_LASERXT)
|
||||
{ "[8086] VTech Laser XT3", ROM_LXT3, "lxt3", {{"Intel", cpus_8086}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA, 256, 512, 256, 0, machine_xt_laserxt_init, NULL },
|
||||
{ "[8086] VTech Laser XT3", ROM_LXT3, "lxt3", {{"Intel", cpus_8086}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA, 256, 512, 256, 0, machine_xt_lxt3_init, NULL },
|
||||
#endif
|
||||
|
||||
{ "[286 ISA] AMI 286 clone", ROM_AMI286, "ami286", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_AT, 512,8192, 128, 127, machine_at_neat_ami_init, NULL },
|
||||
@@ -110,7 +110,7 @@ const machine_t machines[] = {
|
||||
{ "[486 ISA] AMI WinBIOS 486", ROM_WIN486, "win486", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_HDC, 1, 64, 1, 127, machine_at_ali1429_init, NULL },
|
||||
{ "[486 ISA] Award 486 clone", ROM_AWARD486_OPTI495, "award486", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_HDC, 1, 64, 1, 127, machine_at_opti495_init, NULL },
|
||||
{ "[486 ISA] DTK PKM-0038S E-2", ROM_DTK486, "dtk486", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_HDC, 1, 128, 1, 127, machine_at_dtk486_init, NULL },
|
||||
{ "[486 ISA] IBM PS/1 model 2133", ROM_IBMPS1_2133, "ibmps1_2133", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 1, 64, 1, 127, machine_ps1_m2133_init, NULL },
|
||||
{ "[486 ISA] IBM PS/1 model 2133", ROM_IBMPS1_2133, "ibmps1_2133", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC | MACHINE_NONMI, 1, 64, 1, 127, machine_ps1_m2133_init, NULL },
|
||||
|
||||
#if defined(DEV_BRANCH) && defined(USE_PS2M70T4)
|
||||
{ "[486 MCA] IBM PS/2 model 70 (type 4)", ROM_IBMPS2_M70_TYPE4, "ibmps2_m70_type4", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, 0, MACHINE_MCA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC_PS2 | MACHINE_VIDEO, 2, 16, 2, 63, machine_ps2_model_70_type4_init, NULL },
|
||||
|
55
src/mem.c
55
src/mem.c
@@ -12,7 +12,7 @@
|
||||
* the DYNAMIC_TABLES=1 enables this. Will eventually go
|
||||
* away, either way...
|
||||
*
|
||||
* Version: @(#)mem.c 1.0.12 2018/09/02
|
||||
* Version: @(#)mem.c 1.0.13 2018/09/15
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -1568,30 +1568,36 @@ mem_set_mem_state(uint32_t base, uint32_t size, int state)
|
||||
mem_mapping_recalc(base, size);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
mem_add_upper_bios(void)
|
||||
{
|
||||
mem_mapping_add(&bios_mapping[0], 0xe0000, 0x04000,
|
||||
mem_read_bios,mem_read_biosw,mem_read_biosl,
|
||||
mem_write_null,mem_write_nullw,mem_write_nulll,
|
||||
rom,MEM_MAPPING_EXTERNAL|MEM_MAPPING_ROM, 0);
|
||||
mem_mapping_add(&bios_mapping[1], 0xe4000, 0x04000,
|
||||
mem_read_bios,mem_read_biosw,mem_read_biosl,
|
||||
mem_write_null,mem_write_nullw,mem_write_nulll,
|
||||
rom + (0x4000 & biosmask),
|
||||
MEM_MAPPING_EXTERNAL|MEM_MAPPING_ROM, 0);
|
||||
mem_mapping_add(&bios_mapping[2], 0xe8000, 0x04000,
|
||||
mem_read_bios,mem_read_biosw,mem_read_biosl,
|
||||
mem_write_null,mem_write_nullw,mem_write_nulll,
|
||||
rom + (0x8000 & biosmask),
|
||||
MEM_MAPPING_EXTERNAL|MEM_MAPPING_ROM, 0);
|
||||
mem_mapping_add(&bios_mapping[3], 0xec000, 0x04000,
|
||||
mem_read_bios,mem_read_biosw,mem_read_biosl,
|
||||
mem_write_null,mem_write_nullw,mem_write_nulll,
|
||||
rom + (0xc000 & biosmask),
|
||||
MEM_MAPPING_EXTERNAL|MEM_MAPPING_ROM, 0);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
mem_add_bios(void)
|
||||
{
|
||||
if (AT || (romset == ROM_XI8088 && xi8088_bios_128kb())) {
|
||||
mem_mapping_add(&bios_mapping[0], 0xe0000, 0x04000,
|
||||
mem_read_bios,mem_read_biosw,mem_read_biosl,
|
||||
mem_write_null,mem_write_nullw,mem_write_nulll,
|
||||
rom,MEM_MAPPING_EXTERNAL|MEM_MAPPING_ROM, 0);
|
||||
mem_mapping_add(&bios_mapping[1], 0xe4000, 0x04000,
|
||||
mem_read_bios,mem_read_biosw,mem_read_biosl,
|
||||
mem_write_null,mem_write_nullw,mem_write_nulll,
|
||||
rom + (0x4000 & biosmask),
|
||||
MEM_MAPPING_EXTERNAL|MEM_MAPPING_ROM, 0);
|
||||
mem_mapping_add(&bios_mapping[2], 0xe8000, 0x04000,
|
||||
mem_read_bios,mem_read_biosw,mem_read_biosl,
|
||||
mem_write_null,mem_write_nullw,mem_write_nulll,
|
||||
rom + (0x8000 & biosmask),
|
||||
MEM_MAPPING_EXTERNAL|MEM_MAPPING_ROM, 0);
|
||||
mem_mapping_add(&bios_mapping[3], 0xec000, 0x04000,
|
||||
mem_read_bios,mem_read_biosw,mem_read_biosl,
|
||||
mem_write_null,mem_write_nullw,mem_write_nulll,
|
||||
rom + (0xc000 & biosmask),
|
||||
MEM_MAPPING_EXTERNAL|MEM_MAPPING_ROM, 0);
|
||||
{
|
||||
if (AT)
|
||||
mem_add_upper_bios();
|
||||
|
||||
mem_mapping_add(&bios_mapping[4], 0xf0000, 0x04000,
|
||||
@@ -1828,11 +1834,6 @@ mem_log("MEM: reset: new pages=%08lx, pages_sz=%i\n", pages, pages_sz);
|
||||
mem_mapping_add(&ram_mid_mapping, 0xc0000, 0x40000,
|
||||
mem_read_ram,mem_read_ramw,mem_read_raml,
|
||||
mem_write_ram,mem_write_ramw,mem_write_raml,
|
||||
ram + 0xc0000, MEM_MAPPING_INTERNAL, NULL);
|
||||
|
||||
if (romset == ROM_IBMPS1_2011)
|
||||
mem_mapping_add(&romext_mapping, 0xc8000, 0x08000,
|
||||
mem_read_romext,mem_read_romextw,mem_read_romextl,
|
||||
ram + 0xc0000, MEM_MAPPING_INTERNAL, NULL);
|
||||
|
||||
mem_mapping_add(&ram_remapped_mapping, mem_size * 1024, 256 * 1024,
|
||||
|
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Definitions for the memory interface.
|
||||
*
|
||||
* Version: @(#)mem.h 1.0.5 2018/09/02
|
||||
* Version: @(#)mem.h 1.0.6 2018/09/15
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Sarah Walker, <tommowalker@tommowalker.co.uk>
|
||||
@@ -226,6 +226,10 @@ extern uint8_t mem_read_bios(uint32_t addr, void *priv);
|
||||
extern uint16_t mem_read_biosw(uint32_t addr, void *priv);
|
||||
extern uint32_t mem_read_biosl(uint32_t addr, void *priv);
|
||||
|
||||
extern uint8_t mem_read_romext(uint32_t addr, void *priv);
|
||||
extern uint16_t mem_read_romextw(uint32_t addr, void *priv);
|
||||
extern uint32_t mem_read_romextl(uint32_t addr, void *priv);
|
||||
|
||||
extern void mem_write_null(uint32_t addr, uint8_t val, void *p);
|
||||
extern void mem_write_nullw(uint32_t addr, uint16_t val, void *p);
|
||||
extern void mem_write_nulll(uint32_t addr, uint32_t val, void *p);
|
||||
@@ -248,6 +252,7 @@ extern void mmu_invalidate(uint32_t addr);
|
||||
|
||||
extern void mem_a20_recalc(void);
|
||||
|
||||
extern void mem_add_upper_bios(void);
|
||||
extern void mem_add_bios(void);
|
||||
|
||||
extern void mem_init(void);
|
||||
|
25
src/nvr.c
25
src/nvr.c
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Implement a generic NVRAM/CMOS/RTC device.
|
||||
*
|
||||
* Version: @(#)nvr.c 1.0.12 2018/08/14
|
||||
* Version: @(#)nvr.c 1.0.13 2018/09/15
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>,
|
||||
* David Hrdlička, <hrdlickadavid@outlook.com>
|
||||
@@ -257,10 +257,7 @@ nvr_load(void)
|
||||
if (saved_nvr == NULL) return(0);
|
||||
|
||||
/* Clear out any old data. */
|
||||
if (romset == ROM_AWARD286)
|
||||
memset(saved_nvr->regs, 0xff, sizeof(saved_nvr->regs));
|
||||
else
|
||||
memset(saved_nvr->regs, 0x00, sizeof(saved_nvr->regs));
|
||||
memset(saved_nvr->regs, 0x00, sizeof(saved_nvr->regs));
|
||||
|
||||
/* Set the defaults. */
|
||||
if (saved_nvr->reset != NULL)
|
||||
@@ -278,11 +275,6 @@ nvr_load(void)
|
||||
}
|
||||
}
|
||||
|
||||
if (romset == ROM_T1000)
|
||||
t1000_nvr_load();
|
||||
else if (romset == ROM_T1200)
|
||||
t1200_nvr_load();
|
||||
|
||||
/* Get the local RTC running! */
|
||||
if (saved_nvr->start != NULL)
|
||||
saved_nvr->start(saved_nvr);
|
||||
@@ -291,6 +283,13 @@ nvr_load(void)
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
nvr_set_ven_save(void (*ven_save)(void))
|
||||
{
|
||||
saved_nvr->ven_save = ven_save;
|
||||
}
|
||||
|
||||
|
||||
/* Save the current NVR to a file. */
|
||||
int
|
||||
nvr_save(void)
|
||||
@@ -312,10 +311,8 @@ nvr_save(void)
|
||||
}
|
||||
}
|
||||
|
||||
if (romset == ROM_T1000)
|
||||
t1000_nvr_save();
|
||||
else if (romset == ROM_T1200)
|
||||
t1200_nvr_save();
|
||||
if (saved_nvr->ven_save)
|
||||
saved_nvr->ven_save();
|
||||
|
||||
/* Device is clean again. */
|
||||
nvr_dosave = 0;
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/*
|
||||
/*
|
||||
* VARCem Virtual ARchaeological Computer EMulator.
|
||||
* An emulator of (mostly) x86-based PC systems and devices,
|
||||
* using the ISA,EISA,VLB,MCA and PCI system buses, roughly
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Definitions for the generic NVRAM/CMOS driver.
|
||||
*
|
||||
* Version: @(#)nvr.h 1.0.8 2018/08/04
|
||||
* Version: @(#)nvr.h 1.0.9 2018/09/15
|
||||
*
|
||||
* Author: Fred N. van Kempen, <decwiz@yahoo.com>,
|
||||
* David Hrdlička, <hrdlickadavid@outlook.com>
|
||||
@@ -80,6 +80,8 @@ typedef struct _nvr_ {
|
||||
void (*tick)(struct _nvr_ *);
|
||||
void (*recalc)(struct _nvr_ *);
|
||||
|
||||
void (*ven_save)(void);
|
||||
|
||||
uint8_t regs[NVR_MAXSIZE]; /* these are the registers */
|
||||
} nvr_t;
|
||||
|
||||
@@ -99,6 +101,7 @@ extern void nvr_init(nvr_t *);
|
||||
extern wchar_t *nvr_path(wchar_t *str);
|
||||
extern FILE *nvr_fopen(wchar_t *str, wchar_t *mode);
|
||||
extern int nvr_load(void);
|
||||
extern void nvr_set_ven_save(void (*ven_save)(void));
|
||||
extern int nvr_save(void);
|
||||
|
||||
extern int nvr_is_leap(int year);
|
||||
|
@@ -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.11 2018/08/14
|
||||
* Version: @(#)nvr_at.c 1.0.12 2018/09/15
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -565,7 +565,7 @@ nvr_write(uint16_t addr, uint8_t val, void *priv)
|
||||
} else {
|
||||
local->addr = (val & (nvr->size - 1));
|
||||
if (!(machines[machine].flags & MACHINE_MCA) &&
|
||||
(romset != ROM_IBMPS1_2133))
|
||||
(machines[machine].flags & MACHINE_NONMI))
|
||||
nmi_mask = (~val & 0x80);
|
||||
}
|
||||
}
|
||||
@@ -664,7 +664,7 @@ nvr_at_init(const device_t *info)
|
||||
nvr = (nvr_t *)malloc(sizeof(nvr_t));
|
||||
if (nvr == NULL) return(NULL);
|
||||
/* FIXME: See which is correct, this or 0xFF. */
|
||||
if ((info->local == 0) || (romset == ROM_AWARD286))
|
||||
if (info->local == 0)
|
||||
memset(nvr, 0xff, sizeof(nvr_t));
|
||||
else
|
||||
memset(nvr, 0x00, sizeof(nvr_t));
|
||||
|
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Handling of the PS/2 series CMOS devices.
|
||||
*
|
||||
* Version: @(#)nvr_ps2.c 1.0.8 2018/09/12
|
||||
* Version: @(#)nvr_ps2.c 1.0.9 2018/09/15
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Sarah Walker, <tommowalker@tommowalker.co.uk>
|
||||
@@ -54,6 +54,8 @@ typedef struct {
|
||||
int addr;
|
||||
|
||||
uint8_t ram[8192];
|
||||
|
||||
wchar_t *fn;
|
||||
} ps2_nvr_t;
|
||||
|
||||
|
||||
@@ -105,28 +107,24 @@ ps2_nvr_write(uint16_t port, uint8_t val, void *priv)
|
||||
static void *
|
||||
ps2_nvr_init(const device_t *info)
|
||||
{
|
||||
char temp[64];
|
||||
ps2_nvr_t *nvr;
|
||||
FILE *f = NULL;
|
||||
int c;
|
||||
|
||||
nvr = (ps2_nvr_t *)malloc(sizeof(ps2_nvr_t));
|
||||
memset(nvr, 0x00, sizeof(ps2_nvr_t));
|
||||
|
||||
|
||||
/* Set up the NVR file's name. */
|
||||
sprintf(temp, "%s_sec.nvr", machine_get_internal_name());
|
||||
c = strlen(temp);
|
||||
nvr->fn = (wchar_t *)malloc((c + 1) * sizeof(wchar_t));
|
||||
mbstowcs(nvr->fn, temp, c + 1);
|
||||
|
||||
io_sethandler(0x0074, 3,
|
||||
ps2_nvr_read,NULL,NULL, ps2_nvr_write,NULL,NULL, nvr);
|
||||
|
||||
switch (romset) {
|
||||
case ROM_IBMPS2_M70_TYPE3:
|
||||
f = nvr_fopen(L"ibmps2_m70_type3_sec.nvr", L"rb");
|
||||
break;
|
||||
#if defined(DEV_BRANCH) && defined(USE_PS2M70T4)
|
||||
case ROM_IBMPS2_M70_TYPE4:
|
||||
f = nvr_fopen(L"ibmps2_m70_type4_sec.nvr", L"rb");
|
||||
break;
|
||||
#endif
|
||||
case ROM_IBMPS2_M80:
|
||||
f = nvr_fopen(L"ibmps2_m80_sec.nvr", L"rb");
|
||||
break;
|
||||
}
|
||||
f = nvr_fopen(nvr->fn, L"rb");
|
||||
|
||||
memset(nvr->ram, 0xff, 8192);
|
||||
if (f != NULL) {
|
||||
@@ -144,19 +142,7 @@ ps2_nvr_close(void *priv)
|
||||
ps2_nvr_t *nvr = (ps2_nvr_t *)priv;
|
||||
FILE *f = NULL;
|
||||
|
||||
switch (romset) {
|
||||
case ROM_IBMPS2_M70_TYPE3:
|
||||
f = nvr_fopen(L"ibmps2_m70_type3_sec.nvr", L"wb");
|
||||
break;
|
||||
#if defined(DEV_BRANCH) && defined(USE_PS2M70T4)
|
||||
case ROM_IBMPS2_M70_TYPE4:
|
||||
f = nvr_fopen(L"ibmps2_m70_type4_sec.nvr", L"wb");
|
||||
break;
|
||||
#endif
|
||||
case ROM_IBMPS2_M80:
|
||||
f = nvr_fopen(L"ibmps2_m80_sec.nvr", L"wb");
|
||||
break;
|
||||
}
|
||||
f = nvr_fopen(nvr->fn, L"wb");
|
||||
|
||||
if (f != NULL) {
|
||||
(void)fwrite(nvr->ram, 8192, 1, f);
|
||||
|
Reference in New Issue
Block a user