;  FILE ' TriconMC.mu '
; Predefinitions for Trident disk controller microcode.
; Copyright Xerox Corporation 1979

; Last modified November 10, 1979  10:14 AM


#AltoConsts23.mu;	Get from [Maxc1]<ALTOSOURCE>AltoConsts23.mu


; Predefinitions for task starting locations and emulator-level
; subroutine entry points.

%0, 1777, 0, EXITRAM;		Emulator task start
%0, 1777, 3, LOC3;		Write task start
%0, 1777, 16, LOC16;		(See below)
%0, 1777, 17, LOC17;		Read task start
%0, 1777, 20, START;		(See below)
%0, 1777, 21, LOC21;		ModShift subroutine for ECC correction
%0, 1777, 22, LOC22;		SetBLV subroutine

; There is a hack in the read microcode that causes the reset location
; for task 16 to be used.  This means that it is not possible to run
; task 16 (= Diablo disk word task) in the Ram.


; Lock out the Ram Utility Area

%7, 1777, 774, RU774, RU775, RU776, RU777, RU1000, RU1001, RU1002, RU1003;

RU774:	NOP;
RU775:	NOP;
RU776:	NOP;
RU777:	NOP;
RU1000:	NOP;
RU1001:	NOP;
RU1002:	NOP;
RU1003:	NOP;


;***THIS INSTRUCTION WILL CAUSE THE BOOT-LOCUS-VECTOR TO BE
;*** SET TO THE VALUE IN AC0 AT THE NEXT BOOT

$AC0	$R3;

LOC22:	RMR←AC0,:EXITRAM;


;***THIS CODE IS CAREFULL PLACED IN THE RAM
;***FOR AN EMULATOR "NO-OP BOOT".
;***THE LSB OF THE BOOT-LOCUS-VECTOR MUST BE 0 FOR THIS TO WORK
;
EXITRAM: SWMODE;	GO TO LOCATION 20 IN THE RAM, AND THEN
START:	:START;		RETURN TO LOCATION 20 IN THE ROM


#TriConBody.Mu;		The body of the Trident controller microcode