Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-1


					PAGE	60,132 ;
					TITLE	DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS
				;======================= START OF SPECIFICATIONS =========================
				;
				; MODULE NAME: DEBEMS.SAL
				;
				; DESCRIPTIVE NAME: DEBUGGING TOOL
				;
				; FUNCTION: PROVIDES USERS WITH ACCESS TO RUDIMENTARY EMS FACILITIES.
				;
				; ENTRY POINT: ANY CALLED ROUTINE
				;
				; INPUT: NA
				;
				; EXIT NORMAL: NA
				;
				; EXIT ERROR: NA
				;
				; INTERNAL REFERENCES:
				;
				; EXTERNAL REFERENCES:
				;
				;	ROUTINE: DEBCOM2 - CONTAINS ROUTINES CALLED BY DEBUG
				;		 DEBCOM3 - CONTAINS ROUTINES CALLED BY DEBUG
				;		 DEBASM  - CONTAINS ROUTINES CALLED BY DEBUG
				;		 DEBUASM - CONTAINS ROUTINES CALLED BY DEBUG
				;		 DEBMES  - CONTAINS ROUTINES CALLED BY DEBUG
				;
				; NOTES: THIS MODULE IS TO BE PREPPED BY SALUT WITH THE "PR" OPTIONS.
				;	 LINK DEBUG+DEBCOM1+DEBCOM2+DEBCOM3+DEBASM+DEBUASM+DEBERR+
				;	      DEBCONST+DEBDATA+DEBMES
				;
				; REVISION HISTORY:
				;
				;	AN000	VERSION 4.00 - REVISIONS MADE RELATE TO THE FOLLOWING:
				;
				;				- IMPLEMENT EMS FUNCTIONS	DSM:6/24/87
				;
				; COPYRIGHT: "MS DOS DEBUG UTILITY"
				;	     "VERSION 4.00 (C) COPYRIGHT 1988 Microsoft"
				;	     "LICENSED MATERIAL - PROPERTY OF Microsoft  "
				;
				;======================= END OF SPECIFICATIONS ===========================
				
				INCLUDE DOSSYM.INC
			     C	;	SCCSID = @(#)dossym.asm 1.1 85/04/10
			     C	;	SCCSID = @(#)dossym.asm 1.1 85/04/10
			     C		PAGE 80,132
 = FFFF                      C	TRUE	    EQU 0FFFFh
 = 0000                      C	FALSE	    EQU 0
			     C	
 = FFFF                      C	Installed   = TRUE
			     C	
			     C	include dbcs.sw
 = 0000                      C	DBCS = FALSE
			     C	
			     C	include dosmac.INC
			     C	;	SCCSID = @(#)dosmac.asm	1.1 85/04/10
			     C	;	SCCSID = @(#)dosmac.asm	1.1 85/04/10
			     C	;
			     C	; Macro file for MSDOS.
			     C	;
			     C	
 = FFFF                      C	TRUE    EQU 0FFFFh
 = 0000                      C	FALSE   EQU 0
			     C	
			     C	SUBTTL BREAK a listing into pages and give new subtitles
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-2
BREAK a listing into pages and give new subtitles           

			     C	PAGE
			     C	BREAK   MACRO   subtitle
			     C		SUBTTL  subtitle
			     C		PAGE
			     C	ENDM
			     C	.xcref  break
			     C	
			     C	BREAK   <ASMVAR - handle assembly variables once and for all>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-3
ASMVAR - handle assembly variables once and for all         

			     C	
			     C	AsmVars Macro   varlist
			     C	IRP     var,<varlist>
			     C	AsmVar  var
			     C	ENDM
			     C	ENDM
			     C	
			     C	AsmVar  Macro   var
			     C	IFNDEF  var
			     C	var = FALSE
			     C	ENDIF
			     C	ENDM
			     C	
			     C	BREAK <I_NEED: declare a variable external, if necessary, and allocate a size>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-4
I_NEED: declare a variable external, if necessary, and alloc

			     C	
			     C	;
			     C	; declare a variable external and allocate a size
			     C	;
			     C	AsmVar  InstalledData
			     C	I_NEED  MACRO   sym,len
			     C	IF NOT InstalledData
			     C		DATA    SEGMENT WORD PUBLIC 'DATA'
			     C	    IFIDN   <len>,<WORD>
			     C		EXTRN   &sym:WORD
			     C	    ELSE
			     C		IFIDN   <len>,<DWORD>
			     C		EXTRN   &sym:DWORD
			     C		ELSE
			     C		EXTRN   &sym:BYTE
			     C		ENDIF
			     C	    ENDIF
			     C		DATA    ENDS
			     C	ENDIF
			     C	ENDM
			     C		.xcref I_need
			     C	
			     C	;
			     C	; call a procedure that may be external.  The call will be short.
			     C	;
			     C	invoke  MACRO   name
			     C	.xcref
			     C		IF2
			     C		    IFNDEF name
			     C		EXTRN   name:NEAR
			     C		    ENDIF
			     C		ENDIF
			     C	.cref
			     C		CALL    name
			     C	ENDM
			     C	.xcref  invoke
			     C	
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-5
I_NEED: declare a variable external, if necessary, and alloc

			     C	PAGE
			     C	;
			     C	; jump to a label that may be external.  The jump will be near.
			     C	;
			     C	transfer    MACRO   name
			     C	.xcref
			     C		IF2
			     C		    IFNDEF name
			     C		EXTRN   name:NEAR
			     C		    ENDIF
			     C		ENDIF
			     C	.cref
			     C		JUMP    name
			     C	ENDM
			     C	.xcref  transfer
			     C	
			     C	;
			     C	; get a short address in a word
			     C	;
			     C	short_addr  MACRO   name
			     C	    IFDIF   <name>,<?>
			     C	.xcref
			     C		IF2
			     C		    IFNDEF name
			     C		EXTRN   name:NEAR
			     C		    ENDIF
			     C		ENDIF
			     C	.cref
			     C		DW  OFFSET DOSGROUP:name
			     C	    ELSE
			     C		DW  ?
			     C	    ENDIF
			     C	ENDM
			     C	.xcref  short_addr
			     C	
			     C	;
			     C	; get a long address in a dword
			     C	;
			     C	long_addr   MACRO   name
			     C	.xcref
			     C		IF2
			     C		    IFNDEF name
			     C		EXTRN   name:NEAR
			     C		    ENDIF
			     C		ENDIF
			     C	.cref
			     C		DD  name
			     C	ENDM
			     C	.xcref  long_addr
			     C	
			     C	;
			     C	; declare a PROC near or far but PUBLIC nonetheless
			     C	;
			     C	.xcref ?frame
			     C	.xcref ?aframe
			     C	.xcref ?stackdepth
			     C	.xcref ?initstack
 = 0000                      C	?frame        =   0                     ; initial
 = 0000                      C	?aframe       =   0                     ; initial
 = 0000                      C	?stackdepth   =   0                     ; initial stack size
 = 0000                      C	?initstack    =   0                     ; initial stack size
			     C	
			     C	procedure   MACRO   name,distance
			     C		?frame =    0
			     C		?aframe =   2                   ;; remember the pushed BP
			     C		PUBLIC  name
			     C		IF1
			     C		%OUT name... pass 1
			     C		ENDIF
			     C		IF2
			     C		%OUT name... pass 2
			     C		ENDIF
			     C	name    PROC    distance
			     C		?initstack    = ?stackdepth     ;; beginning of procedure
			     C	ENDM
			     C	.xcref  procedure
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-6
I_NEED: declare a variable external, if necessary, and alloc

			     C	
			     C	;
			     C	; end a procedure and check that stack depth is preserved
			     C	;
			     C	EndProc MACRO   name, chk
			     C		IFDIF   <chk>,<NoCheck>       ;; check the stack size
			     C		IF2
			     C		IF ?initstack NE ?stackdepth    ;; is it different?
			     C		%OUT    ***** Possible stack size error in name *****
			     C		ENDIF
			     C		ENDIF
			     C		ENDIF
			     C	name    ENDP
			     C	ENDM
			     C	.xcref  endproc
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-7
I_NEED: declare a variable external, if necessary, and alloc

			     C	PAGE
			     C	;
			     C	; define a data item to be public and of an appropriate size/type
			     C	;
			     C	
			     C	I_AM    MACRO   name,size,init
			     C	;; declare the object public
			     C		PUBLIC  name
			     C	;; declare the type of the object
			     C	    IFIDN <size>,<WORD>
			     C	name    LABEL WORD
			     C		I_AM_SIZE   =   1
			     C		I_AM_LEN    =   2
			     C	    ELSE
			     C		IFIDN <size>,<DWORD>
			     C	name    LABEL DWORD
			     C		I_AM_SIZE   =   2
			     C		I_AM_LEN    =   2
			     C		ELSE
			     C		    IFIDN <size>,<BYTE>
			     C	name    LABEL BYTE
			     C		I_AM_SIZE   =   1
			     C		I_AM_LEN    =   1
			     C		    ELSE
			     C	name    LABEL BYTE
			     C		I_AM_SIZE   =   size
			     C		I_AM_LEN    =   1
			     C		    ENDIF
			     C		ENDIF
			     C	    ENDIF
			     C	;; if no initialize then allocate blank storage
			     C	    IFB <init>
			     C		DB  I_AM_SIZE*I_AM_LEN DUP (?)
			     C	    ELSE
			     C	IF NOT InstalledData
			     C		IRP itm,<init>
			     C		    IF I_AM_LEN EQ 1
			     C			DB  itm
			     C		    ELSE
			     C			DW  itm
			     C		    ENDIF
			     C		    I_AM_SIZE = I_AM_SIZE - 1
			     C		ENDM
			     C		IF I_AM_SIZE NE 0
			     C		    %out    ***** initialization of name not complete *****
			     C		ENDIF
			     C	ELSE
			     C		DB  I_AM_SIZE*I_AM_LEN DUP (?)
			     C	ENDIF
			     C	    ENDIF
			     C	ENDM
			     C	.xcref  I_AM
			     C	.xcref  I_AM_SIZE
			     C	.xcref  I_AM_LEN
 = 0000                      C	I_AM_SIZE   = 0
 = 0000                      C	I_AM_LEN    = 0
			     C	
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-8
I_NEED: declare a variable external, if necessary, and alloc

			     C	PAGE
			     C	
			     C	;
			     C	; define an entry in a procedure
			     C	;
			     C	entry macro name
			     C		PUBLIC  name
			     C	name:
			     C	endm
			     C	.xcref  entry
			     C	
			     C	BREAK <ERROR - store an error code then jump to a label>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-9
ERROR - store an error code then jump to a label            

			     C	
			     C	error macro code
			     C	.xcref
			     C		MOV AL,code
			     C		transfer    SYS_RET_ERR
			     C	.cref
			     C	ENDM
			     C	.xcref  error
			     C	
			     C	BREAK <JUMP - real jump that links up shortwise>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-10
JUMP - real jump that links up shortwise                    

			     C	;
			     C	; given a label <lbl> either 2 byte jump to another label <lbl>_J
			     C	; if it is near enough or 3 byte jump to <lbl>
			     C	;
			     C	
			     C	jump    macro lbl
			     C	    local a
			     C	.xcref
			     C	
			     C	    ifndef lbl&_J                       ;; is this the first invocation
			     C	a:      JMP lbl
			     C	    ELSE
			     C		IF (lbl&_J GE $) OR ($-lbl&_J GT 126)
			     C	a:      JMP lbl                         ;; is the jump too far away?
			     C		ELSE
			     C	a:      JMP lbl&_J                      ;; do the short one...
			     C		ENDIF
			     C	    ENDIF
			     C	    lbl&_j = a
			     C	.cref
			     C	endm
			     C	.xcref  jump
			     C	
			     C	BREAK <RETURN - return from a function>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-11
RETURN - return from a function                             

			     C	
			     C	return  macro x
			     C	    local a
			     C	.xcref
			     C	a:
			     C		RET
			     C	ret_l = a
			     C	.cref
			     C	endm
			     C	.xcref  return
			     C	
			     C	BREAK <CONDRET - conditional return>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-12
CONDRET - conditional return                                

			     C	
			     C	condret macro   cc,ncc
			     C	    local   a
			     C	.xcref
			     C	.xcref a
			     C	.cref
			     C	    ifdef   ret_l                       ;; if ret_l is defined
			     C		if (($ - ret_l) le 126) and ($ gt ret_l)
			     C						;;     if ret_l is near enough then
			     C		    a:  j&cc    ret_l           ;;         a: j<CC> to ret_l
			     C		    ret_&cc = a                 ;;         define ret_<CC> to be a:
			     C		    exitm
			     C		endif
			     C	    endif
			     C	    ifdef   ret_&cc                     ;; if ret_<CC> defined
			     C		if (($ - ret_&cc) le 126) and ($ gt ret_&cc)
			     C						;;     if ret_<CC> is near enough
			     C		    a:  j&cc    ret_&cc         ;;         a: j<CC> to ret_<CC>
			     C		    ret_&cc = a                 ;;         define ret_<CC> to be a:
			     C		    exitm
			     C		endif
			     C	    endif
			     C	    j&ncc   a                           ;; j<NCC> a:
			     C	    return                              ;; return
			     C	    a:                                  ;; a:
			     C	    ret_&cc = ret_l                     ;; define ret_<CC> to be ret_l
			     C	endm
			     C	.xcref  condret
			     C	
			     C	BREAK <RETZ - return if zero, links up shortwise if necessary>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-13
RETZ - return if zero, links up shortwise if necessary      

			     C	
			     C	retz    macro
			     C	    condret z,nz
			     C	endm
			     C	.xcref  retz
			     C	
			     C	BREAK <RETNZ - return if not zero, links up shortwise if necessary>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-14
RETNZ - return if not zero, links up shortwise if necessary 

			     C	
			     C	retnz   macro
			     C	    condret nz,z
			     C	endm
			     C	.xcref  retnz
			     C	
			     C	BREAK <RETC - return if carry set, links up shortwise if necessary>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-15
RETC - return if carry set, links up shortwise if necessary 

			     C	
			     C	retc    macro
			     C	    condret c,nc
			     C	endm
			     C	.xcref  retc
			     C	
			     C	BREAK <RETNC - return if not carry, links up shortwise if necessary>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-16
RETNC - return if not carry, links up shortwise if necessary

			     C	
			     C	retnc   macro
			     C	    condret nc,c
			     C	endm
			     C	.xcref  retnc
			     C	
			     C	BREAK <CONTEXT - set the DOS context to a particular register>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-17
CONTEXT - set the DOS context to a particular register      

			     C	
			     C	context macro   r
			     C		PUSH    SS
			     C		POP     r
			     C		ASSUME  r:DOSGROUP
			     C	endm
			     C	.xcref  context
			     C	
			     C	BREAK <SaveReg - save a set of registers>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-18
SaveReg - save a set of registers                           

			     C	
			     C	SaveReg MACRO   reglist                 ;; push those registers
			     C	IRP reg,<reglist>
			     C		?stackdepth = ?stackdepth + 1
			     C		PUSH    reg
			     C	ENDM
			     C	ENDM
			     C	.xcref  SaveReg
			     C	
			     C	BREAK <RestoreReg - unsave some registers>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-19
RestoreReg - unsave some registers                          

			     C	
			     C	RestoreReg  MACRO   reglist             ;; pop those registers
			     C	IRP reg,<reglist>
			     C		?stackdepth = ?stackdepth - 1
			     C		POP     reg
			     C	ENDM
			     C	ENDM
			     C	.xcref  RestoreReg
			     C	
			     C	BREAK <Critical section macros>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-20
Critical section macros                                     

			     C	
			     C	EnterCrit MACRO section
			     C		Invoke  E&section
			     C	ENDM
			     C	
			     C	LeaveCrit MACRO section
			     C		Invoke  L&section
			     C	ENDM
			     C	
			     C	Break   <message - display a message>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-21
message - display a message                                 

			     C	
			     C	AsmVars <ShareF,Cargs,Redirector>
			     C	
			     C	else
			     C	fmt macro
			     C	endm
			     C	endif
			     C	
			     C	Break   <DOSAssume - validate assumes>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-22
DOSAssume - validate assumes                                

			     C	
			     C	AsmVar  Debug,$temp
			     C	
			     C	ELSE
			     C	DOSAssume   Macro   reg,reglist,message
			     C	IRP r,<reglist>
			     C	    ASSUME  r:DOSGroup
			     C	ENDM
			     C	ENDM
			     C	ENDIF
			     C	
			     C	BREAK   <ASSERT - make assertions about registers>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-23
ASSERT - make assertions about registers                    

			     C	
			     C	ELSE
			     C	Assert  Macro
			     C	ENDM
			     C	ENDIF
			     C	
			     C	Break   <CallInstall - hook to installable pieces>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-24
CallInstall - hook to installable pieces                    

			     C	
			     C	CallInstall MACRO   name,mpx,fn,save,restore
			     C	IF Installed
			     C	    IFNB    <save>
			     C		SaveReg <save>
			     C	    ENDIF
			     C		MOV     AX,(mpx SHL 8) + fn
			     C		INT     2Fh
			     C	    IFNB    <restore>
			     C		RestoreReg  <restore>
			     C	    ENDIF
			     C	ELSE
			     C		Invoke  name
			     C	ENDIF
			     C	ENDM
			     C	
			     C	Break   <Stack frame manipulators>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-25
Stack frame manipulators                                    

			     C	
			     C	localvar    macro   name,length
			     C	local   a
			     C		ifidn   <length>,<BYTE>
			     C		    ?frame =  ?frame + 1
			     C		    a = ?frame
			     C		    name EQU  BYTE PTR [BP-a]
			     C		else
			     C		    ifidn   <length>,<WORD>
			     C			?frame =  ?frame + 2
			     C			a = ?frame
			     C			name EQU  WORD PTR [BP-a]
			     C		    else
			     C			ifidn   <length>,<DWORD>
			     C			    ?frame =  ?frame + 4
			     C			    a = ?frame
			     C			    name EQU  DWORD PTR [BP-a]
			     C			    name&l EQU  WORD PTR [BP-a]
			     C			    name&h EQU  WORD PTR [BP-a+2]
			     C			else
			     C			    ?frame =  ?frame + length
			     C			    a = ?frame
			     C			    name EQU  BYTE PTR [BP-a]
			     C			endif
			     C		    endif
			     C		endif
			     C	endm
			     C	
			     C	enter   macro
			     C		push    bp
			     C		mov     bp,sp
			     C		sub     sp,?frame
			     C	endm
			     C	
			     C	leave   macro
			     C		mov     sp,bp
			     C		pop     bp
			     C	endm
			     C	
			     C	Argvar  macro   name,length
			     C	local   a
			     C		ifidn   <length>,<BYTE>
			     C		    a = ?aframe
			     C		    ?aframe =  ?aframe + 1
			     C		    name EQU  BYTE PTR [BP+a]
			     C		else
			     C		    ifidn   <length>,<WORD>
			     C			a = ?aframe
			     C			?aframe =  ?aframe + 2
			     C			name EQU  WORD PTR [BP+a]
			     C		    else
			     C			ifidn   <length>,<DWORD>
			     C			    a = ?aframe
			     C			    ?aframe =  ?aframe + 4
			     C			    name EQU  DWORD PTR [BP+a]
			     C			    name&l EQU  WORD PTR [BP+a]
			     C			    name&h EQU  WORD PTR [BP+a+2]
			     C			else
			     C			    a = ?aframe
			     C			    ?aframe =  ?aframe + length
			     C			    name EQU  BYTE PTR [BP+a]
			     C			endif
			     C		    endif
			     C		endif
			     C	endm
			     C	
			     C	BREAK   <errnz - generate compilation errors>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-26
errnz - generate compilation errors                         

			     C	
			     C	errnz   macro   x
			     C	if x NE 0
			     C	    %out ***** FATAL error: x <> 0
			     C	foobar
			     C	endif
			     C	endm
			     C	
			     C	include VERSIONA.INC
			     C	
 = 0004                      C	major_version	    equ     4	    ;Major DOS version
 = 0000                      C	minor_version	    equ     00	    ;Minor DOS Version
			     C	
 = 0004                      C	expected_version    equ     (MINOR_VERSION SHL 8)+MAJOR_VERSION
			     C	
 = 0005                      C	alt_major_version    equ     5	    ;Major DOS version
 = 001A                      C	alt_minor_version    equ     26	    ;Minor DOS Version
			     C	
 = 1A05                      C	alt_expected_version    equ     (alt_minor_version SHL 8) + alt_major_version
			     C	
			     C	
			     C	       ;******************************
			     C	       ;Each assembler program should:
			     C	       ;  mov ah,030h			;DOS Get Version function
			     C	       ;  int 021h			;Version ret. in AX,minor version first
			     C	       ;  cmp ax,expected_version	;ALL utilities should check for an
			     C	       ;  jne error_handler		; EXACT version match.
			     C	       ;******************************
			     C	
			     C	
			     C	IF2
			     C	    %OUT    DOSSYM in Pass 2
			     C	ENDIF
			     C	
			     C	BREAK <Control character definitions>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-27
Control character definitions                               

			     C	
 = 007F                      C	c_DEL	    EQU     7Fh 		;    ASCII rubout or delete previous char
 = 0008                      C	c_BS	    EQU     08h 		; ^H ASCII backspace
 = 000D                      C	c_CR	    EQU     0Dh 		; ^M ASCII carriage return
 = 000A                      C	c_LF	    EQU     0Ah 		; ^J ASCII linefeed
 = 0017                      C	c_ETB	    EQU     17h 		; ^W ASCII end of transmission
 = 0015                      C	c_NAK	    EQU     15h 		; ^U ASCII negative acknowledge
 = 0003                      C	c_ETX	    EQU     03h 		; ^C ASCII end of text
 = 0009                      C	c_HT	    EQU     09h 		; ^I ASCII tab
			     C	
			     C	BREAK <Read This and Weep>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-28
Read This and Weep                                          

			     C	
			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
			     C	;									   ;
			     C	;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
			     C	;									   ;
			     C	; Certain structures, constants and system  calls  below  are  private	to ;
			     C	; the DOS  and	are  extremely	version-dependent.  They may change at any ;
			     C	; time at  the	implementors'  whim.   As  a  result,  they  must  not  be ;
			     C	; documented to  the  general  public.	 If  an  extreme case arises, they ;
			     C	; must be documented with this warning. 				   ;
			     C	;									   ;
			     C	; Those structures and constants that are subject to  the  above  will	be ;
			     C	; marked and bracketed with the flag:					   ;
			     C	;									   ;
			     C	;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
			     C	;									   ;
			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
			     C	
			     C	include bpb.INC
			     C		%OUT BPB.INC...
			     C	;	SCCSID = @(#)BPB.ASM	1.1 85/04/29
			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
			     C	;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
			     C	;									   ;
			     C	
			     C	; BIOS PARAMETER BLOCK DEFINITION
			     C	; THIS STRUCTURE IS USED TO BUILD A FULL DPB
			     C	
			     C	BPBLOCK STRUC
 0000  0000                  C	BPSECSZ DW	?			; SIZE IN BYTES OF PHYSICAL SECTOR
 0002  00                    C	BPCLUS	DB	?			; SECTORS/ALLOC UNIT
 0003  0000                  C	BPRES	DW	?			; NUMBER OF RESERVED SECTORS
 0005  00                    C	BPFTCNT DB	?			; NUMBER OF FATS
 0006  0000                  C	BPDRCNT DW	?			; NUMBER OF DIRECTORY ENTRIES
 0008  0000                  C	BPSCCNT DW	?			; TOTAL NUMBER OF SECTORS
 000A  00                    C	BPMEDIA DB	?			; MEDIA DESCRIPTOR BYTE
 000B  0000                  C	BPFTSEC DW	?			; NUMBER OF SECTORS TAKEN UP BY ONE FAT
 000D                        C	BPBLOCK ENDS
			     C	
			     C	A_BPB			STRUC
 0000  0000                  C	BPB_BYTESPERSECTOR	DW	?
 0002  00                    C	BPB_SECTORSPERCLUSTER	DB	?
 0003  0000                  C	BPB_RESERVEDSECTORS	DW	?
 0005  00                    C	BPB_NUMBEROFFATS	DB	?
 0006  0000                  C	BPB_ROOTENTRIES 	DW	?
 0008  0000                  C	BPB_TOTALSECTORS	DW	?
 000A  00                    C	BPB_MEDIADESCRIPTOR	DB	?
 000B  0000                  C	BPB_SECTORSPERFAT	DW	?
 000D  0000                  C	BPB_SECTORSPERTRACK	DW	?
 000F  0000                  C	BPB_HEADS		DW	?
 0011  0000                  C	BPB_HIDDENSECTORS	DW	?
 0013  0000                  C				DW	?
 0015  0000                  C	BPB_BIGTOTALSECTORS	DW	?
 0017  0000                  C				DW	?
 0019  0006[                 C				DB	6 DUP(?)
	   ??                C	
			 ]   C	
			     C	
 001F                        C	A_BPB			ENDS
			     C	;									   ;
			     C	;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
			     C	
			     C	
			     C	include buffer.INC
			     C	;	SCCSID = @(#)buffer.asm 1.1 85/04/09
			     C	BREAK <Disk I/O Buffer Header>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-29
Disk I/O Buffer Header                                      

			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
			     C	;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
			     C	;									   ;
			     C	
			     C	; Field definition for I/O buffer information
			     C	
			     C	BUFFINFO	STRUC
 0000  0000                  C	buf_next	DW	?		; Pointer to next buffer in list
 0002  0000                  C	buf_prev	DW	?		; Pointer to prev buffer in list
 0004  00                    C	buf_ID		DB	?		; Drive of buffer (bit 7 = 0)
			     C						; SFT table index (bit 7 = 1)
			     C						; = FFH if buffer free
 0005  00                    C	buf_flags	DB	?		; Bit 7 = 1 if Remote file buffer
			     C						;	= 0 if Local device buffer
			     C						; Bit 6 = 1 if buffer dirty
			     C						; Bit 5 = Reserved
			     C						; Bit 4 = Search bit (bit 7 = 1)
			     C						; Bit 3 = 1 if buffer is DATA
			     C						; Bit 2 = 1 if buffer is DIR
			     C						; Bit 1 = 1 if buffer is FAT
			     C						; Bit 0 = Reserved
 0006  00000000              C	buf_sector	DD	?		; Sector number of buffer (bit 7 = 0)
			     C	; The next two items are often refed as a word (bit 7 = 0)
 000A  00                    C	buf_wrtcnt	DB	?		; For FAT sectors, # times sector written out
 000B  0000                  C	buf_wrtcntinc	DW	?		; "   "     "   , # sectors between each write
 000D  00000000              C	buf_DPB 	DD	?		; Pointer to drive parameters
 0011  0000                  C	buf_fill	DW	?		; How full buffer is (bit 7 = 1)
 0013  00                    C	buf_reserved	DB	?		; make DWORD boundary for 386
 0014                        C	BUFFINFO	ENDS
			     C	
 = 0006                      C	buf_offset	EQU	DWORD PTR buf_sector
			     C						;For bit 7 = 1, this is the byte
			     C						;offset of the start of the buffer in
			     C						;the file pointed to by buf_ID.  Thus
			     C						;the buffer starts at location
			     C						;buf_offset in the file and contains
			     C						;buf_fill bytes.
			     C	
 = 0014                      C	BUFINSIZ	EQU	SIZE BUFFINFO
			     C						; Size of structure in bytes
			     C	
 = 00FF                      C	buf_Free	EQU	0FFh		; buf_id of free buffer
			     C	
			     C	;Flag byte masks
 = 0080                      C	buf_isnet	EQU	10000000B
 = 0040                      C	buf_dirty	EQU	01000000B
			     C	;***
 = 0020                      C	buf_visit	EQU	00100000B
			     C	;***
 = 0010                      C	buf_snbuf	EQU	00010000B
			     C	
 = 0008                      C	buf_isDATA	EQU	00001000B
 = 0004                      C	buf_isDIR	EQU	00000100B
 = 0002                      C	buf_isFAT	EQU	00000010B
 = 00F1                      C	buf_type_0	EQU	11110001B	; AND sets type to "none"
			     C	
 =                           C	buf_NetID	EQU	BUFINSIZ
			     C	
			     C	;
			     C	; Buffer Hash Entry Structure
			     C	
			     C	BUFFER_HASH_ENTRY	STRUC		; DOS 4.00
 0000  FFFF                  C	EMS_PAGE_NUM	DW	-1		; logical page number for EMS handle
 0002  00000000              C	BUFFER_BUCKET	DD	 ?		; pointer to buffers
 0006  00                    C	DIRTY_COUNT	DB	 0		; number of dirty buffers
 0007  00                    C	BUFFER_RESERVED DB	 0		; reserved
 0008                        C	BUFFER_HASH_ENTRY	ENDS
			     C	
 = 000F                      C	MaxBuffinBucket EQU	15		; Max number of buffers per bucket
 = 0002                      C	MaxBucketinPage EQU	 2		; Max number of buckets per 16kb page
			     C	
			     C	
			     C	;									   ;
			     C	;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
			     C	
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-30
Disk I/O Buffer Header                                      

			     C	BREAK <User stack inside of system call and SysVars>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-31
User stack inside of system call and SysVars                

			     C	; Location of user registers relative user stack pointer
			     C	
			     C	user_environ	STRUC
 0000  0000                  C	user_AX     DW	    ?
 0002  0000                  C	user_BX     DW	    ?
 0004  0000                  C	user_CX     DW	    ?
 0006  0000                  C	user_DX     DW	    ?
 0008  0000                  C	user_SI     DW	    ?
 000A  0000                  C	user_DI     DW	    ?
 000C  0000                  C	user_BP     DW	    ?
 000E  0000                  C	user_DS     DW	    ?
 0010  0000                  C	user_ES     DW	    ?
 0012  0000                  C	user_IP     DW	    ?
 0014  0000                  C	user_CS     DW	    ?
 0016  0000                  C	user_F	    DW	    ?
 0018                        C	user_environ	ENDS
			     C	
			     C	include sysvar.INC
			     C	;	SCCSID = @(#)sysvar.asm 1.1 85/04/10
			     C	include		version.inc
			     C	; Some modules really want TRUE to be 0FFH.  Best to let them have their way.
			     C	
			     C	;
			     C	; Use the following switches to control cmacros.inc
			     C	;
 = 0000                      C	?PLM       =       0
 = 0000                      C	?WIN       =       0
			     C	
 = 0001                      C	memS       EQU     1			; Small model
			     C	;
			     C	; Use the switches below to produce the standard Microsoft version or the IBM
			     C	; version of the operating system
			     C	;
			     C	; The below chart will indicate how to set the switches to build the various
			     C	; versions
			     C	;
			     C	;                     IBMVER          IBMCOPYRIGHT
			     C	; --------------------------------------------------------
			     C	;  IBM Version   |     TRUE              TRUE
			     C	; --------------------------------------------------------
			     C	;  MS Version    |     FALSE             FALSE
			     C	; --------------------------------------------------------
			     C	;  Clone Version |     TRUE              FALSE
			     C	;
 =                           C	IBMVER     EQU     TRUE
 =                           C	IBMCOPYRIGHT EQU   FALSE
			     C	
 = FFFF                      C	BUFFERFLAG	EQU	NOT IBMCOPYRIGHT
			     C	
 =                           C	IBM	   EQU	   IBMVER
			     C	;
			     C	;
			     C	;
			     C	;
			     C	;***************************************************************************
			     C	;*          The following switches are for DBCS or SBCS support            *
			     C	;*                                                                         *
			     C	;*                     Set INTERNAT EQU TRUE FOR DBCS                      *
			     C	;*                     Set INTERNAT EQU FALSE FOR SBCS                     *
			     C	;*                                                                         *
			     C	;***************************************************************************
			     C	;
 =                           C	IBMJAPVER  EQU	   FALSE		;If TRUE set KANJI true also
			     C	
			     C	;
			     C	; Switch INTERNAT for DBCS support
			     C	;
 =                           C	INTERNAT   EQU	   FALSE
			     C	;
			     C		ELSE
 =                           C	KANJI	   EQU	   FALSE
 =                           C	IBMJAPAN   EQU	   FALSE
			     C		ENDIF
			     C	
			     C	
			     C	;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-32
User stack inside of system call and SysVars                

			     C	; Country code switches
			     C	; The default contry code is assumed as USA.
			     C	;
			     C		ELSE
 =                           C	 KOREA	   EQU	   FALSE
 =                           C	 JAPAN	   EQU	   FALSE
			     C		ENDIF
			     C	;
			     C	
			     C	SysInitVars STRUC
 0000  00000000              C	SYSI_DPB	    DD	    ?		; DPB chain
 0004  00000000              C	SYSI_SFT	    DD	    ?		; SFT chain
 0008  00000000              C	SYSI_CLOCK	    DD	    ?		; CLOCK device
 000C  00000000              C	SYSI_CON	    DD	    ?		; CON device
 0010  0000                  C	SYSI_MAXSEC	    DW	    ?		; maximum sector size
 0012  00000000              C	SYSI_BUF	    DD	    ?		; points to Hashinitvar
 0016  00000000              C	SYSI_CDS	    DD	    ?		; CDS list
 001A  00000000              C	SYSI_FCB	    DD	    ?		; FCB chain
 001E  0000                  C	SYSI_Keep	    DW	    ?		; keep count
 0020  00                    C	SYSI_NUMIO	    DB	    ?		; Number of block devices
 0021  00                    C	SYSI_NCDS	    DB	    ?		; number of CDS's
 0022  00000000              C	SYSI_DEV	    DD	    ?		; device list
 0026  0000                  C	SYSI_ATTR	    DW	    ?		; null device attribute word
 0028  0000                  C	SYSI_STRAT	    DW	    ?		; null device strategy entry point
 002A  0000                  C	SYSI_INTER	    DW	    ?		; null device interrupt entry point
 002C  0008[                 C	SYSI_NAME	    DB	 8 DUP(?)	; null device name
	   ??                C	
			 ]   C	
			     C	
 0034  00                    C	SYSI_SPLICE	    DB	    0		; TRUE -> splicees being done
 0035  0000                  C	SYSI_IBMDOS_SIZE    DW	    ?		; DOS size in paragraphs
 0037  00000000              C	SYSI_IFS_DOSCALL@   DD	    ?		; IFS DOS service rountine entry
 003B  00000000              C	SYSI_IFS	    DD	    ?		; IFS header chain
 003F  0000 0000             C	SYSI_BUFFERS	    DW	    ?,0 	; BUFFERS= values (m,n)
 0043  00                    C	SYSI_BOOT_DRIVE     DB	    ?		; boot drive A=1 B=2,..
 0044  00                    C	SYSI_DWMOVE	    DB	    0		; 1 if 386 machine
 0045  0000                  C	SYSI_EXT_MEM	    DW	    0		; Extended memory size in KB.
 0047                        C	SysInitVars ENDS
			     C	
			     C	;This is added for more information exchage between DOS, BIOS.
			     C	;DOS will give the pointer to SysInitTable in ES:DI. - J.K. 5/29/86
			     C	SysInitVars_Ext struc
 0000  00000000              C	SYSI_InitVars		DD	0	; Points to the above structure.
 0004  00000000              C	SYSI_Country_Tab	DD	0	; DOS_Country_cdpg_info
 0008                        C	SysInitVars_Ext ends
			     C	
			     C	;The SYSI_BUF of SysInitVars points to the follwong structure
 = 000C                      C	EMS_MAP_BUFF_SIZE      EQU	12	; EMS map buffer size
			     C	
			     C	Buffinfo    STRUC
 0000  00000000              C	Hash_ptr	 DD	 ?		     ; pointer to Hash table
 0004  0000                  C	Hash_count	 DW	 ?		     ; number of Hash entries
 0006  00000000              C	Cache_ptr	 DD	 ?		     ; pointer to secondary cache
 000A  0000                  C	Cache_count	 DW	 0		     ; number of secondary cache entries
			     C	
			     C	IF	BUFFERFLAG
			     C	
 000C  01                    C	EMS_SAFE_FLAG	DB	1
 000D  0000 0000             C	EMS_LAST_PAGE	DW	0, 0
 0011  0000 0000             C	EMS_FIRST_PAGE	DW	0, 0
 0015  0000                  C	EMS_NPA640	DW	0
			     C	
			     C	ENDIF
			     C	
 0017  FF                    C	EMS_mode	 DB	 -1		     ; no EMS = -1
 0018  0000                  C	EMS_handle	 DW	 ?		     ; EMS handle for buffers
 001A  FFFF                  C	EMS_PageFrame_Number	DW   -1 	     ; EMS page frame number
 001C  0001                  C	EMS_Seg_Cnt	 DW	 1		     ; EMS segment count
 001E  FFFF                  C	EMS_Page_Frame	 DW	 -1		     ; EMS page frame segment address
 0020  0000                  C	EMS_reserved	 DW	 0		     ; EMS segment count
			     C	
			     C	IF	BUFFERFLAG
 0022  00                    C	EMS_Map_Buff	 DB	 0  ; map buffer
			     C	ENDIF
			     C	
 0023                        C	Buffinfo    ENDS
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-33
User stack inside of system call and SysVars                

			     C	
			     C	
			     C	
			     C	
			     C	
			     C	
			     C	
			     C	
			     C	
			     C	include vector.INC
			     C	;	SCCSID = @(#)vector.asm	1.1 85/04/10
			     C	BREAK <interrupt definitions>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-34
interrupt definitions                                       

			     C	
			     C	Asmvar	AltVect
			     C	
 = 0020                      C	INTTAB		EQU	20H
 = 0080                      C	INTBASE 	EQU	4 * inttab
 = 00C0                      C	ENTRYPOINT	EQU	INTBASE+40H
			     C	
			     C	
			     C	;
			     C	; interrupt assignments
			     C	;
			     C		IF	NOT ALTVECT
 =                           C	int_abort	    EQU     INTTAB	; abort process
 = 0021                      C	int_command	    EQU     int_abort+1 ; call MSDOS
 = 0022                      C	int_terminate	    EQU     int_abort+2 ; int to terminate address
 = 0023                      C	int_ctrl_c	    EQU     int_abort+3 ; ^c trapper
 = 0024                      C	int_fatal_abort     EQU     int_abort+4 ; hard disk error
 = 0025                      C	int_disk_read	    EQU     int_abort+5 ; logical sector disk read
 = 0026                      C	int_disk_write	    EQU     int_abort+6 ; logical sector disk write
 = 0027                      C	int_keep_process    EQU     int_abort+7 ; terminate program and stay
			     C						; resident
			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
			     C	;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
			     C	;									   ;
 = 0028                      C	int_spooler	    EQU     int_abort+8 ; spooler call
 = 0029                      C	int_fastcon	    EQU     int_abort+9 ; fast CON interrupt
 = 002A                      C	int_IBM 	    EQU     int_abort+10; critical section maintenance
			     C	;									   ;
			     C	;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
			     C		ENDIF
			     C	
 = 0080                      C	addr_int_abort		EQU    4 * int_abort
 = 0084                      C	addr_int_command	EQU    4 * int_command
 = 0088                      C	addr_int_terminate	EQU    4 * int_terminate
 = 008C                      C	addr_int_ctrl_c 	EQU    4 * int_ctrl_c
 = 0090                      C	addr_int_fatal_abort	EQU    4 * int_fatal_abort
 = 0094                      C	addr_int_disk_read	EQU    4 * int_disk_read
 = 0098                      C	addr_int_disk_write	EQU    4 * int_disk_write
 = 009C                      C	addr_int_keep_process	EQU    4 * int_keep_process
			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
			     C	;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
			     C	;									   ;
 = 00A0                      C	addr_int_spooler	EQU    4 * int_spooler
 = 00A4                      C	addr_int_fastcon	EQU    4 * int_fastcon
 = 00A8                      C	addr_int_IBM		EQU    4 * int_IBM
			     C	;									   ;
			     C	;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
			     C	
			     C	include mult.INC
			     C	;	SCCSID = @(#)mult.asm	1.2 85/04/12
			     C	Break <Critical section and Multiplex channels>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-35
Critical section and Multiplex channels                     

			     C	
			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
			     C	;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
			     C	;									   ;
			     C	; Critical section definitions
			     C	;
			     C	; These below are subject to leave-all sections
 = 0001                      C	critDisk    EQU     1			; Disk I/O critical section
 = 0002                      C	critDevice  EQU     2			; Device I/O critical section
 = 0001                      C	critShare   EQU     1			; Sharer I/O critical section
 = 0001                      C	critMem     EQU     1			; memory maintenance critical section
 = 0005                      C	critNet     EQU     5			; network critical section
 = 0001                      C	critSFT     EQU     1			; sft table allocation
 = 0006                      C	critIFS     EQU     6			; ifsfunc critical section
			     C	; These below are not subject to leave-all sections
 = 0008                      C	critASSIGN  EQU     8			; Assign has munged a system call
			     C	;									   ;
			     C	;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
			     C	
			     C	;
			     C	; The current set of defined multiplex channels is (* means documented):
			     C	;
			     C	;   Channel(h)	Issuer		Receiver    Function
			     C	;      00	server		PSPRINT     print job control
			     C	;     *01	print/apps	PRINT	    Queueing of files
			     C	;      02	BIOS		REDIR	    signal open/close of printers
			     C	;
			     C	;      05	command 	REDIR	    obtain text of net int 24 message
			     C	;     *06	server/assign	ASSIGN	    Install check
			     C	;
			     C	;      08	external driver IBMBIO	    interface to internal routines
			     C	;
			     C	;      10	sharer/server	Sharer	    install check
			     C	;      11	DOS/server	Redir	    install check/redirection funcs
			     C	;      12	sharer/redir	DOS	    dos functions and structure maint
			     C	;      13	MSNET		MSNET	    movement of NCBs
			     C	;      13	external driver IBMBIO	    Reset_Int_13, allows installation
			     C	;					    of alternative INT_13 drivers after
			     C	;					    boot_up
			     C	;      14 (IBM) DOS		NLSFUNC     down load NLS country info,DOS 3.3
			     C	;      14 (MS)	APPS		POPUP	    MSDOS 4 popup screen functions
			     C	;      15	APPS		MSCDEX	    CD-ROM extensions interface
			     C	;      16	WIN386		WIN386	    Windows communications
			     C	;      17	Clipboard	WINDOWS     Clipboard interface
			     C	;     *18	Applications	MS-Manger   Toggle interface to manager
			     C	;      19	Shell
			     C	;      1A	Ansi.sys
			     C	;      1B	Fastopen,Vdisk	 IBMBIO     EMS INT 67H stub handler
			     C	;
			     C	;      AC	Graphics
			     C	;      AD	NLS (toronto)
			     C	;      AE
			     C	;      AF	Mode
			     C	;      B0	GRAFTABL	GRAFTABL
			     C	;
			     C	
			     C	
			     C	;MUX 00-3F reserverd for IBM
			     C	;MUX 80-BF reserverd for IBM
			     C	;MUX 40-7F reserved for Microsoft
			     C	;MUX C0-FF users
			     C	
			     C	
			     C	
 = 0010                      C	MultSHARE   EQU     10h 		; sharer
			     C	    ;	1   MFT_enter
			     C	    ;	2   MFTClose
			     C	    ;	3   MFTclU
			     C	    ;	4   MFTCloseP
			     C	    ;	5   MFTCloN
			     C	    ;	6   set_block
			     C	    ;	7   clr_block
			     C	    ;	8   chk_block
			     C	    ;	9   MFT_get
			     C	    ;	10  ShSave
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-36
Critical section and Multiplex channels                     

			     C	    ;	11  ShChk
			     C	    ;	12  ShCol
			     C	    ;	13  ShCloseFile
			     C	
 = 0011                      C	MultNET     EQU     11h 		; Network support
 = 0011                      C	MultIFS     EQU     11h 		; Network support
			     C	    ;	1   IFS_RMDIR
			     C	    ;	2   IFS_SEQ_RMDIR
			     C	    ;	3   IFS_MKDIR
			     C	    ;	4   IFS_SEQ_MKDIR
			     C	    ;	5   IFS_CHDIR
			     C	    ;	6   IFS_CLOSE
			     C	    ;	7   IFS_COMMIT
			     C	    ;	8   IFS_READ
			     C	    ;	9   IFS_WRITE
			     C	    ;	10  IFS_LOCK
			     C	    ;	11  IFS_UNLOCK
			     C	    ;	12  IFS_DISK_INFO
			     C	    ;	13  IFS_SET_FILE_ATTRIBUTE
			     C	    ;	14  IFS_SEQ_SET_FILE_ATTRIBUTE
			     C	    ;	15  IFS_GET_FILE_INFO
			     C	    ;	16  IFS_SEQ_GET_FILE_INFO
			     C	    ;	17  IFS_RENAME
			     C	    ;	18  IFS_SEQ_RENAME
			     C	    ;	19  IFS_DELETE
			     C	    ;	20  IFS_SEQ_DELETE
			     C	    ;	21  IFS_OPEN
			     C	    ;	22  IFS_SEQ_OPEN
			     C	    ;	23  IFS_CREATE
			     C	    ;	24  IFS_SEQ_CREATE
			     C	    ;	25  IFS_SEQ_SEARCH_FIRST
			     C	    ;	26  IFS_SEQ_SEARCH_NEXT
			     C	    ;	27  IFS_SEARCH_FIRST
			     C	    ;	28  IFS_SEARCH_NEXT
			     C	    ;	29  IFS_ABORT
			     C	    ;	30  IFS_ASSOPER
			     C	    ;	31  Printer_SET_STRING
			     C	    ;	32  IFSFlushBuf
			     C	    ;	33  IFSBufWrite
			     C	    ;	34  IFSResetEnvironment
			     C	    ;	35  IFSSpoolCheck
			     C	    ;	36  IFSSpoolClose
			     C	
 = 0012                      C	MultDOS     EQU     12h 		; DOS call back
			     C	    ;	1   DOS_CLOSE
			     C	    ;	2   RECSET
			     C	    ;	3   Get DOSGROUP
			     C	    ;	4   PATHCHRCMP
			     C	    ;	5   OUT
			     C	    ;	6   NET_I24_ENTRY
			     C	    ;	7   PLACEBUF
			     C	    ;	8   FREE_SFT
			     C	    ;	9   BUFWRITE
			     C	    ;	10  SHARE_VIOLATION
			     C	    ;	11  SHARE_ERROR
			     C	    ;	12  SET_SFT_MODE
			     C	    ;	13  DATE16
			     C	    ;	14  SETVISIT
			     C	    ;	15  SCANPLACE
			     C	    ;	16  SKIPVISIT
			     C	    ;	17  StrCpy
			     C	    ;	18  StrLen
			     C	    ;	19  Ucase
			     C	    ;	20  POINTCOMP
			     C	    ;	21  CHECKFLUSH
			     C	    ;	22  SFFromSFN
			     C	    ;	23  GetCDSFromDrv
			     C	    ;	24  Get_User_Stack
			     C	    ;	25  GetThisDrv
			     C	    ;	26  DriveFromText
			     C	    ;	27  SETYEAR
			     C	    ;	28  DSUM
			     C	    ;	29  DSLIDE
			     C	    ;	30  StrCmp
			     C	    ;	31  initcds
			     C	    ;	32  pjfnfromhandle
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-37
Critical section and Multiplex channels                     

			     C	    ;	33  $NameTrans
			     C	    ;	34  CAL_LK
			     C	    ;	35  DEVNAME
			     C	    ;	36  Idle
			     C	    ;	37  DStrLen
			     C	    ;	38  NLS_OPEN	  DOS 3.3
			     C	    ;	39  $CLOSE	  DOS 3.3
			     C	    ;	40  NLS_LSEEK	  DOS 3.3
			     C	    ;	41  $READ	  DOS 3.3
			     C	    ;	42  FastInit	  DOS 4.0
			     C	    ;	43  NLS_IOCTL	  DOS 3.3
			     C	    ;	44  GetDevList	  DOS 3.3
			     C	    ;	45  NLS_GETEXT	  DOS 3.3
			     C	    ;	46  MSG_RETRIEVAL DOS 4.0
			     C	    ;	47  FAKE_VERSION  DOS 4.0
			     C	    ;
 = 0014                      C	NLSFUNC     EQU     14h 		; NLSFUNC CALL , DOS 3.3
			     C	    ;	0   NLSInstall
			     C	    ;	1   ChgCodePage
			     C	    ;	2   GetExtInfo
			     C	    ;	3   SetCodePage
			     C	    ;	4   GetCntry
			     C	    ;
			     C	;FASTOPEN is not chained through INT 2F   ; DOS 3.3 F.C.
			     C	;	  it calls Multdos 42 to set up an entry routine address
			     C	    ;	0   Install status  (reserved)
			     C	    ;	1   Lookup
			     C	    ;	2   Insert
			     C	    ;	3   Delete
			     C	    ;	4   Purge	    (reserved)
			     C	
			     C	BREAK <Disk map>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-38
Disk map                                                    

			     C	;  MSDOS partitions the disk into 4 sections:
			     C	;
			     C	;  phys sector 0:   +-------------------+
			     C	;	|	    | boot/reserved	|
			     C	;	|	    +-------------------+
			     C	;	|	    |  File allocation	|
			     C	;	v	    |	   table(s)	|
			     C	;		    |  (multiple copies |
			     C	;		    |	  are kept)	|
			     C	;		    +-------------------+
			     C	;		    |	  Directory	|
			     C	;		    +-------------------+
			     C	;		    |	  File space	|
			     C	;		    +-------------------+
			     C	;		    |	Unaddressable	|
			     C	;		    |  (to end of disk) |
			     C	;		    +-------------------+
			     C	;
			     C	; All partition boundaries are sector boundaries.  The size of the FAT is
			     C	; adjusted to maximize the file space addressable.
			     C	
			     C	include dirent.INC
			     C	;	SCCSID = @(#)dirent.asm 1.1 85/04/10
			     C	;	SCCSID = @(#)dirent.asm 1.1 85/04/10
			     C	Break <Directory entry>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-39
Directory entry                                             

			     C	
			     C	;
			     C	;	+---------------------------+
			     C	;	|  (12 BYTE) filename/ext   |	    0	    0
			     C	;	+---------------------------+
			     C	;	|     (BYTE) attributes     |	    11	    B
			     C	;	+---------------------------+
			     C	;	|    (10 BYTE) reserved     |	    12	    C
			     C	;	+---------------------------+
			     C	;	| (WORD) time of last write |	    22	    16
			     C	;	+---------------------------+
			     C	;	| (WORD) date of last write |	    24	    18
			     C	;	+---------------------------+
			     C	;	|   (WORD) First cluster    |	    26	    1A
			     C	;	+---------------------------+
			     C	;	|     (DWORD) file size     |	    28	    1C
			     C	;	+---------------------------+
			     C	;
			     C	;   First byte of filename  = E5 -> free directory entry
			     C	;			    = 00 -> end of allocated directory
			     C	;   Time:   Bits 0-4=seconds/2, bits 5-10=minute, 11-15=hour
			     C	;   Date:   Bits 0-4=day, bits 5-8=month, bits 9-15=year-1980
			     C	;
			     C	
			     C	dir_entry   STRUC
 0000  000B[                 C	dir_name    DB	    11 DUP (?)		; file name
	   ??                C	
			 ]   C	
			     C	
 000B  00                    C	dir_attr    DB	    ?			; attribute bits
 000C  0000                  C	dir_codepg  dw	    ?			; code page DOS 4.00
 000E  0000                  C	dir_extcluster dw   ?			; extended attribute starting cluster
 0010  00                    C	dir_attr2   db	    ?			; reserved
 0011  0005[                 C	dir_pad     DB	    5  DUP (?)		; reserved for expansion
	   ??                C	
			 ]   C	
			     C	
 0016  0000                  C	dir_time    DW	    ?			; time of last write
 0018  0000                  C	dir_date    DW	    ?			; date of last write
 001A  0000                  C	dir_first   DW	    ?			; first allocation unit of file
 001C  0000                  C	dir_size_l  DW	    ?			; low 16 bits of file size
 001E  0000                  C	dir_size_h  DW	    ?			; high 16 bits of file size
 0020                        C	dir_entry   ENDS
			     C	
 = 0001                      C	attr_read_only	    EQU      1h
 = 0002                      C	attr_hidden	    EQU      2h
 = 0004                      C	attr_system	    EQU      4h
 = 0008                      C	attr_volume_id	    EQU      8h
 = 0010                      C	attr_directory	    EQU     10h
 = 0020                      C	attr_archive	    EQU     20h
 = 0040                      C	attr_device	    EQU     40h 	; This is a VERY special bit.
			     C						;   NO directory entry on a disk EVER
			     C						;   has this bit set. It is set non-zero
			     C						;   when a device is found by GETPATH
			     C	
 = 0016                      C	attr_all	    EQU     attr_hidden+attr_system+attr_directory
			     C						; OR of hard attributes for FINDENTRY
			     C	
 = 0061                      C	attr_ignore	    EQU     attr_read_only+attr_archive+attr_device
			     C						; ignore this(ese) attribute(s) during
			     C						; search first/next
			     C	
 = 0027                      C	attr_changeable     EQU     attr_read_only+attr_hidden+attr_system+attr_archive
			     C						; changeable via CHMOD
			     C	
			     C	BREAK <File allocation Table information>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-40
File allocation Table information                           

			     C	;
			     C	; The File Allocation Table uses a 12-bit entry for each allocation unit on
			     C	; the disk.  These entries are packed, two for every three bytes.  The contents
			     C	; of entry number N is found by 1) multiplying N by 1.5; 2) adding the result
			     C	; to the base address of the Allocation Table; 3) fetching the 16-bit word
			     C	; at this address; 4) If N was odd (so that N*1.5 was not an integer), shift
			     C	; the word right four bits; 5) mask to 12 bits (AND with 0FFF hex).  Entry
			     C	; number zero is used as an end-of-file trap in the OS and is passed to the
			     C	; BIOS to help determine disk format.  Entry 1 is reserved for future use.
			     C	; The first available allocation unit is assigned entry number two, and even
			     C	; though it is the first, is called cluster 2.	Entries greater than 0FF8H
			     C	; (12-bit fats) or 0FFF8H (16-bit fats) are end of file marks; entries of zero
			     C	; are unallocated.  Otherwise, the contents of a FAT entry is the number of
			     C	; the next cluster in the file.
			     C	;
			     C	; Clusters with bad sectors are tagged with FF7H.  Any non-zero number would
			     C	; do because these clusters show as allocated, but are not part of any
			     C	; allocation chain and thus will never be allocated to a file.	A particular
			     C	; number is selected so that disk checking programs know what to do (ie.  a
			     C	; cluster with entry FF7H which is not in a chain is not an error).
			     C	
			     C	include dpb.INC
			     C	;	SCCSID = @(#)dpb.asm	1.1 85/04/10
			     C	;	SCCSID = @(#)dpb.asm	1.1 85/04/10
			     C	BREAK <DPB structure>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-41
DPB structure                                               

			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
			     C	;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
			     C	;									   ;
			     C	dpb	STRUC
 0000  00                    C	dpb_drive	    DB	    ?		; Logical drive # assoc with DPB (A=0,B=1,...)
 0001  00                    C	dpb_UNIT	    DB	    ?		; Driver unit number of DPB
 0002  0000                  C	dpb_sector_size     DW	    ?		; Size of physical sector in bytes
 0004  00                    C	dpb_cluster_mask    DB	    ?		; Sectors/cluster - 1
 0005  00                    C	dpb_cluster_shift   DB	    ?		; Log2 of sectors/cluster
 0006  0000                  C	dpb_first_FAT	    DW	    ?		; Starting record of FATs
 0008  00                    C	dpb_FAT_count	    DB	    ?		; Number of FATs for this drive
 0009  0000                  C	dpb_root_entries    DW	    ?		; Number of directory entries
 000B  0000                  C	dpb_first_sector    DW	    ?		; First sector of first cluster
 000D  0000                  C	dpb_max_cluster     DW	    ?		; Number of clusters on drive + 1
 000F  0000                  C	dpb_FAT_size	    DW	    ?		;;Number of records occupied by FAT
 0011  0000                  C	dpb_dir_sector	    DW	    ?		; Starting record of directory
 0013  00000000              C	dpb_driver_addr     DD	    ?		; Pointer to driver
 0017  00                    C	dpb_media	    DB	    ?		; Media byte
 0018  00                    C	dpb_first_access    DB	    ?		; This is initialized to -1 to force a media
			     C						; check the first time this DPB is used
 0019  00000000              C	dpb_next_dpb	    DD	    ?		; Pointer to next Drive parameter block
 001D  0000                  C	dpb_next_free	    DW	    ?		; Cluster # of last allocated cluster
 001F  0000                  C	dpb_free_cnt	    DW	    ?		; Count of free clusters, -1 if unknown
 0021                        C	dpb	ENDS
			     C	
 = 0021                      C	DPBSIZ	EQU	SIZE dpb		; Size of the structure in bytes
			     C	
 = 000D                      C	DSKSIZ	=	dpb_max_cluster 	; Size of disk (temp used during init only)
			     C	;									   ;
			     C	;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
			     C	
			     C	
			     C	include curdir.INC
			     C	;	SCCSID = @(#)curdir.asm 1.1 85/04/10
			     C	;	SCCSID = @(#)curdir.asm 1.1 85/04/10
			     C	BREAK <Current directory list structure>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-42
Current directory list structure                            

			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
			     C	;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
			     C	;									   ;
			     C	; CDS items are used bu the internal routines to store cluster numbers and ;
			     C	; network identifiers for each logical name.  The ID field is used dually, ;
			     C	; both as net ID and for a cluster number for local devices.  In the case  ;
			     C	; of local devices, the cluster number will be -1 if there is a potential  ;
			     C	; of the disk being changed or if the path must be recracked.  The END	   ;
			     C	; field is the location of the end of the definition.  No .. is allowed    ;
			     C	; past this point							   ;
			     C	
 = 0043                      C	DIRSTRLEN	EQU	64+3		; Max length in bytes of directory strings
 = 0086                      C	TEMPLEN 	EQU	DIRSTRLEN*2
			     C	
			     C	curdir_list	STRUC
 0000  0043[                 C	curdir_text	DB	DIRSTRLEN DUP (?)   ; text of assignment and curdir
	   ??                C	
			 ]   C	
			     C	
 0043  0000                  C	curdir_flags	DW	?		; various flags
 0045  00000000              C	curdir_devptr	DD	?		; local pointer to DPB or net device
 0049  0000                  C	curdir_ID	DW	?		; cluster of current dir (net ID)
 004B  0000                  C			DW	?
 004D  0000                  C	curdir_user_word DW	?
 004F  0000                  C	curdir_end	DW	?		; end of assignment
 0051  00                    C	curdir_type	DB	?		; IFS drive (2=ifs, 4=netuse)
 0052  00000000              C	curdir_ifs_hdr	DD	?		; Ptr to File System Header
 0056  0002[                 C	curdir_fsda	DB	2 DUP (?)	; File System Dependent Data Area
	   ??                C	
			 ]   C	
			     C	
 0058                        C	curdir_list	ENDS
			     C	
 = 0058                      C	curdirLen	EQU	Size curdir_list	; Needed for screwed up
			     C							; ASM87 which doesn't allow
			     C							; Size directive as a macro
			     C							; argument
 = 0049                      C	curdir_netID	EQU	DWORD PTR curdir_ID
			     C	
			     C	;Flag word masks
 = 8000                      C	curdir_isnet	EQU	1000000000000000B
 = 8000                      C	curdir_isifs	EQU	1000000000000000B	; DOS 4.00
 = 4000                      C	curdir_inuse	EQU	0100000000000000B
 = 2000                      C	curdir_splice	EQU	0010000000000000B
 = 1000                      C	curdir_local	EQU	0001000000000000B
			     C	;									   ;
			     C	;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
			     C	
			     C	include cpmfcb.INC
			     C	;       SCCSID = @(#)cpmfcb.asm 1.1 85/04/10
			     C	;       SCCSID = @(#)cpmfcb.asm 1.1 85/04/10
			     C	;BREAK <File Control Block definition>
			     C	
			     C	;
			     C	; Field definition for FCBs
			     C	; The FCB has the following structure:
			     C	;
			     C	;       +---------------------------+
			     C	;       |   Drive indicator(byte)   |
			     C	;       +---------------------------+
			     C	;       |    Filename (8 chars)     |
			     C	;       +---------------------------+
			     C	;       |    Extension (3 chars)    |
			     C	;       +---------------------------+
			     C	;       |   Current Extent(word)    |
			     C	;       +---------------------------+
			     C	;       |    Record size (word)     |
			     C	;       +---------------------------+
			     C	;       |    File Size (2 words)    |
			     C	;       +---------------------------+
			     C	;       |       Date of write       |
			     C	;       +---------------------------+
			     C	;       |       Time of write       |
			     C	;       +---------------------------+
			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-43
Current directory list structure                            

			     C	;            C  A  V  E  A  T     P  R  O  G  R  A  M  M  E  R             ;
			     C	;                                                                          ;
			     C	;       +---------------------------+
			     C	;       |   8 bytes reserved        |
			     C	;       +---------------------------+
			     C	;                                                                          ;
			     C	;            C  A  V  E  A  T     P  R  O  G  R  A  M  M  E  R             ;
			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
			     C	;       |    next record number     |
			     C	;       +---------------------------+
			     C	;       |   random record number    |
			     C	;       +---------------------------+
			     C	;
			     C	
			     C	sys_fcb     STRUC
 0000  00                    C	fcb_drive   DB      ?
 0001  0008[                 C	fcb_name    DB      8 DUP (?)
	   ??                C	
			 ]   C	
			     C	
 0009  0003[                 C	fcb_ext     DB      3 DUP (?)
	   ??                C	
			 ]   C	
			     C	
 000C  0000                  C	fcb_EXTENT  DW      ?
 000E  0000                  C	fcb_RECSIZ  DW      ?                   ; Size of record (user settable)
 0010  0000                  C	fcb_FILSIZ  DW      ?                   ; Size of file in bytes; used with the
			     C	                                        ; following word
 0012  0000                  C	fcb_DRVBP   DW      ?                   ; BP for SEARCH FIRST and SEARCH NEXT
 0014  0000                  C	fcb_FDATE   DW      ?                   ; Date of last writing
 0016  0000                  C	fcb_FTIME   DW      ?                   ; Time of last writing
			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
			     C	;            C  A  V  E  A  T     P  R  O  G  R  A  M  M  E  R             ;
			     C	;                                                                          ;
 0018  0008[                 C	fcb_reserved DB      8 DUP (?)           ; RESERVED
	   ??                C	
			 ]   C	
			     C	
			     C	;                                                                          ;
			     C	;            C  A  V  E  A  T     P  R  O  G  R  A  M  M  E  R             ;
			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
 0020  00                    C	fcb_NR      DB      ?                   ; Next record
 0021  0004[                 C	fcb_RR      DB      4 DUP (?)           ; Random record
	   ??                C	
			 ]   C	
			     C	
 0025                        C	sys_fcb     ENDS
			     C	
 = 0010                      C	FILDIRENT       = fcb_FILSIZ            ; Used only by SEARCH FIRST and SEARCH
			     C	                                        ; NEXT
			     C	
 = 0018                      C	fcb_sfn         EQU     BYTE PTR fcb_reserved
			     C	
			     C	; Note that fcb_net_handle, fcb_nsl_drive, fcb_nsld_drive and fcb_l_drive
			     C	; all must point to the same byte.  Otherwise, the FCBRegen will fail.
			     C	; NOTE about this byte (fcb_nsl_drive)
			     C	;   The high two bits of this byte are used as follows to indicate the FCB type
			     C	;       00 means a local file or device with sharing loaded
			     C	;       10 means a remote (network) file
			     C	;       01 means a local file with no sharing loaded
			     C	;       11 means a local device with no sharing loaded
			     C	
			     C	;
			     C	; Network FCB
			     C	;
 = 0019                      C	fcb_net_drive   EQU     BYTE PTR fcb_reserved+1
 = 001A                      C	fcb_net_handle  EQU     WORD PTR fcb_reserved+2
 = 001C                      C	fcb_netID       EQU     DWORD PTR fcb_reserved+4
			     C	
			     C	;
			     C	; No sharing local file FCB
			     C	;
 = 0019                      C	fcb_nsl_drive   EQU     BYTE PTR fcb_reserved+1
 = 001A                      C	fcb_nsl_bits    EQU     BYTE PTR fcb_reserved+2
 = 001B                      C	fcb_nsl_firclus EQU     WORD PTR fcb_reserved+3
 = 001D                      C	fcb_nsl_dirsec  EQU     WORD PTR fcb_reserved+5
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-44
Current directory list structure                            

 = 001F                      C	fcb_nsl_dirpos  EQU     BYTE PTR fcb_reserved+7
			     C	
			     C	;
			     C	; No sharing local device FCB
			     C	;
 = 0019                      C	fcb_nsld_drive  EQU     BYTE PTR fcb_reserved+1
 = 001A                      C	fcb_nsld_drvptr EQU     DWORD PTR fcb_reserved+2
			     C	
			     C	;
			     C	; Sharing local FCB
			     C	;
 = 0019                      C	fcb_l_drive     EQU     BYTE PTR fcb_reserved+1
 = 001A                      C	fcb_l_firclus   EQU     WORD PTR fcb_reserved+2
 = 001C                      C	fcb_l_mfs       EQU     WORD PTR fcb_reserved+4
 = 001E                      C	fcb_l_attr      EQU     BYTE PTR fcb_reserved+6
			     C	
			     C	;
			     C	; Bogusness:  the four cases are:
			     C	;
			     C	;   local file      00
			     C	;   local device    40
			     C	;   local sharing   C0
			     C	;   network         80
			     C	;
			     C	; Since sharing and network collide, we cannot use a test instruction for
			     C	; deciding whether a network or a share check in involved
			     C	;
 = 0040                      C	FCBDEVICE   EQU 040h
 = 0080                      C	FCBNETWORK  EQU 080h
 = 00C0                      C	FCBSHARE    EQU 0C0h
			     C	
			     C	; FCBSPECIAL must be able to mask off both net and share
 = 0080                      C	FCBSPECIAL  EQU 080h
 = 00C0                      C	FCBMASK     EQU 0C0h
			     C	
			     C	
			     C	include find.INC
			     C	;	SCCSID = @(#)find.asm	1.1 85/04/10
			     C	;	SCCSID = @(#)find.asm	1.1 85/04/10
			     C	Break	<find first/next buffer>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-45
find first/next buffer                                      

			     C	
			     C	find_buf    STRUC
			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
			     C	;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
			     C	;									   ;
 0000  00                    C	find_buf_drive	    DB	?		; drive of search
 0001  000B[                 C	find_buf_name	    DB	11 DUP (?)	; formatted name
	   ??                C	
			 ]   C	
			     C	
 000C  00                    C	find_buf_sattr	    DB	?		; attribute of search
 000D  0000                  C	find_buf_LastEnt    DW	?		; LastEnt
 000F  0000                  C	find_buf_DirStart   DW	?		; DirStart
 0011  0004[                 C	find_buf_NetID	    DB	4 DUP (?)	; Reserved for NET
	   ??                C	
			 ]   C	
			     C	
			     C	;									   ;
			     C	;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
			     C	
 0015  00                    C	find_buf_attr	    DB	?		; attribute found
 0016  0000                  C	find_buf_time	    DW	?		; time
 0018  0000                  C	find_buf_date	    DW	?		; date
 001A  0000                  C	find_buf_size_l     DW	?		; low(size)
 001C  0000                  C	find_buf_size_h     DW	?		; high(size)
 001E  000D[                 C	find_buf_pname	    DB	13 DUP (?)	; packed name
	   ??                C	
			 ]   C	
			     C	
 002B                        C	find_buf    ENDS
			     C	
			     C	include pdb.INC
			     C	;	SCCSID = @(#)pdb.asm	1.1 85/04/10
			     C	BREAK <Process data block>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-46
Process data block                                          

			     C	
			     C	;
			     C	; Process data block (otherwise known as program header)
			     C	;
			     C	
 = 0014                      C	FilPerProc	    EQU     20
			     C	
			     C	Process_data_block  STRUC
 0000  0000                  C	PDB_Exit_Call	    DW	    ?		; INT int_abort system terminate
 0002  0000                  C	PDB_block_len	    DW	    ?		; size of execution block
 0004  00                    C			    DB	    ?
 0005  0005[                 C	PDB_CPM_Call	    DB	5 DUP (?)	; ancient call to system
	   ??                C	
			 ]   C	
			     C	
 000A  00000000              C	PDB_Exit	    DD	    ?		; pointer to exit routine
 000E  00000000              C	PDB_Ctrl_C	    DD	    ?		; pointer to ^C routine
 0012  00000000              C	PDB_Fatal_abort     DD	    ?		; pointer to fatal error
			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
			     C	;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
			     C	;									   ;
 0016  0000                  C	PDB_Parent_PID	    DW	    ?		; PID of parent (terminate PID)
 0018  0014[                 C	PDB_JFN_Table	    DB	FilPerProc DUP (?)
	   ??                C	
			 ]   C	
			     C	
			     C						; indices into system table
			     C	;									   ;
			     C	;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
 002C  0000                  C	PDB_environ	    DW	    ?		; seg addr of environment
			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
			     C	;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
			     C	;									   ;
 002E  00000000              C	PDB_User_stack	    DD	    ?		; stack of self during system calls
 0032  0000                  C	PDB_JFN_Length	    DW	    ?		; number of handles allowed
 0034  00000000              C	PDB_JFN_Pointer     DD	    ?		; pointer to JFN table
 0038  00000000              C	PDB_Next_PDB	    DD	    ?		; pointer to nested PDB's
 003C  0014[                 C	PDB_PAD1	    DB	    14h DUP (?)
	   ??                C	
			 ]   C	
			     C	
			     C	;									   ;
			     C	;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
 0050  0005[                 C	PDB_Call_system     DB	    5 DUP (?)	; portable method of system call
	   ??                C	
			 ]   C	
			     C	
			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
			     C	;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
			     C	;									   ;
 0055  0007[                 C	PDB_PAD2	    DB	    7h DUP (?)
	   ??                C	
			 ]   C	
			     C	
			     C	;									   ;
			     C	;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
 005C                        C	Process_data_block  ENDS
			     C	
 = 003C                      C	PDB_InterCon	EQU	BYTE PTR PDB_PAD1	; 2/12/KK
 = 003D                      C	PDB_Append	EQU	BYTE PTR PDB_PAD1+1	; 2/12/KK
			     C	
			     C	
			     C	include exe.INC
			     C	;	SCCSID = @(#)exe.asm	1.1 85/04/10
			     C	;	SCCSID = @(#)exe.asm	1.1 85/04/10
			     C	BREAK <EXEC and EXE file structures>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-47
EXEC and EXE file structures                                

			     C	;
			     C	; EXEC arg block - load/go program
			     C	;
			     C	
			     C	;
			     C	; The following get used as arguments to the EXEC system call.	They indicate
			     C	; whether or not the program is executed or whether or not a program header
			     C	; gets created.
			     C	;
 = 0001                      C	exec_func_no_execute	EQU 1		; no execute bit
 = 0002                      C	exec_func_overlay	EQU 2		; overlay bit
			     C	
			     C	Exec0		STRUC
 0000  0000                  C	Exec0_environ	DW	?		; seg addr of environment
 0002  00000000              C	Exec0_com_line	DD	?		; pointer to asciz command line
 0006  00000000              C	Exec0_5C_FCB	DD	?		; default fcb at 5C
 000A  00000000              C	Exec0_6C_FCB	DD	?		; default fcb at 6C
 000E                        C	Exec0		ENDS
			     C	
			     C	Exec1		STRUC
 0000  0000                  C	Exec1_environ	DW	?		; seg addr of environment
 0002  00000000              C	Exec1_com_line	DD	?		; pointer to asciz command line
 0006  00000000              C	Exec1_5C_FCB	DD	?		; default fcb at 5C
 000A  00000000              C	Exec1_6C_FCB	DD	?		; default fcb at 6C
 000E  0000                  C	Exec1_SP	DW	?		; stack pointer of program
 0010  0000                  C	Exec1_SS	DW	?		; stack seg register of program
 0012  0000                  C	Exec1_IP	DW	?		; entry point IP
 0014  0000                  C	Exec1_CS	DW	?		; entry point CS
 0016                        C	Exec1		ENDS
			     C	
			     C	Exec3		STRUC
 0000  0000                  C	Exec3_load_addr DW	?		; seg address of load point
 0002  0000                  C	Exec3_reloc_fac DW	?		; relocation factor
 0004                        C	Exec3		ENDS
			     C	
			     C	;
			     C	; Exit codes in upper byte
			     C	;
 = 0000                      C	Exit_terminate	    EQU     0
 = 0000                      C	Exit_abort	    EQU     0
 = 0001                      C	Exit_Ctrl_C	    EQU     1
 = 0002                      C	Exit_Hard_Error     EQU     2
 = 0003                      C	Exit_Keep_process   EQU     3
			     C	
			     C	;
			     C	; EXE file header
			     C	;
			     C	
			     C	EXE_file    STRUC
 0000  0000                  C	exe_signature	DW  ?			; must contain 4D5A  (yay zibo!)
 0002  0000                  C	exe_len_mod_512 DW  ?			; low 9 bits of length
 0004  0000                  C	exe_pages	DW  ?			; number of 512b pages in file
 0006  0000                  C	exe_rle_count	DW  ?			; count of reloc entries
 0008  0000                  C	exe_par_dir	DW  ?			; number of paragraphs before image
 000A  0000                  C	exe_min_BSS	DW  ?			; minimum number of para of BSS
 000C  0000                  C	exe_max_BSS	DW  ?			; max number of para of BSS
 000E  0000                  C	exe_SS		DW  ?			; stack of image
 0010  0000                  C	exe_SP		DW  ?			; SP of image
 0012  0000                  C	exe_chksum	DW  ?			; checksum  of file (ignored)
 0014  0000                  C	exe_IP		DW  ?			; IP of entry
 0016  0000                  C	exe_CS		DW  ?			; CS of entry
 0018  0000                  C	exe_rle_table	DW  ?			; byte offset of reloc table
 001A  0000                  C	exe_iov 	DW  ?			; overlay number (0 for root)
 001C  00000000              C	exe_sym_tab	DD  ?			; offset of symbol table in file
 0020                        C	EXE_file    ENDS
			     C	
 = 5A4D                      C	exe_valid_signature	EQU 5A4Dh
 = 4D5A                      C	exe_valid_old_signature EQU 4D5Ah
			     C	
			     C	symbol_entry	STRUC
 0000  00000000              C	sym_value	DD  ?
 0004  0000                  C	sym_type	DW  ?
 0006  00                    C	sym_len 	DB  ?
 0007  00FF[                 C	sym_name	DB  255 dup (?)
	   ??                C	
			 ]   C	
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-48
EXEC and EXE file structures                                

			     C	
 0106                        C	symbol_entry	ENDS
			     C	
			     C	include sf.INC
			     C	;	SCCSID = @(#)sf.asm	1.1 85/04/10
			     C	BREAK <Internal system file table format>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-49
Internal system file table format                           

			     C	;
			     C	;   AN000   version 4.00   Jan. 1988
			     C	;   AN003   PTM 3680 --  make NAME offset the same as before (<=3.30)
			     C	;   AN009   PTM 3839	 reorder SFT for MS WINDOWS
			     C	
			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
			     C	;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
			     C	;									   ;
			     C	;
			     C	; system file table
			     C	;
			     C	
			     C	SF		STRUC
 0000  00000000              C	SFLink		DD	?
 0004  0000                  C	SFCount 	DW	?		; number of entries
 0006  0000                  C	SFTable 	DW	?		; beginning of array of the following
 0008                        C	SF		ENDS
			     C	
			     C	;
			     C	; system file table entry
			     C	;
			     C	
			     C	sf_entry	STRUC
 0000  0000                  C	sf_ref_count	DW	?		; number of processes sharing entry
			     C						;   if FCB then ref count
 0002  0000                  C	sf_mode 	DW	?		; mode of access or high bit on if FCB
 0004  00                    C	sf_attr 	DB	?		; attribute of file
 0005  0000                  C	sf_flags	DW	?		;Bits 8-15
			     C						; Bit 15 = 1 if remote file
			     C						;	 = 0 if local file or device
			     C						; Bit 14 = 1 if date/time is not to be
			     C						;   set from clock at CLOSE.  Set by
			     C						;   FILETIMES and FCB_CLOSE.  Reset by
			     C						;   other reseters of the dirty bit
			     C						;   (WRITE)
			     C						; Bit 13 = Pipe bit (reserved)
			     C						;
			     C						; Bits 0-7 (old FCB_devid bits)
			     C						; If remote file or local file, bit
			     C						; 6=0 if dirty Device ID number, bits
			     C						; 0-5 if local file.
			     C						; bit 7=0 for local file, bit 7
			     C						;      =1 for local I/O device
			     C						; If local I/O device, bit 6=0 if EOF (input)
			     C						;		Bit 5=1 if Raw mode
			     C						;		Bit 0=1 if console input device
			     C						;		Bit 1=1 if console output device
			     C						;		Bit 2=1 if null device
			     C						;		Bit 3=1 if clock device
 0007  00000000              C	sf_devptr	DD	?		; Points to DPB if local file, points
			     C						; to device header if local device,
			     C						; points to net device header if
			     C						; remote
 000B  0000                  C	sf_firclus	DW	?		; First cluster of file (bit 15 = 0)
 000D  0000                  C	sf_time 	DW	?		; Time associated with file
 000F  0000                  C	sf_date 	DW	?		; Date associated with file
 0011  00000000              C	sf_size 	DD	?		; Size associated with file
 0015  00000000              C	sf_position	DD	?		; Read/Write pointer or LRU count for FCBs
			     C	;
			     C	; Starting here, the next 7 bytes may be used by the file system to store an
			     C	; ID
			     C	;
 0019  0000                  C	sf_cluspos	DW	?		; Position of last cluster accessed
 001B  00000000              C	sf_dirsec	DD	?		; Sector number of directory sector for
			     C						; for this file
 001F  00                    C	sf_dirpos	DB	?		; Offset of this entry in the above
			     C	;
			     C	; End of 7 bytes of file-system specific info.
			     C	;
 0020  000B[                 C	sf_name 	DB	11 DUP (?)	; 11 character name that is in the
	   ??                C	
			 ]   C	
			     C	
			     C						; directory entry.  This is used by
			     C						; close to detect file deleted and
			     C						; disk changed errors.
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-50
Internal system file table format                           

			     C	
			     C	; SHARING INFO
 002B  00000000              C	sf_chain	DD	?		; link to next SF
 002F  0000                  C	sf_UID		DW	?
 0031  0000                  C	sf_PID		DW	?
 0033  0000                  C	sf_MFT		DW	?
 0035  0000                  C	sf_lstclus	DW	?		;AN009; Last cluster accessed
 0037  00000000              C	sf_IFS_HDR	DD	?
 003B                        C	sf_entry	ENDS
			     C	
 = 0019                      C	sf_fsda 	EQU	BYTE PTR sf_cluspos	     ;DOS 4.00
 = 000B                      C	sf_serial_ID	EQU	WORD PTR sf_firclus	     ;DOS 4.00
 = 0019                      C	sf_netid	EQU	BYTE PTR sf_cluspos
 = 0017                      C	sf_OpenAge	EQU	WORD PTR sf_position+2
 = 0015                      C	sf_LRU		EQU	WORD PTR sf_position
			     C	
 = 0005                      C	sf_default_number   EQU     5h
			     C	
			     C	;
			     C	; Note that we need to mark an SFT as being busy for OPEN/CREATE.  This is
			     C	; because an INT 24 may prevent us from 'freeing' it.  We mark this as such
			     C	; by placing a -1 in the ref_count field.
			     C	;
			     C	
 =-0001                      C	sf_busy EQU -1
			     C	
			     C	
			     C	; mode mask for FCB detection
 = 8000                      C	sf_isfcb		EQU	1000000000000000B
			     C	
			     C	; Flag word masks
 = 8000                      C	sf_isnet		EQU	1000000000000000B
 = 4000                      C	sf_close_nodate 	EQU	0100000000000000B
 = 2000                      C	sf_pipe 		EQU	0010000000000000B
 = 1000                      C	sf_no_inherit		EQU	0001000000000000B
 = 0800                      C	sf_net_spool		EQU	0000100000000000B
 = 0100                      C	Handle_Fail_I24 	EQU	0000000100000000B  ;BIT 8 - DISK FULL I24 ERROR
			     C	
			     C	; Local file/device flag masks
 = 0040                      C	devid_file_clean	EQU	40h	; true if file and not written
 = 003F                      C	devid_file_mask_drive	EQU	3Fh	; mask for drive number
			     C	
 = 0080                      C	devid_device		EQU	80h	; true if a device
 = 0040                      C	devid_device_EOF	EQU	40h	; true if end of file reached
 = 0020                      C	devid_device_raw	EQU	20h	; true if in raw mode
 = 0010                      C	devid_device_special	EQU	10h	; true if special device
 = 0008                      C	devid_device_clock	EQU	08h	; true if clock device
 = 0004                      C	devid_device_null	EQU	04h	; true if null device
 = 0002                      C	devid_device_con_out	EQU	02h	; true if console output
 = 0001                      C	devid_device_con_in	EQU	01h	; true if consle input
			     C	;									   ;
			     C	;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
			     C	
			     C	;
			     C	; structure of devid field as returned by IOCTL is:
			     C	;
			     C	;	BIT	7   6	5   4	3   2	1   0
			     C	;	      |---|---|---|---|---|---|---|---|
			     C	;	      | I | E | R | S | I | I | I | I |
			     C	;	      | S | O | A | P | S | S | S | S |
			     C	;	      | D | F | W | E | C | N | C | C |
			     C	;	      | E |   |   | C | L | U | O | I |
			     C	;	      | V |   |   | L | K | L | T | N |
			     C	;	      |---|---|---|---|---|---|---|---|
			     C	;	ISDEV = 1 if this channel is a device
			     C	;	      = 0 if this channel is a disk file
			     C	;
			     C	;	If ISDEV = 1
			     C	;
			     C	;	      EOF = 0 if End Of File on input
			     C	;	      RAW = 1 if this device is in Raw mode
			     C	;		  = 0 if this device is cooked
			     C	;	      ISCLK = 1 if this device is the clock device
			     C	;	      ISNUL = 1 if this device is the null device
			     C	;	      ISCOT = 1 if this device is the console output
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-51
Internal system file table format                           

			     C	;	      ISCIN = 1 if this device is the console input
			     C	;
			     C	;	If ISDEV = 0
			     C	;	      EOF = 0 if channel has been written
			     C	;	      Bits 0-5	are  the  block  device  number  for
			     C	;		  the channel (0 = A, 1 = B, ...)
			     C	;
 = 0080                      C	devid_ISDEV	EQU	80h
 = 0040                      C	devid_EOF	EQU	40h
 = 0020                      C	devid_RAW	EQU	20h
 = 0010                      C	devid_SPECIAL	EQU	10H
 = 0008                      C	devid_ISCLK	EQU	08h
 = 0004                      C	devid_ISNUL	EQU	04h
 = 0002                      C	devid_ISCOT	EQU	02h
 = 0001                      C	devid_ISCIN	EQU	01h
			     C	
 = 001F                      C	devid_block_dev EQU	1Fh		; mask for block device number
			     C	
			     C	include arena.INC
			     C	;	SCCSID = @(#)arena.asm	1.1 85/04/09
			     C	BREAK <Memory arena structure>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-52
Memory arena structure                                      

			     C	
			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
			     C	;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
			     C	;									   ;
			     C	;
			     C	; arena item
			     C	;
			     C	arena	STRUC
 0000  00                    C	arena_signature     DB	?		; 4D for valid item, 5A for last item
 0001  0000                  C	arena_owner	    DW	?		; owner of arena item
 0003  0000                  C	arena_size	    DW	?		; size in paragraphs of item
 0005  0003[                 C	arena_reserved	    DB	3 DUP(?)	; reserved
	   ??                C	
			 ]   C	
			     C	
 0008  0008[                 C	arena_name	    DB	8 DUP(?)	; owner file name
	   ??                C	
			 ]   C	
			     C	
 0010                        C	arena	ENDS
			     C	
			     C	;
			     C	; CAUTION: The routines in ALLOC.ASM rely on the fact that arena_signature
			     C	; and arena_owner_system are all equal to zero and are contained in DI.  Change
			     C	; them and change ALLOC.ASM.
			     C	
 = 0000                      C	arena_owner_system  EQU 0		; free block indication
			     C	
 = 004D                      C	arena_signature_normal	EQU 4Dh 	; valid signature, not end of arena
 = 005A                      C	arena_signature_end	EQU 5Ah 	; valid signature, last block in arena
			     C	;									   ;
			     C	;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
			     C	
			     C	
			     C	include intnat.INC
			     C	;	SCCSID = @(#)intnat.asm	1.1 85/04/10
			     C	BREAK <International data structure format>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-53
International data structure format                         

			     C	
			     C	;
			     C	; Current structure of the data returned by the international call
			     C	;
			     C	internat_block STRUC
 0000  0000                  C	Date_tim_format DW	?		; 0-USA, 1-EUR, 2-JAP
 0002  00                    C	Currency_sym	DB	?		; Currency Symbol 5 bytes
 0003  00                    C			DB	?
 0004  00                    C			DB	?
 0005  00                    C			DB	?
 0006  00                    C			DB	?
 0007  00                    C	Thous_sep	DB	?		; Thousands separator 2 bytes
 0008  00                    C			DB	?
 0009  00                    C	Decimal_sep	DB	?		; Decimal separator 2 bytes
 000A  00                    C			DB	?
 000B  00                    C	Date_sep	DB	?		; Date separator 2 bytes
 000C  00                    C			DB	?
 000D  00                    C	Time_sep	DB	?		; Decimal separator 2 bytes
 000E  00                    C			DB	?
 000F  00                    C	Bit_field	DB	?		; Bit values
			     C						;   Bit 0 = 0 if currency symbol first
			     C						;	  = 1 if currency symbol last
			     C						;   Bit 1 = 0 if No space after currency symbol
			     C						;	  = 1 if space after currency symbol
 0010  00                    C	Currency_cents	DB	?		; Number of places after currency dec point
 0011  00                    C	Time_24 	DB	?		; 1 if 24 hour time, 0 if 12 hour time
 0012  0000                  C	Map_call	DW	?		; Address of case mapping call (DWORD)
 0014  0000                  C			DW	?		; THIS IS TWO WORDS SO IT CAN BE INITIALIZED
			     C						;  in pieces.
 0016  00                    C	Data_sep	DB	?		; Data list separator character
 0017  00                    C			DB	?
 0018                        C	internat_block ENDS
			     C	
			     C	;
			     C	; Max size of the block returned by the INTERNATIONAL call
			     C	;
 = 0020                      C	internat_block_max	EQU	32
			     C	
			     C	include mi.INC
			     C	;	SCCSID = @(#)mi.asm	1.1 85/04/10
			     C	BREAK <Machine instruction, flag definitions and character types>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-54
Machine instruction, flag definitions and character types   

			     C	
 = 00CD                      C	mi_INT		EQU	0CDh
 = 00EA                      C	mi_Long_JMP	EQU	0EAh
 = 009A                      C	mi_Long_CALL	EQU	09Ah
 = 00CB                      C	mi_Long_RET	EQU	0CBh
 = 00C3                      C	mi_Near_RET	EQU	0C3h
			     C	
			     C	;			xxxxoditszxaxpxc
 = 0800                      C	f_Overflow	EQU	0000100000000000B
 = 0400                      C	f_Direction	EQU	0000010000000000B
 = 0200                      C	f_Interrupt	EQU	0000001000000000B
 = 0100                      C	f_Trace 	EQU	0000000100000000B
 = 0080                      C	f_Sign		EQU	0000000010000000B
 = 0040                      C	f_Zero		EQU	0000000001000000B
 = 0010                      C	f_Aux		EQU	0000000000010000B
 = 0004                      C	f_Parity	EQU	0000000000000100B
 = 0001                      C	f_Carry 	EQU	0000000000000001B
			     C	
 = 0001                      C	fChk	equ 1
 = 0002                      C	fDelim	equ 2
 = 0004                      C	fSpChk	equ 4
 = 0008                      C	fFCB	equ 8
			     C	
			     C	include filemode.INC
			     C	;	SCCSID = @(#)filemode.asm	1.1 85/04/10
			     C	;	SCCSID = @(#)filemode.asm	1.1 85/04/10
			     C	BREAK <Standard I/O assignments>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-55
Standard I/O assignments                                    

			     C	
 = 0000                      C	stdin	    EQU     0
 = 0001                      C	stdout	    EQU     1
 = 0002                      C	stderr	    EQU     2
 = 0003                      C	stdaux	    EQU     3
 = 0004                      C	stdprn	    EQU     4
			     C	
			     C	BREAK <File modes>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-56
File modes                                                  

			     C	
 = 000F                      C	access_mask	EQU 0FH
 = 0000                      C	open_for_read	EQU 00h
 = 0001                      C	open_for_write	EQU 01h
 = 0002                      C	open_for_both	EQU 02h
			     C	
 = 00F0                      C	sharing_mask	    EQU 0F0H
 = 0000                      C	sharing_compat	    EQU 000H
 = 0010                      C	sharing_deny_both   EQU 010H
 = 0020                      C	sharing_deny_write  EQU 020H
 = 0030                      C	sharing_deny_read   EQU 030H
 = 0040                      C	sharing_deny_none   EQU 040H
 = 0070                      C	sharing_net_FCB     EQU 070h
 = 0080                      C	sharing_no_inherit  EQU 080H
			     C	
			     C	BREAK <Extended Open>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-57
Extended Open                                               

			     C	
 = 0100                      C	no_code_page_check	  EQU 0100H
 = 2000                      C	int_24_error		  EQU 2000H
 = 4000                      C	auto_commit_write	  EQU 4000H
 = 0001                      C	ext_open_on		  EQU 01H
 = 0004                      C	ext_file_not_exists	  EQU 04H
 = 0002                      C	ext_open_I24_off	  EQU 02H
 = 0002                      C	io_mode_id		  EQU 00000010B
 = FE00                      C	reserved_bits_mask	  EQU 0FE00H
 = 000F                      C	exists_mask		  EQU 0FH
 = 00F0                      C	not_exists_mask 	  EQU 0F0H
 = 0001                      C	action_opened		  EQU  01H
 = 0002                      C	action_created_opened	  EQU  02H
 = 0003                      C	action_replaced_opened	  EQU  03H
			     C	
 = 0001                      C	ext_exists_open     EQU 01H
 = 0000                      C	ext_exists_fail     EQU 0H
 = 0010                      C	ext_nexists_create  EQU 10H
			     C	
			     C	
			     C	
			     C	ext_open_parm	   struc
 0000  00000000              C	ext_set_list	    dd ?
 0004  0000                  C	ext_num_of_parm     dw ?
 0006                        C	ext_open_parm	   ends
			     C	
			     C	
			     C	
			     C	
			     C	
			     C	include error.INC
			     C	;	SCCSID = @(#)error.asm	1.1 85/04/10
			     C	;	SCCSID = @(#)error.asm	1.1 85/04/10
			     C	BREAK <Xenix error codes>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-58
Xenix error codes                                           

			     C	
			     C	;
			     C	; XENIX calls all return error codes through AX.  If an error occurred then
			     C	; the carry bit will be set and the error code is in AX.  If no error occurred
			     C	; then the carry bit is reset and AX contains returned info.
			     C	;
			     C	; Since the set of error codes is being extended as we extend the operating
			     C	; system, we have provided a means for applications to ask the system for a
			     C	; recommended course of action when they receive an error.
			     C	;
			     C	; The GetExtendedError system call returns a universal error, an error
			     C	; location and a recommended course of action.	The universal error code is
			     C	; a symptom of the error REGARDLESS of the context in which GetExtendedError
			     C	; is issued.
			     C	;
			     C	
			     C	;
			     C	; These are the 2.0 error codes
			     C	;
 = 0001                      C	error_invalid_function		EQU	1
 = 0002                      C	error_file_not_found		EQU	2
 = 0003                      C	error_path_not_found		EQU	3
 = 0004                      C	error_too_many_open_files	EQU	4
 = 0005                      C	error_access_denied		EQU	5
 = 0006                      C	error_invalid_handle		EQU	6
 = 0007                      C	error_arena_trashed		EQU	7
 = 0008                      C	error_not_enough_memory 	EQU	8
 = 0009                      C	error_invalid_block		EQU	9
 = 000A                      C	error_bad_environment		EQU	10
 = 000B                      C	error_bad_format		EQU	11
 = 000C                      C	error_invalid_access		EQU	12
 = 000D                      C	error_invalid_data		EQU	13
			     C	;**** reserved			EQU	14	; *****
 = 000F                      C	error_invalid_drive		EQU	15
 = 0010                      C	error_current_directory 	EQU	16
 = 0011                      C	error_not_same_device		EQU	17
 = 0012                      C	error_no_more_files		EQU	18
			     C	;
			     C	; These are the universal int 24 mappings for the old INT 24 set of errors
			     C	;
 = 0013                      C	error_write_protect		EQU	19
 = 0014                      C	error_bad_unit			EQU	20
 = 0015                      C	error_not_ready 		EQU	21
 = 0016                      C	error_bad_command		EQU	22
 = 0017                      C	error_CRC			EQU	23
 = 0018                      C	error_bad_length		EQU	24
 = 0019                      C	error_Seek			EQU	25
 = 001A                      C	error_not_DOS_disk		EQU	26
 = 001B                      C	error_sector_not_found		EQU	27
 = 001C                      C	error_out_of_paper		EQU	28
 = 001D                      C	error_write_fault		EQU	29
 = 001E                      C	error_read_fault		EQU	30
 = 001F                      C	error_gen_failure		EQU	31
			     C	;
			     C	; These are the new 3.0 error codes reported through INT 24
			     C	;
 = 0020                      C	error_sharing_violation 	EQU	32
 = 0021                      C	error_lock_violation		EQU	33
 = 0022                      C	error_wrong_disk		EQU	34
 = 0023                      C	error_FCB_unavailable		EQU	35
 = 0024                      C	error_sharing_buffer_exceeded	EQU	36
 = 0025                      C	error_Code_Page_Mismatched	EQU	37    ; DOS 4.00 			;AN000;
 = 0026                      C	error_handle_EOF		EQU	38    ; DOS 4.00 			;AN000;
 = 0027                      C	error_handle_Disk_Full		EQU	39    ; DOS 4.00 			;AN000;
			     C	;
			     C	; New OEM network-related errors are 50-79
			     C	;
 = 0032                      C	error_not_supported		EQU	50
			     C	;
			     C	; End of INT 24 reportable errors
			     C	;
 = 0050                      C	error_file_exists		EQU	80
 = 0051                      C	error_DUP_FCB			EQU	81	; *****
 = 0052                      C	error_cannot_make		EQU	82
 = 0053                      C	error_FAIL_I24			EQU	83
			     C	;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-59
Xenix error codes                                           

			     C	; New 3.0 network related error codes
			     C	;
 = 0054                      C	error_out_of_structures 	EQU	84
 = 0055                      C	error_Already_assigned		EQU	85
 = 0056                      C	error_invalid_password		EQU	86
 = 0057                      C	error_invalid_parameter 	EQU	87
 = 0058                      C	error_NET_write_fault		EQU	88
 = 005A                      C	error_sys_comp_not_loaded	EQU	90    ; DOS 4.00				;AN000;
			     C	
			     C	BREAK <Interrupt 24 error codes>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-60
Interrupt 24 error codes                                    

			     C	
 = 0000                      C	error_I24_write_protect 	EQU	0
 = 0001                      C	error_I24_bad_unit		EQU	1
 = 0002                      C	error_I24_not_ready		EQU	2
 = 0003                      C	error_I24_bad_command		EQU	3
 = 0004                      C	error_I24_CRC			EQU	4
 = 0005                      C	error_I24_bad_length		EQU	5
 = 0006                      C	error_I24_Seek			EQU	6
 = 0007                      C	error_I24_not_DOS_disk		EQU	7
 = 0008                      C	error_I24_sector_not_found	EQU	8
 = 0009                      C	error_I24_out_of_paper		EQU	9
 = 000A                      C	error_I24_write_fault		EQU	0Ah
 = 000B                      C	error_I24_read_fault		EQU	0Bh
 = 000C                      C	error_I24_gen_failure		EQU	0Ch
			     C	; NOTE: Code 0DH is used by MT-DOS.
 = 000F                      C	error_I24_wrong_disk		EQU	0Fh
			     C	
			     C	; THE FOLLOWING ARE MASKS FOR THE AH REGISTER ON Int 24
			     C	
 = 0008                      C	Allowed_FAIL			EQU	00001000B
 = 0010                      C	Allowed_RETRY			EQU	00010000B
 = 0020                      C	Allowed_IGNORE			EQU	00100000B
			     C	;NOTE: ABORT is ALWAYS allowed
			     C	
 = 0001                      C	I24_operation			EQU	00000001B	;Z if READ,NZ if Write
 = 0006                      C	I24_area			EQU	00000110B	; 00 if DOS
			     C								; 01 if FAT
			     C								; 10 if root DIR
			     C								; 11 if DATA
 = 0080                      C	I24_class			EQU	10000000B	;Z if DISK, NZ if FAT or char
			     C	
			     C	BREAK <GetExtendedError CLASSes ACTIONs LOCUSs>
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-61
GetExtendedError CLASSes ACTIONs LOCUSs                     

			     C	
			     C	; Values for error CLASS
			     C	
 = 0001                      C	errCLASS_OutRes 	EQU	1	; Out of Resource
 = 0002                      C	errCLASS_TempSit	EQU	2	; Temporary Situation
 = 0003                      C	errCLASS_Auth		EQU	3	; Permission problem
 = 0004                      C	errCLASS_Intrn		EQU	4	; Internal System Error
 = 0005                      C	errCLASS_HrdFail	EQU	5	; Hardware Failure
 = 0006                      C	errCLASS_SysFail	EQU	6	; System Failure
 = 0007                      C	errCLASS_Apperr 	EQU	7	; Application Error
 = 0008                      C	errCLASS_NotFnd 	EQU	8	; Not Found
 = 0009                      C	errCLASS_BadFmt 	EQU	9	; Bad Format
 = 000A                      C	errCLASS_Locked 	EQU	10	; Locked
 = 000B                      C	errCLASS_Media		EQU	11	; Media Failure
 = 000C                      C	errCLASS_Already	EQU	12	; Collision with Existing Item
 = 000D                      C	errCLASS_Unk		EQU	13	; Unknown/other
			     C	
			     C	; Values for error ACTION
			     C	
 = 0001                      C	errACT_Retry		EQU	1	; Retry
 = 0002                      C	errACT_DlyRet		EQU	2	; Delay Retry, retry after pause
 = 0003                      C	errACT_User		EQU	3	; Ask user to regive info
 = 0004                      C	errACT_Abort		EQU	4	; abort with clean up
 = 0005                      C	errACT_Panic		EQU	5	; abort immediately
 = 0006                      C	errACT_Ignore		EQU	6	; ignore
 = 0007                      C	errACT_IntRet		EQU	7	; Retry after User Intervention
			     C	
			     C	; Values for error LOCUS
			     C	
 = 0001                      C	errLOC_Unk		EQU	1	; No appropriate value
 = 0002                      C	errLOC_Disk		EQU	2	; Random Access Mass Storage
 = 0003                      C	errLOC_Net		EQU	3	; Network
 = 0004                      C	errLOC_SerDev		EQU	4	; Serial Device
 = 0005                      C	errLOC_Mem		EQU	5	; Memory
			     C	
			     C	include syscall.INC
			     C	;	SCCSID = @(#)syscall.asm	1.1 85/04/10
			     C	;BREAK <system call definitions>
			     C	SUBTTL	system call definitions
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-62
system call definitions                                     

			     C	PAGE
			     C	
 = 0000                      C	Abort				EQU 0	;  0	  0
 = 0001                      C	Std_Con_Input			EQU 1	;  1	  1
 = 0002                      C	Std_Con_Output			EQU 2	;  2	  2
 = 0003                      C	Std_Aux_Input			EQU 3	;  3	  3
 = 0004                      C	Std_Aux_Output			EQU 4	;  4	  4
 = 0005                      C	Std_Printer_Output		EQU 5	;  5	  5
 = 0006                      C	Raw_Con_IO			EQU 6	;  6	  6
 = 0007                      C	Raw_Con_Input			EQU 7	;  7	  7
 = 0008                      C	Std_Con_Input_No_Echo		EQU 8	;  8	  8
 = 0009                      C	Std_Con_String_Output		EQU 9	;  9	  9
 = 000A                      C	Std_Con_String_Input		EQU 10	; 10	  A
 = 000B                      C	Std_Con_Input_Status		EQU 11	; 11	  B
 = 000C                      C	Std_Con_Input_Flush		EQU 12	; 12	  C
 = 000D                      C	Disk_Reset			EQU 13	; 13	  D
 = 000E                      C	Set_Default_Drive		EQU 14	; 14	  E
 = 000F                      C	FCB_Open			EQU 15	; 15	  F
 = 0010                      C	FCB_Close			EQU 16	; 16	 10
 = 0011                      C	Dir_Search_First		EQU 17	; 17	 11
 = 0012                      C	Dir_Search_Next 		EQU 18	; 18	 12
 = 0013                      C	FCB_Delete			EQU 19	; 19	 13
 = 0014                      C	FCB_Seq_Read			EQU 20	; 20	 14
 = 0015                      C	FCB_Seq_Write			EQU 21	; 21	 15
 = 0016                      C	FCB_Create			EQU 22	; 22	 16
 = 0017                      C	FCB_Rename			EQU 23	; 23	 17
 = 0019                      C	Get_Default_Drive		EQU 25	; 25	 19
 = 001A                      C	Set_DMA 			EQU 26	; 26	 1A
			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
			     C	;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
			     C	;									   ;
 = 001F                      C	Get_Default_DPB 		EQU 31	; 31	 1F
			     C	;									   ;
			     C	;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
 = 0021                      C	FCB_Random_Read 		EQU 33	; 33	 21
 = 0022                      C	FCB_Random_Write		EQU 34	; 34	 22
 = 0023                      C	Get_FCB_File_Length		EQU 35	; 35	 23
 = 0024                      C	Get_FCB_Position		EQU 36	; 36	 24
 = 0025                      C	Set_Interrupt_Vector		EQU 37	; 37	 25
 = 0026                      C	Create_Process_Data_Block	EQU 38	; 38	 26
 = 0027                      C	FCB_Random_Read_Block		EQU 39	; 39	 27
 = 0028                      C	FCB_Random_Write_Block		EQU 40	; 40	 28
 = 0029                      C	Parse_File_Descriptor		EQU 41	; 41	 29
 = 002A                      C	Get_Date			EQU 42	; 42	 2A
 = 002B                      C	Set_Date			EQU 43	; 43	 2B
 = 002C                      C	Get_Time			EQU 44	; 44	 2C
 = 002D                      C	Set_Time			EQU 45	; 45	 2D
 = 002E                      C	Set_Verify_On_Write		EQU 46	; 46	 2E
			     C	; Extended functionality group
 = 002F                      C	Get_DMA 			EQU 47	; 47	 2F
 = 0030                      C	Get_Version			EQU 48	; 48	 30
 = 0031                      C	Keep_Process			EQU 49	; 49	 31
			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
			     C	;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
			     C	;									   ;
 = 0032                      C	Get_DPB 			EQU 50	; 50	 32
			     C	;									   ;
			     C	;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
 = 0033                      C	Set_CTRL_C_Trapping		EQU 51	; 51	 33
 = 0034                      C	Get_InDOS_Flag			EQU 52	; 52	 34
 = 0035                      C	Get_Interrupt_Vector		EQU 53	; 53	 35
 = 0036                      C	Get_Drive_Freespace		EQU 54	; 54	 36
 = 0037                      C	Char_Oper			EQU 55	; 55	 37
 = 0038                      C	International			EQU 56	; 56	 38
			     C	;   Directory Group
 = 0039                      C	MKDir				EQU 57	; 57	 39
 = 003A                      C	RMDir				EQU 58	; 58	 3A
 = 003B                      C	CHDir				EQU 59	; 59	 3B
			     C	;   File Group
 = 003C                      C	Creat				EQU 60	; 60	 3C
 = 003D                      C	Open				EQU 61	; 61	 3D
 = 003E                      C	Close				EQU 62	; 62	 3E
 = 003F                      C	Read				EQU 63	; 63	 3F
 = 0040                      C	Write				EQU 64	; 64	 40
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-63
system call definitions                                     

 = 0041                      C	Unlink				EQU 65	; 65	 41
 = 0042                      C	LSeek				EQU 66	; 66	 42
 = 0043                      C	CHMod				EQU 67	; 67	 43
 = 0044                      C	IOCtl				EQU 68	; 68	 44
 = 0045                      C	XDup				EQU 69	; 69	 45
 = 0046                      C	XDup2				EQU 70	; 70	 46
 = 0047                      C	Current_Dir			EQU 71	; 71	 47
			     C	;    Memory Group
 = 0048                      C	Alloc				EQU 72	; 72	 48
 = 0049                      C	Dealloc 			EQU 73	; 73	 49
 = 004A                      C	Setblock			EQU 74	; 74	 4A
			     C	;    Process Group
 = 004B                      C	Exec				EQU 75	; 75	 4B
 = 004C                      C	Exit				EQU 76	; 76	 4C
 = 004D                      C	WaitProcess			EQU 77	; 77	 4D
 = 004E                      C	Find_First			EQU 78	; 78	 4E
			     C	;   Special Group
 = 004F                      C	Find_Next			EQU 79	; 79	 4F
			     C	; SPECIAL SYSTEM GROUP
			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
			     C	;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
			     C	;									   ;
 = 0050                      C	Set_Current_PDB 		EQU 80	; 80	 50
 = 0051                      C	Get_Current_PDB 		EQU 81	; 81	 51
 = 0052                      C	Get_In_Vars			EQU 82	; 82	 52
 = 0053                      C	SetDPB				EQU 83	; 83	 53
			     C	;									   ;
			     C	;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
 = 0054                      C	Get_Verify_On_Write		EQU 84	; 84	 54
			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
			     C	;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
			     C	;									   ;
 = 0055                      C	Dup_PDB 			EQU 85	; 85	 55
			     C	;									   ;
			     C	;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
 = 0056                      C	Rename				EQU 86	; 86	 56
 = 0057                      C	File_Times			EQU 87	; 87	 57
 = 0058                      C	AllocOper			EQU 88	; 88	 58
			     C	; Network extention system calls
 = 0059                      C	GetExtendedError		EQU 89	; 89	 59
 = 005A                      C	CreateTempFile			EQU 90	; 90	 5A
 = 005B                      C	CreateNewFile			EQU 91	; 91	 5B
 = 005C                      C	LockOper			EQU 92	; 92	 5C Lock and Unlock
			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
			     C	;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
			     C	;									   ;
 = 005D                      C	ServerCall			EQU 93	; 93	 5D CommitAll, ServerDOSCall,
			     C						;	    CloseByName, CloseUser,
			     C						;	    CloseUserProcess,
			     C						;	    GetOpenFileList
			     C	;									   ;
			     C	;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
 = 005E                      C	UserOper			EQU 94	; 94	 5E Get and Set
 = 005F                      C	AssignOper			EQU 95	; 95	 5F On, Off, Get, Set, Cancel
 = 0060                      C	xNameTrans			EQU 96	; 96	 60
 = 0061                      C	PathParse			EQU 97	; 97	 61
 = 0062                      C	GetCurrentPSP			EQU 98	; 98	 62
 = 0063                      C	Hongeul 			EQU 99	; 99	 63
 = 0063                      C	ECS_CALL			EQU 99	; 99	 63  ;; DBCS support
			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
			     C	;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
			     C	;									   ;
 = 0064                      C	Set_Printer_Flag		EQU 100 ; 100	 64
			     C	;									   ;
			     C	;	     C	A  V  E  A  T	  P  R	O  G  R  A  M  M  E  R		   ;
			     C	;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;
 = 0065                      C	GetExtCntry			EQU 101 ; 101	 65
 = 0066                      C	GetSetCdPg			EQU 102 ; 102	 66
 = 0067                      C	ExtHandle			EQU 103 ; 103	 67
 = 0068                      C	Commit				EQU 104 ; 104	 68
 = 0069                      C	GetSetMediaID			EQU 105 ; 105	 69
 = 006B                      C	IFS_IOCTL			EQU 107 ; 107	 6B
 = 006C                      C	ExtOpen 			EQU 108 ; 108	 6C
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-64
system call definitions                                     

			     C	;
			     C	;
 = 00F8                      C	Set_Oem_Handler 		EQU 248 ; 248	 F8
 = 00F9                      C	OEM_C1				EQU 249 ; 249	 F9
 = 00FA                      C	OEM_C2				EQU 250 ; 250	 FA
 = 00FB                      C	OEM_C3				EQU 251 ; 251	 FB
 = 00FC                      C	OEM_C4				EQU 252 ; 252	 FC
 = 00FD                      C	OEM_C5				EQU 253 ; 253	 FD
 = 00FE                      C	OEM_C6				EQU 254 ; 254	 FE
 = 00FF                      C	OEM_C7				EQU 255 ; 255	 FF
			     C	
			     C	
			     C	SUBTTL
			     C	
				include debequ.asm
			     C	;======================= START OF SPECIFICATIONS =========================
			     C	;
			     C	; MODULE NAME: DEBEQU.SAL
			     C	;
			     C	; DESCRIPTIVE NAME: EQUATES NEEDED BY DEBUG
			     C	;
			     C	; FUNCTION: PROVIDES EQUATES NEEDED BY DEBUG
			     C	;
			     C	; ENTRY POINT: NA
			     C	;
			     C	; INPUT: NA
			     C	;
			     C	; EXIT NORMAL: NA
			     C	;
			     C	; EXIT ERROR: NA
			     C	;
			     C	; INTERNAL REFERENCES: NA
			     C	;
			     C	; EXTERNAL REFERENCES: NA
			     C	;
			     C	; NOTES: THIS MODULE IS TO BE PREPPED BY SALUT WITH THE "PR" OPTIONS.
			     C	;	 LINK DEBUG+DEBCOM1+DEBCOM2+DEBCOM3+DEBASM+DEBUASM+DEBERR+
			     C	;	      DEBCONST+DEBDATA+DEBMES
			     C	;
			     C	; REVISION HISTORY:
			     C	;
			     C	;	AN000	VERSION 4.00 - REVISIONS MADE RELATE TO THE FOLLOWING:
			     C	;
			     C	;				- IMPLEMENT DBCS HANDLING	DMS:6/17/87
			     C	;				- IMPLEMENT MESSAGE RETRIEVER	DMS:6/17/87
			     C	;				- > 32 MB SUPPORT		DMS:6/17/87
			     C	;
			     C	; COPYRIGHT: "MS DOS DEBUG UTILITY"
			     C	;	     "VERSION 4.00 (C) COPYRIGHT 1988 Microsoft"
			     C	;	     "LICENSED MATERIAL - PROPERTY OF Microsoft  "
			     C	;
			     C	;======================= END OF SPECIFICATIONS ===========================
			     C	
			     C	
			     C	;IBMVER EQU	TRUE		    ; These switches get set in version.inc
			     C	;MSVER	EQU	FALSE		    ; NOT HERE !!!
			     C	
			     C		INCLUDE SYSVER.INC
			     C	
			     C	
			     C	
 =                           C	SYSVER		   EQU	FALSE		; if true, i/o direct to bios
			     C						; so DOS can be debugged
			     C	
			     C	
			     C	
 =                           C	IBMJAPAN EQU	FALSE
			     C	
 =                           C	SETCNTC EQU	TRUE			; If this is FALSE, DEBUG will not set
			     C						; the Control C int vector
			     C	
 = 002D                      C	PROMPT	EQU	"-"
 = 005C                      C	FCB	EQU	5CH
 =                           C	EXEFCB	EQU	FCB
 = 0050                      C	BUFLEN	EQU	80			; Maximum length of line input buffer
 = 000A                      C	BPMAX	EQU	10			; Maximum number of breakpoints
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-65
                                                            

 = 0032                      C	BPLEN	EQU	5*BPMAX 		; Length of breakpoint table
 = 000E                      C	REGTABLEN EQU	14			; Number of registers
 = 0000                      C	SEGDIF	EQU	0
 = 0200                      C	BUFSIZ	EQU	512
			     C	
 = 5842                      C	BXREG	EQU	"B"+5800H		; "BX"
 = 5042                      C	BPREG	EQU	"B"+5000H		; "BP"
 = 4953                      C	SIREG	EQU	"S"+4900H		; "SI"
 = 4944                      C	DIREG	EQU	"D"+4900H		; "DI"
 = 2C00                      C	COMMA	EQU	2C00H
 = 0023                      C	OPBUFLEN EQU	35
			     C	
			     C		IF	IBMVER
 = 0021                      C	MASK_PORT   EQU     21H 		; 8259 interrupt control register
 = 00FF                      C	INT_MASK    EQU     11111111B		; Disable ALL interrupts
			     C		ENDIF
			     C	
 = 000D                      C	CR	EQU	13			;CARRIAGE RETURN
 = 000A                      C	LF	EQU	10			;LINE FEED
 = 0009                      C	CHAR_TAB EQU	9			;TAB
 = 0008                      C	CHAR_BACKSPACE EQU 8			;BACKSPACE CHARACTER
 = 001A                      C	CHAR_EOF EQU	1AH			;END OF FILE CHARACTER
 = 007F                      C	CHAR_RUBOUT EQU 7FH			;RUBOUT CHARACTER
			     C	
 = 003D                      C	CHAR_EQUAL EQU	"="			;CHARACTER EQUAL
 = 002D                      C	CHAR_MINUS EQU	"-"			;MINUS CHARACTER
 = 0020                      C	CHAR_BLANK EQU	" "			;BLANK CHARACTER
 = 0022                      C	DOUBLE_QUOTE EQU '"'			;DOUBLE QUOTE CHARACTER
 = 0027                      C	SINGLE_QUOTE EQU "'"			;SINGLE QUOTE CHARACTER
 = 002C                      C	CHAR_COMMA EQU	","			;CHARACTER COMMA
 = 002E                      C	CHAR_PERIOD EQU "."			;CHARACTER PERIOD
 = 003A                      C	CHAR_COLON EQU	":"			;CHARACTER COLON
 = 003B                      C	CHAR_SEMICOLON EQU ";"			;CHARACTER SEMICOLON
 = 005B                      C	CHAR_LEFT_BRACKET EQU "["		;CHARACTER LEFT BRACKET
 = 0040                      C	CHAR_AT_SIGN EQU "@"			;CHARACTER "AT" SIGN
 = 0030                      C	CHAR_ZERO EQU	"0"			;CHARACTER ZERO
			     C	
 = 0061                      C	LOWER_A EQU	"a"			;LOWER CASE CHARACTER "a"
 = 007A                      C	LOWER_Z EQU	"z"			;LOWER CASE CHARACTER "z"
			     C	
 = 0041                      C	UPPER_A EQU	"A"			;UPPER CASE CHARACTER "A"
 = 0043                      C	UPPER_C EQU	"C"			;UPPER CASE CHARACTER "C"
 = 0045                      C	UPPER_E EQU	"E"			;UPPER CASE CHARACTER "E"
 = 0046                      C	UPPER_F EQU	"F"			;UPPER CASE CHARACTER "F"
 = 004C                      C	UPPER_L EQU	"L"			;UPPER CASE CHARACTER "L"
 = 004D                      C	UPPER_M EQU	"M"			;UPPER CASE CHARACTER "M"
 = 004E                      C	UPPER_N EQU	"N"			;UPPER CASE CHARACTER "N"
 = 0050                      C	UPPER_P EQU	"P"			;UPPER CASE CHARACTER "P"
 = 0053                      C	UPPER_S EQU	"S"			;UPPER CASE CHARACTER "S"
 = 0058                      C	UPPER_X EQU	"X"			;UPPER CASE CHARACTER "X"
 = 005A                      C	UPPER_Z EQU	"Z"			;UPPER CASE CHARACTER "Z"
			     C	
 = 0001                      C	VEC_SING_STEP EQU 1			;ID OF THE SINGLE STEP VECTOR
 = 0003                      C	VEC_BREAKPOINT EQU 3			;ID OF THE BREAKPOINT VECTOR
 = 0022                      C	VEC_TERM_ADDR EQU 22H			;ID OF THE TERMINATE ADDRESS VECTOR
 = 0023                      C	VEC_CTRL_BREAK EQU 23H			;ID OF THE CTRL BREAK EXIT ADDRESS VECTOR
 = 0024                      C	VEC_CRIT_ERR EQU 24H			;ID OF THE CRITICAL ERROR HANDLER VECTOR
 = 0025                      C	VEC_PRIMITIVE_DISK_READ EQU 25H 	;ID OF THE PRIMITAVE DISK READ VECTOR
 = 0026                      C	VEC_PRIMITIVE_DISK_WRITE EQU 26H	;ID OF THE PRIMITAVE DISK WRITE VECTOR
 = 440D                      C	GENERIC_IOCTL EQU 440DH 		;an000;Generic IOCtl function
 = 0008                      C	READ_WRITE EQU	08H			;an000;read/write relative sectors
 = 0000                      C	READ_SECTOR EQU 00H			;an000;currently unknown value
 = 0000                      C	WRITE_SECTOR EQU 00H			;an000;currently unknown value
			     C	
 = 0001                      C	SET_DRIVEID_OPTION EQU 1		;AL VALUE FOR "PARSE FILENAME" FUNCTION
 = 0000                      C	LSEEK_FROM_START EQU 0			;AL VALUE FOR "LSEEK" FUNCTION
 = 0002                      C	LSEEK_EOF_OPTION EQU 2			;AL VALUE FOR "LSEEK" FUNCTION
			     C	
			     C	;======================= EMS Equates Begin ===============================
			     C	
 = 0040                      C	EMS_GET_MAN_STAT equ 40h		;an000;function 40h, int 67h
 = 0042                      C	EMS_UNALL_PG_CNT equ 42h		;an000;funciton 42h, int 67h
 = 0043                      C	EMS_HAN_ALLOC equ 43h			;an000;function 43h, int 67h
 = 0044                      C	EMS_MAP_MEMORY equ 44h			;an000;function 44h, int 67h
 = 0045                      C	EMS_PAGE_DEALL equ 45h			;an000;function 45h, int 67h
 = 0046                      C	EMS_VERSION equ 46h			;an000;function 46h, int 67h
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-66
                                                            

 = 0047                      C	EMS_SAVE_PAGE_MAP equ 47h		;an000;function 47h, int 67h
 = 0048                      C	EMS_REST_PAGE_MAP equ 48h		;an000;function 48h, int 67h
 = 004B                      C	EMS_HANDLE_CNT equ 4bh			;an000;function 4bh, int 67h
 = 004D                      C	EMS_HANDLE_PAGES equ 4dh		;an000;function 4dh, int 67h
 = 004E                      C	EMS_GET_SET_PG_MP equ 4eh		;an000;function 4eh, int 67h
 = 0000                      C	EMS_GET_PAGE_MAP equ 00h		;an000;sub function 00h of
 = 5800                      C	EMS_PG_FRAME equ 5800h			;an000;function 58h, int 67h
			     C						;      function 4eh, int 67h
 = 0001                      C	EMS_SET_PAGE_MAP equ 01h		;an000;sub function 01h of
			     C						;      function 4eh, int 67h
 = 00FF                      C	EMS_HANDLE_TOTAL equ 0ffh		;an000;total possible handles
			     C	
 = 0040                      C	EMS_LIM_40 equ	040h			;an000;LIM 4.0 I.D.
			     C	
 = 0080                      C	XM_ERR80 equ	80h			;an000;error message type
 = 0083                      C	XM_ERR83 equ	83h			;an000;error message type
 = 0084                      C	XM_ERR84 equ	84h			;an000;error message type
 = 0085                      C	XM_ERR85 equ	85h			;an000;error message type
 = 0086                      C	XM_ERR86 equ	86h			;an000;error message type
 = 0087                      C	XM_ERR87 equ	87h			;an000;error message type
 = 0088                      C	XM_ERR88 equ	88h			;an000;error message type
 = 0089                      C	XM_ERR89 equ	89h			;an000;error message type
 = 008A                      C	XM_ERR8A equ	8Ah			;an000;error message type
 = 008B                      C	XM_ERR8B equ	8Bh			;an000;error message type
 = 008D                      C	XM_ERR8D equ	8Dh			;an000;error message type
 = 008E                      C	XM_ERR8E equ	8Eh			;an000;error message type
 = 008F                      C	XM_ERR8F equ	8Fh			;an000;error message type
 = 00FF                      C	XM_NOT_INST equ 0ffh			;an000;EMS not inst
			     C	
			     C	;======================= EMS Equates End =================================
			     C	
				
				
 0000				CODE	SEGMENT PUBLIC BYTE
 0000				CODE	ENDS
				
 0000				CONST	SEGMENT PUBLIC BYTE
 0000				CONST	ENDS
				
 0000				CSTACK	SEGMENT STACK
 0000				CSTACK	ENDS
				
 0000				DATA	SEGMENT PUBLIC BYTE
				
					extrn xm_page:byte			;an000;page count to allocate
					extrn xm_log:byte			;an000;log. page to map
					extrn xm_phy:byte			;an000;phy. page to map
					extrn xm_handle:word			;an000;handle to map
					extrn xm_handle_ret:word		;an000;handle created
				
					extrn xm_page_cnt:word			;an000;page count
					extrn xm_handle_pages_buf:byte		;an000;holds handles and pages
					extrn xm_frame:word			;an000;EMS frame value
					extrn xm_deall_han:word 		;an000;handle to deallocate
					extrn xm_alloc_pg:word			;an000;pages allocated
					extrn xm_total_pg:word			;an000;total pages possible
					extrn xm_han_alloc:word 		;an000;handles allocated
					extrn xm_han_total:word 		;an000;total handles possible
				
					extrn	  xm_han_ret_ptr:word		;an000;prints handle created
					extrn	  xm_mapped_ptr:word		;an000;prints log/phy pages
					extrn	  xm_page_seg_ptr:word		;an000;Frame seg status
					extrn	  xm_deall_ptr:word		;an000;Handle deallocation
					extrn	  xm_unall_ptr:word		;an000;prints page status
					extrn	  xm_han_alloc_ptr:word 	;an000;print handle status
				
					extrn	  xm_err80_ptr:word		;an000;ems error message
					extrn	  xm_err83_ptr:word		;an000;ems error message
					extrn	  xm_err84_ptr:word		;an000;ems error message
					extrn	  xm_err85_ptr:word		;an000;ems error message
					extrn	  xm_err86_ptr:word		;an000;ems error message
					extrn	  xm_err87_ptr:word		;an000;ems error message
					extrn	  xm_err88_ptr:word		;an000;ems error message
					extrn	  xm_err89_ptr:word		;an000;ems error message
					extrn	  xm_err8a_ptr:word		;an000;ems error message
					extrn	  xm_err8b_ptr:word		;an000;ems error message
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-67
                                                            

					extrn	  xm_err8d_ptr:word		;an000;ems error message
					extrn	  xm_err8e_ptr:word		;an000;ems error message
					extrn	  xm_errff_ptr:word		;an000;ems error message
					extrn	  xm_err_gen_ptr:word		;an000;ems error message
					extrn	  xm_parse_err_ptr:word 	;an000;input error message
					extrn	  xm_status_ptr:word		;an000;prints status of EMS
				
 0000				DATA	ENDS
				
				DG	GROUP	CODE,CONST,CSTACK,DATA
				
 0000				CODE	SEGMENT PUBLIC BYTE
				ASSUME	CS:DG,DS:DG,ES:DG,SS:DG
				
					public	  debems			;an000;entry point
					extrn	  std_printf:near		;an000;message retriever
					extrn	  gethx:near			;an000;ASCII to bin conversion
					extrn	  inbuf:near			;an000;input command line
					extrn	  scanb:near			;an000;scan off blanks
					extrn	  scanp:near			;an000;scan for parm
					extrn	  perr:near			;an000;print ^ error
					extrn	  geteol:near
					extrn	  crlf:near			;an000;prints a cr,lf
				
				
 0000				DEBEMS: 					;an000;entry to module
				
 0000  E8 0000 E			call SCANP				;an000;scan for M or S parm
				;	$if  z					;an000;no parms found
 0003  75 05				JNZ $$IF1
 0005  E8 01D6 R			     call XM_PARSE_ERROR		;an000;tell user of error
				;	$else					;an000;
 0008  EB 2D				JMP SHORT $$EN1
 000A				$$IF1:
 000A  8A 04				     mov  al,[si]			;an000;grab parm
 000C  3C 4D				     cmp  al,"M"			;an000;is it MAP?
				;	     $if  e				;an000;yes
 000E  75 06				     JNE $$IF3
 0010  46					  inc  si			;an000;point to next byte
 0011  E8 0059 R				  call XM_EMS_MAP		;an000;
				;	     $else				;an000;
 0014  EB 21				     JMP SHORT $$EN3
 0016				$$IF3:
 0016  3C 53					  cmp  al,"S"			;an000;is it a status check?
				;		  $if  e			;an000;yes
 0018  75 06					  JNE $$IF5
 001A  46					       inc  si			;an000;point to next byte
 001B  E8 01DD R				       call XM_EMS_STATUS	;an000;
				;		  $else 			;an000;
 001E  EB 17					  JMP SHORT $$EN5
 0020				$$IF5:
 0020  3C 44					       cmp  al,"D"		;an000;Deallocate pages?
				;		       $if  e			;an000;yes
 0022  75 06					       JNE $$IF7
 0024  46						    inc   si		;an000;point to next byte
 0025  E8 029F R					    call  XM_EMS_DEALL	;an000;
				;		       $else			;an000;
 0028  EB 0D					       JMP SHORT $$EN7
 002A				$$IF7:
 002A  3C 41						    cmp  al,"A" 	;an000;Allocate pages?
				;			    $if  e		;an000;yes
 002C  75 06						    JNE $$IF9
 002E  46							 inc  si	;an000;point to next byte
 002F  E8 0038 R						 call XM_EMS_ALLOC    ;an000;
				;			    $else		;an000;
 0032  EB 03						    JMP SHORT $$EN9
 0034				$$IF9:
 0034  E8 0000 E						call GETEOL	;an000;check out parm
				;			    $endif		;an000;
 0037				$$EN9:
				;		       $endif			;an000;
 0037				$$EN7:
				;		  $endif			;an000;
 0037				$$EN5:
				;	    $endif				;an000;
 0037				$$EN3:
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-68
                                                            

				;	$endif					;an000;
 0037				$$EN1:
				
 0037  C3				ret					;an000;return to caller
				
				
				
				;=========================================================================
				; XM_EMS_ALLOC	  :    This function will provide the user the
				;		       capability to set and change EMS logical and
				;		       physical pages within page frame 0.
				;
				;	Inputs:   none
				;
				;	Outputs:  EMS page frames set or altered
				;
				;	Date:	  6/24/87
				;=========================================================================
				
 0038				XM_EMS_ALLOC	proc	near			;an000;XM functions
				
 0038  E8 007C R			call XM_GET_MAN_STATUS			;an000;see if EMS active
				;	$if  nc 				;an000;EMS active
 003B  72 18				JC $$IF16
 003D  E8 009B R			     call XM_PAGE_PROMPT		;an000;get pages to allocate
 0040  E8 010B R			     call XM_GET_HAN_ALLOC		;an000;allocate pages
 0043  89 16 ---- E			     mov  dg:XM_HANDLE_RET,dx		;an000;save handle returned
				;	     $if  z				;an000;good return
 0047  75 07				     JNZ $$IF17
 0049  9C					  pushf 			;an000;save our flags
 004A  E8 0132 R				  call XM_DISP1 		;an000;tell user results
 004D  9D					  popf				;an000;restore our flags
				;	     $else				;an000;
 004E  EB 03				     JMP SHORT $$EN17
 0050				$$IF17:
 0050  E8 0140 R				  call XM_ERROR 		;an000;print error message
				;	     $endif				;an000;
 0053				$$EN17:
				;	$else					;an000;EMS not active
 0053  EB 03				JMP SHORT $$EN16
 0055				$$IF16:
 0055  E8 0140 R			     call XM_ERROR			;an000;say why not active
				;	$endif					;an000;
 0058				$$EN16:
				
 0058  C3				ret					;an000;return to caller
				
 0059				XM_EMS_ALLOC	  endp				;an000;
				
				
				;=========================================================================
				; XM_EMS_MAP	  :    This function will provide the user the
				;		       capability to set and change EMS logical and
				;		       physical pages within page frame 0.
				;
				;	Inputs:   none
				;
				;	Outputs:  EMS page frames set or altered
				;
				;	Date:	  6/24/87
				;=========================================================================
				
 0059				XM_EMS_MAP	proc	near			;an000;XM functions
				
 0059  E8 007C R			call XM_GET_MAN_STATUS			;an000;see if EMS active
				;	$if  nc 				;an000;EMS active
 005C  72 1A				JC $$IF22
 005E  E8 00B7 R			     call XM_LOG_PROMPT 		;an000;get logical page
 0061  E8 00D3 R			     call XM_PHY_PROMPT 		;an000;get physical page
 0064  E8 00EF R			     call XM_HAN_PROMPT 		;an000;get handle
 0067  E8 011A R			     call XM_MAP_MEMORY 		;an000;map the page
				;	     $if  z				;an000;good return
 006A  75 07				     JNZ $$IF23
 006C  9C					  pushf 			;an000;save our flags
 006D  E8 0139 R				  call XM_DISP2 		;an000;tell user results
 0070  9D					  popf				;an000;restore our flags
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-69
                                                            

				;	     $else				;an000;
 0071  EB 03				     JMP SHORT $$EN23
 0073				$$IF23:
 0073  E8 0140 R				   call XM_ERROR		;an000;tell error
				;	     $endif				;an000;
 0076				$$EN23:
				;	$else					;an000;EMS not active
 0076  EB 03				JMP SHORT $$EN22
 0078				$$IF22:
 0078  E8 0140 R			     call XM_ERROR			;an000;say why not active
				;	$endif					;an000;
 007B				$$EN22:
				
 007B  C3				ret					;an000;return to caller
				
 007C				XM_EMS_MAP	  endp				;an000;
				
				;=========================================================================
				; XM_GET_MAN_STATUS :  This routine will determine if EMS is active for
				;		       this session.
				;
				;	Called Procs:  none
				;
				;	Inputs:        none
				;
				;	Outputs:       Z  - no error
				;		       NZ - error
				;		       AH - error message number
				;
				;	Date:	       6/24/87
				;=========================================================================
				
 007C				XM_GET_MAN_STATUS proc near			;an000;see if EMS active
				
 007C  1E				push	ds				;an000;save ds - we stomp it
 007D  B8 0000				mov	ax,00h				;an000;set ax to 0
 0080  8E D8				mov	ds,ax				;an000;set ds to 0
 0082  83 3E 019C 00			cmp	ds:word ptr[067h*4+0],0 	;an000;see if int 67h is there
 0087  1F				pop	ds				;an000;restore ds
				;	$if	e				;an000;EMS not installed
 0088  75 05				JNE $$IF28
 008A  F9					stc				;an000;flag no ems
 008B  B4 FF					mov	ah,XM_NOT_INST		;an000;signal EMS not installed
				;	$else					;an000;
 008D  EB 0B				JMP SHORT $$EN28
 008F				$$IF28:
 008F  E8 0282 R				call	XM_INSTALL_CHECK	;an000;see if EMS installed
				;		$if	z			;AN000;IS EMS INSTALLED
 0092  75 03					JNZ $$IF30
 0094  F8						clc			;AN000;EMS INSTALLED - FLAG IT
				;		$else				;an000;
 0095  EB 03					JMP SHORT $$EN30
 0097				$$IF30:
 0097  F9						stc			;AN000;FLAG EMS NOT INSTALLED
 0098  B4 FF						mov  ah,XM_NOT_INST	;an000;signal EMS not installed
				;		$endif				;an000;
 009A				$$EN30:
				;	$endif					;an000;
 009A				$$EN28:
				
 009A  C3				RET					;AN000;RETURN TO CALLER
				
				
 009B				XM_GET_MAN_STATUS endp				;an000;
				
				
				
				;=========================================================================
				; XM_PAGE_PROMPT :     This routine prompts the user for the number of
				;		       pages to be allocated, if he desires a new handle.
				;		       This routine will determine whether or not the other
				;		       prompt messages will be displayed.
				;
				;	Called Procs:  STD_PRINTF
				;		       XM_PARSE
				;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-70
                                                            

				;	Inputs:        none
				;
				;	Outputs:       XM_PAGE_FLAG
				;		       XM_PAGE_BUF
				;		       XM_PAGE
				;
				;	Date:	       6/24/87
				;=========================================================================
				
 009B				XM_PAGE_PROMPT	  proc near			;an000;prompt user for number
										;      of pages to allocate
 009B  E8 0000 E			call SCANB				;an000;see if parm entered
				;	$if  nz 				;an000;if parm found
 009E  74 13				JZ $$IF34
 00A0  B9 0002				     mov  cx,02 			;an000;bytes to parse
 00A3  E8 0000 E			     call GETHX 			;an000;get hex value
				;	     $if  c				;an000;no an error occurred
 00A6  73 05				     JNC $$IF35
 00A8  E8 0000 E				  call PERR			;an000;display ^ error
				;	     $else				;an000;
 00AB  EB 04				     JMP SHORT $$EN35
 00AD				$$IF35:
 00AD  88 16 ---- E				  mov  dg:XM_PAGE,dl		;an000;save page count
				;	     $endif				;an000;
 00B1				$$EN35:
				;	$else					;an000;
 00B1  EB 03				JMP SHORT $$EN34
 00B3				$$IF34:
 00B3  E8 0000 E			     call PERR				;an000;display ^ error
				;	$endif					;an000;
 00B6				$$EN34:
				
 00B6  C3				ret					;an000;return to caller
				
 00B7				XM_PAGE_PROMPT	  endp				;an000;
				
				
				;=========================================================================
				; XM_LOG_PROMPT :      This routine prompts the user for the number of the
				;		       logical page that is to be mapped in EMS.  This
				;		       routine will not be performed if a page count
				;		       was specified.
				;
				;	Called Procs:  STD_PRINTF
				;		       XM_PARSE
				;
				;	Inputs:        none
				;
				;	Outputs:       XM_LOG_BUF
				;		       XM_LOG
				;
				;	Date:	       6/24/87
				;=========================================================================
				
				
 00B7				XM_LOG_PROMPT	  proc near			;an000;prompt user for the
										;      logical page to be
										;      mapped
 00B7  E8 0000 E			call SCANB				;an000;see if parm entered
				;	$if  nz 				;an000;parm entered
 00BA  74 13				JZ $$IF40
 00BC  B9 0002				     mov  cx,02 			;an000;bytes to parse
 00BF  E8 0000 E			     call GETHX 			;an000;get hex value
				;	     $if  c				;an000;no an error occurred
 00C2  73 05				     JNC $$IF41
 00C4  E8 0000 E				  call PERR			;an000;display ^ error
				;	     $else				;an000;
 00C7  EB 04				     JMP SHORT $$EN41
 00C9				$$IF41:
 00C9  88 16 ---- E				  mov  dg:XM_LOG,dl		;an000;save logical page
				;	     $endif				;an000;
 00CD				$$EN41:
				;	$else					;an000;
 00CD  EB 03				JMP SHORT $$EN40
 00CF				$$IF40:
 00CF  E8 0000 E			     call PERR				;an000;display ^ error
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-71
                                                            

				;	$endif					;an000;
 00D2				$$EN40:
				
 00D2  C3				ret					;an000;return to caller
				
 00D3				XM_LOG_PROMPT	  endp				;an000;
				
				
				;=========================================================================
				; XM_PHY_PROMPT :      This routine prompts the user for the number of the
				;		       physical page that is to be mapped in EMS.  This
				;		       routine will not be performed if a page count
				;		       was specified.
				;
				;	Called Procs:  STD_PRINTF
				;		       XM_PARSE
				;
				;	Inputs:        none
				;
				;	Outputs:       XM_PHY_BUF
				;		       XM_PHY
				;
				;	Date:	       6/24/87
				;=========================================================================
				
				
 00D3				XM_PHY_PROMPT	  proc near			;an000;prompt user for the
										;      physical page to be
										;      mapped
 00D3  E8 0000 E			call SCANB				;an000;see if parm entered
				;	$if  nz 				;an000;parm found
 00D6  74 13				JZ $$IF46
 00D8  B9 0002				     mov  cx,02 			;an000;bytes to parse
 00DB  E8 0000 E			     call GETHX 			;an000;get hex value
				;	     $if  c				;an000;no an error occurred
 00DE  73 05				     JNC $$IF47
 00E0  E8 0000 E				  call PERR			;an000;display ^ error
				;	     $else				;an000;
 00E3  EB 04				     JMP SHORT $$EN47
 00E5				$$IF47:
 00E5  88 16 ---- E				  mov  dg:XM_PHY,dl		;an000;save logical page
				;	     $endif				;an000;
 00E9				$$EN47:
				;	$else					;an000;
 00E9  EB 03				JMP SHORT $$EN46
 00EB				$$IF46:
 00EB  E8 0000 E			     call PERR				;an000;
				;	$endif					;an000;
 00EE				$$EN46:
				
 00EE  C3				ret					;an000;return to caller
				
 00EF				XM_PHY_PROMPT	  endp				;an000;
				
				
				;=========================================================================
				; XM_HAN_PROMPT :      This routine prompts the user for the number of the
				;		       handle that the mapping is to occur on. This
				;		       routine will not be performed if a page count
				;		       was specified.
				;
				;	Called Procs:  STD_PRINTF
				;		       XM_PARSE
				;
				;	Inputs:        none
				;
				;	Outputs:       XM_HAN_BUF
				;		       XM_HAN
				;
				;	Date:	       6/24/87
				;=========================================================================
				
				
 00EF				XM_HAN_PROMPT	  proc near			;an000;prompt user for the
										;      handle to be mapped
 00EF  E8 0000 E			call SCANB				;an000;see if parm entered
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-72
                                                            

				;	$if  nz 				;an000;prompt found
 00F2  74 13				JZ $$IF52
 00F4  B9 0004				     mov  cx,04 			;an000;bytes to parse
 00F7  E8 0000 E			     call GETHX 			;an000;get hex value
				;	     $if  c				;an000;no an error occurred
 00FA  73 05				     JNC $$IF53
 00FC  E8 0000 E				  call PERR			;an000;display ^ error
				;	     $else				;an000;
 00FF  EB 04				     JMP SHORT $$EN53
 0101				$$IF53:
 0101  89 16 ---- E				  mov  dg:XM_HANDLE,dx		;an000;save logical page
				;	     $endif				;an000;
 0105				$$EN53:
				;	$else					;an000;
 0105  EB 03				JMP SHORT $$EN52
 0107				$$IF52:
 0107  E8 0000 E			     call PERR				;an000;display ^ error
				;	$endif					;an000;
 010A				$$EN52:
				
 010A  C3				ret					;an000;return to caller
				
 010B				XM_HAN_PROMPT	  endp				;an000;
				
				
				
				;=========================================================================
				; XM_GET_HAN_ALLOC :   This routine will get a handle and allocate the
				;		       requested number of pages to that handle.
				;
				;	Called Procs:  none
				;
				;	Inputs:        XM_PAGE - number of pages to allocate to handle
				;
				;	Outputs:       Z  - no error
				;		       NZ - error
				;		       DX - handle allocated
				;
				;	Date:	       6/24/87
				;=========================================================================
				
 010B				XM_GET_HAN_ALLOC  proc near			;an000;create handle and alloc.
										;      requested pages.
 010B  53				push bx 				;an000;save regs.
 010C  B4 43				mov  ah,EMS_HAN_ALLOC			;an000;function 43h
 010E  32 FF				xor  bh,bh				;an000;clear byte
 0110  8A 1E ---- E			mov  bl,dg:XM_PAGE			;an000;number of pages to
										;      allocate
 0114  CD 67				int  67h				;an000;call EMS
 0116  0A E4				or   ah,ah				;an000;was there an error
 0118  5B				pop  bx 				;an000;restore regs.
				
 0119  C3				ret					;an000;return to caller
				
 011A				XM_GET_HAN_ALLOC  endp				;an000;
				
				;=========================================================================
				; XM_MAP_MEMORY :      This routine will map the requested logical page
				;		       to the requested physical page in EMS.
				;
				;	Called Procs:  none
				;
				;	Inputs:        XM_PHY - physical page to map to
				;		       XM_HAN - logical page to map
				;
				;	Outputs:       Z  - no error
				;		       NZ - error
				;		       page mapped
				;
				;	Date:	       6/24/87
				;=========================================================================
				
 011A				XM_MAP_MEMORY	  proc near			;an000;map a logical page to
										;      a physical page in
										;      EMS
 011A  53				push bx 				;an000;save regs.
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-73
                                                            

 011B  52				push dx 				;an000;
 011C  B4 44				mov  ah,EMS_MAP_MEMORY			;an000;function 44h
 011E  A0 ---- E			mov  al,dg:XM_PHY			;an000;physical page to map
 0121  32 FF				xor  bh,bh				;an000;zero byte
 0123  8A 1E ---- E			mov  bl,dg:XM_LOG			;an000;logical page to map
 0127  8B 16 ---- E			mov  dx,dg:XM_HANDLE			;an000;handle to map page to
 012B  CD 67				int  67h				;an000;call EMS
 012D  0A E4				or   ah,ah				;an000;was there an error
 012F  5A				pop  dx 				;an000;restore regs.
 0130  5B				pop  bx 				;an000;
				
 0131  C3				ret					;an000;return to caller
				
 0132				XM_MAP_MEMORY	  endp				;an000;
				
				
				;=========================================================================
				; XM_DISP1 :	       This routine displays the current page frame and
				;		       the handle created as a result of the allocate pages.
				;
				;	Called Procs:  STD_PRINTF
				;
				;	Inputs:        XM_FRAME_SEG	- page frame segment
				;		       XM_HANDLE_RET	- created handle
				;		       XM_PG_FRAME_PTR	- pointer to message
				;		       XM_HAN_RET_PTR	- pointer to message
				;
				;	Outputs:       "Page Frame Segment : %1",0d,0a
				;		       "Handle Created     : %1",0d,0a
				;
				;	Date:	       6/24/87
				;=========================================================================
				
 0132				XM_DISP1	  proc near			;an000;display messages
				
 0132  BA 0000 E			mov  dx,offset dg:XM_HAN_RET_PTR	;an000;"Handle Created    : "
 0135  E8 0000 E			call STD_PRINTF 			;an000;call message ret.
				
 0138  C3				ret					;an000;return to caller
				
 0139				XM_DISP1	  endp				;an000;
				
				
				;=========================================================================
				; XM_DISP2 :	       This routine displays the logical page mapped and
				;		       the physical page it was mapped to.
				;
				;	Called Procs:  STD_PRINTF
				;
				;	Inputs:        XM_MAPPED_PTR	- pointer to message
				;		       XM_LOG		- logical page mapped
				;		       XM_PHY		- physical page mapped
				;
				;	Outputs:       "Logical page %1 mapped to physical page %2",0d0a
				;
				;	Date:	       6/24/87
				;=========================================================================
				
 0139				XM_DISP2	  proc near			;an000;display messages
				
 0139  BA 0000 E			mov  dx,offset dg:XM_MAPPED_PTR 	;an000;"Logical page %1 mapped
										;	to physical page %2"
 013C  E8 0000 E			call STD_PRINTF 			;an000;call message ret.
				
 013F  C3				ret					;an000;return to caller
				
 0140				XM_DISP2	  endp				;an000;
				
				;=========================================================================
				; XM_ERROR:	  This routine will determine what error we have by
				;		  querying the result in the AH register.  It will then
				;		  report the error to the user through STD_PRINTF
				;
				;	Called Procs:  STD_PRINTF
				;
				;	Inputs:        AH - error code
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-74
                                                            

				;
				;	Outputs:       error message
				;
				;	Date:	       6/24/87
				;=========================================================================
				
 0140				XM_ERROR	  proc near			;an000;error message printer
				
 0140  80 FC 80				cmp  ah,XM_ERR80			;an000;error message
				;	$if  e					;an000;found message
 0143  75 06				JNE $$IF58
 0145  BA 0000 E			     mov  dx,offset dg:XM_ERR80_PTR	;an000;point to message
 0148  E9 01D2 R			     jmp  XM_ERROR_CONT 		;an000;print error
				;	$endif
 014B				$$IF58:
				
 014B  80 FC 83				cmp  ah,XM_ERR83			;an000;error message
				;	$if  e					;an000;found message
 014E  75 06				JNE $$IF60
 0150  BA 0000 E			     mov  dx,offset dg:XM_ERR83_PTR	;an000;point to message
 0153  EB 7D 90				     jmp  XM_ERROR_CONT 		;an000;print error
				;	$endif
 0156				$$IF60:
				
 0156  80 FC 84				cmp  ah,XM_ERR84			;an000;error message
				;	$if  e					;an000;found message
 0159  75 06				JNE $$IF62
 015B  BA 0000 E			     mov  dx,offset dg:XM_ERR84_PTR	;an000;point to message
 015E  EB 72 90				     jmp  XM_ERROR_CONT 		;an000;print error
				;	$endif
 0161				$$IF62:
				
 0161  80 FC 85				cmp  ah,XM_ERR85			;an000;error message
				;	$if  e					;an000;found message
 0164  75 06				JNE $$IF64
 0166  BA 0000 E			     mov  dx,offset dg:XM_ERR85_PTR	;an000;point to message
 0169  EB 67 90				     jmp  XM_ERROR_CONT 		;an000;print error
				;	$endif
 016C				$$IF64:
				
				
 016C  80 FC 86				cmp  ah,XM_ERR86			;an000;error message
				;	$if  e					;an000;found message
 016F  75 06				JNE $$IF66
 0171  BA 0000 E			     mov  dx,offset dg:XM_ERR86_PTR	;an000;point to message
 0174  EB 5C 90				     jmp  XM_ERROR_CONT 		;an000;print error
				;	$endif
 0177				$$IF66:
				
 0177  80 FC 87				cmp  ah,XM_ERR87			;an000;error message
				;	$if  e					;an000;found message
 017A  75 06				JNE $$IF68
 017C  BA 0000 E			     mov  dx,offset dg:XM_ERR87_PTR	;an000;point to message
 017F  EB 51 90				     jmp  XM_ERROR_CONT 		;an000;print error
				;	$endif
 0182				$$IF68:
				
 0182  80 FC 88				cmp  ah,XM_ERR88			;an000;error message
				;	$if  e					;an000;found message
 0185  75 06				JNE $$IF70
 0187  BA 0000 E			     mov  dx,offset dg:XM_ERR88_PTR	;an000;point to message
 018A  EB 46 90				     jmp  XM_ERROR_CONT 		;an000;print error
				;	$endif
 018D				$$IF70:
				
 018D  80 FC 89				cmp  ah,XM_ERR89			;an000;error message
				;	$if  e					;an000;found message
 0190  75 06				JNE $$IF72
 0192  BA 0000 E			     mov  dx,offset dg:XM_ERR89_PTR	;an000;point to message
 0195  EB 3B 90				     jmp  XM_ERROR_CONT 		;an000;print error
				;	$endif
 0198				$$IF72:
				
 0198  80 FC 8A				cmp  ah,XM_ERR8A			;an000;error message
				;	$if  e					;an000;found message
 019B  75 06				JNE $$IF74
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-75
                                                            

 019D  BA 0000 E			     mov  dx,offset dg:XM_ERR8A_PTR	;an000;point to message
 01A0  EB 30 90				     jmp  XM_ERROR_CONT 		;an000;print error
				;	$endif
 01A3				$$IF74:
				
 01A3  80 FC 8B				cmp  ah,XM_ERR8B			;an000;error message
				;	$if  e					;an000;found message
 01A6  75 06				JNE $$IF76
 01A8  BA 0000 E			     mov  dx,offset dg:XM_ERR8B_PTR	;an000;point to message
 01AB  EB 25 90				     jmp  XM_ERROR_CONT 		;an000;print error
				;	$endif
 01AE				$$IF76:
				
 01AE  80 FC 8D				cmp  ah,XM_ERR8D			;an000;error message
				;	$if  e					;an000;found message
 01B1  75 06				JNE $$IF78
 01B3  BA 0000 E			     mov  dx,offset dg:XM_ERR8D_PTR	;an000;point to message
 01B6  EB 1A 90				     jmp  XM_ERROR_CONT 		;an000;print error
				;	$endif
 01B9				$$IF78:
				
 01B9  80 FC 8E				cmp  ah,XM_ERR8E			;an000;error message
				;	$if  e					;an000;found message
 01BC  75 06				JNE $$IF80
 01BE  BA 0000 E			     mov  dx,offset dg:XM_ERR8E_PTR	;an000;point to message
 01C1  EB 0F 90				     jmp  XM_ERROR_CONT 		;an000;print error
				;	$endif
 01C4				$$IF80:
				
 01C4  80 FC FF				cmp  ah,XM_NOT_INST			;an000;EMS not installed
				;	$if  e					;an000;found message
 01C7  75 06				JNE $$IF82
 01C9  BA 0000 E			     mov  dx,offset dg:XM_ERRFF_PTR	;an000;point to message
 01CC  EB 04 90				     jmp  XM_ERROR_CONT 		;an000;print error
				;	$endif					;an000;
 01CF				$$IF82:
				
 01CF  BA 0000 E			mov  dx,offset dg:XM_ERR_GEN_PTR	;an000;general error message
				
 01D2				XM_ERROR_CONT:
				
 01D2  E8 0000 E			call STD_PRINTF 			;an000;call message ret.
				
 01D5  C3				ret					;an000;return to caller
				
 01D6				XM_ERROR	  endp				;an000;
				
				;=========================================================================
				; XM_PARSE_ERROR :     This routine will display that an error has occurred
				;		       on the input of the requested data.
				;
				;	Called Procs:  STD_PRINTF
				;
				;	Inputs:        XM_PARSE_ERR_PTR - error message
				;
				;	Outputs:       "Invalid value for parameter",0d,0a
				;
				;	Date:	       6/24/87
				;=========================================================================
				
 01D6				XM_PARSE_ERROR	  proc near			;an000;input error message
				
 01D6  BA 0000 E			mov  dx,offset dg:XM_PARSE_ERR_PTR	;an000;error message
 01D9  E8 0000 E			call STD_PRINTF 			;an000;call message ret.
 01DC  C3				ret					;an000;return to caller
				
 01DD				XM_PARSE_ERROR	  endp				;an000;
				
				
				
				;=========================================================================
				; XM_EMS_STATUS   :    This function will provide the user with
				;		       a report the the current status of EMS.
				;
				;	Inputs:   none
				;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-76
                                                            

				;	Outputs:  EMS page frames set or altered
				;
				;	Date:	  6/24/87
				;=========================================================================
				
 01DD				XM_EMS_STATUS	proc	near			;an000;XM functions
				
 01DD  E8 007C R			call XM_GET_MAN_STATUS			;an000;see if EMS active
				;	$if  nc 				;an000;EMS active
 01E0  72 05				JC $$IF84
 01E2  E8 01EB R			     call XM_CURR_STATUS		;an000;current status of EMS
				;	$else					;an000;EMS not active
 01E5  EB 03				JMP SHORT $$EN84
 01E7				$$IF84:
 01E7  E8 0140 R			     call XM_ERROR			;an000;say why not active
				;	$endif					;an000;
 01EA				$$EN84:
				
 01EA  C3				ret					;an000;return to caller
				
 01EB				XM_EMS_STATUS	  endp				;an000;
				
				
				;=========================================================================
				; XM_CURR_STATUS :	This routine will display the current status of
				;			all active EMS handles.
				;
				;	Inputs	 :	none
				;
				;	Outputs  :	Current status of all active EMS handles
				;			"Handle %1 has %2 pages allocated"
				;
				;			Physical page with it associated frame segment
				;			"Physical page %1 = Frame segment %2"
				;
				;	Date:	       8/05/86
				;=========================================================================
				
 01EB				XM_CURR_STATUS		proc	near		;an000;current EMS status
				
 01EB  B4 4D				mov  ah,EMS_HANDLE_PAGES		;an000;get handle pages
 01ED  BF 0000 E			mov  di,offset dg:XM_HANDLE_PAGES_BUF	;an000;point to the buffer
 01F0  CD 67				int  67h				;an000;
				
 01F2  0A E4				or   ah,ah				;an000;see if an error occurred
				;	$if  z					;an000;no error
 01F4  75 40				JNZ $$IF87
				;	     $do				;an000;do while data in buffer
 01F6				$$DO88:
 01F6  83 FB 00					  cmp  bx,0			;an000;end of buffer?
				;		  $leave  e			;an000;yes
 01F9  74 19					  JE $$EN88
 01FB  26: 8B 05				       mov  ax,word ptr es:[di] ;an000;page handle
 01FE  A3 ---- E				       mov  dg:XM_HANDLE_RET,ax ;an000;save in var
 0201  26: 8B 45 02				       mov  ax,word ptr es:[di+02];an000;page count
 0205  A3 ---- E				       mov  dg:XM_PAGE_CNT,ax	;an000;save in var
 0208  BA 0000 E				       mov  dx,offset dg:XM_STATUS_PTR ;an000;point to message
 020B  E8 0000 E				       call STD_PRINTF		;an000;print it
 020E  83 C7 04					       add  di,04h		;an000;next record
 0211  4B					       dec  bx			;an000;decrement counter
				;	     $enddo				;an000;
 0212  EB E2				     JMP SHORT $$DO88
 0214				$$EN88:
				
 0214  E8 0000 E			     call  CRLF 			;an000;place a blank line
										;      between reports
				
 0217  E8 02DC R			     call  XM_FRAME_BUFFER		;an000;get frame buffer
										;ES:DI points to frame buffer
				;	     $do				;an000;while cx not = 0
 021A				$$DO91:
 021A  83 F9 00					  cmp  cx,00			;an000;at end?
				;		  $leave e			;an000;yes
 021D  74 0F					  JE $$EN91
 021F  E8 0274 R				       call  XM_GET_FRAME_SEG	;an000;obtain page and seg
 0222  BA 0000 E				       mov   dx,offset dg:XM_PAGE_SEG_PTR  ;an000;message
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-77
                                                            

 0225  E8 0000 E				       call  STD_PRINTF 	;an000;print it
 0228  49					       dec   cx 		;an000;decrease counter
 0229  83 C7 04					       add   di,04		;an000;adjust pointer
				;	     $enddo				;an000;
 022C  EB EC				     JMP SHORT $$DO91
 022E				$$EN91:
				
 022E  E8 023A R			     call  XM_UNALL_COUNT		;an000;display page status
 0231  E8 025B R			     call  XM_HANDLE_COUNT		;an000;display handle status
				
				;	$else
 0234  EB 03				JMP SHORT $$EN87
 0236				$$IF87:
 0236  E8 0140 R			     call  XM_ERROR			;an000;display the error
				;	$endif					;an000;
 0239				$$EN87:
 0239  C3				ret					;an000;
				
 023A				XM_CURR_STATUS		endp			;an000;
				
				;=========================================================================
				; XM_UNALL_COUNT :	This routine generates a line of the status report
				;			displaying the number of pages allocated out of
				;			the total possible
				;
				;	Inputs	 :	none
				;
				;	Outputs  :	Current status of allocated pages
				;			"%1 of a total %2 EMS pages have been allocated"
				;
				;	Date:	       8/05/86
				;=========================================================================
				
 023A				XM_UNALL_COUNT		proc	near		;an000;
				
 023A  B4 42				mov	ah,EMS_UNALL_PG_CNT		;an000;see how many pages
										;      remaining
 023C  CD 67				int	67h				;an000;
 023E  0A E4				or	ah,ah				;an000;see if error
				
				;	$if	z				;an000;no error
 0240  75 18				JNZ $$IF96
 0242  53					push	bx			;an000;save bx
 0243  52					push	dx			;an000;save dx
 0244  E8 0000 E				call	CRLF			;an000;
 0247  5A					pop	dx			;an000;restore dx
 0248  5B					pop	bx			;an000;restore bx
 0249  8B C2					mov	ax,dx			;an000;total page count
 024B  2B C3					sub	ax,bx			;an000;get pages allocated
 024D  A3 ---- E				mov	dg:XM_ALLOC_PG,ax	;an000;save allocated pages
 0250  89 16 ---- E				mov	dg:XM_TOTAL_PG,dx	;an000;save total page count
 0254  BA 0000 E				mov	dx,offset dg:XM_UNALL_PTR ;an000;"%1 of a total %2 EMS
										;      pages have been allocated",cr,lf
 0257  E8 0000 E				call	STD_PRINTF		;an000;print it
				;	$endif					;an000;
 025A				$$IF96:
				
 025A  C3				ret					;an000;
				
 025B				XM_UNALL_COUNT		endp			;an000;
				
				
				;=========================================================================
				; XM_HANDLE_COUNT:	This routine generates a line of the status report
				;			displaying the number of handles allocated out of
				;			the total possible.
				;
				;	Inputs	 :	none
				;
				;	Outputs  :	Current status of allocated pages
				;			"%1 of a total %2 EMS handles have been allocated"
				;
				;	Date:	       8/05/86
				;=========================================================================
				
 025B				XM_HANDLE_COUNT 	proc	near		;an000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-78
                                                            

				
 025B  B4 4B				mov	ah,EMS_HANDLE_CNT		;an000;see how many handles
										;      possible
 025D  CD 67				int	67h				;an000;
 025F  0A E4				or	ah,ah				;an000;see if error
				
				;	$if	z				;an000;no error
 0261  75 10				JNZ $$IF98
 0263  B8 00FF					mov	ax,EMS_HANDLE_TOTAL	;an000;total possible handles
 0266  A3 ---- E				mov	dg:XM_HAN_TOTAL,ax	;an000;save total page count
 0269  89 1E ---- E				mov	dg:XM_HAN_ALLOC,bx	;an000;save allocated pages
 026D  BA 0000 E				mov	dx,offset dg:XM_HAN_ALLOC_PTR
										;an000;"%1 of a total %2 EMS
										;      handles have been allocated",cr,lf
 0270  E8 0000 E				call	STD_PRINTF		;an000;print it
				;	$endif					;an000;
 0273				$$IF98:
				
 0273  C3				ret					;an000;
				
 0274				XM_HANDLE_COUNT 	endp			;an000;
				
				
				;=========================================================================
				; XM_FRAME_SEG	 :	This routine accesses the vector created by
				;			function 58h, int 67h.	It obtains a physical
				;			page of EMS and its segment from this vector
				;
				;	Inputs	 :	ES:DI - points to frame buffer
				;
				;	Outputs  :	XM_PHY - a physical page in EMS
				;			XM_FRAME - segment corresponding to the physical page
				;
				;	Date:	       8/05/86
				;=========================================================================
				
				
 0274				XM_GET_FRAME_SEG	proc	near		;an000;find the frame segment
				
 0274  26: 8A 45 02			mov	al,byte ptr es:[di+2]		;an000;get physical page
 0278  A2 ---- E			mov	dg:XM_PHY,al			;an000;place in print var
 027B  26: 8B 05			mov	ax,word ptr es:[di]		;an000;get frame segment
 027E  A3 ---- E			mov	dg:XM_FRAME,ax			;an000;place in print var
				
 0281  C3				ret					;an000;
				
 0282				XM_GET_FRAME_SEG	endp			;an000;
				
				;=========================================================================
				; XM_INSTALL_CHECK:	This routine performs function 51h, int 67h to
				;			determine if EMS is indeed active.
				;
				;	Inputs	 :	XM_FRAME_BUFFER - used to receive physical page
				;					  and segment data for EMS.
				;
				;	Outputs  :	XM_FRAME_BUFFER - buffer holds physical page
				;					  and segment data for EMS.
				;
				;	Date:	       8/05/86
				;=========================================================================
				
 0282				XM_INSTALL_CHECK	proc	near		;an000;see if EMS installed
				
 0282  B4 40				MOV	AH,EMS_GET_MAN_STAT		;AN000;GET EMS STATUS
 0284  32 C0				XOR	AL,AL				;an000;clear low byte
 0286  CD 67				INT	67h				;an000;
 0288  0A E4				OR	AH,AH				;an000;check for error
				;	$IF	Z				;an000;no error
 028A  75 12				JNZ $$IF100
 028C  B4 46					MOV	AH,EMS_VERSION		;an000;get version number
 028E  CD 67					INT	67h			;an000;
 0290  3C 40					CMP	AL,EMS_LIM_40		;an000;LIM 4.0 ?
				;		$IF	AE			;an000;4.0 or greater
 0292  72 06					JNAE $$IF101
 0294  B4 00						MOV	AH,00h		;an000;set up for flag pass
 0296  0A E4						OR	AH,AH		;an000;set flag to ZR
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-79
                                                            

				;		$ELSE				;an000;below 4.0
 0298  EB 04					JMP SHORT $$EN101
 029A				$$IF101:
 029A  B4 01						MOV	AH,01h		;an000;set up for flag pass
 029C  0A E4						OR	AH,AH		;an000;set flag to NZ
				;		$ENDIF				;an000;
 029E				$$EN101:
				;	$ENDIF					;an000;
 029E				$$IF100:
				
 029E  C3				ret					;an000;
				
 029F				XM_INSTALL_CHECK	endp			;an000;
				
				
				
				
				;=========================================================================
				; XM_EMS_DEALL	:	This routine deallocates handles from EMS.
				;
				;	Inputs	 :	DX - Handle supplied by XM_DEALL_PROMPT
				;
				;	Outputs  :	Good return - "Handle %1 deallocated"
				;			Bad return  - message describing error
				;
				;	Date:	       8/05/86
				;=========================================================================
				
 029F				XM_EMS_DEALL		proc	near		;an000;deallocate EMS pages
				
 029F  E8 007C R			call XM_GET_MAN_STATUS			;an000;see if EMS installed
				;	$if  nc 				;an000;error?
 02A2  72 18				JC $$IF105
 02A4  E8 02C0 R			     call XM_DEALL_PROMPT		;an000;prompt user for handle
 02A7  B4 45				     mov  ah,EMS_PAGE_DEALL		;an000;function 45h, int 67h
 02A9  CD 67				     int  67h				;an000;
				
 02AB  0A E4				     or   ah,ah 			;an000;error?
				;	     $if  nz				;an000;yes
 02AD  74 05				     JZ $$IF106
 02AF  E8 0140 R				  call XM_ERROR 		;an000;say why
				;	     $else				;an000;
 02B2  EB 06				     JMP SHORT $$EN106
 02B4				$$IF106:
 02B4  BA 0000 E				  mov  dx,offset dg:XM_DEALL_PTR;an000;"Handle %1 deallocated"
 02B7  E8 0000 E				  call STD_PRINTF		;an000;print message
				;	     $endif				;an000;
 02BA				$$EN106:
				;	$else					;an000;
 02BA  EB 03				JMP SHORT $$EN105
 02BC				$$IF105:
 02BC  E8 0140 R			     call XM_ERROR			;an000;print type of error
				;	$endif					;an000;
 02BF				$$EN105:
				
 02BF  C3				ret					;an000;
				
 02C0				XM_EMS_DEALL		endp			;an000;
				
				;=========================================================================
				; XM_DEALL_PROMPT :	This routine prompts the user for the handle to be
				;			deallocated.  It converts the handle entered to
				;			binary and passes it back to the caller in DX.
				;
				;	Inputs	 :	none
				;
				;	Outputs  :	DX - Handle to be deallocated.
				;
				;	Date:	       8/05/86
				;=========================================================================
				
 02C0				XM_DEALL_PROMPT 	proc	near		;an000;prompt user for handle
										;      to deallocate
 02C0  E8 0000 E			call SCANB				;an000;see if parm entered
				;	$if  nz 				;an000;parm found
 02C3  74 13				JZ $$IF111
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Page     1-80
                                                            

 02C5  B9 0004				     mov  cx,04 			;an000;bytes to parse
 02C8  E8 0000 E			     call GETHX 			;an000;get hex value
				;	     $if  c				;an000;no an error occurred
 02CB  73 05				     JNC $$IF112
 02CD  E8 0000 E				  call PERR			;an000;display ^ error
				;	     $else				;an000;
 02D0  EB 04				     JMP SHORT $$EN112
 02D2				$$IF112:
 02D2  89 16 ---- E				  mov  dg:XM_DEALL_HAN,dx	;an000;save handle to deallocate
				;	     $endif				;an000;
 02D6				$$EN112:
				;	$else					;an000;
 02D6  EB 03				JMP SHORT $$EN111
 02D8				$$IF111:
 02D8  E8 0000 E			     call PERR				;an000;display ^ error
				;	$endif					;an000;
 02DB				$$EN111:
				
 02DB  C3				ret					;an000;return to caller
				
 02DC				XM_DEALL_PROMPT 	endp			;an000;
				
				
				;=========================================================================
				; XM_FRAME_BUFFER	:	This routine obtains the frame buffer
				;				of EMS pages.
				;
				;	Inputs	:	none
				;
				;	Outputs :	ES:DI - Pointer to frame array
				;			CX    - Number of elements in array
				;=========================================================================
				
 02DC				XM_FRAME_BUFFER 	proc	near		;an000;
				
 02DC  B8 5800				mov	ax,EMS_PG_FRAME 		;an000;get frame buffer
 02DF  CD 67				int	67h				;an000;
				
 02E1  C3				ret					;an000;
				
 02E2				XM_FRAME_BUFFER 	endp			;an000;
				
				
 02E2				CODE	ENDS
					END	DEBEMS

Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Symbols-1


Macros:

		N a m e			Lines

ARGVAR . . . . . . . . . . . . .  	  23
ASMVAR . . . . . . . . . . . . .  	   3
ASMVARS  . . . . . . . . . . . .  	   3
ASSERT . . . . . . . . . . . . .  	   0
CALLINSTALL  . . . . . . . . . .  	  12
DOSASSUME  . . . . . . . . . . .  	   3
ENTER  . . . . . . . . . . . . .  	   3
ENTERCRIT  . . . . . . . . . . .  	   1
ERRNZ  . . . . . . . . . . . . .  	   4
FMT  . . . . . . . . . . . . . .  	   0
LEAVE  . . . . . . . . . . . . .  	   2
LEAVECRIT  . . . . . . . . . . .  	   1
LOCALVAR . . . . . . . . . . . .  	  23

Structures and Records:

                N a m e                 Width   # fields
                                        Shift   Width   Mask    Initial

ARENA  . . . . . . . . . . . . .  	0010	0005
  ARENA_SIGNATURE  . . . . . . .  	0000
  ARENA_OWNER  . . . . . . . . .  	0001
  ARENA_SIZE . . . . . . . . . .  	0003
  ARENA_RESERVED . . . . . . . .  	0005
  ARENA_NAME . . . . . . . . . .  	0008
A_BPB  . . . . . . . . . . . . .  	001F	000F
  BPB_BYTESPERSECTOR . . . . . .  	0000
  BPB_SECTORSPERCLUSTER  . . . .  	0002
  BPB_RESERVEDSECTORS  . . . . .  	0003
  BPB_NUMBEROFFATS . . . . . . .  	0005
  BPB_ROOTENTRIES  . . . . . . .  	0006
  BPB_TOTALSECTORS . . . . . . .  	0008
  BPB_MEDIADESCRIPTOR  . . . . .  	000A
  BPB_SECTORSPERFAT  . . . . . .  	000B
  BPB_SECTORSPERTRACK  . . . . .  	000D
  BPB_HEADS  . . . . . . . . . .  	000F
  BPB_HIDDENSECTORS  . . . . . .  	0011
  BPB_BIGTOTALSECTORS  . . . . .  	0015
BPBLOCK  . . . . . . . . . . . .  	000D	0008
  BPSECSZ  . . . . . . . . . . .  	0000
  BPCLUS . . . . . . . . . . . .  	0002
  BPRES  . . . . . . . . . . . .  	0003
  BPFTCNT  . . . . . . . . . . .  	0005
  BPDRCNT  . . . . . . . . . . .  	0006
  BPSCCNT  . . . . . . . . . . .  	0008
  BPMEDIA  . . . . . . . . . . .  	000A
  BPFTSEC  . . . . . . . . . . .  	000B
BUFFER_HASH_ENTRY  . . . . . . .  	0008	0004
  EMS_PAGE_NUM . . . . . . . . .  	0000
  BUFFER_BUCKET  . . . . . . . .  	0002
  DIRTY_COUNT  . . . . . . . . .  	0006
  BUFFER_RESERVED  . . . . . . .  	0007
BUFFINFO . . . . . . . . . . . .  	0023	000F
  HASH_PTR . . . . . . . . . . .  	0000
  HASH_COUNT . . . . . . . . . .  	0004
  CACHE_PTR  . . . . . . . . . .  	0006
  CACHE_COUNT  . . . . . . . . .  	000A
  EMS_SAFE_FLAG  . . . . . . . .  	000C
  EMS_LAST_PAGE  . . . . . . . .  	000D
  EMS_FIRST_PAGE . . . . . . . .  	0011
  EMS_NPA640 . . . . . . . . . .  	0015
  EMS_MODE . . . . . . . . . . .  	0017
  EMS_HANDLE . . . . . . . . . .  	0018
  EMS_PAGEFRAME_NUMBER . . . . .  	001A
  EMS_SEG_CNT  . . . . . . . . .  	001C
  EMS_PAGE_FRAME . . . . . . . .  	001E
  EMS_RESERVED . . . . . . . . .  	0020
  EMS_MAP_BUFF . . . . . . . . .  	0022
CURDIR_LIST  . . . . . . . . . .  	0058	000A
  CURDIR_TEXT  . . . . . . . . .  	0000
  CURDIR_FLAGS . . . . . . . . .  	0043
  CURDIR_DEVPTR  . . . . . . . .  	0045
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Symbols-2


  CURDIR_ID  . . . . . . . . . .  	0049
  CURDIR_USER_WORD . . . . . . .  	004D
  CURDIR_END . . . . . . . . . .  	004F
  CURDIR_TYPE  . . . . . . . . .  	0051
  CURDIR_IFS_HDR . . . . . . . .  	0052
  CURDIR_FSDA  . . . . . . . . .  	0056
DIR_ENTRY  . . . . . . . . . . .  	0020	000B
  DIR_NAME . . . . . . . . . . .  	0000
  DIR_ATTR . . . . . . . . . . .  	000B
  DIR_CODEPG . . . . . . . . . .  	000C
  DIR_EXTCLUSTER . . . . . . . .  	000E
  DIR_ATTR2  . . . . . . . . . .  	0010
  DIR_PAD  . . . . . . . . . . .  	0011
  DIR_TIME . . . . . . . . . . .  	0016
  DIR_DATE . . . . . . . . . . .  	0018
  DIR_FIRST  . . . . . . . . . .  	001A
  DIR_SIZE_L . . . . . . . . . .  	001C
  DIR_SIZE_H . . . . . . . . . .  	001E
DPB  . . . . . . . . . . . . . .  	0021	0012
  DPB_DRIVE  . . . . . . . . . .  	0000
  DPB_UNIT . . . . . . . . . . .  	0001
  DPB_SECTOR_SIZE  . . . . . . .  	0002
  DPB_CLUSTER_MASK . . . . . . .  	0004
  DPB_CLUSTER_SHIFT  . . . . . .  	0005
  DPB_FIRST_FAT  . . . . . . . .  	0006
  DPB_FAT_COUNT  . . . . . . . .  	0008
  DPB_ROOT_ENTRIES . . . . . . .  	0009
  DPB_FIRST_SECTOR . . . . . . .  	000B
  DPB_MAX_CLUSTER  . . . . . . .  	000D
  DPB_FAT_SIZE . . . . . . . . .  	000F
  DPB_DIR_SECTOR . . . . . . . .  	0011
  DPB_DRIVER_ADDR  . . . . . . .  	0013
  DPB_MEDIA  . . . . . . . . . .  	0017
  DPB_FIRST_ACCESS . . . . . . .  	0018
  DPB_NEXT_DPB . . . . . . . . .  	0019
  DPB_NEXT_FREE  . . . . . . . .  	001D
  DPB_FREE_CNT . . . . . . . . .  	001F
EXEC0  . . . . . . . . . . . . .  	000E	0004
  EXEC0_ENVIRON  . . . . . . . .  	0000
  EXEC0_COM_LINE . . . . . . . .  	0002
  EXEC0_5C_FCB . . . . . . . . .  	0006
  EXEC0_6C_FCB . . . . . . . . .  	000A
EXEC1  . . . . . . . . . . . . .  	0016	0008
  EXEC1_ENVIRON  . . . . . . . .  	0000
  EXEC1_COM_LINE . . . . . . . .  	0002
  EXEC1_5C_FCB . . . . . . . . .  	0006
  EXEC1_6C_FCB . . . . . . . . .  	000A
  EXEC1_SP . . . . . . . . . . .  	000E
  EXEC1_SS . . . . . . . . . . .  	0010
  EXEC1_IP . . . . . . . . . . .  	0012
  EXEC1_CS . . . . . . . . . . .  	0014
EXEC3  . . . . . . . . . . . . .  	0004	0002
  EXEC3_LOAD_ADDR  . . . . . . .  	0000
  EXEC3_RELOC_FAC  . . . . . . .  	0002
EXE_FILE . . . . . . . . . . . .  	0020	000F
  EXE_SIGNATURE  . . . . . . . .  	0000
  EXE_LEN_MOD_512  . . . . . . .  	0002
  EXE_PAGES  . . . . . . . . . .  	0004
  EXE_RLE_COUNT  . . . . . . . .  	0006
  EXE_PAR_DIR  . . . . . . . . .  	0008
  EXE_MIN_BSS  . . . . . . . . .  	000A
  EXE_MAX_BSS  . . . . . . . . .  	000C
  EXE_SS . . . . . . . . . . . .  	000E
  EXE_SP . . . . . . . . . . . .  	0010
  EXE_CHKSUM . . . . . . . . . .  	0012
  EXE_IP . . . . . . . . . . . .  	0014
  EXE_CS . . . . . . . . . . . .  	0016
  EXE_RLE_TABLE  . . . . . . . .  	0018
  EXE_IOV  . . . . . . . . . . .  	001A
  EXE_SYM_TAB  . . . . . . . . .  	001C
EXT_OPEN_PARM  . . . . . . . . .  	0006	0002
  EXT_SET_LIST . . . . . . . . .  	0000
  EXT_NUM_OF_PARM  . . . . . . .  	0004
FIND_BUF . . . . . . . . . . . .  	002B	000C
  FIND_BUF_DRIVE . . . . . . . .  	0000
  FIND_BUF_NAME  . . . . . . . .  	0001
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Symbols-3


  FIND_BUF_SATTR . . . . . . . .  	000C
  FIND_BUF_LASTENT . . . . . . .  	000D
  FIND_BUF_DIRSTART  . . . . . .  	000F
  FIND_BUF_NETID . . . . . . . .  	0011
  FIND_BUF_ATTR  . . . . . . . .  	0015
  FIND_BUF_TIME  . . . . . . . .  	0016
  FIND_BUF_DATE  . . . . . . . .  	0018
  FIND_BUF_SIZE_L  . . . . . . .  	001A
  FIND_BUF_SIZE_H  . . . . . . .  	001C
  FIND_BUF_PNAME . . . . . . . .  	001E
INTERNAT_BLOCK . . . . . . . . .  	0018	0015
  DATE_TIM_FORMAT  . . . . . . .  	0000
  CURRENCY_SYM . . . . . . . . .  	0002
  THOUS_SEP  . . . . . . . . . .  	0007
  DECIMAL_SEP  . . . . . . . . .  	0009
  DATE_SEP . . . . . . . . . . .  	000B
  TIME_SEP . . . . . . . . . . .  	000D
  BIT_FIELD  . . . . . . . . . .  	000F
  CURRENCY_CENTS . . . . . . . .  	0010
  TIME_24  . . . . . . . . . . .  	0011
  MAP_CALL . . . . . . . . . . .  	0012
  DATA_SEP . . . . . . . . . . .  	0016
PROCESS_DATA_BLOCK . . . . . . .  	005C	0011
  PDB_EXIT_CALL  . . . . . . . .  	0000
  PDB_BLOCK_LEN  . . . . . . . .  	0002
  PDB_CPM_CALL . . . . . . . . .  	0005
  PDB_EXIT . . . . . . . . . . .  	000A
  PDB_CTRL_C . . . . . . . . . .  	000E
  PDB_FATAL_ABORT  . . . . . . .  	0012
  PDB_PARENT_PID . . . . . . . .  	0016
  PDB_JFN_TABLE  . . . . . . . .  	0018
  PDB_ENVIRON  . . . . . . . . .  	002C
  PDB_USER_STACK . . . . . . . .  	002E
  PDB_JFN_LENGTH . . . . . . . .  	0032
  PDB_JFN_POINTER  . . . . . . .  	0034
  PDB_NEXT_PDB . . . . . . . . .  	0038
  PDB_PAD1 . . . . . . . . . . .  	003C
  PDB_CALL_SYSTEM  . . . . . . .  	0050
  PDB_PAD2 . . . . . . . . . . .  	0055
SF . . . . . . . . . . . . . . .  	0008	0003
  SFLINK . . . . . . . . . . . .  	0000
  SFCOUNT  . . . . . . . . . . .  	0004
  SFTABLE  . . . . . . . . . . .  	0006
SF_ENTRY . . . . . . . . . . . .  	003B	0014
  SF_REF_COUNT . . . . . . . . .  	0000
  SF_MODE  . . . . . . . . . . .  	0002
  SF_ATTR  . . . . . . . . . . .  	0004
  SF_FLAGS . . . . . . . . . . .  	0005
  SF_DEVPTR  . . . . . . . . . .  	0007
  SF_FIRCLUS . . . . . . . . . .  	000B
  SF_TIME  . . . . . . . . . . .  	000D
  SF_DATE  . . . . . . . . . . .  	000F
  SF_SIZE  . . . . . . . . . . .  	0011
  SF_POSITION  . . . . . . . . .  	0015
  SF_CLUSPOS . . . . . . . . . .  	0019
  SF_DIRSEC  . . . . . . . . . .  	001B
  SF_DIRPOS  . . . . . . . . . .  	001F
  SF_NAME  . . . . . . . . . . .  	0020
  SF_CHAIN . . . . . . . . . . .  	002B
  SF_UID . . . . . . . . . . . .  	002F
  SF_PID . . . . . . . . . . . .  	0031
  SF_MFT . . . . . . . . . . . .  	0033
  SF_LSTCLUS . . . . . . . . . .  	0035
  SF_IFS_HDR . . . . . . . . . .  	0037
SYMBOL_ENTRY . . . . . . . . . .  	0106	0004
  SYM_VALUE  . . . . . . . . . .  	0000
  SYM_TYPE . . . . . . . . . . .  	0004
  SYM_LEN  . . . . . . . . . . .  	0006
  SYM_NAME . . . . . . . . . . .  	0007
SYSINITVARS  . . . . . . . . . .  	0047	0018
  SYSI_DPB . . . . . . . . . . .  	0000
  SYSI_SFT . . . . . . . . . . .  	0004
  SYSI_CLOCK . . . . . . . . . .  	0008
  SYSI_CON . . . . . . . . . . .  	000C
  SYSI_MAXSEC  . . . . . . . . .  	0010
  SYSI_BUF . . . . . . . . . . .  	0012
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Symbols-4


  SYSI_CDS . . . . . . . . . . .  	0016
  SYSI_FCB . . . . . . . . . . .  	001A
  SYSI_KEEP  . . . . . . . . . .  	001E
  SYSI_NUMIO . . . . . . . . . .  	0020
  SYSI_NCDS  . . . . . . . . . .  	0021
  SYSI_DEV . . . . . . . . . . .  	0022
  SYSI_ATTR  . . . . . . . . . .  	0026
  SYSI_STRAT . . . . . . . . . .  	0028
  SYSI_INTER . . . . . . . . . .  	002A
  SYSI_NAME  . . . . . . . . . .  	002C
  SYSI_SPLICE  . . . . . . . . .  	0034
  SYSI_IBMDOS_SIZE . . . . . . .  	0035
  SYSI_IFS_DOSCALL@  . . . . . .  	0037
  SYSI_IFS . . . . . . . . . . .  	003B
  SYSI_BUFFERS . . . . . . . . .  	003F
  SYSI_BOOT_DRIVE  . . . . . . .  	0043
  SYSI_DWMOVE  . . . . . . . . .  	0044
  SYSI_EXT_MEM . . . . . . . . .  	0045
SYSINITVARS_EXT  . . . . . . . .  	0008	0002
  SYSI_INITVARS  . . . . . . . .  	0000
  SYSI_COUNTRY_TAB . . . . . . .  	0004
SYS_FCB  . . . . . . . . . . . .  	0025	000C
  FCB_DRIVE  . . . . . . . . . .  	0000
  FCB_NAME . . . . . . . . . . .  	0001
  FCB_EXT  . . . . . . . . . . .  	0009
  FCB_EXTENT . . . . . . . . . .  	000C
  FCB_RECSIZ . . . . . . . . . .  	000E
  FCB_FILSIZ . . . . . . . . . .  	0010
  FCB_DRVBP  . . . . . . . . . .  	0012
  FCB_FDATE  . . . . . . . . . .  	0014
  FCB_FTIME  . . . . . . . . . .  	0016
  FCB_RESERVED . . . . . . . . .  	0018
  FCB_NR . . . . . . . . . . . .  	0020
  FCB_RR . . . . . . . . . . . .  	0021
USER_ENVIRON . . . . . . . . . .  	0018	000C
  USER_AX  . . . . . . . . . . .  	0000
  USER_BX  . . . . . . . . . . .  	0002
  USER_CX  . . . . . . . . . . .  	0004
  USER_DX  . . . . . . . . . . .  	0006
  USER_SI  . . . . . . . . . . .  	0008
  USER_DI  . . . . . . . . . . .  	000A
  USER_BP  . . . . . . . . . . .  	000C
  USER_DS  . . . . . . . . . . .  	000E
  USER_ES  . . . . . . . . . . .  	0010
  USER_IP  . . . . . . . . . . .  	0012
  USER_CS  . . . . . . . . . . .  	0014
  USER_F . . . . . . . . . . . .  	0016

Segments and Groups:

                N a m e         	Length	 Align	Combine Class

DG . . . . . . . . . . . . . . .  	GROUP
  CODE . . . . . . . . . . . . .  	02E2	BYTE	PUBLIC	
  CONST  . . . . . . . . . . . .  	0000	BYTE	PUBLIC	
  CSTACK . . . . . . . . . . . .  	0000	PARA	STACK	
  DATA . . . . . . . . . . . . .  	0000	BYTE	PUBLIC	

Symbols:            

                N a m e         	Type	 Value	 Attr

ABORT  . . . . . . . . . . . . .  	NUMBER	0000	
ACCESS_MASK  . . . . . . . . . .  	NUMBER	000F	
ACTION_CREATED_OPENED  . . . . .  	NUMBER	0002	
ACTION_OPENED  . . . . . . . . .  	NUMBER	0001	
ACTION_REPLACED_OPENED . . . . .  	NUMBER	0003	
ADDR_INT_ABORT . . . . . . . . .  	NUMBER	0080	
ADDR_INT_COMMAND . . . . . . . .  	NUMBER	0084	
ADDR_INT_CTRL_C  . . . . . . . .  	NUMBER	008C	
ADDR_INT_DISK_READ . . . . . . .  	NUMBER	0094	
ADDR_INT_DISK_WRITE  . . . . . .  	NUMBER	0098	
ADDR_INT_FASTCON . . . . . . . .  	NUMBER	00A4	
ADDR_INT_FATAL_ABORT . . . . . .  	NUMBER	0090	
ADDR_INT_IBM . . . . . . . . . .  	NUMBER	00A8	
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Symbols-5


ADDR_INT_KEEP_PROCESS  . . . . .  	NUMBER	009C	
ADDR_INT_SPOOLER . . . . . . . .  	NUMBER	00A0	
ADDR_INT_TERMINATE . . . . . . .  	NUMBER	0088	
ALLOC  . . . . . . . . . . . . .  	NUMBER	0048	
ALLOCOPER  . . . . . . . . . . .  	NUMBER	0058	
ALLOWED_FAIL . . . . . . . . . .  	NUMBER	0008	
ALLOWED_IGNORE . . . . . . . . .  	NUMBER	0020	
ALLOWED_RETRY  . . . . . . . . .  	NUMBER	0010	
ALTVECT  . . . . . . . . . . . .  	ALIAS	 FALSE		
ALT_EXPECTED_VERSION . . . . . .  	NUMBER	1A05	
ALT_MAJOR_VERSION  . . . . . . .  	NUMBER	0005	
ALT_MINOR_VERSION  . . . . . . .  	NUMBER	001A	
ARENA_OWNER_SYSTEM . . . . . . .  	NUMBER	0000	
ARENA_SIGNATURE_END  . . . . . .  	NUMBER	005A	
ARENA_SIGNATURE_NORMAL . . . . .  	NUMBER	004D	
ASSIGNOPER . . . . . . . . . . .  	NUMBER	005F	
ATTR_ALL . . . . . . . . . . . .  	NUMBER	0016	
ATTR_ARCHIVE . . . . . . . . . .  	NUMBER	0020	
ATTR_CHANGEABLE  . . . . . . . .  	NUMBER	0027	
ATTR_DEVICE  . . . . . . . . . .  	NUMBER	0040	
ATTR_DIRECTORY . . . . . . . . .  	NUMBER	0010	
ATTR_HIDDEN  . . . . . . . . . .  	NUMBER	0002	
ATTR_IGNORE  . . . . . . . . . .  	NUMBER	0061	
ATTR_READ_ONLY . . . . . . . . .  	NUMBER	0001	
ATTR_SYSTEM  . . . . . . . . . .  	NUMBER	0004	
ATTR_VOLUME_ID . . . . . . . . .  	NUMBER	0008	
AUTO_COMMIT_WRITE  . . . . . . .  	NUMBER	4000	

BPLEN  . . . . . . . . . . . . .  	NUMBER	0032	
BPMAX  . . . . . . . . . . . . .  	NUMBER	000A	
BPREG  . . . . . . . . . . . . .  	NUMBER	5042	
BUFFERFLAG . . . . . . . . . . .  	NUMBER	FFFF	
BUFINSIZ . . . . . . . . . . . .  	NUMBER	0014	
BUFLEN . . . . . . . . . . . . .  	NUMBER	0050	
BUFSIZ . . . . . . . . . . . . .  	NUMBER	0200	
BUF_DIRTY  . . . . . . . . . . .  	NUMBER	0040	
BUF_DPB  . . . . . . . . . . . .  		000D	
BUF_FILL . . . . . . . . . . . .  		0011	
BUF_FLAGS  . . . . . . . . . . .  		0005	
BUF_FREE . . . . . . . . . . . .  	NUMBER	00FF	
BUF_ID . . . . . . . . . . . . .  		0004	
BUF_ISDATA . . . . . . . . . . .  	NUMBER	0008	
BUF_ISDIR  . . . . . . . . . . .  	NUMBER	0004	
BUF_ISFAT  . . . . . . . . . . .  	NUMBER	0002	
BUF_ISNET  . . . . . . . . . . .  	NUMBER	0080	
BUF_NETID  . . . . . . . . . . .  	ALIAS	 BUFINSIZ		
BUF_NEXT . . . . . . . . . . . .  		0000	
BUF_OFFSET . . . . . . . . . . .  	DWORD	0006	
BUF_PREV . . . . . . . . . . . .  		0002	
BUF_RESERVED . . . . . . . . . .  		0013	
BUF_SECTOR . . . . . . . . . . .  		0006	
BUF_SNBUF  . . . . . . . . . . .  	NUMBER	0010	
BUF_TYPE_0 . . . . . . . . . . .  	NUMBER	00F1	
BUF_VISIT  . . . . . . . . . . .  	NUMBER	0020	
BUF_WRTCNT . . . . . . . . . . .  		000A	
BUF_WRTCNTINC  . . . . . . . . .  		000B	
BXREG  . . . . . . . . . . . . .  	NUMBER	5842	

CARGS  . . . . . . . . . . . . .  	NUMBER	0000	
CHAR_AT_SIGN . . . . . . . . . .  	NUMBER	0040	
CHAR_BACKSPACE . . . . . . . . .  	NUMBER	0008	
CHAR_BLANK . . . . . . . . . . .  	NUMBER	0020	
CHAR_COLON . . . . . . . . . . .  	NUMBER	003A	
CHAR_COMMA . . . . . . . . . . .  	NUMBER	002C	
CHAR_EOF . . . . . . . . . . . .  	NUMBER	001A	
CHAR_EQUAL . . . . . . . . . . .  	NUMBER	003D	
CHAR_LEFT_BRACKET  . . . . . . .  	NUMBER	005B	
CHAR_MINUS . . . . . . . . . . .  	NUMBER	002D	
CHAR_OPER  . . . . . . . . . . .  	NUMBER	0037	
CHAR_PERIOD  . . . . . . . . . .  	NUMBER	002E	
CHAR_RUBOUT  . . . . . . . . . .  	NUMBER	007F	
CHAR_SEMICOLON . . . . . . . . .  	NUMBER	003B	
CHAR_TAB . . . . . . . . . . . .  	NUMBER	0009	
CHAR_ZERO  . . . . . . . . . . .  	NUMBER	0030	
CHDIR  . . . . . . . . . . . . .  	NUMBER	003B	
CHMOD  . . . . . . . . . . . . .  	NUMBER	0043	
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Symbols-6


CLOSE  . . . . . . . . . . . . .  	NUMBER	003E	
COMMA  . . . . . . . . . . . . .  	NUMBER	2C00	
COMMIT . . . . . . . . . . . . .  	NUMBER	0068	
CR . . . . . . . . . . . . . . .  	NUMBER	000D	
CREAT  . . . . . . . . . . . . .  	NUMBER	003C	
CREATENEWFILE  . . . . . . . . .  	NUMBER	005B	
CREATETEMPFILE . . . . . . . . .  	NUMBER	005A	
CREATE_PROCESS_DATA_BLOCK  . . .  	NUMBER	0026	
CRITASSIGN . . . . . . . . . . .  	NUMBER	0008	
CRITDEVICE . . . . . . . . . . .  	NUMBER	0002	
CRITDISK . . . . . . . . . . . .  	NUMBER	0001	
CRITIFS  . . . . . . . . . . . .  	NUMBER	0006	
CRITMEM  . . . . . . . . . . . .  	NUMBER	0001	
CRITNET  . . . . . . . . . . . .  	NUMBER	0005	
CRITSFT  . . . . . . . . . . . .  	NUMBER	0001	
CRITSHARE  . . . . . . . . . . .  	NUMBER	0001	
crlf . . . . . . . . . . . . . .  	L NEAR	0000	CODE	External
CURDIRLEN  . . . . . . . . . . .  	NUMBER	0058	
CURDIR_INUSE . . . . . . . . . .  	NUMBER	4000	
CURDIR_ISIFS . . . . . . . . . .  	NUMBER	8000	
CURDIR_ISNET . . . . . . . . . .  	NUMBER	8000	
CURDIR_LOCAL . . . . . . . . . .  	NUMBER	1000	
CURDIR_NETID . . . . . . . . . .  	DWORD	0049	
CURDIR_SPLICE  . . . . . . . . .  	NUMBER	2000	
CURRENT_DIR  . . . . . . . . . .  	NUMBER	0047	
C_BS . . . . . . . . . . . . . .  	NUMBER	0008	
C_CR . . . . . . . . . . . . . .  	NUMBER	000D	
C_DEL  . . . . . . . . . . . . .  	NUMBER	007F	
C_ETB  . . . . . . . . . . . . .  	NUMBER	0017	
C_ETX  . . . . . . . . . . . . .  	NUMBER	0003	
C_HT . . . . . . . . . . . . . .  	NUMBER	0009	
C_LF . . . . . . . . . . . . . .  	NUMBER	000A	
C_NAK  . . . . . . . . . . . . .  	NUMBER	0015	

DBCS . . . . . . . . . . . . . .  	NUMBER	0000	
DEALLOC  . . . . . . . . . . . .  	NUMBER	0049	
debems . . . . . . . . . . . . .  	L NEAR	0000	CODE	Global
DEBUG  . . . . . . . . . . . . .  	NUMBER	0000	
DEVID_BLOCK_DEV  . . . . . . . .  	NUMBER	001F	
DEVID_DEVICE . . . . . . . . . .  	NUMBER	0080	
DEVID_DEVICE_CLOCK . . . . . . .  	NUMBER	0008	
DEVID_DEVICE_CON_IN  . . . . . .  	NUMBER	0001	
DEVID_DEVICE_CON_OUT . . . . . .  	NUMBER	0002	
DEVID_DEVICE_EOF . . . . . . . .  	NUMBER	0040	
DEVID_DEVICE_NULL  . . . . . . .  	NUMBER	0004	
DEVID_DEVICE_RAW . . . . . . . .  	NUMBER	0020	
DEVID_DEVICE_SPECIAL . . . . . .  	NUMBER	0010	
DEVID_EOF  . . . . . . . . . . .  	NUMBER	0040	
DEVID_FILE_CLEAN . . . . . . . .  	NUMBER	0040	
DEVID_FILE_MASK_DRIVE  . . . . .  	NUMBER	003F	
DEVID_ISCIN  . . . . . . . . . .  	NUMBER	0001	
DEVID_ISCLK  . . . . . . . . . .  	NUMBER	0008	
DEVID_ISCOT  . . . . . . . . . .  	NUMBER	0002	
DEVID_ISDEV  . . . . . . . . . .  	NUMBER	0080	
DEVID_ISNUL  . . . . . . . . . .  	NUMBER	0004	
DEVID_RAW  . . . . . . . . . . .  	NUMBER	0020	
DEVID_SPECIAL  . . . . . . . . .  	NUMBER	0010	
DIREG  . . . . . . . . . . . . .  	NUMBER	4944	
DIRSTRLEN  . . . . . . . . . . .  	NUMBER	0043	
DIR_SEARCH_FIRST . . . . . . . .  	NUMBER	0011	
DIR_SEARCH_NEXT  . . . . . . . .  	NUMBER	0012	
DISK_RESET . . . . . . . . . . .  	NUMBER	000D	
DOUBLE_QUOTE . . . . . . . . . .  	NUMBER	0022	
DPBSIZ . . . . . . . . . . . . .  	NUMBER	0021	
DSKSIZ . . . . . . . . . . . . .  	NUMBER	000D	
DUP_PDB  . . . . . . . . . . . .  	NUMBER	0055	

ECS_CALL . . . . . . . . . . . .  	NUMBER	0063	
EMS_GET_MAN_STAT . . . . . . . .  	NUMBER	0040	
EMS_GET_PAGE_MAP . . . . . . . .  	NUMBER	0000	
EMS_GET_SET_PG_MP  . . . . . . .  	NUMBER	004E	
EMS_HANDLE_CNT . . . . . . . . .  	NUMBER	004B	
EMS_HANDLE_PAGES . . . . . . . .  	NUMBER	004D	
EMS_HANDLE_TOTAL . . . . . . . .  	NUMBER	00FF	
EMS_HAN_ALLOC  . . . . . . . . .  	NUMBER	0043	
EMS_LIM_40 . . . . . . . . . . .  	NUMBER	0040	
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Symbols-7


EMS_MAP_BUFF_SIZE  . . . . . . .  	NUMBER	000C	
EMS_MAP_MEMORY . . . . . . . . .  	NUMBER	0044	
EMS_PAGE_DEALL . . . . . . . . .  	NUMBER	0045	
EMS_PG_FRAME . . . . . . . . . .  	NUMBER	5800	
EMS_REST_PAGE_MAP  . . . . . . .  	NUMBER	0048	
EMS_SAVE_PAGE_MAP  . . . . . . .  	NUMBER	0047	
EMS_SET_PAGE_MAP . . . . . . . .  	NUMBER	0001	
EMS_UNALL_PG_CNT . . . . . . . .  	NUMBER	0042	
EMS_VERSION  . . . . . . . . . .  	NUMBER	0046	
ENTRYPOINT . . . . . . . . . . .  	NUMBER	00C0	
ERRACT_ABORT . . . . . . . . . .  	NUMBER	0004	
ERRACT_DLYRET  . . . . . . . . .  	NUMBER	0002	
ERRACT_IGNORE  . . . . . . . . .  	NUMBER	0006	
ERRACT_INTRET  . . . . . . . . .  	NUMBER	0007	
ERRACT_PANIC . . . . . . . . . .  	NUMBER	0005	
ERRACT_RETRY . . . . . . . . . .  	NUMBER	0001	
ERRACT_USER  . . . . . . . . . .  	NUMBER	0003	
ERRCLASS_ALREADY . . . . . . . .  	NUMBER	000C	
ERRCLASS_APPERR  . . . . . . . .  	NUMBER	0007	
ERRCLASS_AUTH  . . . . . . . . .  	NUMBER	0003	
ERRCLASS_BADFMT  . . . . . . . .  	NUMBER	0009	
ERRCLASS_HRDFAIL . . . . . . . .  	NUMBER	0005	
ERRCLASS_INTRN . . . . . . . . .  	NUMBER	0004	
ERRCLASS_LOCKED  . . . . . . . .  	NUMBER	000A	
ERRCLASS_MEDIA . . . . . . . . .  	NUMBER	000B	
ERRCLASS_NOTFND  . . . . . . . .  	NUMBER	0008	
ERRCLASS_OUTRES  . . . . . . . .  	NUMBER	0001	
ERRCLASS_SYSFAIL . . . . . . . .  	NUMBER	0006	
ERRCLASS_TEMPSIT . . . . . . . .  	NUMBER	0002	
ERRCLASS_UNK . . . . . . . . . .  	NUMBER	000D	
ERRLOC_DISK  . . . . . . . . . .  	NUMBER	0002	
ERRLOC_MEM . . . . . . . . . . .  	NUMBER	0005	
ERRLOC_NET . . . . . . . . . . .  	NUMBER	0003	
ERRLOC_SERDEV  . . . . . . . . .  	NUMBER	0004	
ERRLOC_UNK . . . . . . . . . . .  	NUMBER	0001	
ERROR_ACCESS_DENIED  . . . . . .  	NUMBER	0005	
ERROR_ALREADY_ASSIGNED . . . . .  	NUMBER	0055	
ERROR_ARENA_TRASHED  . . . . . .  	NUMBER	0007	
ERROR_BAD_COMMAND  . . . . . . .  	NUMBER	0016	
ERROR_BAD_ENVIRONMENT  . . . . .  	NUMBER	000A	
ERROR_BAD_FORMAT . . . . . . . .  	NUMBER	000B	
ERROR_BAD_LENGTH . . . . . . . .  	NUMBER	0018	
ERROR_BAD_UNIT . . . . . . . . .  	NUMBER	0014	
ERROR_CANNOT_MAKE  . . . . . . .  	NUMBER	0052	
ERROR_CODE_PAGE_MISMATCHED . . .  	NUMBER	0025	
ERROR_CRC  . . . . . . . . . . .  	NUMBER	0017	
ERROR_CURRENT_DIRECTORY  . . . .  	NUMBER	0010	
ERROR_DUP_FCB  . . . . . . . . .  	NUMBER	0051	
ERROR_FAIL_I24 . . . . . . . . .  	NUMBER	0053	
ERROR_FCB_UNAVAILABLE  . . . . .  	NUMBER	0023	
ERROR_FILE_EXISTS  . . . . . . .  	NUMBER	0050	
ERROR_FILE_NOT_FOUND . . . . . .  	NUMBER	0002	
ERROR_GEN_FAILURE  . . . . . . .  	NUMBER	001F	
ERROR_HANDLE_DISK_FULL . . . . .  	NUMBER	0027	
ERROR_HANDLE_EOF . . . . . . . .  	NUMBER	0026	
ERROR_I24_BAD_COMMAND  . . . . .  	NUMBER	0003	
ERROR_I24_BAD_LENGTH . . . . . .  	NUMBER	0005	
ERROR_I24_BAD_UNIT . . . . . . .  	NUMBER	0001	
ERROR_I24_CRC  . . . . . . . . .  	NUMBER	0004	
ERROR_I24_GEN_FAILURE  . . . . .  	NUMBER	000C	
ERROR_I24_NOT_DOS_DISK . . . . .  	NUMBER	0007	
ERROR_I24_NOT_READY  . . . . . .  	NUMBER	0002	
ERROR_I24_OUT_OF_PAPER . . . . .  	NUMBER	0009	
ERROR_I24_READ_FAULT . . . . . .  	NUMBER	000B	
ERROR_I24_SECTOR_NOT_FOUND . . .  	NUMBER	0008	
ERROR_I24_SEEK . . . . . . . . .  	NUMBER	0006	
ERROR_I24_WRITE_FAULT  . . . . .  	NUMBER	000A	
ERROR_I24_WRITE_PROTECT  . . . .  	NUMBER	0000	
ERROR_I24_WRONG_DISK . . . . . .  	NUMBER	000F	
ERROR_INVALID_ACCESS . . . . . .  	NUMBER	000C	
ERROR_INVALID_BLOCK  . . . . . .  	NUMBER	0009	
ERROR_INVALID_DATA . . . . . . .  	NUMBER	000D	
ERROR_INVALID_DRIVE  . . . . . .  	NUMBER	000F	
ERROR_INVALID_FUNCTION . . . . .  	NUMBER	0001	
ERROR_INVALID_HANDLE . . . . . .  	NUMBER	0006	
ERROR_INVALID_PARAMETER  . . . .  	NUMBER	0057	
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Symbols-8


ERROR_INVALID_PASSWORD . . . . .  	NUMBER	0056	
ERROR_LOCK_VIOLATION . . . . . .  	NUMBER	0021	
ERROR_NET_WRITE_FAULT  . . . . .  	NUMBER	0058	
ERROR_NOT_DOS_DISK . . . . . . .  	NUMBER	001A	
ERROR_NOT_ENOUGH_MEMORY  . . . .  	NUMBER	0008	
ERROR_NOT_READY  . . . . . . . .  	NUMBER	0015	
ERROR_NOT_SAME_DEVICE  . . . . .  	NUMBER	0011	
ERROR_NOT_SUPPORTED  . . . . . .  	NUMBER	0032	
ERROR_NO_MORE_FILES  . . . . . .  	NUMBER	0012	
ERROR_OUT_OF_PAPER . . . . . . .  	NUMBER	001C	
ERROR_OUT_OF_STRUCTURES  . . . .  	NUMBER	0054	
ERROR_PATH_NOT_FOUND . . . . . .  	NUMBER	0003	
ERROR_READ_FAULT . . . . . . . .  	NUMBER	001E	
ERROR_SECTOR_NOT_FOUND . . . . .  	NUMBER	001B	
ERROR_SEEK . . . . . . . . . . .  	NUMBER	0019	
ERROR_SHARING_BUFFER_EXCEEDED  .  	NUMBER	0024	
ERROR_SHARING_VIOLATION  . . . .  	NUMBER	0020	
ERROR_SYS_COMP_NOT_LOADED  . . .  	NUMBER	005A	
ERROR_TOO_MANY_OPEN_FILES  . . .  	NUMBER	0004	
ERROR_WRITE_FAULT  . . . . . . .  	NUMBER	001D	
ERROR_WRITE_PROTECT  . . . . . .  	NUMBER	0013	
ERROR_WRONG_DISK . . . . . . . .  	NUMBER	0022	
EXEC . . . . . . . . . . . . . .  	NUMBER	004B	
EXEC_FUNC_NO_EXECUTE . . . . . .  	NUMBER	0001	
EXEC_FUNC_OVERLAY  . . . . . . .  	NUMBER	0002	
EXEFCB . . . . . . . . . . . . .  	ALIAS	 FCB		
EXE_VALID_OLD_SIGNATURE  . . . .  	NUMBER	4D5A	
EXE_VALID_SIGNATURE  . . . . . .  	NUMBER	5A4D	
EXISTS_MASK  . . . . . . . . . .  	NUMBER	000F	
EXIT . . . . . . . . . . . . . .  	NUMBER	004C	
EXIT_ABORT . . . . . . . . . . .  	NUMBER	0000	
EXIT_CTRL_C  . . . . . . . . . .  	NUMBER	0001	
EXIT_HARD_ERROR  . . . . . . . .  	NUMBER	0002	
EXIT_KEEP_PROCESS  . . . . . . .  	NUMBER	0003	
EXIT_TERMINATE . . . . . . . . .  	NUMBER	0000	
EXPECTED_VERSION . . . . . . . .  	NUMBER	0004	
EXTHANDLE  . . . . . . . . . . .  	NUMBER	0067	
EXTOPEN  . . . . . . . . . . . .  	NUMBER	006C	
EXT_EXISTS_FAIL  . . . . . . . .  	NUMBER	0000	
EXT_EXISTS_OPEN  . . . . . . . .  	NUMBER	0001	
EXT_FILE_NOT_EXISTS  . . . . . .  	NUMBER	0004	
EXT_NEXISTS_CREATE . . . . . . .  	NUMBER	0010	
EXT_OPEN_I24_OFF . . . . . . . .  	NUMBER	0002	
EXT_OPEN_ON  . . . . . . . . . .  	NUMBER	0001	

FALSE  . . . . . . . . . . . . .  	NUMBER	0000	
FCB  . . . . . . . . . . . . . .  	NUMBER	005C	
FCBDEVICE  . . . . . . . . . . .  	NUMBER	0040	
FCBMASK  . . . . . . . . . . . .  	NUMBER	00C0	
FCBNETWORK . . . . . . . . . . .  	NUMBER	0080	
FCBSHARE . . . . . . . . . . . .  	NUMBER	00C0	
FCBSPECIAL . . . . . . . . . . .  	NUMBER	0080	
FCB_CLOSE  . . . . . . . . . . .  	NUMBER	0010	
FCB_CREATE . . . . . . . . . . .  	NUMBER	0016	
FCB_DELETE . . . . . . . . . . .  	NUMBER	0013	
FCB_L_ATTR . . . . . . . . . . .  	BYTE	001E	
FCB_L_DRIVE  . . . . . . . . . .  	BYTE	0019	
FCB_L_FIRCLUS  . . . . . . . . .  	WORD	001A	
FCB_L_MFS  . . . . . . . . . . .  	WORD	001C	
FCB_NETID  . . . . . . . . . . .  	DWORD	001C	
FCB_NET_DRIVE  . . . . . . . . .  	BYTE	0019	
FCB_NET_HANDLE . . . . . . . . .  	WORD	001A	
FCB_NSLD_DRIVE . . . . . . . . .  	BYTE	0019	
FCB_NSLD_DRVPTR  . . . . . . . .  	DWORD	001A	
FCB_NSL_BITS . . . . . . . . . .  	BYTE	001A	
FCB_NSL_DIRPOS . . . . . . . . .  	BYTE	001F	
FCB_NSL_DIRSEC . . . . . . . . .  	WORD	001D	
FCB_NSL_DRIVE  . . . . . . . . .  	BYTE	0019	
FCB_NSL_FIRCLUS  . . . . . . . .  	WORD	001B	
FCB_OPEN . . . . . . . . . . . .  	NUMBER	000F	
FCB_RANDOM_READ  . . . . . . . .  	NUMBER	0021	
FCB_RANDOM_READ_BLOCK  . . . . .  	NUMBER	0027	
FCB_RANDOM_WRITE . . . . . . . .  	NUMBER	0022	
FCB_RANDOM_WRITE_BLOCK . . . . .  	NUMBER	0028	
FCB_RENAME . . . . . . . . . . .  	NUMBER	0017	
FCB_SEQ_READ . . . . . . . . . .  	NUMBER	0014	
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Symbols-9


FCB_SEQ_WRITE  . . . . . . . . .  	NUMBER	0015	
FCB_SFN  . . . . . . . . . . . .  	BYTE	0018	
FCHK . . . . . . . . . . . . . .  	NUMBER	0001	
FDELIM . . . . . . . . . . . . .  	NUMBER	0002	
FFCB . . . . . . . . . . . . . .  	NUMBER	0008	
FILDIRENT  . . . . . . . . . . .  	NUMBER	0010	
FILE_TIMES . . . . . . . . . . .  	NUMBER	0057	
FILPERPROC . . . . . . . . . . .  	NUMBER	0014	
FIND_FIRST . . . . . . . . . . .  	NUMBER	004E	
FIND_NEXT  . . . . . . . . . . .  	NUMBER	004F	
FSPCHK . . . . . . . . . . . . .  	NUMBER	0004	
F_AUX  . . . . . . . . . . . . .  	NUMBER	0010	
F_CARRY  . . . . . . . . . . . .  	NUMBER	0001	
F_DIRECTION  . . . . . . . . . .  	NUMBER	0400	
F_INTERRUPT  . . . . . . . . . .  	NUMBER	0200	
F_OVERFLOW . . . . . . . . . . .  	NUMBER	0800	
F_PARITY . . . . . . . . . . . .  	NUMBER	0004	
F_SIGN . . . . . . . . . . . . .  	NUMBER	0080	
F_TRACE  . . . . . . . . . . . .  	NUMBER	0100	
F_ZERO . . . . . . . . . . . . .  	NUMBER	0040	

GENERIC_IOCTL  . . . . . . . . .  	NUMBER	440D	
GETCURRENTPSP  . . . . . . . . .  	NUMBER	0062	
geteol . . . . . . . . . . . . .  	L NEAR	0000	CODE	External
GETEXTCNTRY  . . . . . . . . . .  	NUMBER	0065	
GETEXTENDEDERROR . . . . . . . .  	NUMBER	0059	
gethx  . . . . . . . . . . . . .  	L NEAR	0000	CODE	External
GETSETCDPG . . . . . . . . . . .  	NUMBER	0066	
GETSETMEDIAID  . . . . . . . . .  	NUMBER	0069	
GET_CURRENT_PDB  . . . . . . . .  	NUMBER	0051	
GET_DATE . . . . . . . . . . . .  	NUMBER	002A	
GET_DEFAULT_DPB  . . . . . . . .  	NUMBER	001F	
GET_DEFAULT_DRIVE  . . . . . . .  	NUMBER	0019	
GET_DMA  . . . . . . . . . . . .  	NUMBER	002F	
GET_DPB  . . . . . . . . . . . .  	NUMBER	0032	
GET_DRIVE_FREESPACE  . . . . . .  	NUMBER	0036	
GET_FCB_FILE_LENGTH  . . . . . .  	NUMBER	0023	
GET_FCB_POSITION . . . . . . . .  	NUMBER	0024	
GET_INDOS_FLAG . . . . . . . . .  	NUMBER	0034	
GET_INTERRUPT_VECTOR . . . . . .  	NUMBER	0035	
GET_IN_VARS  . . . . . . . . . .  	NUMBER	0052	
GET_TIME . . . . . . . . . . . .  	NUMBER	002C	
GET_VERIFY_ON_WRITE  . . . . . .  	NUMBER	0054	
GET_VERSION  . . . . . . . . . .  	NUMBER	0030	

HANDLE_FAIL_I24  . . . . . . . .  	NUMBER	0100	
HONGEUL  . . . . . . . . . . . .  	NUMBER	0063	

I24_AREA . . . . . . . . . . . .  	NUMBER	0006	
I24_CLASS  . . . . . . . . . . .  	NUMBER	0080	
I24_OPERATION  . . . . . . . . .  	NUMBER	0001	
IBM  . . . . . . . . . . . . . .  	ALIAS	 IBMVER		
IBMCOPYRIGHT . . . . . . . . . .  	ALIAS	 FALSE		
IBMJAPAN . . . . . . . . . . . .  	ALIAS	 FALSE		
IBMJAPVER  . . . . . . . . . . .  	ALIAS	 FALSE		
IBMVER . . . . . . . . . . . . .  	ALIAS	 TRUE		
IFS_IOCTL  . . . . . . . . . . .  	NUMBER	006B	
inbuf  . . . . . . . . . . . . .  	L NEAR	0000	CODE	External
INSTALLED  . . . . . . . . . . .  	NUMBER	FFFF	
INSTALLEDDATA  . . . . . . . . .  	NUMBER	0000	
INTBASE  . . . . . . . . . . . .  	NUMBER	0080	
INTERNAT . . . . . . . . . . . .  	ALIAS	 FALSE		
INTERNATIONAL  . . . . . . . . .  	NUMBER	0038	
INTERNAT_BLOCK_MAX . . . . . . .  	NUMBER	0020	
INTTAB . . . . . . . . . . . . .  	NUMBER	0020	
INT_24_ERROR . . . . . . . . . .  	NUMBER	2000	
INT_ABORT  . . . . . . . . . . .  	ALIAS	 INTTAB		
INT_COMMAND  . . . . . . . . . .  	NUMBER	0021	
INT_CTRL_C . . . . . . . . . . .  	NUMBER	0023	
INT_DISK_READ  . . . . . . . . .  	NUMBER	0025	
INT_DISK_WRITE . . . . . . . . .  	NUMBER	0026	
INT_FASTCON  . . . . . . . . . .  	NUMBER	0029	
INT_FATAL_ABORT  . . . . . . . .  	NUMBER	0024	
INT_IBM  . . . . . . . . . . . .  	NUMBER	002A	
INT_KEEP_PROCESS . . . . . . . .  	NUMBER	0027	
INT_MASK . . . . . . . . . . . .  	NUMBER	00FF	
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Symbols-10


INT_SPOOLER  . . . . . . . . . .  	NUMBER	0028	
INT_TERMINATE  . . . . . . . . .  	NUMBER	0022	
IOCTL  . . . . . . . . . . . . .  	NUMBER	0044	
IO_MODE_ID . . . . . . . . . . .  	NUMBER	0002	

JAPAN  . . . . . . . . . . . . .  	ALIAS	 FALSE		

KANJI  . . . . . . . . . . . . .  	ALIAS	 FALSE		
KEEP_PROCESS . . . . . . . . . .  	NUMBER	0031	
KOREA  . . . . . . . . . . . . .  	ALIAS	 FALSE		

LF . . . . . . . . . . . . . . .  	NUMBER	000A	
LOCKOPER . . . . . . . . . . . .  	NUMBER	005C	
LOWER_A  . . . . . . . . . . . .  	NUMBER	0061	
LOWER_Z  . . . . . . . . . . . .  	NUMBER	007A	
LSEEK  . . . . . . . . . . . . .  	NUMBER	0042	
LSEEK_EOF_OPTION . . . . . . . .  	NUMBER	0002	
LSEEK_FROM_START . . . . . . . .  	NUMBER	0000	

MAJOR_VERSION  . . . . . . . . .  	NUMBER	0004	
MASK_PORT  . . . . . . . . . . .  	NUMBER	0021	
MAXBUCKETINPAGE  . . . . . . . .  	NUMBER	0002	
MAXBUFFINBUCKET  . . . . . . . .  	NUMBER	000F	
MEMS . . . . . . . . . . . . . .  	NUMBER	0001	
MINOR_VERSION  . . . . . . . . .  	NUMBER	0000	
MI_INT . . . . . . . . . . . . .  	NUMBER	00CD	
MI_LONG_CALL . . . . . . . . . .  	NUMBER	009A	
MI_LONG_JMP  . . . . . . . . . .  	NUMBER	00EA	
MI_LONG_RET  . . . . . . . . . .  	NUMBER	00CB	
MI_NEAR_RET  . . . . . . . . . .  	NUMBER	00C3	
MKDIR  . . . . . . . . . . . . .  	NUMBER	0039	
MSVER  . . . . . . . . . . . . .  	NUMBER	0000	
MULTDOS  . . . . . . . . . . . .  	NUMBER	0012	
MULTIFS  . . . . . . . . . . . .  	NUMBER	0011	
MULTNET  . . . . . . . . . . . .  	NUMBER	0011	
MULTSHARE  . . . . . . . . . . .  	NUMBER	0010	

NLSFUNC  . . . . . . . . . . . .  	NUMBER	0014	
NOT_EXISTS_MASK  . . . . . . . .  	NUMBER	00F0	
NO_CODE_PAGE_CHECK . . . . . . .  	NUMBER	0100	

OEM_C1 . . . . . . . . . . . . .  	NUMBER	00F9	
OEM_C2 . . . . . . . . . . . . .  	NUMBER	00FA	
OEM_C3 . . . . . . . . . . . . .  	NUMBER	00FB	
OEM_C4 . . . . . . . . . . . . .  	NUMBER	00FC	
OEM_C5 . . . . . . . . . . . . .  	NUMBER	00FD	
OEM_C6 . . . . . . . . . . . . .  	NUMBER	00FE	
OEM_C7 . . . . . . . . . . . . .  	NUMBER	00FF	
OPBUFLEN . . . . . . . . . . . .  	NUMBER	0023	
OPEN . . . . . . . . . . . . . .  	NUMBER	003D	
OPEN_FOR_BOTH  . . . . . . . . .  	NUMBER	0002	
OPEN_FOR_READ  . . . . . . . . .  	NUMBER	0000	
OPEN_FOR_WRITE . . . . . . . . .  	NUMBER	0001	

PARSE_FILE_DESCRIPTOR  . . . . .  	NUMBER	0029	
PATHPARSE  . . . . . . . . . . .  	NUMBER	0061	
PDB_APPEND . . . . . . . . . . .  	BYTE	003D	
PDB_INTERCON . . . . . . . . . .  	BYTE	003C	
perr . . . . . . . . . . . . . .  	L NEAR	0000	CODE	External
PROMPT . . . . . . . . . . . . .  	NUMBER	002D	

RAW_CON_INPUT  . . . . . . . . .  	NUMBER	0007	
RAW_CON_IO . . . . . . . . . . .  	NUMBER	0006	
READ . . . . . . . . . . . . . .  	NUMBER	003F	
READ_SECTOR  . . . . . . . . . .  	NUMBER	0000	
READ_WRITE . . . . . . . . . . .  	NUMBER	0008	
REDIRECTOR . . . . . . . . . . .  	NUMBER	0000	
REGTABLEN  . . . . . . . . . . .  	NUMBER	000E	
RENAME . . . . . . . . . . . . .  	NUMBER	0056	
RESERVED_BITS_MASK . . . . . . .  	NUMBER	FE00	
RMDIR  . . . . . . . . . . . . .  	NUMBER	003A	

scanb  . . . . . . . . . . . . .  	L NEAR	0000	CODE	External
scanp  . . . . . . . . . . . . .  	L NEAR	0000	CODE	External
SEGDIF . . . . . . . . . . . . .  	NUMBER	0000	
SERVERCALL . . . . . . . . . . .  	NUMBER	005D	
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Symbols-11


SETBLOCK . . . . . . . . . . . .  	NUMBER	004A	
SETCNTC  . . . . . . . . . . . .  	ALIAS	 TRUE		
SETDPB . . . . . . . . . . . . .  	NUMBER	0053	
SET_CTRL_C_TRAPPING  . . . . . .  	NUMBER	0033	
SET_CURRENT_PDB  . . . . . . . .  	NUMBER	0050	
SET_DATE . . . . . . . . . . . .  	NUMBER	002B	
SET_DEFAULT_DRIVE  . . . . . . .  	NUMBER	000E	
SET_DMA  . . . . . . . . . . . .  	NUMBER	001A	
SET_DRIVEID_OPTION . . . . . . .  	NUMBER	0001	
SET_INTERRUPT_VECTOR . . . . . .  	NUMBER	0025	
SET_OEM_HANDLER  . . . . . . . .  	NUMBER	00F8	
SET_PRINTER_FLAG . . . . . . . .  	NUMBER	0064	
SET_TIME . . . . . . . . . . . .  	NUMBER	002D	
SET_VERIFY_ON_WRITE  . . . . . .  	NUMBER	002E	
SF_BUSY  . . . . . . . . . . . .  	NUMBER	-0001	
SF_CLOSE_NODATE  . . . . . . . .  	NUMBER	4000	
SF_DEFAULT_NUMBER  . . . . . . .  	NUMBER	0005	
SF_FSDA  . . . . . . . . . . . .  	BYTE	0019	
SF_ISFCB . . . . . . . . . . . .  	NUMBER	8000	
SF_ISNET . . . . . . . . . . . .  	NUMBER	8000	
SF_LRU . . . . . . . . . . . . .  	WORD	0015	
SF_NETID . . . . . . . . . . . .  	BYTE	0019	
SF_NET_SPOOL . . . . . . . . . .  	NUMBER	0800	
SF_NO_INHERIT  . . . . . . . . .  	NUMBER	1000	
SF_OPENAGE . . . . . . . . . . .  	WORD	0017	
SF_PIPE  . . . . . . . . . . . .  	NUMBER	2000	
SF_SERIAL_ID . . . . . . . . . .  	WORD	000B	
SHAREF . . . . . . . . . . . . .  	NUMBER	0000	
SHARING_COMPAT . . . . . . . . .  	NUMBER	0000	
SHARING_DENY_BOTH  . . . . . . .  	NUMBER	0010	
SHARING_DENY_NONE  . . . . . . .  	NUMBER	0040	
SHARING_DENY_READ  . . . . . . .  	NUMBER	0030	
SHARING_DENY_WRITE . . . . . . .  	NUMBER	0020	
SHARING_MASK . . . . . . . . . .  	NUMBER	00F0	
SHARING_NET_FCB  . . . . . . . .  	NUMBER	0070	
SHARING_NO_INHERIT . . . . . . .  	NUMBER	0080	
SINGLE_QUOTE . . . . . . . . . .  	NUMBER	0027	
SIREG  . . . . . . . . . . . . .  	NUMBER	4953	
STDAUX . . . . . . . . . . . . .  	NUMBER	0003	
STDERR . . . . . . . . . . . . .  	NUMBER	0002	
STDIN  . . . . . . . . . . . . .  	NUMBER	0000	
STDOUT . . . . . . . . . . . . .  	NUMBER	0001	
STDPRN . . . . . . . . . . . . .  	NUMBER	0004	
STD_AUX_INPUT  . . . . . . . . .  	NUMBER	0003	
STD_AUX_OUTPUT . . . . . . . . .  	NUMBER	0004	
STD_CON_INPUT  . . . . . . . . .  	NUMBER	0001	
STD_CON_INPUT_FLUSH  . . . . . .  	NUMBER	000C	
STD_CON_INPUT_NO_ECHO  . . . . .  	NUMBER	0008	
STD_CON_INPUT_STATUS . . . . . .  	NUMBER	000B	
STD_CON_OUTPUT . . . . . . . . .  	NUMBER	0002	
STD_CON_STRING_INPUT . . . . . .  	NUMBER	000A	
STD_CON_STRING_OUTPUT  . . . . .  	NUMBER	0009	
STD_PRINTER_OUTPUT . . . . . . .  	NUMBER	0005	
std_printf . . . . . . . . . . .  	L NEAR	0000	CODE	External
SYSVER . . . . . . . . . . . . .  	ALIAS	 FALSE		

TEMPLEN  . . . . . . . . . . . .  	NUMBER	0086	
TRUE . . . . . . . . . . . . . .  	NUMBER	FFFF	
TRUEBYTE . . . . . . . . . . . .  	NUMBER	00FF	

UNLINK . . . . . . . . . . . . .  	NUMBER	0041	
UPPER_A  . . . . . . . . . . . .  	NUMBER	0041	
UPPER_C  . . . . . . . . . . . .  	NUMBER	0043	
UPPER_E  . . . . . . . . . . . .  	NUMBER	0045	
UPPER_F  . . . . . . . . . . . .  	NUMBER	0046	
UPPER_L  . . . . . . . . . . . .  	NUMBER	004C	
UPPER_M  . . . . . . . . . . . .  	NUMBER	004D	
UPPER_N  . . . . . . . . . . . .  	NUMBER	004E	
UPPER_P  . . . . . . . . . . . .  	NUMBER	0050	
UPPER_S  . . . . . . . . . . . .  	NUMBER	0053	
UPPER_X  . . . . . . . . . . . .  	NUMBER	0058	
UPPER_Z  . . . . . . . . . . . .  	NUMBER	005A	
USEROPER . . . . . . . . . . . .  	NUMBER	005E	

VEC_BREAKPOINT . . . . . . . . .  	NUMBER	0003	
VEC_CRIT_ERR . . . . . . . . . .  	NUMBER	0024	
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Symbols-12


VEC_CTRL_BREAK . . . . . . . . .  	NUMBER	0023	
VEC_PRIMITIVE_DISK_READ  . . . .  	NUMBER	0025	
VEC_PRIMITIVE_DISK_WRITE . . . .  	NUMBER	0026	
VEC_SING_STEP  . . . . . . . . .  	NUMBER	0001	
VEC_TERM_ADDR  . . . . . . . . .  	NUMBER	0022	

WAITPROCESS  . . . . . . . . . .  	NUMBER	004D	
WRITE  . . . . . . . . . . . . .  	NUMBER	0040	
WRITE_SECTOR . . . . . . . . . .  	NUMBER	0000	

XDUP . . . . . . . . . . . . . .  	NUMBER	0045	
XDUP2  . . . . . . . . . . . . .  	NUMBER	0046	
xm_alloc_pg  . . . . . . . . . .  	V WORD	0000	DATA	External
XM_CURR_STATUS . . . . . . . . .  	N PROC	01EB	CODE	Length = 004F
xm_deall_han . . . . . . . . . .  	V WORD	0000	DATA	External
XM_DEALL_PROMPT  . . . . . . . .  	N PROC	02C0	CODE	Length = 001C
xm_deall_ptr . . . . . . . . . .  	V WORD	0000	DATA	External
XM_DISP1 . . . . . . . . . . . .  	N PROC	0132	CODE	Length = 0007
XM_DISP2 . . . . . . . . . . . .  	N PROC	0139	CODE	Length = 0007
XM_EMS_ALLOC . . . . . . . . . .  	N PROC	0038	CODE	Length = 0021
XM_EMS_DEALL . . . . . . . . . .  	N PROC	029F	CODE	Length = 0021
XM_EMS_MAP . . . . . . . . . . .  	N PROC	0059	CODE	Length = 0023
XM_EMS_STATUS  . . . . . . . . .  	N PROC	01DD	CODE	Length = 000E
XM_ERR80 . . . . . . . . . . . .  	NUMBER	0080	
xm_err80_ptr . . . . . . . . . .  	V WORD	0000	DATA	External
XM_ERR83 . . . . . . . . . . . .  	NUMBER	0083	
xm_err83_ptr . . . . . . . . . .  	V WORD	0000	DATA	External
XM_ERR84 . . . . . . . . . . . .  	NUMBER	0084	
xm_err84_ptr . . . . . . . . . .  	V WORD	0000	DATA	External
XM_ERR85 . . . . . . . . . . . .  	NUMBER	0085	
xm_err85_ptr . . . . . . . . . .  	V WORD	0000	DATA	External
XM_ERR86 . . . . . . . . . . . .  	NUMBER	0086	
xm_err86_ptr . . . . . . . . . .  	V WORD	0000	DATA	External
XM_ERR87 . . . . . . . . . . . .  	NUMBER	0087	
xm_err87_ptr . . . . . . . . . .  	V WORD	0000	DATA	External
XM_ERR88 . . . . . . . . . . . .  	NUMBER	0088	
xm_err88_ptr . . . . . . . . . .  	V WORD	0000	DATA	External
XM_ERR89 . . . . . . . . . . . .  	NUMBER	0089	
xm_err89_ptr . . . . . . . . . .  	V WORD	0000	DATA	External
XM_ERR8A . . . . . . . . . . . .  	NUMBER	008A	
xm_err8a_ptr . . . . . . . . . .  	V WORD	0000	DATA	External
XM_ERR8B . . . . . . . . . . . .  	NUMBER	008B	
xm_err8b_ptr . . . . . . . . . .  	V WORD	0000	DATA	External
XM_ERR8D . . . . . . . . . . . .  	NUMBER	008D	
xm_err8d_ptr . . . . . . . . . .  	V WORD	0000	DATA	External
XM_ERR8E . . . . . . . . . . . .  	NUMBER	008E	
xm_err8e_ptr . . . . . . . . . .  	V WORD	0000	DATA	External
XM_ERR8F . . . . . . . . . . . .  	NUMBER	008F	
xm_errff_ptr . . . . . . . . . .  	V WORD	0000	DATA	External
XM_ERROR . . . . . . . . . . . .  	N PROC	0140	CODE	Length = 0096
XM_ERROR_CONT  . . . . . . . . .  	L NEAR	01D2	CODE
xm_err_gen_ptr . . . . . . . . .  	V WORD	0000	DATA	External
xm_frame . . . . . . . . . . . .  	V WORD	0000	DATA	External
XM_FRAME_BUFFER  . . . . . . . .  	N PROC	02DC	CODE	Length = 0006
XM_GET_FRAME_SEG . . . . . . . .  	N PROC	0274	CODE	Length = 000E
XM_GET_HAN_ALLOC . . . . . . . .  	N PROC	010B	CODE	Length = 000F
XM_GET_MAN_STATUS  . . . . . . .  	N PROC	007C	CODE	Length = 001F
xm_handle  . . . . . . . . . . .  	V WORD	0000	DATA	External
XM_HANDLE_COUNT  . . . . . . . .  	N PROC	025B	CODE	Length = 0019
xm_handle_pages_buf  . . . . . .  	V BYTE	0000	DATA	External
xm_handle_ret  . . . . . . . . .  	V WORD	0000	DATA	External
xm_han_alloc . . . . . . . . . .  	V WORD	0000	DATA	External
xm_han_alloc_ptr . . . . . . . .  	V WORD	0000	DATA	External
XM_HAN_PROMPT  . . . . . . . . .  	N PROC	00EF	CODE	Length = 001C
xm_han_ret_ptr . . . . . . . . .  	V WORD	0000	DATA	External
xm_han_total . . . . . . . . . .  	V WORD	0000	DATA	External
XM_INSTALL_CHECK . . . . . . . .  	N PROC	0282	CODE	Length = 001D
xm_log . . . . . . . . . . . . .  	V BYTE	0000	DATA	External
XM_LOG_PROMPT  . . . . . . . . .  	N PROC	00B7	CODE	Length = 001C
xm_mapped_ptr  . . . . . . . . .  	V WORD	0000	DATA	External
XM_MAP_MEMORY  . . . . . . . . .  	N PROC	011A	CODE	Length = 0018
XM_NOT_INST  . . . . . . . . . .  	NUMBER	00FF	
xm_page  . . . . . . . . . . . .  	V BYTE	0000	DATA	External
xm_page_cnt  . . . . . . . . . .  	V WORD	0000	DATA	External
XM_PAGE_PROMPT . . . . . . . . .  	N PROC	009B	CODE	Length = 001C
xm_page_seg_ptr  . . . . . . . .  	V WORD	0000	DATA	External
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Symbols-13


XM_PARSE_ERROR . . . . . . . . .  	N PROC	01D6	CODE	Length = 0007
xm_parse_err_ptr . . . . . . . .  	V WORD	0000	DATA	External
xm_phy . . . . . . . . . . . . .  	V BYTE	0000	DATA	External
XM_PHY_PROMPT  . . . . . . . . .  	N PROC	00D3	CODE	Length = 001C
xm_status_ptr  . . . . . . . . .  	V WORD	0000	DATA	External
xm_total_pg  . . . . . . . . . .  	V WORD	0000	DATA	External
XM_UNALL_COUNT . . . . . . . . .  	N PROC	023A	CODE	Length = 0021
xm_unall_ptr . . . . . . . . . .  	V WORD	0000	DATA	External
XNAMETRANS . . . . . . . . . . .  	NUMBER	0060	

$$DO88 . . . . . . . . . . . . .  	L NEAR	01F6	CODE
$$DO91 . . . . . . . . . . . . .  	L NEAR	021A	CODE
$$EN1  . . . . . . . . . . . . .  	L NEAR	0037	CODE
$$EN101  . . . . . . . . . . . .  	L NEAR	029E	CODE
$$EN105  . . . . . . . . . . . .  	L NEAR	02BF	CODE
$$EN106  . . . . . . . . . . . .  	L NEAR	02BA	CODE
$$EN111  . . . . . . . . . . . .  	L NEAR	02DB	CODE
$$EN112  . . . . . . . . . . . .  	L NEAR	02D6	CODE
$$EN16 . . . . . . . . . . . . .  	L NEAR	0058	CODE
$$EN17 . . . . . . . . . . . . .  	L NEAR	0053	CODE
$$EN22 . . . . . . . . . . . . .  	L NEAR	007B	CODE
$$EN23 . . . . . . . . . . . . .  	L NEAR	0076	CODE
$$EN28 . . . . . . . . . . . . .  	L NEAR	009A	CODE
$$EN3  . . . . . . . . . . . . .  	L NEAR	0037	CODE
$$EN30 . . . . . . . . . . . . .  	L NEAR	009A	CODE
$$EN34 . . . . . . . . . . . . .  	L NEAR	00B6	CODE
$$EN35 . . . . . . . . . . . . .  	L NEAR	00B1	CODE
$$EN40 . . . . . . . . . . . . .  	L NEAR	00D2	CODE
$$EN41 . . . . . . . . . . . . .  	L NEAR	00CD	CODE
$$EN46 . . . . . . . . . . . . .  	L NEAR	00EE	CODE
$$EN47 . . . . . . . . . . . . .  	L NEAR	00E9	CODE
$$EN5  . . . . . . . . . . . . .  	L NEAR	0037	CODE
$$EN52 . . . . . . . . . . . . .  	L NEAR	010A	CODE
$$EN53 . . . . . . . . . . . . .  	L NEAR	0105	CODE
$$EN7  . . . . . . . . . . . . .  	L NEAR	0037	CODE
$$EN84 . . . . . . . . . . . . .  	L NEAR	01EA	CODE
$$EN87 . . . . . . . . . . . . .  	L NEAR	0239	CODE
$$EN88 . . . . . . . . . . . . .  	L NEAR	0214	CODE
$$EN9  . . . . . . . . . . . . .  	L NEAR	0037	CODE
$$EN91 . . . . . . . . . . . . .  	L NEAR	022E	CODE
$$IF1  . . . . . . . . . . . . .  	L NEAR	000A	CODE
$$IF100  . . . . . . . . . . . .  	L NEAR	029E	CODE
$$IF101  . . . . . . . . . . . .  	L NEAR	029A	CODE
$$IF105  . . . . . . . . . . . .  	L NEAR	02BC	CODE
$$IF106  . . . . . . . . . . . .  	L NEAR	02B4	CODE
$$IF111  . . . . . . . . . . . .  	L NEAR	02D8	CODE
$$IF112  . . . . . . . . . . . .  	L NEAR	02D2	CODE
$$IF16 . . . . . . . . . . . . .  	L NEAR	0055	CODE
$$IF17 . . . . . . . . . . . . .  	L NEAR	0050	CODE
$$IF22 . . . . . . . . . . . . .  	L NEAR	0078	CODE
$$IF23 . . . . . . . . . . . . .  	L NEAR	0073	CODE
$$IF28 . . . . . . . . . . . . .  	L NEAR	008F	CODE
$$IF3  . . . . . . . . . . . . .  	L NEAR	0016	CODE
$$IF30 . . . . . . . . . . . . .  	L NEAR	0097	CODE
$$IF34 . . . . . . . . . . . . .  	L NEAR	00B3	CODE
$$IF35 . . . . . . . . . . . . .  	L NEAR	00AD	CODE
$$IF40 . . . . . . . . . . . . .  	L NEAR	00CF	CODE
$$IF41 . . . . . . . . . . . . .  	L NEAR	00C9	CODE
$$IF46 . . . . . . . . . . . . .  	L NEAR	00EB	CODE
$$IF47 . . . . . . . . . . . . .  	L NEAR	00E5	CODE
$$IF5  . . . . . . . . . . . . .  	L NEAR	0020	CODE
$$IF52 . . . . . . . . . . . . .  	L NEAR	0107	CODE
$$IF53 . . . . . . . . . . . . .  	L NEAR	0101	CODE
$$IF58 . . . . . . . . . . . . .  	L NEAR	014B	CODE
$$IF60 . . . . . . . . . . . . .  	L NEAR	0156	CODE
$$IF62 . . . . . . . . . . . . .  	L NEAR	0161	CODE
$$IF64 . . . . . . . . . . . . .  	L NEAR	016C	CODE
$$IF66 . . . . . . . . . . . . .  	L NEAR	0177	CODE
$$IF68 . . . . . . . . . . . . .  	L NEAR	0182	CODE
$$IF7  . . . . . . . . . . . . .  	L NEAR	002A	CODE
$$IF70 . . . . . . . . . . . . .  	L NEAR	018D	CODE
$$IF72 . . . . . . . . . . . . .  	L NEAR	0198	CODE
$$IF74 . . . . . . . . . . . . .  	L NEAR	01A3	CODE
$$IF76 . . . . . . . . . . . . .  	L NEAR	01AE	CODE
$$IF78 . . . . . . . . . . . . .  	L NEAR	01B9	CODE
$$IF80 . . . . . . . . . . . . .  	L NEAR	01C4	CODE
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:18
DEBEMS.SAL - EMS DEBUGGER COMMANDS   PC DOS                 Symbols-14


$$IF82 . . . . . . . . . . . . .  	L NEAR	01CF	CODE
$$IF84 . . . . . . . . . . . . .  	L NEAR	01E7	CODE
$$IF87 . . . . . . . . . . . . .  	L NEAR	0236	CODE
$$IF9  . . . . . . . . . . . . .  	L NEAR	0034	CODE
$$IF96 . . . . . . . . . . . . .  	L NEAR	025A	CODE
$$IF98 . . . . . . . . . . . . .  	L NEAR	0273	CODE
?PLM . . . . . . . . . . . . . .  	NUMBER	0000	
?WIN . . . . . . . . . . . . . .  	NUMBER	0000	
@CPU . . . . . . . . . . . . . .  	TEXT  0101h		
@FILENAME  . . . . . . . . . . .  	TEXT  debems		
@VERSION . . . . . . . . . . . .  	TEXT  510		


   3722 Source  Lines
   3834 Total   Lines
    984 Symbols

  43390 + 168515 Bytes symbol space free

      0 Warning Errors
      0 Severe  Errors
