Obsah

Vkládání obrázků a spritů

ZX jednobitové, attributy

Ve starších verzích LnxSpectrum Asm editoru, případně v jiných editorech / kompilerech se obrázky nebo sprity musí předem převést do binárního formátu, přesně na míru naší aplikace. Tento binární soubor se poté vloží pomocí Include nebo Incbin (podle druhu kompileru) do našeho projektu. Nevýhoda je že při každé úpravě grafiky je nutno celý převod opakovat. Tento klasický postup v LnxSpectrum funguje bez problémů.

Od verze v1.6.9b však editor v LnxSpectrum nabízí ještě jednu možnost vložení obrázků a spritů do našeho projektu, a je o mnoho pohodlnější. Do našeho projektu můžeme vložit přímo soubory JPG nebo PNG, bez nutnosti je předem nějak převádět do binárního formátu. Importovaný obrázek musí mít správný cílový rozměr v pixlech, pokud je barevný, měl by dodržovat HW omezení ZX Spectrum pro zobrazení (maximálně 2 barvy v attributu 8×8 pixlů).

Konvertor není zaměřen na co nejdokonalejší převod fotografií do ZX Formátu. Obrázek musí počítat s HW omezením jaké ZX Spectrum má. Konvertor neobsahuje žádné pomocné filtry typu dithering. Pro převody fotografií bude lépe použít nějaký specializovaný program zaměřený na tyto konverze. Konvertor v současnosti nepodporuje barvy ULA Plus, podporuje pouze barvy originálního ZX Spectrum.

Jak vložit obrázek do projektu

Ujistěte se že máte verzi nejméně v1.6.9b.

Vytvoříme si nový prázdný Projekt. Vlevo nahoře je okno, ve kterém je zatím jediný modul main.asm. Klikneme pravým tlačítkem v tomto okně a zvolíme v menu Import (viz. obrázek). V následujicím dialogu vybereme připravený obrázek ve formátu JPG nebo PNG. Šířka obrázku musí být dělitelná 8, a pokud chceme používat i barvy, musí být dělitelná 8 i výška. Nejmenší obrázek je tedy 8×1 pixel, maximální velikost není limitována, snad jen aby se to vešlo do paměti ZX Spectrum.

Po naimportování obrázku ho uvidíme v seznamu. Pokud na něj klikneme, vykreslí se nám vpravo jeho náhled (v našem příkladě je to kost :) ).

Způsobů jak uložit obrazová data je několik druhů, například pro účely spritů do her je potřeba mít data v jiné posloupnosti za sebou, než je klasický Screenshot z videoram. Navíc někdy chceme data i s barvami, někdy jen bitmapu bez barev. V případě fontů je potřeba také jiná posloupnost dat. Záleží na konkrétní aplikaci. LnxSpectrum kompiler umí několik způsobů těchto posloupností. U každého obrázku může být posloupnost jiná. Poklepeme dvojklikem na obrázek v našem seznamu a vyskočí nám okno, kde si několik věcí můžeme přednastavit.

Okno přednastavení posloupnosti dat

Popis předvoleb:

Data type - jsou různé metody posloupnosti dat. V náhledu je posloupnost dat znázorněna graficky v levém okně.

Classic SCR - pokud je importovaný obrázek o velikosti 256×192 px, je možné ho uložit v posloupnosti dat jako klasický screenshot videoram.

Paper Darker Color - pokud je zaškrtnuto, bude tmavší barva vždy nastavena jako Paper. V opačném případě tam vždy bude světlejší barva.

Compress data - vytvořená data budou kompimovaná, a dají se v našem projektu rozbalit pomocí decompress.lib


Kompiler obrázky konvertuje jen při prvním kompilování. Při následujících kompilování se již použijí předchozí připravená data. Proto může první kompilace trvat o něco déle. Rekompilace obrázků se dá také vyvolat ručně, buď změnou druhu posloupnosti dat, nebo v seznamu souborů v menu dát „Refresh files“


HGFX, indexové barvy

Do HGFX projektů se dají vkládat přímo Indexované obrázky, s maximálně 256 barvami. Musí být předem převedené do indexových barev, s RGB obrázky nepracuje. Šířka musí být v násobcích 8. Tento Import se provádí Direktivou přímo v ASM projektu.

#bpl file.png/gif parameters

Pomocí parametrů můžete nastavit kolik planar vrstev se má z obrázku vzít, jestli se jedná o Sprity, jestli mají mít Masku, jestli každý Sprite má být zarovnán na adresu 0xNN00, průhlednost, a dalších několik věcí které si postupně probereme.


pN N=Planes

Tento parametr říká kolik planar vrstev bude použito. Je to vlastně informace o počtu barev obrázku.

Parametr Počet barev
p12 barvy
p24 barvy
p38 barev
p416 barev
p532 barev
p664 barev
p7128 barev
p8256 barev

Jednotlivé bitplany se ukládají hned zasebou jeden po druhém.


rev - Reverse planes

Pořadí ukládaných bitplánů jeden po druhém může být od nejvyšší do nejnižší, nebo naopak. Pořadí se přehodí pomocí rev - Reverse planes parametru.


wN (Sprite Width), hN (Sprite Height)

Pokud obrázek obsahuje jen jeden obrázek, není tento parametr povinný. Ale v jednom obrázku může být obrázků více, třeba jednotlivé Sprity, postavičky nebo jednotlivá písmena v obrázku s Fontem kde písmena jsou vedle sebe. V takovém případě nastavíme šířku, případně i výšku jednoho Spritu. Například když budeme mít obrázek s fontem který je ve 4 barvách, kde jsou písmena nakreslené vedle sebe. Obrázek má šířku 256×64 px, jedno písmeno má šířku 16×16 px. Je v něm tedy 16 písmen vedle sebe, ve 4 řadách. Použijeme parametry:

#bpl font.gif p2 w16 h16

font.gif je zpracovávaný obrázek, p2 = 2 plány, tedy 4 barvy. w16 h16 je šířka a výška jednoho Spritu (písmena) v pixelech.


mask

Pokud je obrázek Sprite, a budeme chtít v HGFX s ním pohybovat přes jiné objekty, bude možná potřebat masku na vykrytí místa, kam se Sprite bude kreslit. Tento parametr Vám jej automaticky vygeneruje podle nulté indexové barvy. Získáte tím tedy další 1 bitplán, masku, která se uloží vždy jako první.


fl - hfill 0 behind each sprite

V některých projektech by se hodilo, kdyby každý Sprite vygenerovaný z jednoho obrázku byl zarovnaný tak, aby vždy začínal na 0 v nižším bajtů adresy. Tento parametr tohle zajistí.


ch - Chunky data

Někdy chceme data mít v Chunky režimu, místo planárního. Chunky režim je že každý pixel je reprezentován jedním bajtem ve kterém je vždy indexová barva konkrétního pixelu. Tento režim aktivujeme tímto parametrem.


Barvy, paleta

pal, palBGR

Ke správnému zobrazení obrázku potřebujeme znát jeho paletu. Tu si můžeme vyexportovat z obrázku pomocí parametru pal. V tomto případě dostaneme tolik barev, kolik jich je nadefinováno pomocí parametru pN (počet plánů) a ve formátu R,G,B. Pokud chceme paletu raději ve formátu B,G,R, použijeme parametr palBGR.

tN - Transparency Index

Někdy je průhlednost nastavená na jiném barvovém indexu než obvyklá 0. Tímto parametrem jí můžeme přenastavit, ale pokud se paleta opakuje pro více importovaných souborů, může to mít nečekané výsledky. Tento parametr totiž změní pořadí barev v importovaném souboru. Průhlednost používá například generátor Masky (mask).


Ukládání generovaných dat

c - Compress All, cb - Compress each BPL

Generovaná data můžeme do paměti uložit v komprimované formě (Lnx compress v3). Pokud chceme všechna data kompimovat do jednoho datového bloku, použijeme parametr c. Tím můžeme celý blok dat rozbalit jedním příkazem, a následně zpracovat bitmapu po bitmapě. Někdy je ale vhodnější kvůli nedostatku paměti komprimovat každou bitmapu z obrázku samostatně, použijeme tedy parametr cb. Tím můžeme rozbalit jeden bitplan, zpracovat, nasledně rozbalit další a opět zpracovat, jeden bitplan po druhém.


aN-N - Write block

Paměťový prostor Z80 je bohužel omezený. Ale některé obrázky jsou v indexové formě obrovské. Například obrázek 256×192 v 256 barvách zabere 48 KB. To se jen těžko při kompilování ASM projektu někam vejde v jednom kuse. Data se musí rozřezat na menší části a kompilovat například do URAM paměti, nebo alespoň do ZX128 rozšířené paměti. K tomu slouží tento parametr. Příklad, obrázek o velikosti 48 KB budeme chtít dát do ZX128 paměti, konkrétně RAM page 1,3 a 4.

	#RAMPAGE 1
	org	49152
	#bpl pic.gif p8 a0-16383

	#RAMPAGE 3
	org	49152
	#bpl pic.gif p8 a16384-32767

	#RAMPAGE 4
	org	49152
	#bpl pic.gif p8 a32768-49151

Větší objem dat a Element URAM

Pokud chceme ukládat větší objem dat (například obrázek 256×192 ve 256 barvách viz. aN-N), můžeme při ukládání do URAM Elementu použít jinou funkci než rozřezávat data na bloky. Kompiler umí velký blok dat uložit do URAM v jednom kuse, kde se automaticky jednotlivé části ukládají do následujících RamPages.

	#ELEMENT_RAMPAGE p0+ 10
	ORG	0
	#bpl pic.gif p8		

Tento ukázkový kód bude importovaný obrázek ukládat do URAM Elementu, od RamPage 10 a následující. Konkrétně 48 KB uloží do stránek 10 až 15. Právě „+“ u zóny (p0 = protected zone 0) říká, že pokud bude víc dat, má automaticky přejít na následující RamPage.


Kompiler obrázky konvertuje jen při prvním kompilování. Při následujících kompilování se již použijí předchozí připravená data. Proto může první kompilace trvat o něco déle. Rekompilace obrázků se dá také vyvolat ručně, buď změnou druhu posloupnosti dat, nebo v seznamu souborů v menu dát „Refresh files“