Forum

Z PMD 85 Infoserver

:: späť na zoznam tém ::
Správa
Autor  Autor ::  Libor L.A.
Poslaná  Poslaná ::  30.03.2013 11:08:18
Predmet  Predmet ::  Kde je chyba?
Při předělávce Jetpacu na možnost uživatelské definice kláves jsem přišel na jeden problém. Souběžný stisk několika kláves není emulátorem korektně přečten. Například souběžný stisk kláves šipka vlevo, šipka dolů a klávesy END nevrátí informaci o stisku klávesy šipka vlevo. S šipkou vpravo to funguje. Původně jsem podezříval klávesnici (některé USB modely mají omezený bufer) ale pak jsem zjistil, že je to ještě PS/2 klávesnice. Nevíte někdo, zda je problém principiálně ve výše uvedené kombinaci kláves, nebo je to chyba emulátoru?
 
Správa
Autor  Autor ::  Roman Bórik
Poslaná  Poslaná ::  30.03.2013 13:02:43
Predmet  Predmet ::  Re: Kde je chyba?
Test klávesnice v emulátore sa robí pomocou Win API funkcie GetKeyboardState(), ktorá vráti pole 256 bytov, v ktorom každý byte určuje stav niektorého klávesu. Ak má daný kláves nastavený flag, že je stlačený, tak sa príslušne nastaví bit v poli, ktoré reprezentuje klávesnicovú maticu PMD 85 a naopak.
Takže samotný emulátor nerieši "kolíziu" klávesov, ale iba sleduje stav, ktorý mu poskytne operačný systém.
Pokiaľ dochádza k popísanému chovaniu, tak je to zrejme dôsledok toho, ako vyhodnocuje stav klávesov samotná klávesnica, alebo príslušný driver v OS. Ale môžem sa samozrejme mýliť.
Pre úplnosť, funkcia GetKeyboardState() je v emulátore volaná asi 50x za sekundu, ale nemyslím si, že by frekvencia jej volania mohla nejako ovplyvniť "kolíziu" stlačených klávesov.
Funkcia GetKeyboardState() má ale aj jednu (pre PMD 85) nepríjemnú vlastnosť, a to že klávesy ľavý a pravý Enter združuje do jedného flagu a tak neumožňuje rozlíšiť ich samostatne. Pri stlačení klávesu Enter sa tak v klávesnicovej matici nastaví bit iba pre pravý EOL. V skorších verziách emulátora sa to robilo pre oba EOLy, ale nerobilo to dobrotu v niektorých programoch. Výsledkom toho je to, že programy, ktoré testujú iba ľavý EOL, "nebudú fungovať".
Pod Win je samozrejme možné testovať klávesy Enter oddelene, napríklad použitím DirectInput, ale k tomu som sa zatiaľ neodhodlal, keďže aktuálne riešenie v drvivej väčšine prípadov vyhovuje.
 
Správa
Autor  Autor ::  dex
Poslaná  Poslaná ::  30.03.2013 12:06:52
Predmet  Predmet ::  Re: Kde je chyba?
Stále to může být chyba klávesnice, záleží na tom, jak je dělaná její matice.
Velesoft měl pěkný rozbor snímání stisku několika kláves současně v emulátorech, jen ho nemůžu nikde najít.
Ideální PC klávesnice je samozřejmě taková, jejíž matice odpovídá matici emulovaného počítače.
 
Správa
Autor  Autor ::  solaris104
Poslaná  Poslaná ::  30.03.2013 14:31:51
Predmet  Predmet ::  Re: Kde je chyba?
Myslis tento test klavesnice?
http://www.microsoft.com/appliedsciences/KeyboardGhostingDemo.mspx
Ja si taky musel koupit lepsi klavesnici kvuli ZX emulatoru Spectaculator, aby zvládala soucasne pravy Alt a sipky.
 
Správa
Autor  Autor ::  Libor L.A.
Poslaná  Poslaná ::  30.03.2013 17:32:56
Predmet  Predmet ::  Re: Kde je chyba?
Ano, toto je odpověď. V tom programu na test klávesnice se to ukázalo úplně přesně. Pro nezasvěcené: je to chyba konkrétní klávesnice. Emulátor opět potvrdil své kvality a ve hře Jetpac naštěstí taky chybu nemám.

Díky.
 
Správa
Autor  Autor ::  Libor L.A.
Poslaná  Poslaná ::  30.03.2013 12:55:12
Predmet  Predmet ::  Re: Kde je chyba?
Mám obavu, jestli to nebude omezení firmware klávesnice nebo BIOSu PC, protože semtam se ozve takové to varovné pípnutí beepru na základní desce PC. Na druhou stranu si nevzpomínám, že bych na svém DOSovském emulátoru měl nějaký problém podobného ražení. Prostě se podle dat z buferu BIOSu nastavovaly nebo mazaly fiktivní softwarové "spínače" v matici imaginární klávesnice, ze které se to četlo, jako by to byl originál na PMD-85.

Některé klávesy spolu jedou, některé ne. Problémové jsou samozřejmě ty klávesy s prefixem (F0h ???), tj. kurzorové šipky, editační klávesy apod.
 
Správa
Autor  Autor ::  Lukáš
Poslaná  Poslaná ::  30.03.2013 22:52:47
Predmet  Predmet ::  Re: Kde je chyba?
Mi to pípá u kombinace šipka vlevo + šipka vrpavo + šipka nahoru, že by nějaká vymožnost pro BIOS?
:: späť na zoznam tém ::