	.TITLE	LDXDT
	.SBTTL	- Identification, declarations, and data

;************************************************************************
; LDXDT	- Load XDELTA and trigger breakpoint				*
;                                                                       *
;	Ken Johnson							*
;	January 1990							*
;      	Meridian Technology Corporation, St. Louis, MO                  *
;									*
; This program is provided AS IS, without any warranty of any kind.	*
; Meridian Technology Corporation assumes no liability for your use of	*
; or inability to use this program.  Likewise, the author assumes no 	*
; liability for your use of or inability to use this program.		*
;									*
; This program is intended for use only on VMS 5.2 and later.		*
;************************************************************************

;+
;	This program is based on information provided in a session by
;	Brian Catlin and James Gray at the 1989 Fall DECUS U.S. Symposium.
;	For further information on the technology used here, consult the
;	handout from that session.
;-

	.LIBRARY	/SYS$LIBRARY:LIB.MLB/

	.GLOBAL	LDR$LOAD_IMAGE		;Image loader
	.GLOBAL	INI$BRK			;Permanent breakpoint
	BPT_OPCODE	= 3		;BPT opcode

ARGS_NONE:
	.LONG	0			;No arguments
LOAD_ARGS:
	.LONG	3			;3 arguments
	.LONG	LOADER_NAME		;ASCID loader name
	.LONG	1			;Non-pageable
	.LONG	BASE_ADDR		;Returned base address
LOADER_NAME:
	.ASCID	/SYS$LOADABLE_IMAGES:SYSTEM_DEBUG.EXE/	;XDELTA image
BASE_ADDR:
	.LONG	0			;Empty data cell


	.SBTTL	LDXDT	- Main entry point

	.ENTRY	LDXDT,^M<>

	CMPB	#BPT_OPCODE,G^INI$BRK	;XDELTA loaded?
	BEQL	1000$			; If EQL - yes, request breakpoint

	$CMEXEC_S		-	;Load XDELTA with VMS loader
		ROUTIN = LDR$LOAD_IMAGE, -
		ARGLST = LOAD_ARGS
	BLBC	R0,2000$		; If LBC - failure, exit

	$CMKRNL_S		-	;Initialize permanent breakpoint
		ROUTIN = SETBPT	-
		ARGLST = 0
	BLBC	R0,2000$		; If LBC - failure, exit

1000$:	$CMKRNL_S		-	;Request breakpoint
		ROUTIN = BREAK,	-
		ARGLST = ARGS_NONE

2000$:	RET				;and exit


	.SBTTL	SETBPT	- Initialize permanent breakpoint

	.ENTRY	SETBPT,^M<>

	MOVB	#BPT_OPCODE,G^INI$BRK	;Set BPT opcode
	MOVZWL	#SS$_NORMAL,R0		;Success
	RET



	.SBTTL	BREAK	- Request XDELTA interrupt

	.ENTRY	BREAK,^M<>

	.SHOW	ME
	SOFTINT	#14			;Request XDELTA interupt
	.NOSHOW	ME
	MOVZWL	#SS$_NORMAL,R0		;Success
	RET

	.END	LDXDT
