slavio_serial fixes (Blue Swirl)

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1575 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
bellard 2005-10-30 17:05:44 +00:00
parent 7b936c0c42
commit f69a86955e
1 changed files with 4 additions and 4 deletions

View File

@ -195,7 +195,7 @@ static void slavio_serial_mem_writeb(void *opaque, target_phys_addr_t addr, uint
val &= 0x38; val &= 0x38;
switch (val) { switch (val) {
case 8: case 8:
s->reg |= 0x8; newreg |= 0x8;
break; break;
case 0x20: case 0x20:
s->rxint = 0; 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); handle_kbd_command(s, val);
} }
s->txint = 1; 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 // Interrupts reported only on channel A
if (s->chn == 0) if (s->chn == 0)
s->rregs[3] |= 0x10; 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; s->reg = 0;
return ret; return ret;
case 1: case 1:
SER_DPRINTF("Read channel %c, ch %d\n", channel? 'b' : 'a', s->rx);
s->rregs[0] &= ~1; s->rregs[0] &= ~1;
if (s->type == kbd) if (s->type == kbd)
ret = get_queue(s); ret = get_queue(s);
else else
ret = s->rx; ret = s->rx;
SER_DPRINTF("Read channel %c, ch %d\n", channel? 'b' : 'a', ret);
return ret; return ret;
default: default:
break; break;
@ -453,7 +454,6 @@ static void handle_kbd_command(ChannelState *s, int val)
KBD_DPRINTF("Command %d\n", val); KBD_DPRINTF("Command %d\n", val);
switch (val) { switch (val) {
case 1: // Reset, return type code case 1: // Reset, return type code
put_queue(s, 0xff);
put_queue(s, 0xff); put_queue(s, 0xff);
put_queue(s, 5); // Type 5 put_queue(s, 5); // Type 5
break; break;