http://ci5.speccy.cz
LOAD "world"

SinDiKat

ZX Magazin

hw.speccy.cz

ShuCon

LOGOUT

Softhouse ZX Spectrum

http://ci5.speccy.cz/assembler/1dil-znaky.php
Assembler
začínáme s assemblerem

1.díl: znaky – aktualizováno
2. 1. 2005 13:31 – rubrika Assembler

Takže začínáme nový seriál a vynecháme popisy instrukcí, ty už jste si nadrtili z jiných publikací a začneme něčím jednoduchým. Zkusíme vytisknou znak a pak zkusíme celý text.

Nejjednodušší metoda, jak dostat na obrazovku znak je použití ROMky. Na to slouží rutina na adrese 16 (#10). Tuto rutinku voláme rst 16.

Příklad

       ld   a,"A"
       rst  16

Nevýhoda této metody je, že ke svému běhu potřebuje systémové proměnné Basicu. Pro nenáročné programy je to v pohodě, ale pro programy, které využívají celou RAMku, je to nevýhoda.

rst 16 lze posílat i řídící kódy, které ovlivňují polohu a barvu textu. Nejříve předejte pomocí rst 16 řídící kód a pak jeho parametr. Ukázky budou v příkladech.

6 - posune kurzor na další pozici
8 - kurzor doleva
9 - kurzor doprava
10 - kurzor dolu
11 - kurzor nahoru
13 - ENTER
16 - INK
17 - PAPER
18 - FLASH
19 - BRIGHT
20 - INVERSE
21 - OVER
22 - pozice textu
23 - TAB

Ještě než začnete obrazovku plnit znaky, musíme si říci, jak je obrazovka pro rst 16 rozdělena: obrazovka má 24 řádek a 32 sloupců, avšak řádky jsou rozděleny na 2 kusy. První část je 22 řádek a je to kanál 2 a další 2 řádky (editační) je kanál nula. Před prvním použitím kanálu je třeba jej otevřít:

Příklad

START   ld   a,2      ;číslo kanálu
        call $1601    ;otevřít
        ld   a,22     ;řídící kód
        rst  16       ;pošli
        ld   a,10     ;číslo řádku
        rst  16       ;pošli
        ld   a,20     ;číslo sloupce
        rst  16       ;odešli
        ld   a,'A'    ;znak
        rst  16       ;už ho konečně vytiskni
        ret

Pokud budeme chtít psát znaky do editační oblasti, musíme otevřít kanál nula. Podobně se to dělá v Basicu příkazem PRINT #0;AT 0,0;"pokus".

START   xor  a        ;číslo kanálu
        call $1601    ;otevřít
        ld   a,22     ;řídící kód
        rst  16       ;pošli
        ld   a,1      ;číslo řádku
        rst  16       ;pošli
        xor  a        ;číslo sloupce
        rst  16       ;odešli
        ld   a,18     ;kód pro nastavení FLASH
        rst  16       ;pošli
        ld   a,1      ;nastav 1
        rst  16       ;pošli
        ld   a,'A'    ;znak
        rst  16       ;už ho konečně vytiskni
        ret

Pokud již máme otevřen kanál 2 a otevřeme kanál 0, kanál 2 bude uzavřen. Zkrátka rst 16 je vhodné tam, kde nám stačí jen prvních 22 řádek.

Protože rst 16 je v ROM, je třeba, aby registr iy ukazoval na 23610, tedy do oblasti systémových proměnných. Pomoci nich je možné taky ovlivnit barvu výsledného znaku, pokud potřebujete totálně překopat barvy tak, že by to zabralo 10 řídících kódů, lze toto nastavit jediným POKE. Tato proměnná se nazývá ATTR-T a je: 23695. Vzoreček pro výpočet hodnoty je takto: 128*FLASH+64*BRIGHT+8*PAPER+INK (pro černý inkoust a bílý papír je to 7*8+0=56).

Příklad

START   ld   a,2
        call $1601
        ld   a,242
        ld   (23695),a
        ld   a,'A'
        rst  16
        ret

Vidíte, že je to o mnoho jednodušší, než se babrat postupně s několika řídícími kódy.

Za domácí úlohu si zkuste na obrazovce pomocí znaků namalovat něco jako hořící svíčku (když byly ty vánoce).

svicka

Další články v seriálu:
Vytisknout článek

Autor: SweetKomentářů: 4


Starší příspěvky:

Novější příspěvek: 2.díl: opět znaky - 9. 1. 2005
Starší příspěvek: 0.díl: příprava assembleru - 2. 1. 2005

Úplně prehistorické příspěvky najdete v archívu rubriky.


Komentáře:

[1] Wixet – 10.1.2005 14:40

se tesim na dalsi dil! o cempa bude? :)

[2] sweet (web) – 10.1.2005 16:12

Sam nevim. Delas domaci ukoly?

[3] mikezt (web) – 12.1.2005 21:12

Pozor na kody 10 (kurzor dole) a 11 (kurzor hore). Tie nejdu pouzit, namiesto nich sa vypisuje znak '?'. Kto by si chcel blizsie pozriet, ako v ROM osetruje riadiace kody, tak na adrese 09F4h je rutina PRINT-OUT, ktora to ma na starosti.

[4] sweet (web) – 15.1.2005 11:14

Tak jsem to v clanku opravil. Dekuji za upozorneni.


Přidání komentáře
Identifikace autora

Váš komentář

Nepoužívejte HTML značky ani entity, pouze text. URL začínající http:// nebo ftp:// budou zobrazeny jako odkazy (za URL nechejte mezeru, aby byl rozpoznán konec). Vložit můžete maximálně tři odkazy, jinak bude rozpoznán jako spam. Na jiné komentáře se odkazujte zápisem [XX], kde XX je číslo příspěvku. Jeden enter se zformátuje jako nový řádek, více enterů za sebou jako nový odstavec.