PCem
changeset 97:6ddadbcbcfe0
Slowed down serial transfer - fixes mouse on OS/2.
| author | TomW |
|---|---|
| date | Wed Apr 09 20:32:54 2014 +0100 |
| parents | 30de9361da9a |
| children | 4c95696c27d6 |
| files | src/serial.c src/serial.h |
| diffstat | 2 files changed, 21 insertions(+), 5 deletions(-) [+] |
line diff
1.1 --- a/src/serial.c Wed Apr 09 19:55:14 2014 +0100 1.2 +++ b/src/serial.c Wed Apr 09 20:32:54 2014 +0100 1.3 @@ -182,11 +182,7 @@ 1.4 serial_update_ints(serial); 1.5 temp = serial_read_fifo(serial); 1.6 if (serial->fifo_read != serial->fifo_write) 1.7 - { 1.8 - serial->lsr |= 1; 1.9 - serial->int_status |= SERIAL_INT_RECEIVE; 1.10 - serial_update_ints(serial); 1.11 - } 1.12 + serial->recieve_delay = 1000 * TIMER_USEC; 1.13 break; 1.14 case 1: 1.15 if (serial->lcr & 0x80 && !AMSTRADIO) 1.16 @@ -230,12 +226,28 @@ 1.17 return temp; 1.18 } 1.19 1.20 +void serial_recieve_callback(void *p) 1.21 +{ 1.22 + SERIAL *serial = (SERIAL *)p; 1.23 + 1.24 + serial->recieve_delay = 0; 1.25 + 1.26 + if (serial->fifo_read != serial->fifo_write) 1.27 + { 1.28 + serial->lsr |= 1; 1.29 + serial->int_status |= SERIAL_INT_RECEIVE; 1.30 + serial_update_ints(serial); 1.31 + } 1.32 +} 1.33 + 1.34 /*Tandy might need COM1 at 2f8*/ 1.35 void serial1_init(uint16_t addr, int irq) 1.36 { 1.37 + memset(&serial1, 0, sizeof(serial1)); 1.38 io_sethandler(addr, 0x0008, serial_read, NULL, NULL, serial_write, NULL, NULL, &serial1); 1.39 serial1.irq = irq; 1.40 serial1.rcr_callback = NULL; 1.41 + timer_add(serial_recieve_callback, &serial1.recieve_delay, &serial1.recieve_delay, &serial1); 1.42 } 1.43 void serial1_remove() 1.44 { 1.45 @@ -247,9 +259,11 @@ 1.46 1.47 void serial2_init(uint16_t addr, int irq) 1.48 { 1.49 + memset(&serial2, 0, sizeof(serial2)); 1.50 io_sethandler(addr, 0x0008, serial_read, NULL, NULL, serial_write, NULL, NULL, &serial2); 1.51 serial2.irq = irq; 1.52 serial2.rcr_callback = NULL; 1.53 + timer_add(serial_recieve_callback, &serial2.recieve_delay, &serial2.recieve_delay, &serial2); 1.54 } 1.55 void serial2_remove() 1.56 {
2.1 --- a/src/serial.h Wed Apr 09 19:55:14 2014 +0100 2.2 +++ b/src/serial.h Wed Apr 09 20:32:54 2014 +0100 2.3 @@ -18,6 +18,8 @@ 2.4 void (*rcr_callback)(void *p); 2.5 uint8_t fifo[256]; 2.6 int fifo_read, fifo_write; 2.7 + 2.8 + int recieve_delay; 2.9 } SERIAL; 2.10 2.11 extern SERIAL serial1, serial2;
