; 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