perm filename CDMP11.DEC[KL,SYS] blob sn#209163 filedate 1976-04-03 generic text, type C, neo UTF8
COMMENT āŠ—   VALID 00010 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	.SBTTL	PDP-11 CORE DUMP, 4-SEPT-75
C00003 00003		PNTCI
C00004 00004	$CDFID:	MOVB	(R2)+,R0
C00005 00005	$CORDMP:TTPINI			INITIALIZE POINTERS
C00007 00006	$CDDON:	PNTCI			FINISH LINE WITH CR
C00009 00007	$CDA11:	TST	R0		THIS WORD ALL ZEROS ?
C00011 00008	CORE DUMP TO DEVICE ROUTINES
C00013 00009	$CDDTA:	TST	FLOPPY
C00015 00010	$CDDTD:	CLR	DVBUF		CLEAR LINK, THIS BLOCK EOF
C00017 ENDMK
CāŠ—;
.SBTTL	PDP-11 CORE DUMP, 4-SEPT-75

;CORE IMAGE CONVERTED TO ".A11" FORMAT
;CONSOLE COMMAND: "CD FILE START,END"

$CD:	TTITRM
	NAMEXT			;SETUP FILE NAME.EXT
	TST	R0		;ANY EXT ?
	BNE	1$		;YES

	MOV	#"A1,EXTBF	;NO, USE ".A11"
	MOV	#"1 ,EXTBF+2

1$:	TTOCTE			;INPUT DUMP START ADDRESS
	MOV	R0,R5

	TTCOCT			;INPUT DUMP END ADDRESS
	INC	R0
	BIC	#1,R0
	SUB	R5,R0		;COMPUTE DUMP WORD COUNT
	BPL	99$
	JMP	$CDERR		;ADDRESSES BACKWARDS
99$:	SR	R0,1
	INC	R0
	MOV	R0,R4

	TTBTRM			;VERIFY LINE TERMINATOR

	PNTRST			;RESET OUTPUT POINTERS
	PNTCI
	';

	MOV	#6,R1
	MOV	#NAMBF,R2
	JSR	PC,$CDFID	;INSERT FILE NAME

	PNTCI
	'.

	MOV	#3,R1
	MOV	#EXTBF,R2
	JSR	PC,$CDFID	;INSERT FILE EXTENSION

	TTBACK
	TTICHR
	CMPB	#' ,R0
	BEQ	3$
	CMPB	#'	,R0
	BEQ	3$

2$:	TST	DEVTYP
	BMI	$CDACT		;ACT10
	BNE	$CDRP		;RP04
	JMP	$CDDTA		;DECTAPE

3$:	PNTCI
	"  

4$:	TTICHR
	BCS	$CDERR
	CMPB	#CR,R0
	BEQ	2$
	PNTCHR
	BR	4$
$CDFID:	MOVB	(R2)+,R0
	CMPB	#' ,R0
	BEQ	1$
	PNTCHR
	DEC	R1
	BNE	$CDFID
1$:	RTS	PC

$CDRP:	RPFILE			;FIND AND SETUP FILE
	BCC	1$
	JMP	$NONXF
1$:	MOV	#DVBUF,CDADR	;SETUP BUFFER STORE ADDRESS
	BR	$CDDON

$CDACT:	COMENQ
	MOV	#$INBUF,R0
	COMCMD			;TRANSMIT COMMAND TO ACT10

	CMPB	#'A,R0
	BNE	$CDERR		;ERROR
	BR	$CDDON
$CORDMP:TTPINI			;INITIALIZE POINTERS
	PNTCI			;LINE STARTS WITH "E" & "SPACE"
	"E 

	MOV	#16.,R3		;SETUP ASCIIZED WORD COUNT
	CMP	R3,R4		;THAT MANY WORDS LEFT IN DUMP ?
	BLOS	1$
	MOV	R4,R3		;NO, USE REMAINDER
1$:	MOV	R3,TEMP		;INIT CHECKSUM

	MOV	R3,R0		;OUTPUT WORD COUNT
	BIS	#100,R0		;WILL ALWAYS BE 1 THRU 16
	PNTCHR
	PCOMMA
	MOV	R5,R0		;OUTPUT BLOCK ADDRESS
	ADD	R5,TEMP		;CHECKSUM
	SUB	R3,R4		;DECREMENT DUMP WORD COUNT
	JSR	PC,$CDA11	;ASCIIZE
	PCOMMA

2$:	MOV	(R5)+,R0	;OUTPUT DATA WORD
	ADD	R0,TEMP		;CHECKSUM
	JSR	PC,$CDA11	;ASCIIZE
	PCOMMA

	DEC	R3		;DONE THIS BLOCKS DATA WORDS ?
	BNE	2$		;NOT YET

	MOV	TEMP,R0		;OUTPUT NEGATED CHECKSUM
	NEG	R0
	JSR	PC,$CDA11	;ASCIIZE
$CDDON:	PNTCI			;FINISH LINE WITH CR
	CR

	TST	DEVTYP
	BMI	$CDAC1		;ACT10
	JMP	$CDDEV		;DEVICE

$CDAC1:	MOV	#3,R1		;RETRY 3 TIMES
	INC	MSGNBR		;COUNT MESSAGE
$CDXFR:	MOV	#$OUTBF,R0
	MOV	R0,$OUTPT

	COMCMD			;TRANSMIT DATA BLOCK

	CMPB	#'A,R0		;ACKNOWLEDGED ?
	BNE	$CDTRY		;ERROR, RETRY

$CDCON:	TST	R4		;DUMP COUNT POSITIVE = WORDS LEFT
	BMI	1$		;DUMP COUNT NEGATIVE = ALL DONE
	BNE	$CORDMP		;DUMP COUNT ZERO = DO "EOF" BLOCK

	COM	R4		;TRANSMIT "END OF FILE" BLOCK
	PNTCI			;EOF BLOCK = "E ,,"
	"E 			;WORD COUNT = 0
	PNTCI			;START ADDRESS = 0
	",,			; "NON-STARTABLE" ON LOAD
	BR	$CDDON

1$:	TST	DEVTYP
	BMI	2$
	JMP	$CDDVD		;DEVICE

2$:	COMEOT			;ALL DONE, FINISH FILE WITH EOT
	JMP	$CONSL		;WHEW, BACK TO CONSOLE

$CDTRY:	DEC	R1		;RETRY ?
	BNE	$CDXFR		;YES, RESEND MESSAGE

$CDERR:	PMSG	<?CORDMP ERR>
	JMP	$CNTLC
$CDA11:	TST	R0		;THIS WORD ALL ZEROS ?
	BEQ	3$		;YES, DON'T OUTPUT
	CLR	R1
	MOV	R0,R2		;SETUP HI-ORDER OIT
	SWAB	R0
	BIC	#177400,R0
	SHIFTR
	4
	TST	R0		;OIT ZERO ?
	BEQ	1$		;YES, SUPPRESS

	JSR	PC,$CDP11	;ASCIIZE AND PUT IN BUFFER

	COM	R1
1$:	MOV	R2,R0		;SETUP MIDDLE OIT
	SHIFTR
	6
	BIC	#177700,R0
	TST	R1		;HI-ORDER OIT NON-ZERO ?
	BNE	11$		;YES
	TST	R0		;ZERO, MIDDLE OIT ZERO ALSO ?
	BEQ	2$		;YES, SUPPRESS

11$:	JSR	PC,$CDP11	;ASCIIZE AND PUT IN BUFFER

2$:	MOV	R2,R0		;SETUP LOW-ORDER OIT
	BIC	#177700,R0
	JSR	PC,$CDP11	;ASCIIZE AND PUT IN BUFFER

3$:	RTS	PC

$CDP11:	CMP	R0,#74		;LEAVE 75, 76, 77 ALONE
	BGT	1$
	BIS	#100,R0		;SET BIT 7 FOR ASCIIZE

1$:	PNTCHR			;PUT IN BUFFER
	RTS	PC
;CORE DUMP TO DEVICE ROUTINES

$CDDEV:
$CDRP1:	MOV	$OUTPT,R0
	MOVB	#LF,(R0)+	;FINISH LINE WITH LF
	CLRB	(R0)

	MOV	CDADR,R0	;SETUP BUFFER STORE ADDRESS
	MOV	#$OUTBF,R1	;SETUP PICKUP POINTER
	MOV	R1,$OUTPT

$CDDT2=.
1$:	CMP	#DVBUF+<256.*2>,R0
	BEQ	2$		;FILLED THIS DATA BLOCK

	MOVB	(R1)+,(R0)+	;PUT DATA IN DEVICE BUFFER
	BNE	1$		;NULL, END OF LINE

	MOV	R0,CDADR	;RESAVE BUFFER POINTER
	JMP	$CDCON		;CONTINUE CORE DUMP

2$:	PUSH	<R0,R1>
	TST	DEVTYP
	BEQ	$CDDT1		;DECTAPE
	MOV	#256.,BUFSIZ
	MOV	#FILDSB,R0
	RPWRFL			;WRITE FILE DATA BLOCK
	BCS	$CDDVR		;ERROR

	POP	<R1,R0>
	MOV	#DVBUF,R0
	MOV	R0,CDADR
	BR	1$
$CDDTA:	TST	FLOPPY
	BEQ	10$
	RXFILE			;FIND AND SETUP FLOPPY FILE
	BR	11$
10$:	DTAFILE			;FIND AND SETUP DECTAPE FILE
11$:	BCC	1$
	JMP	$NONXF

1$:	JSR	PC,$$CDTA	;SETUP FIRST BLOCK
	JMP	$CDDON

$$CDTA:	TST	FLOPPY
	BEQ	10$
	RXRDFL			;READ FLOPPY BLOCK
	BR	11$
10$:	DTRDFL			;READ DECTAPE BLOCK
11$:	 BCS	2$		;EOF

	MOV	#DVBUF+2,R0	;CLEAR DATA PART OF BUFFER
1$:	CLR	(R0)+
	CMP	#DVBUF+<256.*2>,R0
	BNE	1$

	MOV	#DVBUF+2,CDADR
	RTS	PC

2$:	PMSG	<?INSUFFICIENT ROOM>
	JMP	$CNTLC

$CDDT1:	TST	FLOPPY
	BEQ	10$
	RXWTFL			;WRITE DATA BLOCK BACK TO FLOPPY
	BR	11$
10$:	DTWTFL			;WRITE DATA BLOCK BACK TO DECTAPE
11$:	 BCS	$CDDTR		;ERROR

	JSR	PC,$$CDTA	;READ & SETUP NEXT

	POP	<R1,R0>
	MOV	CDADR,R0	;BUFFER ADDRESS TO R0
	BR	$CDDT2
$CDDTD:	CLR	DVBUF		;CLEAR LINK, THIS BLOCK EOF

	TST	FLOPPY
	BEQ	10$
	RXWTFL			;WRITE LAST FLOPPY BLOCK
	BR	11$
10$:	DTWTFL			;WRITE LAST DECTAPE BLOCK
11$:	 BCS	$CDDTR		;ERROR

	JMP	$CONSL		;ALL DONE

$CDDTR:	PMSG	<?WRITE ERROR>
	JMP	$CNTLC

;DEVICE FINISH CORE DUMP

$CDDVD:	BNE	$CDRP2
	BR	$CDDTD

$CDRP2:	MOV	CDADR,R0
1$:	CLRB	(R0)+
	CMP	#DVBUF+<256.*2>,R0
	BNE	1$

2$:	MOV	CDADR,R0	;COMPUTE WORD COUNT
	SUB	#DVBUF,R0
	INC	R0
	BIC	#1,R0
	SR	R0,1
	MOV	R0,BUFSIZ	;SET AS BUFFER SIZE
	COM	RPEOF		;WRITE END-OF-FILE

	MOV	#FILDSB,R0
	RPWRFL			;WRITE LAST FILE DATA BLOCK
	BCS	$CDDVR		;ERROR

	JMP	$CONSL		;WHEW !, ALL DONE

$CDDVR:	RPERROR