Commit f69a86955e028f963ae31257bd6cb25be705a6cd
1 parent
7b936c0c
slavio_serial fixes (Blue Swirl)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1575 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
4 additions
and
4 deletions
hw/slavio_serial.c
... | ... | @@ -195,7 +195,7 @@ static void slavio_serial_mem_writeb(void *opaque, target_phys_addr_t addr, uint |
195 | 195 | val &= 0x38; |
196 | 196 | switch (val) { |
197 | 197 | case 8: |
198 | - s->reg |= 0x8; | |
198 | + newreg |= 0x8; | |
199 | 199 | break; |
200 | 200 | case 0x20: |
201 | 201 | s->rxint = 0; |
... | ... | @@ -245,7 +245,8 @@ static void slavio_serial_mem_writeb(void *opaque, target_phys_addr_t addr, uint |
245 | 245 | handle_kbd_command(s, val); |
246 | 246 | } |
247 | 247 | s->txint = 1; |
248 | - s->rregs[0] |= 4; | |
248 | + s->rregs[0] |= 4; // Tx buffer empty | |
249 | + s->rregs[1] |= 1; // All sent | |
249 | 250 | // Interrupts reported only on channel A |
250 | 251 | if (s->chn == 0) |
251 | 252 | s->rregs[3] |= 0x10; |
... | ... | @@ -278,12 +279,12 @@ static uint32_t slavio_serial_mem_readb(void *opaque, target_phys_addr_t addr) |
278 | 279 | s->reg = 0; |
279 | 280 | return ret; |
280 | 281 | case 1: |
281 | - SER_DPRINTF("Read channel %c, ch %d\n", channel? 'b' : 'a', s->rx); | |
282 | 282 | s->rregs[0] &= ~1; |
283 | 283 | if (s->type == kbd) |
284 | 284 | ret = get_queue(s); |
285 | 285 | else |
286 | 286 | ret = s->rx; |
287 | + SER_DPRINTF("Read channel %c, ch %d\n", channel? 'b' : 'a', ret); | |
287 | 288 | return ret; |
288 | 289 | default: |
289 | 290 | break; |
... | ... | @@ -454,7 +455,6 @@ static void handle_kbd_command(ChannelState *s, int val) |
454 | 455 | switch (val) { |
455 | 456 | case 1: // Reset, return type code |
456 | 457 | put_queue(s, 0xff); |
457 | - put_queue(s, 0xff); | |
458 | 458 | put_queue(s, 5); // Type 5 |
459 | 459 | break; |
460 | 460 | case 7: // Query layout | ... | ... |