Topic : TOS - das Betriebssystem Author : Version : tos.hyp (5. März 2013) Subject : Programmieren/Atari Nodes : 3001 Index Size : 93602 HCP-Version : 5 Compiled on : Atari @charset : atarist @lang : @default : Titel @help : @options : +g -i -s +x +zz -t4 @width : 70 View Ref-File5.12.5.2 Mxmask TOS /* Mxmask() liefert eine Bitmaske mit der man das Moduswort eines Mxalloc() Aufrufs maskieren sollte, falls man Protectionbits benutzen möchte. Dies ist notwendig, da Mxalloc() bei der Angabe von Protectionbits leider in einigen GEMDOS Implementierungen fehlerhafte Resultate liefert, die in der Folge zum Absturz des Systems fuehren koennen. ((c) 1994 Martin Osieka) Anwendungsbeispiel: mxMask = Mxmask(); p = mxMask ? Mxalloc( size, 0x43 & mxMask) : Malloc( size); */ SHORT Mxmask (void) { void *svStack; /* Supervisor-Stack */ int32_t sRAM, sRAMg; /* ST-RAM */ int32_t aRAM, aRAMg; /* Alternate RAM */ /* // Beispieltabelle moeglicher Werte: // | newfashion | oldfashion // sRAM aRAM | sRAMg aRAMg | sRAMg aRAMg // 1 0 | 1 0 | 1 1 // 0 2 | 0 2 | 2 2 // 1 2 | 1 2 | 3 3 */ svStack = (void *) Super( 0); /* unterbinde Taskwechsel */ sRAM = (int32_t) Mxalloc( -1, 0); sRAMg = (int32_t) Mxalloc( -1, 0x40); /* im Fehlerfall Mxalloc( -1, 3) */ aRAM = (int32_t) Mxalloc( -1, 1); aRAMg = (int32_t) Mxalloc( -1, 0x41); /* im Fehlerfall Mxalloc( -1, 3) */ Super( svStack); /* erlaube Taskwechsel */ if (sRAM == -32) return 0x0000; /* Mxalloc() ist nicht implementiert */ else if ( ((sRAM + aRAM) == sRAMg) && ((sRAM + aRAM) == aRAMg) ) return 0x0003; /* oldfashion Mxalloc() */ else return 0xFFFF; } /* Mxmask */ Querverweis: GEMDOS Speicherverwaltung