0,0 → 1,200 |
; 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 |
|
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |