More hardcoding fixes
This commit is contained in:
11
src/config.c
11
src/config.c
@@ -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);
|
||||
|
@@ -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);
|
||||
};
|
||||
|
||||
|
@@ -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 */
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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));
|
||||
}
|
||||
|
@@ -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)
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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) {
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
|
@@ -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);
|
||||
|
@@ -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
|
||||
}, {
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
|
||||
|
@@ -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;
|
||||
|
@@ -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);
|
||||
}
|
||||
|
Reference in New Issue
Block a user