Ještě malé doplnění:
- zpětná vazba mezi operátory signál ovlivní takto https://github.com/tisnik/most-popular-python-libs/blob/master/FM/feedback.py (trvalo mi dlouho to zjistit)
- ty WAV soubory si můžete vizualizovat třeba takto https://github.com/tisnik/most-popular-python-libs/blob/master/FM/plot_wave.py (poučení pro mne - přímo v základních knihovnách Pythonu je modul pro práci s WAV, zajimavé)
(do článku s assemblerem se to nehodilo, tak aspoň takto)
Proč vlastně neměl BIOS nějakou funkci pro zjištění stisku klávesy? Však to používal skoro každej program. Stačilo by mít někde v RAM BIOSu prostě 83/84/101/102 bitů se specifikací, které klávese každej bit odpovídá (nebo tak něco triviálního).
A ještě jeden dotaz od člověka, co s tím bojoval jinde - jak "kvalitně" dokázala PC klávesnice rozeznat stisk více kláves. Myslím tím to, že na jiných platformách, když se například stiskly určité tři klávesy, tak se (kvůli matici zapojení) zdálo, že je stisknuta ještě další klávesa. Takže hry musely používat jen vhodné kombinace kláves.
Pamatuju si jen Golden Axe s více hráčema, tam to kupodivu zdá se fungovalo dobře. A potom Červy, tam to někdy nešlo (AFAIK).
Některé herní PC klávesnice nabízejí třeba 3 varianty zapojení těch "drátků", aby sis našel, která tobě vyhovuje (které kombinace kláves chceš, aby fungovaly současně).
Nicméně ty staré hry jako Golden Axe (viz seznam PLAYER 1 a 2 CONTROLS) a Body Blow měly "ciferník" 8 směrových kláves okolo středu, tedy i šikmé směry byly furt jen jedna klávesa. K té druhá klávesa útok, takže 2 hráči = 4 klávesy, zvolené tak, aby ve výchozím "zadrátování" nekolidovaly. Doplňující akce se nedělají při pohybu (přivolání příšery) nebo jen omezeně (skok+útok stačí jen v některých směrech, např. rovně do strany).
Důvod, proč to takhle hry měly, byl i ten, že jejich ovládání pocházelo z "digitálních" joysticků. Ty na 8bitech obcházely, že klávesnice často neuměla žádné klávesy současně, a byly jednoduché/levné na výrobu (žádná přesnost, žádná kalibrace, v dobách kB RAM jen pár bitů, ne několik integerů).
Ajo, takze se pocita s tim, ze se nikdo "nesekne" a neudela treba druhemu hraci vyvolani kouzla nebo tak? Dokonce si matne pamatuju, ze zrovna kouzlo se nekdy objevilo i kdyz to nikdo zrovna nechtel.
A byly ty kombinace zname? Jakoze se napriklad vedelo, ze vsichni vyrobci maji stejny matice? Nebo se proste tipovalo tak, jak to mela velka modra?
U těch herních klávesnic ty matice zveřejňuje výrobce. U ostatních je asi jen pár rozložení, takže to člověk zjistí testem. V reálu to fungovalo tak, že v kooperativních hrách jako Golden Axe když jeden hráč chtěl něco složitého, tak tomu druhém řekl, ať nic nedělá :-) V soubojových hrách s komplexnějším ovládáním, jako One Must Fall 2097, záleželo na štěstí, jestli se vám podaří požadovaný kombo úder.
17. 10. 2024, 01:05 editováno autorem komentáře
Ghosting je nevyhnutelný jev na klávesnici, kde jsou tlačítka zapojená v matici, a kde chybějí blokovací diody. Na spínací membráně ty diody není kam dát. U mechanických tlačítek na PCB diody mohou být, pokud výrobce nešetřil.
To bylo na různých klávesnicích trochu různé. Pamatuji, že já v nějaké střílečce nemohl zatáčet vlevo ve chvíli, kdy jsem běžel. Tuším pro běh byla klávesa CTRL a při jejím držení klávesnice nereagovala na šipku doleva. Na ostatní tři šipky ano. Hodně se to zlepšilo s přechodem na WASD, s tím jsem neměl problémy nikdy.
Dnešní herní klávesnice mají anti-ghosting. Pod tím si každý výrobce představí něco trochu jiného, ale běžně seženete klávesnice se 100% anti-ghosting. V čem se dnes předhánějí je doba od stisku klávesy do chvíle, než se to dozví hra.
Scan kódy jde číst přímo z portu aniž by se něco ztratilo nebo zdvojilo?
Vždy jsem četl jen přes interupt a i tak se náhodně občas něco ztrácelo, speciálně u kláves co posílaly vícenásobné kódy s prefixem E0.
no úplně bezpolestně to nejde. Tady máme výhodu, že jsou to scan kódy původní 83 znakové klávesnice IBM PC (nebo 84 znakové, ta přišla později s tou divnou klávesou SysRQ), která neposílá prefixy ani vícebajtové kódy. Po návratu klávesy na horní polohu se jen pošle 0x80+původní kód, až u AT to zmršili :-)
Ale pravda je, že něco uniknout pochopitelně může. V našem případě ani ne, protože port čteme hodně rychle, určitě rychleji, než ty scan kódy proudí po sériové lince. Obecně - pokud je čtení provedeno řekněme jednou za snímek, to však problém být samozřejmě může, takže se může zdát, že se klávesa "zasekla" nebo naopak hned nereaguje.
Zrovna nedavno jsem nahodou zavadil o videa Bena Eatera na YT, ktery vlastnosti klavesnic (PS2, USB) pekne popisuje vcetne osciloskopickych zaznamu. Treba tady ma rozebrano, jak funguje N-key rollover https://www.youtube.com/watch?v=2lPzTU-3ONI