; AIMesaMc.mu ; Alto 1822 Interface microcode control program ; Larry Stewart ; Version for scatter/gather ; Version for Mesa ; Modified September 1, 1978 5:10 PM ; This is a short control program containing nothing but 1822 code ; Last modified September 8, 1978 9:44 AM ; to include PREncrypt instruction #AltoConsts23.mu; ; Ram entry vector, for access via Mesa JRAM instruction. ; Note that only Ram locations 400-777 and 1400-1777 are reachable from Rom1. %7, 1777, 400, SilentBoot; %7, 1777, 420, SetConPtr, PREncrypt; ; Reserve 774-1003 for Ram Utility Area. %7, 1777, 774, RU774, RU775, RU776, RU777, RU1000, RU1001, RU1002, RU1003; ; For the moment, just throw these locations away. This is done only ; to squelch the "unused predef" warnings that would otherwise occur. ; If we ever run short of Ram, assign these to real instructions somewhere ; in microcode executed only by the Emulator. RU774: NOP; RU775: NOP; RU776: NOP; RU777: NOP; RU1000: NOP; RU1001: NOP; RU1002: NOP; RU1003: NOP; ; Mesa emulator conventions $next $L 4400, 0, 0; Emulator entry point $stkp $R16; Stack pointer (0 = empty, 10 = full) $stk0 $R60; Stack (bottom) ; Initialization for putting this code in the RAM, including ; 'silent boot' code !17,20,Emulator,,,,,IMLOOP,,,,,,,,,,; ; **** Emulator Task **** ; Degenerate -- just returns control to emulator in Rom1. Emulator: SWMODE; Switch to Rom1 :next; Mesa emulator entry point ; Microcode subroutines are defined and called from Mesa programs ; as shown in the following example: ; silentBootAddr: CARDINAL = 400B; -- Ram address of SilentBoot microcode -- ; SilentBoot: PROCEDURE[bootLocusVector: WORD] = ; MACHINE CODE BEGIN ; Mopcodes.zLIW, silentBootAddr/256, silentBootAdr MOD 256; ; Mopcodes.zJRAM; ; END; ; SilentBoot[177376B]; -- the call -- ; All these routines assume they are called with a clean stack. ; Hence, an invocation such as "SilentBoot[177376B]" must be written ; as a complete statement, not as an embedded expression. ; If the routine returns a value, it must be called in a statement ; of the form "simpleVariable _ Routine[args]". ; This permits the Ram subroutine to access fixed S-registers for ; arguments and return values. It must still adjust the stack pointer ; appropriately, however. ; SilentBoot: PROCEDURE[bootLocusVector: WORD] ; Sets the Boot Locus Vector and does a silent boot. ; Entry point is Ram address 400. SilentBoot: RMR_ stk0; Set BLV from arg on stack L_ stkp-1,TASK; stkp_ stkp-1 stkp_ L; SINK_ 100000,STARTF,:Emulator; Boot the machine #PREncrypt.mu; ; **** 1822 Task **** #Mesa1822.mu; (0,4798)(1,11959)\b14B467b1B27b1B79b1B673b2B38b26B63b8B1053b10B146b22B