357 lines
6.7 KiB
PHP
357 lines
6.7 KiB
PHP
;++
|
|
;
|
|
;Copyright (c) 1991 Microsoft Corporation
|
|
;
|
|
;Module Name:
|
|
;
|
|
; debugmac.inc
|
|
;
|
|
;Abstract:
|
|
;
|
|
; Contains debugging macros:
|
|
;
|
|
; DbgBreakPoint
|
|
; DbgUnsupported
|
|
; DbgDEBUG
|
|
; DbgPrint
|
|
; DbgPrintTty
|
|
; DbgPrintString
|
|
; DbgPrintHexDword
|
|
; DbgPrintHexWord
|
|
; DbgPrintHexByte
|
|
; DbgPrintNearPointer
|
|
; DbgPrintFarPointer
|
|
;
|
|
;Author:
|
|
;
|
|
; Richard L Firth (rfirth) 13-Sep-1991
|
|
;
|
|
;Environment:
|
|
;
|
|
; DOS application mode only
|
|
;
|
|
;[Notes:]
|
|
;
|
|
; optional-notes
|
|
;
|
|
;Revision History:
|
|
;
|
|
; 13-Sep-1991 rfirth
|
|
; Created
|
|
;
|
|
;--
|
|
|
|
|
|
;*** DbgBreakPoint
|
|
;*
|
|
;* Same as NT routine of same name. No-op in non-DEBUG version
|
|
;*
|
|
;* ENTRY
|
|
;*
|
|
;* EXIT
|
|
;*
|
|
;* RETURNS
|
|
;*
|
|
;* ASSUMES
|
|
;*
|
|
;***
|
|
|
|
DbgBreakPoint macro
|
|
if DEBUG
|
|
int 3
|
|
endif
|
|
endm
|
|
|
|
;*** DbgUnsupported
|
|
;*
|
|
;* Causes the 32-bit support code to display a message about an unsupported
|
|
;* service code, and dumps the 16-bit registers. Used to discover when an
|
|
;* unsupported int 2f/11 call or int 21/5f call is being made
|
|
;*
|
|
;* ENTRY
|
|
;*
|
|
;* EXIT
|
|
;*
|
|
;* RETURNS
|
|
;*
|
|
;* ASSUMES
|
|
;*
|
|
;***
|
|
|
|
DbgUnsupported macro
|
|
if DEBUG
|
|
SVC -1
|
|
endif
|
|
endm
|
|
|
|
;*** DbgDEBUG
|
|
;*
|
|
;* Prints the string "DEBUG: " to console using Bios Int 10h/ah=0eh
|
|
;*
|
|
;* ENTRY nothing
|
|
;*
|
|
;* EXIT nothing
|
|
;*
|
|
;* USES ax
|
|
;*
|
|
;* ASSUMES 286+
|
|
;*
|
|
;***
|
|
|
|
DbgDEBUG macro
|
|
mov ax,(14 shl 8) + 'D'
|
|
int 10h
|
|
mov al,'E'
|
|
int 10h
|
|
mov al,'B'
|
|
int 10h
|
|
mov al,'U'
|
|
int 10h
|
|
mov al,'G'
|
|
int 10h
|
|
mov al,':'
|
|
int 10h
|
|
mov al,' '
|
|
int 10h
|
|
endm
|
|
|
|
|
|
|
|
;*** DbgCrLf
|
|
;*
|
|
;* Prints CR,LF to console using Bios Int 10h/ah=0eh
|
|
;*
|
|
;* ENTRY nothing
|
|
;*
|
|
;* EXIT nothing
|
|
;*
|
|
;* USES nothing
|
|
;*
|
|
;* ASSUMES 286+
|
|
;*
|
|
;***
|
|
|
|
DbgCrLf macro
|
|
push ax
|
|
mov ax,(14 shl 8) + 13
|
|
int 10h
|
|
mov al,10
|
|
int 10h
|
|
pop ax
|
|
endm
|
|
|
|
|
|
|
|
;*** DbgPrint
|
|
;*
|
|
;* Prints an ASCIZ string to console using Bios Int 10h
|
|
;*
|
|
;* ENTRY string - address of ASCIZ string to print
|
|
;*
|
|
;* EXIT nothing
|
|
;*
|
|
;* USES nothing
|
|
;*
|
|
;* ASSUMES 286+
|
|
;*
|
|
;***
|
|
|
|
DbgPrint macro string
|
|
if DEBUG ;; no macro if not debug version
|
|
pushf ;; save regs used by DbgPrintTty
|
|
push ax
|
|
push bx
|
|
push si
|
|
push ds
|
|
mov ax,seg string
|
|
mov ds,ax
|
|
mov si,offset string;; ds:si = address of string
|
|
DbgPrintTty ;; display it on console
|
|
pop ds
|
|
pop si
|
|
pop bx
|
|
pop ax
|
|
popf
|
|
endif
|
|
endm
|
|
|
|
|
|
|
|
;*** DbgPrintTty
|
|
;*
|
|
;* Prints an ASCIZ string in ds:si to console using Bios Int 10h
|
|
;*
|
|
;* ENTRY page - if present defines which Bios video page to use
|
|
;* Defaults to 0
|
|
;* ds:si - address of ASCIZ string to print
|
|
;*
|
|
;* EXIT nothing
|
|
;*
|
|
;* USES al, bh, si, flags
|
|
;*
|
|
;* ASSUMES 286+
|
|
;*
|
|
;***
|
|
|
|
DbgPrintTty macro page
|
|
local l1,l2
|
|
|
|
if DEBUG ;; no macro if not debug version
|
|
mov ah,14 ;; Bios Int write character as TTY function
|
|
ifb <page>
|
|
sub bh,bh
|
|
else
|
|
mov bh,page
|
|
endif
|
|
cld ;; autoincrement lodsb
|
|
l1: lodsb ;; al := next character; si := next character addr
|
|
or al,al ;; eof string?
|
|
jz l2 ;; yes
|
|
int 10h ;; display it to console
|
|
jmp short l1 ;; go round again
|
|
l2:
|
|
endif
|
|
endm
|
|
|
|
|
|
|
|
;*** DbgPrintString
|
|
;*
|
|
;* Prints a string to console using Bios Int 10h. Note that this macro
|
|
;* does not do printf style substitutions. The string "DEBUG: " will be
|
|
;* displayed if the banner parm is not blank
|
|
;*
|
|
;* ENTRY string - character string. Needn't be zero-terminated
|
|
;* banner - the "DEBUG: " banner will be printed if not blank
|
|
;*
|
|
;* EXIT nothing
|
|
;*
|
|
;* USES nothing
|
|
;*
|
|
;* ASSUMES 286+
|
|
;*
|
|
;***
|
|
|
|
DbgPrintString macro string, banner
|
|
local s1
|
|
local l1
|
|
|
|
if DEBUG ;; no macro if not debug version
|
|
jmp short l1
|
|
s1 db &string,0
|
|
l1: pushf ;; don't destroy direction flag
|
|
pusha ;; save gp regs
|
|
ifb <banner>
|
|
DbgDEBUG ;; Display "DEBUG: "
|
|
endif
|
|
push ds ;; save user's data seg
|
|
push cs
|
|
pop ds ;; ds == cs
|
|
mov si,offset cs:s1 ;; si := string offset
|
|
DbgPrintTty ;; display ds:si to console
|
|
pop ds ;; restore user's data seg
|
|
popa ;; restore gp regs
|
|
popf ;; restore direction flag+
|
|
endif
|
|
endm
|
|
|
|
|
|
|
|
;*** DbgPrintHexDword
|
|
;*
|
|
;* Prints a dword to console in hex notation using Bios Int 10h
|
|
;*
|
|
;* ENTRY dword - dword to print
|
|
;*
|
|
;* EXIT nothing
|
|
;*
|
|
;* USES nothing
|
|
;*
|
|
;* ASSUMES 286+
|
|
;*
|
|
;***
|
|
|
|
DbgPrintHexDword macro dword
|
|
if DEBUG ;; no macro if not debug version
|
|
DbgPrint <"DbgPrintHexDword not implemented yet",13,10>
|
|
endif
|
|
endm
|
|
|
|
|
|
|
|
;*** DbgPrintHexWord
|
|
;*
|
|
;* Prints a word to console in hex notation using Bios Int 10h
|
|
;*
|
|
;* ENTRY word - to print. Can be memory or register
|
|
;*
|
|
;* EXIT nothing
|
|
;*
|
|
;* USES nothing
|
|
;*
|
|
;* ASSUMES 286+
|
|
;*
|
|
;***
|
|
|
|
DbgPrintHexWord macro word
|
|
local l1, l2
|
|
if DEBUG ;; no macro if not debug version
|
|
pushf ;; don't use any registers
|
|
push ax
|
|
push cx
|
|
push dx
|
|
ifdifi <word>,<ax>
|
|
mov ax,word
|
|
endif
|
|
mov cx,4
|
|
l1: rol ax,4
|
|
mov dx,ax
|
|
and al,0fh
|
|
cmp al,9
|
|
jle l2
|
|
add al,'a'-('9'+1)
|
|
l2: add al,'0'
|
|
mov ah,14
|
|
int 10h
|
|
mov ax,dx
|
|
loop l1
|
|
pop dx
|
|
pop cx
|
|
pop ax
|
|
popf
|
|
endif
|
|
endm
|
|
|
|
|
|
|
|
;*** DbgPrintHexByte
|
|
;*
|
|
;* Prints a string to console using Bios Int 10h. Note that this macro
|
|
;* does not do printf style substitutions
|
|
;*
|
|
;* ENTRY string - character string. Needn't be zero-terminated
|
|
;*
|
|
;* EXIT
|
|
;*
|
|
;* USES nothing
|
|
;*
|
|
;* ASSUMES 286+
|
|
;*
|
|
;***
|
|
|
|
DbgPrintHexByte macro byte
|
|
if DEBUG ;; no macro if not debug version
|
|
DbgPrint <"DbgPrintHexByte not implemented yet",13,10>
|
|
endif
|
|
endm
|
|
|
|
|
|
|
|
DbgPrintNearPointer macro nearptr
|
|
endm
|
|
|
|
|
|
|
|
DbgPrintFarPointer macro farptr
|
|
endm
|