Mire a 8 bites gépek megjelentek a papír alapú adattárolást már meghaladta a technika. Az Altair Basic-et még lyukszalagon terjesztették, de ez már egy korszak végét jelentette. A mikroszámítógépek első szériája már kazettáról töltötte be és mentette a programokat, adatokat. Érdekes módon még az első IBM PC-nél is lehetett magnetofont használni. A magnók mellett fokozatosan megjelentek a floppy meghajtók, de ezek sokkal többe kerültek. Még drágább volt a merevlemez, ami már inkább a 16 bitesek kiváltsága volt.
A mágneses adattároláshoz elég jó elméleti háttér tartozik. Próbáltam megúszni, hogy Fourier és Shanon tételről írjak, mert nagy valószínűséggel már azok is elfelejtették akik tanulták. Leegyszerűsítve, de pár sort mégis írni fogok, hogy a továbbiak érthetőek legyenek:
- Minden rendszernek, így a kazettás magnetofonnak is van egy sávszélessége amit tárolni képes. Például egy Videoton RM5632 S átviteli sávszélessége 80 és 10 kHz között van normál szalaggal. Ebbe a tartományba kell valahogy a digitális adatot átültetni, majd azt biztonsággal visszaolvasni.
- Az átvitelt rontja a zaj és a torzítás is. Ilyen például a két sáv közötti áthallás, a magnetofon zaja, a szalagsebesség ingadozása stb.
- Hogy a fenti sávszélesség és zaj mellett mekkora sebességgel lehet rögzíteni azt a Shannon-Hartley tétel mondja ki.
Akit a matematikai háttér jobban érdekel az a wiki oldalon el tud indulni. Az első gépek megalkotói inkább gyakorlati oldalról közelítették meg a témát és több kevesebb-sikerrel megoldották a feladatot. Néha annyira jól, hogy több generáción keresztül ugyanaz a megoldás öröklődött. Erre jó példa, hogy a Peddle által írt rutint csak évekkel később cserélték le, mert egyrészt jól működött, másrészt nem volt hozzá forráskód. A feladat elég egyszerűnek hangzik. Az adatot valahogy fel kell venni a magnókazettára, majd onnan visszatölteni. A gond az, hogy az adat digitális, míg a szalag analóg adatot tárol és egy bit hiba sem megengedett. Sajnos a felvett és visszajátszott jel sok helyen torzulhat az olcsó, rossz minőségű szalag és magnó miatt.
Szinte minden gépnél van pár közös pont amivel a fenti problémákon túlléptek:
- A szalagot igyekeztek a lehető legjobban kivezérelni, hogy jó legyen a jel/zaj arány
- A felvételt egy szinkronizációs résszel indították
- Az időt használták valamilyen módon az információ tárolására
- Paritás bitet, CRC-t vagy valami hasonló megoldást használtak a hibás adat detektálására
- A visszaolvasott jelet erősítéssel vagy komparátorral négyszögjellé alakították
A Commodore adattárolása jól dokumentált, ezért adja magát, hogy kicsit részletesebben bemutassam. Nem saját kútfőt, hanem két jó leírást használtam forrásként, a linkeket lent megtalálhatjátok.
A Commodore PET-től egészen a 128-ig használható a CN2-es datasette. Ez TTL szintű jellel kommunikál a számítógéppel mivel a rögzítéshez szükséges elektronika és a szalagról olvasott jelet erősítő elektronika is a magnóba került. A számítógép vezérelni tudja a motort, így a programok több részletben is képesek betölteni adatot anélkül, hogy a felhasználónak kellene a visszajátszást elindítania.
A szalagra rögzített jel inkább szinuszos, a négyszögjelet a sávszélesség limitációja miatt nem képes átvinni. A képen egy C64 programot játszottam vissza a képeken is látható Tensai magnóval. Az oszcilloszkóp kimenetén jól látható, hogy a felvett analóg jel nem állandó. Az amplitúdója és a periódusideje (frekvenciája) is változik. Itt az adatot nem a nem a jel nagysága, hanem az időtartama hordozza. Mielőtt a kódolásról és az adatszerkezetre rátérnék érdemes megnézni, hogy a Commodore CN2-es magnetofon kimeneti jele miben tér el a szalagon lévő jeltől.
A datasette jele már TTL kompatibilis. Több lépcsőben addig erősítik a jelet amíg az nem válik négyszögjellé. Ezzel a módszerrel jól elnyomják a kisebb zavarjeleket és torzítást, mint amilyen például a sávok közötti áthallás. A számítógép könnyedén tud időt mérni. A C64 a lefutó élek közötti időtartamot méri és az ezek között eltelt időből tudja, hogy 0 vagy 1 az adott bit. Már csak az a kérdés, hogy hogyan kódolták át idővé az adatot.
Az alap Commodore formátum három különböző időtartamú impulzust használ:
-
hosszú 672 μs (1488 Hz)
-
közepes 512 μs (1953 Hz)
-
rövid 352 μs (2840 Hz)
Az adatot mindig egy impulzus pár határoz meg az alábbi táblázat szerint:
- 0: rövid, közepes
- 1: közepes, rövid
- új adat: hosszú, közepes
- adat vége: hosszú, rövid
A fenti 4 típusból építenek fel egy keretet. Ebben 9 bit és egy data marker található meg. Ennek a felépítését a c64tapes.org-ról vettem át. Az első 8 bit (bit0-7) logikusan egy bájt. Az ezeket követő ellenőrző bitet XOR-ral képezik belőlük, segítségével páratlan számú bit hibáját lehet a segítségével detektálni. Ha a data marker új adat, akkor a következő bájtot olvassa be gép, míg a data vége esetén befejezi azt.
(?,?) (?,?) (?,?) (?,?) (?,?) (?,?) (?,?) (?,?) (?,?) (?,?) | | | | | | | | | | bit0 bit1 bit2 bit3 bit4 bit5 bit6 bit7 | | | | checkbit | data marker
A teljes adat sikeres betöltéséhez a gépnek szüksége van még pár dologra. Egy elmentett programblokk az alábbiakból áll:
- Leader (bevezető). Ennek több szerepe van. Egyrészt ez alatt stabilizálódhat a motor fordulatszáma, másrészt az itt mért időtartamok segítségével a program bizonyos mértékig kompenzálni tudja a szalagnyúlást vagy lassabb motor fordulatszámot.
- Pilot: Rövid impulzusok, amiknek a száma azonosítja a további blokkok típusát:
- $6A00 fejléc.
- $1A00 adat és fejléc ha az „Adat blokk SEQ fájlhozt tartalmaz”.
- $4F fejléc és adat ismétlés (A fejlécet és adatot is kétszer rögzítik)
- Sync (szinkronizáció) Az új adatrész előtti visszaszámlálás.
- fejléc és adat esetén: $89 $88 $87 $86 $85 $84 $83 $82 $81
- fejléc és adat ismétlés: $09 $08 $07 $06 $05 $04 $03 $02 $0
- Header (fejléc) 192 bájtból áll.
- 1 bájt: Azonosítja a típust:
- $01= BASIC program
- $02= Adat blokk SEQ fájlhoz (Ebben az esetben a következő 20 bájt elmarad és a Fejlécben tárolt adat 191 bájt hosszú)
- $03= PRG fájl
- $04= SEQ fájl fejléc
- $05= Szalag vége jel
- 2 bájt : Kezdő cím (A betöltött adatot ettől a címtől kezdve tölti be)
- 2 bájt : Utolsó cím+1 (Eddig a címig tart a betöltés)
- 16 bájt : Fájlnév
- 171 bájt: Fejléc adat, ami gyakran betöltő kódot tartalmaz
- 1 bájt: XOR-ral képzett adatellenőrző
- 1 bájt: Azonosítja a típust:
- Data (adat) A betöltendő adatot tartalmazza kiegészítve egy megszokott módon XOR-ral képzett ellenőrző bájttal.
Az egész bonyolultnak tűnik, de teljesen logikus. Chuck Peddle talán kicsit túlkomplikálta a bitek azonosítását és duplikálta a fejléc és adat blokkokat is. Ez azt eredményezte, hogy bár viszonylag megbízható lett, de cserébe lassú is. A turbo loaderek azért tudtak megjelenni, mert eléggé megbízhatóan lehetett egy-egy rövid/hosszú impulzusra bízni az alap kettő helyett 1-1 bit rögzítését.
Más gépeknél is hasonlóan épült fel az adattárolás. Szinte mindegyik impulzushossz mérésen alapul. Amikor frekvenciát írnak akkor az csak az idő reciprokát jelenti. Felhasználói szemmel volt még pár praktikus közös vonás. Percekig vártuk türelmesen, hogy betöltsön a program. Ez persze nem mindig sikerült, voltak gépek amiknél jobb volt a formátum, de egyik sem volt 100%-ig biztonságos. Ha nem sikerült a betöltés, vagy meguntuk a játékot, akkor meg kellett keresni a következő program elejét. A kazettaborítóban lévő papírra, vagy egy kockás füzetbe írtuk fel a programokat és a hozzájuk tartozó számláló állását. Ha elfelejtettük kinullázni a számlálót, akkor nem maradt más, mint előre tekerni és ezt megtenni. Ha ezt nem akartuk megtenni, akkor belefüleltünk a szalagba. Kellő gyakorlattal már felismertük a bevezető hangját. Ha programokat csereberéltünk, akkor gyakran előfordult, hogy a magnó nem olvasta a másik magnón felvett programot. Ilyenkor a fejet kis csavarhúzóval kellett beállítani. Ma már nosztalgiával emlegetjük ezeket az időket, de hogy őszinte legyek már akkor is hatalmas előrelépésnek és tartottuk a floppy meghajtókat.
Felhasznált irodalom:
http://sidpreservation.6581.org/tape-format
http://c64tapes.org/tape_loaders.php
http://ht.homeserver.hu/html/konvertibmcas.htm
Views: 791