Partially implement Dell System 200 chipset. Fixes POST errors and HIMEM.SYS.
This commit is contained in:
parent
7c63ce6368
commit
a54e6575d3
8 changed files with 83 additions and 6 deletions
68
src/dells200.c
Normal file
68
src/dells200.c
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
#include "ibm.h"
|
||||
#include "io.h"
|
||||
#include "mem.h"
|
||||
|
||||
#include "dells200.h"
|
||||
|
||||
static struct
|
||||
{
|
||||
uint8_t regs[3];
|
||||
} dells200;
|
||||
|
||||
static uint8_t dells200_in(uint16_t addr, void *p)
|
||||
{
|
||||
uint8_t ret = 0xff;
|
||||
|
||||
switch (addr)
|
||||
{
|
||||
case 0xa4:
|
||||
ret = dells200.regs[0];
|
||||
break;
|
||||
case 0xa5:
|
||||
ret = dells200.regs[1];
|
||||
break;
|
||||
case 0xab:
|
||||
ret = dells200.regs[2];
|
||||
break;
|
||||
}
|
||||
|
||||
// pclog("dells200_in: addr=%04x ret=%02x %04x(%08x):%08x\n", addr, ret, CS,cs,cpu_state.pc);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void dells200_out(uint16_t addr, uint8_t val, void *p)
|
||||
{
|
||||
// pclog("dells200_out: addr=%04x val=%02x %04x(%08x):%08x\n", addr, val, CS,cs,cpu_state.pc);
|
||||
|
||||
switch (addr)
|
||||
{
|
||||
case 0xa4:
|
||||
dells200.regs[0] = val;
|
||||
mem_a20_alt = val & 0x40;
|
||||
mem_a20_recalc();
|
||||
break;
|
||||
case 0xa5:
|
||||
dells200.regs[1] = val;
|
||||
if (val & 1)
|
||||
mem_mapping_set_addr(&ram_low_mapping, 0, 0x40000);
|
||||
else
|
||||
mem_mapping_set_addr(&ram_low_mapping, 0, 0xa0000);
|
||||
if (val & 1)
|
||||
mem_mapping_disable(&ram_high_mapping);
|
||||
else
|
||||
mem_mapping_enable(&ram_high_mapping);
|
||||
break;
|
||||
case 0xab:
|
||||
dells200.regs[2] = val;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void dells200_chipset_init()
|
||||
{
|
||||
memset(&dells200, 0, sizeof(dells200));
|
||||
|
||||
io_sethandler(0x00a4, 0x0002, dells200_in,NULL,NULL, dells200_out,NULL,NULL, NULL);
|
||||
io_sethandler(0x00ab, 0x0001, dells200_in,NULL,NULL, dells200_out,NULL,NULL, NULL);
|
||||
}
|
||||
Loading…
Reference in a new issue