-- File: AltoRamLocked.mesa, Last Edit: GEW December 15, 1981 6:11 PM
--changed calmBlv

-- This module must be locked in LOW memory. SilentBoot kills the bank registers.

DIRECTORY
AltoHardware USING [BankRegister, BankRegisters],
ImageDefs USING [CleanupItem, CleanupReason, AddCleanupProcedure],
AltoRam USING [SilentBoot];

AltoRamLocked: PROGRAM IMPORTS ImageDefs, AltoRam EXPORTS AltoRam =
BEGIN

-- This is used to move the Ethernet+Display+MRT tasks back into the ROM so
-- things won’t go haywire when Bravo or FTP loads the RAM later on.
-- We leave normally unused (extra Ethernet) tasks in the RAM since
-- Mesa does a StartIO to reset things and that wakes them up.
-- calmBlv: WORD ← 177620B;
calmBlv: WORD ← 177776B;
runningBlv: WORD ← 177776B;

DoSilentBoot: PUBLIC PROCEDURE [blv: WORD] =
BEGIN runningBlv ← blv; DoSilentBootInternal[blv]; END;

cleanupItem: ImageDefs.CleanupItem ← [, 17B, Broom];
Broom: PROCEDURE [why: ImageDefs.CleanupReason] =
BEGIN
SELECT why FROM
OutLd => DoSilentBootInternal[calmBlv]; -- Going to Debugger
InLd => DoSilentBootInternal[runningBlv]; -- Comming back from Debugger
Finish, Abort => DoSilentBootInternal[calmBlv]; -- going back to exec
ENDCASE => NULL;
END;

UnBoot: PUBLIC PROCEDURE = BEGIN DoSilentBoot[calmBlv]; END;

DoSilentBootInternal: PROCEDURE [blv: WORD] =
BEGIN
display: AltoHardware.BankRegister;
display ← AltoHardware.BankRegisters[DWT];
AltoRam.SilentBoot[blv];
AltoHardware.BankRegisters[DWT] ← display;
END;

ImageDefs.AddCleanupProcedure[@cleanupItem];
END.
-- File: AltoRamLocked.mesa, Last Edit: HGM March 3, 1981 5:24 AM