Výpis 64 znaků na řádek

Motivace k napsání tohoto programu byla velmi jednoduchá. ZX Spectrum dokáže zobrazovat pouze v jednom jediném grafickém režimu s rozlišením 256x192 bodů. Barvy lze přitom nastavit jen pro čtverce 8x8 bodů, kde každý ze čtverců je složen z bodů (bit v log 0 = paper, bit v log 1 = ink) uložených v osmi bytech, které tvoří vodorovné osmibodové čáry. V podstatě je to docela jednoduché, kromě výpočtu adresy bytu, který se zobrazuje pouhý pixel níž (viz. rutina DOWNHL), což ale v případě znaků 8 bodů vysokých lze radikálně zjednodušit na prosté zvýšení horního bytu adresy. Nejpodstatnější pro zobrazování textu je to, že na jeden mikrořádek (vysoký jeden pixel) se vodorovně vedle sebe vejde 32 bytů, to svádí používat výpis 32 znaků na řádek, kde jeden znak obsazuje plochu 8x8 pixelů a přesně kopíruje obarvitelné čtverce jako rutina RST 16 obstarávající veškeré výpisy Basicu a řady programů, které jí využívají. Z počtu bodů na výšku a způsobu adresování VRAM pak nejlépe vychází 24 řádků.

Nejjednodušším řešením je využívat vždy polovinu bytů a tím vměstnant na jeden řádek 64 znaků. Počet řádků ovlivnit lze, ale je to složitější a rutina by byla pomalejší a ušetřily by se tím nanejvýš dva pixely, které u mého písma používám pro zobrazení diakritiky. Zbytečně by se tím zhoršovala čitelnost znaků, které jsou už takto na hranici čitelnosti zvláště u horších monitorů, nebo TV -> VGA převodníků. Existují i zobrazovače azbuky využívající stejný princip a dokonce různá stylovaná písma, což je oproti prostému ASCII opravdu luštěním šifer (a to azbuku čtu jinak zcela bez problémů).

Existuje samozřejmě mnoho různých jiných způsobů jak text vypisovat, třeba rutina pro výpis 42 znaků na řádek (6px široké znaky, 2 pixely zbudou), existuje rutina pro výpis proporcionálních znaků používaná především lidmi okolo Proximy atd... Ale žádná z variant nemůže být z principu tak rychlá jako prostý výpis znaků 8x8 pixelů. Mikroprint 4x8px se této jednoduchosti a rychlosti blíží ze všech variant nejvíc.

Můj program umí provádět nejzákladnější funkce stejně jako rutina RST 16 (bohužel neumí vše, ale i tak to většinou stačí). Umí tisknout znaky vysoké 8 bodů a široké 4 body, na 1 řádek se jich vejde 64. Počet řádků je stejný jako u standardního výpisu tj. 24 řádek. Kromě normálního výpisu znaků umí tato rutina ukončit řádek a začít na začátku dalšího pokud je v textu obsažen kód 13 a ještě umí změnit tiskovou pozici. Narazí-li na kód 22 bude následující dva byty považovat za nové číslo řádku (0 až 23) a sloupce (0 až 63). To je prakticky vše. Fonty a zdrojové kódy jsou ke stažení na konci stránky.

Ukázky možného výstupu z programu - první dva pocházejí z testovacího programu, kde jsem rutinu MPrint ladil, třetí je screenshot z programu Ufeditor 2 ve kterém je možné písma kreslit. Další dva pocházejí z programu VPL 2, kde je mikroprint použitý pro všechny výpisy textů.

screenshot screenshot screenshot
screenshot screenshot

Download

Zdroje informací: Toto je víceméně vlastní výtvor na základě vypozorovaného vnějšího chování podobných programů, kromě rutiny DOWNCH, která je (ač modifikovaná) z knížky Assembler a ZX Spectrum.

Opravené chyby

  • 1.1.2000 - přidal jsem font CP1250 a opravil chybný výpočet adresy při použití kódu 22
  • 2.5.2009 - mírná aktualizace textu, screenshotů, přidávám odkaz na nejnovější variantu programu

[ 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.