?Mam jeste otazku na zdejsi znalce: Jak se loadovalo z pasky, nyni ne jaka tam byla modulace, ale technicky se delo co? Nacetly se bloky z pasky az do nejakeho EndOfTape, ukladalo se to do RAM a pak se to cele spustilo?
Na nejakych youtube videich se ZX Spectrum vidim a slyslim, ze uzivatel zacal nahravat, najednou se tam objevilo logo hry, a nahravani pokracuje. Jak je toto udelane? nacte se z pasky jen kousek (loader), ten se spusti, zobrazi obrazovku, a potom pokracuje v nahravani
U většiny her se nahrávaly tři bloky – první byl loader v BASICu, ten se po spuštění automaticky spustil a inicioval nahrávání ostatních částí a finální spuštění nahraného kódu. Dalším blokem byl screen – většinou se data přímo nahrávala do videoram, a posledním blokem byla samotná hra. Existovaly ruzné variace, navíc tady většinou nekolovaly originální hry ale cracky.
Jiné domácí 8bity měly „jen“ loader ve strojáku (v ROM) a nahrával se přímo program do RAM a teprve pak se pustil. Už se nepamatuji, jestli to mělo nějakou hlavičku, která dopředu říkala, jak je program dlouhý a kam se má po nahrání přesunout.
Později se začaly objevovat různá turba na zrychlení nahrávání, což byl v podstatě upravaný loader. Každopádně pokud si programátor udělal vlastní loader, tak (přinejmenším na strojích s Z80A) si víceméně mohl v průběhu nahrávání dělat co chtěl (házet datama, hrát hudbu, kreslit atd. co procesor stíhal).
Mimochodem pro mladší ročníky by mohlo být zajímavé, že ty pruhy v pozadí (border) v průběhu nahrávání nejsou dělané bitmapou. Pro border byl dedikovaný jeden barevný atribut, který říkal, jakou má border barvu jako celek.
Efektu z pruhy se docilovalo změnou tohoto atributu (ať už byl přes port nebo paměť) rychleji něž snímková frekvence obrazovky.
Dokonce jsem viděl, jak si někdo dal práci s časováním a vykreslil 6 stínovaných (na ČB monitoru) trubek v borderu, které pěkně plynule přes sebe rolovaly nahoru-dolů.
Na každém počítači se to dělalo trochu jinak. Jak už bylo řečeno – hlavička + data, přičemž ve hlavičce bylo cosi jako název, typ dat, kontrolní součet, počet bajtů v datovém bloku a obvykle ještě adresa, od které se mají data ukládat do paměti.
Hlavně v tom nehledej žádné složitosti – všechno bylo tak jednoduché, jak to jen jde – nejjednodušší loader (což zahrnuje softwarovou demodulaci a ukládání dat do RAM) se dal napsat na nějakých 60 bajtů ve strojáku.
Pokud jde o různé triky při nahrávání, tak to opět záviselo na konkrétním počítači – např. u toho Spectra se to dělalo buď tak, že celý program začínal jednoduchoučkým prográmkem, který zajistil nahrání obrázku (prostě blok dat, který se nahrál do videoram, vlastně hardcopy obrazovky uložený na pásek), a poté vlastního programu. Ale zajímavějších efektů se dalo dosáhnout tím, že úvodním blokem byl kód vlastního loaderu, který nahrazoval originální rutinu v ROM, a pomocí této vlastní rutiny se nahrál zbytek. Myšlenka vycházela z toho, že loader vlastně většinu času (speciálně u Spectra) akorát čeká na hranu signálu, znamenající rozhraní mezi jednotlivými bity, takže by v rámci tohoto čekání mohl dělat něco užitečného – např. něco vypisovat nebo kreslit na obrazovku – odměřovat čas do konce nahrávání, vypisovat nějaký úvodní komentář apod. Samozřejmě to muselo být rozdělené tak, aby se elementární krok toho algoritmu vždy vešel do časové mezery mezi hranami signálu.
A pokud ještě špekuluješ nad těmi pruhy po kraji obrazovky, tak to fungovalo jako monitor signálu z magneťáku a řešeno to bylo tak, že při každé hraně loader akorát změnil bajt, znamenající barvu rámečku okolo obrazovky. Obvod, generující videosignál, před vykreslením každého obrazovkového řádku akorát zkontroloval tuto barvu a podle pozice paprsku na obrazovce tam buď kopíroval videoram, nebo jen barvu z tohoto bajtu, čímž vytvořil rámeček. Protože řádková frekvence televize je asi o řád větší než frekvence hran signálu z kazeťáku, stihlo se mezi sousedními hranami vykreslit jen několik řádků stejnou barvou, takže výsledným efektem je vlastně takový osciloskop v binárním režimu s časovou základnou rovnou řádkové frekvenci TV. Pomalé střídání barev celého rámečku před příchodem vlastního signálu je způsobeno opakovaným přetékáním čítače, sloužícího k odměřování značek pro nuly a jedničky. Primitivní, ale funkční.
Pro nahrávání obrazovky měl Spectrum v BASICu dokonce speciální příkaz: LOAD „název“ SCREEN$, ale u těch her to zobrazování při nahrávání fungovalo trochu jinak. Je to odvozené z rozložení paměti tohohle počítače (adresy jsou desítkově a nevypisoval jsem všechny podrobnosti):
*----------------------------------------------
| ROM (16 KiB)
| 00000 – 16383 interpret BASICu
*----------------------------------------------
| RAM (48 KiB)
| 16384 – 23295 obrazovka
| 23296 – 23754 systémové proměnné
| 23755 – začíná program v BASICu
| (obvykle, pokud není připojen microdrive),
| za ním jsou basicové proměnné,
| pak následuje pracovní prostor a zásobník.
| 65535 – konec paměti
*----------------------------------------------
Do počítače se nejdříve nahrál krátký prográmek v BASICu, obvykle jeden řádek, který zajistil samotné nahrávání hry. To začalo od adresy 16384, nejprve se nahrála obrazovka a potom se plynule pokračovalo do zbytku paměti, stále v jednom bloku třeba až na její úplný konec, celých 48 KiB. To trvalo něco přes pět minut.