 MODULE MSInit;
 (*$S-,M-,N+,L-,C-*)
 
 CONST (* base page constants *)
&codestart = 8;
&codelen   = 12;
&datastart = 16;
&datalen   = 20;
&bssstart  = 24;
&bsslen    = 28;
&parent    = 36;
&
&(* GEMDOS functions *)
&Keep    = $31;
 
 BEGIN
"ASSEMBLER
(MOVE.L  A1,A6             ; address of main module entries
(MOVE.L  A0,A5             ; address of base page
(MOVE.L  A5,A4             ; in A4 merken
(MOVE.L  codelen(A5),D0
(ADD.L   datalen(A5),D0
(ADD.L   bsslen(A5),D0
(ADDI.L  #256,D0           ; D0: total length of static program space
(MOVE.L  D0,D2
(ADD.L   A5,D2             ; D2: end of program space
(ADDQ.L  #1,D2
(BCLR    #0,D2             ; sync D2
(MOVE.L  D2,A3             ; end of prg.space is bottom of stack
(
(; clear bss
(MOVE.L  bssstart(A5),A0   ; A0 points now to start of bss
(MOVE.L  bsslen(A5),D1     ; no. of bytes in bss
(LSR.L   #1,D1             ; no. of words
(MOVEQ   #0,D0
(BRA     clear0
 clear2: SWAP    D1
 clear1: MOVE.W  D0,(A0)+
 clear0: DBRA    D1,clear1
(SWAP    D1
(DBRA    D1,clear2
(
(TST.L   (A6)+
 loop2:  MOVE.L  (A6)+,A0
(MOVE.L  A0,D0                     ; end of list ?
(BEQ     end2
(MOVEM.L A4/A6,-(A7)
(JSR     (A0)                      ; call main modules
(MOVEM.L (A7)+,A4/A6
(BRA     loop2
 
 end2:   CLR.W   -(A7)
(move.l  A3,D0
(sub.l   A4,D0
(addq.l  #2,D0
(move.l  D0,-(A7)
 error:  MOVE.W  #Keep,-(A7)              ; terminate process
(TRAP    #1
"END
 END MSInit.
 
(* $00010816$FFF7B327$FFF7B327$FFF7B327$FFF7B327$FFF7B327$FFF7B327$FFF7B327$FFF7B327$FFF7B327$FFF7B327$FFF7B327$FFF7B327$FFF7B327$FFF7B327$FFF173FA$FFF7B327$FFF7B327$FFF7B327$FFF7B327$FFF7B327$FFF7B327$FFF7B327$FFF7B327$FFF7B327$FFF7B327$FFF7B327$FFF7B327$FFF7B327$FFF7B327$FFF7B327$FFF7B327$FFF7B327$FFF7B327$FFF7BF1F$FFF7B327$0000E54A$FFF7B327$FFF7B327$FFF7B327$FFF7B327$FFF7B327$0000002C........TT......T.......T.......T.......T.......T.......T.......T.......T.......$0000043A$FFEE7E2E$FFEE7E2E$FFF0C0F2$FFEE7E2E$FFF0C0F2$FFEE7E2E$FFEE7E2E$FFEE7E2E$FFEE7E2E$000005D5$FFEE7E2E$000000E7$0000002C$FFEE7E2E$0000002C*)
