Preliminary 186 emulation.
Added MCA variant of the ET4000 VGA card. Added NE/2 Netware card. Corrected timings of the NCR 5380-based cards. Added the WD8003E (8-bit ISA), WD8013EBT (16-bit ISA) and WD8013EP/A (MCA) network cards.
This commit is contained in:
@@ -23,6 +23,7 @@
|
||||
#include <wchar.h>
|
||||
#include "../86box.h"
|
||||
#include "../io.h"
|
||||
#include "../mca.h"
|
||||
#include "../mem.h"
|
||||
#include "../rom.h"
|
||||
#include "../device.h"
|
||||
@@ -43,6 +44,10 @@ typedef struct et4000_t
|
||||
rom_t bios_rom;
|
||||
|
||||
uint8_t banking;
|
||||
|
||||
uint8_t pos_regs[8];
|
||||
|
||||
int is_mca;
|
||||
} et4000_t;
|
||||
|
||||
static uint8_t crtc_mask[0x40] =
|
||||
@@ -112,6 +117,16 @@ uint8_t et4000_in(uint16_t addr, void *p)
|
||||
|
||||
switch (addr)
|
||||
{
|
||||
case 0x3c2:
|
||||
if (et4000->is_mca)
|
||||
{
|
||||
if ((svga->vgapal[0].r + svga->vgapal[0].g + svga->vgapal[0].b) >= 0x4e)
|
||||
return 0;
|
||||
else
|
||||
return 0x10;
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x3C5:
|
||||
if ((svga->seqaddr & 0xf) == 7) return svga->seqregs[svga->seqaddr & 0xf] | 4;
|
||||
break;
|
||||
@@ -160,11 +175,13 @@ void et4000_recalctimings(svga_t *svga)
|
||||
}
|
||||
}
|
||||
|
||||
void *et4000_init(const device_t *info)
|
||||
void *et4000_isa_init(const device_t *info)
|
||||
{
|
||||
et4000_t *et4000 = malloc(sizeof(et4000_t));
|
||||
memset(et4000, 0, sizeof(et4000_t));
|
||||
|
||||
et4000->is_mca = 0;
|
||||
|
||||
rom_init(&et4000->bios_rom, BIOS_ROM_PATH, 0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL);
|
||||
|
||||
io_sethandler(0x03c0, 0x0020, et4000_in, NULL, NULL, et4000_out, NULL, NULL, et4000);
|
||||
@@ -178,6 +195,51 @@ void *et4000_init(const device_t *info)
|
||||
return et4000;
|
||||
}
|
||||
|
||||
static uint8_t
|
||||
et4000_mca_read(int port, void *priv)
|
||||
{
|
||||
et4000_t *et4000 = (et4000_t *)priv;
|
||||
|
||||
return(et4000->pos_regs[port & 7]);
|
||||
}
|
||||
|
||||
static void
|
||||
et4000_mca_write(int port, uint8_t val, void *priv)
|
||||
{
|
||||
et4000_t *et4000 = (et4000_t *)priv;
|
||||
|
||||
/* MCA does not write registers below 0x0100. */
|
||||
if (port < 0x0102) return;
|
||||
|
||||
/* Save the MCA register value. */
|
||||
et4000->pos_regs[port & 7] = val;
|
||||
}
|
||||
|
||||
void *et4000_mca_init(const device_t *info)
|
||||
{
|
||||
et4000_t *et4000 = malloc(sizeof(et4000_t));
|
||||
memset(et4000, 0, sizeof(et4000_t));
|
||||
|
||||
et4000->is_mca = 1;
|
||||
|
||||
/* Enable MCA. */
|
||||
et4000->pos_regs[0] = 0xF2; /* ET4000 MCA board ID */
|
||||
et4000->pos_regs[1] = 0x80;
|
||||
mca_add(et4000_mca_read, et4000_mca_write, et4000);
|
||||
|
||||
rom_init(&et4000->bios_rom, BIOS_ROM_PATH, 0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL);
|
||||
|
||||
svga_init(&et4000->svga, et4000, 1 << 20, /*1mb*/
|
||||
et4000_recalctimings,
|
||||
et4000_in, et4000_out,
|
||||
NULL,
|
||||
NULL);
|
||||
|
||||
io_sethandler(0x03c0, 0x0020, et4000_in, NULL, NULL, et4000_out, NULL, NULL, et4000);
|
||||
|
||||
return et4000;
|
||||
}
|
||||
|
||||
static int et4000_available(void)
|
||||
{
|
||||
return rom_present(BIOS_ROM_PATH);
|
||||
@@ -206,13 +268,25 @@ void et4000_force_redraw(void *p)
|
||||
et4000->svga.fullchange = changeframecount;
|
||||
}
|
||||
|
||||
const device_t et4000_device =
|
||||
const device_t et4000_isa_device =
|
||||
{
|
||||
"Tseng Labs ET4000AX",
|
||||
"Tseng Labs ET4000AX (ISA)",
|
||||
DEVICE_ISA, 0,
|
||||
et4000_init, et4000_close, NULL,
|
||||
et4000_isa_init, et4000_close, NULL,
|
||||
et4000_available,
|
||||
et4000_speed_changed,
|
||||
et4000_force_redraw,
|
||||
NULL
|
||||
};
|
||||
|
||||
const device_t et4000_mca_device =
|
||||
{
|
||||
"Tseng Labs ET4000AX (MCA)",
|
||||
DEVICE_MCA, 0,
|
||||
et4000_mca_init, et4000_close, NULL,
|
||||
et4000_available,
|
||||
et4000_speed_changed,
|
||||
et4000_force_redraw,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
/* Copyright holders: Sarah Walker
|
||||
see COPYING for more details
|
||||
*/
|
||||
extern const device_t et4000_device;
|
||||
extern const device_t et4000_isa_device;
|
||||
extern const device_t et4000_mca_device;
|
||||
|
||||
@@ -126,10 +126,11 @@ video_cards[] = {
|
||||
{ "[ISA] TI CF62011 SVGA", "ti_cf62011", &ti_cf62011_device, GFX_TICF62011, VIDEO_FLAG_TYPE_SPECIAL, {VIDEO_ISA, 8, 16, 32, 8, 16, 32}},
|
||||
#endif
|
||||
{"[ISA] Trident TVGA8900D", "tvga8900d", &tvga8900d_device, GFX_TVGA, VIDEO_FLAG_TYPE_SPECIAL, {VIDEO_ISA, 3, 3, 6, 8, 8, 12}},
|
||||
{"[ISA] Tseng ET4000AX", "et4000ax", &et4000_device, GFX_ET4000, VIDEO_FLAG_TYPE_SPECIAL, {VIDEO_ISA, 3, 3, 6, 5, 5, 10}},
|
||||
{"[ISA] Tseng ET4000AX", "et4000ax", &et4000_isa_device, GFX_ET4000_ISA, VIDEO_FLAG_TYPE_SPECIAL, {VIDEO_ISA, 3, 3, 6, 5, 5, 10}},
|
||||
{"[ISA] VGA", "vga", &vga_device, GFX_VGA, VIDEO_FLAG_TYPE_SPECIAL, {VIDEO_ISA, 8, 16, 32, 8, 16, 32}},
|
||||
{"[ISA] Wyse 700", "wy700", &wy700_device, GFX_WY700, VIDEO_FLAG_TYPE_CGA, {VIDEO_ISA, 8, 16, 32, 8, 16, 32}},
|
||||
{"[PCI] ATI Graphics Pro Turbo (Mach64 GX)", "mach64gx_pci", &mach64gx_pci_device, GFX_MACH64GX_PCI, VIDEO_FLAG_TYPE_SPECIAL, {VIDEO_BUS, 2, 2, 1, 20, 20, 21}},
|
||||
{"[MCA] Tseng ET4000AX", "et4000mca", &et4000_mca_device, GFX_ET4000_MCA, VIDEO_FLAG_TYPE_SPECIAL, {VIDEO_BUS, 3, 3, 6, 5, 5, 10}},
|
||||
{"[PCI] ATI Graphics Pro Turbo (Mach64 GX)", "mach64gx_pci", &mach64gx_pci_device, GFX_MACH64GX_PCI, VIDEO_FLAG_TYPE_SPECIAL, {VIDEO_BUS, 2, 2, 1, 20, 20, 21}},
|
||||
{"[PCI] ATI Video Xpression (Mach64 VT2)", "mach64vt2", &mach64vt2_device, GFX_MACH64VT2, VIDEO_FLAG_TYPE_SPECIAL, {VIDEO_BUS, 2, 2, 1, 20, 20, 21}},
|
||||
{"[PCI] Cardex Tseng ET4000/w32p", "et4000w32p_pci", &et4000w32p_cardex_pci_device, GFX_ET4000W32_CARDEX_PCI, VIDEO_FLAG_TYPE_SPECIAL, {VIDEO_BUS, 4, 4, 4, 10, 10, 10}},
|
||||
{"[PCI] Cirrus Logic CL-GD 5430", "cl_gd5430_pci", &gd5430_pci_device, GFX_CL_GD5430_PCI, VIDEO_FLAG_TYPE_SPECIAL, {VIDEO_BUS, 4, 4, 8, 10, 10, 20}},
|
||||
|
||||
@@ -44,7 +44,8 @@ enum {
|
||||
GFX_SUPER_EGA, /* Using Chips & Technologies SuperEGA BIOS */
|
||||
GFX_VGA, /* IBM VGA */
|
||||
GFX_TVGA, /* Using Trident TVGA8900D BIOS */
|
||||
GFX_ET4000, /* Tseng ET4000 */
|
||||
GFX_ET4000_ISA, /* Tseng ET4000 */
|
||||
GFX_ET4000_MCA, /* Tseng ET4000 */
|
||||
GFX_ET4000W32_CARDEX_VLB, /* Tseng ET4000/W32p (Cardex) VLB */
|
||||
GFX_ET4000W32_CARDEX_PCI, /* Tseng ET4000/W32p (Cardex) PCI */
|
||||
#if defined(DEV_BRANCH) && defined(USE_STEALTH32)
|
||||
|
||||
Reference in New Issue
Block a user