@X @~
~V7 56 2 -5
~D10
~H                    MUSS
~
~
~D10
~H            MTL293
~D10
~MMANCHESTER UNIVERSITY  -  CONFIDENTIAL~
~
~
                                                           ISSUE 11~
~V9 -1
~P
~V9 1
~YMTL293
~S1~M~OMUTL IMPLEMENTATION DESCRIPTION
~S1~M~OSection 29  Version 3
~S1~OSection 29.3 Compile Map Printing
~S1~O1. General Description
~BThis module provides procedures for printing of machine
dependent information which is included in the map output
by MUTL.
~S1~O2. Interfaces~
~
Exported Procedures:~
   OUT.VAR.ADDR(PTR.TO.VAR.E)~
   OUT.PROC.ADDR(PTR.TO.PROC.E)~
   OUT.CODE.ADDR~
   OUT.CODE(START.BYTE,FINISH.BYTE)~
~
~
Imported Procedures:~
   Section 17   OUT.H16~
~
~
Imported Data Structures:~
4) OUT.CODE(START.BYTE,FINISH.BYTE)~
~BThese are described in Version 1 of Section 29.~
~S1~O3. Implementation~
~S1~O3.1 Outline of Operation~
~S1~O3.2 Data Structures~
~BNone.~
~Y
~V9 -1
~P
~D15
~HFLOWCHARTS
~
~
~H               MTL293
~V9 -1
~F
@TITLE MTL29(3,11)
@COL 1S-2R-3R-4F
@FLOW 1-2-3-4
@BOX 1.0
SECTION 29 VERSION 3(VAX 11)
MONITOR PRINTING
@BOX 2.0
EXTERNAL ENVIRONMENT
MODULE HEADING
@BOX 3.0
MTL29.1 PRINT PROCEDURES
@BOX 4.0
END
@BOX 1.1
@BOX 2.1
::PDP*CODE 2;
*CODE 3;
#MTL29/1
MODULE(OUT.VAR.ADDR,OUT.PROC.ADDR,OUT.CODE.ADDR,OUT.CODE);
PSPEC OUT.VAR.ADDR(ADDR VAR.E);
PSPEC OUT.PROC.ADDR(ADDR PROC.E);
PSPEC OUT.CODE.ADDR();
PSPEC OUT.CODE(ADDR,ADDR);
@BOX 3.1
#MTL29.1
@BOX 4.1
*END
@END
@TITLE MTL29/1(3,11)
@COL 1S-2R-3R-4R-5F
@FLOW 1-2-3-4-5
@BOX 1.0
EXTERNAL ENVIRONMENT
@BOX 2.0
TYPES
@BOX 3.0
VARIABLES AND LITERALS
@BOX 4.0
PROCEDURES
@BOX 5.0
END
@BOX 2.1
;IMPORT TYPE PAR.E, TYPE.E
;TYPE STORE.ADDR.TY IS
   ADDR [$LO8] SEG.PTR
;TYPE STORE.E IS
   ADDR STORE.I,STORE.Z,STORE.EQ.Z
   $LO8 STORE.KIND,SEG.NO
   STORE.ADDR.TY STORE.ADDR
   $LO8 STORE.TX
   ADDR STORE.C.ADDR
   $LO32 STORE.R.ADDR
   $LO8 STORE.BASE,STORE.ACCESS
;TYPE FREF.E IS
   $LO8 REF.KIND
   ADDR FREF.E NEXT.REF
   ADDR STORE.E REF.SEG
   $LO32 REF.POS
   $IN32 OFFSET
;TYPE PROC.ADDR.TY2 IS
   $LO32 ADDRESS
OR ADDR FREF.E PROC.REFS
;TYPE PROC.ADDR.TY IS
   $LO32 RET.ADDR
   ADDR FREF.E SP.INSTS
   PROC.ADDR.TY2 PADDR
;TYPE VAR.UNDEF.TY IS
   ADDR FREF.E VAR.REFS
;TYPE PROC.ENTRY.TY IS
   PROC.ADDR.TY PROC.ADDR
   OR $LO32 PROC.FIND.N
;TYPE PROC.E IS
   $LO8 PROC.NAT
   $LO8 PROC.RES.TYP
   $LO8 PROC.INFO
   ADDR PAR.E PROC.PAR.P
   ADDR TYPE.E PROC.RES.TYP.P
   PROC.ENTRY.TY ENTRY
;TYPE VAR.ADDR.TY IS
   ADDR STORE.E VAR.STORE.P
   ADDR VAR.OFF OR
   VAR.UNDEF.TY VAR.UNDEF
;TYPE VAR.E IS
   $LO16 VAR.TYP ADDR VAR.DIM $LO16 VAR.F
   ADDR TYPE.E VAR.TYP.P
   VAR.ADDR.TY VAR.ADDR
@BOX 3.1
;ADDR STORE.E CODE.SEG.P
;$IM $LI SEG.SHIFT
@BOX 4.1
;PSPEC DUMMYP()
;TYPE DUMMYT IS ADDR DUMMYP PP
;LSPEC LINK(ADDR [$LO8], ADDR [DUMMYT])/$IN
;LSPEC NEWLINES($IN)
;LSPEC CAPTION(ADDR[$LO8])
;LSPEC OUTHEX($LO32,$IN)
@END
@TITLE MTL29.1(3,10)
@COL 1S-2R-3R-4R-6R-5F
@FLOW 1-2-3-4-6-5
@BOX 1.0
PRINT PROCEDURES
@BOX 2.0
PRINT VARIABLE ADDRESS
@BOX 3.0
PRINT PROCEDURE ADDRESS
@BOX 4.0
PRINT CURRENT CODE ADDRESS
@BOX 5.0
END
@BOX 6.0
PRINT CODE
@BOX 1.1
@BOX 2.1
PROC OUT.VAR.ADDR(V.P);
SELECT VAR.STORE.P^ OF VAR.ADDR OF V.P^;
;IF STORE.KIND & 2 /= 0 THEN
    ;CAPTION(%"AP -")
    ;OUTHEX(VAR.OFF OF VAR.ADDR OF VP^, 4)
;ELSE IF STOREKIND & %C /= 0 THEN
    ;CAPTION(%"FP -")
    ;OUTHEX(VAR.OFF OF VAR.ADDR OF V.P^,4)
ELSE
    ;OUTHEX(STORE.R.ADDR + VAR.OFF OF VAR.ADDR OF V.P^,8)
;FI FI
;END
@BOX 3.1
PROC OUT.PROC.ADDR(PR.P);
OUTHEX(ADDRESS OF PADDR OF PROC.ADDR OF ENTRY OF PR.P^,8);
END;
@BOX 4.1
PROC OUT.CODE.ADDR;
OUTHEX(STORE.R.ADDR OF CODE.SEG.P^
     + STORE.I OF CODE.SEG.P^,8);
END;
@BOX 5.1
@BOX 6.1
;PROC OUT.CODE(ST,FIN)
;NEWLINES(1)   :: REMOVE WHEN NEWLINES(0) WORKS
;PSPEC OP($IN, ADDR, ADDR)
;$LO8 [3] BUF;
;'O=>BUF[0]; 'P => BUF[1]; " "=> BUF[2]
;DUMMYT[1] OPV
;ADDR OP OUT.PROG
;IF LINK (^BUF, ^OPV) = 0 THEN
   ;PP OF OPV[0] => OUT.PROG
   ;OUT.PROG^(BYTE(SEG.PTR OF STORE.ADDR OF CODE.SEG.P^)->>SEG.SHIFT,ST,FIN)
;FI
;END
@END




