Miło, że ktoś to wreszcie wyjaśnił we w miarę przystępny sposób.
pajero napisał/a:Zaproponowałem przypisanie "nowych" klawiszy nie wraz ze wzrastającą liczbą kodu klawiszy, ale tak aby ułatwić ich przyszły montaż.
Z wprowadzeniem tych klawiszy jest pewien kłopot - o ile pamiętam, standardowy OS w przypadku takiej nietypowej wartości w KBCODE, się wiesza.
pajero napisał/a:Ważną informacją jest, że POKEY podaje kody wszystkich wciśnięć w trakcie jednej ramki, czyli co parę linii. I tak w kółko. Odczytywać więc stany musimy, np. na przerwaniu DLI.
Dokładniej, POKEY sprawdza stan każdego kolejnego klawisza co 1 skanlinię obrazu. Zaczyna od A = 3f, i co skanlinię sprawdza stan kolejnego klawisza: S = 3e, G = 3d, Caps = 3c itp.
pajero napisał/a:Powyżej napisałem o feler'ze linii z klawiszami Shift i Control. Jak widać z matrycy, pozostają nieobsadzone 5 kombinacje (wliczając w to Break). Zwieranie wolnych linii z BSC nie robi na POKEYu żadnego wrażenia..... A może Wam się uda to zmienić?
A co tu można zmienić? POKEY sprawdza stan linii BSC (a raczej stan nóżki KR2) tylko w określonych momentach - raz sprawdza gdy aktualnie skanuje klawisz w 2. linii matrycy (wykrycie Break), raz w trakcie skanowania 6. linii matrycy (Shift) i raz w trakcie skanowania 8. linii matrycy (Control). W innych chwilach ta linia jest ignorowana.
pajero napisał/a:"Upakowanie" kodów w linie skaningowe zależy od ilości "grup" wciskanych na raz. Dokładnie tego nie sprawdzałem. Bo nie jest to stałe jak na fotce - radzę odpalić program - po to go pisałem, by nie było takich pytań.
"Upakowanie" to wynika w prostej linii z faktu, że przeskanowanie całej matrycy zajmuje 64 skanlinie czasu. Upakowanie będzie różne w zależności od tego, które grupy klawiszy są wciśnięte, ale cały cykl powtarza się co 64 skanlinie.
pajero napisał/a:Akurat tu trafiłeś w następne ograniczenie.
.....to jest przypadek wystąpienia pary (ZX) oraz pionowo przecinających się kolumn (Q A)
Nazywa się to key ghosting i można je zauważyć także bez wyłączania DEBOUNCE. Spróbujcie w BASICu nacisnąć naraz np. klawisze Control, K i 8, i powiedzcie czemu kursor przeskoczył do następnej linii :)
pajero napisał/a:między trybem zwykłym, a debounce
Akurat "tryb zwykły" to jest właśnie "tryb debounce" - w tym sensie, że w zwykłym trybie funkcja DEBOUNCE POKEY-a jest włączona ;)
Dodam jeszcze, że:
- Po wyłączeniu DEBOUNCE przerwanie klawiatury jest generowane nie tylko raz, po naciśnięciu klawisza, ale za każdym razem, gdy POKEY w trakcie skanowania matrycy natrafi na naciśniętą grupę klawiszy. Czyli np. gdy naciśnieta jest grupa AS, przerwanie leci co 64 skanlinie; gdy naciśnięte jest więcej grup - odpowiednio częściej. (zob. "Upakowanie") W każdym razie nie trzeba sprawdzać aktywnie stanu KBCODE - wystarczy przechwytywać IRQ klawiatury.
- Ficzer był wykorzystany w konsoli 5200, gdzie konstrukcja joysticków (naciśnięcie każdego klawisza powoduje de facto zwarcie 2 sąsiednich punktów na matrycy POKEY-a) zniosła wymóg naciskania "grup klawiszy". OS 5200 domyślnie wyłącza DEBOUNCE i mamy za darmo wykrywanie wielu klawiszy joysticka naciśniętych naraz (aczkolwiek nie wszystkich kombinacji :( ).
Pajero, na przyszłość zapisuj obrazki w PNG. JPEG nie nadaje się do rysunków schematycznych.