DEFINITION MODULE Process; (* G. Koller 29.11.87 *) FROM SYSTEM IMPORT WORD, ADDRESS; TYPE M68000StatusBits = ( sbCarry, (* 0 *) sbOverflow, (* 1 *) sbZero, (* 2 *) sbNegativ, (* 3 *) sbExtend, (* 4 *) sbNotUsed5, (* 5 *) sbNotUsed6, (* 6 *) sbNotUsed7, (* 7 *) sbIntMask0, (* 8 *) sbIntMask1, (* 9 *) sbIntMask2, (* a *) sbNotUsed11, (* b *) sbNotUsed12, (* c *) sbSupervisor, (* d *) sbNotUsed13, (* e *) sbTrace (* f *) ); M68000StatusRegister = SET OF M68000StatusBits; PROCESS = POINTER TO M68000Context; M68000Context = RECORD Valid : LONGINT; (* 0H BYTE Offset *) (*DS*) D0, D1, D2, D3, (* 4H *) D4, D5, D6, D7 : LONGINT; (* 14H *) A0, A1, A2, A3 : ADDRESS; (* 24H *) ModuleBaseA4 : ADDRESS; (* 34H *) ProcessBaseA5 : ADDRESS; (* 38H *) FramePointerA6 : ADDRESS; (* 3CH *) StackPointerA7 : ADDRESS; (* 40H *) (*DS*) StatusRegister : M68000StatusRegister; (* 44H *) ProgramCounter : PROC; (* 46H *) END; (* M68000Context *) (* 4AH *) (* Only if Valid in M68000Context equals Magic the PROCESS is valid *) CONST Magic = 04091964H; (* M68000 Stack grows down to lower memory addresses. This way, D0 of Context is on top of Stack and A7 of the saved Process context must point to this location. SavedFramePointer is on bottom of the stack an should be NIL to mark the end of the dynamic link chain *) VAR MainPROCESSPtr : POINTER TO PROCESS; (* Pointes to the process variable of the main process. If not NIL, the referenced, saved context will be loaded after an error in a coroutine for correct debugger operation. *) ErrorPROCESS : PROCESS; (* If there was a valid MainPROCESSPtr the errornouse process context is saved referenced by this location *) GemSSP : ADDRESS; (* Gem System Stack Pointer saved in this location while installing *) PROCEDURE LISTEN; PROCEDURE NEWPROCESS (ProcessCode : PROC; WorkSpaceBase : ADDRESS; WorkSpaceSize : LONGCARD; VAR ProcessDesc : PROCESS ); (* create a basic process image inside the WorkSpace *) PROCEDURE TRANSFER (VAR From: PROCESS; VAR To: PROCESS); CODE(04E43H); (*DS*) (* transfer the processor control to the context of process To an save current context in From. From and To may be equal *) PROCEDURE IOTRANSFER (VAR From: PROCESS; VAR To: PROCESS; Vector: ADDRESS); CODE(04E44H); (*DS*) (* transfer the processor control to the context of process To an save current context of the interrupt process in From. From context will be loaded in case of an interrupt and the running process will be saved under Address To *) END (* OF DEFINITION MODULE *) Process.