Ve druhém článku o sériové sběrnici SIO osmibitových domácích mikropočítačů Atari se budeme věnovat zařízením pro záznam dat, která se k této sběrnici připojovala. Mnohé z těchto zařízení zajímavým způsobem kombinují analogovou a digitální techniku, navíc navrženou s ohledem na co nejnižší výrobní cenu (což si pochopitelně vyžádalo řadu kompromisů). Asi nejlepším příkladem je datový záznamník XC12 určený pro připojení k osmibitovým počítačům Atari.
Co se dozvíte v článku
- Externí paměťová média používaná v dobách osmibitových domácích mikropočítačů
- Kotoučové a kazetové datové záznamníky (datarekordéry)
- Specializované kazetové záznamníky
- Na pomezí mezi kazetovým záznamníkem a disketou: ZX Microdrive
- Atari Program Recorder
- Atarácký kazetový záznamník XC12
- Propojení XC12 s počítačem přes SIO
- Formát záznamu dat
- Načtení spustitelného programu z kazety (boot)
- Schéma zapojení XC12
- Obvody realizující zápis dat na kazetu
- Obvody realizující čtení dat z kazety
- Simulace obvodů pro digitalizaci záznamu přečteného z kazety
- Průběžný přepočet záznamové rychlosti
- Přednosti a nedostatky standardního záznamu dat na kazetu
- Systémy pro zvýšení rychlosti nahrávání/načítání
- Turbo 2000 a jeho varianty
- Repositář s demonstračními příklady
- Odkazy na Internetu
Původně tento magnetofon umožňoval záznam a čtení dat rychlostí 600 Bd (resp. ještě nižší, spíše 550 Bd), navíc operační systém podporoval pouze přenosy dat po krátkých blocích, mezi nimiž byly mezery. Toto omezení některé programy a hry obcházely, protože měly krátký zavaděč nahraný standardním způsobem a poté následoval jediný blok dat bez mezer – takže se o případné chybě uživatel dozvěděl až na konci, po dlouhém čekání (neboli prvek očekávání byl nahrazen prvkem zklamání).
Relativně jednoduchou úpravou datarekordéru však bylo možné zvýšit záznamovou rychlost na hodnoty od 2000 Bd (české Turbo 2000) až po cca 6000 Bd (taktéž české Super Turbo), ovšem pro běžné kazety se maximální hodnota pro spolehlivý záznam dat pohybovala na hranici cca 3500 Bd. Další, méně častou úpravou, představovalo předělání datového záznamníku pro možnost záznamu ve čtyřech stopách (využití levého a pravého audio kanálu). Originální XC12 totiž data zaznamenával jen na jeden audio kanál.
Obrázek 1: Datový záznamník XC12, kterému se budeme věnovat ve druhé polovině dnešního článku.
Externí paměťová média používaná v dobách osmibitových domácích mikropočítačů
Uživatelé osmibitových domácích mikropočítačů Atari měli k dispozici, ostatně podobně jako jejich kolegové používající jiné značky dobových počítačů, více možností pro záznam dat. Jednotlivé možnosti resp. technologie se od sebe lišily především cenou, rychlostí čtení i zápisu dat a v neposlední řadě také spolehlivostí a trvanlivostí záznamu. Pravděpodobně nejrozšířenější způsob trvalého uložení dat představovalo, minimálně v našich podmínkách, použití magnetických pásek, ať již se jednalo o pásky navinuté na kotoučích nebo o pásky uložené v kompaktních kazetách. Důvodem značné oblíbenosti a rozšířenosti těchto paměťových médií byla především jejich velmi výhodná cena (samozřejmě po přepočtu na kB či MB); ostatně magnetické pásky jsou z tohoto důvodu stále upotřebitelné například pro provádění záloh dat o velkém objemu, i když se v tomto případě již nepoužívají původní kotouče s páskou či kompaktní kazety, ale specializovaná média.
Obrázek 2: Magnetická média, zde konkrétně magnetické pásky se používaly již v padesátých letech minulého století u mainframů, například na tomto sálovém počítači IBM System/360 Model 50. V popředí můžeme vidět jednotlivé kotouče s magnetickými pásky, v pozadí pak vlastní paměťovou jednotku provádějící čtení i záznamy dat.
Atari ovšem nabízelo ještě jednu technologii. Nejdůležitější resp. nejčastěji spouštěné aplikace bývaly dodávány i formou externích paměťových modulů obsahujících čipy s paměťmi ROM či EPROM – těmto modulům se říkalo cartridge. Ovšem to nebylo ani levné řešení, ani řešení vhodné pro ukládání nových dat. Na přelomu osmdesátých a devadesátých let minulého století se taktéž začaly i k osmibitovým domácím mikropočítačům ve větší míře připojovat disketové jednotky. V tuzemsku se používaly zejména diskety velikosti 5 1/4 a 3 1/2 palce, což znamená, že se nám ve větší míře vyhnuly pokusy některých firem o zavedení vlastních (proprietárních) typů disket nestandardní velikosti a/nebo formátu. Tento stav byl způsoben také tím, že se disketové jednotky začaly (například v tuzemsku) šířit vlastně až v době, kdy bylo o velikostech disket prakticky rozhodnuto a navíc bylo možné při použití disketových jednotek pro standardní velikosti disket nakupovat zahraniční součástky, konstrukční díly či čipy.
Obrázek 3: Velké popularitě se v zahraničí, především v USA, těšily disketové jednotky navržené Stevem Wozniakem (Wozem) pro osmibitové počítače Apple II. Hlavní příčinou oblíbenosti těchto disketových mechanik byla jejich příznivá cena, která vycházela z Wozova minimalistického návrhu jejich konstrukce i elektroniky. O kvalitě těchto mechanik svědčí i to, že některé z nich dodnes, tj. po dobu cca 35 až 40 let, spolehlivě pracují.
Obrázek 4: Tuzemská disketová jednotka nazvaná Didaktik 40 (či též D-40), která byla určena pro diskety o standardní velikosti 5 1/4 palce (tedy stejné rozměry, jako u Apple II, i když formát zápisu byl odlišný).
Kotoučové a kazetové datové záznamníky (datarekordéry)
Pro úschovu dat používali majitelé osmibitových počítačů zpočátku především různé kotoučové i kazetové datové záznamníky datarekordéry, tj. (většinou) periferní zařízení, u nichž se binární informace ukládaly na magnetickou pásku. Osmibitové tuzemské počítače byly vesměs vybaveny rozhraním pro připojení magnetofonů, takže si majitelé československých „osmibitů“ často namísto speciálních (a mnohdy těžko dostupných) zařízení, například dále popsaných jednotek SP210, SP210T, KZD-1 či ataráckého XC12, upravovali pro úschovu dat i běžné magnetofony určené původně pro záznam a přehrávání audia. Jednalo se buď o kotoučové magnetofony (které sice vedle malých osmibitových počítačů vypadaly poněkud neohrabaně, ale jejich kvalita byla mnohdy vyšší, než u běžných magnetofonů s kompaktními kazetami) nebo o magnetofony využívající standardní kompaktní kazety.
Obrázek 5: Klasická kompaktní kazeta, která byla využívána jak pro záznam audia (analogových signálů), tak i binárních dat. Tyto kazety se používaly v období zhruba mezi roky 1970 až 1990; po tomto datu již jejich rozšíření postupně sláblo na úkor kompaktních disků (oblast audia) či disketových jednotek a pevných disků (oblast ukládání dat). Dnes se opět rozšiřují v rámci retro hnutí.
Jedna kompaktní kazeta s délkou audio záznamu 90 minut měla při nahrávací rychlosti 2000 Bd (k rychlostem záznamu se ještě vrátíme) kapacitu přibližně: 90×60×2000/8/1024=1318 kB, což nebyla zanedbatelná hodnota (odpovídala přibližně čtyřem disketám s kapacitou 360 kB). Ovšem i v ČSSR se vyráběla specializovaná paměťová zařízení používající jako paměťové médium kompaktní kazetu, která bylo možné připojit k osmibitovým počítačům. S jedním z těchto zařízení jsme si již poměrně dávno na Rootu setkali – jednalo se o jednotku SP210T, která vycházela z kazetopáskové jednotky SP210 (největším rozdílem mezi oběma typy byla instalace jednojehličkové tiskárny BT-100 v jednotce SP210T). V obou případech se jednalo o jednotku umístěnou v kvalitní kovové skříni (žádný levný plast, jenž se ve velké míře používal u poslední generace kazetových magnetofonů), která měla i velmi dobře provedenou vlastní mechaniku pohánění kazety i vedení magnetické pásky přes čtecí a zápisovou hlavu, což samozřejmě vedlo k větší spolehlivosti záznamu dat.
Obrázek 6: Kotoučový magnetofon Tesla B90 bylo poměrně snadné použít pro záznam binárních dat.
Elektronická část těchto jednotek obsahovala deset integrovaných obvodů, 29 tranzistorů a 40 diod. Při připojování k počítači bylo možné použít jakoukoli sběrnici či port s TTL signály, což umožnilo použití této jednotky s prakticky všemi tuzemskými i zahraničními osmibitovými počítači (teoreticky i k Atari se SIO, ovšem tuto kombinaci jsem nikdy naživo neviděl). Dalším oblíbeným a poměrně často používaným datarekordérem vyráběným v ČSSR (konkrétně se jednalo o výrobce ZPA Košíře) byla kazetopásková jednotka nazvaná jednoduše KZD 1. I tato jednotka používala pro záznam dat běžné kompaktní kazety, které však bylo nutné před jejich použitím naformátovat, aby se na pásku zaznamenal nosný signál. Při nahrávání aplikace či dat stačilo zadat číslo bloku (ne tedy jméno aplikace či název souboru), po skončení nahrávání se na monitoru zobrazilo číslo (index) následujícího volného bloku.
Obrázek 7: Kombinované zařízení Tesla SP210T.
Při čtení či zápisu dat se magnetická páska pohybovala rychlostí cca 48,0 mm za sekundu, při vyhledávání bloků se rychlost zvyšovala na 96,0 mm za sekundu (standardní rychlost pohybu audio pásky při přehrávání/nahrávání je 47,6 mm za sekundu). Tento datarekordér se používal například u osmibitových počítačů SAPI-1 či PMD-85, ovšem bylo celkem snadné ho upravit i pro použití na IQ-151 nebo některých zahraničních osmibitových počítačích. Dalším tuzemským datarekordérem byl KP 311, který vznikl v Tesle Přelouč přestavěním walkmanu napájeného buď šestivoltovým zdrojem nebo čtveřicí tužkových baterií. Tento datarekordér taktéž využíval běžné kompaktní kazety a bylo ho možné přepínat na přehrávání audia (pracoval jako běžný walkman) či na datový provoz.
Obrázek 8: Kazetopásková jednotka KZD 1.
Specializované kazetové záznamníky
Magnetické pásky se používaly pro záznam dat prakticky u všem osmibitových domácích mikropočítačů. Některé známé zahraniční mikropočítače, především značek Atari, Commodore, Sharp či Amstrad-Schneider, byly dodávány spolu se specializovanými kazetovými datarekordéry, které byly k počítači připojovány různým, mnohdy proprietárním způsobem. V některých případech se jednalo o jednoduchá a tedy i poměrně levná externí zařízení připomínající výše zmíněný československý výrobek KZD-1. Nejznámějšími zástupci této kategorie jsou bezesporu počítače Atari a Commodore, jejichž datové záznamníky jsou si v mnoha ohledech konstrukčně podobné. Druhou možností bylo zabudování magnetofonu přímo do skříně počítače. Tato zajímavá konstrukce byla využita například u některých modelů osmibitových počítačů Sharp či počítačů Amstrad-Schneider.
Obrázek 9: Magnetofon používaný u osmibitových počítačů Commodore má mnoho rysů společných s podobnými zařízeními společnosti Atari.
Nezávisle na způsobu konstrukce byla tato periferní zařízení uzpůsobena především pro záznam programů a dat, nikoli pro záznam audio signálu, proto by se pro jejich pojmenování správně ani nemělo používat slovo „magnetofon“, nicméně se jedná o vžité označení, takže se s ním na několika místech potkáte i v tomto článku (korektnější název je datarekordér nebo kazetopásková jednotka). Firemní datarekordéry dodávané přímo ke konkrétním typům počítačů se od svých audio protějšků odlišovaly především v tom, že měly jinak vyřešený způsob propojení s počítačem. Namísto pětikolíkových konektorů DIN či jacků (audio vstup-výstup) se zde můžeme setkat především s proprietárními konektory. Například v případě firmy Atari se jedná o nám již dobře známý konektor sériové sběrnice SIO.
Dále prakticky všechny magnetofony specializované pro záznam dat obsahovaly počitadlo otáček, které lze sice spatřit i u některých magnetofonů určených původně pro záznam zvuku, ovšem v případě ukládání dat je přesná znalost jejich umístění na kazetě velmi důležitá, zejména u těch počítačů, jejichž operační systém nedokázal vyhledávat data na základě zadaného názvu souboru (což je i případ původního formátu záznamů počítačů Atari; tento problém byl opraven v systému Turbo 2000).
Obrázek 10: Zabudovaný datarekordér v osmibitovém počítači Sharp.
Taktéž elektronika magnetofonů určených pro záznam dat (datarekordérů) byla poněkud odlišná od magnetofonů zvukových – v některých případech například počítač sám řídil zastavení kazety po nahrání požadovaných dat (což ovšem nebyla tak skvělá myšlenka, jak by se na první pohled mohlo zdát, neboť u některých měkčích pásek došlo při jejich zastavení ke vzniku promáčkliny v místě, kde páska procházela mezi poháněcím trnem a přítlačným kolečkem), nebylo nutné, aby datové magnetofony používaly výkonový výstupní zesilovač s impedančním přizpůsobením pro reproduktory, vstupní zesilovač mikrofonu atd. Ostatně způsobu zapojení datového záznamníku XC12 se budeme věnovat ve druhé části dnešního článku.
Obrázek 11: I některé typy počítačů Amstrad-Schneider, například zde vyfotografovaný CPC-464, používaly datarekordér zabudovaný přímo do jejich skříně.
Na pomezí mezi kazetovým záznamníkem a disketou: ZX Microdrive
Zajímavý koncept při vývoji magnetických páskových pamětí použila slavná firma Sinclair Research (jejíž inženýři se prakticky u všech výrobků zaměřovali na hledání alternativních cest) při vývoji paměti označované názvem Sinclair ZX Microdrive určené pro neméně slavný počítač ZX Spectrum a některé jeho následovníky a klony (vhodnější je v tomto případě použít celý název této magnetické paměti, protože samotným jménem Microdrive se označovaly i miniaturní pevné disky od firmy IBM).
V paměťových jednotkách Sinclair ZX Microdrive se používala výměnná paměťová média obsahující magnetickou pásku o šířce 1,9 mm a délce cca šesti metrů. Celková délka pásky se však mohla do jisté míry měnit – viz další text. Páska byla navinuta na jediné cívce, přičemž její konce byly spojeny tak, aby vytvořily „nekonečný“ pás – magnetická páska se v tomto případě odvíjela ze svého posledního (nejmenšího) závitu a naopak se navíjela na první (největší) závit – podobný princip, i když mechanicky (mnohem) lépe provedený, je využitý i v některých filmových promítačkách.
Obrázek 12: Externí paměťové zařízení Sinclair ZX Microdrive.
Tímto uspořádáním se do značné míry zjednodušila mechanika paměťového zařízení, která tak mohla obsahovat pouze jednoduchý mechanismus s elektrickým motorkem a převodem, který pásku převíjel konstantní rychlostí jedním směrem (odpadlo složité převíjecí zařízení známé z datových i audio magnetofonů, ve kterých bylo nutné zajistit jak obousměrné převíjení, tak i oddálení čtecí/zápisové hlavy při rychlém převíjení). Paměťové médium pro ZX Microdrive je zobrazeno na dalším obrázku zhruba ve své skutečné velikosti. Páska se při čtení či zápisu posouvala konstantní rychlostí 76 cm za sekundu, což znamená, že přetočení celé smyčky trvalo cca 8 sekund. Celková kapacita činila cca 85 kB při plném využití (žádné vadné bloky), ovšem několikerým formátováním se mohla délka pásky poněkud prodloužit (fyzicky) a tím se i zvýšila kapacita jednoho média až na 100 kB, samozřejmě na úkor spolehlivosti, která i tak nebyla příliš velká (v porovnání s kompaktními kazetami či disketami).
Obrázek 13: Paměťové médium Sinclair ZX Microdrive.
Paměťová jednotka Sinclair ZX Microdrive byla poměrně často porovnávána s disketami a disketovými jednotkami. Určité podobnosti s disketami skutečně můžeme najít, i když se jednalo o mechaniku používající magnetickou pásku. Sinclair ZX Microdrive tak představoval jakýsi přechod mezi magnetickými páskami a disketami – z magnetických pásek zde byla využita celková jednoduchost mechaniky s kombinovanou čtecí/zápisovou hlavou a jedním elektrickým motorkem (u disketové mechaniky jsou zapotřebí dva pohonné motorky, navíc přesný šnek pro posun čtecí/zápisové hlavy, optické čidlo pro nalezení nultého sektoru a nulté stopy atd.), ale na rozdíl od magnetických pásek se při použití ZX Microdrive nemuselo provádět ruční přetáčení pásky a hledání začátku záznamu – tato operace byla do značné míry zautomatizovaná (přesněji řečeno, řídil ji program, nikoli elektronika ZX Microdrive), podobně jako u disketových mechanik.
Obrázek 14: Zařízení ZX Microdrive bylo možno k počítači zapojit více, jejich maximální počet je osm. Na této fotografii jsou zobrazeny dvě jednotky ZX Microdrive.
Při použití médií ZX Microdrive taktéž odpadly, na rozdíl od kompaktních kazet i kotoučových datarekordérů, problémy s manuálním přetáčením a hledáním začátku záznamu. Podobný princip založený na „nekonečné“ pásce, většinou ještě na jednom místě přetočené tak, aby tvořila Möbiův pruh s jednou stranou (kazeta se tudíž nemusela otáčet), byl použit i u některých dalších paměťových médií a mechanik, známých taktéž pod souhrnným označením stringy floppy. Z oblasti audiovizuální techniky jsou známá osmistopá média, taktéž s nekonečnou přetočenou páskou, která nevyžadovala ani otáčení média (jako tomu bylo u prvních disketových mechanik) ani dvojici čtecích/zápisových hlav – viz též další obrázek.
Obrázek 15: Osmistopá páska tvořící Möbiův pruh používaná v audiovizuální technice.
Atari Program Recorder
Vraťme se nyní do světa osmibitových domácích mikropočítačů Atari. Jak jsme si již řekli v předchozím textu, existovaly pro tyto počítače tři základní externí paměťová média: cartridge, disketové jednotky a kazetopáskové jednotky. Nejrychlejší jsou cartridge, ovšem cena za uloženou jednotku informace je zde nejvyšší a současně není možné (přímo přes počítač a bez dalších pomocných obvodů) provádět zápis dat. Proto se cartridge používaly jen pro nejčastěji načítané programy typu textový editor (AtariWriter, SpeedScript), databáze (Mikronotes), assembler (MAC/65) či v tuzemském prostředí pak ovladač Turba 2000 (viz další text).
Záznam na diskety je levnější, ovšem disketová jednotka je pomalejší než cartridge (k čemuž se ještě vrátíme). Největší překážkou nebyla cena disket, ale cena samotné disketové jednotky, která byla dražší než samotný počítač Atari (a dokonce dražší než kombinace Atari+kazetopásková jednotka). Disketové jednotky pro počítače Atari totiž musely být dostatečně „chytré“ na to, aby je bylo možné ovládat pomocí příkazů posílaných přes sběrnici SIO. V jejich ceně tedy byla započítána i relativně drahá elektronika.
Zbývá nám tedy záznam dat na běžnou (audio) kazetu. K tomuto účelu byly na počítačích Atari používány specializované datové záznamníky připojované k počítači přes sběrnici SIO. Na rozdíl od modemů, tiskáren a disketových jednotek však byly datové záznamníky „hloupými“ zařízeními, která nedokázala rozpoznat posílané příkazy. Kvůli kazetovému magnetofonu obsahuje SIO vodič určený pro ovládání motoru a taktéž vodič pro vstup audio signálu (není použit pro data).
Společnost Atari vyráběla popř. licencovala výrobu několika typů těchto záznamníků, které byly sice konstrukčně odlišné, ale ovládaly se stejným způsobem. První model nesl označení 410 a vyráběn byl od roku 1979. Druhý, menší model byl označován 1010. Barevně a designem model 410 odpovídal původním počítačům Atari 400 a Atari 800 (bez XL/XL), kdežto model 1010 připomíná řadu XL (1200XL, 600XL, 800XL). Následovaly datové záznamníky XC11 a zejména pro „chudší trhy“ určený záznamník XC12. Barevně a designem jsou určené pro řadu Atari XE, i když se pochopitelně bez problémů mohly používat (a taktéž používaly) i společně s modely XL. Právě XC12 je pravděpodobně nejznámější a existovaly dokonce i jeho klony, například XCA12, CA12, XL12, PM-4401A, atd.
Obrázek 15: XC12 bez předního krytu s dvířky. Viditelná je mazací hlava, čtecí/zápisová hlava, počitadlo otáček i motor.
Atarácký kazetový záznamník XC12
V dalším textu, zejména při popisu analogových a digitálních obvodů určených pro zápis a čtení dat, se zaměříme na kazetový záznamník XC12, který byl (vedle joysticků) v našich končinách zdaleka nejpoužívanějším periferním zařízením osmibitových domácích mikropočítačů Atari. Jak jsme již uvedli v předchozí kapitole, byl tento záznamník primárně určen pro zápis a čtení dat a nenajdeme zde tedy jacky pro vstup a výstup audio signálu (audio výstup je možný jen z jednoho kanálu). K počítačům Atari se XC12 připojoval přes sběrnici SIO (viz navazující kapitolu). Ve výbavě pochopitelně nechyběl snímač otáček (i s možností jeho vynulování), který byl téměř nutností. Mechanická odolnost XC12 byla poměrně vysoká – datové záznamníky totiž byly namáhány mnohem více, než běžné hudební přehrávače (nutnost přetáčení, včetně často zneužívaného přetáčení „s příslechem“ – kombinace tlačítek Play, Fast forward, Rewind a Stop to umožňovala). Po cca čtyřiceti letech je samozřejmě nutné vyměnit řemínky a ideálně i vyměnit gumové přítlačné kolečko (capstan), které za ta léta ztvrdlo, ale celek je stále plně funkční.
Obrázek 16: Další pohled na XC12 bez předního krytu s dvířky.
Propojení XC12 s počítačem přes SIO
Záznamník XC12 se, podobně jako další záznamníky s ním kompatibilní, k počítačům Atari připojoval přes SIO. Ovšem jeho způsob zapojení i komunikace s počítačem se odlišovaly od ostatních „inteligentních“ zařízení. Využívala se totiž jen následující šestice pinů:
| Pin | Název signálu | Stručný popis |
|---|---|---|
| 3 | Data In | asynchronní sériový přenos dat z periferního zařízení do počítače |
| 4 | GND | zem |
| 5 | Data Out | asynchronní sériový přenos dat z počítače do periferního zařízení |
| 8 | Motor Control | řízení motoru kazetového magnetofonu |
| 10 | +5V / Ready | +5V pro zařízení bez vlastního napájení (kazetový magnetofon) + informace o tom, že je počítač připraven |
| 11 | Audio In | audio signál z kazetového magnetofonu |
Obrázek 17: Po cca 37 letech nevypadá mechanismus nejhůř (i když by potřeboval vyčistit).
Formát záznamu dat
Zajímavý je způsob zápisu dat na kazetu. Nejprve se zaměříme na formát záznamu dat z „digitálního“ pohledu; v dalších kapitolách si pak řekneme, jakým způsobem jsou reprezentovány jednotlivé bity. Začneme způsobem reprezentace jednotlivých bajtů a způsobem jejich vysílání z počítače do záznamníku. Jednotlivé bajty se posílají asynchronně, přičemž je použit jeden start bit a jeden stop bit – celkem se tedy bajt posílá jako sekvence deseti bitů. Start bit má logickou hodnotu 0, stop bit pak logickou hodnotu 1. To tedy znamená, že nezávisle na tom, jaká data se posílají (například sekvence samých nul či naopak sekvence hodnot $ff), dojde ke změně hodnoty minimálně jedenkrát v celé sekvenci deseti bitů. Díky tomu je zjednodušen proces synchronizace čipu POKEY při zpětném čtení dat (k tomu se ještě dostaneme).
Bajty jsou sdružovány do bloků, z nichž každý má délku přesně 132 bajtů. První dva zapisované bajty mají binární hodnotu 01010101 a používají se při čtení pro synchronizaci časování čipu POKEY (tedy řeší se stav, kdy je rychlost posunu pásky nepatrně odlišná od standardu). Další bajt je řídicí a popisuje celý blok:
| Řídicí bajt | Význam |
|---|---|
| $FC | bude následovat 128 datových bajtů |
| $FA | bude následovat 1–127 datových bajtů doplněných nulami (délka je uložena na konci bloku) |
| $FE | koncový záznam obsahující jen 128 nul (to je dobře slyšitelné) |
Každý blok obsahuje 128 datových bajtů nebo výplňových nul. A na konci každého bloku je uložen osmibitový kontrolní součet (ostatně jeden z důvodů, proč jsou od sebe bloky odděleny přibližně 0,25 sekundy trvajícími mezerami, spočívá v nutnosti spočítat kontrolní součet).
Obrázek 18: Přední kryt XC12 s dvířky.
Načtení spustitelného programu z kazety (boot)
Počítače Atari se při svém spuštění přepínaly do BASICu, ovšem stiskem tlačítek START+OPTION při inicializaci systému se počítač přepnul do režimu načtení programu (typicky hry) z kazety. Počítač zobrazil prázdnou textovou obrazovku, zapípal a přes signál Motor Control zapnul motor magnetofonu. Stiskem PLAY na magnetofonu se začala páska přetáčet a počítač čekal na nalezení prvního bloku. Pokud byl blok nalezen a načten, zjistily se z prvních šesti datových bajtů informace o programu – jak je dlouhý, na jaké adresy se mají bloky načíst, z jaké adresy se program spustí atd.:
| Bajt | Význam bajtu |
|---|---|
| 0 | ignorován (začínáme dobře) |
| 1 | celkový počet bloků (1–255, 0 znamená 256) |
| 2–3 | adresa, od které se provede uložení načtených bloků |
| 4–5 | startovní adresa na kterou počítač provede skok po načtení všech bloků, systém ji automaticky uloží do vektoru CASINI |
Počítač celý první blok ihned přesunul na zadanou adresu a posléze načetl i všechny další bloky. Celkem tedy bylo možné načíst program o délce 256×128=32kB (což bylo u některých modelů Atari více, než je kapacita nainstalované paměti). Po načtení všech bloků se provedla instrukce JSR na adresu uloženou v prvním bloku na offsetu 6. Tento podprogram mohl realizovat další načítání, například u programů přesahujících 32 kB. Po návratu z této subrutiny se otestoval příznak přenosu (indikuje chybu) a provedl se další skok JSR na adresu uloženou ve vektoru CASINI (ten je umístěn prakticky hned na začátku adresového prostoru, konkrétně na adrese 2+3).
Povšimněte si, že tento standardní formát neobsahuje název nahrávaného programu, takže se (pokud je například špatně nastavené počitadlo) nahrávalo „naslepo“.
Schéma zapojení XC12
Zajímavé bude zjistit, jak vlastně vypadalo zapojení záznamníku XC12. Zapojení je poměrně minimalistické a je založeno na kombinaci analogových a digitálních obvodů (většina jsou obvody analogové). Vypadá následovně:
Obrázek 19: Schéma zapojení XC12.
Obvody realizující zápis dat na kazetu
Obvod pro záznam dat na kazetu je ve skutečnosti velmi jednoduchý, a to z toho důvodu, že se o modulaci signálu staral náš starý známý – čip POKEY:
Obrázek 20: Část určená pro zápis proudu bitů s využitím FSK.
Samotný záznam dat je kompletně řízen počítačem. Využívá se přitom trojice zvukových kanálů čipu POKEY. Jeden z kanálů je nastaven na produkci audio signálu o frekvenci 5327 Hz, druhý na audio signál o frekvenci 3995 Hz (NTSC, u PAL o pár Hz posunuto) a třetí kanál generuje frekvenci 600 Hz. Tento třetí kanál je použit pro synchronizaci zapisovaných bitů – odtud ostatně pochází tvrzení, že rychlost záznamu je 600 baudů.
Zapisovaný bit (ať již bit datový nebo start či stop bit) svou hodnotou způsobí, že se na vodiči Data out sběrnice SIO objeví frekvence 5327 Hz nebo 3995 Hz (a to po dobu 1/600 sekundy). Tento obdélníkový signál je poslán na čtecí/zápisovou hlavu a zapsán na kazetu – ovšem pochopitelně se v celém analogovém řetězci ztratí vyšší harmonické, takže se nezapisuje „čistý“ obdélníkový signál. To však nevadí, protože při zápisu hraje větší roli základní frekvence a nikoli tvar signálu (jedná se tedy o formu binárního klíčování frekvenčním posunem).
Obvody realizující čtení dat z kazety
Čtení dat z kazety je mnohem složitější, než jejich zápis. Je totiž nutné z načteného zašuměného a různě zkresleného analogového signálu zrestaurovat původní sekvenci bitů, která se pošle do počítače, kde ji čip POKEY rozkóduje do sekvence bajtů, která bude interpretována operačním systémem. Zapojení, kterým je rekonstrukce bitového toku („digitalizace“) realizována, vypadá následovně:
Obrázek 21: Část určená pro čtení a dekódování proudu bitů.
Toto schéma se skládá ze čtyř částí (zprava doleva):
- Na začátku je analogový zesilovač (dva tranzistory + několik pasivních součástek).
- Operační zesilovač (první zleva) společně s diodami CR3 a CR4 signál ořezává a snaží se o vytvoření obdélníkového průběhu s měnící se frekvencí.
- Nejdůležitější jsou další dva bloky s operačními zesilovači (zobrazeny nad sebou). Každý z těchto bloků tvoří pásmovou propust spojenou se zesilovačem. Pokud je na vstupu signál s frekvencí blízkou 5327 Hz, bude procházet (posunutý) prvním z bloků, pokud je naopak frekvence bližší 3995 Hz, bude zesílen druhým blokem.
- Třetí operační zesilovač z obou signálů, které získá, zrekonstruuje (ideálně původní) obdélníkový průběh, z něhož nakonec čip POKEY zrekonstruuje sekvenci bajtů.
Simulace obvodů pro digitalizaci záznamu přečteného z kazety
Poměrně dlouho mi přesné fungování pásmové propusti tvořené operačním zesilovačem (se zpětnovazební smyčkou, pochopitelně) nebyla moc zřejmá, ovšem našel jsem simulaci celého zapojení, kde je vše vizualizováno. Postačuje přejít na tuto adresu (a mít povolený JavaScript).
Obrázek 22: Simulace rekonstrukce dat z audio signálu uloženého na kazetě.
Průběžný přepočet záznamové rychlosti
Již několikrát jsme se zmínili o tom, že zápis dat na kazetu probíhá rychlostí 600 bitů za sekundu. Ovšem při čtení může být tato rychlost odlišná, protože například mohou kolísat otáčky, záznam byl proveden v odlišném zařízení atd. Z tohoto důvodu jsou na začátku každého bloku zapsány dva bajty s hodnotou 01010101. Při čtení datového bloku z kazety se nejprve provede rekonstrukce bitového toku z analogového signálu (viz předchozí text) a následně čip POKEY (s podporou systému – časy se měří v obrazových řádcích :-) dokáže do jisté míry upravit rychlost čtení právě na základě těchto dvou bajtů (clock recovery). Ovšem předpokládá se, že celý blok (132 bajtů tedy 1320 bitů) bude přečten touto změřenou rychlostí, což může vést k chybám při čtení (paradoxně mnohem rychlejší systémy s Turbem tímto problémem netrpí díky odlišnému způsobu rekonstrukce binárního signálu).
Přednosti a nedostatky standardního záznamu dat na kazetu
Záznamník XC12 (a pochopitelně i jeho předchůdci) byl na západě chápán spíše jako levný doplněk k počítači. Pro profesionální nasazení (kancelářské aplikace, vývoj, měřicí systémy, řídicí systémy) se počítalo s využitím disketové jednotky nebo dokonce dvojice disketových jednotek. Ovšem v Jižní Americe a taktéž ve střední a východní Evropě se používal převážně právě XC12, mnohdy jako jediné externí paměťové médium. A v takovém nasazení se zvýraznily nedostatky standardního způsobu záznamu dat na kazetu. Mezi nedostatky patří zejména:
- Nízká záznamová rychlost 600 bitů za sekundu, která je dále snižována mezerami mezi bloky
- Na začátku celého souboru (bloků), které se nahrávají, se nenachází žádná hlavička s názvem aplikace
- I když je rychlost měřena a upravována na začátku každého bloku, je systém citlivý na změnu otáček motoru
- Poslední blok je vždy prázdný a přidává tak cca 3 sekundy k celkové době nahrávání
Mezi výhody patří průběžná kontrola každého načteného bloku založená na výpočtu kontrolního součtu. O případné chybě se tedy uživatel dozvěděl prakticky ihned a nikoli až na samotném konci nahrávání.
Systémy pro zvýšení rychlosti nahrávání/načítání
Největším nedostatkem standardního záznamu dat je nízká rychlost nahrávání a načítání. Není tedy divu, že se objevilo relativně velké množství systémů pro zvýšení rychlosti. Možná nejúspěšnější je systém Turbo 2000 Jiřího Richtera, ovšem nejdříve se podívejme na některé další způsoby zvýšení přenosové rychlosti.
Některé programy používaly vlastní krátký zavaděč (typicky měl délku jen několika bloků) a poté byl zbytek programu uložen jako jediný dlouhý blok bez mezer. Tím se sice nezvýšila rychlost záznamu jednotlivých bitů, ale odstranilo se čekání mezi bloky (a jako další efekt to komplikovalo tvorbu pirátských kopií).
Objevily se i pokusy o pouhé zvýšení přenosové rychlosti na cca 900–1200 bitů za sekundu s tím, že se použily původní frekvence jedniček a nul i původní obvody pro rekonstrukci bitového toku z analogového signálu. Ovšem výsledky nebyly příliš uspokojivé, protože se přenosová rychlost (frekvence) příliš blížila frekvencím zakódování nul a jedniček. Pásmové propusti neměly dostatek času na stabilizaci (a tedy rozpoznání) frekvence, takže se chybovost zvyšovala. Byly navrhnuty i relativně malé úpravy rezistorů v pásmových propustech tak. Jednalo se o záměnu dvou rezistorů za rezistory stejné hodnoty, ale v přesnější řadě. Tím se docílilo lepšího „naladění“ propustí.
Turbo 2000 a jeho varianty
Zápis binárních dat na kazetu s využitím dvou frekvencí má své limity. Navíc ani pouhé zvýšení přenosové rychlosti neodstranilo neexistenci názvu nahrávaného programu. Zvýšení rychlosti zápisu je sice možné (klidně i na desetinásobek původních 600 bitů za sekundu), ovšem v případě XC12 to vyžadovalo jeho hardwarovou úpravu a taktéž náhradu systémových rutin pro práci s kazetovým magnetofonem. Jednou z nejúspěšnějších úprav je již výše zmíněné Turbo 2000 Jiřího Richtera. Tato úprava byla populární i díky tomu, že stále podporovala i původní způsob záznamu, takže byla zaručena plná zpětná kompatibilita. Navíc samotná hardwarová úprava XC12 byla relativně malá (minimum součástek, jen malý přidaný plošný spoj popř. realizace stylem „vrabčí hnízdo“). Podrobnosti o tomto systému si povíme příště, protože se bude jednat o jakýsi „můstek“ k popisu konceptu kanálů a zařízení, které z Atari dělaly (na svou dobu) rozšiřitelný a konfigurovatelný systém určený pro profesionální použití.
Repositář s demonstračními příklady
Všechny demonstrační příklady, s nimiž jsme se v předchozích článcích i v článku dnešním seznámili a které jsou určeny pro překlad s využitím assembleru ca65, jsou dostupné, jak je zvykem, na GitHubu. V tabulce níže jsou uvedeny odkazy na jednotlivé zdrojové kódy příkladů psané v assembleru i „listingy“ vygenerované samotným assemblerem, ze kterých je patrné, jakým způsobem se jednotlivé příklady přeložily do výsledného XEX souboru:
Odkazy na Internetu
- MOS 6502 instruction set
http://www.6502.org/users/obelisk/6502/instructions.html - EXE File Format Description
https://gury.atari8.info/refs/file_formats_exe.php - XEX Filter – A toolkit to analyze and manipulate Atari binary files
https://www.vitoco.cl/atari/xex-filter/index.html - chkxex.py
https://raw.githubusercontent.com/seban-slt/tcx_tools/refs/heads/master/chkxex.py - ca65 Users Guide
https://cc65.github.io/doc/ca65.html - cc65 Users Guide
https://cc65.github.io/doc/cc65.html - ld65 Users Guide
https://cc65.github.io/doc/ld65.html - da65 Users Guide
https://cc65.github.io/doc/da65.html - Překladače jazyka C pro historické osmibitové mikroprocesory
https://www.root.cz/clanky/prekladace-jazyka-c-pro-historicke-osmibitove-mikroprocesory/ - Překladače programovacího jazyka C pro historické osmibitové mikroprocesory (2)
https://www.root.cz/clanky/prekladace-programovaciho-jazyka-c-pro-historicke-osmibitove-mikroprocesory-2/ - Getting Started Programming in C: Coding a Retro Game with C Part 2
https://retrogamecoders.com/getting-started-with-c-cc65/ - NES game development in 6502 assembly – Part 1
https://kibrit.tech/en/blog/nes-game-development-part-1 - NES 6502 Programming Tutorial – Part 1: Getting Started
https://dev.xenforo.relay.cool/index.php?threads/nes-6502-programming-tutorial-part-1-getting-started.858389/ - Minimal NES example using ca65
https://github.com/bbbradsmith/NES-ca65-example - List of 6502-based Computers and Consoles
https://www.retrocompute.co.uk/list-of-6502-based-computers-and-consoles/ - 6502 – the first RISC µP
http://ericclever.com/6500/ - 3 Generations of Game Machine Architecture
http://www.atariarchives.org/dev/CGEXPO99.html - “Hello, world” from scratch on a 6502 — Part 1
https://www.youtube.com/watch?v=LnzuMJLZRdU - A Tour of 6502 Cross-Assemblers
https://bumbershootsoft.wordpress.com/2016/01/31/a-tour-of-6502-cross-assemblers/ - Adventures with ca65
https://atariage.com/forums/topic/312451-adventures-with-ca65/ - example ca65 startup code
https://atariage.com/forums/topic/209776-example-ca65-startup-code/ - 6502 PRIMER: Building your own 6502 computer
http://wilsonminesco.com/6502primer/ - 6502 Instruction Set
https://www.masswerk.at/6502/6502_instruction_set.html - Chip Hall of Fame: MOS Technology 6502 Microprocessor
https://spectrum.ieee.org/tech-history/silicon-revolution/chip-hall-of-fame-mos-technology-6502-microprocessor - Single-board computer
https://en.wikipedia.org/wiki/Single-board_computer - www.6502.org
http://www.6502.org/ - 6502 PRIMER: Building your own 6502 computer – clock generator
http://wilsonminesco.com/6502primer/ClkGen.html - Great Microprocessors of the Past and Present (V 13.4.0)
http://www.cpushack.com/CPU/cpu.html - Jak se zrodil procesor?
https://www.root.cz/clanky/jak-se-zrodil-procesor/ - Osmibitové mikroprocesory a mikrořadiče firmy Motorola (1)
https://www.root.cz/clanky/osmibitove-mikroprocesory-a-mikroradice-firmy-motorola-1/ - Mikrořadiče a jejich použití v jednoduchých mikropočítačích
https://www.root.cz/clanky/mikroradice-a-jejich-pouziti-v-jednoduchych-mikropocitacich/ - Mikrořadiče a jejich aplikace v jednoduchých mikropočítačích (2)
https://www.root.cz/clanky/mikroradice-a-jejich-aplikace-v-jednoduchych-mikropocitacich-2/ - 25 Microchips That Shook the World
https://spectrum.ieee.org/tech-history/silicon-revolution/25-microchips-that-shook-the-world - Comparison of instruction set architectures
https://en.wikipedia.org/wiki/Comparison_of_instruction_set_architectures - How To Start Learning Atari 8 Bit Assembly For Free
https://forums.atariage.com/topic/300732-how-to-start-learning-atari-8-bit-assembly-for-free/ - WUDSN (Demo Group)
https://www.wudsn.com/ - Machine Language For Beginners
https://www.atariarchives.org/mlb/ - Assembly language: all about I/O
https://www.atarimagazines.com/v3n8/AllAbout_IO.html - Sedmdesátiny assemblerů: lidsky čitelný strojový kód
https://www.root.cz/clanky/sedmdesatiny-assembleru-lidsky-citelny-strojovy-kod/ - Color names
https://atariwiki.org/wiki/Wiki.jsp?page=Color%20names - ATASCII
https://en.wikipedia.org/wiki/ATASCII - Put characters in display ram isn't ATASCII?
https://forums.atariage.com/topic/359973-put-characters-in-display-ram-isnt-atascii/ - ATASCII And Internal Character Code Values
https://www.atariarchives.org/mapping/appendix10.php - Reading ATASCII from the keyboard in assembly
https://forums.atariage.com/topic/361733-reading-atascii-from-the-keyboard-in-assembly/ - Why does the 6502 JSR instruction only increment the return address by 2 bytes?
https://retrocomputing.stackexchange.com/questions/19543/why-does-the-6502-jsr-instruction-only-increment-the-return-address-by-2-bytes - Pushing return address to stack off by 1 byte
https://forums.atariage.com/topic/378206-pushing-return-address-to-stack-off-by-1-byte/ - Intel x86 documentation has more pages than the 6502 has transistors
https://www.righto.com/2013/09/intel-x86-documentation-has-more-pages.html - Clearing a Section of Memory
http://www.6502.org/source/general/clearmem.htm - Practical Memory Move Routines by Bruce Clark
http://www.6502.org/source/general/memory_move.html - 6502 Assembly Programming Guide
https://neumont-gamedev.github.io/posts/retrogamedev-6502-guide/ - Off-by-one error
https://en.wikipedia.org/wiki/Off-by-one_error - 6502 cycle times
https://www.nesdev.org/wiki/6502_cycle_times - Atari TIA
http://www.atarihq.com/danb/tia.shtml - TIA Playfield
http://www.atarihq.com/danb/TIA/Playfield.shtml - Atari Inc.:
ANTIC C012296 (NTSC) Revision D
Atari Incorporated, Sunnyvale CA, 1982 - Atari Inc.:
GTIA C014805 (NTSC) Revision A
Atari Incorporated, Sunnyvale CA, 1982 - Atari 5200
http://www.atariage.com/software_search.html?SystemID=5200 - Atari 5200 Hardware and Accessories
http://www.atariage.com/5200/archives/hardware.html - Atari 5200 Screenshots
http://www.atariage.com/system_items.html?SystemID=5200&ItemTypeID=SCREENSHOT - History of video game consoles (second generation): Wikipedia
http://en.wikipedia.org/wiki/History_of_video_game_consoles_(second_generation) - Atari 5200: Wikipedia
http://en.wikipedia.org/wiki/Atari_5200 - Player-Missile Graphics
https://www.atariarchives.org/agagd/chapter5.php - Sprite (computer graphics)
https://en.wikipedia.org/wiki/Sprite_(computer_graphics) - Atari Graphics Demonstrations by Underground Software, 1985 | Atari 8 bit Demo
https://www.youtube.com/watch?v=h7N9EYSyCkw - Atari 8-bit Display List Interrupts: A Complete(ish) Tutorial
https://playermissile.com/dli_tutorial/ - Atari Assembler Editor manual
https://atariwiki.org/wiki/attach/Atari%20Assembler%20Editor/ATARI%20Assembler%20Editor%20User-s%20Manual-OCR.pdf - Atari 8-bit Fine Scrolling: A Complete(ish) Tutorial
https://playermissile.com/scrolling_tutorial/index.html - Atari Fine Scrolling
https://www.atarimagazines.com/compute/issue67/338_1_Atari_Fine_Scrolling.php - CTIA / GTIA Pinout Diagram
https://user.xmission.com/~trevin/atari/gtia_pinout.html - GTIA Modes
https://page6.org/archive/issue02/page10.htm - 56 graphic modes
https://www.atari800×l.eu/docs/kb/kb-hardware-0005-atari-8bit-56-graphic-modes.html - UNLOCKING THE 56 GRAPHIC MODES
https://www.atarimagazines.com/v3n5/allmodes.html - GTIA Modes 9, 10 & 11 + ANTIC data and color clocks
https://forums.atariage.com/topic/366256-gtia-modes-9–10–11-antic-data-and-color-clocks/ - ANTIC, GTIA and timing info
https://atarimax.com/jindroush.atari.org/atanttim.html - 6.10 Cycle timing
https://github.com/AnimaInCorpore/A8E/blob/main/AHRM/6.%20CTIA-GTIA/10.%20Cycle%20timing.md - Doug Neubauer
https://en.wikipedia.org/wiki/Doug_Neubauer - POKEY
https://en.wikipedia.org/wiki/POKEY - Inside the Atari 800XL
https://www.goto10retro.com/p/800×l-inside - Grayscale Project – „Jam Session“ – Chiptune Visualization / Atari SAP
https://www.youtube.com/watch?v=Qx-AHgvwrHo&list=PL92E73FD91764173B - POKEY MUSIC ( ATARI XL / XE ) =+ MUSIC FROM POLAND += DEMO
https://www.youtube.com/watch?v=5PswfMjMop4&list=RD5PswfMjMop4&start_radio=1 - Atari.org
http://www.atari.org/ - Atari POKEY
http://www.absoluteastronomy.com/topics/Atari_POKEY - Chiptune
http://www.absoluteastronomy.com/topics/Chiptune - ASAP – Another Slight Atari Player
http://asap.sourceforge.net/ - Atari SAP music archive
http://asma.atari.org/ - RASTER Music Tracker (RMT)
http://raster.infos.cz/atari/rmt/rmt.htm - POKEY explorer
https://github.com/ivop/pokey-explorer - POKEY C012294 Documentation
https://7800.8bitdev.org/index.php/POKEY_C012294_Documentation - Pokey Registers
https://user.xmission.com/~trevin/atari/pokey_regs.html - POKEY CO12294
http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm - De Re Atari: SOUND
https://www.atariarchives.org/dere/chapt07.php#H7_3_5 - Paddle (game controller)
https://en.wikipedia.org/wiki/Paddle_(game_controller) - Interfacing Your Atari
https://www.atariarchives.org/creativeatari/Interfacing_Your_Atari.php - Atari SIO
https://en.wikipedia.org/wiki/Atari_SIO - Atari Chips
https://atarimax.com/jindroush.atari.org/achip.html - Table 4: Keyboard Code Index, KEYCODE: ATASCII
https://www.atariarchives.org/c3ba/kcindex.php - SIO2PC
http://raster.atariportal.cz/hw/sio2pc.htm - Using Serial Input/Output
https://www.atarimagazines.com/compute/issue64/insight_atari.php - SIO ROUTINES
https://www.atariarchives.org/mmm/sio.php - ATARI 8 bit Serial Input/Output (SIO)
https://allpinouts.org/pinouts/connectors/serial/atari-8-bit-serial-input-output-sio/ - SIOspecs
https://archive.org/details/SIOspecs - Interview with Joe Decuir
http://www.atarimuseum.com/articles/joedecuir.html - USB AND OS/2
http://www.os2voice.org/VNL/past_issues/VNL1199H/vnewsf5.htm - Standards and specs: The ins and outs of USB
http://www.ibm.com/developerworks/power/library/pa-spec7.html - USB Class Codes
http://www.usb.org/developers/defined_class - Universal Serial Bus
http://en.wikipedia.org/wiki/Usb - SMBus.org
http://www.smbus.org - SMBus FAQ
http://www.smbus.org/faq/faq.htm - System Management Bus
http://en.wikipedia.org/wiki/System_Management_Bus - SMBus Specifications
http://www.smbus.org/specs - SMBus Control Method Interface Specification Version 1.0
http://www.smbus.org/specs/smbus_cmi10.pdf - System Management Bus (SMBus) Specification Version 2.0
http://www.smbus.org/specs/smbus20.pdf - Atari Connection Machine
http://acm.atariportal.cz/s/con8bit/8bits - Atari Program Recorder
https://en.wikipedia.org/wiki/Atari_Program_Recorder - THE ATARI CASSETTE
https://www.atariarchives.org/dere/chaptC.php - Turbo-2000
https://www.atari-800.cz/turbo-2000 - Atari XC12 FSK Decoder
https://zeninstruments.blogspot.com/2024/08/atari-xc12-fsk-decoder.html - Clock recovery
https://en.wikipedia.org/wiki/Clock_recovery - Jiří Richter (programátor)
https://cs.wikipedia.org/wiki/Ji%C5%99%C3%AD_Richter_(program%C3%A1tor) - Spectrum tape interface
https://sinclair.wiki.zxnet.co.uk/wiki/Spectrum_tape_interface - How Tape Loading Works
https://lemmings.info/how-tape-loading-works/
