perm filename BPNT11.1[KL,SYS] blob sn#209149 filedate 1976-04-03 generic text, type C, neo UTF8
COMMENT āŠ—   VALID 00008 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	MODIFICATION HISTORY
C00003 00003
C00005 00004
C00007 00005
C00009 00006
C00011 00007
C00012 00008
C00013 ENDMK
CāŠ—;
;;;MODIFICATION HISTORY
;;;
;;; 15 NOV 75  OBTAINED FROM DEC (KLDCP REV 7)
;;; 15 NOV 75  CONVERTED TO PALX FORMAT
;;;

.SBTTL	BREAKPOINT FUNCTIONS, 1-JULY-75

;BP		;PRINTS ACTIVE BREAKPOINTS
;BP ADR		;INSERT BP

;BC		;BP CONTINUE
;BC COUNT	;BP CONTINUE FOR COUNT

;RB		;REMOVE CURRENT BP
;RB 0		;REMOVE ALL BP'S
;RB ADR		;REMOVE BP AT ADR

;BREAK POINT INSERTION

.BP:	TTISDL
	 BCC 4$			;NUMBER, INSERT BP

1$:	MOV #$BT+2,R1		;PRINT ACTIVE BP'S
2$:	MOV (R1),R0		;GET BP ADDRESS
	BEQ 3$			;EMPTY
	PNTOCT 			;PRINT BP ADDRESS
3$:	ADD #6,R1
	CMP R1,#$BT+<6*$NB>	;FINISHED ?
	BLT 2$			;NO
	BR $BPEX1

4$:	TTOCTE 			;INPUT EVEN ADDRESS
	MOV R0,R2
	JSR PC,$BTS		;SEARCH BP TABLE
	BCC $BPERR		;ALREADY THERE
	BEQ $BPERR		;TABLE FULL ALREADY

	MOV R2,(R1)		;PUT INST ADR IN BP TABLE
	MOV (R2),-(R1)		;PUT INST IN BP TABLE
	CLR 4(R1)		;CLEAR CONTINUE COUNT

	MOV #IOT,(R2)		;PUT BP IN PLACE OF INST
	BR $BPEXT

;BREAK POINT TRAP

$BRKPT:	CLR .HCFLG
	MOV R0,$R0SAV		;SAVE ALL REGS R0 - R5
	MOV #$R1SAV,R0
	MOV R1,(R0)+
	MOV R2,(R0)+
	MOV R3,(R0)+
	MOV R4,(R0)+
	MOV R5,(R0)+
	MOV SP,(R0)		;FOR REG PRINT ONLY, NOT RESTORED
	ADD #4,(R0)		;MAKE IT AS IT WAS BEFORE BP

	MOV (SP),R2		;GET AFTER TRAP PC
	TST -(R2)		;MAKE IT BEFORE TRAP PC
	JSR PC,$BTS		;FIND BP IN TABLE

1$:	MOV R2,(SP)		;PUT ADR ON STACK FOR "RTI" LATER
	MOV R2,$BCA		;SAVE BP CONTINUE ADDRESS
	PUSH -(R1)		;SAVE PROGRAM INST ON STACK
	DEC 4(R1)		;DECREMENT CONTINUE COUNT
	BGT .ABC		;COUNT GT 0, AUTO CONTINUE

2$:	CLR TENRUN
	PFORCE
	PMSG <\BP AT >
	MOV R2,R0
	PNTOCT
	PMSG <PS=>
	MOV 4(SP),R0
	PNTOCT
$BPEX1:	PCRLF
$BPEXT:	JMP $CONSL		;RETURN TO MONITOR

$BPERR:	PMSG <BP ERR>
	BR .BPERR

;BREAKPOINT CONTINUE

.BC:	TTISDL
	 BCC .BCCNT		;CONTINUE COUNT

.ABC:	CMP $BCA,2(SP)		;IS STACK OK, IF SO CONTINUE
	BEQ 1$			;OTHERWISE SP BAD OR NOT IN BP
.BCERR=.
	PMSG <CAN'T CONT>
.BPERR=.
	JMP $CNTLC

1$:	MOV @$BCA,$BTIS		;SAVE WHATS AT BP ADDRESS
	POP @$BCA		;RESTORE PROGRAM INST
	JSR PC,.BCHC2		;RESTORE REGISTERS
	BIS #TBIT,2(SP)		;SET FOR T-BIT TRAP
	RTT 			;RESTART FOR ONE INSTRUCTION

;T-BIT TRAP COMES TO HERE

.BCCT:	BIC #TBIT,2(SP)		;CLEAR T-BIT
	MOV $BTIS,@$BCA		;PUT BP/INST BACK IN PROGRAM
	RTI 			;RESUME

.BCCNT:	TTIDEC 			;INPUT	CONTINUE COUNT
	BCS $BPERR
	MOV R0,R5
	MOV $BCA,R2
	JSR PC,$BTS		;FIND ENTRY IN TABLE
	BCS .BCERR		;NOT THERE
1$:	MOV R5,2(R1)		;PUT COUNT IN TABLE
	BR .ABC

;REMOVE BREAKPOINTS

.RB:	TTISDL
	BCS 2$			;REMOVE CURRENT BP

	TTOCTE 			;INPUT BP ADDRESS
	TST R0
	BEQ 4$			;IF 0, REMOVE ALL BP'S

	MOV R0,R2
3$:	JSR PC,$BTS		;FIND ADDRESS IN TABLE
	BCC 1$
	PMSG <CAN'T FIND>
	BR .BPERR

1$:	JSR PC,$RB		;REMOVE BP
11$:	BR $BPEXT

2$:	MOV $BCA,R2		;REMOVE CURRENT BP
	BR 3$

4$:	JSR PC,.CB		;CLEAR ALL BP'S
	BR $BPEXT

;CLEAR ALL BREAKPOINTS

.CB:	MOV #$BT+2,R1
1$:	MOV (R1),R2		;GET TABLE ENTRY
	BEQ 2$			;EMPTY
	JSR PC,$RB		;REMOVE BP
2$:	ADD #6,R1
	CMP R1,#$BT+<6*$NB>
	BLT 1$
	RTS PC

$RB:	CLR (R1)		;CLEAR ADDRESS FIELD
	CMP (R2),#IOT		;BP IN MEMORY ?
	BNE 1$			;NO
	MOV -2(R1),(R2)		;YES, RESTORE INSTRUCTION
1$:	RTS PC

;REGISTER RESTORE

.BCHC:	TTITRM
.BCHC2:	MOV #$R0SAV,R5
	MOV (R5)+,R0
	MOV (R5)+,R1
	MOV (R5)+,R2
	MOV (R5)+,R3
	MOV (R5)+,R4
	MOV (R5),R5
	RTS PC

;BREAKPOINT REGISTER PRINTOUT

.RG:	PFORCE
	CLR R2			;REGISTER NUMBER
	MOV #$R0SAV,R1		;REG SAVE TABLE POINTER

1$:	PNTCI
	'R
	MOV R2,R0
	PNTNBR 			;PRINT REGISTER NUMBER
4$:	PSLASH

2$:	MOV (R1)+,R0
	PNTOCT 			;PRINT CONTENTS
	INC R2
	CMP R2,#6
	BLT 1$
	BGT 3$

	PNTCI
	"SP
	BR 4$

3$:	BR $BPEX1

;SEARCH BP TABLE FOR ADDRESS IN R2
;C-BIT SET SEARCH FAILURE
;C-BIT & Z-BIT SET SEARCH FAILURE & TABLE FULL
;	R1 = ADDRESS OF EMPTY SLOT IF TABLE NOT FULL
;C-BIT CLEAR, FOUND & R1 = ADDRESS OF ENTRY

$BTS:	MOV #$BT+2,R1		;INIT BP TABLE POINTER
	CLR R0
1$:	TST (R1)		;IS IT EMPTY ?
	BNE 2$			;NO
	MOV R1,R0		;YES, SAVE ADDRESS OF EMPTY SLOT
	BR 3$

2$:	CMP (R1),R2		;IS THIS THE ENTRY ?
	BNE 3$			;NO

	CCC 			;YES, INDICATE WITH C-BIT CLEAR
	RTS PC

3$:	ADD #6,R1		;STEP TO NEXT ENTRY
	CMP #$BT+<6*$NB>,R1
	BGT 1$
	MOV R0,R1		;COUNDN'T FIND, Z-BIT SET = FULL
	SEC 			;INDICATE WITH C-BIT SET
	RTS PC