HRA

Danger! Adventurer at Work! Two
Herní styl AdventureWriter/Quill
Multiplayer Bez multiplayeru
Rok vydání 1992
Programátor Simon Avery
Grafik (Unknown)

INTRO

Assembler 9 - Znaky, znakové sady a VIDEORAM

Dostáváme se k zábavnější části v seriálu o programování assembleru na C64 a to je praktická ukázka dovedností počítače Commodore 64.

Standartní znaková sada C64 se nachází na adresách $D000 - $DFFF pod basic ROM. Znaků je celkem 1024. Tabulku znaků najdete (snad) na konci lekce. Znaky máme malé, velké a malé inverzí a velké inverzní. Každých z nich je 256. Jeden znak zabírá v paměti 8 bajtů.


Některé monitory vestvěné v cartridge např. Final Cartridge III umí tyto znaky zobrazit. My si již takový malý zobrazovač znaků ukázali.

Znakové sady

I když máme standartní znakovou sadu, neznamená to, že bychom nemohli použít znakovou sadu svoji. Na adrese $D018 (53272) můžeme přepnout datovou část znakové sady, takže po přepnutí můžeme mít znakovou sadu například od adresy $2000. Do této datové části si můžeme nakreslit znakovou sadu svoji a tuto používat.

bit $D018 - popis
7-4 základní adresa videomatice
3-0 základní adresa generátoru znaků

adresa od
adresa do
hodnota dec
hodnota hex
hodnota bin
$0800
$0FFF
#18
#$15
#%00001111
$2000
$27FF
#24
#$18
#%00011000
$2800
$3000
#27
#$1B
#%00011011
$3000
$37FF
#29
#$1D
#%00011101
$3800
$4000
#31
#$1F
#%00011111

Vysvětlení k tabulce je následující. Standartní znaková sada jsou vlastně znakové sady dvě. Znaková sada velká se zapíná příkazem POKE 53272,21 a malá příkazem POKE 53272,23. Příkaz poke nastavuje hodnotu přímo na adresu.
Znakovou sadu nacházející se například od adresy $2000 zobrazíme POKE 53272,24 nebo

LDA #24
STA $D018
RTS

Barevné znaky - Multicolor

Multicolor (dále jen MC) znaky se zapínají na adrese $D016. Vlastnosti adresy $d016 je v tabulce názorně popsán:

bit $D016 - popis
7-6 nepoužito
5 tento bit vždy vynulovat !
4 vícebarevný režim grafických znaků 1=zapnut
3 volba 38/40-ti sloupcového formátu. 1=40sl.
2-0 rolování na pozici X

MC znak nemá rozměry 8*8 bodů, ale jen 4*8. V MC módu se vždy dva bity vedle sebe semknou v jeden, který se obarví dle následujícího schéma.

bity barva adresa barvy
00 pozadí $D021
01 barva MC 1 $D022
10 barva MC 2 $D023
11 barva color RAM $D800-$DFFF

Obarvení znaku je pak jednoduché. Pozadí znaku (00) má barvu obrazovky , barvy MC volíme na adresách D022,D023 a třetí barvu volíme nastavením barvy na ColorRAM od adresy D800. Znamená to, že znak může mít 4 barvy. Toto můžeme využít například u znakových sad větších než 8*8 pixelů (protože v MC je rozměr znaku degradován na 4*8). Vytváříme-li znakovou sadu 16*16 pixelů, 16*8, nebo barevné pozadí hry, MC znaky určitě využijeme s přehledem.
A jak vytvoříme a zobrazíme větší znakové sady než 8*8 pixelů ??
Jednoduše.
Máme-li znakovou sadu 16*8 znaků, první část písmene editujeme na malém znaku a druhou část písmene na velkém znaku. Tyto znaky pak složíme vedle sebe. (aA) .. (bB) .. atd... Editujeme-li pak znakovou sadu 16*16 pixelů, složíme znak ze čtyřech možností písmene. Důležité je, aby znak byl v paměti editován na svých místech. Ale editory znaků s tímto počítají.

Máme-li v paměti vícebarevnou znakovou sadu 16x16, zobrazení pak vypadá následovně

Takto vypadá připravená znaková sada pro 16*16

Takto po zapnutém multicolor módu

a takto pokud přepneme znakovou sadu, kterou máme v paměti např. od adresy $2000

!!! POZOR !!!

Pro barvu na Colorram můžeme volit pouze barvy v rozmezí 0-7 !!

Extended color mód

Extended mód (dále EM) je druhý a zároveň poslední hardwarově podporvaný barevný mód znaků. V tomto módu se neobarvuje znak, ale pozadí znaku. A to na adresách $D022, $D023, $D024. Je-li režim zapnut, obarvení znaků je podle toho, jaké znaky píšeme. Znak normálně napsaný bez atributů je nepodbarven. Znak ze shiftem má svoji barvu, inverzní znak svoji a inverzí znak ze shiftem opět svoji barvu. Tento režim se zapíná na adrese $D011. Popis adresy zde:

bit $D011 - první řídící registr VIC
7 porovnání rastru viz $D012
6 rozšířený barevný režim znaků
5 standartní bitový režim 1=zapnuto
4 vypnutí obrazovky 0=vypnuto
3 volba 24/25 řádků obrazovky 1=25
2-0 posun po mikrobodu v ose Y

znak adresa barvy
znak+SHIFT $D022
Inv.znak $D023
inv.znak+SHIFT $D024

Při zapnutí tohoto módu znaků zůstavá rozlišení znaků standartně 8*8 pixelů. Nic se nezdvojuje jako u Multicolor znaků. Zapnout EM můžeme následovně:

LDA $D011
ORA #%01000000
STA $D011
RTS

Tento režim znaků nám dovoluje sice zobrazit podbarvené znaky, ale zato nám omezí jejich počet pouze na 64. Pro nedočkavce jsem si připravil jeden prográmek pracující v přesušení. A jelikož jsme zatím přerušení neprobírali, chcete-li jej opravdu pochopit dobře, moc ho zatím nestudujte. Tento program vám zatím jen předvede možnosti Extended color módu. Máteli FCIII nebo nějaký jiný cartridge, nejdříve ho vypněte (KILL aspol) a spus»te program SYS 4096.

VIDEORAM , COLORRAM a práce s ní

Videoram se standartně nachází na adresách $0400 - $07E8. Má 40 sloupců a 25 řádků. Přesně takto je organizovaná i ColorRAM, která je na adresách $D800 - $DBE8 . To znamená , že každý znak má svůj barevný kód. Znak na adrese $0438 má svoji barvu na adrese $D838 atd.
Znakovou a barevnou RAM jsme rychle proletěli v 3. lekci.

Commodore64 umí ale přesunout VIDEORAM hardwarově i na jinou adresu než $0400. Nejprve je důležité říci, že pamět C64, která je 64KB je organizována ve čtyřech blocích po 16KB. Tyto bloky se přepínají na adrese $DD00.

bit $DD00 - registr dat RS232, VIC II
7 sériová sběrnice - vstup dat
6 sér.sběrnice - vstup hodinových impulzů
5 sér.sběrnice - výstup dat
4 sér.sběrnice - výstup hodinových impulzů
3 sér.sběrnice - výstup ANT signálů
2 RS232 - výstup dat (USER port)
1-0 volba úseku pro VIC II.(Standart 11)

Videoram má ukazatel na adreses $0288. Na adrese $0288 se nachází horní byte videoram. Prepneme-li ale pouze tuto hodnotu, stane se, ze uvidíte "zamrzlou" obrazovku. Ke správnému přepnutí je zapotřebí nastavit správný bit na adreses $D018, která se stará o znakovou sadu a bank paměti videoram. Chceme-li přepnout videoram na jiné místo v paměti (v jiném bloku), musíme také přepnout bank paměti na adrese $DD00.Pro správné pochopení přepínání videoram je také znalost adresy $D018.

bit $D018 - řídící registr obsazení paměti VIC
7-4 základní adresa videomatice
3-0 základní adresa generátoru znaků

Pro přehled je zde tabulka možnosti posunu videoram a k ní hodnoty pro volbu znakové sady.

Videoram od $2000 - $23e8

vrchní byte Videoram ($0288) #$20  
přepínací registr ($DD00) #$03 %00000011
znaková sada od-do ($D018)    
normální znaková sada #133 %10000101
$2800 - $2FFF #138 %10001010
$3000 - $37FF #141 %10001101
$3800 - $3FFF #143 %10001111

Videoram od $4000 - $43e8

vrchní byte Videoram ($0288) #$40  
přepínací registr ($DD00) #$02 %00000010
znaková sada od-do ($D018)    
$5000 - $57FF #5 %00000101
$5800 - $5FFF #7 %00000111
$6000 - $67FF #9 %00001001
$6800 - $6FFF #11 %00001011
$7000 - $77FF #13 %00001101
$7800 - $7FFF #15 %00001111

Videoram od $8000 - $83e8

vrchní byte Videoram ($0288) #$80  
přepínací registr ($DD00) #$01 %00000001
znaková sada od-do ($D018)    
$8800 - $8FFF #2 %00000010
normální znaková sada #4 %00000100
$A000 - $A7FF #9 %00001001
$A800 - $AFFF #11 %00001011
$B000 - $B7FF #13 %00001101
$B800 - $BFFF #15 %00001111

Videoram od $C000 - $C3e8

vrchní byte Videoram ($0288) #$C0  
přepínací registr ($DD00) #$00 %00000000
znaková sada od-do ($D018)    
$C800 - $8FFF #3 %00000011
$E000 - $E7FF #8 %00001000
$E800 - $EFFF #11 %00001011
$F000 - $F7FF #13 %00001101
$F800 - $FFFF #15 %00001111

ASCII tabulka znaku Commodore 64

Nový příspěvek k článku

podpis :
První znak podpisu musí být vykřičník, jinak se příspěvek neodešle (ochrana proti spamu)

Advert

Hardcode and datamining by PCH of UNREAL, Hardware guru by RAY of UNREAL, Bugs report by SILLICON of UNREAL
UNREAL 2014-2021 Czech republic