$MOD186
$PAGELENGTH (95)
$PAGEWIDTH  (136)

;Copyright (C) 1984,1985 by Xerox Corporation. All rights reserved.

;-- stored as [Iris]<WMicro>Dove>RAMOpie.asm
;-- created on  5-Apr-85 12:22:48

;-- last edited by:
;--	MPL				 1-Aug-85 11:55:27	:Disabled all.
;--	JMM				26-Jun-85 11:14:51	:Enabled All.
;--	JMM				21-Apr-85 13:31:51	:Enabled PCE.
;--	JMM				10-Apr-85 11:24:17	:Misc.
;--	JMM				15-Feb-85  0:57:00	:GermInit call.
;--	JMM				20-Jan-85 14:09:10	:Changed fadeout.
;--	JoM				19-Dec-84 17:15:36	:Added IORegion move
;--	JoM				 5-Dec-84 13:34:26	:Changed Init calls to NEAR rather than FAR
;--								: (can't have any segment-dependent RAM code!)
;--	JoM				 1-Dec-84 14:48:27	:Creation

NAME			RAMOpie
;--------------------------------------------------------------------------------
; 
$NOLIST
$INCLUDE		(IOPDefs.asm)
$INCLUDE		(Handlers.asm)
$INCLUDE		(VMMDefs.asm)
$INCLUDE		(IOPLRam.asm)
$INCLUDE		(IOPMacro.asm)
$LIST

;--------------------------------------------------------------------------------
; 
;
;********************************************************************************
;--------------------------------------------------------------------------------

IORegion		SEGMENT		COMMON 

EXTRN			idledBootTasks :Condition
		
IORegion		ENDS


;--------------------------------------------------------------------------------
; 
;
;********************************************************************************

IOPEInRAM		SEGMENT	PUBLIC

EXTRN			GermInit: NEAR		;For passing germ parameters.

			ASSUME	CS:IOPEInRAM
			ASSUME	ES:IOPELocalRAM

PUBLIC			InitializeRAMHandlers

IORegionFirstLogicalPage	EQU	32	;offset 4000H bytes
shiftPageToLowAddress		EQU	9	;low addr = page SHL 9


InitializeRamHandlers	PROC	FAR


			CALL	GermInit
			
; check if we need to move the IORegion
CheckIORegionMove:	MOV	BX, DS
			MOV	DX, (IORegionFirstLogicalPage SHL (shiftPageToLowAddress - Nibble))
			CMP	BX, DX
			JE	DoInit
			MOV	ES, DX
			;MOV	CX, sizeOfInitialIORegion
			MOV	CX, 2000H	; temp patch
			MOV	DI, 0
			MOV	SI, 0
			CLI			; shut down everyone while transferring IORegion!
		REP	MOVS	BYTE PTR ES:[DI], DS:[SI]
			MOV	DS, DX
			STI			; transfer complete, let others run

; first zero out endOfBootBufferSpace so RAM tasks can be initialized

DoInit:			MOV	AX, SEG endOfBootBufferSpace
			MOV	ES, AX
			MOV	endOfBootBufferSpace, 0

; now init RAM handlers

%*DEFINE(Handler(name))(

EXTRN %name%(Init) :NEAR

			CALL %name%(Init)
)

%*DEFINE(RamHandlersLinked)(

%Handler(mesaProcessor)
%'Handler(PCE)
%'Handler(RS232C)
%'Handler(TTY)


)


;Generate calls to Init Routines, then sleep forever.

			%RAMHandlersLinked
			
			%WaitForCondition (OFFSET idledBootTasks,noTimeout)
			
InitializeRamHandlers	ENDP


IOPEInRAM		ENDS


			END