void Sys_Shutdown (void) { if (!isDedicated) dos_restoreintr(9); if (unlockmem) { dos_unlockmem (&start_of_memory, end_of_memory - (int)&start_of_memory); dos_unlockmem (quakeparms.membase, quakeparms.memsize); } }
/* ================ Sys_PageInProgram walks the text, data, and bss to make sure it's all paged in so that the actual physical memory detected by Sys_GetMemory is correct. ================ */ static void Sys_PageInProgram(void) { int i, j; end_of_memory = (int)sbrk(0); if (lockmem) { if (dos_lockmem ((void *)&start_of_memory, end_of_memory - (int)&start_of_memory)) Sys_Error ("Couldn't lock text and data"); } if (lockunlockmem) { dos_unlockmem((void *)&start_of_memory, end_of_memory - (int)&start_of_memory); printf ("Locked and unlocked %d Mb image\n", (end_of_memory - (int)&start_of_memory) / 0x100000); } else if (lockmem) { printf ("Locked %d Mb image\n", (end_of_memory - (int)&start_of_memory) / 0x100000); } else { printf ("Loaded %d Mb image\n", (end_of_memory - (int)&start_of_memory) / 0x100000); } // touch the entire image, doing the 16-page skip so Win95 doesn't think we're // trying to page ourselves in for (j=0 ; j<4 ; j++) { for(i=(int)&start_of_memory ; i<(end_of_memory - 16 * 0x1000) ; i += 4) { sys_checksum += *(int *)i; sys_checksum += *(int *)(i + 16 * 0x1000); } } /* FS: Report total amount available and save it for later if we run /memstats */ physicalMemStart = (Sys_Get_Physical_Memory() / 0x100000); virtualMemStart = (_go32_dpmi_remaining_virtual_memory() / 0x100000); printf("%d Mb available for Q2DOS.\n", physicalMemStart); printf("%lu Virtual Mb available for Q2DOS.\n", virtualMemStart); }
void Sys_Quit (void) { if(!dedicated || !dedicated->value) dos_restoreintr(9); /* FS: Give back the keyboard */ if (unlockmem) { dos_unlockmem (&start_of_memory, end_of_memory - (int)&start_of_memory); } Sys_SetTextMode(); __dpmi_free_physical_address_mapping(&info); __djgpp_nearptr_disable(); /* FS: Everyone else is a master DOS DPMI programmer. Pretty sure CWSDPMI is already taking care of this... */ exit (0); }
/* ================ Sys_PageInProgram walks the text, data, and bss to make sure it's all paged in so that the actual physical memory detected by Sys_GetMemory is correct. ================ */ void Sys_PageInProgram(void) { int i, j; end_of_memory = (int)sbrk(0); if (lockmem) { if (dos_lockmem((void *)&start_of_memory, end_of_memory - (int)&start_of_memory)) { Sys_Error("Couldn't lock text and data"); } } if (lockunlockmem) { dos_unlockmem((void *)&start_of_memory, end_of_memory - (int)&start_of_memory); printf("Locked and unlocked %d Mb image\n", (end_of_memory - (int)&start_of_memory) / 0x100000); } else if (lockmem) { printf("Locked %d Mb image\n", (end_of_memory - (int)&start_of_memory) / 0x100000); } else { printf("Loaded %d Mb image\n", (end_of_memory - (int)&start_of_memory) / 0x100000); } // touch the entire image, doing the 16-page skip so Win95 doesn't think we're // trying to page ourselves in for (j=0 ; j<4 ; j++) { for (i=(int)&start_of_memory ; i<(end_of_memory - 16 * 0x1000) ; i += 4) { sys_checksum += *(int *)i; sys_checksum += *(int *)(i + 16 * 0x1000); } } }