2.6. Funkcia USR, rutiny z ROM

 

V tejto krátkej časti sa budeme venovať niektorým zaujímavým rutinám (podprogramom) z pamäti ROM, teda z operačného systému počítača, ktoré by vám mohli uľahčiť vaše počiatočné kroky pri práci v strojovom kóde.

Na začiatok pripomeňme funkciu USR. Táto funkcia slúži na volanie podprogramov v strojovom kóde. Pokiaľ jej argument ako x, tak x môže byť ľubovoľný celočíselný výraz z intervalu 0 až 65535 (v prípade použitia u udg môže byť argumentom znak uložený pod klávesom "A" až "U". V tejto časti budeme uvažovať ako argument x a riadenie je predané na adresu pamäti x.

Návrat zo strojového kódu musí byť zakončený inštrukciou RET a v prípade, že bolo zakázané prerušenie inštrukciou DI, musí byť opäť pred návratom do BASICu povolené inštrukciou EI.

Pri volaní funkcie USR je hodnota argumentu x predaná do registrového páru BC a po návrate je výsledkom funkcie posledná hodnota tohto registrového páru.

Počiatočnú prácu v strojovom kóde vám môžu uľahčiť nasledujúce rutiny z ROM:

 

- vymazanie celej obrazovky - okrem horných desiatich riadok

      RANDOMIZE USR 3652

 

- posun celej obrazovky o jeden riadok hore:

      RANDOMIZE USR 3280

 

- posun celej obrazovky o 22 riadkov smerom hore:

      RANDOMIZE USR 3330

 

- výpis dĺžky voľnej pamäti pre program v BASICu:

      PRINT 65535 - USR 7962

 

- reset počítača:

      RANDOMIZE USR 0

 

- čakanie na stlačenie ľubovoľného klávesu; po jeho stlačení sa      

  vypíše dĺžka čakania v 1/50 sek.:

      PRINT USR 7997 - USR 7997

 

- výpis textového reťazca - 203Ch (8252):

      .

      .

      LD A,02h                     (kanál pre výpis na obrazovku)

      CALL 1601h              (otvorenie kanála)

      LD DE,počiatočná adresa textu v pamäti

      LD BC,dĺžka textu v bytoch

      CALL 203Ch

      .

      .

 

- pípnutie - 03B5h (949)

      .

      .

      LD DE,dĺžka tónu

      LD HL,výška tónu

      CALL 0385h

      .

      .

 

- save na pásku - O4C2h (1218):

      .

      .

      LD IX,počiatočná adresa úseku pamäti pre SAVE

      LD DE,dĺžka úseku v bytoch

      LD A,značkový byte (obvykle hlavička 0, telo 255)

      CALL 04C2h

      .

 

- load z pásky - 0556h (1366):

      .

      .

      LD IX,počíatočná adresa

      LD DE,dĺžka

      LD A,značkový byte (obvykle hlavička 0, telo 255)

      SCF

      CALL 0556h

      .

      .

 

- zmena farby bordera - 2298h (8859):

      .

      .

      LD A,farba borderu (môže byť z intervalu <0-7>)

      CALL 2298H

      .

      .

 

- vykreslenie bodu so súradnicami X, Y - 22E5h (8933):

      .

      .

      LD B,Y      (súradnica môže byť z intervalu <0-175>)

      LD C,X      (súradnica môže byť z intervalu <0-255>)

      CALL 22E5H

      .

      .

 

- cls (vyčistenie obrazovky) - OD68h (3432):

      .

      .

      LD A,02h          (kanál pre výpis na obrazovku)

      CALL 1601h  (otvorenie kanála)

      CALL OD68H

      .

      .

 

- zistenie výskytu bodu so súradnicami X,Y - 22CEh (8910):

      .

      .

      LD B,Y      (súradnica môže byť z intervalu <0-175>)

      LD C,X      (súradnica môže byť z intervalu <0-255>)

      CALL 22CEH(v A reg. je výsledok: 1/0 - bod je/nie je)

      .

      .

 

Veríme, že postupom času prídete na rad rozmanitých rutín z pamäti ROM, ktoré budete s úspechom využívať v programoch.