•  Back 
  •  Mxalloc 
  •  Index 
  •  Tree View 
  •  Cross references 
  •  Help page 
  •  Show info about hypertext 
  •  View a new file 
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