mirror of https://github.com/xqemu/xqemu.git
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:
parent
7b936c0c42
commit
f69a86955e
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue