forum speccy.pl

ZX Spectrum => HARDWARE => Wątek zaczęty przez: ikci w 2017.01.24, 10:19:18

Tytuł: Issue 2 Keyboard vs. Issue 3 Keyboard
Wiadomość wysłana przez: ikci w 2017.01.24, 10:19:18
Na temat sposobu komunikacji z klawiaturą (Issue 2 lub Issue 3) niestety nie znalazłem nic na
naszym forum. Co ciekawe, także szukając w internecie (także na stronach anglojęzycznych) wygląda jakby problem był tak znikomy, że praktycznie nie ma nad czym się rozpisywać.
Jedynie Peter Putnik napisał o tym coś więcej  http://piters.tripod.com/cassport.htm

Temat jest oczywiście o trybie obsługi klawiatury, a nie o rewizji płyty. Chociaż jest to powiązane ze sobą, bo jak podejrzewam, dotyczy tylko układów ULA oznaczonych na początku cyferką "5" czyli płyt głównych w rewizjach Issue 1 oraz Issue 2. Później (od drugiej połowy 1983) produkowane płyty oraz energooszczędne ULA, oznaczone na początku nazwy cyfrą "6", obsługiwały już klawiaturę w trybie Issue 3.

Sprawa mnie intryguje bo nie do końca rozumiem, czy kłopot pojawia się jedynie przy emulatorach (które zresztą w większości mają opcje wyboru emulacji Issue 2 Keyboard) więc problem rozwiązują dając użytkownikowi możliwość wyboru.
Pytanie, czy na realnym sprzęcie (chodzi o Gumiaki lub Plusy) problem nie występował?
To znaczy czy nowszy Gumiak lub Plusik (czyli pracujący w trybie Issue 3 keyboard) bez problemu ogarniał grę napisaną dla trybu obsługi klawiatury Issue 2 ?


Odniosę się do gry, która w tamtych czasach mnie zachwyciła i do dzisiaj zachwyca.
Chodzi o Abu Simbel Profanation z roku 1985.
https://www.youtube.com/watch?v=PR_y7iYNqzA
Gra pozytywnie zaskakuje kolorową grafiką i animacją. Negatywnie zaskakuje swoją nieprzeciętną trudnością.
Pomimo późnej daty powstania - gra obsługiwała klawiaturę w trybie Issue 2. Oczywiście jeżeli w przypadku oryginalnych komputerów 48K, nie miało to znaczenia to jest wytłumaczalne dlaczego była wydawana nawet w późniejszylch latach (1987) i obsługa "Issue 2 keyboard" nie została poprawiona. Na oryginalnych okładkach kaset jest wyraźnie napisane, że gra jest przeznaczona dla komputerów 48K.
Ta gra na pewno nie działa na klonach ZX Spectrum - TC2048 oraz czarnym +2. Nie działa to znaczy, po załadowaniu gry kiedy pojawiają się opcje wyboru sterowania grą, komputer nie reaguje na przycikanie klawiatury. W przypadku TC2048 gra prawdopodobnie zawiesza się już podczas wczytywania.
Grę można pobrać z WOS http://www.worldofspectrum.org/infoseekid.cgi?id=0000048
Jest dosyć dużo różnych wersji obrazów taśm, jednak jedynie werja hiszpańska, z roku 1987, posiadająca w nazwie (SmallCase-Different) jest wersją przerobioną i działającą bez problemu na Issue3.

Uparłem się, że chcę znaleźć wersję angielską, która będzie działać na ZX Spectrum +3 i zacząłem szukać u naszych wschodnich sąsiadów.
http://spectrum4ever.org/fulltape.php?go=releases&letter=A
Na tej rosyjskiej stronie sa dostępne 3 pliki tej gry. Z czego przynajmniej jeden jest złamany przez naszych (JANSOFT). Zatem pobrałem wszystkie 3 pliki i ciekawostka: żaden z nich nie jest poprawiony na Issue 3.

Czyżby zatem Rosjanie nie mieli problemu z "Issue 2 keyboard" na swoich klonach ?

Przeszukałem polskie czasopisma z tamtego okresu. Jedynie w "Komputerze" ze stycznia 1987, Grzegorz Czapkiewicz w dziale Poke n,∞ opisuje tą grę i metodę uzyskania w niej nieśmiertelności. Zwraca uwagę na istnienie kilku wersji tej gry. Jednak nic nie wspomina na temat problemów z klawiaturą.
Także w czasopismach zachodnich nie ma ani jednej wzmianki na ten temat.

Właściciele ZX Spectrum 48k oraz Plusów w tamtych czasach. Ożywcie wspomnienia, proszę i przypomnijcie sobie, czy mieliście problemy z tą grą?
Tytuł: Odp: Issue 2 Keyboard vs. Issue 3 Keyboard
Wiadomość wysłana przez: pear w 2017.01.24, 11:28:55
Czy to chodzi o to, że klawisze są odczytywane w różnych wersjach z innych bitów (albo nie wszystkie bity mają zawsze ustalony stan), a w Timexie to jak zwykle w ogóle inaczej ?
Coś mi świta, że gdzieś kiedyś było o tym w Bajtku.
Tytuł: Odp: Issue 2 Keyboard vs. Issue 3 Keyboard
Wiadomość wysłana przez: ZX Freeq w 2017.01.24, 11:58:55
Był był w Bajtku artykuł o różnych Issue. Ale nie pamiętam, co tam dokładnie opisane było, ani numeru. Raczej jeszcze z czasów dużego formatu.

Ja AbuSimbelProfanation poznałem już za czasów współczesnych, na emulatorze Z80 pod DOSem. Faktycznie w opcjach chyba trzeba było przestawić Issue klawiatury. Nie pamiętam jednak czym objawiało się nie przestawienie tej opcji.
Tytuł: Odp: Issue 2 Keyboard vs. Issue 3 Keyboard
Wiadomość wysłana przez: trojacek w 2017.01.24, 13:03:04
http://worldofspectrum.org/faq/reference/48kreference.htm

Hardware / port 0xfe, tam jest opisana procedura, jak odróżnić issue 2 od 3 i późniejszych.
Tytuł: Odp: Issue 2 Keyboard vs. Issue 3 Keyboard
Wiadomość wysłana przez: ikci w 2017.01.24, 13:06:38
Panowie, bardzo dziękuję za wsparcie.

Postanowiłem wypróbować na realnym sprzęcie.

Pod ręką miałem: Gumiak (z pewnością nowsza wersja płyty - chyba Issue 4) Didaktik Gama 80kb v. 1989
oraz ZX Spectrum+ 128k (Toastrack)

Testowałem na nich ten plik:
http://www.worldofspectrum.org/pub/sinclair/games/a/AbuSimbelProfanation(GremlinGraphicsSoftwareLtd).tzx.zip

Wyniki:

Gumiak - mimo, że nowsza płyta i zapewne obsługa Issue3 Keyboard - gra się uruchamia i działa obsługa klkawiatury.
Nie ma żadnego problemu, można grać.

Didaktik Gama 80k (v. 1989) - gra się wczytuje w całości. Pojawia się płynący do góry scroll. Po kliknięciu ENTER przechodzi
do wyboru opcji sterowania grą lecz w tym momencie następuje reset komputera.

Toastrack (robiłem test w trybie 48k) - gra się wczytuje, działa wybór opcji sterowania. Można śmiało grać.

Jeszcze mogę sprawdzić na  ZX Spectrum 128+3  ale potrzebuję więcej czasu bo muszę przygotować obraz dyskietki.

EDIT:

W TIP SHOP  http://www.the-tipshop.co.uk/cgi-bin/info.pl?wosid=0000048 znalazłem  plik
Type in hack. Bugfixed version

http://www.the-tipshop.co.uk/hacks/ArchieRobins/TAP/A/Abu%20Simbels%20Profanation%20(Bugfixed)%20(1987)(Dinamic%20-%20Gremlin)[turbo][p].tap

(nie mogę w żaden sposób wkleić tego linku żeby działał - forum obcina cześć adresu)

Po ściągnięciu tego pliku w środku widzę blok o nazwie:  ASP_KBFix_     czyli jest poprawka dla Issue3

Wyodrębniłem ten blok z obrazu pliku i wstawiłem do obrazu  (na jego początek):
http://www.worldofspectrum.org/pub/sinclair/games/a/AbuSimbelProfanation(GremlinGraphicsSoftwareLtd).tzx.zip

Sprawdziłem na emulatorze i gra się wczytuje i działa wybór opcji sterowania grą.

W załączniku przerobiony plik gry.

Teraz pozostaje sprawdzić to na Didaktik Gama 80kb czy gra nadal się będzie resetować.
Także jak ktoś ma pod ręką TC2048 - ja niestety mam za głęboko zagrzebany.
Tytuł: Odp: Issue 2 Keyboard vs. Issue 3 Keyboard
Wiadomość wysłana przez: tooloud w 2017.01.24, 13:16:15
mam trzy działające issue 2 - ale nie do końca rozumiem problem.
Tytuł: Odp: Issue 2 Keyboard vs. Issue 3 Keyboard
Wiadomość wysłana przez: ikci w 2017.01.24, 13:29:03
Ale pisząc Issue 2 piszesz o rewizji płyty czy o najstarszym ZX Spectrum, który mapował klawiaturę w wersji Issue 2  ?
Tytuł: Odp: Issue 2 Keyboard vs. Issue 3 Keyboard
Wiadomość wysłana przez: tooloud w 2017.01.24, 13:56:06
trzy płyty issue 2 - najstarsza z 19tego tygodnia 1982.
Tytuł: Odp: Issue 2 Keyboard vs. Issue 3 Keyboard
Wiadomość wysłana przez: ikci w 2017.01.24, 14:04:31
Dobrze, tylko tak prawdę mówiąc, co to wnosi do tematu ?
Tytuł: Odp: Issue 2 Keyboard vs. Issue 3 Keyboard
Wiadomość wysłana przez: matofesi w 2017.01.24, 14:19:53
@ikci Istotny jest chyba kawałek "...ale nie do końca rozumiem problem." ;)

A problem zasadniczo polega na tym, że jak się źle odczytuje klawiaturę to na nieistotnych dla samej klawiatury bitach pojawiają się dane, które należy poprawnie interpretować albo odrzucać. Profanation (i o ile z dawnych czasów pamiętam jeszcze kilka innych) czyta klawiaturę niepoprawnie i w efekcie nie da się pograć na niektórych wersjach płyt.

Zastanawia mnie tylko dlaczego na Didaktiku się resetuje... Może tam aktywuje się jeszcze jakaś inna niezgodność...
Tytuł: Odp: Issue 2 Keyboard vs. Issue 3 Keyboard
Wiadomość wysłana przez: tooloud w 2017.01.24, 14:42:33
Dobrze, tylko tak prawdę mówiąc, co to wnosi do tematu ?

to że mam kompy które łapią się ULą w issue2 keyboard.

nie wiem - chcesz coś sprawdzić?
Tytuł: Odp: Issue 2 Keyboard vs. Issue 3 Keyboard
Wiadomość wysłana przez: ikci w 2017.01.24, 15:13:38
Przepraszam. Nie zrozumiałem sensu dla którego wspomniales o tym ze masz 3 Spektrum  ze starą plyta. Chodzi o to ze ja nic nie chce sprawdzac na tych starych plytach w ktorych wystepuje Issue2 keyboard. Bylbym wdzieczny gdyby ktoś sprawdzil ten ostatni plik z poprawka Issue3 keyboard ale na TC2048 lub czarnym +2

Jestem teraz w kolejce u lekarza. Pisze tego posta z telefonu. Wrócę do domu i postaram sie porobic dalsze testy - na przyklad na  +3. Chodzi o sprawdzenie czy też sie zawiesi po wczytaniu oryginalnej gry oraz czy po wczytaniu gry z fixem Issue3 kbd czy nedzie działać poprawnie.
Tytuł: Odp: Issue 2 Keyboard vs. Issue 3 Keyboard
Wiadomość wysłana przez: tooloud w 2017.01.24, 15:54:30
Przepraszam. Nie zrozumiałem sensu dla którego wspomniales o tym ze masz 3 Spektrum  ze starą plyta. Chodzi o to ze ja nic nie chce sprawdzac na tych starych plytach w ktorych wystepuje Issue2 keyboard. Bylbym wdzieczny gdyby ktoś sprawdzil ten ostatni plik z poprawka Issue3 keyboard ale na TC2048 lub czarnym +2

ok, ja myślałem, że chodzi o odpalenie czegoś i na starej issue2 (płyta) i na czymś nowszym.
Tytuł: Odp: Issue 2 Keyboard vs. Issue 3 Keyboard
Wiadomość wysłana przez: Tygrys w 2017.01.24, 19:17:17
To co napisał mat - na wszystkich modelach ZX Spectrum, Timexie itp odczyt odpowiednich bitów z portów klawiatury powinien dawać identyczny wynik. Problemy z grami na różnych issue oraz klonach powoduje jedynie nieprofesjonalne podejście programistów gier do obsługi klawiatury - nic więcej.
Tytuł: Odp: Issue 2 Keyboard vs. Issue 3 Keyboard
Wiadomość wysłana przez: ikci w 2017.01.24, 19:33:33
Panowie, raz jeszcze dziękuję za wszelką pomoc oraz oferty pomocy.
Ten plik TZX który załączyłem - postanowiłem go przerobić aby to nie była taka zlepka programów i podprogramików w pliku TZX,
który w dodatku ma w środku bloki w turbo i nie będzie działał na DivIDE.

Wczytałem zatem całość do SpecEmu - trzasnąłem snapa, później skompresowałem (Snap2Tap), dodałem obrazek (ZX-Blockeditor)
i wyszedł mi piękny TAP w rozmiarze niecałych 30 kb.
Plik w załączniku

Teraz taki plik mogę także wczytywać przy pomocy DivIDE.


Wytargałem w końcu spod sterty gratów swojego TC2048 oraz uruchomiłem ZX 128+3

Wyniki testów:

ZX 128 +3 + plik oryginalny pobrany z WOS - program się wczytuje, ale przy próbie wyboru opcji
sterowania grą - klawisze wyboru nie działają. Czyli stan idealnie podobny jak w emulatorze.

Mój przerobiony plik TAP wczytuje się, działają klawisze wyboru opcji sterowania grą.
Można grać.

TC2048  - gra się wczytuje do końca (wczytywałem oryginał TZX z WOS) po wczytaniu nie ma w ogóle
widocznego scrolla - powinny się pojawić napisy lecące do góry i przejście do wyboru opcji sterowania grą
powinno nastąpić po kliknięciu w ENTER (lub inny klawisz, chyba dowolny)
Pojawia się zatem od razu menu wyboru sterowania i żaden klawisz nie działa - zatem sytuacja jak w emulatorze.

Wczytałem mojego przerobionego TAPa -  gra się wczytuje, scroll się nie pojawia tylko od razu opcje wyboru sterowania
grą. Opcje działają ale przy wyborze sterowania klawiaturą - nasz bohater od razu sam zasuwa w prawo  - tak jakby cały
czas był wciśnięty klawisz P
Przy wyborze Kempstona można spokojnie grać.. To znaczy nie wiem jak jest w dalszych komnatach - nie udało mi się jeszcze
przejść tej pierwszej :)

Jeszcze spróbuję wczytać tego poprawionego TAP do Didaktika - może tym razem się nie zawiesi.


EDIT:

Jeszcze raz wczytałem nie poprawiany, oryginalny plik TZX pobrany z WOS do  Didaktika.
Kurcze nie wiem jaki czort był w nim wcześniej. Może za długo leżał nie ruszany?
Didaktik się nie zawiesił, nie zresetował, był scroll, działają opcje wyboru sterowania grą. Można grać.
(Przypominam, że ten Ditaktik ma w środku oryginalny układ Ferranti ULA)

Wczytałem do niego także poprawiony plik TAP i ta wersja także działa bez problemu.
Tytuł: Odp: Issue 2 Keyboard vs. Issue 3 Keyboard
Wiadomość wysłana przez: matofesi w 2017.01.25, 11:23:31
A ja z ciekawości zajrzałem sobie w kod jak wygląda ten nieszczęsny wybór sterowania (bo żeby było zabawnie jak się w emulatorze przełączy klawiaturę w Issue 2, wybierze klawiaturę jako sterowanie odpalając grę a potem wyłączy Issue 2 to gra działa czyli w samej rozgrywce klawiatura wydaje się być czytana poprawnie). Kod wygląda... dziwnie ;)

...

ld hl,$f7fe
push hl
pop bc
in a,(c)
ld l,a
ld h,0
ex de,hl
ld hl,$00fd
xor a
sbc hl,de
jp nz,$c2b8 ; skok jeśli nie jest wciśnięty oczekiwany klawisz
; tu następuje ustawienie zmiennej określającej wciśnięcie konkretnego
; klawisza i wyskok z procedury
...


Ten sam pattern jest powtarzany jeszcze dwa razy zmienia się tylko wartość ładowana do HL przed SBC HL,DE. Wartość ta to w kolejnych przebiegach $FD, $FB i $F7 - binarnie to odpowiednio 11111101, 11111011 i 11110111. Kod czyta więc stan "półrzędu" klawiatury 1-5 a następnie sprawdza czy to, co przeczytał zgadza się z zakładanym patternem - pierwszy to zgaszony bit 01 czyli wciśnięte 4, drugi to bit 02 - wciśnięte 3, trzeci to bit 03 - wciśnięte 2. Tylko zamiast sprawdzać konkretne bity odczytane z portu (i najlepiej robić to jednym odczytem a potem ewentualnie sprawdzić zwolnienie klawisza) czyta trzy razy i porównuje z całym bajtem wliczając w to trzy nadmiarowe bity w tym ten, który w nowszych wersjach jest bardziej podatny na to, co jest wcześniej do portu $FE wysyłane. A w tym wypadku tuż przed odczytem klawiatury wywoływana jest procedura grania beeperem z ROMu w której oczywiście zapisów jest mnóstwo. Efekt jest taki, że w wypadku Issue 3 szósty bit czytany z portu $FE (w tym wypadku $F7FF) zawsze jest wyzerowany i zwracany pattern nigdy nie ma na trzech najwyższych bitach samych jedynek co oczywiście powoduje, że gry nie da się wystartować.

Podobnie przedziwne kombinacje są używane do odczytu klawiatury w samej grze, ale z jakiegoś powodu tam Issue 3 wydaje się nie przeszkadzać w działaniu - być może zapisy do $FE odbywają się w innej kolejności/miejscu i nie wpływają już na stan szóstego bitu. Nie chce mi się tego dalej analizować, bo kod wygląda dość koszmarnie - prawdopodobnie był kompilowany z czegoś wysokopoziomowego.
Tytuł: Odp: Issue 2 Keyboard vs. Issue 3 Keyboard
Wiadomość wysłana przez: ikci w 2017.01.25, 13:28:55
Mat, dziękuję !
Lubię Cię za to, że czasami zachce Ci się znaleźć chwilę i zajrzeć do kodu aby później coś całkiem przystępnie wyjaśnić.

To ciekawostka z tym kodem kompilowanym z czegoś wysokopoziomowego. Gra powstała także na Amstrada / Schneidera CPC.
(a może powstała na  CPC wcześniej?)
Może po prostu ktoś próbował żywcem kopiować kod z tamtej maszyny, ale komplikacje wynikające z różnic sprzętowych "omijał"
kombinując i komplikując w ten sposób kod ?
Tytuł: Odp: Issue 2 Keyboard vs. Issue 3 Keyboard
Wiadomość wysłana przez: matofesi w 2017.01.25, 13:53:35
Nie wiem jak to było pisane, ale jakby robił to ktoś "kumaty" w assemblerze to raczej nie robiłby takich konstrukcji. Przecież odczyt tych trzech klawiszy to jest coś takiego:
...
ld bc,$f7ff
in a,(c)
bit 1,a
jr z, klawisz_1
bit 2,a
jr z,klawisz_2
bit 3,a
jr z_klawisz_3
...

Zajmuje znacznie mniej miejsca, jest znacznie bardziej czytelne, działa na każdej wersji Spectrum. Można oczywiście zrobić kilka wariacji na ten temat, ale zasadniczo każdy "szanujący się" programista będzie to robił podobnie. Cytowany wyżej kod wygląda tak jakby robił go ktoś, kto zupełnie nie ma pojęcia o assemblerze albo automat... Przypomina kompilację pseudokodu:

let port=$f7fe
let a=in(port)
let klawisz=a
let oczekiwane=$00fd
if klawisz != oczekiwane then goto dalej

...

dalej:
let port=$f7fe
let a=in(port)
let klawisz=a
let oczekiwane=$00fb

...

Efekt jest jaki jest - działa... zwykle ;)

edit: Znalazłem stronę na której jest info, że Abu Simbel wyszło w tym samym roku na MSX i Spectrum... Może kod był pisany dla MSXa a potem dostosowywany do Spectrum... Nie wiem - nie chcę zgadywać :)