Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
31 halyavin 1
; macros to write stuff to menuet's debug message board.
2
; the macros don't change any registers, not even flags.
3
; they take only effect if DEBUG is defined.
4
;
5
; Copyright (c) 2003 Thomas Mathys
6
; killer@vantage.ch
7
;
8
; This program is free software; you can redistribute it and/or modify
9
; it under the terms of the GNU General Public License as published by
10
; the Free Software Foundation; either version 2 of the License, or
11
; (at your option) any later version.
12
;
13
; This program is distributed in the hope that it will be useful,
14
; but WITHOUT ANY WARRANTY; without even the implied warranty of
15
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
; GNU General Public License for more details.
17
;
18
; You should have received a copy of the GNU General Public License
19
; along with this program; if not, write to the Free Software
20
; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21
;
22
%ifndef _DBGBOARD_INC
23
%define _DBGBOARD_INC
24
 
25
 
26
%ifdef DEBUG
27
 
28
 
29
;********************************************************************
30
;	print newline
31
;	no input
32
;********************************************************************
33
%macro DBG_BOARD_PRINTNEWLINE 0
34
	call	dbg_board_printnewline
35
%endm
36
 
37
 
38
;********************************************************************
39
;	print a character
40
;
41
;	examples	:	DBG_BOARD_PRINTCHAR '?'
42
;				DBG_BOARD_PRINTCHAR 65
43
;				DBG_BOARD_PRINTCHAR cl
44
;				DBG_BOARD_PRINTCHAR [esi]
45
;				DBG_BOARD_PRINTCHAR [somevariable]
46
;********************************************************************
47
%macro DBG_BOARD_PRINTCHAR 1
48
	push	ecx
49
	mov	cl,byte %1
50
	call	dbg_board_printchar
51
	pop	ecx
52
%endm
53
 
54
 
55
 
56
;********************************************************************
57
;	print a dword (in hex)
58
;
59
;	examples:	DBG_BOARD_PRINTDWORD esp
60
;			DBG_BOARD_PRINTDWORD 0xdeadbeef
61
;			DBG_BOARD_PRINTDWORD [somevariable]
62
;********************************************************************
63
%macro DBG_BOARD_PRINTDWORD 1
64
	push	dword %1
65
	call	dbg_board_printdword
66
%endm
67
 
68
 
69
;********************************************************************
70
;	print a string literal
71
;	a terminating zero is automagically appended to the string.
72
;
73
;	examples	DBG_BOARD_PRINTSTRINGLITERAL "foo",0
74
;			DBG_BOARD_PRINTSTRINGLITERAL "bar",10,13,0
75
;********************************************************************
76
%macro DBG_BOARD_PRINTSTRINGLITERAL 1+
77
	jmp	%%bar
78
%%foo	db	%1, 0		; terminate string, just to be sure
79
%%bar:
80
	push	dword %%foo
81
	call	dbg_board_printstring
82
%endm
83
 
84
 
85
;********************************************************************
86
;	print a string (asciiz)
87
;
88
;	examples	DBG_BOARD_PRINTSTRING addressofstring
89
;			DBG_BOARD_PRINTSTRING esi
90
;			DBG_BOARD_PRINTSTRING [ebx]
91
;********************************************************************
92
%macro DBG_BOARD_PRINTSTRING 1
93
	push	dword %1
94
	call	dbg_board_printstring
95
%endm
96
 
97
 
98
; no input
99
dbg_board_printnewline:
100
	pushad
101
	pushfd
102
	mov	eax,MOS_SC_DEBUGBOARD
103
	mov	ebx,1
104
	mov	ecx,10
105
	int	0x40
106
	mov	ecx,13
107
	int	0x40
108
	popfd
109
	popad
110
	ret
111
 
112
 
113
; input : cl = character to print
114
dbg_board_printchar:
115
	pushad
116
	pushfd
117
	mov	eax,MOS_SC_DEBUGBOARD
118
	mov	ebx,1
119
	and	ecx,0xff
120
	int	0x40
121
	popfd
122
	popad
123
	ret
124
 
125
 
126
; input : dword to print on stack
127
dbg_board_printdword:
128
	enter	0,0
129
	pushad
130
	pushfd
131
	mov	eax,MOS_SC_DEBUGBOARD
132
	mov	ebx,1
133
	mov	ecx,'0'			; print 0x prefix
134
	int	0x40
135
	mov	ecx,'x'
136
	int	0x40
137
	mov	edx,[ebp + 8]		; get dword to print
138
	mov	esi,8			; iterate through all nibbles
139
.loop:
140
	mov	ecx,edx			; display hex digit
141
	shr	ecx,28
142
	movzx	ecx,byte [dbg_board_printdword_digits + ecx]
143
	int	0x40
144
	shl	edx,4			; next nibble
145
	dec	esi
146
	jnz	.loop
147
	popfd
148
	popad
149
	leave
150
	ret	4
151
dbg_board_printdword_digits:
152
	db	'0','1','2','3','4','5','6','7'
153
	db	'8','9','a','b','c','d','e','f'
154
 
155
 
156
; input : address of string (asciiz) to print on stack
157
dbg_board_printstring:
158
	enter	0,0
159
	pushad
160
	pushfd
161
	cld
162
	mov	esi,[ebp + 8]		; esi -> string
163
	mov	ebx,1
164
.loop:
165
	lodsb				; get character
166
	or	al,al			; zero ?
167
	je	.done			; yeah -> get outta here
168
	movzx	ecx,al			; nope -> display character
169
	mov	eax,MOS_SC_DEBUGBOARD
170
	int	0x40
171
	jmp	.loop
172
.done:
173
	popfd
174
	popad
175
	leave
176
	ret	4
177
 
178
%else
179
 
180
 
181
%macro DBG_BOARD_PRINTNEWLINE 0
182
%endm
183
 
184
%macro DBG_BOARD_PRINTCHAR 1
185
%endm
186
 
187
%macro DBG_BOARD_PRINTDWORD 1
188
%endm
189
 
190
%macro DBG_BOARD_PRINTSTRINGLITERAL 1+
191
%endm
192
 
193
%macro DBG_BOARD_PRINTSTRING 1
194
%endm
195
 
196
%endif
197
 
198
 
199
%endif
200