Uživatelské nástroje

Nástroje pro tento web


lnxspectrum:ulaplus

ULA Plus

ULA Plus je upravený zákaznický čip, starající se v ZX Spectrum mimo jiné o grafické funkce. V ZX Spectru oficiálně nikdy nasazen nebyl, jedná se o čip vyvinutý komunitou nadšenců. Podobných nápadů i s lepšími výsledky je víc, například Spec256, rozdíl je však v tom že ULA Plus je myšlena jako reálně vyměnitelný čip za původní čip ULA v originálním ZX Spectrum. Nevím jestli se to někdy zrealizovalo, nebo jestli to skončilo jen u testů ve FPGA / CPLD. Z mého pohledu by se mi moc líbilo, kdyby ULA Plus byla oficiálně ve své době montována do ZX Spectrum 128, protože by si takové rozšíření zasloužila.

ULA Plus rozšiřuje počet barev zobrazených současně na obrazovce z 16ti (originál ZX) na 64, a každá z těchto barev je vybrána z palety 256 barev. Na výběr jsou tyto barvy:

ZX Spectrum toto rozšíření nijak nezatěžuje, protože ULA Plus nemá žádné paměťové nároky navíc, ani pro svou funkci nepotřebuje asistenci procesoru. Systémové nároky jsou stejné jako u originálního ULA čipu.

Ukázka, vlevo originál, vpravo stejný obrázek, jen s jinou paletou:

Ukázka několika pěkných konverzí obrázků z C64:

ULA Plus funkce a ovládání

Porty

ULA Plus se ovládá přes dva porty, podobně, jako AY čip:

48955 zápis Výběr registeru (0-64)
65339 zápis/čtení Obsah registru

Registrů má ULA Plus 65. Od 0 do 63 je to nastavování a čtení obsahu indexových barev, ve 64 registru se prvním bitem povolují funkce ULA Plus. Hodnota barvy je obsažená v jednom bajtu:

0xGGGRRRBB
bity 0-1modrá složka (0-3)
bity 2-4červená složka (0-7)
bity 5-7zelená složka (0-7)

Atributy ve videoram

ULA Plus interpretuje atributy barev (22528-23295) následovně:

bity originální ULA ULA Plus
0-2barva inkoustubarva inkoustu
3-5barva podkladubarva podkladu
6-7Bright 1, Flash 1výběr alternativní palety (0-3)

Barevný register se vybere podle následujícího vzorce:

vybraná paletaSpectrum barva01234567
0 Ink 01234567
0 Paper89101112131415
1 Ink 1617181920212223
1 Paper2425262728293031
2 Ink 3233343536373839
2 Paper4041424344454647
3 Ink 4849505152535455
3 Paper5657585960616263

Takže pokud budeme chtít například z BASICu vybrat barvu inkoustu nastavenou v registru 50, napíšeme:

FLASH 1: BRIGHT 1: INK 2

Příkazem FLASH a BRIGHT tedy vybíráme alternativní paletu (0-3), INK pak vybírá barvu z registrů 0-7, PAPER pak z registrů 8-15. Funkce FLASH blikání ani BRIGHT zvýšení jasu v režimu ULA Plus nefunguje.

Border barva

Border barva se výbírá vždy z registrů 8-15. BORDER 0 je tedy barva v registru 8, BORDER 7 je barva v registru 15.

Inicializace

Po resetu ZX Spectra jsou všechny barvy nastavené na 0 - černou. Pokud tedy jen zapneme funkce ULA Plus, obrazovka bude černá. Je potřeba nastavit barvy. Inicializace a nastavení barev může v ASM vypadat takhle:

; LnxSpectrum ASM editor (www.ilnx.cz)

		org	50000
		ld	a,64		; Zapneme funkce ULA Plus
		ld	bc,$bf3b
		out	(c),a
		ld	a,1
		ld	b,$ff
		out	(c),a
	
		ld	hl,barvy	; a nahrajeme 64 indexových barev
		ld	d,0
ulaplus:	ld	a,(hl)
		inc	hl
		ld	b,$bf
		out	(c),d
		ld	b,$ff
		out	(c),a
		inc	d
		ld	a,d
		cp	64
		jr	nz,ulaplus
		ret			; a vrátíme se do BASICu

;Zde jsou definice nejpodobnějších barev ke standardním barvám originální ULY:
barvy:		defb	$00, $02, $18, $1b, $c0, $c3, $d8, $db	; INK
		defb	$00, $02, $18, $1b, $c0, $c3, $d8, $db	; PAPER
		defb	$00, $03, $1c, $1f, $e0, $e3, $fc, $ff	; +BRIGHT
		defb	$00, $03, $1c, $1f, $e0, $e3, $fc, $ff
		defb	$db, $d8, $c3, $c0, $1b, $18, $02, $00	; +FLASH
		defb	$db, $d8, $c3, $c0, $1b, $18, $02, $00	;
		defb	$ff, $fc, $e3, $e0, $1f, $1c, $03, $00	; +BRIGHT/+FLASH
		defb	$ff, $fc, $e3, $e0, $1f, $1c, $03, $00	

WEBové zdroje

lnxspectrum/ulaplus.txt · Poslední úprava: 2018/07/31 10:05 (upraveno mimo DokuWiki)