Nimimerkki "Pommituksen uhri" kysyy:

Mitä tarkoittavat ST:n näytön vasempaan laitaan silloin tällöin ilmesty-
                     
vät kaksi tai useampaa pommia? Joskus ne vain vilahtavat näytössä ja 
                     
sillä hetkellä ajettavan ohjelman suoritus päättyy, toisinaan ne jäävät 
                     
näyttöön ja koko kone jumiutuu eikä tokene kuin resetistä tai virran 
                     
katkaisusta.
                     
                     
                     
  ***** 
                     
                     
                     
Pommien lukumäärä kertoo, mikä Motorola 68000 -keskusyksikön keskeytys
                     
tapahtui. Kyseessä on eräänlainen virheviesti, josta on Sinulle apua 
                     
lähinnä silloin kun olet itse laatinut ohjelman. Ohjelman suoritus loppuu
                     
tai kone jumiutuu, jotta välttyisit mahdollisilta isommilta vahingoilta. 
                     
Yleisimpiä sairastumisia ovat:
                     
                     
                     
  oire   diagnoosi
                     
2 pommia BUS ERROR, viitattiin suojattuun muistiin väärässä tilassa
                     
3   ""   ADDRESS ERROR, viitattiin virheellisesti parittomaan osoitteeseen
                     
4   ""   ILLEGAL INSTRUCTION, suorituksessa kohdattiin tuntematon käsky
                     
6   ""   CHK INSTRUCTION, suoritettu CHK-käskyn aiheutti keskeytyksen 
                     
7   ""   TRAPV INSTRUCTION, suoritettu TRAPV-käsky aiheutti keskeytyksen
                     
8   ""   PRIVILEGE INSTRUCTION, käskyä yritettiin väärässä tilassa
                     
                     
                     
Tarkempaa diagnoosia ja hoito-ohjeita:
                     
                     
                     
MC68000-prosessorissa on kaksi tilaa, supervisor ja user mode. User moden
                     
tarkoituksena on estää Sinua tahattomasti tärvelemästä käyttöjärjestel-
                     
mälle varattua muistialuetta (ST:ssä osoitteet $0-$7FF, $FF8000-$FFFFFF)
                     
sekä suorittamasta tiettyjä käskyjä (STOP, RESET, RTE, MOVE SR:ään, vä-
                     
litön AND.W, EOR.W tai OR.W SR:ään, MOVE USP). Siirtymällä supervisor-
                     
modeen saat koko muistialueen ja kaikki käskyt käyttöösi. Mikäli unohdat
                     
tilanvaihdon, saat kaksi tai kahdeksan pommia. BASICin PEEK ja POKE suo-
                     
ritetaan jo valmiiksi supervisor modessa, muissa kielissä tilanvaihto 
                     
tapahtuu GEMDOSin super-funktiota tai XBIOSin supexec-funktiota kutsumal-
                     
la. Assemblerilla ohjelmoitaessa address error on yleinen, riittää kun 
                     
unohtaa #-merkin välittömästä osoitusmuodosta:
                     
                     
                     
  move 2,d5   ; pommittaa, pitää olla:   move #2,d5
                     
                     
                     
MC68000 edellyttää, että sana- ja kaksoissanaviittaukset (16 ja 32 bittiä)
                     
tapahtuvat parillisiin muistipaikkoihin. Mikäli näin ei tapahdu, saat kol-
                     
me pommia. Assemblerilla ohjelmoitaessa kannattaa olla tarkkana, ettei käy 
                     
näin:
                     
                     
                     
data
                     
  tyyppi   blk.b 1
                     
  pituus   blk.l 1
                     
text
                     
  .
                     
  .
                     
  move.l   #40000,pituus   ; pommittaa, pituus on parittomassa osoitteessa
                     
                     
                     
CHK-keskeytys on Sinun itsesi ohjelmoitava. CHK-käsky testaa, onko anne-
                     
tun datarekisterin sisältämä luku pienempi kuin nolla tai suurempi kuin
                     
annettu operandi. Mikäli näin on, tapahtuu k keskeytys:
                     
                     
                     
                     
                     
  chk #79,d4   ; jos d4<0 tai d4>79, järjestetään seitsemän pommia
                     
                     
                     
TRAPV-keskeytys on myös Sinun itsesi ohjelmoitava. TRAPV-käsky testaa, 
                     
onko MC68000:n V-flagi (overflow) päällä. Mikäli näin on, tapahtuu ko. 
                     
keskeytys.
                     
                     
                     
  add d1,d2
                     
  trapv       ; jos d1+d2<-32768 tai d1+d2>32767, tehdään kahdeksan pommia
                     
                     
                     
MC68000-keskeytysvektoreita on kaikenkaikkiaan 256 kpl. Ne sijaitsevat
                     
muistipaikoissa $0-$3FF, kukin niistä on neljän tavun pituinen. Vektorit
                     
sisältävät niiden rutiinien osoitteet, joihin suoritus siirtyy, mikäli
                     
keskeytys tapahtuu. Vektori 0 ON poikkeus, se ei ole osoita mihinkään
                     
rutiiniin. Sen sijaan kone löytää siitä ensimmäisen pino-osoittimen ar-
                     
von kun ST käynnistetään tai resetoidaan.
                     
                     
                     
Koska prosessorin osoiteavaruus on "vain" 16Mb, käytetään itse osoittee-
                     
seen 24 alinta bittiä, ylin tavu jää käyttämättä. ST:ssä ylin tavu kertoo
                     
virherutiinille, montako pommia tulee piirtää.
                     
                     
                     
Kaikki keskeytykset eivät tulosta pommeja; ST käyttää osaa vektoreista
                     
kirjastokutsuihin sekä oheislaitteiden ohjaukseen. Osa vektoreista on 
                     
varattu ohjelmoijan omaan käyttöön, jolloin pommirutiinin sijasta voi-
                     
daankin kutsua jotain omaa toimintoa, esim. itse tehtyä rutiinikirjastoa.
                     
                     
                     
Debuggerit saattavat muuttaa vektoreita siten, että pommeja ei piirretä-
                     
kään, vaan käytetään ko. virheenjäljitysohjelman omaa rutiinia. Alkupe-
                     
räiset vektorit palautetaan ohjelmasta poistuttaessa. Muistan tosin erään
                     
patologisen tapauksen: alkuperäisvektoreita ei palautettukaan ja kone
                     
jumiutui aina kun sen piti tulostaa pommeja.
                     
                     
                     
Mikäli keskeytysvektorit tai mikä tahansa muu ST:hen liittyvä asia vaivaa
                     
Sinua, kirjoita minulle, autan parhaani mukaan. Mikäli tarve vaatii, oh-
                     
jaan Sinut ko. alueen spesialistin hoidettavaksi. Älä arkaile, voit pysyä
                     
nimettömänä, ja STairasvakuutus korvaa osan lääkkeistä.
                     
                     
                     
terveisin 
                     
                     
                     
ST-tohtori
                     
                     
                     
P.S. Käytin käsikirjoina seuraavia opuksia:
                     
                     
                     
K. Gerits, L. English, R. Bruckmann:
                     
Atari ST Internals, The authoritative insider's guide
                     
ABACUS Software, Inc.
                     
Grand Rapids, MI, 1985
                     
ISBN 0-916439-46-1
                     
                     
                     
Gerry Kane: 
                     
68000 Microprocessor Handbook
                     
Osborne/McGraw-Hill, Berkeley, California 1981
                     
ISBN 0-931988-41-1

Takaisin

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