Vbl-rutiinin käyttö omissa sovelluksissa

: Vbl-interruptin toiminta: VBL-keskeytys tapahtuu 50,60,70-kertaa sekunnissa riippuen käytössä olevasta monitorista . Keskeytyksen aikana tapahtuu seuraavaa :

  • - frclock + 1
  • - testi: onko VBL estetty (vblsem)
  • jos on , niin paluu keskeytyneeseen ohjelmaan
  • joe ei , niin vblsem:in esto
  • - rekisterit pinoon
  • - vbclock + 1
  • - onko monitori vaihdettu?
  • - kursorin vilkutus + jne......
  • - VBL-rutiinien ajo (kahdeksan eri rutiinia)

oman rutiinin suoritus tapahtuu tässä kohtaa. Rutiini toimii supervisor-tilassa , joten on mahdollista koskea 'kiellettyihin muistipaikkoihin' . Ainoastaan USP:hen ei saa koskea.

  • - dmpflg (dumpflag tarkistetaan)
  • - rekisterit ennalleen
  • - vbl-semaforin vapautus (vbl-interrupt taas mahdollinen)
  • - paluu keskeytyneeseen ohjelmaan Oman vbl-rutiinin lisäys:

 

  • 1. katso onko vapaita vbl-paikkoja
  • 2. lisää oma rutiini
  • 3. vbl-rutiinien määrää lisättävä yhdellä (nvbls) Seuraavassa pieni assembler-pätkä esimerkkina (löytyy myös valmiina ohjelmana reset.prg)

Ohjelman toiminta:

Ohjelma sijoittaa itsensä Vbl-keskeytysten jonoon ja poistuu keep process -komennon kautta (ohjelma jää koneen muistiin ) Ohjelman toimivuuden voi testata painamalla ALT/HELP näppaimiä .

* Real Reset

move.l #rrutii,-(a7) *reset-rutiinin osoite pinoon

move.w #$26,-(a7) *exec in supervisor

trap #$0e *xbios

adda.l #6,a7 *pino ennalleen

movea.l $4(a7),a0 *ohjelman pituuden lasku

move.l #$100,d6

add.l $c(a0),d6

add.l $14(a0),d6

add.l $1c(a0),d6

clr.w -(a7) *no error

move.l d6,-(a7) *save proge (ohjelman pituus muistiin)

move.w #$31,-(a7) *keep process (ei poista ohjelmaa muistista

trap #1 *gemdos * tasta alkaa supervisor modessa pyoriva ohjelma

rrutii move.w $454,d0 *number of vbls

lsl.w #2,d0

movea.l $456,a0 *_vblqueue

clr.w d1

loop tst.l 0(a0,d1.l) * etsitaan vapaa paikka omalle

beq loppu * rutiinille vbl-rutiineille varatuilta

addi.w #$4,d1 * paikoilta

cmp.w d0,d1

bne loop

rts

loppu lea 0(a0,d1.l),a2 * oma rutiini jonon peraan

move.l #jippo,(a2)

rts

* ja tahan se loppuu * vbl-rutiini souritetaan aina supervisor-tilassa

jippo tst.w $4ee *dumpflag (onko ALT/HELP painettu)

bne eioo

clr.l $420 *memvalid

move.l $4,a0 * jos on , niin resetoidaan kone

jmp (a0)

eioo rts * paluu normaaliohjelmaan

Juhani Vuorio

Takaisin

(C) Marko, Suomen Atari-sivut / ArkiSTo 2003