Rev 1997 | Rev 2484 | 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 |
||
1998 | clevermous | 109 | jnc .write_to_logfile |
1571 | Asper | 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 | test eax, eax |
||
286 | jz .out |
||
287 | stc |
||
288 | .out: |
||
289 | popa |
||
290 | ret |
||
291 | |||
292 | ;******************************************** |
||
293 | ;* input: esi = pointer to the file name * |
||
294 | ;* edx = pointer to data buffer * |
||
295 | ;* ecx = data length * |
||
296 | ;******************************************** |
||
297 | |||
298 | WriteToFile: |
||
299 | push ebx |
||
300 | mov dword [InfoStructure], 3 ; write to file |
||
301 | mov eax, [filepos] |
||
302 | mov dword [InfoStructure+4], eax ; lower position addr |
||
303 | mov dword [InfoStructure+8], 0 ; upper position addr (0 for FAT) |
||
304 | mov dword [InfoStructure+12], ecx ; number of bytes to write |
||
305 | mov dword [InfoStructure+16], edx ; pointer to data buffer |
||
306 | mov dword [InfoStructure+20], 0 ; reserved |
||
307 | mov dword [InfoStructure+21], esi ; pointer to the file name |
||
308 | mcall 70, InfoStructure |
||
309 | clc |
||
310 | test eax, eax |
||
311 | jz .out |
||
312 | stc |
||
313 | .out: |
||
314 | pop ebx |
||
315 | ret |
||
316 | |||
317 | |||
318 | InfoStructure: |
||
319 | dd 0x0 ; subfunction number |
||
320 | dd 0x0 ; position in the file in bytes |
||
321 | dd 0x0 ; upper part of the position address |
||
322 | dd 0x0 ; number of bytes to read |
||
323 | dd 0x0 ; pointer to the buffer to write data |
||
324 | db 0 |
||
325 | dd 0 ; pointer to the filename |
||
326 | |||
327 | filepos dd 0 |
||
1996 | clevermous | 328 | default_filename db '/sys/boardlog.txt',0 |
1571 | Asper | 329 | tmp db 0 |
330 | end if |
||
331 | |||
332 | |||
333 | |||
334 | |||
131 | diamond | 335 | krnl_msg db 'K : ' |
1997 | clevermous | 336 | duk db 'KernUser' |
131 | diamond | 337 | |
31 | halyavin | 338 | ; DATA AREA |
339 | |||
131 | diamond | 340 | ; 11,11 > 0,-1 |
341 | ; 5,11 > 0,-1 |
||
31 | halyavin | 342 | if lang eq ru |
1571 | Asper | 343 | title db 'Доска отладки и сообщений',0 |
135 | diamond | 344 | else if lang eq en |
1571 | Asper | 345 | title db 'General debug & message board',0 |
135 | diamond | 346 | else |
1571 | Asper | 347 | title db 'Allgemeines debug- & nachrichtenboard',0 |
31 | halyavin | 348 | end if |
205 | heavyiron | 349 | krnl_cnt dd 0 |
1571 | Asper | 350 | vmode dd 1 |
131 | diamond | 351 | targ dd text2 |
31 | halyavin | 352 | I_END: |
131 | diamond | 353 | offs dd ? |
354 | flag rb 1 |
||
355 | rd 2 |
||
356 | ; x1pos dd ? |
||
357 | ; y1pos dd ? |
||
358 | text1 rb 80*(MAXSTRINGS+1) |
||
359 | tmp1 db ? |
||
360 | rd 2 |
||
361 | ; x2pos dd ? |
||
362 | ; y2pos dd ? |
||
363 | text2 rb 80*(MAXSTRINGS+1) |
||
364 | tmp2 db ? |
||
31 | halyavin | 365 | xstart dd ? |
131 | diamond | 366 | sc system_colors |
367 | i_end: |
||
1996 | clevermous | 368 | |
369 | filename rb 256 |
||
1997 | clevermous | 370 | align 4 |
371 | stackbuf rb 2000h |
||
372 | mem:300,8>5,12> |