Gondolom sokakban felmerült a kérdés, hogy mi a fene okozza ezt? Tervezési hiba? Vagy csak szimpla figyelmetlenség? Vagy mi?
Rövid postomban most felfedem a titkot. :)
Egy...keto...háom... múúkodj!
A probléma megértéséhez kicsit bele kell mászni a CIA (Complex Interface Adapter) működésébe. Ja, hogy mi ez? Ez egy chip a c64 dobozában, aminek (egyik) feladata a billentyűzet és a joystickok kezelése.
Van nekünk ugye 66 billentyűnk + a 2 joysticknál még 4-4 irány és 1-1 tűzgomb. Tehát összesen 76 féle billentyűt és joy-irányt kellene érzékelni. (66+2x5) Ehhez jó esetben kellene valami olyan processzor (chip) aminek van legalább 76 lába, mindegyiken egy-egy jelet érzékel. Az adott lábra érkező jel megmondja, melyik billentyűt ütöttük le, vagy éppen milyen irányba mozdítottuk a joyt.
A rutinos vén rókák, akik kicsit jobban elmélyedtek a jó öreg működésében, nem lepődnek meg, hogy a tervezők ezt is trükkösen oldották meg. :)
Ha kicsit jobban utánanézük, kiderül, hogy a 66 billentyű valójában csak 65, mert a bal shift és a 'beragadós' SHIFT-LOCK gomb, ugyanazt a billentyűt jelenti. (Könnyen kipróbálható: Gianna Sisters - bal shift pauzál, jobbal nem, viszont shift-lockkal szintén)
Ott van még a bűvös RESTORE billentyű, ami pedig közvetlenül a processzor NMI lábára van kötve, azt nem a CIA vezérli. Lényegében maradt pontosan 64 billentyűnk.
Hmmm... 8x8=64. Ha veszünk egy 8x8-as négyzetrácsot, akkor minden 'kockába' beírhatunk egy billentyűt. Ez a c64 esetében valahogy így néz ki:

A sorok a CIA ún. A-portjára vannak kötve, az oszlopok pedig a B-re. Minden sor és oszlop egy-egy bitet jelképez. Ha lenyomunk egy billentyűt, akkor a sor-oszlop szám megadja a lenyomott billentyű 'nevét', így azonosítható.
Ráadásul nem kell hozzá 76 láb, elég 16.
Oké, kicsit leegyszerűsítettem a dolgot, de a lényeg ugyanaz.
De hol van már a joystick magic? A magic nagyon egyszerű, ugyanis ugyanezt a mátrixot használja a kütyü a joyok lekérdezéséhez. Egész pontosan az 1-es joy irányai a B-port 0-4 bitjeit jelentik. (Ezek pedig a Space,2,Ctrl, stb, billentyűknek felelnek meg.)
Vagyis ha elhúzom a joyt balra, a gépnek (majdnem) ugyanaz, mintha megnyomnám pl. a 2-es gombot.
És persze mindez visszafelé is működik, ha megnyomom a 2-est, az egyenértékű a joy balra irányával.
Na persze programból nagyon egyszerűen lekérdezhető, hogy most joyt nyomtam, vagy a billentyűket, de a BASIC és a régebbi játékok mindezt lesz*rták. Ezekkel simán el lehet játszani billentyűzetről. Emléxem az ACE c. nagysikerű 'replülőszimulátor'-ral így játszottam, mikor nem volt joyom. Hát nagy élmény volt, de legalább tudtam játszani... :)
Visszatérve a kezdeti problémánkra, a jelenség nem hiba, és nem átgondolatlanság műve, csupán a tervező bácsik kerestek egy olcsóbb, ésszerűbb megoldást.
A BASIC készítők pedig nem is gondoltak arra, hogy gépelés helyett az ember a joyt húzgálja majd, vagy csak lusták voltak 3 sorral többet írni :)
Remélem sok arc nyugszik majd meg ezen sorokat olvasva, hiszen többéves kétségbeesés és értetlenkedés után végre meszűnt a titok :))
Vajon milyen furcsa megoldások leledzenek még ezekben a vasakban?