-- InitialXD.Mesa Edited by: -- Evans on May 19, 1980 4:33 PM -- Bruce on Oct 13, 1980 10:01 AM -- Sandman on July 18, 1980 3:49 PM -- Johnsson on July 15, 1980 2:54 PM DIRECTORY Ascii USING [CR], DebugOps USING [ShortCopyREAD, ShortREAD, window], DOutput USING [Char, Line], Event USING [Notify], FrameDefs USING [MakeCodeResident, UnlockCode], FrameOps USING [MyGlobalFrame], ImageDefs USING [ImageTime], Init USING [bootLoaded, RestartMsg], InitXD USING [XDSwap], Inline USING [BITAND, BITNOT, BITOR], MachineDefs USING [], Mopcodes USING [zRBL, zWBL], NucleusOps USING [HyperRegion], OsStaticDefs USING [OsStaticRecord, OsStatics], Profile USING [bitmap], SegmentDefs USING [ Banks, DataSegmentHandle, DefaultANYBase, HardUp, LongDataSegmentAddress, MakeDataSegment, MemoryConfig], Source USING [SetSize], State USING [GetGS, GetString, GSHandle], Storage USING [String], String USING [AppendString], StringDefs USING [BcplToMesaString], SwapperOps USING [ComputeRealMemory, EnableBank, memConfig, SystemTable], TajoMisc USING [SetBitmap, SetState], Time USING [Append, AppendCurrent, Unpack], UserTerminalOps USING [SetBitmapSpace], ToolWindow USING [SetBox]; InitialXD: PROGRAM IMPORTS DebugOps, DOutput, Event, FrameDefs, FrameOps, ImageDefs, Init, InitXD, Inline, NucleusOps, Profile, SegmentDefs, Source, Storage, String, StringDefs, SwapperOps, State, TajoMisc, Time, UserTerminalOps, ToolWindow EXPORTS Init, InitXD = BEGIN OPEN Init, MachineDefs; herald: STRING; data: State.GSHandle; ourBitmapSeg: PUBLIC SegmentDefs.DataSegmentHandle ← NIL; WriteHerald: PUBLIC PROCEDURE [install: BOOLEAN ← FALSE] = BEGIN time: STRING ← [18]; IF install THEN BEGIN data ← State.GetGS[]; herald ← Storage.String[46]; String.AppendString[herald, "Alto/Mesa Debugger 6.0 of "L]; Time.Append[herald, Time.Unpack[ImageDefs.ImageTime[]]]; herald.length ← herald.length - 3; RETURN; END; DOutput.Line[herald]; Time.AppendCurrent[time]; time.length ← time.length - 3; DOutput.Line[time]; Init.RestartMsg[]; DOutput.Char[Ascii.CR] END; CopyUserNamePassword: PUBLIC PROCEDURE = BEGIN OPEN OsStaticDefs; userStatics: POINTER TO OsStaticRecord = DebugOps.ShortREAD[OsStatics]; debuggerStatics: POINTER TO OsStaticRecord = OsStatics↑; pc: TYPE = POINTER TO CARDINAL; IF data.loggedIn OR Init.bootLoaded THEN RETURN; DebugOps.ShortCopyREAD[ from: DebugOps.ShortREAD[@userStatics.UserName], to: debuggerStatics.UserName, nwords: LOOPHOLE[debuggerStatics.UserName-1,pc]↑]; DebugOps.ShortCopyREAD[ from: DebugOps.ShortREAD[@userStatics.UserPassword], to: debuggerStatics.UserPassword, nwords: LOOPHOLE[debuggerStatics.UserPassword-1,pc]↑]; debuggerStatics.SerialNumber ← DebugOps.ShortREAD[@userStatics.SerialNumber]; StringDefs.BcplToMesaString[ s: State.GetString[user], t: OsStatics.UserName]; StringDefs.BcplToMesaString[ s: State.GetString[password], t: OsStatics.UserPassword]; Event.Notify[setDefaults]; END; allowed: WORD ← SwapperOps.memConfig.banks; CheckMemory: PUBLIC PROCEDURE = BEGIN OPEN SwapperOps, Inline; real, weUse, iUse: SegmentDefs.Banks; clientMemConfig: SegmentDefs.MemoryConfig; table: POINTER TO SystemTable = data.ESV.tables; CopyUserNamePassword[]; IF table = NIL --OR bootLoaded --THEN {CheckOutBitmap[TRUE]; RETURN}; real ← SwapperOps.ComputeRealMemory[].banks; IF ~bootLoaded THEN { DebugOps.ShortCopyREAD[ to: @clientMemConfig, from: DebugOps.ShortREAD[@table.memConfig], nwords: SIZE[SegmentDefs.MemoryConfig]]; memConfig ← clientMemConfig} ELSE clientMemConfig.banks ← LOOPHOLE[100000B, CARDINAL]; weUse ← BITOR[allowed, clientMemConfig.banks]; iUse ← BITOR[ 100000B, BITAND[BITAND[real, allowed], BITNOT[clientMemConfig.banks]]]; memConfig.banks ← LOOPHOLE[weUse]; IF iUse # LOOPHOLE[100000B] THEN BEGIN FrameDefs.MakeCodeResident[LOOPHOLE[InitXD.XDSwap]]; FrameDefs.MakeCodeResident[LOOPHOLE[NucleusOps.HyperRegion]]; FrameDefs.MakeCodeResident[FrameOps.MyGlobalFrame[]]; memConfig.useXM ← TRUE; FOR i: CARDINAL IN [1..15] DO IF iUse[i] THEN EnableBank[i]; ENDLOOP; CheckOutBitmap[FALSE]; FrameDefs.UnlockCode[NucleusOps.HyperRegion]; FrameDefs.UnlockCode[FrameOps.MyGlobalFrame[]]; END ELSE {memConfig.useXM ← FALSE; CheckOutBitmap[TRUE]}; RETURN END; RBL: PROCEDURE [LONG POINTER] RETURNS [CARDINAL] = MACHINE CODE BEGIN Mopcodes.zRBL, 0 END; WBL: PROCEDURE [CARDINAL, LONG POINTER] = MACHINE CODE BEGIN Mopcodes.zWBL, 0 END; LP: PROCEDURE [CARDINAL, CARDINAL] RETURNS [LONG POINTER] = MACHINE CODE BEGIN END; providedBitmap: LONG POINTER ← NIL; BitmapPassword: ARRAY [0..3] OF CARDINAL = [ 126027B, 27072B, 125241B, 107426B]; firstNewSession: BOOLEAN ← TRUE; CheckOutBitmap: PROCEDURE [oneBank: BOOLEAN] = BEGIN [] ← TajoMisc.SetState[disconnected]; SELECT TRUE FROM oneBank AND providedBitmap = NIL AND data.ESV.bitmap = NIL => TajoMisc.SetBitmap[[[48, 72], [512, 352]]]; providedBitmap # NIL AND providedBitmap = data.ESV.bitmap AND BitmapOK[data.ESV.bitmapPages] => NULL; data.ESV.bitmap # NIL => BEGIN providedBitmap ← data.ESV.bitmap; UserTerminalOps.SetBitmapSpace[ address: providedBitmap+4, words: (256*data.ESV.bitmapPages)-4]; SetBitmapPassword[data.ESV.bitmapPages]; TajoMisc.SetBitmap[[[32, 32], [544, 744]]]; END; providedBitmap # NIL => BEGIN providedBitmap ← NIL; IF oneBank THEN BEGIN UserTerminalOps.SetBitmapSpace[address: NIL, words: 0]; TajoMisc.SetBitmap[[[48, 72], [512, 352]]]; END ELSE BEGIN OPEN SegmentDefs; ourBitmapSeg ← MakeDataSegment[base: DefaultANYBase, pages: 99, info: HardUp]; UserTerminalOps.SetBitmapSpace[ address: LongDataSegmentAddress[ourBitmapSeg], words: 99*256]; TajoMisc.SetBitmap[[[32, 32], [544, 744]]]; END; END; ENDCASE => BEGIN OPEN SegmentDefs; ourBitmapSeg ← MakeDataSegment[base: DefaultANYBase, pages: 99, info: HardUp]; UserTerminalOps.SetBitmapSpace[ address: LongDataSegmentAddress[ourBitmapSeg], words: 99*256]; TajoMisc.SetBitmap[[[32, 32], [544, 744]]]; END; IF firstNewSession AND Profile.bitmap = [[32, 32], [544, 744]] THEN { ToolWindow.SetBox[DebugOps.window, [[0,0],DebugOps.window.box.dims]]; Source.SetSize[]; firstNewSession ← FALSE}; RETURN END; BitmapOK: PROCEDURE [pages: CARDINAL] RETURNS [BOOLEAN] = BEGIN FOR i: CARDINAL IN [0..3] DO IF RBL[providedBitmap+i] # BitmapPassword[i]+pages THEN RETURN[FALSE]; ENDLOOP; RETURN[TRUE]; END; SetBitmapPassword: PROCEDURE [pages: CARDINAL] = BEGIN FOR i: CARDINAL IN [0..3] DO WBL[BitmapPassword[i]+pages, providedBitmap+i]; ENDLOOP; END; END.