Cygnus SIF Terminal - SIF Term

Co je SIF?

Protože informace z internetu mizí, myslím, že je na místě stručný úvod proč a k jakému zařízení SIF Terminál, zkráceně SIF Term, vznikl.

SIF je unikátní sériový interface se dvěma čipy 16C650 pro klasické ZX Spectrum. Navrhl a vyrobil ho Pavel Urbančík možná počátkem roku 2009, dokumentace je z 7.3.2009. Já se k němu dostal pravděpodobně v dubnu 2009 soudě dle nejstarších softwarových pokusů v mém archivu, první pokusy s terminálem jsou z května 2009. A jako se vším i SIF mě na čas zaujal, než jsem se začal zabývat něčím jiným. A to v průběhu mnoha let opakovaně, podle toho, co jsem zrovna měl chuť řešit, nebo potřeboval přidat.

foto

SIF je pravděpodobně nejlepší sériový interface, co kdy pro ZX Spectrum vznikl. Nejenom, že obsahuje skutečný a velmi dobrý UART NXP 16C650, ale obsahuje rovnou dva. Přičemž první z nich je vyvedený na standardní 9 pin DSUB skrz konvertor úrovní MAX3243, druhý UART je k dispozici pro připojení síťového modulu rovnou na 3.3V logiku, nebo ho lze použít pro infraport.

Použití UARTu, čipu který sám provádí serializaci i řízení toku dat, je u pomalého počítače naprosto zásadní. Není to tak dlouho, co jsem se zabýval použitím softwarové RS232 v originál ZX Spectrum 128k. Dosáhnout vyšších přenosových rychlostí pouze s pomocí Z80 je možné (min. 57600bps), ale procesoru při tom nezbude čas na cokoli dalšího. Není šance přenášet data oběma směry současně a při tom stíhat řízení toku dat a ještě přijatá data zobrazovat na obrazovce. To je na ZX Spectrum možné pouze se skutečným UARTem, nebo možná za cenu velmi nízké přenosové rychlosti.

foto foto

Bohužel první verze SIFu nebyla navržená správně, plošný spoj obsahoval několik chyb, opravených několika přeškraby a drátovými propojkami a původně zamýšlený ethernet modul LTRX XPort, zmíněný v manuálu k SIFu Pavel Urbančík nahradil lepším ConnectOne modulem (na výběr byla Ethernet nebo WiFi verze) ještě před tím, než se SIF začal šířit mezi uživateli. Modul ConnectOne je dodnes v některých ohledech schopnější, než o mnoho let později velmi levně dostupné moduly ESP8266. I ty v roce 2021, kdy toto píšu, už zastarávají a nahrazuje je jejich modernější verze. Ale protože ConnectOne moduly byly drahé, v roce 2009 se jejich cena pohybovala okolo 1000Kč, tak jich je mezi lidmi ještě méně než SIFů. Sám jsem si ConnectOne modul k SIFu kupoval později.

foto foto

Ostatně, moje verze SIFu je jedna z prvních, ne-li úplně první, kterou Pavel Urbančík zveřejnil a vyráběl. Určitě existovala nejméně jedna novější, opravená. Funkčně, pokud vím, se neliší.

Od Pavla Urbančíka existuje i FTP klient, který tehdy tuším předváděl na Bytefestu a zachovalo se o něm toto video na Youtube. Netuším, jestli má ten program i někdo v archivu. UB880 později napsal IRC klient ke stažení na Sourceforge. Já vytvořil, kromě SIF Termu i jednoduchý patch pro ZX ROM umožňující přenášet TAPky pomocí standardních příkazů LOAD a SAVE a kopírovadlo obrazů TRDOSových disket.

  • SIF.pdf - lokální kopie originální dokumentace od Pavla Urbančíka (verze 0.1 7.3.2009)
  • SC16C650B-03.pdf - lokální kopie datasheetu k použitým čipům
  • odkaz na web NXP - výrobce čipu SC16C650B

SIF Term - vlastnosti a nastavení

Po pár měsících vývoje promíchaných s mnoha lety přestávek se ze SIF Termu postupně stal program, který už snad začíná být i k něčemu užitečný.

Jak vznikl?

Začalo to, jak jinak, pokusem o zobrazování přijatých dat. Pavel Urbančík k SIFu napsal ukázkový program v BASICu, který sice něco dělal, ale prakticky moc použitelný nebyl. Přes svou pomalost a neohrabanost program posloužil jako dobrá ukázka toho, jaké výhody skutečný UART s hardwarovým řízením toku dat přináší.

A protože jsem chtěl posílat a přijímat data pohodlněji, zvlášť při komunikaci s tehdy čerstvě pořízeným ConnectOne modulem, začal jsem vymýšlet, jak to vylepšit. Nemaje tou dobou ani náznak tušení, co by terminál měl dělat, pokusil jsem se napsat totéž v assembleru. Když nic jiného, bylo to alespoň rychlejší. Původním cílem tedy nebylo napodobit některý z linuxových terminálů, ani prastarou VT100, ale prostě jen posílat text zadaný na klávesnici ZX Spectra a zobrazovat, co bylo přijato.

Požadavky programu

Program je psaný pro libovolné ZX Spectrum 48k s připojeným SIFem. Měl by běhat na jakékoli konfiguraci, nejčastěji ho používám na ZX Spectrum 128 +2, někdy s Betadiskem, jindy s DivIDE. Obojí společně s 8255 (UR-4, nebo UPI), s Simple RTC a KMouse.

Variant SIFu mnoho není, pokud vím, jsou jen dvě, ale SIF má konfigurovatelnou základní adresu portu. Lze volit mezi čtyřmi možnostmi. Proto je i v programu možné přepnout základní adresu portu na některou z dalších existujích variant. Např. pro Didaktik Kompakt bylo nutné port změnit, aby nekolidoval se zabudovanými periferiemi.

dec hex bin pozn.
99 0x63 011xxx11b
131 0x83 100xxx11b výchozí adresa
195 0xC3 110xxx11b
227 0xE3 111xxx11b

Bity označené křížky se používají k volbě jednotlivých portů UARTu. Viz datasheet čipu 16C650, návod k SIFu i poznámky ve zdrojovém kódu SIF Termu.

Co SIF Term umí?

Přijímat data ze sériového portu a v reálném čase je zobrazovat jako text. Přijatá data ukládá do historie, kterou lze při pozastaveném příjmu procházet. Historie je velká 16kB, kvůli zjednodušení jeden nejstarší řádek nelze zobrazit, ale i tak se k poslední zaplněné obrazovce vysoké 23 řádků dá vrátit dalších 232 řádků do minulosti (po třetinách obrazovky). SIF Term tedy uživateli zpřístupňuje až 255 řádků po 64 znacích přijatého textu.

Odesílat data ze sériového portu pomocí příkazového řádku s pohodlnou editací a historií odeslaných příkazů. SIF Term si pamatuje posledních 10 odeslaných příkazů, ke kterým se lze vrátit, upravit a odeslat znovu.

Editaci příkazového řádku může usnadnit režim se zapnutými shifty (Caps Lock, Symbol Lock), zvláště u počítačů s vícevrstvou membránou u kterého mohou zlobit některé kombinace kláves s jedním ze shiftů.

Nastavovat parametry obou UARTů nezávisle a přepínat mezi nimi v hlavním menu.

Ovládání

Po spuštění se jako první zobrazí základní nastavovací menu s výběrem a nastavením sériového portu. Pro každý port je konfigurace samostatná a nezávislá na tom druhém. Kromě ručního nastavení lze vybrat i z několika připravených konfigurací, většinou podle toho, co jsem zrovna potřeboval připojit.

Na položky v menu lze klikat šipkou, která se ovládá buď klávesami OPQAM a 67890 (Sinclair Joystick), nebo myší podle zvoleného standardu, pokud je myš zvolena. KMouse se program snaží detekovat, nepodaří-li se, bude předvoleno ovládání pouze klávesnicí. Resp. ovládání klávesami funguje vždy bez ohledu na zvolenou myš.

  • OPQA, 6789, myš - pohyb kurzoru
  • 0, M, N, tlačítko myši - volba
  • WS, nebo skrolovací kolečko - přepínání mezi volbami

S ovládáním mohou pomoct i klávesové zkratky

  • 1 = přepne na UART 1
  • 2 = přepne na UART 2
  • C = cyklicky přepíná ovládání mezi ovládáním pouze klávesami, nebo kombinací klávesnice + AMouse, nebo KMouse
  • H = zobrazí stručnou nápovědu
  • I = zobrazí inicializační sekvenci OUTů pro SIF sestavenou z navolených parametrů
  • E, nebo X = exit, návrat do BASICu
  • T = spustí terminál
  • R = čtení portů zvoleného UARTu
  • SPACE = uzavře podmenu bez zvolení položky

Infraport je možné navolit i pro UART 1 i když to s původním SIFem nemá smysl. Takové zařízení může existovat, nic tomu nebrání, takže jsem volbu ponechal.

screenshot screenshot screenshot

V menu je dobré nejprve zkontrolovat základní adresu portu. Musí se shodovat s adresou nastavenou na SIFu pomocí propojek. Předvolena je nejčastěji používaná výchozí 131.

Pak následují další parametry, jako rychlost komunikace (baudrate), velikost slova, parita, počet stop bitů atd... Tyto parametry, s výjimkou echa, musí být na obou propojených zařízeních nastavené stejně, jinak bude docházet k chybám při přenosu, nebo se v horším případě nepřenese správně ani byte.

screenshot screenshot screenshot

Po nastavení parametrů sériového portu lze zobrazit sekvenci OUTů příp. použitelnou v jiných programech.

SIF Term - režim terminálu

To je ta nejdůležitější část celého programu. Funguje jako neinteraktivní režim s příkazovým řádkem. Zadaný řetězec je po dokončení editace potvrzené stiskem Enteru odeslán přes RS232. Do té doby ho lze libovolně a upravovat. Řádek může být dlouhý až 253 znaků a bude ukončený znakem CR, nebo dvěma znaky CR a LF podle nastavení v hlavním menu.

Z režimu terminálu se do hlavního menu dá vrátit stiskem klávesy Break.

Pokud má editační řádek barvu jasně žlutou, tak lze jeho obsah editovat. Pokud má barvu tmavě žlutou, tak probíhá odesílání jeho obsahu. To bývá zřetelné u nižších přenosových rychlostí, nebo pokud přijímající počítač pozastaví tok dat.

screenshot screenshot

Historie příkazů

Odeslané řetězce se ukládají do historie, odkud se při každém přidání nového odstraní ten nejstarší. Do historie se dá dostat dvojím stiskem směru nahoru, nebo jedním stiskem, je-li už kurzor na začátku editovaného řetězce. Řetězec vybraný v historii odeslaných se do editace přesune stiskem Enteru, nebo šipky vpravo. Tím se nahradí, co bylo v editačním řádku před tím.

  • směr nahoru - skok na začátek editačního řádku, nebo vstup a procházení historií příkazů
  • směr dolů - skok na konec editačního řádku, nebo procházení historií příkazů

Procházení historií příkazů je signalizováno bílým pozadím editačního řádku.

Snažil jsem se, aby to bylo tak pohodlné, jak je jen možné po vzoru linuxových terminálů. Jen ta historie příkazů je samozřejmě velmi omezená dostupnou pamětí. V poslední verzi programu se do historie vejde 10 odeslaných řetězců. Na jejich délce nezáleží.

screenshot

Režimy klávesnice

S Hoodem jsme při testování narazili na potíže se čtením kláves, které jsme později zkoumali s UB880 a ukázalo se, že se týkají všech počítačů ZX Spectrum s vícevrstvými membránami, tj. modelů ZX Spectrum 48+, ZX Spectrum 128k+ toastrack i šedé ZX Spectrum 128k +2 od Amstradu. Netýkají se gumáků, Didaktiků a dalších modelů. Aby to nebylo tak jednoduché, ty potíže se neprojevují vždy stejně, někdy nefunguje shift jen s jednou, nebo dvěma klávesami, jindy s celým sloupcem, nebo i více. Někdy pomůže malá kapacita paralelně k diodám na desce ZX Spectra, jindy ne... Situaci komplikuje i to, že kvůli přerušení musím číst klávesnici ve stejný okamžik po 50Hz přerušení. Kdybych četl klávesnici v různý čas, na některých počítačích by se problém neprojevil.

Pokud na potíže s klávesnicí narazíte, je SIF Term vybavený možností přepnout podprogram pro čtení klávesnice (viz Extend režim). Ve výchozím stavu se používá podprogram ze Sinclair ROM a alternativně je k dispozici funkčně stejný, ale umístěný na jiné adrese v RAM (upravený kód od Busyho). V praxi se ukázalo, že se potíže s klávesnicí projevují na různých místech v adresním prostoru Z80 různě. V některých případech může volba podprogramu pomoct.

  • Caps Shift + 2 (Caps Lock) = Caps Lock (azurový okraj)
  • Caps Shift + 9 (Graph) = Symbol Lock (purpurový okraj)

Pokud by ani to nestačilo, tak je k dispozici nejenom Caps Lock, ale i Symbol Lock režim. Po přepnutí do něj se caps shift, nebo symbol shift zamkne, je možné napsat, co je potřeba jakoby se stisknutým shiftem a přepnout se zpět.

Rozložení znaků se Symbols Shiftem je blízké BASICu, pokud to dávalo smysl, pouze s několika výjimkami.

Scroll Lock

  • Symbol Shift + S = Scroll Lock (červený okraj)

Další užitečnou funkcí je Scroll Lock. Při jeho zapnutí přestane SIF Term přijímat data ze sériového portu, aby si uživatel mohl v klidu přečíst, co bylo přijato. Oproti skutečnému Scroll Locku na Unixových terminálech se ale nezablokuje veškerý výpis textu. Je-li povolené echo, tak se bude stále vypisovat, co bylo odesláno.

Aby Scroll Lock nevedl ke ztrátě dat, musí být správně nastaveno řízení toku dat, nejlépe pomocí signálů CTS RTS.

Historie přijatých dat

  • Caps Shift + 3 = PgDown, procházení historií kupředu k pozdějším řádkům (modrý okraj)
  • Caps Shift + 4 = PgUp, procházení historií zpět víc do minulosti (modrý okraj)

A nakonec možná nejdůležitější vlastnost SIF Termu je historie přijatých dat. Data přijatá ze sériového portu se ukládají do kruhového bufferu, kterým lze v libovolný okamžik procházet. Během procházení se terminál sám přepne do Scroll Lock režimu a příjem dalších dat pozastaví, dokud se uživatel stiskem klávesy T, nebo Caps Shift + S nerozhodne vrátit zpět.

Kombinaci kláves Caps Shift + 3, nebo 4 jsem zvolil podle programu Desktop, kde se tato kombinace taky používá stejným způsobem, jako PageUp/PageDown.

  • B = při procházení historií skočí na začátek (nejstarší řádky)
  • E = při procházení historií skočí na konec (nejnovější řádky + editační dialog)
  • R = při procházení historií překreslí obrazovku, nemělo by se viditelně projevit
  • T, nebo Break = při procházení historií přepne zpět do terminálu, ale Scroll Lock nechá aktivní
  • Caps Shift + S = při procházení historií přepne zpět a vypne Scroll Lock

Díky historii je také možné z terminálu vyskočit zpět do nastavovacího menu (nebo i do BASICu), změnit parametry sériového portu, nebo zvolit druhý UART a zase se vrátit do režimu terminálu, aniž by se ztratila dosud přijatá data.

Extend menu

  • Caps Shift + Symbol Shift (Extend) = Extend menu (zelený okraj)

Kdykoli v režimu terminálu lze zapnout i Extend menu. Původně jsem uvažoval i o klikací klávesnici s možností zadávat kódy znaků číslem. Ale to se v tuto chvíli už nevejde. Možná nějaké vylepšení přibude, až se mi bude chtít přeorganizovat rozmístění v programu v paměti a nedůležité části přesunout do zpomalené RAM. V prostoru 49152 až 65535, který program obsazuje nyní už nezbývá dost místa.

Extend menu lze uložit na pásku screenshot, nebo uložit na pásku historii odeslaných příkazů a přepínat mezi dvěma podprogramy v ROM/RAM pro čtení klávesnice.

A nedávno jsem do něj přidal i možnost vkládat řídící znaky. Prozatím znak TAB a znak ESC, který mi chyběl nejvíc.

screenshot

Je SIF Term rychlý?

Jak se to vezme. Je a není.

SIF Term je hodně optimalizovaný na rychlost, používá rozvinuté smyčky, zjednodušené adresování a spoustu dalších drobných triků, ale zároveň běží na ZX Spectru, které nemá textový režim a znaky se musí kreslit i scrollovat v grafice. Vykreslování 64 znaků na řádek je tedy pomalé. Když se to zkombinuje s režií na zpracování dat a obsluhou klávesnice na 3.5MHz Z80... tak výsledek není špatný. Nečekejte ale, že když nastavíte 115200bps, tak program bude přenášet 11520 znaků/s. Té rychlosti se SIF Term ani nepřiblíží. Reálně se přenosová rychlost pohybuje velmi zhruba okolo 700 až 900 znaků/s podle toho, jak moc musí program odřádkovávat a scrollovat.

Bez hardwarového UARTu, který se postará o serializaci i o řízení toku dat by nebylo možné ani to.

Nedostatky

Chybí escapování znaků a možnost samostatně odeslat řídící kódy jako třeba Enter, nebo přímo číslem zadané kódy.

Chybí interaktivní režim s emulací VT100, nebo jiného skutečného terminálu, ale dosud jsem pro to nenašel rozumné praktické využití, možná někdy až to budu skutečně potřebovat.

Chybí možnost ukládání dat na disk, nebo na pásku. V nouzi lze obejít návratem do BASICu a uložit data tam.

Download

Související odkazy

Historie změn článku

  • 2011-05-23 - napsáno, zveřejněno
  • 2019-01-01 - drobné změny, další verze SiF termu
  • 2021-08-24 - radikálně přepsáno, doplněn úvod o SIFu, nová verze SIF Termu, víc detailů o ovládání

[ Zpět na hlavní stránku ]

Tento web je převážně o ZX Spectru, kompatibilních počítačích a jiném zajímavém hardwaru. Naleznete-li chybu, nebo byste rádi cokoliv co s tímto souvisí, můžete mi napsat email. Stručně o mém webu zde.