When your protected program issues an INT 21h / AH=4Ch (DOS API "Terminate Program" function) or when DOS/32 Advanced detects a run-time error in your program, the program will be terminated and the DOS Extender will return to the operating system from which it was started performing a cleanup which involves extended memory deallocation, restoring of real mode interrupts and so on. The DOS Extender will check if any of the real mode interrupts were modified and not restored (if configured to do so), restore the whole real mode interrupt table and the both PICs (if configured to do so) and free Mouse callback (if allocated) also resetting a possibly installed mouse ISR by issuing INT 33h / AX=000Ch and ES:EDX=0. At this point the DOS Extender will jump to the default protected mode INT 21h handler, ie to the built-in DPMI when running under Clean, XMS or VCPI, and to an external DPMI host when running under DPMI (only GOD knows what will happen then). The built-in DPMI will then deallocate all allocated extended memory and unconditionally restore certain system interrupts and the CR0 register. The CR2 register will be set to zero and the CR3 register will be reloaded to flush the TLB. The following real mode interrupts will be unconditionally restored:
The state of A20 gate will be restored when running under XMS, and left enabled when running under Clean system. The built-in DPMI will then switch to the real mode and reissue INT 21h / AH=4Ch terminating the program completely. Note, the PIT (timer) will not be reset.
All Rights Reserved |