$MOD186 $PAGELENGTH (72) $PAGEWIDTH (136) ;Copyright (C) 1984, 1985 by Xerox Corporation. All rights reserved. ;-- stored as [Idun]<WDLion>Dove>RAMHInit.asm ;-- created on 27-Jun-85 8:09:06 ;-- last edited by: ;-- KEK 16-Mar-86 13:42:22 ;add PROC'ness; org'd at 0. ;-- JAC 6-Jan-86 14:06:26 :Make InitializeRAMFunctions a far proc ;-- JAC 4-Dec-85 10:44:13 :Don't call init procs if in main memory ;-- JPM 17-Sep-85 12:32:36 :Use BOOTPROC for boot device handlers ;-- JPM 12-Aug-85 9:14:24 :Change IOPEInRAM alignment to WORD ;-- JPM 25-Jul-85 9:25:24 :Remove OpieIOR (not used) ;-- JPM 27-Jun-85 8:09:06 :Creation from HandInit.asm, ;-- adding CALLPROC option for restarting ROM handlers NAME RAMHInit $NOLIST $INCLUDE (IOPDefs.asm) $INCLUDE (OpieDefs.asm) $INCLUDE (ROMBDefs.asm) $LIST ;******************************************************************************** IOPELocalRam SEGMENT AT 0 EXTRN HandlerInitProcTable: SegmentAndOffset EXTRN device: WORD IOPELocalRam ENDS ;******************************************************************************** IOPEInRAM SEGMENT WORD PUBLIC ASSUME CS:IOPEInRAM ORG 0 $INCLUDE (RAMHands.asm) ;file specifying which handlers we link with. PUBLIC InitializeRAMFunctions InitializeRAMFunctions PROC FAR MOV AX, IOPELocalRam MOV ES, AX ASSUME ES:IOPELocalRam $NOGEN ;The following macro enumerates those which are expected to be linked. %' RAMHands.asm defines a macro called HandlersLinked, which calls the %' %Handler macro for the names of all handlers the author provided. %*DEFINE(Handler(name,id,initProcAction,codeLocation)) ( PUBLIC %name%(HandlerID) %name%(HandlerID) EQU %id %IF (%NES (%codeLocation,MEMORY)) THEN ( %IF (%EQS (%initProcAction,CALL)) THEN (EXTRN %name%(Init): NEAR PUSH ES %name%(StartMe:) PUSH CS CALL %name%(Init) POP ES ) ELSE ( %IF (%EQS (%initProcAction,PROC)) THEN (EXTRN %name%(Init): NEAR MOV DI, SIZE SegmentEntry * %id %name%(StoreMe:) MOV HandlerInitProcTable[DI].segmentValue, CS MOV HandlerInitProcTable[DI].offsetValue, OFFSET %name%(Init) ) ELSE ( %IF (%EQS (%initProcAction,CALLPROC)) THEN (MOV DI, SIZE SegmentEntry * %id PUSH ES %name%(StartMe:) CALL DWORD PTR HandlerInitProcTable[DI] POP ES ) ELSE ( %IF (%EQS (%initProcAction,BOOTPROC)) THEN (CMP device, %name JE %name%(SkipMe) MOV DI, SIZE SegmentEntry * %id PUSH ES %name%(StartMe:) CALL DWORD PTR HandlerInitProcTable[DI] POP ES %name%(SkipMe:) ) FI ) FI ) FI ) FI ) FI ) ;Generate calls to Init Routines $GENONLY %HandlersLinked RET InitializeRAMFunctions ENDP IOPEInRAM ENDS END