More hardcoding fixes

This commit is contained in:
Jasmine Iwanek
2022-03-09 21:57:51 -05:00
parent ec7c2643e0
commit 41f1c2facd
28 changed files with 245 additions and 225 deletions

View File

@@ -2106,13 +2106,16 @@ config_load(void)
video_fullscreen_first = 1;
time_sync = TIME_SYNC_ENABLED;
hdc_current = hdc_get_from_internal_name("none");
serial_enabled[0] = 1;
serial_enabled[1] = 1;
serial_enabled[2] = 0;
serial_enabled[3] = 0;
for (i = 2 ; i < SERIAL_MAX; i++)
serial_enabled[i] = 0;
lpt_ports[0].enabled = 1;
lpt_ports[1].enabled = 0;
lpt_ports[2].enabled = 0;
for (i = 1 ; i < PARALLEL_MAX; i++)
lpt_ports[i].enabled = 0;
for (i = 0; i < FDD_NUM; i++) {
if (i < 2)
fdd_set_type(i, 2);

View File

@@ -685,13 +685,13 @@ serial_init(const device_t *info)
dev->sd->serial = dev;
serial_reset_port(dev);
if (next_inst == 3)
serial_setup(dev, SERIAL4_ADDR, SERIAL4_IRQ);
serial_setup(dev, COM4_ADDR, COM4_IRQ);
else if (next_inst == 2)
serial_setup(dev, SERIAL3_ADDR, SERIAL3_IRQ);
serial_setup(dev, COM3_ADDR, COM3_IRQ);
else if ((next_inst == 1) || (info->flags & DEVICE_PCJR))
serial_setup(dev, SERIAL2_ADDR, SERIAL2_IRQ);
serial_setup(dev, COM2_ADDR, COM2_IRQ);
else if (next_inst == 0)
serial_setup(dev, SERIAL1_ADDR, SERIAL1_IRQ);
serial_setup(dev, COM1_ADDR, COM1_IRQ);
/* Default to 1200,N,7. */
dev->dlab = 96;
@@ -717,7 +717,7 @@ serial_set_next_inst(int ni)
void
serial_standalone_init(void) {
for ( ; next_inst < 4; )
for ( ; next_inst < SERIAL_MAX; )
device_add_inst(&ns8250_device, next_inst + 1);
};

View File

@@ -108,12 +108,12 @@ typedef struct {
char network_host[520]; /* PCap device */
/* Ports category */
char parallel_devices[3][32]; /* LPT device names */
char parallel_devices[PARALLEL_MAX][32]; /* LPT device names */
#ifdef USE_SERIAL_DEVICES
char serial_devices[4][32]; /* Serial device names */
char serial_devices[SERIAL_MAX][32]; /* Serial device names */
#endif
int serial_enabled[4], /* Serial ports 1 and 2 enabled */
parallel_enabled[3]; /* LPT1, LPT2, LPT3 enabled */
int serial_enabled[SERIAL_MAX], /* Serial ports 1, 2, 3, 4 enabled */
parallel_enabled[PARALLEL_MAX]; /* LPT1, LPT2, LPT3, LPT4 enabled */
/* Other peripherals category */
int fdc_type, /* Floppy disk controller type */

View File

@@ -1,6 +1,22 @@
#ifndef EMU_LPT_H
# define EMU_LPT_H
#define LPT1_ADDR 0x0378
#define LPT1_IRQ 7
#define LPT2_ADDR 0x0278
#define LPT2_IRQ 5
// LPT 1 on machines when installed
#define LPT_MDA_ADDR 0x03bc
#define LPT_MDA_IRQ 7
#define LPT4_ADDR 0x0268
#define LPT4_IRQ 5
/*
#define LPT5_ADDR 0x027c
#define LPT5_IRQ 7
#define LPT6_ADDR 0x026c
#define LPT6_IRQ 5
*/
typedef struct
{
const char *name;

View File

@@ -35,14 +35,14 @@
#define SERIAL_FIFO_SIZE 16
/* Default settings for the standard ports. */
#define SERIAL1_ADDR 0x03f8
#define SERIAL1_IRQ 4
#define SERIAL2_ADDR 0x02f8
#define SERIAL2_IRQ 3
#define SERIAL3_ADDR 0x03e8
#define SERIAL3_IRQ 4
#define SERIAL4_ADDR 0x02e8
#define SERIAL4_IRQ 3
#define COM1_ADDR 0x03f8
#define COM1_IRQ 4
#define COM2_ADDR 0x02f8
#define COM2_IRQ 3
#define COM3_ADDR 0x03e8
#define COM3_IRQ 4
#define COM4_ADDR 0x02e8
#define COM4_IRQ 3
struct serial_device_s;

View File

@@ -177,8 +177,8 @@ void
lpt_init(void)
{
int i;
uint16_t default_ports[PARALLEL_MAX] = { 0x378, 0x278, 0x3bc, 0x268 }; /*, 0x27c, 0x26c }; */
uint8_t default_irqs[PARALLEL_MAX] = { 7, 5, 7, 5 }; /* , 7, 5 }; */
uint16_t default_ports[PARALLEL_MAX] = { LPT1_ADDR, LPT2_ADDR, LPT_MDA_ADDR, LPT4_ADDR };
uint8_t default_irqs[PARALLEL_MAX] = { LPT1_IRQ, LPT2_IRQ, LPT_MDA_IRQ, LPT4_IRQ };
for (i = 0; i < PARALLEL_MAX; i++) {
lpt_ports[i].addr = 0xffff;

View File

@@ -65,22 +65,22 @@ cbm_io_write(uint16_t port, uint8_t val, void *p)
switch (val & 3) {
case 1:
lpt1_init(0x3bc);
lpt1_init(LPT_MDA_ADDR);
break;
case 2:
lpt1_init(0x378);
lpt1_init(LPT1_ADDR);
break;
case 3:
lpt1_init(0x278);
lpt1_init(LPT2_ADDR);
break;
}
switch (val & 0xc) {
case 0x4:
serial_setup(cmd_uart, 0x2f8, 3);
serial_setup(cmd_uart, COM2_ADDR, COM2_IRQ);
break;
case 0x8:
serial_setup(cmd_uart, 0x3f8, 4);
serial_setup(cmd_uart, COM1_ADDR, COM1_IRQ);
break;
}
}

View File

@@ -145,21 +145,21 @@ ps1_write(uint16_t port, uint8_t val, void *priv)
serial_remove(ps->uart);
if (val & 0x04) {
if (val & 0x08)
serial_setup(ps->uart, SERIAL1_ADDR, SERIAL1_IRQ);
serial_setup(ps->uart, COM1_ADDR, COM1_IRQ);
else
serial_setup(ps->uart, SERIAL2_ADDR, SERIAL2_IRQ);
serial_setup(ps->uart, COM2_ADDR, COM2_IRQ);
}
if (val & 0x10) {
switch ((val >> 5) & 3)
{
case 0:
lpt1_init(0x3bc);
lpt1_init(LPT_MDA_ADDR);
break;
case 1:
lpt1_init(0x378);
lpt1_init(LPT1_ADDR);
break;
case 2:
lpt1_init(0x278);
lpt1_init(LPT2_ADDR);
break;
}
}
@@ -270,7 +270,7 @@ ps1_setup(int model)
ps->uart = device_add_inst(&ns16450_device, 1);
lpt1_remove();
lpt1_init(0x3bc);
lpt1_init(LPT_MDA_ADDR);
mem_remap_top(384);

View File

@@ -90,21 +90,21 @@ static void ps2_write(uint16_t port, uint8_t val, void *p)
serial_remove(ps2_uart);
if (val & 0x04) {
if (val & 0x08)
serial_setup(ps2_uart, SERIAL1_ADDR, SERIAL1_IRQ);
serial_setup(ps2_uart, COM1_ADDR, COM1_IRQ);
else
serial_setup(ps2_uart, SERIAL2_ADDR, SERIAL2_IRQ);
serial_setup(ps2_uart, COM2_ADDR, COM2_IRQ);
}
if (val & 0x10) {
switch ((val >> 5) & 3)
{
case 0:
lpt1_init(0x3bc);
lpt1_init(LPT_MDA_ADDR);
break;
case 1:
lpt1_init(0x378);
lpt1_init(LPT1_ADDR);
break;
case 2:
lpt1_init(0x278);
lpt1_init(LPT2_ADDR);
break;
}
}
@@ -159,7 +159,7 @@ static void ps2board_init(void)
ps2_uart = device_add_inst(&ns16450_device, 1);
lpt1_init(0x3bc);
lpt1_init(LPT_MDA_ADDR);
memset(&ps2_hd, 0, sizeof(ps2_hd));
}

View File

@@ -359,22 +359,22 @@ static void model_50_write(uint16_t port, uint8_t val)
if (val & 0x04)
{
if (val & 0x08)
serial_setup(ps2.uart, SERIAL1_ADDR, SERIAL1_IRQ);
serial_setup(ps2.uart, COM1_ADDR, COM1_IRQ);
else
serial_setup(ps2.uart, SERIAL2_ADDR, SERIAL2_IRQ);
serial_setup(ps2.uart, COM2_ADDR, COM2_IRQ);
}
if (val & 0x10)
{
switch ((val >> 5) & 3)
{
case 0:
lpt1_init(0x3bc);
lpt1_init(LPT_MDA_ADDR);
break;
case 1:
lpt1_init(0x378);
lpt1_init(LPT1_ADDR);
break;
case 2:
lpt1_init(0x278);
lpt1_init(LPT2_ADDR);
break;
}
}
@@ -492,22 +492,22 @@ static void model_55sx_write(uint16_t port, uint8_t val)
if (val & 0x04)
{
if (val & 0x08)
serial_setup(ps2.uart, SERIAL1_ADDR, SERIAL1_IRQ);
serial_setup(ps2.uart, COM1_ADDR, COM1_IRQ);
else
serial_setup(ps2.uart, SERIAL2_ADDR, SERIAL2_IRQ);
serial_setup(ps2.uart, COM2_ADDR, COM2_IRQ);
}
if (val & 0x10)
{
switch ((val >> 5) & 3)
{
case 0:
lpt1_init(0x3bc);
lpt1_init(LPT_MDA_ADDR);
break;
case 1:
lpt1_init(0x378);
lpt1_init(LPT1_ADDR);
break;
case 2:
lpt1_init(0x278);
lpt1_init(LPT2_ADDR);
break;
}
}
@@ -552,22 +552,22 @@ static void model_70_type3_write(uint16_t port, uint8_t val)
if (val & 0x04)
{
if (val & 0x08)
serial_setup(ps2.uart, SERIAL1_ADDR, SERIAL1_IRQ);
serial_setup(ps2.uart, COM1_ADDR, COM1_IRQ);
else
serial_setup(ps2.uart, SERIAL2_ADDR, SERIAL2_IRQ);
serial_setup(ps2.uart, COM2_ADDR, COM2_IRQ);
}
if (val & 0x10)
{
switch ((val >> 5) & 3)
{
case 0:
lpt1_init(0x3bc);
lpt1_init(LPT_MDA_ADDR);
break;
case 1:
lpt1_init(0x378);
lpt1_init(LPT1_ADDR);
break;
case 2:
lpt1_init(0x278);
lpt1_init(LPT2_ADDR);
break;
}
}
@@ -608,22 +608,22 @@ static void model_80_write(uint16_t port, uint8_t val)
if (val & 0x04)
{
if (val & 0x08)
serial_setup(ps2.uart, SERIAL1_ADDR, SERIAL1_IRQ);
serial_setup(ps2.uart, COM1_ADDR, COM1_IRQ);
else
serial_setup(ps2.uart, SERIAL2_ADDR, SERIAL2_IRQ);
serial_setup(ps2.uart, COM2_ADDR, COM2_IRQ);
}
if (val & 0x10)
{
switch ((val >> 5) & 3)
{
case 0:
lpt1_init(0x3bc);
lpt1_init(LPT_MDA_ADDR);
break;
case 1:
lpt1_init(0x378);
lpt1_init(LPT1_ADDR);
break;
case 2:
lpt1_init(0x278);
lpt1_init(LPT2_ADDR);
break;
}
}
@@ -832,7 +832,7 @@ static void ps2_mca_board_common_init()
ps2.setup = 0xff;
lpt1_init(0x3bc);
lpt1_init(LPT_MDA_ADDR);
}
static uint8_t ps2_mem_expansion_read(int port, void *p)

View File

@@ -59,7 +59,7 @@ machine_xt_compaq_deskpro_init(const machine_t *model)
standalone_gameport_type = &gameport_device;
lpt1_remove();
lpt1_init(0x03bc);
lpt1_init(LPT_MDA_ADDR);
return ret;
}
@@ -88,7 +88,7 @@ machine_xt_compaq_portable_init(const machine_t *model)
device_add(&gameport_device);
lpt1_remove();
lpt1_init(0x03bc);
lpt1_init(LPT_MDA_ADDR);
return ret;
}

View File

@@ -6,7 +6,7 @@
*
* This file is part of the 86Box distribution.
*
* Emulation of the Intel 82019AA Super I/O chip.
* Emulation of the Intel 82091AA Super I/O chip.
*
*
*
@@ -56,19 +56,19 @@ fdc_handler(i82091aa_t *dev)
static void
lpt1_handler(i82091aa_t *dev)
{
uint16_t lpt_port = 0x378;
uint16_t lpt_port = LPT1_ADDR;
lpt1_remove();
switch ((dev->regs[0x20] >> 1) & 0x03) {
case 0x00:
lpt_port = 0x378;
lpt_port = LPT1_ADDR;
break;
case 1:
lpt_port = 0x278;
lpt_port = LPT2_ADDR;
break;
case 2:
lpt_port = 0x3bc;
lpt_port = LPT_MDA_ADDR;
break;
case 3:
lpt_port = 0x000;
@@ -78,7 +78,7 @@ lpt1_handler(i82091aa_t *dev)
if ((dev->regs[0x20] & 0x01) && lpt_port)
lpt1_init(lpt_port);
lpt1_irq((dev->regs[0x20] & 0x08) ? 7 : 5);
lpt1_irq((dev->regs[0x20] & 0x08) ? LPT1_IRQ : LPT2_IRQ);
}
@@ -86,16 +86,16 @@ static void
serial_handler(i82091aa_t *dev, int uart)
{
int reg = (0x30 + (uart << 4));
uint16_t uart_port = 0x3f8;
uint16_t uart_port = COM1_ADDR;
serial_remove(dev->uart[uart]);
switch ((dev->regs[reg] >> 1) & 0x07) {
case 0x00:
uart_port = 0x3f8;
uart_port = COM1_ADDR;
break;
case 0x01:
uart_port = 0x2f8;
uart_port = COM2_ADDR;
break;
case 0x02:
uart_port = 0x220;
@@ -107,18 +107,18 @@ serial_handler(i82091aa_t *dev, int uart)
uart_port = 0x238;
break;
case 0x05:
uart_port = 0x2e8;
uart_port = COM4_ADDR;
break;
case 0x06:
uart_port = 0x338;
break;
case 0x07:
uart_port = 0x3e8;
uart_port = COM3_ADDR;
break;
}
if (dev->regs[reg] & 0x01)
serial_setup(dev->uart[uart], uart_port, (dev->regs[reg] & 0x10) ? 4 : 3);
serial_setup(dev->uart[uart], uart_port, (dev->regs[reg] & 0x10) ? COM1_IRQ : COM2_IRQ);
}

View File

@@ -435,14 +435,14 @@ static void
acc3221_reset(acc3221_t *dev)
{
serial_remove(dev->uart[0]);
serial_setup(dev->uart[0], SERIAL1_ADDR, SERIAL1_IRQ);
serial_setup(dev->uart[0], COM1_ADDR, COM1_IRQ);
serial_remove(dev->uart[1]);
serial_setup(dev->uart[1], SERIAL2_ADDR, SERIAL2_IRQ);
serial_setup(dev->uart[1], COM2_ADDR, COM2_IRQ);
lpt1_remove();
lpt1_init(0x378);
lpt1_irq(7);
lpt1_init(LPT1_ADDR);
lpt1_irq(LPT1_IRQ);
fdc_reset(dev->fdc);
}

View File

@@ -81,19 +81,19 @@ f82c710_update_ports(upc_t *dev, int set)
if (dev->regs[0] & 4) {
com_addr = dev->regs[4] * 4;
if (com_addr == SERIAL1_ADDR)
serial_setup(dev->uart[0], com_addr, 4);
else if (com_addr == SERIAL2_ADDR)
serial_setup(dev->uart[1], com_addr, 3);
if (com_addr == COM1_ADDR)
serial_setup(dev->uart[0], com_addr, COM1_IRQ);
else if (com_addr == COM2_ADDR)
serial_setup(dev->uart[1], com_addr, COM2_IRQ);
}
if (dev->regs[0] & 8) {
lpt_addr = dev->regs[6] * 4;
lpt1_init(lpt_addr);
if ((lpt_addr == 0x378) || (lpt_addr == 0x3bc))
lpt1_irq(7);
else if (lpt_addr == 0x278)
lpt1_irq(5);
if ((lpt_addr == LPT1_ADDR) || (lpt_addr == LPT_MDA_ADDR))
lpt1_irq(LPT1_IRQ);
else if (lpt_addr == LPT2_ADDR)
lpt1_irq(LPT2_IRQ);
}
if (dev->regs[12] & 0x80)
@@ -127,26 +127,26 @@ f82c606_update_ports(upc_t *dev, int set)
switch (dev->regs[8] & 0xc0) {
case 0x40: nvr_int = 3; break;
case 0x80: uart1_int = 3; break;
case 0xc0: uart2_int = 3; break;
case 0x80: uart1_int = COM2_IRQ; break;
case 0xc0: uart2_int = COM2_IRQ; break;
}
switch (dev->regs[8] & 0x30) {
case 0x10: nvr_int = 4; break;
case 0x20: uart1_int = 4; break;
case 0x30: uart2_int = 4; break;
case 0x20: uart1_int = COM1_IRQ; break;
case 0x30: uart2_int = COM1_IRQ; break;
}
switch (dev->regs[8] & 0x0c) {
case 0x04: nvr_int = 5; break;
case 0x08: uart1_int = 5; break;
case 0x0c: lpt1_int = 5; break;
case 0x0c: lpt1_int = LPT2_IRQ; break;
}
switch (dev->regs[8] & 0x03) {
case 0x01: nvr_int = 7; break;
case 0x02: uart2_int = 7; break;
case 0x03: lpt1_int = 7; break;
case 0x03: lpt1_int = LPT1_IRQ; break;
}
if (dev->regs[0] & 1) {

View File

@@ -246,10 +246,10 @@ static void
fdc37c669_reset(fdc37c669_t *dev)
{
serial_remove(dev->uart[0]);
serial_setup(dev->uart[0], SERIAL1_ADDR, SERIAL1_IRQ);
serial_setup(dev->uart[0], COM1_ADDR, COM1_IRQ);
serial_remove(dev->uart[1]);
serial_setup(dev->uart[1], SERIAL2_ADDR, SERIAL2_IRQ);
serial_setup(dev->uart[1], COM2_ADDR, COM2_IRQ);
memset(dev->regs, 0, 42);
dev->regs[0x00] = 0x28;
@@ -264,23 +264,23 @@ fdc37c669_reset(fdc37c669_t *dev)
dev->regs[0x21] = (0x1f0 >> 2) & 0xfc;
dev->regs[0x22] = ((0x3f6 >> 2) & 0xfc) | 1;
if (dev->id == 1) {
dev->regs[0x23] = (0x278 >> 2);
dev->regs[0x23] = (LPT2_ADDR >> 2);
lpt2_remove();
lpt2_init(0x278);
lpt2_init(LPT2_ADDR);
dev->regs[0x24] = (SERIAL3_ADDR >> 2) & 0xfe;
dev->regs[0x25] = (SERIAL4_ADDR >> 2) & 0xfe;
dev->regs[0x24] = (COM3_ADDR >> 2) & 0xfe;
dev->regs[0x25] = (COM4_ADDR >> 2) & 0xfe;
} else {
fdc_reset(dev->fdc);
lpt1_remove();
lpt1_init(0x378);
lpt1_init(LPT1_ADDR);
dev->regs[0x23] = (0x378 >> 2);
dev->regs[0x23] = (LPT1_ADDR >> 2);
dev->regs[0x24] = (SERIAL1_ADDR >> 2) & 0xfe;
dev->regs[0x25] = (SERIAL2_ADDR >> 2) & 0xfe;
dev->regs[0x24] = (COM1_ADDR >> 2) & 0xfe;
dev->regs[0x25] = (COM2_ADDR >> 2) & 0xfe;
}
dev->regs[0x26] = (2 << 4) | 3;
dev->regs[0x27] = (6 << 4) | (dev->id ? 5 : 7);

View File

@@ -530,7 +530,7 @@ fdc37c67x_reset(fdc37c67x_t *dev)
dev->ld_regs[4][0x61] = 0xf8;
dev->ld_regs[4][0x70] = 4;
dev->ld_regs[4][0xf0] = 3;
serial_setup(dev->uart[0], 0x3f8, dev->ld_regs[4][0x70]);
serial_setup(dev->uart[0], COM1_ADDR, dev->ld_regs[4][0x70]);
/* Logical device 5: Serial Port 2 */
dev->ld_regs[5][0x30] = 1;
@@ -540,7 +540,7 @@ fdc37c67x_reset(fdc37c67x_t *dev)
dev->ld_regs[5][0x74] = 4;
dev->ld_regs[5][0xf1] = 2;
dev->ld_regs[5][0xf2] = 3;
serial_setup(dev->uart[1], 0x2f8, dev->ld_regs[5][0x70]);
serial_setup(dev->uart[1], COM2_ADDR, dev->ld_regs[5][0x70]);
/* Logical device 7: Keyboard */
dev->ld_regs[7][0x30] = 1;

View File

@@ -56,11 +56,11 @@ set_com34_addr(fdc37c6xx_t *dev)
dev->com4_addr = 0x238;
break;
case 0x20:
dev->com3_addr = 0x3e8;
dev->com4_addr = 0x2e8;
dev->com3_addr = COM3_ADDR;
dev->com4_addr = COM4_ADDR;
break;
case 0x40:
dev->com3_addr = 0x3e8;
dev->com3_addr = COM3_ADDR;
dev->com4_addr = 0x2e0;
break;
case 0x60:
@@ -84,16 +84,16 @@ set_serial_addr(fdc37c6xx_t *dev, int port)
if (dev->regs[2] & (4 << shift)) {
switch ((dev->regs[2] >> shift) & 3) {
case 0:
serial_setup(dev->uart[port], SERIAL1_ADDR, SERIAL1_IRQ);
serial_setup(dev->uart[port], COM1_ADDR, COM1_IRQ);
break;
case 1:
serial_setup(dev->uart[port], SERIAL2_ADDR, SERIAL2_IRQ);
serial_setup(dev->uart[port], COM2_ADDR, COM2_IRQ);
break;
case 2:
serial_setup(dev->uart[port], dev->com3_addr, 4);
serial_setup(dev->uart[port], dev->com3_addr, COM3_IRQ);
break;
case 3:
serial_setup(dev->uart[port], dev->com4_addr, 3);
serial_setup(dev->uart[port], dev->com4_addr, COM4_IRQ);
break;
}
}
@@ -108,15 +108,15 @@ lpt1_handler(fdc37c6xx_t *dev)
lpt1_remove();
switch (dev->regs[1] & 3) {
case 1:
lpt1_init(0x3bc);
lpt1_init(LPT_MDA_ADDR);
lpt1_irq(7);
break;
case 2:
lpt1_init(0x378);
lpt1_init(LPT1_ADDR);
lpt1_irq(7 /*5*/);
break;
case 3:
lpt1_init(0x278);
lpt1_init(LPT2_ADDR);
lpt1_irq(7 /*5*/);
break;
}
@@ -243,13 +243,13 @@ fdc37c6xx_reset(fdc37c6xx_t *dev)
dev->com4_addr = 0x238;
serial_remove(dev->uart[0]);
serial_setup(dev->uart[0], SERIAL1_ADDR, SERIAL1_IRQ);
serial_setup(dev->uart[0], COM1_ADDR, COM1_IRQ);
serial_remove(dev->uart[1]);
serial_setup(dev->uart[1], SERIAL2_ADDR, SERIAL2_IRQ);
serial_setup(dev->uart[1], COM2_ADDR, COM2_IRQ);
lpt1_remove();
lpt1_init(0x378);
lpt1_init(LPT1_ADDR);
fdc_reset(dev->fdc);
fdc_remove(dev->fdc);

View File

@@ -741,7 +741,7 @@ fdc37c93x_reset(fdc37c93x_t *dev)
dev->ld_regs[4][0x61] = 0xf8;
dev->ld_regs[4][0x70] = 4;
dev->ld_regs[4][0xF0] = 3;
serial_setup(dev->uart[0], 0x3f8, dev->ld_regs[4][0x70]);
serial_setup(dev->uart[0], COM1_ADDR, dev->ld_regs[4][0x70]);
/* Logical device 5: Serial Port 2 */
dev->ld_regs[5][0x30] = 1;
@@ -751,7 +751,7 @@ fdc37c93x_reset(fdc37c93x_t *dev)
dev->ld_regs[5][0x74] = 4;
dev->ld_regs[5][0xF1] = 2;
dev->ld_regs[5][0xF2] = 3;
serial_setup(dev->uart[1], 0x2f8, dev->ld_regs[5][0x70]);
serial_setup(dev->uart[1], COM2_ADDR, dev->ld_regs[5][0x70]);
/* Logical device 6: RTC */
dev->ld_regs[6][0x30] = 1;

View File

@@ -90,27 +90,27 @@ static void
lpt1_handler(pc87306_t *dev)
{
int temp;
uint16_t lptba, lpt_port = 0x378;
uint8_t lpt_irq = 5;
uint16_t lptba, lpt_port = LPT1_ADDR;
uint8_t lpt_irq = LPT2_IRQ;
temp = dev->regs[0x01] & 3;
lptba = ((uint16_t) dev->regs[0x19]) << 2;
switch (temp) {
case 0:
lpt_port = 0x378;
lpt_irq = (dev->regs[0x02] & 0x08) ? 7 : 5;
lpt_port = LPT1_ADDR;
lpt_irq = (dev->regs[0x02] & 0x08) ? LPT1_IRQ : LPT2_IRQ;
break;
case 1:
if (dev->regs[0x1b] & 0x40)
lpt_port = lptba;
else
lpt_port = 0x3bc;
lpt_irq = 7;
lpt_port = LPT_MDA_ADDR;
lpt_irq = LPT_MDA_IRQ;
break;
case 2:
lpt_port = 0x278;
lpt_irq = 5;
lpt_port = LPT2_ADDR;
lpt_irq = LPT2_IRQ;
break;
case 3:
lpt_port = 0x000;
@@ -149,21 +149,21 @@ serial_handler(pc87306_t *dev, int uart)
switch (temp) {
case 0:
serial_setup(dev->uart[uart], SERIAL1_ADDR, irq);
serial_setup(dev->uart[uart], COM1_ADDR, irq);
break;
case 1:
serial_setup(dev->uart[uart], SERIAL2_ADDR, irq);
serial_setup(dev->uart[uart], COM2_ADDR, irq);
break;
case 2:
switch ((dev->regs[1] >> 6) & 3) {
case 0:
serial_setup(dev->uart[uart], 0x3e8, irq);
serial_setup(dev->uart[uart], COM3_ADDR, irq);
break;
case 1:
serial_setup(dev->uart[uart], 0x338, irq);
break;
case 2:
serial_setup(dev->uart[uart], 0x2e8, irq);
serial_setup(dev->uart[uart], COM4_ADDR, irq);
break;
case 3:
serial_setup(dev->uart[uart], 0x220, irq);
@@ -173,7 +173,7 @@ serial_handler(pc87306_t *dev, int uart)
case 3:
switch ((dev->regs[1] >> 6) & 3) {
case 0:
serial_setup(dev->uart[uart], 0x2e8, irq);
serial_setup(dev->uart[uart], COM4_ADDR, irq);
break;
case 1:
serial_setup(dev->uart[uart], 0x238, irq);

View File

@@ -73,8 +73,8 @@ static void
lpt1_handler(pc87310_t *dev)
{
int temp;
uint16_t lpt_port = 0x378;
uint8_t lpt_irq = 7;
uint16_t lpt_port = LPT1_ADDR;
uint8_t lpt_irq = LPT1_IRQ;
/* bits 0-1:
* 00 378h
@@ -86,13 +86,13 @@ lpt1_handler(pc87310_t *dev)
switch (temp) {
case 0:
lpt_port = 0x378;
lpt_port = LPT1_ADDR;
break;
case 1:
lpt_port = 0x3bc;
lpt_port = LPT_MDA_ADDR;
break;
case 2:
lpt_port = 0x278;
lpt_port = LPT2_ADDR;
break;
case 3:
lpt_port = 0x000;
@@ -121,10 +121,10 @@ serial_handler(pc87310_t *dev, int uart)
if (!temp){
//configure serial port as COM2
if (((dev->reg >> 4) & 1) ^ uart)
serial_setup(dev->uart[uart], 0x2f8, 3);
serial_setup(dev->uart[uart], COM2_ADDR, COM2_IRQ);
// configure serial port as COM1
else
serial_setup(dev->uart[uart], 0x3f8, 4);
serial_setup(dev->uart[uart], COM1_ADDR, COM1_IRQ);
}
}

View File

@@ -128,15 +128,15 @@ uint16_t com3(pc87311_t *dev)
switch (COM_BA)
{
case 0:
return 0x03e8;
return COM3_ADDR;
case 1:
return 0x0338;
case 2:
return 0x02e8;
return COM4_ADDR;
case 3:
return 0x0220;
default:
return 0x03e8;
return COM3_ADDR;
}
}
@@ -145,7 +145,7 @@ uint16_t com4(pc87311_t *dev)
switch (COM_BA)
{
case 0:
return 0x02e8;
return COM4_ADDR;
case 1:
return 0x0238;
case 2:
@@ -153,7 +153,7 @@ uint16_t com4(pc87311_t *dev)
case 3:
return 0x0228;
default:
return 0x02e8;
return COM4_ADDR;
}
}
@@ -164,20 +164,20 @@ void pc87311_uart_handler(uint8_t num, pc87311_t *dev)
switch (!(num & 1) ? UART1_BA : UART2_BA)
{
case 0:
dev->base = 0x03f8;
dev->irq = 4;
dev->base = COM1_ADDR;
dev->irq = COM1_IRQ;
break;
case 1:
dev->base = 0x02f8;
dev->irq = 3;
dev->base = COM2_ADDR;
dev->irq = COM2_IRQ;
break;
case 2:
dev->base = com3(dev);
dev->irq = 4;
dev->irq = COM3_IRQ;
break;
case 3:
dev->base = com4(dev);
dev->irq = 3;
dev->irq = COM4_IRQ;
break;
}
serial_setup(dev->uart[num & 1], dev->base, dev->irq);
@@ -190,16 +190,16 @@ void pc87311_lpt_handler(pc87311_t *dev)
switch (LPT_BA)
{
case 0:
dev->base = 0x0378;
dev->irq = (POWER_TEST & 0x08) ? 7 : 5;
dev->base = LPT1_ADDR;
dev->irq = (POWER_TEST & 0x08) ? LPT1_IRQ : LPT2_IRQ;
break;
case 1:
dev->base = 0x03bc;
dev->irq = 7;
dev->base = LPT_MDA_ADDR;
dev->irq = LPT_MDA_IRQ;
break;
case 2:
dev->base = 0x0278;
dev->irq = 5;
dev->base = LPT2_ADDR;
dev->irq = LPT2_IRQ;
break;
}
lpt1_init(dev->base);

View File

@@ -48,23 +48,23 @@ static void
lpt1_handler(pc87332_t *dev)
{
int temp;
uint16_t lpt_port = 0x378;
uint8_t lpt_irq = 5;
uint16_t lpt_port = LPT1_ADDR;
uint8_t lpt_irq = LPT2_IRQ;
temp = dev->regs[0x01] & 3;
switch (temp) {
case 0:
lpt_port = 0x378;
lpt_irq = (dev->regs[0x02] & 0x08) ? 7 : 5;
lpt_port = LPT1_ADDR;
lpt_irq = (dev->regs[0x02] & 0x08) ? LPT1_IRQ : LPT2_IRQ;
break;
case 1:
lpt_port = 0x3bc;
lpt_irq = 7;
lpt_port = LPT_MDA_ADDR;
lpt_irq = LPT_MDA_IRQ;
break;
case 2:
lpt_port = 0x278;
lpt_irq = 5;
lpt_port = LPT2_ADDR;
lpt_irq = LPT2_IRQ;
break;
case 3:
lpt_port = 0x000;
@@ -88,40 +88,40 @@ serial_handler(pc87332_t *dev, int uart)
switch (temp) {
case 0:
serial_setup(dev->uart[uart], SERIAL1_ADDR, 4);
serial_setup(dev->uart[uart], COM1_ADDR, 4);
break;
case 1:
serial_setup(dev->uart[uart], SERIAL2_ADDR, 3);
serial_setup(dev->uart[uart], COM2_ADDR, 3);
break;
case 2:
switch ((dev->regs[1] >> 6) & 3) {
case 0:
serial_setup(dev->uart[uart], 0x3e8, 4);
serial_setup(dev->uart[uart], COM3_ADDR, COM3_IRQ);
break;
case 1:
serial_setup(dev->uart[uart], 0x338, 4);
serial_setup(dev->uart[uart], 0x338, COM3_IRQ);
break;
case 2:
serial_setup(dev->uart[uart], 0x2e8, 4);
serial_setup(dev->uart[uart], COM4_ADDR, COM3_IRQ);
break;
case 3:
serial_setup(dev->uart[uart], 0x220, 4);
serial_setup(dev->uart[uart], 0x220, COM3_IRQ);
break;
}
break;
case 3:
switch ((dev->regs[1] >> 6) & 3) {
case 0:
serial_setup(dev->uart[uart], 0x2e8, 3);
serial_setup(dev->uart[uart], COM4_ADDR, COM4_IRQ);
break;
case 1:
serial_setup(dev->uart[uart], 0x238, 3);
serial_setup(dev->uart[uart], 0x238, COM4_IRQ);
break;
case 2:
serial_setup(dev->uart[uart], 0x2e0, 3);
serial_setup(dev->uart[uart], 0x2e0, COM4_IRQ);
break;
case 3:
serial_setup(dev->uart[uart], 0x228, 3);
serial_setup(dev->uart[uart], 0x228, COM4_IRQ);
break;
}
break;

View File

@@ -108,15 +108,15 @@ prime3b_write(uint16_t addr, uint8_t val, void *priv)
switch ((dev->regs[0xa4] >> 6) & 3)
{
case 0:
dev->com3_addr = 0x3e8;
dev->com4_addr = 0x2e8;
dev->com3_addr = COM3_ADDR;
dev->com4_addr = COM4_ADDR;
break;
case 1:
dev->com3_addr = 0x338;
dev->com4_addr = 0x238;
break;
case 2:
dev->com3_addr = 0x2e8;
dev->com3_addr = COM4_ADDR;
dev->com4_addr = 0x2e0;
break;
case 3:
@@ -154,7 +154,7 @@ void prime3b_uart_handler(uint8_t num, prime3b_t *dev)
if ((ASR >> (3 + 2 * num)) & 1)
uart_base = !((ASR >> (2 + 2 * num)) & 1) ? dev->com3_addr : dev->com4_addr;
else
uart_base = !((ASR >> (2 + 2 * num)) & 1) ? 0x3f8 : 0x2f8;
uart_base = !((ASR >> (2 + 2 * num)) & 1) ? COM1_ADDR : COM2_ADDR;
serial_remove(dev->uart[num]);
serial_setup(dev->uart[num], uart_base, 4 - num);
@@ -163,10 +163,10 @@ void prime3b_uart_handler(uint8_t num, prime3b_t *dev)
void prime3b_lpt_handler(prime3b_t *dev)
{
uint16_t lpt_base = (ASR & 2) ? 0x3bc : (!(ASR & 1) ? 0x378 : 0x278);
uint16_t lpt_base = (ASR & 2) ? LPT_MDA_ADDR : (!(ASR & 1) ? LPT1_ADDR : LPT2_ADDR);
lpt1_remove();
lpt1_init(lpt_base);
lpt1_irq(7);
lpt1_irq(LPT1_IRQ);
prime3b_log("Prime3B-LPT: Enabled with base %03x\n", lpt_base);
}
@@ -174,9 +174,10 @@ void prime3b_ide_handler(prime3b_t *dev)
{
ide_pri_disable();
uint16_t ide_base = !(ASR & 0x80) ? 0x1f0 : 0x170;
uint16_t ide_side = ide_base + 0x206;
ide_set_base(0, ide_base);
ide_set_side(0, ide_base + 0x206);
prime3b_log("Prime3B-IDE: Enabled with base %03x and side %03x\n", ide_base, ide_base + 0x206);
ide_set_side(0, ide_side);
prime3b_log("Prime3B-IDE: Enabled with base %03x and side %03x\n", ide_base, ide_side);
}
void prime3b_enable(prime3b_t *dev)
@@ -256,8 +257,8 @@ prime3b_init(const device_t *info)
if (HAS_IDE_FUNCTIONALITY)
device_add(&ide_isa_device);
dev->com3_addr = 0x3e8;
dev->com4_addr = 0x2e8;
dev->com3_addr = COM3_ADDR;
dev->com4_addr = COM4_ADDR;
fdc_reset(dev->fdc_controller);
prime3b_enable(dev);

View File

@@ -76,16 +76,16 @@ static const isapnp_device_config_t um8669f_pnp_defaults[] = {
.dma = { { .dma = 2 }, }
}, {
.activate = 1,
.io = { { .base = 0x03f8 }, },
.irq = { { .irq = 4 }, }
.io = { { .base = COM1_ADDR }, },
.irq = { { .irq = COM1_IRQ }, }
}, {
.activate = 1,
.io = { { .base = 0x02f8 }, },
.irq = { { .irq = 3 }, }
.io = { { .base = COM2_ADDR }, },
.irq = { { .irq = COM2_IRQ }, }
}, {
.activate = 1,
.io = { { .base = 0x0378 }, },
.irq = { { .irq = 7 }, }
.io = { { .base = LPT1_ADDR }, },
.irq = { { .irq = LPT1_IRQ }, }
}, {
.activate = 0
}, {

View File

@@ -261,8 +261,8 @@ vt82c686_reset(vt82c686_t *dev)
fdc_reset(dev->fdc);
serial_setup(dev->uart[0], SERIAL1_ADDR, SERIAL1_IRQ);
serial_setup(dev->uart[1], SERIAL2_ADDR, SERIAL2_IRQ);
serial_setup(dev->uart[0], COM1_ADDR, COM1_IRQ);
serial_setup(dev->uart[1], COM2_ADDR, COM2_IRQ);
vt82c686_lpt_handler(dev);
vt82c686_serial_handler(dev, 0);

View File

@@ -125,27 +125,27 @@ w83787f_serial_handler(w83787f_t *dev, int uart)
int urs0 = !!(dev->regs[1] & (1 << uart));
int urs1 = !!(dev->regs[1] & (4 << uart));
int urs2 = !!(dev->regs[3] & (8 >> uart));
int urs, irq = 4;
uint16_t addr = 0x3f8, enable = 1;
int urs, irq = COM1_IRQ;
uint16_t addr = COM1_ADDR, enable = 1;
urs = (urs1 << 1) | urs0;
if (urs2) {
addr = uart ? 0x3f8 : 0x2f8;
irq = uart ? 4 : 3;
addr = uart ? COM1_ADDR : COM2_ADDR;
irq = uart ? COM1_IRQ : COM2_IRQ;
} else {
switch (urs) {
case 0:
addr = uart ? 0x3e8 : 0x2e8;
irq = uart ? 4 : 3;
addr = uart ? COM3_ADDR : COM4_ADDR;
irq = uart ? COM3_IRQ : COM4_IRQ;
break;
case 1:
addr = uart ? 0x2e8 : 0x3e8;
irq = uart ? 3 : 4;
addr = uart ? COM4_ADDR : COM3_ADDR;
irq = uart ? COM4_IRQ : COM3_IRQ;
break;
case 2:
addr = uart ? 0x2f8 : 0x3f8;
irq = uart ? 3 : 4;
addr = uart ? COM2_ADDR : COM1_ADDR;
irq = uart ? COM2_IRQ : COM1_IRQ;
break;
case 3:
default:
@@ -167,21 +167,21 @@ static void
w83787f_lpt_handler(w83787f_t *dev)
{
int ptras = (dev->regs[1] >> 4) & 0x03;
int irq = 7;
uint16_t addr = 0x378, enable = 1;
int irq = LPT1_IRQ;
uint16_t addr = LPT1_ADDR, enable = 1;
switch (ptras) {
case 0x00:
addr = 0x3bc;
irq = 7;
addr = LPT_MDA_ADDR;
irq = LPT_MDA_IRQ;
break;
case 0x01:
addr = 0x278;
irq = 5;
addr = LPT2_ADDR;
irq = LPT2_IRQ;
break;
case 0x02:
addr = 0x378;
irq = 7;
addr = LPT1_ADDR;
irq = LPT1_IRQ;
break;
case 0x03:
default:
@@ -361,8 +361,8 @@ static void
w83787f_reset(w83787f_t *dev)
{
lpt1_remove();
lpt1_init(0x378);
lpt1_irq(7);
lpt1_init(LPT1_ADDR);
lpt1_irq(LPT1_IRQ);
memset(dev->regs, 0, 0x2A);
@@ -399,8 +399,8 @@ w83787f_reset(w83787f_t *dev)
dev->regs[0x0c] = 0x2C;
dev->regs[0x0d] = 0xA3;
serial_setup(dev->uart[0], SERIAL1_ADDR, SERIAL1_IRQ);
serial_setup(dev->uart[1], SERIAL2_ADDR, SERIAL2_IRQ);
serial_setup(dev->uart[0], COM1_ADDR, COM1_IRQ);
serial_setup(dev->uart[1], COM2_ADDR, COM2_IRQ);
dev->key = 0x89;

View File

@@ -127,7 +127,7 @@ make_port(w83877f_t *dev, uint8_t reg)
p &= 0x3F8;
else
p &= 0x3FC;
if ((p < 0x100) || (p > 0x3FF)) p = 0x378;
if ((p < 0x100) || (p > 0x3FF)) p = LPT1_ADDR;
/* In ECP mode, A10 is active. */
if (l & 0x80)
p |= 0x400;
@@ -135,12 +135,12 @@ make_port(w83877f_t *dev, uint8_t reg)
case 0x24:
p = ((uint16_t) (dev->regs[reg] & 0xfe)) << 2;
p &= 0xFF8;
if ((p < 0x100) || (p > 0x3F8)) p = 0x3F8;
if ((p < 0x100) || (p > 0x3F8)) p = COM1_ADDR;
break;
case 0x25:
p = ((uint16_t) (dev->regs[reg] & 0xfe)) << 2;
p &= 0xFF8;
if ((p < 0x100) || (p > 0x3F8)) p = 0x2F8;
if ((p < 0x100) || (p > 0x3F8)) p = COM2_ADDR;
break;
}
@@ -406,9 +406,9 @@ w83877f_reset(w83877f_t *dev)
dev->regs[0x20] = (0x3f0 >> 2) & 0xfc;
dev->regs[0x21] = (0x1f0 >> 2) & 0xfc;
dev->regs[0x22] = ((0x3f6 >> 2) & 0xfc) | 1;
dev->regs[0x23] = (0x378 >> 2);
dev->regs[0x24] = (0x3f8 >> 2) & 0xfe;
dev->regs[0x25] = (0x2f8 >> 2) & 0xfe;
dev->regs[0x23] = (LPT1_ADDR >> 2);
dev->regs[0x24] = (COM1_ADDR >> 2) & 0xfe;
dev->regs[0x25] = (COM2_ADDR >> 2) & 0xfe;
dev->regs[0x26] = (2 << 4) | 4;
dev->regs[0x27] = (2 << 4) | 5;
dev->regs[0x28] = (4 << 4) | 3;

View File

@@ -507,13 +507,13 @@ w83977f_reset(w83977f_t *dev)
}
if (dev->id == 1) {
serial_setup(dev->uart[0], SERIAL3_ADDR, SERIAL3_IRQ);
serial_setup(dev->uart[1], SERIAL4_ADDR, SERIAL4_IRQ);
serial_setup(dev->uart[0], COM3_ADDR, COM3_IRQ);
serial_setup(dev->uart[1], COM4_ADDR, COM4_IRQ);
} else {
fdc_reset(dev->fdc);
serial_setup(dev->uart[0], SERIAL1_ADDR, SERIAL1_IRQ);
serial_setup(dev->uart[1], SERIAL2_ADDR, SERIAL2_IRQ);
serial_setup(dev->uart[0], COM1_ADDR, COM1_IRQ);
serial_setup(dev->uart[1], COM2_ADDR, COM2_IRQ);
w83977f_fdc_handler(dev);
}