forum speccy.pl
Komputery z Z80 => CP/M - kompatybilne => Wątek zaczęty przez: trojacek w 2021.06.08, 15:08:20
-
Za namową jednego z naszych forumowych kolegów, zacząłem zaglądać do kodu Timex Terminala 3000, celem jego prostej transplantacji na TC2048. Generalnie chodzi o to, by mieć 80-kolumnowy terminal na TC2048/2068. Może się to uda, może nie, a może urodzi się jakiś ulep z kodem z różnych źródeł ;). Z robotami ruszę gdzieś w lipcu, bo wtedy powinienem mieć trochę wytchnienia :).
Na razie tylko deasembluję i przyglądam się rezultatom, no i odkopałem kilka ciekawych postów znalezionych na forum.
Na przykład pomysł sklonowania TT3000: https://www.speccy.pl/forum/index.php?topic=4693.msg82695#msg82695.
W deasembowanym kodzie widzę trzy zestawy fontów, w tym jeden z 32 ramkami. Widać też, że do komunikacji z FDD używany jest port #BF (czyli inny, niż w interfejsie M-397), jak również port ten, wraz z liniami A15-A8, obsługuje dodatkowe (nieistniejące w TC2048) rzędy klawiszy.
Tak więc mój pierwotny pomysł - by ROM TT3000 wrzucić w płytę TCC2048 - spalił na panewce. Nawet po zmianie portu do FDD to nie zadziała, bo będzie brakować klawiszy kursorów, Shift, Control i innych. Innymi słowy, trzeba wystrugać coś na bazie kodu z TT3000 i kodu z któregoś z emulatorów terminali (czyli programów wgrywanych do TC2048 lub ZX Spectrum).
Tak więc mamy trzy rodzaje terminali:
• TT3000, wyświetlający w 80 kolumnach (fizycznie licząc od trzeciej do 82), 3 zestawy znaków i ramki,
• Emulator terminala firmy Timex dla TC2048/2068, wyświetlający w 64 kolumnach,
• Emulator terminala firmy Polbrit dla ZX Spectrum, wyświetlający w 64 kolumnach, ale z matrycą 8x4 piksele (256x192), oferujący polskie znaki, kolorowanie tekstu, możliwość korzystania z grafiki, obsługę lokalnego portu drukarki (jakiś interfejs Centronics), dodawania własnych driverów (przypinanie własnych snippetów do określonych escape-kodów).
Żeby było weselej, wygląda na to, że każdy terminal obsługuje inny zestaw kodów sterujących - zarówno tych podstawowych (o kodach 0..31), jak i escape-kodów (czyli sekwencji po kodzie 27). Coś tam z ANSI, coś z VT100 lub VT52, trudno powiedzieć :) Dlatego właśnie zależy mi na zobaczeniu instrukcji obsługi od TT3000, która niestety zniknęła spod linka, którego kiedyś podawałem (https://www.speccy.pl/forum/index.php?topic=2006.msg81253#msg81253).
I tak zupełnie przy okazji - @Pear, wspominałeś, że miałeś bibliotekę graficzną rozszerzającą Timex Terminal Emulator, znalazłeś ją może? :)
-
Znaleźć to nie problem, ale zgrać to już bardziej.
Jest na 3" dyskietce pod TOS-em, a źródła są oryginalnie w assemblerze ZEUS.
Zabij, nie pamiętam jak to się obsługiwało.
-
Nie szkodzi, że Zeus, coś się wykombinuje, tylko znajdź ten plik (czy pliki), pliiiiz :)
-
ZEUS jest pod Windowsa: http://www.desdes.com/products/oldfiles/index.htm
-
pear - a możesz udostępnić obraz tej dyskietki?
-
No właśnie wróciłem z garażu. Udało się zgrać.
Obraz zawiera chyba wszystko co ważne miałem/mam na dyskietkach pod TOS (obraz ma po 80 ścieżek na dwóch stronach, czyli 640KB).
W głównym katalogu są 2 pliki FN.ASM i GRPH64.ASM. To jednak nie ZEUS tylko jeszcze jakieś inne ustrojstwo co potrafiło współpracować z plikami na dyskietkach.
Próbowałem wyłuskać te 2 pliki SCADM-em, żeby podejrzeć, ale ten program pokazuje tylko pierwszych sto plików z katalogu dyskietki :( Tam jest znacznie więcej nagrane.
EDIT:
W razie czego jeszcze gdzieś się chyba znajdzie wersja skompilowana do porównania, czy to aby na pewno ostatnia wersja.
I proszę mnie nie pytać co i jak, bo pisałem ten kod, gdy byłem jeszcze przystojnym murzynem z kręconymi włosami.
-
Oto dwa rzeczone pliki. Faktycznie trzeba je trochę obrobić, by przypominały czytelny listing.
-
To ja chyba jeszcze ten wynikowy plik zgram, ale to jutro już. Możliwe, że na tej dyskietce będzie też zmodyfikowany terminal, który ten pakiet graficzny ładuje przy starcie.
-
Na tym samym obrazie jest też ASM, którym te pliki zostały zrobione. Może Ci się uda rozkminić polecenia do obsługi. Mnie się to 30 lat temu udało, instrukcji nie miałem ;)
-
Tak, widziałem, może w wolnej chwili spróbuję (ale może ktoś się okaże szybszy).
-
To ja chyba jeszcze ten wynikowy plik zgram, ale to jutro już. Możliwe, że na tej dyskietce będzie też zmodyfikowany terminal, który ten pakiet graficzny ładuje przy starcie.
Hmm, nie widzę... Tak wyglądają katalog główny i folder TERMINAL:
-
ASM i ASM.BIN to pliki assemblera.
Zmodyfikowany terminal jest na oddzielnej dyskietce. Niestety nie zgrałem wszystkiego od razu na obraz DSK, bo po jednym pliku to strasznie upierdliwe jest ;)
W czym to tak ładnie można oglądać ?
-
W czym to tak ładnie można oglądać ?
https://www.speccy.pl/forum/index.php?topic=722.msg8516#msg8516
Gdzieś to chyba Tygrys wrzucał, ale chyba tylko na svn-a.
-
A gdyby tak odczytać te pliki asm jako binarne ?
Teraz są oznaczone jako BASIC i stąd mają te dziwne numery linii.
-
Tłumaczone półmaszynowo, więc nie gwarantuję że bezbłędnie.
ale przynajmniej się kompiluje (w każdym razie wszystkimi czterema kompilatorami które mam na dysku ;) )
-
Fiu, fiu, dobra robota, steev!
-
Na deser wszystkie bejziki en masse.
To już w pełni maszynowo ;)
-
Dzięki :) Hm, mam tylko wątpliwości, czy to na pewno to, bo coś za krótkie mi się wydaje.
Poprzeglądam jeszcze inne dyskietki.
-
Korzystając z drobnych przestojów w pracy oraz faktu, że zawsze mam włączone co najmniej 2 laptopy z dedykowanymi monitorami, zezowałem (zezem rozbieżnym, oczywiście) dziś sporo do kodu TT3000. A tam - kilka niespodzianek.
1. Terminal jest zrobiony "na motywach" VT52, ale oczywiście są pewne rozbieżności (do przełączania fontów oraz włączania/wyłączania inwersji wykorzystano kody, które w VT52 służą do innych celów). Do tego jest ładnie zaimplementowany bufor klawiatury, no ale to w zasadzie standard w terminalach.
2. Mapowanie klawiszy zrobiono wręcz elegancko. Bardzo łatwo je zmodyfikować do innego układu klawiszy (nie dotyczy 8 klawiszy specjalnych, czytanych z portu #nnBF). Banalizuje to poprawienie układu klawiszy do jakiegoś sensownego, współczesnego standardu, gdyby ktoś się podjął zrobienia klona TT3000 :) Pozwala to na zaadaptowanie jakiejś mniej lub bardziej generycznej klawiatury, o ile tylko jej matryca zmieści się w docelowej siatce 8x8 (tyle da się osiągnąć bez głębszego kombinowania, bo w porcie #BF pozostał jeszcze bit D6 do wykorzystania).
3. Matryca klawiatury to niezła kombinacja :) W zasadzie trzon jest odziedziczony po Spectrum/TC2048, do tego wspomniany port #nnBF (nn to stan niski wystawiany na jednej z linii A8-A15 - brzmi znajomo?) dla 8 dodatkowych klawiszy specjalnych, no ale jak zacząłem liczyć klawisze, doliczyłem się kolejnych 8 :D Otóż kody klawiszy nie są odczytywane po 5 bitów (D0..D4), tylko... po 6 (bo jeszcze dodatkowo D6). Szósta linia została wykorzystana, bo przecież terminal nie wykorzystuje magnetofonu, zatem wejście EAR jest w SCLD wolne :)
4. Jak już wspominałem, port #BF jest wykorzystywany do komunikacji z FDD. Do wysyłki służą bity 0..3 (czyli młodszy "nibble"), a bity 4 i 5 służą do sterowania przesyłem (natomiast bit 7 steruje diodą LED w klawiszu CAPSLOCK). W drugą stronę - z FDD do TT - jest tak samo (przy czym na bicie D7 pojawia się dodatkowo stan klawisza, zaadresowanego jedną z linii A8-A15, jak opisywałem powyżej).
5. Beeper siedzi na porcie #FE jak w Spectrum/TC2048 i służy do produkcji dźwięku przy naciskaniu klawiszy oraz przy "drukowaniu" kodu 07h (BELL).
6. Przy weryfikowaniu list kodów klawiszy z i bez shifta odkryłem, że w jednej z wersji klawiatury jest błąd na keycapie - znakowi zapytania towarzyszy backslash (\) zamiast slasha (/). Ma tak klawiatura z capsami podobnymi do klawiatury LoProfile. Wersja z "kółeczkami" na palce (coś jak klawiatury Siemensa) ma ten opis poprawiony.
7. TT3000 po starcie/resecie przeprowadza test ROM i RAM. Jak coś nie gra - wyświetla stosowny komunikat po portugalsku i się haltuje.
No i czas mi się skończył, do usłyszenia w następnym odcinku :)
-
No to mały teaser :)
Pozostaje mi przywieźć sobie fizyczne FDD3000 i sprawdzić, czy naprawdę działa.
-
A będzie też wersja PC?*) :)
*) lin/win
-
Yyy, nie rozumiem? Mało masz apek terminali na PC?
-
Obsługujących wszystkie kody i dewiacje terminala dla FDD3(000)?
Hm, gdzieś tak... zero.
Jak jest to się chętnie dowiem.
-
Jakie dewiacje? To jest podzbiór VT52. Jedynym nietypowym kodem jest przełączanie na czcionkę portugalską (Esc N + litera łacińska).
-
Hm.
Co w takim razie obsługiwało w przykładach z Twojej (niestety nieco uszkodzonej) dyskietki kody (^ = ESC) :
^O, ^P, ^Q, ^G, ^F, ^T0, ^T1, ^N, ^WD, ^WG i inne odpowiedzialne za grafikę i okna.
Terminal TMX (z szybkiego rycia kodu widzę, że chyba nie), terminal Unipolbrit, jakieś rozszerzenie ładowane na ZX przed/po terminalu , Masaj?
-
Nie wiem, o czym piszesz. Grafika, okna? To nie jest VT52, mogę tylko zgadywać, że chodzi o jakieś rozszerzenia polbritowskie. Jak widzę, tytuł wątku okazał się adekwatny :D
Timex Monitor Emulator (dołączany standardowo do oryginalnej stacji FDD3000) obsługuje kody:
A (Cursor Up) - wiersz w górę
B (Cursor Down) - wiersz w dół
C (Cursor Forward) - znak do przodu
D (Cursor Back) - cofanie o znak
F - zmiana na graf font
G - zmiana plain font
H (Cursor Position) - SCREEN home
I - kursor w górę z ewentualnym scrollem
J (Erase in Display) - czyszczenie od kursora do końca ekranu
K (Erase in Line) - kasowanie linii na prawo od kursora
Y (Direct Cursor Address) - ustawianie kursora (włączenie oczekiwania na parametry)
Z (Identify) - wysyłka Esc + "/Z.", identyfikacja
L - INVERSE ON
M - INVERSE OFF
N - znak z innego fontu (PT)
OK - kombinacje Esc+L i Esc+M mają inne funkcje, niż w VT52. To faktycznie może powodować problemy, choć tak na oko, programy typu WordStar działają prawidłowo z tym terminalem.
TT3000 obsługuje dodatkowo kody Esc+O i Esc+P, ale na jakieś swoje wewnętrzne potrzeby (wygląda to na włączenie/wyłączenie obsługi kilku znaków specjalnych z puli 127-255).
Obrazek z Wikipedii (https://en.wikipedia.org/wiki/VT52).
-
Nie wiem, o czym piszesz. Grafika, okna? To nie jest VT52, mogę tylko zgadywać, że chodzi o jakieś rozszerzenia polbritowskie. Jak widzę, tytuł wątku okazał się adekwatny :D
Piszę o tym co w załączniku :)
Wiem że to nie czysty VT52.
Przypuszczam że masz rację. Ale nie mam siły na analizę unipolbriterminala żeby to zweryfikować :(
A tytuł wątku w 101% trafny :>
---
edit : Jak mówi Księga : 'szukajcie aż znajdziecie' ;/
-
No, ja w pełni rozumiem, sam odkładam temat mutacji polbritowskiej na jakąś nieokreśloną przyszłość. Wolałbym się skupić na wersji timexowej i ewentualnie ją rozbudowywać o jakieś funkcjonalności. Może nawet o wspomniane już ramki i grafikę :)
Jednak jako priorytet chciałbym umożliwić zmianę mapowania kodów Esc. Nie jest to jakiś rocket science, a pozwalałoby uruchamiać pogramy CP/M wymagające nieco odmiennych funkcjonalności terminala (na przykład Esc+L i Esc+M do dodawania/kasowania linii). Może nawet udałoby się zaimplementować nowsze wersje protokołu.
W załączeniu artykuł z Bajtka, zawierający spis kodów polbritowskich.
-
A tak wygląda porównanie procedur wysyłki zawartości rejestru B do FDD.
Po lewej - kod TT3000.
Po prawej - kod z programu terminala dla TC2048.
Instrukcje z użyciem (iy+04h) to nakładanie statusu CapsLocka, nie występuje w TC2048. Dla zwiększenia czytelności kod TC2048 ma tam puste linie.
W negatywie - znalezione przeze mnie różnice, dotyczące, jak widać, starszych 4 bitów wysyłanych/odbieranych do/z FDD.
Opis bitów dla in/out:
D0..D3 - dane in/out w formie półbajtów (nibble)
D4, D5 - TT3000: bity sterujące wysyłką/odbiorem, 2048: 00
D6 - 2048: sterowanie wysyłką/odbiorem (TT3000 nie używa tego bitu)
D7 - TT3000: out: LED CapsLocka, in: odczyt dodatkowego rządka klawiatury (nie używany w cytowanym kodzie), 2048: sterowanie wysyłką/odbiorem
-
Dla porządku jeszcze dodam, że w posiadanych przeze mnie wersjach ROMów dla TI, oprócz romów z sygnałami maskowanymi bajtem $c0 (flagi transmicji na bitach 7,6) znajdują się też romy maskowane bajtem $50 (bity 6,4)
BYĆ MOŻE różnice dotyczą wersji interfejsu (Asic / TTL)
-
A ja dla porządku dodaję jeszcze sporządzony na szybko z natury szkic dekodera I/O.
Wyjście "3" aktywuje LS244, wyjście "11" - LS273.
Jak (chyba) widać, jedyną linią adresową używaną do dekodowania jest A6.