Subversion Repositories Kolibri OS

Rev

Rev 1996 | Rev 1998 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
31 halyavin 1
;
2
;   DEBUG BOARD for APPLICATIONS and KERNEL DEVELOPMENT
3
;
4
;   See f63
5
;
6
;   Compile with FASM for Menuet
7
;
1571 Asper 8
WRITE_LOG  equ 1
31 halyavin 9
 
10
include 'lang.inc'
11
 
12
   use32
1571 Asper 13
   org	  0x0
14
   db	  'MENUET01'		  ; 8 byte id
15
   dd	  0x01			  ; header version
16
   dd	  START 		  ; start of code
17
   dd	  I_END 		  ; size of image
1997 clevermous 18
   dd	  mem			; memory for app
19
   dd	  mem			; esp
1996 clevermous 20
   dd	  filename , 0x0	  ; I_Param , I_Icon
1741 dunkaist 21
include '../../../macros.inc'
131 diamond 22
include 'debug.inc'
23
purge newline
31 halyavin 24
MAXSTRINGS = 16
131 diamond 25
TMP = 80*(MAXSTRINGS+1)
31 halyavin 26
 
1571 Asper 27
START:				; start of execution
1996 clevermous 28
	mov	edi, filename
29
	cmp	byte [edi], 0
30
	jnz	param
31
	mov	esi, default_filename
32
@@:
33
	lodsb
34
	stosb
35
	test	al, al
36
	jnz	@b
37
param:
31 halyavin 38
 
1355 diamond 39
; allow user to see messages written before start
40
;     mov  ecx,4096
41
;    flush:
42
;     mov  eax,63
43
;     mov  ebx,2
44
;     mcall
45
;     loop flush
31 halyavin 46
 
131 diamond 47
     mov  ecx, TMP
31 halyavin 48
     xor  eax, eax
131 diamond 49
     mov  edi, [targ]
31 halyavin 50
     rep  stosb
51
 
131 diamond 52
     mov  [tmp1],'x'
53
     mov  [tmp2],'x'
31 halyavin 54
 
55
     mov  eax,14
447 heavyiron 56
     mcall
31 halyavin 57
     and  eax,0xffff0000
131 diamond 58
     sub  eax,399 shl 16
59
     add  eax,399
31 halyavin 60
     mov  [xstart],eax
447 heavyiron 61
 
62
     mov  eax,48
63
     mov  ebx,3
64
     mov  ecx,sc
65
     mov  edx,sizeof.system_colors
66
     mcall
1571 Asper 67
  if WRITE_LOG
68
     mov  esi, filename
69
     call CreateFile
70
  end if
447 heavyiron 71
 
131 diamond 72
  red:
31 halyavin 73
     call draw_window
74
 
75
still:
76
 
1571 Asper 77
    mov  eax,23 		; wait here for event
31 halyavin 78
    mov  ebx,1
447 heavyiron 79
    mcall
31 halyavin 80
 
1571 Asper 81
    cmp  eax,1			; redraw request ?
82
    je	 red
83
    cmp  eax,2			; key in buffer ?
84
    je	 key
85
    cmp  eax,3			; button in buffer ?
86
    je	 button
447 heavyiron 87
 
31 halyavin 88
    mov  eax,63
89
    mov  ebx,2
447 heavyiron 90
    mcall
31 halyavin 91
 
92
    cmp  ebx,1
93
    jne  still
1571 Asper 94
 
31 halyavin 95
  new_data:
1571 Asper 96
  if WRITE_LOG
97
     pusha
98
     mov  [tmp], al
99
     mov  edx, tmp
100
     mov  ecx, 1
101
     mov  esi, filename
102
  .write_to_logfile:
103
     call WriteToFile
104
     cmp  eax, 5
105
     jne  @f
106
     mov  esi, filename
107
     mov  [filepos], 0
108
     call CreateFile
109
     jmp  .write_to_logfile
110
  @@:
111
     inc  [filepos]
112
     popa
113
  end if
114
 
131 diamond 115
    mov  ebp,[targ]
116
  .no4:
31 halyavin 117
    cmp  al,13
118
    jne  no13
131 diamond 119
    and  dword[ebp-8],0
31 halyavin 120
    jmp  new_check
121
   no13:
122
    cmp  al,10
123
    jne  no10
1868 serge 124
    and  dword[ebp-8],0
131 diamond 125
    inc  dword[ebp-4]
126
    cmp  dword[ebp-4],MAXSTRINGS
127
    jbe  .noypos
128
    mov  dword[ebp-4],MAXSTRINGS
129
    lea  esi,[ebp+80]
130
    mov  edi,ebp
31 halyavin 131
    mov  ecx,80*(MAXSTRINGS)
132
    cld
133
    rep  movsb
134
 
131 diamond 135
    mov  esi,[ebp-4]
31 halyavin 136
    imul esi,80
131 diamond 137
    add  esi,[ebp-8]
138
    add  esi,ebp
31 halyavin 139
    mov  ecx,80
140
    xor  al,al
141
    rep  stosb
131 diamond 142
  .noypos:
143
    mov  [targ],text2
144
    and  [krnl_cnt],0
31 halyavin 145
    jmp  new_check
146
  no10:
131 diamond 147
    cmp  ebp,text1
1571 Asper 148
    je	 add2
149
		mov  ecx,[krnl_cnt]
131 diamond 150
		  cmp  al,[krnl_msg+ecx]
1571 Asper 151
		jne  .noknl
131 diamond 152
		  inc  [krnl_cnt]
1571 Asper 153
		cmp  [krnl_cnt],4
154
		jne  new_check
131 diamond 155
    mov  [targ],text1
1571 Asper 156
	.noknl:
131 diamond 157
    mov  ebp,[targ]
158
	   jecxz .add
159
    push eax
160
    mov  esi,krnl_msg
161
   .l1:
162
    lodsb
163
    call add_char
164
    loop .l1
165
    pop  eax
166
   .add:
167
    and  [krnl_cnt],0
168
  add2:
169
    call add_char
31 halyavin 170
 
171
  new_check:
172
 
173
    mov  eax,63
174
    mov  ebx,2
447 heavyiron 175
    mcall
31 halyavin 176
 
177
    cmp  ebx,1
1571 Asper 178
    je	 new_data
31 halyavin 179
 
180
    call draw_window
181
 
182
    jmp  still
183
 
1571 Asper 184
  key:				; key
185
    mov  al,2		       ; just read it and ignore
447 heavyiron 186
    mcall
131 diamond 187
    cmp  ah,' '
1997 clevermous 188
    je	 button.noclose
31 halyavin 189
    jmp  still
190
 
1571 Asper 191
  button:			; button
192
    mov  al,17		       ; get id
447 heavyiron 193
    mcall
31 halyavin 194
 
1571 Asper 195
    cmp  ah,1			; button id=1 ?
131 diamond 196
    jne  .noclose
31 halyavin 197
 
1571 Asper 198
    or	 eax,-1 		; close this program
447 heavyiron 199
    mcall
131 diamond 200
  .noclose:
1997 clevermous 201
    xor  [vmode],1
131 diamond 202
    jmp  red
31 halyavin 203
 
131 diamond 204
add_char:
205
    push esi
206
    mov  esi,[ebp-4]
207
    imul esi,80
208
    add  esi,[ebp-8]
209
    mov  [ebp+esi],al
210
    inc  dword[ebp-8]
211
    cmp  dword[ebp-8],80
1571 Asper 212
    jb	 .ok
131 diamond 213
    mov  dword[ebp-8],79
214
  .ok:
215
    pop  esi
216
    ret
31 halyavin 217
 
218
;   *********************************************
219
;   *******  WINDOW DEFINITIONS AND DRAW ********
220
;   *********************************************
221
 
222
 
223
draw_window:
224
 
1571 Asper 225
    mov  eax,12 		   ; function 12:tell os about windowdraw
226
    mov  ebx,1			   ; 1, start of draw
447 heavyiron 227
    mcall
31 halyavin 228
 
1571 Asper 229
				   ; DRAW WINDOW
230
    xor  eax,eax		     ; function 0 : define and draw window
31 halyavin 231
;   mov  ebx,50*65536+400          ; [x start] *65536 + [x size]
232
    mov  ebx,[xstart]
1571 Asper 233
    mov  ecx,MAXSTRINGS*10+45	   ; [y start] *65536 + [y size]
234
    mov  edx,[sc.work]		   ; color of work area RRGGBB,8->color gl
235
    or	 edx,0x13000000
236
    mov  edi,title		  ; WINDOW LABEL
447 heavyiron 237
    mcall
1571 Asper 238
 
131 diamond 239
    mov  ecx,4
240
    mov  esi,[sc.work]
447 heavyiron 241
    mov  ebx,296 shl 16+5*6
131 diamond 242
    mov  edx,3;+1 shl 30
243
    mcall 8,,<5,12>
244
    mov  edx,[vmode]
245
    lea  edx,[edx*4+duk]
447 heavyiron 246
    mcall 4,<300,8>,,,4
131 diamond 247
 
1571 Asper 248
    mov  ebx,15*65536+33	   ; draw info text with function 4
31 halyavin 249
    mov  ecx,[sc.work_text]
131 diamond 250
    mov  edx,text1
251
    cmp  [vmode],0
1571 Asper 252
    je	 .kern
131 diamond 253
    mov  edx,text2
254
  .kern:
31 halyavin 255
    mov  esi,80
447 heavyiron 256
    mov  eax,4
31 halyavin 257
  newline:
447 heavyiron 258
    mcall
31 halyavin 259
    add  ebx,10
260
    add  edx,80
261
    cmp  [edx],byte 'x'
262
    jne  newline
1571 Asper 263
    mov  eax,12 		   ; function 12:tell os about windowdraw
264
    mov  ebx,2			   ; 2, end of draw
447 heavyiron 265
    mcall
31 halyavin 266
 
267
    ret
268
 
269
 
1571 Asper 270
if WRITE_LOG
271
;********************************************
272
;*  input:  esi = pointer to the file name  *
273
;********************************************
274
 
275
CreateFile:
276
    pusha
277
    mov      dword [InfoStructure],    2   ; create file
278
    mov      dword [InfoStructure+4],  0   ; reserved
279
    mov      dword [InfoStructure+8],  0   ; reserved
280
    mov      dword [InfoStructure+12], 0   ; 0 bytes to write (just create)
281
    mov      dword [InfoStructure+16], 0   ; NULL data pointer (no data)
282
    mov      dword [InfoStructure+20], 0   ; reserved
283
    mov      dword [InfoStructure+21], esi ; pointer to the file name
284
    mcall    70, InfoStructure
285
    clc
286
    test     eax, eax
287
    jz	     .out
288
    stc
289
  .out:
290
    popa
291
    ret
292
 
293
;********************************************
294
;*  input:  esi = pointer to the file name  *
295
;*          edx = pointer to data buffer    *
296
;*          ecx = data length               *
297
;********************************************
298
 
299
WriteToFile:
300
    push     ebx
301
    mov      dword [InfoStructure],    3   ; write to file
302
    mov      eax,  [filepos]
303
    mov      dword [InfoStructure+4],  eax ; lower position addr
304
    mov      dword [InfoStructure+8],  0   ; upper position addr (0 for FAT)
305
    mov      dword [InfoStructure+12], ecx ; number of bytes to write
306
    mov      dword [InfoStructure+16], edx ; pointer to data buffer
307
    mov      dword [InfoStructure+20], 0   ; reserved
308
    mov      dword [InfoStructure+21], esi ; pointer to the file name
309
    mcall    70, InfoStructure
310
    clc
311
    test     eax, eax
312
    jz	     .out
313
    stc
314
  .out:
315
    pop      ebx
316
    ret
317
 
318
 
319
InfoStructure:
320
		     dd      0x0     ; subfunction number
321
		     dd      0x0     ; position in the file in bytes
322
		     dd      0x0     ; upper part of the position address
323
		     dd      0x0     ; number of     bytes to read
324
		     dd      0x0     ; pointer to the buffer to write data
325
		     db      0
326
		     dd      0	     ; pointer to the filename
327
 
328
filepos  dd 0
1996 clevermous 329
default_filename db '/sys/boardlog.txt',0
1571 Asper 330
tmp	 db 0
331
end if
332
 
333
 
334
 
335
 
131 diamond 336
krnl_msg db 'K : '
1997 clevermous 337
duk db 'KernUser'
131 diamond 338
 
31 halyavin 339
; DATA AREA
340
 
131 diamond 341
; 11,11 > 0,-1
342
; 5,11  > 0,-1
31 halyavin 343
if lang eq ru
1571 Asper 344
   title    db	 'Доска отладки и сообщений',0
135 diamond 345
else if lang eq en
1571 Asper 346
   title    db	 'General debug & message board',0
135 diamond 347
else
1571 Asper 348
   title    db	 'Allgemeines debug- & nachrichtenboard',0
31 halyavin 349
end if
205 heavyiron 350
   krnl_cnt dd 0
1571 Asper 351
   vmode dd 1
131 diamond 352
   targ  dd text2
31 halyavin 353
I_END:
131 diamond 354
     offs dd ?
355
     flag rb 1
356
     rd 2
357
;     x1pos  dd ?
358
;     y1pos  dd ?
359
     text1 rb 80*(MAXSTRINGS+1)
360
     tmp1  db ?
361
     rd 2
362
;     x2pos  dd ?
363
;     y2pos  dd ?
364
     text2 rb 80*(MAXSTRINGS+1)
365
     tmp2  db ?
31 halyavin 366
     xstart dd ?
131 diamond 367
     sc system_colors
368
i_end:
1996 clevermous 369
 
370
filename	rb	256
1997 clevermous 371
align 4
372
stackbuf	rb	2000h
373
mem: