File: MONDUM.PA of Tape: Sources/Multi8/multi8-3
(Source file text) 

/MONDUM.PA 9-SEP-80
/
/FUNCTION:THIS PROGRAM MAKES A QUICK DUMP ON THE LINEPRIN-
/	TER OF ALL INTERESTING PARAMETERS IN THE FOREGROUND
/	MONITOR. THIS IS DONE BY LISTING THE MOST IMPORTANT
/	PARAMETERS FIRST AND THEN SOME MORE DETAILED DATA.
/
/CONCEPT:THIS PROGRAM IS INTENDED TO ASSIST THE INTERPRETA-
/	TION OF ERRORS THAT OCCURRED. ONE CAN NOW USE THIS 
/	PROGRAM TO EXAMINE MORE EASILY WHAT HAS HAPPENED.
/	THE MODULE WORKS WITH LABELS, GENERATED DURING THE
/	ASSEMBLY OF THE FOREGROUND MONITOR [MS.PA).
/	IT WORKS UNDER OS/8 AFTER A RUN OF MULTI8, AS WELL
/	AS UNDER MULTI8 FROM THE BACKGROUND. IN BOTH CASES
/	IS WORKS IN HIS OWN WAY. UNDER OS/8 IT JUST FETCHES
/	DATA FROM FIELD 0, UNDER MULTI8 IT USES THE SPY-IOT
/	(6264) FOLLOWED BY THE REQUESTED FIELD.
/
/DESCRIPTION:THIS CAN BE ILLUSTRATED BY A TYPEOUT SAMPLE.
/
/SPECIAL:AFTER COMPLETION THE PROGRAM JUMPS TO THE KEYBOARD
/	MONITOR.
/	TYPE-OUT CAN BE STOPPED BY PRESSING THE CTRL/C KEY.
/	ONCE ASSEMBLED, THE PROGRAM CAN BE FORCED TO RUN IN
/	ANY FIELD. WHEN IT IS LOADED IN THE SAME FIELD AS
/	THE MULTI8 MONITOR, THE CORE AREA FROM
L=BEGIN&7400	   /TO
L=PROGEND&7600+177 /WILL BE OVERLAIED.

/OUTPUT ROUTINE IS DEVICE-DEPENDENT.
IFDEF LE8E <DEVNR=66>
IFNDEF DEVNR <DEVNR=04	/IF NO LINEPRINTER:TELETYPE >

/START ADDRESS
BEGIN=200	/START ADDRESS FOR .R MONDUM
CHAIN=201	/START WHEN CHAINED TO FROM MULTI8

SM8=6254	/SKIP ON MULTI8
SPY=6264	/"LOOK IN REAL MEMORY"
SYSHND=7607	/ENTRY OF OS/8 SYSTEM HANDLER
	*BEGIN

	SKP
	 JMP MCHAIN
	SM8		/SKIP ON MULTI8, [BACKGROUND)
	 JMP NOM8	/THIS MUST BE AFTERWARDS
	TAD FETCH5	/REPLACE "JMP I FETCH"
	DCA FETCH3
	JMP YESM8
NOM8,
MCHAIN,	TAD DCATM2	/NOT IN THE BACKGROUND
	DCA FETCH1	/DCA TEM2
YESM8,	KCF		/KILL ^O
	RDF
	TAD FETCH4
	DCA FETCH4	/SET CORRECT CDF
	JMS PRMESG	/*MULTI8 V.. MONITOR DUMP. DATE *
	JMS SETFLD
	   CDF 10
	JMS FETCH
	   7666
	DCA FETCH
	TAD FETCH
	CLL RAL
	RTL
	RTL
	AND [17		/MONTH
	JMS DECTYPE	/PRINT DECIMAL TWO DIGITS
	TAD ["/-240
	JMS I [OUTPUT
	TAD FETCH
	CLL RAR
	RTR
	AND [37		/DAY OF MONTH
	JMS DECTYPE
	TAD ["/-240
	JMS I [OUTPUT
	TAD FETCH
	AND [7
	TAD [116	/ADD "78" OCTAL
	JMS DECTYPE
	JMS SETFLD
	   CDF 0
IFNDEF NOTIME <		/PRINT THE TIME.
	JMS PRMESG	/*TIME *
	JMS FETCH
	   TIME+3
	TAD [30		/ADD "24" OCTAL
	JMS DECTYPE
	TAD [":-240
	JMS I [OUTPUT
	JMS FETCH
	   TIME+2	/MINUTES
	TAD [74		/ADD "60" OCTAL
	JMS DECTYPE	>
	JMS I [CRLF2
/PRINT CURTSK
	JMS PRMESG	/*CURTSK*
	JMS FETCH	/FETCH CURTSK
	   CURTSK
	JMS I [OCTYPE
/PRINT # OF FREECORE BLOCKS
	JMS PRMESG	/*FREE BLOCKS *
	TAD [-MAXNAM
	JMP I [DU0

DECTYPE,0		/DECIMAL PRINT ROUTINE [2 DIGITS)
	DCA TEM1
DCATM2,	DCA TEM2
	TAD TEM1
DECNXT,	TAD [-12	/SUBSTRACT 10 UNTIL RESULT IS NEG.
	SPA
	 JMP DECFND	/READY, THAT IS: 10 TOO FEW
	ISZ TEM2	/10 MORE
	JMP DECNXT
DECFND,	DCA TEM1	/10 TOO FEW
	TAD TEM2
	TAD [260-240
	JMS I [OUTPUT	/PRINT FIRST DIGIT
	TAD TEM1
	TAD [12+260-240
	JMS I [OUTPUT	/PRINT SECOND DIGIT
	JMP I DECTYPE

/FETCH A WORD FROM REAL CORE
/	JMS FETCH
/	   ADDRESS
/	RETURN WITH WORD IN AC

FETCH,	0
	TAD I FETCH
	ISZ FETCH
FETCH1,	SPY		/IN FOREGROUND: DCA TEM2
FETCH2,	CDF 00		/OR 10...
FETCH3,	TAD I TEM2	/IN BACKGROUND: JMP I FETCH
FETCH4,	CDF		/CDF TO CURRENT INSTRUCTION FIELD

FETCH5,	JMP I FETCH

SETFLD,	0	/SET CDF X IN FETCH ROUTINE
	TAD I SETFLD
	ISZ SETFLD
	DCA FETCH2
	JMP I SETFLD

/PRINT A MESSAGE CODED WITH THE PAL PSEUDO-OP
/'TEXT'. PAL3 AND PAL8 COMPATIBLE
/
/	JMS PRMESG
/	   MESG
/	RETURN 	/AC=0
/
/MESG,	TEXT 'ABC82' /CODED AS 0102;0370;6200

PRMESG,	0
PRM1,	ACM1
	DCA PACKSW	/PACKSW=RIGHT
	ISZ POINT	/NEXT WORD
	TAD I POINT	/FETCH AND ROTATE 6
	BSW
PRM2,	AND [77		/MASK 6 BITS
	SNA
	 JMP I PRMESG	/ZERO ENDS THE LIST
	TAD [240
	AND [77
	JMS I [OUTPUT
	ISZ PACKSW	/LEFT OR RIGHT?
	 JMP PRM1	/LEFT
	TAD I POINT	/RIGHT
	JMP PRM2

POINT,	DAT-1
PACKSW,	0

TEM1=PRMESG
TEM2=PACKSW

PAGE
NAMTAB,	FHEAD
	IHEAD
	MHEAD
	CHEAD
ESCNT,	0
PRQCNT=DPNTPP

DU0,	DCA ESCNT
TADNTB,	TAD NAMTAB
DU1,	DCA DUPTR
	JMS I [FETCH
DUPTR,	  0
	ISZ ESCNT	/COUNT THE NUMBER
	 SNA
	SKP CLA		/ESCAPE FROM ENDLES CHAIN !!!!
	 JMP DU1	/LOOP
	TAD [MAXNAM-1	/ONE TOO MUCH
	TAD ESCNT	/PRINT THE NUMBER
	JMS OCTYPE
	JMS I [PRMESG	/ERRTSK
	JMS I [FETCH
	   ERRTSK
	JMS OCTYPE
	JMS I [PRMESG	/AT
	JMS I [FETCH
	   ALARM
	 JMS OCTYPE
	JMS I [PRMESG	/ERRLOG
	JMS I [FETCH
	   ERRLOG
	JMS I [OCTYPE
	JMS I [PRMESG	/ERSTAT
	JMS I [FETCH
	   ERSTAT
	JMS I [OCTYPE
IFNZRO BGMAX <
	JMS I [CRLF
	JMS I [PRMESG	/BJOB
	JMS I [SETFLD
	   CDF 10
	JMS I [FETCH
	   BJOB
	JMS OCTYPE
	JMS I [PRMESG	/SJOB
	JMS I [SETFLD
	   CDF
	JMS I [FETCH
	   SJOB
	JMS OCTYPE
	JMS I [PRMESG	/LJOB
	JMS I [FETCH
	   LJOB
	JMS OCTYPE	>
	JMS I [CRLF2

/PRINT CONTENT OF INTQ, PRIQ, CORQ, FREQ
QCNT=DPNT
	TAD TADNTB
	DCA QTAB
	TAD [-4
	DCA QCNT
	TAD [-10
	DCA I [TABINT
QLOOP,	JMS I [PRMESG
QTAB,	TAD NAMTAB
	DCA PRQP
	TAD [-10
	DCA ESCNT
PRQ1,	TAD [-10
	DCA PRQCNT
PRQ2,	JMS I [TAB
	TAD PRQP
	JMS OCTYPE	/PRINT THE THREAD
	JMS I [FETCH
PRQP,	   FHEAD
	SNA
	 JMP PRQEND	/ZERO ENDS THE CHAIN
	DCA PRQP
	ISZ PRQCNT	/NEXT ITEM. ONE LINE READY ?
	 JMP PRQ2	/N
	JMS I [CRLF	/Y
	ISZ ESCNT
	 JMP PRQ1
PRQEND,	ISZ QTAB
	JMS I [CRLF
	ISZ QCNT
	 JMP QLOOP
	JMP I [DU8
DPNTPP,	0
DPNT,	0
DPNTP,	0
SWITCH,	20

/PRINT AC IN OCTAL. THE PRINT ROUTINE MAY DESTROY THE LINK
TEMP=DUPTR
COUNT=DPNTP
OCTEM,	0
OCT,
OCTYPE,	0
	DCA TEMP
	TAD [-4
	DCA COUNT
OCT1,	TAD TEMP
	RAL
	RTL
	DCA TEMP
	TAD TEMP
	RAL
	AND [7
	SNA
	 JMP OCTPR
	DCA OCTEM
	TAD [260-240	/MAKE ASCII
	DCA SWITCH
	TAD OCTEM
OCTPR,	TAD SWITCH
	JMS I [OUTPUT
	ISZ COUNT
	 JMP OCT1	/LOOP
	JMP I OCTYPE	/IF READY:LINK=0;AC=0

PAGE
F1,	0	/CONTAINS FIELD TO PRINT
CNT,	0	/COUNTER
PC,	0	/TEMPORARY PROGR COUNTER
TEM3,	0	/CONTAINS ENTRY IN COREMAP
CNTIN,	0	/INNER LOOP COUNTER
TABLE,	"$^100+"$
	"[^100+"[
	"]^100+"]
	".^100+".

DU8,	JMS I [CRLF
	JMS I [PRMESG	/SYSQUE
	TAD [SYSQ
	DCA I [DUMPP	/SET POINTER TO SYSQ
	JMS I [DUMP
	   -SYSMAX^2	/COUNT
	KCF		/KILL ^O
	JMS I [CRLF2
	JMS I [PRMESG	/COREMAP
	TAD [CORMAP	/SET UP BEGINADDRESS
	DCA DU12
	TAD [CORMAP-MAPEND /TOTAL COUNT
	DCA CNT
	TAD [37
	DCA F1		/SET HALF FIELD COUNTER
	JMP DU10
DU9,	ISZ CNTIN
	 JMP DU11
DU10,	TAD [-2
	DCA I [TABINT
	TAD [-20	/20 ENTRIES ON ONE LINE
DU10A,	DCA CNTIN
	JMS I [CRLF
	ISZ F1		/INCREMENT HALF FIELD COUNTER
	TAD F1		/PRINT FIELD
	CLL RAR
	JMS I [OUTPUT
DU11,	JMS I [TAB
	TAD [-4
	DCA I [TABINT
/THERE ARE 6 POSSIBILITIES:
/0000	THIS PAGE IS FREE;PRINT ..
/7777	THIS PAGE IS A BUFFER;PRINT ]]
/7776	THIS PAGE IS A BUFFER;PRINT [[
/7775	THIS PAGE OCCUPIED BY MONITOR;PRINT $$
/NEG.	THIS PAGE IS ACTIVE:PRINT TASK'S NAME
/POS.	THIS PAGE HAS BEEN USED BY A TASK: PRINT -NAME
	JMS I [FETCH
DU12,	   CORMAP
	DCA TEM3
	TAD TEM3
	SMA SZA CLA
	 TAD ["--240	/PRINT -
	JMS I [OUTPUT	/OR SPACE
	ACM1
	TAD TEM3
	CLL
	TAD [4
	SNA SZL
	 JMP DU13
	TAD [-3
CM300,	SMA
	 CIA
	TAD [-TCBTAB-4	/COMPUTE OFFSET IN NAMLST
	CLL RTR
	RAR
	TAD [NAMLST
	DCA DU14
	JMS I [FETCH	/FETCH THE NAME
DU14,	 0
	JMP DU17
DU13,	TAD [TABLE
	DCA TEM3
	TAD I TEM3
DU17,	JMS TYPH	/TYPE HASHED NAME
DU18,	ISZ DU12
	ISZ CNT		/ALL DONE?
	 JMP DU9
	TAD [-5
	DCA I [TABINT
	JMP I [DU23

/TYPE AC AS TWO CHARACTERS;6 BIT
TYPN,	0
	DCA TEM3
	TAD TEM3
	BSW
	JMS TYP6
	TAD TEM3
	JMS TYP6
	JMP I TYPN

TYP6,	0
	TAD [240
	AND [77
	JMS I [OUTPUT
	JMP I TYP6

/TYPE AC AS TWO CHARACTERS WHICH HAVE BEEN PACKED:
/"A^100+"B&3777
TYPH,	0
	DCA TEM3
	TAD TEM3
	AND [40
	SZA CLA		/BIT 40 SET ?
	 TAD [100	/N: ALPHABETIC
	TAD CM300
	TAD TEM3
	JMS TYPN	/TYPE CHAR'S IN AC
	JMP I TYPH

PAGE
CNT1,	0

/DUMP SOME REGISTERS OF PAGE 0
DU20,	KCF		/KILL ^O
	TAD [-FIELDS
	DCA CNT1
DU21,	JMS I [CRLF2
	TAD [PZRT-1
	DCA I [POINT
	DCA DUMPP	/SET POINTER TO 0
	JMS I [PRMESG	/PAGE ZERO REGISTERS,   FIELD
	TAD I [FETCH2
	AND [70
	JMS I [OCTYPE
	JMS DUMP
	   -FHEAD	/COUNT
	TAD I [FETCH2
	TAD [10
	DCA I [FETCH2
	ISZ CNT1
	 JMP DU21
	TAD [CDF 00
	DCA I [FETCH2

/PRINT THE CONTENTS OF HRDLST
	KCF		/KILL ^O
	JMS I [CRLF2
	JMS I [PRMESG
	TAD [HRDLST
	DCA DUMPP
	JMS DUMP
	   -TOTSLOT^2
	JMP I [DUMEND
IFNZRO BGMAX <
/PRINT ALL SAVED BG REGISTERS
DU23,	KCF		/KILL ^O
	JMS I [SETFLD
	   CDF 10
	TAD [BGDATA
	DCA DUMPP
	TAD [-BGMAX
	DCA CNT1
DU22,	JMS I [CRLF2
	TAD [BGT-1
	DCA I [POINT
	JMS I [PRMESG	/BG
	TAD CNT1
	TAD [BGMAX+1+260-240
	JMS I [OUTPUT
	JMS I [PRMESG	/    STAT MQ   SC   PC ...
	JMS DUMP
	   -UEND
	ISZ CNT1
	 JMP DU22
	JMS I [SETFLD
	   CDF 0	/ >

/PRINT DETAILED INFORMATION OF EACH TASK
	KCF		/KILL ^O
	JMS I [CRLF2
	JMS I [PRMESG	/TCBTAB   BLNK THRD ...
	TAD [NAMLST
	DCA DU26
	TAD [MAXNAM^10+TCBTAB+177&7600-TCBTAB%10
	CIA
	DCA CNT1
	TAD [TCBTAB
	DCA DUMPP
DU25,	JMS DUMP
DM10,	   -10
	JMS I [OUTPUT	/PRINT SPACE
	JMS I [FETCH
DU26,	   NAMLST
	SZA
	 JMS I [TYPH	/PRINT NAME
	ISZ DU26
	JMS I [TAB
	ISZ CNT1
	 JMP DU25
	JMP I [DU20
/DUMP AN ARRAY IN CORE: ALWAYS 10 ELEMENTS PER LINE.
/EACH LINE IS PRECEDED BY ITS OCTAL ADDRESS IN CORE.
/	JMS DUMP
/	   WORDCOUNT	/POSITIVE!
/	NORMAL RETURN 	/AC=0

DUMCNT,	0		/TOTAL COUNTER
DUMTEM,	0		/ELEMENTS IN ONE LINE COUNTER
DUMP,	.-.
	TAD I DUMP
	DCA DUMCNT	/TOTAL COUNT
	ISZ DUMP	/FOR RETURN
	JMP DUMP0
DUMPA,	ISZ DUMTEM	/ONE LINE DONE?
	 JMP DUMP1	/N; NEXT
DUMP0,	JMS I [CRLF
	TAD ["*-240
	JMS I [OUTPUT
	TAD DUMPP
	JMS I [OCTYPE
	JMS I [TAB
	TAD DM10
	DCA DUMTEM	/COUNTER
DUMP1,	JMS I [FETCH
DUMPP,	   0		/POINTER
	JMS I [OCTYPE	/DO THE CONVERSION AND PRINT
	JMS I [TAB
	ISZ DUMPP	/NEXT ITEM
	ISZ DUMCNT
	 JMP DUMPA
	JMP I DUMP

PAGE
/NO LITERALS ON THIS PAGE PLEASE...

OUTPUT,	0
	TAD MC240
	KSF		/SKIP OUTPUT IF PENDING INPUT
	 SKP
	JMP MC7600
	AND CM177
	DEVNR^10+6006	/PRINT CHARACTER
IFDEF LE8E < IFNZRO LE8E&1 <
	*.-1
	CMA
	6574
	6577	/ >>
	ISZ TABCNT	/SKIP DOES NOT HURT
	DEVNR^10+6001	/SKIP ON FLAG
IFDEF LE8E < IFNZRO LE8E&1 <
	*.-1
	6570	/ >>
	 JMP .-1
	CLA
	KSF
	JMP I OUTPUT
MC7600,	7600	/CLA
	TAD MC7600
	KRS
	TAD M7603	/^C ?
	SZA CLA
	 JMP I OUTPUT
	KCF
DUMEND,	JMS CRLF
IFDEF LE8E <
	TAD MC214
	JMS OUTPUT	/PRINT FF >
	DEVNR^10+6002	/CLEAR FLAG
IFDEF LE8E < IFNZRO LE8E&1 <
	*.-1	/ >>
	CDF CIF 0
	JMP I MC7600

/PRINT CRLF
CRLF,	.-.
	TAD MC215
	JMS OUTPUT
	TAD MC212
	JMS OUTPUT
	DCA TABCNT	/RESET TABCNT
	JMP I CRLF

CRLF2,	0
	JMS CRLF
	JMS CRLF
	JMP I CRLF2

/007 TABULATOR ROUTINE
/THE USER HAS TO TAKE CARE OF:
/INCREMENTING TABCNT WITH EACH INCOMING CHARACTER, CLEARING
/IT WHEN CARRIAGE RETURN. TAB-INTERVAL IS VARIABLE.
/A JMS TO TAB WILL MOVE THE TYPING HEAD TO THE NEXT
/TABULATOR POSITION.
/
/	CLA
/	JMS TAB
/	   RETURN	/AC=0

TABCNT,	0
TABINT,	-10
TAB,	0		/ENTER WITH AC =0
	TAD TABCNT	/SUBTRACT N TIMES TO GIVE REMAINDER
	TAD TABINT
	SMA
	 JMP .-2
	CLL RAL		/^2 BECAUSE OUTPUT ALSO INCREMENTS
	DCA TABCNT	/USE AS NEGATIVE COUNTER
	JMS OUTPUT
	ISZ TABCNT	/READY?
	 JMP .-2
	JMP I TAB	/YES

MC240,	240
M7603,	-7603
MC212,	212-240
MC214,	214-240
MC215,	215-240
CM177,	177
/ALL MESSAGES
DAT,	TEXT /MULTI8 VXX MONITOR DUMP. DATE /
	O=.
	*DAT+4	/PATCH FOR VERSION NUMBER
	V1=VERSHI&77
	V2=VERSLO&77
	V1^100+V2
	*O
IFNDEF NOTIME <TEXT /  TIME />
		TEXT /CURTSK @  FCFREE @  ERRTSK @ AT /
		TEXT /  ERRLOG @  ERSTAT /
IFNZRO BGMAX <	TEXT /BJOB   @  SJOB   @  LJOB   / >
TEXT /FREE@@INTQ@@PRIQ@@CORQ/
TEXT /SYSQUEUE/
TEXT /COREMAP/
PZRT,	TEXT /PAGE ZERO REGISTERS,   FIELD /
TEXT /HRDLST /
IFNZRO BGMAX <
BGT,	TEXT /BG /
TEXT /      STAT MQ   SC   PC   LUID AC   INST SW/ > 
TEXT /TCBTAB    BLNK THRD S.A. BLK# STAT FLD  AC   PC    NAME/
TEXT /FREECORE DUMP@TOO MUCH TEXT/;-1;7700

PROGEND=.-1
$$$$