summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>2005-10-30 17:05:44 +0000
committerbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>2005-10-30 17:05:44 +0000
commitf69a86955e028f963ae31257bd6cb25be705a6cd (patch)
tree70e9691170b1e432296638ba1b05e8f88fa56a97
parent7b936c0c42933b8b6bc308e71a6e20904f512eb4 (diff)
downloadqemu-f69a86955e028f963ae31257bd6cb25be705a6cd.tar.gz
slavio_serial fixes (Blue Swirl)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1575 c046a42c-6fe2-441c-8c8c-71466251a162
-rw-r--r--hw/slavio_serial.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/hw/slavio_serial.c b/hw/slavio_serial.c
index 4b02d29f6b..de45cc5de1 100644
--- a/hw/slavio_serial.c
+++ b/hw/slavio_serial.c
@@ -195,7 +195,7 @@ static void slavio_serial_mem_writeb(void *opaque, target_phys_addr_t addr, uint
val &= 0x38;
switch (val) {
case 8:
- s->reg |= 0x8;
+ newreg |= 0x8;
break;
case 0x20:
s->rxint = 0;
@@ -245,7 +245,8 @@ static void slavio_serial_mem_writeb(void *opaque, target_phys_addr_t addr, uint
handle_kbd_command(s, val);
}
s->txint = 1;
- s->rregs[0] |= 4;
+ s->rregs[0] |= 4; // Tx buffer empty
+ s->rregs[1] |= 1; // All sent
// Interrupts reported only on channel A
if (s->chn == 0)
s->rregs[3] |= 0x10;
@@ -278,12 +279,12 @@ static uint32_t slavio_serial_mem_readb(void *opaque, target_phys_addr_t addr)
s->reg = 0;
return ret;
case 1:
- SER_DPRINTF("Read channel %c, ch %d\n", channel? 'b' : 'a', s->rx);
s->rregs[0] &= ~1;
if (s->type == kbd)
ret = get_queue(s);
else
ret = s->rx;
+ SER_DPRINTF("Read channel %c, ch %d\n", channel? 'b' : 'a', ret);
return ret;
default:
break;
@@ -454,7 +455,6 @@ static void handle_kbd_command(ChannelState *s, int val)
switch (val) {
case 1: // Reset, return type code
put_queue(s, 0xff);
- put_queue(s, 0xff);
put_queue(s, 5); // Type 5
break;
case 7: // Query layout