|
|
|
Boogie
|
|
|
|
Tohtori AivoTurmio
|
|
|
|
Juha Niemimäki, Ilkka Lehtoranta, J-P Jokela
|
|
|
|
Sami Ylönen
|
|
|
|
Tero Säärelä
|
|
|
|
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ä.
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.
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.
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
|
|
|
|