- // Refrence old page
- MM_RefPhys( gaPageTable[page] & ~0xFFF );
- // Add to new table
- if(gaPageTable[page] & PF_WRITE) {
- gaTmpTable[page] = (gaPageTable[page] & ~PF_WRITE) | PF_COW;
- gaPageTable[page] = (gaPageTable[page] & ~PF_WRITE) | PF_COW;
- INVLPG( page << 12 );
+ // Allocate new table
+ gaTmpDir[i] = MM_AllocPhys() | (gaPageDir[i] & 7);
+ INVLPG( &gaTmpTable[page] );
+ // Fill
+ for( j = 0; j < 1024; j ++, page++ )
+ {
+ if( !(gaPageTable[page] & PF_PRESENT) ) {
+ gaTmpTable[page] = 0;
+ continue;
+ }
+
+ // Refrence old page
+ MM_RefPhys( gaPageTable[page] & ~0xFFF );
+ // Add to new table
+ if(gaPageTable[page] & PF_WRITE) {
+ gaTmpTable[page] = (gaPageTable[page] & ~PF_WRITE) | PF_COW;
+ gaPageTable[page] = (gaPageTable[page] & ~PF_WRITE) | PF_COW;
+ INVLPG( page << 12 );
+ }
+ else
+ gaTmpTable[page] = gaPageTable[page];