home *** CD-ROM | disk | FTP | other *** search
- /* memc.c */
-
- #include "kernel.h"
- #include "swis.h"
- #include "memc.h"
-
- typedef struct
- { int pageno;
- int logaddr;
- int protn;
- } memc_pageinfo;
-
- /* Set the access mode for a bunch of pages */
-
- int memc_setmode(char *addr, int size, int protn)
- { _kernel_swi_regs regs;
- _kernel_oserror *err;
- memc_pageinfo page[2];
- int pages, pagesize, logaddr = (int) addr;
-
- if (err = _kernel_swi(OS_ReadMemMapInfo, ®s, ®s), err)
- return (int) err;
-
- pagesize = regs.r[0];
- pages = regs.r[1];
-
- while (size > 0)
- { page[0].pageno = 0;
- page[0].logaddr = logaddr;
- page[0].protn = 0;
- page[1].pageno = -1;
-
- regs.r[0] = (int) &page[0];
- if (err = _kernel_swi(OS_FindMemMapEntries, ®s, ®s), err)
- return (int) err;
-
- page[0].protn = protn;
-
- if (err = _kernel_swi(OS_SetMemMapEntries, ®s, ®s), err)
- return (int) err;
-
- size -= (logaddr + pagesize) / pagesize * pagesize - logaddr;
- logaddr = (logaddr + pagesize) / pagesize * pagesize;
- }
-
- return 0;
- }
-