Led 022005
 

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

  4 komentáre na “1.díl: znaky – aktualizováno”

  1. se tesim na dalsi dil! o cempa bude? 🙂

  2. Sam nevim. Delas domaci ukoly?

  3. 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. Tak jsem to v clanku opravil. Dekuji za upozorneni.

Je nám líto, ale formulář pro přidávání komentářů je momentálně uzavřen.