Fixed issue when serial ports mapped at unusual addresses - fixes joystick on 430VX model.
This commit is contained in:
parent
25620bdc63
commit
47f9a66859
2 changed files with 7 additions and 8 deletions
14
src/serial.c
14
src/serial.c
|
|
@ -254,6 +254,7 @@ void serial1_init(uint16_t addr, int irq)
|
||||||
memset(&serial1, 0, sizeof(serial1));
|
memset(&serial1, 0, sizeof(serial1));
|
||||||
io_sethandler(addr, 0x0008, serial_read, NULL, NULL, serial_write, NULL, NULL, &serial1);
|
io_sethandler(addr, 0x0008, serial_read, NULL, NULL, serial_write, NULL, NULL, &serial1);
|
||||||
serial1.irq = irq;
|
serial1.irq = irq;
|
||||||
|
serial1.addr = addr;
|
||||||
serial1.rcr_callback = NULL;
|
serial1.rcr_callback = NULL;
|
||||||
timer_add(serial_recieve_callback, &serial1.recieve_delay, &serial1.recieve_delay, &serial1);
|
timer_add(serial_recieve_callback, &serial1.recieve_delay, &serial1.recieve_delay, &serial1);
|
||||||
}
|
}
|
||||||
|
|
@ -262,13 +263,11 @@ void serial1_set(uint16_t addr, int irq)
|
||||||
serial1_remove();
|
serial1_remove();
|
||||||
io_sethandler(addr, 0x0008, serial_read, NULL, NULL, serial_write, NULL, NULL, &serial1);
|
io_sethandler(addr, 0x0008, serial_read, NULL, NULL, serial_write, NULL, NULL, &serial1);
|
||||||
serial1.irq = irq;
|
serial1.irq = irq;
|
||||||
|
serial1.addr = addr;
|
||||||
}
|
}
|
||||||
void serial1_remove()
|
void serial1_remove()
|
||||||
{
|
{
|
||||||
io_removehandler(0x2e8, 0x0008, serial_read, NULL, NULL, serial_write, NULL, NULL, &serial1);
|
io_removehandler(serial1.addr, 0x0008, serial_read, NULL, NULL, serial_write, NULL, NULL, &serial1);
|
||||||
io_removehandler(0x2f8, 0x0008, serial_read, NULL, NULL, serial_write, NULL, NULL, &serial1);
|
|
||||||
io_removehandler(0x3e8, 0x0008, serial_read, NULL, NULL, serial_write, NULL, NULL, &serial1);
|
|
||||||
io_removehandler(0x3f8, 0x0008, serial_read, NULL, NULL, serial_write, NULL, NULL, &serial1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void serial2_init(uint16_t addr, int irq)
|
void serial2_init(uint16_t addr, int irq)
|
||||||
|
|
@ -276,6 +275,7 @@ void serial2_init(uint16_t addr, int irq)
|
||||||
memset(&serial2, 0, sizeof(serial2));
|
memset(&serial2, 0, sizeof(serial2));
|
||||||
io_sethandler(addr, 0x0008, serial_read, NULL, NULL, serial_write, NULL, NULL, &serial2);
|
io_sethandler(addr, 0x0008, serial_read, NULL, NULL, serial_write, NULL, NULL, &serial2);
|
||||||
serial2.irq = irq;
|
serial2.irq = irq;
|
||||||
|
serial2.addr = addr;
|
||||||
serial2.rcr_callback = NULL;
|
serial2.rcr_callback = NULL;
|
||||||
timer_add(serial_recieve_callback, &serial2.recieve_delay, &serial2.recieve_delay, &serial2);
|
timer_add(serial_recieve_callback, &serial2.recieve_delay, &serial2.recieve_delay, &serial2);
|
||||||
}
|
}
|
||||||
|
|
@ -284,11 +284,9 @@ void serial2_set(uint16_t addr, int irq)
|
||||||
serial2_remove();
|
serial2_remove();
|
||||||
io_sethandler(addr, 0x0008, serial_read, NULL, NULL, serial_write, NULL, NULL, &serial2);
|
io_sethandler(addr, 0x0008, serial_read, NULL, NULL, serial_write, NULL, NULL, &serial2);
|
||||||
serial2.irq = irq;
|
serial2.irq = irq;
|
||||||
|
serial2.addr = addr;
|
||||||
}
|
}
|
||||||
void serial2_remove()
|
void serial2_remove()
|
||||||
{
|
{
|
||||||
io_removehandler(0x2e8, 0x0008, serial_read, NULL, NULL, serial_write, NULL, NULL, &serial2);
|
io_removehandler(serial2.addr, 0x0008, serial_read, NULL, NULL, serial_write, NULL, NULL, &serial2);
|
||||||
io_removehandler(0x2f8, 0x0008, serial_read, NULL, NULL, serial_write, NULL, NULL, &serial2);
|
|
||||||
io_removehandler(0x3e8, 0x0008, serial_read, NULL, NULL, serial_write, NULL, NULL, &serial2);
|
|
||||||
io_removehandler(0x3f8, 0x0008, serial_read, NULL, NULL, serial_write, NULL, NULL, &serial2);
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ typedef struct
|
||||||
uint8_t fcr;
|
uint8_t fcr;
|
||||||
|
|
||||||
int irq;
|
int irq;
|
||||||
|
uint16_t addr;
|
||||||
|
|
||||||
void (*rcr_callback)(struct SERIAL *serial, void *p);
|
void (*rcr_callback)(struct SERIAL *serial, void *p);
|
||||||
void *rcr_callback_p;
|
void *rcr_callback_p;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue