1

Temat: POKEY/AKI jak to działa?

Klawiatura Atari to typowa klawiatura matrycowa (nie licząc klawiszy "funkcyjnych"). Odczyt jest realizowany przez układ POKEy z pomocą 2 multiplekserów analogowych CD4051.

POKEy za pomocą linii K3...K5 wybiera wiersz matrycy klawiatury, na który podaje masę (przez rezystor 100R), natomiast za pomocą linii K0...K2 wybiera kolumnę, której stan odczytuje przez wejście KR1 (podciągnięte do Vcc przez rezystor 47kR). Nieco inaczej są odczytywane klawisze Break, Control i Shift. Używane jest do tego wejście KR2 (również podciągnięte do Vcc przez rezystor 47kR), które jest podłączone na stałe do kolumny klawiatury, w której są te klawisze.

Teraz pora na pytanie - jak rozwiązano komunikację PICa z POKEYem w AKI? Podłączone są tam jedynie linie KR1, KR2 oraz K0 i K5. Jak sądzę, wewnętrznie generowane są opóźnienia, wyzwalane początkiem skanowania wierszy/kolumn i na ich podstawie wystawiane są odpowiednie stany na KR1 i KR2. Dlaczego to jest aż tak przekombinowane. PIC przecież ma dość pinów GPIO, aby mógł "widzieć" wszystkie 6 linii Kn i nie byłoby problemu z timingami.

Przygotowałem "znormalizowaną" (po adresach) mapę klawiszy:
https://obrazki.elektroda.pl/7038795000_1622492630_thumb.jpg

Ostatnio edytowany przez _tzok_ (2021-05-31 22:23:59)

Atari 1040STe (TOS 1.62/2.06 UK, 4MB RAM), Atari 1040STfm (TOS 1.04 UK, 4MB RAM, BLiTTER, Gotek HxC) + Digital Data Deicke HD64, SF314, UltraSatan, Gotek HxC, NetUSBee
Atari 800XE (SIMM EXP 1MB), Atari 800XL (RAMBO XL 256kB), Sinclair SPECTRUM+ (48kB), TIMEX Computer 2048 (48kB)
Commodore A600 (KS 1.3/3.1, 2MB CHIP RAM, 4MB FAST RAM, CF 4GB, Gotek FF)

2

Odp: POKEY/AKI jak to działa?

@_tzok_: Moim zdaniem nie ma potrzeby generowania wewnętrznych timingów, bo zakładając że linia K0 jest najmłodszym bitem licznika a K5 najstarszym, to wtedy zmiana K0 mówi o zwiększeniu licznika K0..K5, natomiast zmiana K0K5 z 11 na 00 mówi o tym, że licznik K0..K5 zostaje wyzerowany. Krótko mówiąc mając najmłodszy i najstarszy bit licznika jesteś w stanie zregenerować wszystkie bity.

Edit: Oczywiście podstawą jest synchronizacja do zmiany 11->00 K0K5.

Ostatnio edytowany przez mono (2021-05-31 22:18:12)

hex, code and ror'n'rol!
niewiedza buduje, wiedza rujnuje

3

Odp: POKEY/AKI jak to działa?

No właście - trzeba się synchronizować do tego przejścia, a dalej polegać na wewnętrznym timerze PICa. Czytając wszystkie 6 linii, można realizować komunikację synchronicznie.

Atari 1040STe (TOS 1.62/2.06 UK, 4MB RAM), Atari 1040STfm (TOS 1.04 UK, 4MB RAM, BLiTTER, Gotek HxC) + Digital Data Deicke HD64, SF314, UltraSatan, Gotek HxC, NetUSBee
Atari 800XE (SIMM EXP 1MB), Atari 800XL (RAMBO XL 256kB), Sinclair SPECTRUM+ (48kB), TIMEX Computer 2048 (48kB)
Commodore A600 (KS 1.3/3.1, 2MB CHIP RAM, 4MB FAST RAM, CF 4GB, Gotek FF)

4

Odp: POKEY/AKI jak to działa?

Nie timera a licznika. Nie jest potrzebny timer taktowany jakimś swoim zegarem. K0 OR K5 -> reset licznika K1K2K3K4, K0 jest podawane na wejście taktujące licznika K1K2K3K4. Linia K0 + licznik K1K2K3K4 + linia K5 składa się na pełny licznik wierszy i kolumn.

hex, code and ror'n'rol!
niewiedza buduje, wiedza rujnuje

5

Odp: POKEY/AKI jak to działa?

Ale wciąż pozostaje problem startu i pierwszego cyklu.

Reset chyba raczej nie jest taki prosty. Reset powinien być na zmianie stanu K5 z 1 na 0 i zasadniczo, do momentu pierwszego resetu, układ nie powinien nic wysyłać, bo wewnętrzny licznik nie jest zsynchronizowany z licznikiem POKEYa.

Żeby to zrobić bez kombinowania potrzeba 12 linii GPIO, PIC16F84A ma ich 13, ale potrzebuje jeszcze 2, żeby czytać klawiaturę PS/2, stąd te kombinacje. Zapomniałem o Start, Select, Option i Reset...

Ostatnio edytowany przez _tzok_ (2021-06-01 08:40:41)

Atari 1040STe (TOS 1.62/2.06 UK, 4MB RAM), Atari 1040STfm (TOS 1.04 UK, 4MB RAM, BLiTTER, Gotek HxC) + Digital Data Deicke HD64, SF314, UltraSatan, Gotek HxC, NetUSBee
Atari 800XE (SIMM EXP 1MB), Atari 800XL (RAMBO XL 256kB), Sinclair SPECTRUM+ (48kB), TIMEX Computer 2048 (48kB)
Commodore A600 (KS 1.3/3.1, 2MB CHIP RAM, 4MB FAST RAM, CF 4GB, Gotek FF)

6

Odp: POKEY/AKI jak to działa?

Tak, pierwsze max 64 cykle są stracone :)
A dałoby się tam dodać jeszcze taki drobiazg z XEGS: "wskazuje fakt podłączenia klawiatury (1 - podłączona)" http://atariki.krap.pl/index.php/Rejestry_GTIA#TRIG2 ?

hex, code and ror'n'rol!
niewiedza buduje, wiedza rujnuje

7

Odp: POKEY/AKI jak to działa?

Wystarczy zwarcie do masy pinu 10 (T2) GTIA.

Atari 1040STe (TOS 1.62/2.06 UK, 4MB RAM), Atari 1040STfm (TOS 1.04 UK, 4MB RAM, BLiTTER, Gotek HxC) + Digital Data Deicke HD64, SF314, UltraSatan, Gotek HxC, NetUSBee
Atari 800XE (SIMM EXP 1MB), Atari 800XL (RAMBO XL 256kB), Sinclair SPECTRUM+ (48kB), TIMEX Computer 2048 (48kB)
Commodore A600 (KS 1.3/3.1, 2MB CHIP RAM, 4MB FAST RAM, CF 4GB, Gotek FF)