;***************************************************************************;
; ;
; Dump another job's memory partition ;
; By David F. Pallmann ;
; ;
;***************************************************************************;
OBJNAM MEMDMP.LIT
MAYCREF
SEARCH SYS
SEARCH SYSSYM
SEARCH TRM
SEARCH CRT
CREF
VMAJOR=0
VEDIT=100. ;24-Apr-83 DFP creation
PHDR -1,0,PH$REE!PH$REU
;equates
IMP=A5 ;impure area index
;memory management definitions
MM$SIZ=0 ;memory module size word
MM$FLG=4 ;memory module flags
MM$NAM=6 ;memory module filename
MM.HDR=14 ;module header size
;macros
DEFINE BITW SRC,DST
MOVW SRC,D7
ANDW DST,D7
ENDM
;impure area
OFINI
OFDEF JNAME,4 ;job name to dump
OFDEF MCOUNT,4 ;module dump count
OFDEF BUFFER,12. ;RAD50 unpacking buffer
OFDEF MEMFRE,4 ;free memory count
OFSIZ IMPSIZ
;initialization
INITIA: GETIMP IMPSIZ,IMP,EXIT
MOV IMP,A0
MOVW #[IMP],-(A0)
MOVW #[DMP],-(A0)
MOVW #[MEM],-(A0)
CLR MCOUNT(IMP)
;scan cmd line for job name
SCNLIN: BYP
LIN
BEQ 100$
FILNAM JNAME(IMP),XXX
MOV JOBTBL,A0
BR 110$
100$: MOV JOBCUR,A1
BR SCNJOB
110$: MOV (A0)+,D0
BEQ 110$
BMI BADJOB
MOV D0,A1
CMM JOBNAM(A1),JNAME(IMP)
BNE 110$
;scan job's partition
SCNJOB: MOV JOBBAS(A1),A0
MOV JOBSIZ(A1),MEMFRE(IMP)
BR MODULE
;user entered non-existant job name
BADJOB: TYPESP ?no such job
JMP EXIT
;list module or quit
MODULE: CTRLC EXIT
TST MM$SIZ(A0) ;end of partition?
JEQ DONE ; yes
MDLNAM: LEA A1,MM$NAM(A0) ;set up for RAD50 unpacking
LEA A2,BUFFER(IMP)
UNPACK ;unpack filename
UNPACK
MOVB #40,(A2)+ ;embed space in text
UNPACK ;unpack extension
MOVB #40,(A2)+ ;embed space in text
CLRB @A2
BITW #FIL,MM$FLG(A0) ;FGD bit set?
BEQ 100$
HIGH
BR 110$
100$: LOW
110$: TTYL BUFFER(IMP)
MDLSIZ: MOV MM$SIZ(A0),D1 ;output module size
SUB #MM.HDR,D1 ;correct size
DCVT 7,OT$TRM!OT$ZER!OT$TSP
MDLBAS: MOV A0,D1 ;output module base
ADD #MM.HDR,D1
OCVT 10,OT$TRM!OT$TSP
BITW #FIL,MM$FLG(A0) ;FIL bit set?
BEQ 100$ ; no
TYPESP FIL ; yes
100$: BITW #FGD,MM$FLG(A0) ;FGD bit set?
BEQ 110$ ; no
TYPESP FGD ; yes
110$: BITW #LOK,MM$FLG(A0) ;LOK bit set?
BEQ 120$ ; no
TYPESP LOK ; yes
120$: CMPW MM$NAM+4(A0),#[LIT] ;.LIT file?
BNE 160$ ; no
MOVW MM.HDR+10(A0),D0 ; yes - load program attributes word
BITW #PH$REE,D0 ;reentrant?
BEQ 130$ ; no
TYPESP REE ; yes
130$: BITW #PH$REU,D0 ;reusable?
BEQ 140$ ; no
TYPESP REU ; yes
140$: BITW #PH$L12,D0 ;requires [1,2] log?
BEQ 150$ ; no
TYPESP L12 ; yes
150$: BITW #PH$OPR,D0 ;requires OPR: log?
BEQ 160$ ; no
TYPESP OPR ; yes
160$: CRLF
MOV MM$SIZ(A0),D0
SUB D0,MEMFRE(IMP)
INC MCOUNT(IMP) ;update module count
ADD MM$SIZ(A0),A0 ;advance to next module
JMP MODULE
DONE: HIGH
TYPE <free >
MOV MEMFRE(IMP),D1
SUB #2,D1
DCVT 7,OT$TRM!OT$ZER!OT$TSP
MOV A0,D1
ADD #2,D1
OCVT 10,OT$TRM
CRLF
EXIT: HIGH
CRLF
EXIT
END