==========CASTLE========== CASTLEN OHJELMARAKENTEESTA Ohjelma koostuu basic-osuudesta se- kä lukuisasta joukosta konekielirutiine- ja. Alun perin ohjelma tehtiin kokonaan basicillä, mutta sitten osat muutettiin yksi toisensa jälkeen konekielisiksi. Konekieltä tarvitaan kaikissa nopeutta, sulavuutta ja muistinkäytön taloudelli- suutta edellyttävissä tehtävissä kuten esimerkiksi spritekuvioiden liikuttelus- sa, alkuarvojen asettelussa ja taustamu- siikin soittamisessa. BASIC-OHJELMARUNKO Ohjelma alkaa konekielirutiinien latauksilla ja alkuarvojen asetteluilla, joista suurin osa tehdään siis konekie- lellä. Myös tulostaulukko 'TOP TEN' la- dataan levyltä ja talletetaan takaisin sinne aina, kun siihen tulee muutoksia. Ajanlasku on tehty basicillä, lähtöarvo- na 150, jota vähennetään yksi kerrallaan ja tulostetaan PRINT-käskyllä näyttöön. Kun aika loppuu (tulee nollaksi), menet- tää pelaaja yhden ukon. Kun ukkoja ei enää ole jäljellä, peli päättyy. Täl- löin lasketaan saadut pisteet ja tulos- ta verrataan jokaiseen tulostaulukon al- kioon. Mikäli tulos on suurempi kuin taulukon alin alkio, siirretään tulosta yksi kerrallaan ylöspäin,kunnes se on oikealla paikallaan. Näin taulu pysyy koko ajan oikeassa järjestyksessä. Basic-osasta ohjataan myös irq-ru- tiinin kytkeminen päälle ja pois päältä. Suurin osa konekielikoodista liittyy suoraan spritekäsittelyyn ja kulkee ns irq-osoitteen kautta aina 1/60 sekunnin välein. Commodoren oma keskeytysosoite muistipaikassa 0314-0315 vaihdetaan näyttämään oman konekielikoodin alkuun ja koodi lopetetaan hypyllä alkuperäi- seen irq-osoitteeseen EA31. Ukon kuol- lessa ajan loppumiseen tai hämähäkkiin törmäämiseen, palautetaan alkuperäinen irq-osoite paikalleen (konekielisesti), jolloin kaikki 'automaattiset' tausta- toiminnot pysähtyvät. GRAFIIKKA Castle:n teossa on käytetty ns omia merkkejä sekä spritejä. Omat merkit te- kevät lattiakuvion kolmiulotteiseksi, elävät tikapuut, aarteet ja jotkin teks- tiosuudet, kuten jo alkukuvasta voi huo- mata. Muutamat 'kirjaimet' muodostuvat useastakin merkistä kuten pelin nimi. Pelikenttä tulostetaan näkyviin konekie- lisesti, jolloin ruutu täyttyy salaman- nopeasti. Basicillä tehtynä sama veisi useamman sekunnin. Lattiat ovat aina samoilla paikoilla, mutta tikapuita on jonkin varran vaihteleva määrä ja ne ovat hieman satunnaisissa paikoissa. Tikapuiden määrälaskurit ja koordinaatit on talletettu tiettyyn muistialueeseen, josta ohjelma poimii ne aina ruudun täy- tön yhteydessä. Kaikilla ruuduilla on lisäksi oma värinsä. Spritejä on käytetty ukon ja hämä- häkkien muodostamisessa. Ukolla on kol- me eri muotoa kumpaankin suuntaan men- nessä ja hämähäkeillä kaksi muotoa. Usea muoto tekee liikkeen sulavaksi, mutta vain nopealla konekielellä liiku- tettaessa. Basicillä liike jää pakosta- kin hitaaksi, sillä ohjelmassa on paljon muutakin tehtävää. Jos taas muotoja on vähemmän, on liikekin nykivämpää. Hämähäkkejä on aluksi kolme. Nel- jännenkin kaikki tiedot ovat koko ajan olemassa, mutta se kytketään näkyväksi vasta myöhemmin. Näissäkin on värejä hyödynnetty. MUSIIKKI Taustalla soi irq-rutiinissa kaiken aikaa kolme ja puoli minuuttia kestävä klassisen musiikin sovitus. Musiikiksi on valittu Ludwig van Beethovenin Adagio Kuutamosonaatista. Musiikki käyttää hy- väkseen Commodoren kaikkia kolmea ääni- generaattoria, joten ääniäkin on kolme. Äänet soitetaan alueelta 24000 alkaen, jonne on talletettu kunkin nuotin ylä- ääni, alaääni ja kesto. Rutiinin joka kutsulla kestosta vähennetään yksi sa- malla kun em. kolme äänipiiriä kytketään päälle. Kun kesto tulee nollaksi, hae- taan esille seuraavan nuotin arvot. Mu- siikki alkaa taas alusta, kun kaikki nuotit on soitettu (yht 6 kB). KONEKIELITEKNIIKKA Useimmat konekielirutiinit sijait- sevat alueella 49152-53000 ja alueella 20000-23000. Muutamia näistä käytetään alkuarvojen asettelemiseen. Erilaisia laskureita on sijoitettu kasettipusku- riin. Suurin osa rutiineista on kuiten- kin irq-keskeytysosoitteen takana, joten ne ovat käytännöllisesti koko ajan toi- minnassa. Näitä ovat mm. - hämähäkkien siirto - ukon siirto, törmäysten valvonta - musiikin hoito - ohjelman tilojen ja näppäinten seuranta ym. Jokaisella kierroksella siirretään kutakin hämähäkkiä yhden pixelin verran oikealle tai vasemmalle. Jos otus on tikapuun kohdalla, arvotaan lisäksi tikapuista meno. Jos meno sallitaan, viritetään tikapuulaskuri 32 kierroksen ajaksi ja tikapuun toisessa päässä arvotaan kulkusuunta uudelleen. Jos jokin otus osuu ukkoon, virittyy törmäysrekisteri ja tapahtuu siirtyminen kuolemarutiiniin. Ukkoa siirretään neljä pixeliä / kierros, mutta vain jos joystickiä on liikutettu. Tikapuissa kulku on sama kuin hämähäkeillä. Jokaisella vasen / oikea-siirrolla tutkitaan ukon kohdalla oleva taustamerkki. Jos se on aarre, käydään lisäämässä bonuslaskuria (score) ja jos aarre oli ruudun viimeinen, tul- laan pois irq-osasta ja hoidetaan loppu- käsittely ja seuraavan ruudun asetus. Ohjelman lopetuksesssa 'GAME OVER' -tekstin väriä vaihdetaan useasti ja sa- malla suoritetaan viivästyssilmukkaa.