Support serial UART without FIFO. Patch from EluanCM.

This commit is contained in:
SarahW 2020-03-12 18:12:47 +00:00
commit dcf354688d
6 changed files with 24 additions and 20 deletions

View file

@ -111,7 +111,8 @@ void serial_write(uint16_t addr, uint8_t val, void *p)
serial_update_ints(serial);
break;
case 2:
serial->fcr = val;
if (serial->has_fifo)
serial->fcr = val;
break;
case 3:
serial->lcr = val;
@ -247,7 +248,7 @@ void serial_receive_callback(void *p)
}
/*Tandy might need COM1 at 2f8*/
void serial1_init(uint16_t addr, int irq)
void serial1_init(uint16_t addr, int irq, int has_fifo)
{
memset(&serial1, 0, sizeof(serial1));
io_sethandler(addr, 0x0008, serial_read, NULL, NULL, serial_write, NULL, NULL, &serial1);
@ -255,6 +256,7 @@ void serial1_init(uint16_t addr, int irq)
serial1.addr = addr;
serial1.rcr_callback = NULL;
timer_add(&serial1.receive_timer, serial_receive_callback, &serial1, 0);
serial1.has_fifo = has_fifo;
}
void serial1_set(uint16_t addr, int irq)
{
@ -268,7 +270,7 @@ void serial1_remove()
io_removehandler(serial1.addr, 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, int has_fifo)
{
memset(&serial2, 0, sizeof(serial2));
io_sethandler(addr, 0x0008, serial_read, NULL, NULL, serial_write, NULL, NULL, &serial2);
@ -276,6 +278,7 @@ void serial2_init(uint16_t addr, int irq)
serial2.addr = addr;
serial2.rcr_callback = NULL;
timer_add(&serial2.receive_timer, serial_receive_callback, &serial2, 0);
serial2.has_fifo = has_fifo;
}
void serial2_set(uint16_t addr, int irq)
{