065b8d32b2
git-svn-id: svn://kolibrios.org@31 a494cfbc-eb01-0410-851d-a64ba20cac60
201 lines
4.2 KiB
PHP
201 lines
4.2 KiB
PHP
; macros to write stuff to menuet's debug message board.
|
|
; the macros don't change any registers, not even flags.
|
|
; they take only effect if DEBUG is defined.
|
|
;
|
|
; Copyright (c) 2003 Thomas Mathys
|
|
; killer@vantage.ch
|
|
;
|
|
; This program is free software; you can redistribute it and/or modify
|
|
; it under the terms of the GNU General Public License as published by
|
|
; the Free Software Foundation; either version 2 of the License, or
|
|
; (at your option) any later version.
|
|
;
|
|
; This program is distributed in the hope that it will be useful,
|
|
; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
; GNU General Public License for more details.
|
|
;
|
|
; You should have received a copy of the GNU General Public License
|
|
; along with this program; if not, write to the Free Software
|
|
; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
;
|
|
%ifndef _DBGBOARD_INC
|
|
%define _DBGBOARD_INC
|
|
|
|
|
|
%ifdef DEBUG
|
|
|
|
|
|
;********************************************************************
|
|
; print newline
|
|
; no input
|
|
;********************************************************************
|
|
%macro DBG_BOARD_PRINTNEWLINE 0
|
|
call dbg_board_printnewline
|
|
%endm
|
|
|
|
|
|
;********************************************************************
|
|
; print a character
|
|
;
|
|
; examples : DBG_BOARD_PRINTCHAR '?'
|
|
; DBG_BOARD_PRINTCHAR 65
|
|
; DBG_BOARD_PRINTCHAR cl
|
|
; DBG_BOARD_PRINTCHAR [esi]
|
|
; DBG_BOARD_PRINTCHAR [somevariable]
|
|
;********************************************************************
|
|
%macro DBG_BOARD_PRINTCHAR 1
|
|
push ecx
|
|
mov cl,byte %1
|
|
call dbg_board_printchar
|
|
pop ecx
|
|
%endm
|
|
|
|
|
|
|
|
;********************************************************************
|
|
; print a dword (in hex)
|
|
;
|
|
; examples: DBG_BOARD_PRINTDWORD esp
|
|
; DBG_BOARD_PRINTDWORD 0xdeadbeef
|
|
; DBG_BOARD_PRINTDWORD [somevariable]
|
|
;********************************************************************
|
|
%macro DBG_BOARD_PRINTDWORD 1
|
|
push dword %1
|
|
call dbg_board_printdword
|
|
%endm
|
|
|
|
|
|
;********************************************************************
|
|
; print a string literal
|
|
; a terminating zero is automagically appended to the string.
|
|
;
|
|
; examples DBG_BOARD_PRINTSTRINGLITERAL "foo",0
|
|
; DBG_BOARD_PRINTSTRINGLITERAL "bar",10,13,0
|
|
;********************************************************************
|
|
%macro DBG_BOARD_PRINTSTRINGLITERAL 1+
|
|
jmp %%bar
|
|
%%foo db %1, 0 ; terminate string, just to be sure
|
|
%%bar:
|
|
push dword %%foo
|
|
call dbg_board_printstring
|
|
%endm
|
|
|
|
|
|
;********************************************************************
|
|
; print a string (asciiz)
|
|
;
|
|
; examples DBG_BOARD_PRINTSTRING addressofstring
|
|
; DBG_BOARD_PRINTSTRING esi
|
|
; DBG_BOARD_PRINTSTRING [ebx]
|
|
;********************************************************************
|
|
%macro DBG_BOARD_PRINTSTRING 1
|
|
push dword %1
|
|
call dbg_board_printstring
|
|
%endm
|
|
|
|
|
|
; no input
|
|
dbg_board_printnewline:
|
|
pushad
|
|
pushfd
|
|
mov eax,MOS_SC_DEBUGBOARD
|
|
mov ebx,1
|
|
mov ecx,10
|
|
int 0x40
|
|
mov ecx,13
|
|
int 0x40
|
|
popfd
|
|
popad
|
|
ret
|
|
|
|
|
|
; input : cl = character to print
|
|
dbg_board_printchar:
|
|
pushad
|
|
pushfd
|
|
mov eax,MOS_SC_DEBUGBOARD
|
|
mov ebx,1
|
|
and ecx,0xff
|
|
int 0x40
|
|
popfd
|
|
popad
|
|
ret
|
|
|
|
|
|
; input : dword to print on stack
|
|
dbg_board_printdword:
|
|
enter 0,0
|
|
pushad
|
|
pushfd
|
|
mov eax,MOS_SC_DEBUGBOARD
|
|
mov ebx,1
|
|
mov ecx,'0' ; print 0x prefix
|
|
int 0x40
|
|
mov ecx,'x'
|
|
int 0x40
|
|
mov edx,[ebp + 8] ; get dword to print
|
|
mov esi,8 ; iterate through all nibbles
|
|
.loop:
|
|
mov ecx,edx ; display hex digit
|
|
shr ecx,28
|
|
movzx ecx,byte [dbg_board_printdword_digits + ecx]
|
|
int 0x40
|
|
shl edx,4 ; next nibble
|
|
dec esi
|
|
jnz .loop
|
|
popfd
|
|
popad
|
|
leave
|
|
ret 4
|
|
dbg_board_printdword_digits:
|
|
db '0','1','2','3','4','5','6','7'
|
|
db '8','9','a','b','c','d','e','f'
|
|
|
|
|
|
; input : address of string (asciiz) to print on stack
|
|
dbg_board_printstring:
|
|
enter 0,0
|
|
pushad
|
|
pushfd
|
|
cld
|
|
mov esi,[ebp + 8] ; esi -> string
|
|
mov ebx,1
|
|
.loop:
|
|
lodsb ; get character
|
|
or al,al ; zero ?
|
|
je .done ; yeah -> get outta here
|
|
movzx ecx,al ; nope -> display character
|
|
mov eax,MOS_SC_DEBUGBOARD
|
|
int 0x40
|
|
jmp .loop
|
|
.done:
|
|
popfd
|
|
popad
|
|
leave
|
|
ret 4
|
|
|
|
%else
|
|
|
|
|
|
%macro DBG_BOARD_PRINTNEWLINE 0
|
|
%endm
|
|
|
|
%macro DBG_BOARD_PRINTCHAR 1
|
|
%endm
|
|
|
|
%macro DBG_BOARD_PRINTDWORD 1
|
|
%endm
|
|
|
|
%macro DBG_BOARD_PRINTSTRINGLITERAL 1+
|
|
%endm
|
|
|
|
%macro DBG_BOARD_PRINTSTRING 1
|
|
%endm
|
|
|
|
%endif
|
|
|
|
|
|
%endif
|
|
|