$MOD186 $PAGELENGTH (95) $PAGEWIDTH (136) ;Copyright (C) 1984,1985 by Xerox Corporation. All rights reserved. ;-- stored as [Iris]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