New upstream version 2.0pre9.2
Some checks failed
Master / Scheduled (FULL) (push) Has been cancelled
Master / Triggered (push) Has been cancelled
Master / Triggered (ASAN) (push) Has been cancelled
Master / Triggered (FULL) (push) Has been cancelled

This commit is contained in:
geos_one
2025-08-10 12:35:43 +02:00
commit 91736529d5
1056 changed files with 370820 additions and 0 deletions

View 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);
}