This details the geoWizard activation phase.
This way, the exact procedure is known, can be tweaked and troubleshooted if necessary.

When user activates geoWizard:
* Contents at $4000-$5fff are SWAPped out to a similar location in the 1st bank of the REU.
* geoWizard and its varspace is located in $4000-$5fff. geoWizard is then executed at $4003.

geoWizard initialization phase:
* Stores return address from stack in gWiz varspace.
* Copies entire stack contents at bufStack in gWiz varspace.
* Stores stack pointer in gWiz varspace.
* Copies zero page $08-$ff at bufZP in gWiz varspace.
* Saves $0200-$3fff to similar location in the 1st bank of the REU. (Can this routine be moved elsewhere? StartAppl only affects vectors at $0314-$0333.)
* Saves $6000-$d00f to a similar location in the 1st bank of the REU.
* Saves contents of bufZP+bufStack in gWiz varspace to $0008 of the 1st bank of the REU.
* Restores the first 3 bytes of Wheels MainLoop (bit $88b4).
* Fills the disk name buffers in gWiz varspace with zeroes.
* Stores SPENA & VMCSB values to gWiz varspace. (I commented out the stores for SCROLY & CI2PRA. I wasn't sure if they should be saved/restored, if at all.)
* Sets up the DlgBoxRamBuf via direct JMP's into Wheels Kernal.
Wheels 128 only.
* Copies the entire backRAM contents from $1300-$7fff to the 3rd bank of the REU @ $0000. This also includes copying the software mouse and its mask data.
* Zeroes out the mouse via SetMousePicture. This is to ensure that the interuppted application/DA's customized mouse pointer is not active during the geoWizard session.
Wheels OS.
* Copies DlgBoxRamBuf to bufDBSpace in gWiz varspace.
* Copies color data for entire 40/80 screen to clrCards in gWiz varspace.
* Saves contents of clrCards to $d100-$d8ff in the 1st bank of the REU.
* Calls StartAppl to 'restart' geoWizard, entering the activation phase.

geoWizard activation phase:
* stores curDrive to gWiz varspace.
* calls NewDisk
* In sequence starting with drive A..D, geoWizard calls SetDevice and OpenDisk. Calls GetPtrCurDkNum and copies the disk name to gWiz varspace.
* Calls SetDevice/OpenDisk on the current disk device again.
* Calls MouseUp (necessary?)
* Calls ImprintRectangle on the entire 40/80 column screen, basically copying the contents of the screen onto the background buffers.
* Puts a $02 into SetColorMode (Wheels 128 80 column mode only.)
* Calls ColorRectangle with a value of $bf to 'grey' the 40/80 screen.
* Sets dispBufferOn to $80
* Calls SetPattern to $00, and clears out the first 4 rows of the 40/80 screen via the Rectangle call.
* Calls ColorRectangle with appDBColor for the first 40 rows of the 40/80 screen.
* Calls PutString to print out the geoWizard 'splash' screen onto the first 4 rows of the 40/80 screen.
* Via HorizontalLine call, a line is printed at the end of the first 4 rows of the 40/80 screen.
* Creates a 'dummy' icon table via DoIcons call.
* Loads keyVector with a service routine to handle keypresses.
* Loads otherPressVec with a service routine to handle mousepresses.
* At this point, geoWizard is fully active and awaiting further user interaction!

geoWizard executes a DA:
* Saves return address+stack pointer to gWiz varspace.
* Calls a file-requestor DB, for the user to select a DA from any drive.
* (Assuming a DA is selected...) Saves the code for RstrAppl to bufDT in gWiz varspace.
* Inserts special handler code into the RstrAppl codespace in Wheels Kernal.
* Calls FindFile on the DA; and calls GetFHdrInfo also.
* Stores the start address of the DA in gWiz varspace.
* Stores curDrive into gWiz varspace. (necessary?)
* Stashes special DA loading code into sprite #4 ($8b00) area. (The DA may overwrite geoWizard itself.)
* Via SaveColor call, saves the color info for the 40/80 screen to clrCards in gWiz varspace. (Note: This is for the current geoWizard screen. The original color screen when it was interrupted is still in the REU and is not overwritten.)
* Saves the area $4000-$5fff (containing geoWizard itself and its varspace) to the 1st bank of the REU @ $e000-$ffff.
* Saves the area in the first 32Kb of the REU to a similar location in the 2nd bank of the REU. (Is this needed for DA's?)
* Copies the bg screen @ $6000 to the 2nd bank of the REU @ $8000, and the fg screen @ $a000 to the similar location in the 2nd bank of the REU. (Is this needed for DA's?)
Wheels 128 80 column screen only.
* Imprints the entire 80 column screen to its bg buffers.
* Copies the 1st half of the 80 column screen @ $6000 to the 2nd bank of the REU @ $c000, and the 2nd half @ $a000 to the 2nd bank of the REU @ $e000.
Wheels OS.
* Executes the DA loading code wedged in sprite #4. The code will load in the DA and do an indirect JMP in executing the DA.

The DA finishes executing and RstrAppl is called:
* (Remember, the RstrAppl code in the Wheels Kernal is already replaced by a custom geoWizard handler routine.)
* Fetches the contents of the 1st bank of the REU @ $e000 back to $4000-$5fff, thereby restoring geoWizard and its varspace.
* Gets the current dev. # from gWiz varspace and calls SetDevice.
* Restores the RstrAppl code from bufDT in gWiz varspace to the RstrAppl codespace in Wheels Kernal.
* Restores the DlgBoxRamBuf by JMP'ing directly into Wheels Kernal.
Wheels 128 80 column screen only.
* Restores the 1st half of the 80 column screen @ $c000 in the 2nd bank of the REU back to $6000-$7fff, and the 2nd half @ $e000 in the 2nd bank of the REU back to $a000-$bfff.
* Calls RecoverRectangle to recover the entire screen.
Wheels OS.
* Restores the first 32Kb of the REU by copying it from the 2nd bank of the REU @ $0000 back to the similar area in the REU.
* Restores the bg screen in the 2nd bank of the REU @ $8000 back to $6000-$7fff, and the fg screen in the 2nd bank of the REU @ $a000 back to $a000-$bfff.
* Via RstrColor, the color info for the entire 40/80 screen is restored from clrCards in gWiz varspace.
* Restores the stack pointer/return address and RTS'es.
* At this point, the geoWizard splash screen is now active.

geoWizard executes an Application:
* Calls a file-requestor DB, for the user to select an application from any drive.
* Saves the EnterDeskTop call in the Wheels Kernal Jump Table to gWiz varspace.
* In the Wheels Kernal Jump Table, it copies the RstrAppl call over to EnterDeskTop. That way, when the programs invokes 'EnterDeskTop', the call will be redirected to RstrAppl code.
* The code for RstrAppl in Wheels Kernal is saved to gWiz varspace. A custom geoWizard exit handler code is inserted into the RstrAppl codespace instead.
* The call for LdDeskAcc in the Wheels Kernal Jump Table is saved to gWiz varspace. The code, 'ldx #$00:rts' is inserted in its place. It has the effect of disabling DA's in the application that geoWizard will switch over to.
* The stack pointer is saved to gWiz varspace.
* Saves the area $4000-$5fff (containing geoWizard itself and its varspace) to the 1st bank of the REU @ $e000-$ffff.
* Saves the area in the first 32Kb of the REU to a similar location in the 2nd bank of the REU. This is because applications like dotView, Dashboard, geoWrite 128 v2.2, etc. all use it.
* Copies the bg screen @ $6000 to the 2nd bank of the REU @ $8000, and the fg screen @ $a000 to the similar location in the 2nd bank of the REU.
* Calls ColorRectangle with a value of $bf to 'grey' the entire 40/80 screen.
* Calls GetFile and executes the application!

The application finishes executing and RstrAppl (via EnterDeskTop) is called:
* (Remember, the RstrAppl code in the Wheels Kernal is already replaced by a custom geoWizard handler routine.)
* Fetches the contents of the 1st bank of the REU @ $e000 back to $4000-$5fff, thereby restoring geoWizard and its varspace.
* The stack pointer is retrieved from gWiz varspace and two pla's follow. I assume this is to remove a JSR call, but I'm not sure.
* Calls StartAppl again, 'warm-starting' geoWizard. (Is this really necessary?)

geoWizard is restarted:
* The call for LdDeskAcc/EnterDeskTop in Wheels Kernal Jump Table are restored from gWiz varspace.
* Restores the RstrAppl code from bufDT in gWiz varspace to the RstrAppl codespace in Wheels Kernal.
* Tries to restore original color mode via calls to SetNewMode and SetColorMode. For some reason, this routine isn't working right. Investigate further.
* Restores the first 32Kb of the REU by copying it from the 2nd bank of the REU @ $0000 back to the similar area in the REU.
* Restores the bg screen in the 2nd bank of the REU @ $8000 back to $6000-$7fff, and the fg screen in the 2nd bank of the REU @ $a000 back to $a000-$bfff.
* Calls NewDisk. (But, no corresponding SetDevice call on the original disk device. Investigate further.)
* Falls through the geoWizard exit handler.

Routine to handle geoWizard exit sequence cleanly:
* (This routine is invoked when the user presses RETURN or clicks on the mouse. Additionally, when geoWizard finishes task-switching to an application, this routine is also used.)
* Tries to restore original color mode via calls to SetNewMode and SetColorMode. For some reason, this routine isn't working right. Investigate further.
* In sequence starting with drive A..D, geoWizard calls SetDevice and OpenDisk. Calls GetPtrCurDkNum and copies the disk name to gWiz varspace. But, this time, compares the disk names to ensure that the user's disk system is the same as it was interrupted before.
* Calls SetDevice/OpenDisk on the current disk device again.
* Calls SetDevice on the original disk device, the one currently operating when it was interrupted.
* Copies state of TurboFlags to gWiz varspace.
* Via RecoverRectangle, the entire 40/80 screen is recovered.
* Restores the color info in the 1st bank of the REU @ $d100 back to clrCards buffer in gWiz varspace.
* Via RstrColor, the color info for the entire 40/80 screen is restored from clrCards in gWiz varspace.
* Copies bufDBSpace in gWiz varspace to DlgBoxRamBuf.
* Empties the contents of DlgBoxRamBuf by JMP'ing directly into Wheels Kernal.
* Restored the entire backRAM contents from the 3rd bank of the REU @ $0000 back to $1300-$7fff. This also restored the software mouse pointer and mask data.
* Restores contents in the 1st bank of the REU @ $0200 back to a similar location in frontRAM ($0200-$3fff).
* Restores contents in the 1st bank of the REU @ $6000 back to a similar location in frontRAM ($6000-$d00f).
* Restores the state of TurboFlags from gWiz varspace.
* Restores SPENA and VMCSB values from gWiz varspace. (I commented out the SCROLY and CI2PRA values.)
* Patched Wheels MainLoop to jump to geoWizard handler.
* Calls GetDirHead. (I assume is to prevent BAM corruption.)
* Loads MouseData with #$80 (released value).
* Restores bufZP and bufStack buffers from the 1st bank of the REU @ $0008.
* Copies the bufZP buffer to the zero page region @ $08-$ff.
* Copies the bufStack buffer to the stack @ $0100-$01ff.
* Restores the stack pointer from gWiz varspace.
* Pushes the return address onto the stack.
* geoWizard exits to the MainLoop geoWizard handler routine.
* The geoWizard handler routine will then SWAP out the contents at $4000-$5fff, containing geoWizard+gWiz varspace, to the 1st bank of the REU and the original $4000-$5fff contents back into CPU space.
* The interrupted Wheels session is restored!
