Original | ColorAce™ |
![]() | |
![]() | |
![]() | |
![]() |
Suffix : |
Files:
Galerie. Kliknutím na obrázek jej převedete ...
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Program je určen pro převod obrázku do formátu ColorAce™ pro zobrazení na historickém počítači PMD85. Lokální obrázek lze načíst tlačítkem Upload, převede se automaticky. Soubor ve formátu *.png by měl mít správné rozměry (288 x 256 pixel), je vhodné jej předem upravit externím programem (např. GIMP). Data lze vyexportovat tlačítkem Download asm ve formátu *.S (gnu binutils pro Z80), jak jsou uspořádána je vidět z použití - viz tento jednoduchý příklad. Výsledkem je *.COM soubor, spustitelný pod MIKROS. Pole Suffix umožní přidat číselnou příponu (pro soubor i globální symbol image_data_NN uvnitř něj), pokud je potřeba používat více *.S souborů v jednom výsledném programu.
Další možností je použít tlačítko Add com file, které uloží již hotový *.COM soubor do filesystému browseru. Pak je možné převést další soubor (jiného jména), opět uložit, atd. Nakonec pak použít tlačítko Download p32, které všechny tyto soubory zapíše na bootovatelnou virtuální disketu a tu je pak možné uložit a následně použít v emulátoru.
Táhla pro vyvážení barev a práh citlivosti jsou funkční, ale celkem k ničemu, defaulní nastavení je tak to nejlepší, co z toho lze dostat. Proto je tam poslední tlačítko Set Defaults, které to vrátí zpět na původní nastavení.
Na webu je hotový celkem dobrý editor, který umí obrázek převést, ale chtěl jsem vyzkoušet, jak to vlastně funguje. Zkusil jsem tedy napsat jednoduchý převodník v Qt, ale pořád to nebylo ono. Naivní implementace ditheringu řádek po řádku už dávala použitelné výsledky, tak jsem to překlopil do webové verze. Jenže to pochopitelně pořád rozmazávalo svislé čáry. Tak jsem hledal, jak to udělat lépe - a našel jsem Floyd–Steinbergův algoritmus, který je opravdu dobrý pro pixel art. Dokonce i při takto mizerném rozlišení je vidět velká podobnost v testovacích obrázcích jako je Lena nebo hlava Michelangelova Davida. Ovšem funguje to především na černobílé obrázky (a ty jsou pak použitelné pro černobílou verzi PMD85). Barevné obrázky musí mít "čisté" barvy, oddělené tlustou černou čárou, jinak vznikají rušivé artefakty, protože metoda sice dává pixely v čistých barvách, ale různé barvy vedle sebe, což ColorAce neumí. Asi by šla vymyslet nějaká upravená metoda, ale nebylo by to tak jednoduché (a jen bůh ví, jestli by to bylo lepší). Takže ty táhla jsou vlastně jen zbytek po předchozích experimentech.
Dobrá, data tedy máme a teď co s nimi. Původně jsem chtěl udělat nějaký image-reader, ale nepovedlo se mi najít jak se v té době ukládaly obrázky. Nějaké finta na to asi byla, obrázky takto vytvořené mají velikost video RAM, tj, asi 12Kib, což je na takto malý systém docela dost. Druhá věc je, že psát to v assembleru je pro mě dost horor a tak jsem zvolil to co bylo nejjednodušší - vzít jednoduchý základ, který umí běžet pod MIKROS a kopíruje jednoduše data do video RAM a vygenerovaná data za to prostě přilepit. Takže výsledkem je *.COM se jménem původního obrázku, který když spustíte, tak ten obrázek vykreslí. Dostat to pak na virtuální disketu už není takový problém - existuje program, který to umí a od něhož jsou i dostupné zdrojáky. Takže ty jsou lehce upravené použity i zde.
Na konec jsem si trochu hrál se zdrojáky systémových programů PMD85, ve své době to lidi s assemblerem fakt uměli. Zkusil jsem převést do tvaru použitelného GNU binutils Z80 Monitor (verze 2 a 2A), Basic-G (2A) a driver pro natažení MIKROS z diskety. To byl opravdu oříšek - kód běží z nesouvislých úseků paměti. Tady je výsledek, po překladu je vše bit od bitu stejné jako originál.