-void copyoverlays (void)
-{
- unsigned page = 0;
- unsigned char num;
-
- for (num = 0; num < MAX_EM_OVERLAY; ++num) {
- int file;
- int size;
-
- if ((overlay[num].size + EM_PAGE_SIZE - 1) / EM_PAGE_SIZE >
- em_pagecount () - page) {
- printf ("Dbg: Not enough memory for overlay %u\n", num + 1);
- continue;
- }
-
- printf ("Dbg: Reading overlay file %s\n", overlay[num].name);
- file = open (overlay[num].name, O_RDONLY);
- if (file == -1) {
- log ("Opening overlay file failed");
- continue;
- }
-
- overlay[num].page = page;
- size = overlay[num].size;
- while (size) {
- void *buf;
-
- /* In general one could as well use em_copyto() to copy a fully
- * loaded overlay into extended memory in one step. However the
- * "streaming" of an overlay from disk to extended memory shown
- * here has two advantages:
- * - It can be done from another overlay (like done here).
- * - It avoids unnecessary double buffering with emdrivers that
- * provide a hardware memory window.
- */
- buf = em_use (page++);
- size -= read (file, buf, EM_PAGE_SIZE);
- em_commit ();
- }
-
- printf ("Dbg: Stored overlay %u in pages %u-%u\n",
- num + 1, overlay[num].page, page - 1);
-
- close (file);
- }
-}
-
-#pragma code-name(pop);
-