New upstream version 2.0pre9.2
This commit is contained in:
70
src/base/dev/misc/chipset.c
Normal file
70
src/base/dev/misc/chipset.c
Normal file
@@ -0,0 +1,70 @@
|
||||
/*
|
||||
* (C) Copyright 2013 the "DOSEMU-Development-Team".
|
||||
*
|
||||
* for details see file COPYING.DOSEMU in the DOSEMU distribution
|
||||
*/
|
||||
|
||||
#include "emu.h"
|
||||
#include "port.h"
|
||||
#include "hma.h"
|
||||
#include "chipset.h"
|
||||
|
||||
#define CONTROL_RESET_MASK 1
|
||||
#define CONTROL_A20GATE_MASK 2
|
||||
|
||||
|
||||
static Bit8u port92h_io_read(ioport_t port, void *arg)
|
||||
{
|
||||
Bit8u ret = 0;
|
||||
if (a20)
|
||||
ret |= CONTROL_A20GATE_MASK;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void port92h_io_write(ioport_t port, Bit8u val, void *arg)
|
||||
{
|
||||
int enA20 = (val & CONTROL_A20GATE_MASK) ? 1 : 0;
|
||||
if (val & CONTROL_RESET_MASK) cpu_reset();
|
||||
set_a20(enA20);
|
||||
}
|
||||
|
||||
static Bit8u picext_io_read(ioport_t port, void *arg)
|
||||
{
|
||||
Bit8u val = 0xff;
|
||||
|
||||
switch (port) {
|
||||
case PIC0_VECBASE_PORT:
|
||||
val = pic0_get_base();
|
||||
break;
|
||||
case PIC1_VECBASE_PORT:
|
||||
val = pic1_get_base();
|
||||
break;
|
||||
}
|
||||
return val;
|
||||
}
|
||||
|
||||
void chipset_init(void)
|
||||
{
|
||||
emu_iodev_t io_dev = {};
|
||||
|
||||
io_dev.read_portb = port92h_io_read;
|
||||
io_dev.write_portb = port92h_io_write;
|
||||
io_dev.start_addr = 0x92;
|
||||
io_dev.end_addr = 0x92;
|
||||
io_dev.handler_name = "Chipset Control Port A";
|
||||
port_register_handler(io_dev, 0);
|
||||
|
||||
memset(&io_dev, 0, sizeof(io_dev));
|
||||
io_dev.read_portb = picext_io_read;
|
||||
io_dev.start_addr = PIC0_EXTPORT_START;
|
||||
io_dev.end_addr = PIC0_EXTPORT_START + PICx_EXT_PORTS - 1;
|
||||
io_dev.handler_name = "PIC0 extensions";
|
||||
port_register_handler(io_dev, 0);
|
||||
|
||||
memset(&io_dev, 0, sizeof(io_dev));
|
||||
io_dev.read_portb = picext_io_read;
|
||||
io_dev.start_addr = PIC1_EXTPORT_START;
|
||||
io_dev.end_addr = PIC1_EXTPORT_START + PICx_EXT_PORTS - 1;
|
||||
io_dev.handler_name = "PIC1 extensions";
|
||||
port_register_handler(io_dev, 0);
|
||||
}
|
||||
Reference in New Issue
Block a user