From: Roy Tam <roytam@gmail.com>
To: Kevin O'Connor <kevin@koconnor.net>
Cc: seabios@seabios.org, qemu-devel <qemu-devel@nongnu.org>
Subject: Re: [Qemu-devel] Regression: more 0.12 regression (SeaBIOS related?)
Date: Thu, 11 Mar 2010 15:42:28 +0800 [thread overview]
Message-ID: <473191351003102342x1f25f281l77a3b325726a602c@mail.gmail.com> (raw)
In-Reply-To: <20100311030742.GA26752@morn.localdomain>
2010/3/11 Kevin O'Connor <kevin@koconnor.net>:
> On Wed, Mar 10, 2010 at 01:24:27PM +0800, Roy Tam wrote:
>> 2010/3/10 Kevin O'Connor <kevin@koconnor.net>:
>> > I don't see an "Illegal Instruction" message. Instead, I see the
>> > keyboard just not working. What qemu version and what command line
>> > did you use?
>>
>> latest git today. when you type fast.
>
> Bleh. That image defines an int15 wrapper which corrupts %edi.
> SeaBIOS calls int154f from the keyboard irq, and it is not prepared to
> handle a corrupted edi. In contrast, Bochs BIOS doesn't care if the
> registers change.
>
>> > What the fdos0138.img image is doing is broken - once it reads the key
>> > from the ps2 port, nothing stops a new key from being read the next
>> > time something reads from the port. Indeed, although the keyboard
>> > works in qemu-0.11 for fdos0138.img, if one types fast they'll see
>> > duplicate and lost keys.
>> >
>>
>> But it is how programs(Chinese/Japanese/Korean Display Systems,
>> GW-BASIC, etc.) in the past get input from keyboard.
>
> Can you point me to documentation on this usage?
>
Sorry I can't find documentation on this usage. But instead I have
lots of old programs written with this usage.
Using undocumented features from BIOS/DOS is very usual in that time.
>> "Consider" legacy as "broken" is wrong IMHO.
>
> It's broken because it causes key presses to be lost and corrupted.
> The ps2 port hardware just doesn't work the way that software is
> trying to use it.
>
You said that "it causes key presses to be lost and corrupted" but I
haven't heard any complain about this.
Real BIOSes (Award BIOS, AMI BIOS, Phoenix BIOS) handle this usage
very well and no key press are lost or corrupted.
Any key press should generate 4 IRQs, for example when I press [Tab]
key, it should have IRQs like this:
ps2: data f (status=1d)
ps2: data f (status=1c)
ps2: data 8f (status=1d)
ps2: data 8f (status=1c)
Even if status&1==1 is handled by the program itself, status==0x1c is
still handled by BIOS.
Programs in the past will try to get data from BIOS in this moment to
ensure two scancodes are the same.
On the contrary *NOT* sending keycode in this moment cause bigger problem.
The following patch help people to see irq status and data change:
---
diff --git a/src/ps2port.c b/src/ps2port.c
index 49bf551..48d940f 100644
--- a/src/ps2port.c
+++ b/src/ps2port.c
@@ -154,11 +154,19 @@ process_ps2byte(u8 status, u8 data)
static void
process_ps2bytes(void)
{
+ u8 status = 0;
+ u8 data = 0;
+ u8 old_status = 0;
+ u8 old_data = 0;
for (;;) {
- u8 status = inb(PORT_PS2_STATUS);
+ old_status = status;
+ old_data = data;
+ status = inb(PORT_PS2_STATUS);
+ data = inb(PORT_PS2_DATA);
+ if ((data != old_data)||(status!=old_status))
+ dprintf(1, "ps2: data %x (status=%x)\n", data, status);
if (!(status & I8042_STR_OBF))
return;
- u8 data = inb(PORT_PS2_DATA);
process_ps2byte(status, data);
}
}
next prev parent reply other threads:[~2010-03-11 7:42 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-03-08 2:04 [Qemu-devel] Regression: more 0.12 regression (SeaBIOS related?) Roy Tam
2010-03-08 10:05 ` Jamie Lokier
2010-03-08 11:08 ` Roy Tam
2010-03-08 13:48 ` Roy Tam
2010-03-10 4:48 ` Roy Tam
2010-03-09 15:41 ` Natalia Portillo
2010-03-09 16:09 ` Natalia Portillo
2010-03-10 2:12 ` Kevin O'Connor
2010-03-10 3:49 ` Roy Tam
2010-03-10 4:59 ` Kevin O'Connor
2010-03-10 5:05 ` Roy Tam
2010-03-10 5:55 ` Kevin O'Connor
2010-03-10 5:24 ` Roy Tam
2010-03-11 3:07 ` Kevin O'Connor
2010-03-11 7:42 ` Roy Tam [this message]
2010-03-11 8:10 ` Natalia Portillo
2010-03-12 0:57 ` Kevin O'Connor
2010-03-12 1:17 ` Roy Tam
2010-03-12 16:13 ` Roy Tam
2010-03-13 15:35 ` Kevin O'Connor
2010-03-13 16:00 ` Roy Tam
2010-03-12 23:24 ` [Qemu-devel] PC keyboard emulation (was: Regression: more 0.12 regression (SeaBIOS related?)) Jamie Lokier
2010-03-14 0:44 ` [Qemu-devel] " Kevin O'Connor
2010-03-15 2:47 ` Jamie Lokier
2010-03-15 3:08 ` Kevin O'Connor
[not found] <998502.27470.qm@web15103.mail.cnb.yahoo.com>
[not found] ` <473191351003071956g48c3944fyd3adc3ae6012493c@mail.gmail.com>
2010-03-08 3:57 ` [Qemu-devel] Regression: more 0.12 regression (SeaBIOS related?) Roy Tam
-- strict thread matches above, loose matches on Subject: below --
2012-03-06 17:00 Alain Ribière
2012-03-07 13:38 ` Kevin O'Connor
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=473191351003102342x1f25f281l77a3b325726a602c@mail.gmail.com \
--to=roytam@gmail.com \
--cc=kevin@koconnor.net \
--cc=qemu-devel@nongnu.org \
--cc=seabios@seabios.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).