Tu kaBel nebo taky když už je USB USBC tak co třeba USA
ZX Spectrum se dostane na internet jen po dvou drátech: místo kazetového magnetofonu je do konektoru MIC připojený modul ESP8266. Po stejné lince, po které se kdysi nahrávaly hry z kazety a na kazety, teď běží obousměrný terminál se 40 znaky na řádek, rychlostí asi 120 bajtů za sekundu tam i zpět a bez chyb.
Princip: dva vodiče místo kazety
Spectrum má pro magnetofon zvlášť zvukový vstup a výstup a obojí kupodivu vede na konektor MIC (v některých verzích ZX je to jinak, nutno vyzkoušet). ESP8266 se na něj připojí jedním signálovým vodičem a zemí. Na straně ESP stačí jeden pin (GPIO13 – zase nutno zkoušet), který se přepíná mezi vstupem a výstupem podle toho, kdo zrovna vysílá.
- ESP → ZX: ESP nastaví pin jako výstup a vysílá pulzy. Spectrum je čte stejně, jako by hrála kazeta: bit 6 portu $FE.
- ZX → ESP: ESP pin přepne na vstup a v přerušení si zapisuje čas každé hrany. Spectrum vysílá bitem 4 portu $FE, který na modelu 48K vede na stejný konektor MIC.
- Mluví vždy jen jeden. ESP řídí linku: pošle paket a čeká na odpověď. Spectrum samo nikdy nezačne, takže se signály nikdy nesrazí.

ESP8266 je jediný prostředník: se Spectrem mluví po dvou drátech konektoru MIC, s internetem přes WiFi. PC přes USB/Serial je potřeba jen pro nahrání programu a ladění.
Jak se terminál dostane do ZX
Terminál se nahraje úplně obyčejně, příkazem LOAD "". ESP se tváří jako magnetofon a přehraje nahrávku ve standardním formátu ROM: piloty 2168 T, synchronizační pulzy 667 a 735 T, bity 855 a 1710 T.
- Na Spectru se napíše
LOAD ""a Enter. - ESP pošle BASIC zavaděč s názvem
ESPtermT11a za ním strojový kód terminálu (asi 3 KB). - Kód běží od adresy
$E000se zakázaným přerušením. Písmo široké 6 bodů pro 40 znaků na řádek si vyrobí z ROM fontu a uloží na$F000. - ESP se zeptá na verzi. Když na ZX běží starší terminál, pošle mu příkaz k návratu do BASICu a nahraje nový.
BASIC zavaděč má na konci řádek s LOAD "". Když terminál skončí nebo se po hře Spectrum resetuje, stačí znovu LOAD "" a ESP terminál nahraje samo.
Hranový protokol: měří se jen čas mezi hranami
Vstup MIC je střídavě vázaný, takže ustálená úroveň se ztrácí a spolehlivě projdou jen změny. Proto obě strany přenášejí informaci délkou intervalu mezi dvěma hranami, ne úrovní signálu. Krátký interval je bit 0, dlouhý bit 1.
Jeden bajt je jeden rámec:
- Piloty: několik stejně dlouhých intervalů, podle kterých se přijímač zachytí.
- SYNC: jeden výrazně delší interval, který označí začátek dat.
- 8 datových bitů, nejvyšší bit první.
- Sudá parita: devátý bit, který odhalí jednu chybu v rámci.
Oba směry mají jiné časy, protože každá strana měří jinak. Spectrum počítá smyčkou o 45 T-stavech, tedy po 12,9 µs. ESP má přesný čítač mikrosekund.
| Směr a nastavení | Pilot (µs) | SYNC (µs) | Bit 0 (µs) | Bit 1 (µs) |
| ESP → ZX (E3, vždy) | 160 | 450 | 80 | 200 |
| ZX → ESP výchozí (P4) | – | 381 | 99 | 173 |
| ZX → ESP rychlé (P5) | – | 203 | 61 | 99 |
Spectrum vysílá časovací smyčkou: jeden interval trvá 26 × DE + 85 T-stavů.
Naměřená rychlost a spolehlivost
S rychlým nastavením (ZX → ESP P5, ESP → ZX E3) linka přenese asi 120 bajtů za sekundu tam i zpět a při dlouhých testech nevznikla žádná chyba. To je zhruba 3 řádky po 40 znacích za sekundu.
| Test | Doba | Výsledek |
| Seznam WiFi sítí tam a zpět, WiFi zapnutá | 30 min | 214 500 B, 0 chyb, 0 opakování |
| ČT teletext stránku po stránce | 183 stránek | 0 neshod |
| ESP → ZX rychlejší E4 (bit 0 60 µs), WiFi připojená | – | 1,8 % opakování, proto zůstává E3 |
| ESP → ZX E3, WiFi připojená | – | 0,4 % opakování |
WiFi běžící na pozadí příjem v ESP trošku ruší. Rychlost omezuje také měření na Spectru: smyčka o 12,9 µs potřebuje intervaly aspoň kolem 60 µs, aby bezpečně rozlišila bit 0 a 1. ZX vysílá ještě rychleji, protože ESP měří s přesností na mikrosekundy.
Používání
Po zapnutí se ESP připojí k uložené WiFi a čeká, až na Spectru poběží LOAD „“. Terminál se nahraje za několik sekund a ukáže výzvu >> . Každý napsaný znak se hned vrací z ESP jako ozvěna, takže na obrazovce je vidět, co opravdu dorazilo.
Stavová lišta v horním řádku má 32 znaků:
ESPterm3.02 CAPS 40 VIDEO 123k/99
- CAPS svítí, když je zapnutý CAPS LOCK.
- 40 nebo 32 je počet znaků na řádek.
- 123k/99 je počet přenesených bajtů a za lomítkem počet chyb, které bylo nutné opakovat.
| Klávesy | Co udělají |
| CAPS SHIFT + 2 CAPS | CAPS LOCK zapnout / vypnout |
| CAPS SHIFT + 3 TRUE | přepnout 32 / 40 znaků na řádek (obrazovka se nemaže, jen se odřádkuje) |
| CAPS SHIFT + 4 INV | barvy: bílá obrazovka s černým písmem, nebo obráceně |
| CAPS SHIFT + 1 EDIT | analýza spojení: statistiky obou směrů |
| CAPS SHIFT + SPACE (BREAK) | zrušit rozepsaný řádek, ukončit telnet |
Do úvodního nastavení se terminál vrací resetem Spectra a LOAD "".
Příkazy terminálu
Příkazy se píší za výzvu >> a vyřizuje je ESP. Velikost písmen nehraje roli.
| Příkaz | Co dělá |
| HELP | seznam příkazů a kláves (anglicky) |
| CLS | smaže obrazovku, stavová lišta zůstane |
| WIFI | vypíše okolní sítě, číslem se vybere síť a zadá heslo; heslo se uloží do paměti ESP |
| TELETEXT [stránka] | ČT teletext, výchozí stránka 100; potom stačí psát čísla stránek, prázdný Enter režim ukončí |
| TELNET [server port] | připojení k telnetovému serveru; bez adresy nabídne 8 BBS k výběru číslem |
| GAMES | 17 her v TAP, nahrají se běžnou rychlostí ROM |
| OTLA | hry v rychlém formátu OTLA (nahrání za několik sekund) |
| GETTAP [adresa] | stáhne TAP z webu a nahraje ho do Spectra; bez adresy vypíše soubory z sindik.at/data |
| DEMO | dokola vypisuje okolní WiFi sítě, a když se může připojit, promítá všechny stránky teletextu |
| TIME | velké hodiny HH:MM z internetu, každou minutu nové |
| SERIAL [1|2|3] | režim sériové linky ESP (viz další oddíl) |
U DEMO a TIME režim ukončí libovolná klávesa. Hodiny mají 31 znaků na šířku, takže se vejdou do 32 i 40 sloupců.
Ovládání z PC přes sériovou linku
ESP je s PC propojené přes USB (sériový port 115200 Bd). Příkaz SERIAL určí, k čemu port slouží:
| Režim | Název | Co jde do PC a z PC |
| SERIAL 1 (výchozí) | monitor | DEBUG záznam o činnosti ESP; text z PC se vypíše na Spectru |
| SERIAL 2 | serterm | Spectrum a PC si píšou jako dva terminály; BREAK na Spectru vrátí režim 1 |
| SERIAL 3 | mirror | do PC jde kopie textu, který se vypisuje na Spectru, bez stavové lišty |
V každém režimu fungují řádky začínající vykřičníkem:
| Příkaz | Co dělá |
| !cmd <příkaz> | spustí příkaz terminálu, jako by se napsal na Spectru, např. !cmd TIME |
| !serial <n> | přepne režim sériové linky |
| !stat | statistika linky (pakety, opakování, chyby, volná paměť) |
| !zx | statistika ze strany Spectra |
| !wifiset <síť> <heslo> | uloží WiFi a připojí se |
| !load | znovu nahraje terminál do Spectra |
| !cls | smaže obrazovku Spectra |
| !quit | ukončí terminál, Spectrum se vrátí do BASICu |
| !test, !wifi, !ttx | automatické testy linky (seznam WiFi, teletext) |
Na PC stačí jakýkoli sériový terminál, například Serial monitor v Arduino IDE. Když je otevřený, nejde do ESP nahrát nový program, takže ho před nahráváním zavřete.
Hry: GAMES, OTLA a GETTAP
Všechny tři příkazy fungují stejně: ESP vrátí Spectrum do BASICu, kde už čeká LOAD "", a přehraje hru jako magnetofon. Hry jsou uložené v balíčku v nevyužité části 4MB flash paměti ESP, mimo samotný program.
- GAMES: běžné soubory TAP, přehrávané standardní rychlostí ROM, takže je načte každé Spectrum.
- OTLA: nahrávky ve formátu TZX s přímým záznamem signálu (blok 0x15), které si s sebou nesou vlastní rychlý zavaděč. Vzorek trvá jen asi 21–23 µs, proto ESP při přehrávání vypne WiFi i přerušení. Každou hranu časuje podle čítače taktů procesoru, takže se chyby nesčítají. Data z flash dočítá jen ve chvílích, kdy do další hrany zbývá dost času. Teď jsou v nabídce Manic Miner a atic_k7zx.
- GETTAP: bez adresy vypíše soubory TAP ze stránky sindik.at/data, dva na řádek s číslem. S adresou adresáře vypíše TAP z něj, s adresou souboru ho rovnou stáhne. Funguje http:// i https://. Stažený soubor se uloží do vyhrazených 236 KB flash a odtud se přehraje.
Novou hru přidáte na PC: TAP do složky games/ (a její jméno do seznamu v tools/make_games.py), TZX do složky otla/. Pak sestavíte a nahrajete balíček:
py tools/make_pack.py
py tools/upload_pack.py COM21
Program v ESP zůstává, do FLASH se nahraje jen balíček her. Balíček má teď 739 KB z 2 816 KB volného místa. Jméno hry v nabídce se bere z názvu souboru.
Pro vývojáře
Projekt má dvě části: strojový kód pro Z80 a program pro ESP8266 v Arduinu.
Program pro ESP se překládá pro desku Generic ESP8266 s rozložením flash 4MB (FS:none OTA:~1019KB). Jiné rozložení by překrývalo balíček her. V Arduino CLI je to esp8266:esp8266:generic:eesz=4M.
Autor: OK1VHB aka mATARIn, 23.10.2026