kolibrios/programs/fs/unz/DEBUG.INC

192 lines
2.5 KiB
Plaintext
Raw Normal View History

dps fix debug_print
dpd fix debug_print_dec
dpds fix debug_print_dec_sign
dnl fix debug_newline
dpsP fix debug_printP
;if ~(newline eq)
newline fix debug_newline
;end if
macro debug_print str
{
local ..string, ..label
jmp ..label
..string db str,0
..label:
pushf
pushad
mov edx,..string
call debug_outstr
popad
popf
}
macro debug_print_dec arg
{
pushf
pushad
if ~arg eq eax
mov eax,arg
end if
call debug_outdec
popad
popf
}
macro debug_print_dec_sign arg
{
local .sign,.rtrn
pushf
pushad
if ~arg eq eax
mov eax,arg
end if
test eax,80000000h
jnz .sign
call debug_outdec
popad
popf
jmp .rtrn
.sign:
not eax
inc eax
push eax
mov cl,'-'
mov eax,63
mov ebx,1
int 0x40
pop eax
call debug_outdec
popad
popf
.rtrn:
}
;---------------------------------
debug_outdec: ;(eax - num, edi-str)
push 10 ;2
pop ecx ;1
push -'0' ;2
.l0:
xor edx,edx ;2
div ecx ;2
push edx ;1
test eax,eax ;2
jnz .l0 ;2
.l1:
pop eax ;1
add al,'0' ;2
call debug_outchar ; stosb
jnz .l1 ;2
ret ;1
;---------------------------------
debug_outchar: ; al - char
pushf
pushad
mov cl,al
mov eax,63
mov ebx,1
int 0x40
popad
popf
ret
debug_outstr:
mov eax,63
mov ebx,1
@@:
mov cl,[edx]
test cl,cl
jz @f
int 40h
inc edx
jmp @b
@@:
ret
_debug_crlf db 13, 10, 0
macro debug_newline
{
pushf
pushad
mov edx, _debug_crlf
call debug_outstr
popad
popf
}
macro debug_printP Pstr
{
pushf
pushad
mov edx,Pstr
call debug_outstr
popad
popf
}
macro print message
{
dps message
dnl
}
macro pregs
{
dps "EAX: "
dpd eax
dps " EBX: "
dpd ebx
newline
dps "ECX: "
dpd ecx
dps " EDX: "
dpd edx
newline
}
macro debug_print_hex arg
{
pushf
pushad
if ~arg eq eax
mov eax, arg
end if
call debug_outhex
popad
popf
}
dph fix debug_print_hex
debug_outhex:
; eax - number
mov edx, 8
.new_char:
rol eax, 4
movzx ecx, al
and cl, 0x0f
mov cl, [__hexdigits + ecx]
pushad
mcall 63, 1
popad
dec edx
jnz .new_char
ret
__hexdigits:
db '0123456789ABCDEF'
;-------------------------------------------------------------------------------