Ilkka Lehtoranta | ilkleht@isoveli.org
Koodausvinkkejä MorphOS:lle

Ajankohtaiset

Boogien palsta

Boogie

Star Wreck -spesiaali

Eletään tylsää tulevaisuutta

Tohtori AivoTurmio

Ohjelmointia: AHI, MorphOS, Tinygl

Juha Niemimäki, Ilkka Lehtoranta, J-P Jokela

0xAA - Codex Alpe Adria 2005

Sami Ylönen

Kun PCisti Amigaan ryhtyi

Tero Säärelä

Videokaappari käytettynä?

Jarmo Piippo

MorphOS toteuttaa varsin tarkan AmigaOS API -emulaation. Se ei kuitenkaan vain tyydy alkuperäisen API:n uudelleentoteutukseen, vaan myös laajentaa ja täydentää sitä.
Tietotyypit
MorphOS käyttää kokonaisluvuissa standardeja tietotyyppejä, jotka ovat tuttuja AmigaOS:sta ja AROS:sta.

Tyyppi Selitys
UBYTE 8-bittinen kokonaisluku, aina positiivinen
BYTE 8-bittinen kokonaisluku, positiivinen tai negatiivinen
UWORD 16-bittinen kokonaisluku, aina positiivinen
WORD 16-bittinen kokonaisluku, positiivinen tai negatiivinen
ULONG 32-bittinen kokonaisluku, aina positiivinen
LONG 32-bittinen kokonaisluku, positiivinen tai negatiivinen
UQUAD 64-bittinen kokonaisluku (*), aina positiivinen
QUAD 64-bittinen kokonaisluku (*), positiivinen tai negatiivinen
FLOAT 32-bittinen yksinkertaisen tarkkuuden liukuluku
DOUBLE 64-bittinen kaksinkertaisen tarkkuuden liukuluku
(*) vain AROS ja MorphOS

Lisäksi löytyy muun muassa IPTR, johon törmää usein AROS-koodissa. Se on joko 32-bittinen tai 64-bittinen kokonaisluku/osoitin, mutta koska MorphOS on 32-bittinen, sen käytännön vastine on aina ULONG/APTR.
Muistinhallinta
MorphOS suoraviivaisti muistinkäsittelyn, eikä esimerkiksi grafiikkaa tai äänidataa tarvitse enää sijoittaa erikoismuistiin. Myöskään julkista tai yksityistä muistia ei erotella, joten esimerkiksi MEMF_PUBLIC lipulla ei ole mitään merkitystä:

MEMF_CHIP: Tarpeeton, paitsi joissakin erikoissovellutuksissa PowerUp-koneille.

MEMF_FAST: Tarpeeton, kannattaa poistaa.

MEMF_PUBLIC: Tarpeeton, kannattaa poistaa.

Myös pinoa voi käyttää systeemistruktuureissa, ja niinpä esimerkiksi seuraava koodinpätkä on täysin laillinen:
{
   struct Message msg;
   msg.mn_ReplyPort = port;
   PutMsg(destport, &msg);
   WaitPort(port);
   GetMsg(port);
}
Yllä oleva toimii myös kaikissa AmigaOS:n 68k-versioissa.

MorphOS:ssa on myös uusia funktioita muistin varaamiseksi:

AllocTaskPooled(ULONG size) / FreeTaskPooled(APTR memptr, ULONG size)
AllocVecTaskPooled(ULONG size) / FreeVecTaskPooled(APTR memptr)


Näiden funktioiden erikoisuutena on, että varattu muisti vapautetaan automaattisesti, kun ohjelman suoritus päättyy.
Muita parannuksia
CreateNewProcTags()

Uusien prosessien käynnistäminen on huomattavasti helpompaa ja CreateNewProcTags() on saanut lisää tageja. Kannattaa huomata että NP_Entry ottaa oletuksena 68k-koodia. Niinpä PPC-koodin käynnistämiseksi täytyy lisätä NP_CodeType, CODETYPE_PPC.

Muita hyödyllisiä tageja on NP_PPCStackSize jolla välitetään PPC-pinon koko. Oletuskoko on 32768 tavua, joka on riittävä useimmissa tapauksissa. Eräs hyvin hyödyllinen tagi on NP_StartupMsg, jolla käynnistettävälle prosessille voidaan välittää ns. startup message. Viesti palautuu itsestään isännälle prosessin lopussa.

Esimerkkikoodi

Lisätietoja:
developer.morphosppc.com
www.aros.org
www.utilitybase.com


Sivun alkuun