Rev 1863 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1863 | yogev_ezra | 1 | ; 15/III 2010 staper@inbox.ru |
2 | |||
3 | appname equ 'Программируемый микрокалькулятор ' |
||
4 | version equ '' |
||
5 | |||
6 | include 'macros.inc' |
||
7 | |||
8 | header '01',1,START,I_END,(D_END+0x100),(D_END+0x100),0,cur_dir_path |
||
9 | |||
10 | include 'opcodes.inc' |
||
11 | include 'proc32.inc' |
||
12 | include 'MASMFpuLib.asm' |
||
13 | include 'editbox_ex.mac' |
||
14 | include 'load_lib.mac' |
||
15 | include 'macroPRMK.inc' |
||
16 | |||
17 | _flags = 0x0 |
||
18 | ;0 1 - исполнение программы |
||
19 | ;1 1 - аварийный останов, не используется |
||
20 | ;2- |
||
21 | ;3 1 - нажата F |
||
22 | ;4 1 - нажата K |
||
23 | ;5 1 - режим программирования |
||
24 | ;6 1 - заполнение экспоненты |
||
25 | ;7 1 - регистры подняты |
||
26 | ;8 1 - дополнение команды (0х4?,0х6? и пр.) |
||
27 | ;9 1 - дозапись команды (адрес перехода после ОПКОДа) |
||
28 | ;10 1 - необходимо обнулить экранную строку, но не показывать её, поднять регистры |
||
29 | ;11 1 - нажата П |
||
30 | ;12 1 - нажата ИП |
||
31 | ;13 1 - скрывать регистры и программу |
||
32 | ;25-27 - используются в диалоге сохранениея/загрузки |
||
33 | ;28- |
||
34 | ;29 - "sk" в key |
||
35 | ;30 0 - трансцендентые функции представлены в радианах, иначе 31 |
||
36 | ;31 0/1 - трансцендентые функции представлены в градах/градусах |
||
37 | |||
38 | START: |
||
39 | load_library boxlib_name,cur_dir_path,buf_cmd_lin,system_path,\ |
||
40 | err_message_found_lib,head_f_l,myimport,err_message_import,head_f_i |
||
41 | |||
42 | mcall 40,0x7 |
||
43 | mcall 48,4 |
||
44 | mov [scin_height],eax |
||
45 | |||
46 | ;определяем длину строки с параметрами |
||
47 | mov esi,buf_cmd_lin |
||
48 | xor ecx,ecx |
||
49 | @@: cmp byte [esi+ecx],0 |
||
50 | je @f |
||
51 | inc ecx |
||
52 | jmp @b |
||
53 | @@: mov dword [edit2.size],ecx |
||
54 | mov dword [edit2.pos],ecx |
||
55 | |||
56 | mcall 68,11 |
||
57 | cmp dword [edit2.pos],0 |
||
58 | je @f |
||
59 | call load_prog |
||
60 | @@: |
||
61 | |||
62 | red: |
||
63 | call draw_window |
||
64 | still: |
||
65 | test [flags],(1 shl 0) |
||
66 | jnz main_loop |
||
67 | mcall 10 |
||
68 | .0: dec eax |
||
69 | jz red |
||
70 | dec eax |
||
71 | jz key |
||
72 | dec eax |
||
73 | jz button |
||
74 | sub eax,3 |
||
75 | jz mouse |
||
76 | jmp still |
||
77 | main_loop: |
||
78 | mcall 11 |
||
79 | test eax,eax |
||
80 | jnz still.0 |
||
81 | cmp [schk],-1 |
||
82 | jne @f |
||
83 | btr [flags],0 |
||
84 | mcall 55,55,,,sound_data |
||
85 | jmp still |
||
86 | @@: movzx esi,[schk] |
||
87 | movzx eax, byte [esi+PMEM] |
||
88 | shl eax,2 |
||
89 | add eax,OPCODEtable |
||
90 | call dword [eax] |
||
91 | call draw_schk |
||
92 | call draw_prog |
||
93 | test [flags],(1 shl 0) |
||
94 | jz @f |
||
95 | mcall 5,[_pause] |
||
96 | jmp still |
||
97 | @@: mcall 55,55,,,sound_data |
||
98 | jmp still |
||
99 | |||
100 | mouse: if 0 |
||
101 | push dword scroll_bar_data_vertical |
||
102 | call [scrollbar_ver_mouse] |
||
103 | endf |
||
104 | jmp still |
||
105 | |||
106 | button: |
||
107 | mcall 17 |
||
108 | dec ah |
||
109 | jnz @f |
||
110 | mcall -1 |
||
111 | @@: cmp ah,31 |
||
112 | jae .grd |
||
113 | movzx eax,ah |
||
114 | cmp eax,30 |
||
115 | jg still |
||
116 | shl eax,2 |
||
117 | call dword [eax+but_table-4] |
||
118 | test [flags],(1 shl 5) |
||
119 | jz @f |
||
120 | call ftos |
||
121 | call draw_string |
||
122 | call draw_prog |
||
123 | @@: call draw_schk |
||
124 | jmp still |
||
125 | .grd: cmp ah,31 |
||
126 | jne @f |
||
127 | btr [flags],30 |
||
128 | call set_but |
||
129 | jmp still |
||
130 | @@: cmp ah,32 |
||
131 | jne @f |
||
132 | bts [flags],30 |
||
133 | btr [flags],31 |
||
134 | call set_but |
||
135 | jmp still |
||
136 | @@: cmp ah,33 |
||
137 | jne @f |
||
138 | bts [flags],30 |
||
139 | bts [flags],31 |
||
140 | call set_but |
||
141 | @@: cmp ah,34 |
||
142 | jne @f |
||
143 | btc [flags],13 |
||
144 | jc .331 |
||
145 | mcall 67,-1,-1,198,-1 |
||
146 | jmp still |
||
147 | .331: |
||
148 | mcall 67,-1,-1,485,-1 |
||
149 | @@: jmp still |
||
150 | |||
151 | key: |
||
152 | mcall 2 |
||
153 | @@: cmp ah,12 ;load |
||
154 | jne @f |
||
155 | bt [flags],27 |
||
156 | jc still |
||
157 | bt [flags],26 |
||
158 | jc still |
||
159 | bts [flags],25 |
||
160 | call window_load_save |
||
161 | jmp still |
||
162 | @@: cmp ah,19 ;save |
||
163 | jne @f |
||
164 | bt [flags],27 |
||
165 | jc still |
||
166 | bt [flags],26 |
||
167 | jc still |
||
168 | btr [flags],25 |
||
169 | call window_load_save |
||
170 | jmp still |
||
171 | |||
172 | @@: push dword edit1 |
||
173 | call [edit_box_key] |
||
174 | |||
175 | .0: call draw_schk |
||
176 | |||
177 | cmp [edit1.pos],2 |
||
178 | jb still |
||
179 | test [flags],(1 shl 29) |
||
180 | jnz @f |
||
181 | cmp word [txt.edbox],"sk"; or "BP" or "Bp" or "bP" |
||
182 | jne @f |
||
183 | bts [flags],29 |
||
184 | mov word [txt.edbox],0x2020 |
||
185 | mov [edit1.size],0 |
||
186 | mov [edit1.pos],0 |
||
187 | push dword edit1 |
||
188 | call [edit_box_draw] |
||
189 | jmp key.0 |
||
190 | @@: mov ah,[txt.edbox] |
||
191 | sub ah,48 |
||
192 | cmp ah,9 |
||
193 | jbe .1 |
||
194 | sub ah,7 |
||
195 | cmp ah,15 |
||
196 | jbe .1 |
||
197 | sub ah,32 |
||
198 | .1: mov al,[txt.edbox+1] |
||
199 | sub al,48 |
||
200 | cmp al,9 |
||
201 | jbe .2 |
||
202 | sub al,7 |
||
203 | cmp al,15 |
||
204 | jbe .1 |
||
205 | sub al,32 |
||
206 | .2: shl al,4 |
||
207 | shr ax,4 |
||
208 | mov [edit1.size],0 |
||
209 | mov [edit1.pos],0 |
||
210 | test [flags],(1 shl 29) |
||
211 | jnz .4 |
||
212 | movzx ebx,[schk] |
||
213 | add ebx,PMEM |
||
214 | mov [ebx],al |
||
215 | inc [schk] |
||
216 | jmp .3 |
||
217 | .4: mov [schk],al |
||
218 | btr [flags],29 |
||
219 | .3: call draw_schk |
||
220 | mov word [txt.edbox],0x2020 |
||
221 | push dword edit1 |
||
222 | call [edit_box_draw] |
||
223 | call draw_prog |
||
224 | test [flags],(1 shl 5) |
||
225 | jz @f |
||
226 | call ftos |
||
227 | call draw_string |
||
228 | @@: jmp key.0 |
||
229 | |||
230 | |||
231 | align 4 |
||
232 | |||
233 | but_table: |
||
234 | |||
235 | dd .Cx, .vp, .sign, .dot, .0 |
||
236 | dd .up, .xy, _3_, _2_, _1_ |
||
237 | dd .min, .div, _6_, _5_, _4_ |
||
238 | dd .plus, .x, _9_, _8_, _7_ |
||
239 | dd .PP, .BP, .p, .ip, .K |
||
240 | dd .Sp, .Vo, .shgl, .shgr, .F |
||
241 | |||
242 | .BP: test [flags],(1 shl 5) |
||
243 | jnz @f |
||
244 | bts [flags],9 |
||
245 | ret |
||
246 | @@: movzx eax,[schk] |
||
247 | add eax,PMEM |
||
248 | inc [schk] |
||
249 | test [flags],(1 shl 3) |
||
250 | jnz @f |
||
251 | test [flags],(1 shl 4) |
||
252 | jz .BP0 |
||
253 | mov [dop8],0x80 |
||
254 | bts [flags],8 |
||
255 | btr [flags],4 |
||
256 | ret |
||
257 | .BP0: mov byte [eax],0x51 |
||
258 | bts [flags],9 |
||
259 | ret |
||
260 | @@: mov byte [eax],0x58 |
||
261 | bts [flags],9 |
||
262 | btr [flags],3 |
||
263 | ret |
||
264 | .shgl: test [flags],(1 shl 5) |
||
265 | jnz @f |
||
266 | ret |
||
267 | @@: test [flags],(1 shl 3) |
||
268 | jnz @f |
||
269 | test [flags],(1 shl 4) |
||
270 | jz .shgl0 |
||
271 | mov [dop8],0xE0 |
||
272 | bts [flags],8 |
||
273 | btr [flags],4 |
||
274 | ret |
||
275 | .shgl0: |
||
276 | dec [schk] |
||
277 | ret |
||
278 | @@: movzx eax,[schk] |
||
279 | add eax,PMEM |
||
280 | inc [schk] |
||
281 | mov byte [eax],0x5E |
||
282 | bts [flags],9 |
||
283 | btr [flags],3 |
||
284 | ret |
||
285 | |||
286 | .shgr: test [flags],(1 shl 5) |
||
287 | jnz @f |
||
288 | ret |
||
289 | @@: test [flags],(1 shl 3) |
||
290 | jnz @f |
||
291 | test [flags],(1 shl 4) |
||
292 | jz .shgr0 |
||
293 | mov [dop8],0xC0 |
||
294 | bts [flags],8 |
||
295 | btr [flags],4 |
||
296 | ret |
||
297 | .shgr0: |
||
298 | inc [schk] |
||
299 | ret |
||
300 | @@: movzx eax,[schk] |
||
301 | add eax,PMEM |
||
302 | inc [schk] |
||
303 | mov byte [eax],0x5C |
||
304 | bts [flags],9 |
||
305 | btr [flags],3 |
||
306 | ret |
||
307 | |||
308 | .PP: test [flags],(1 shl 5) |
||
309 | jnz .PPprg |
||
310 | mov eax,0x53 |
||
311 | jmp .to_opcode |
||
312 | .PPprg: |
||
313 | movzx eax,[schk] |
||
314 | add eax,PMEM |
||
315 | inc [schk] |
||
316 | test [flags],(1 shl 3) |
||
317 | jnz @f |
||
318 | test [flags],(1 shl 4) |
||
319 | jz .PP0 |
||
320 | mov [dop8],0xA0 |
||
321 | bts [flags],8 |
||
322 | btr [flags],4 |
||
323 | dec [schk] |
||
324 | ret |
||
325 | .PP0: |
||
326 | mov byte [eax],0x53 |
||
327 | bts [flags],9 |
||
328 | ret |
||
329 | @@: mov byte [eax],0x5A |
||
330 | bts [flags],9 |
||
331 | btr [flags],3 |
||
332 | ret |
||
333 | .Vo: test [flags],(1 shl 5) |
||
334 | jnz .Voprg |
||
335 | mov eax,0x52 |
||
336 | jmp .to_opcode |
||
337 | .Voprg: |
||
338 | movzx eax,[schk] |
||
339 | add eax,PMEM |
||
340 | inc [schk] |
||
341 | test [flags],(1 shl 3) |
||
342 | jnz @f |
||
343 | test [flags],(1 shl 4) |
||
344 | jz .Vo0 |
||
345 | mov [dop8],0x90 |
||
346 | bts [flags],8 |
||
347 | btr [flags],4 |
||
348 | dec [schk] |
||
349 | ret |
||
350 | .Vo0: |
||
351 | mov byte [eax],0x52 |
||
352 | ret |
||
353 | @@: mov byte [eax],0x59 |
||
354 | bts [flags],9 |
||
355 | btr [flags],3 |
||
356 | ret |
||
357 | |||
358 | .Sp: test [flags],(1 shl 5) |
||
359 | jnz .Spprg |
||
360 | mov eax,0x50 |
||
361 | jmp .to_opcode |
||
362 | .Spprg: |
||
363 | movzx eax,[schk] |
||
364 | add eax,PMEM |
||
365 | inc [schk] |
||
366 | test [flags],(1 shl 3) |
||
367 | jnz @f |
||
368 | test [flags],(1 shl 4) |
||
369 | jz .Sp0 |
||
370 | mov [dop8],0x70 |
||
371 | bts [flags],8 |
||
372 | btr [flags],4 |
||
373 | dec [schk] |
||
374 | ret |
||
375 | .Sp0: |
||
376 | mov byte [eax],0x50 |
||
377 | ret |
||
378 | @@: mov byte [eax],0x57 |
||
379 | bts [flags],9 |
||
380 | btr [flags],3 |
||
381 | ret |
||
382 | .ip: test [flags],(1 shl 5) |
||
383 | jnz .ipprg |
||
384 | bts [flags],12 |
||
385 | ret |
||
386 | .ipprg: |
||
387 | test [flags],(1 shl 3) |
||
388 | jnz @f |
||
389 | test [flags],(1 shl 4) |
||
390 | jz .ip0 |
||
391 | mov [dop8],0xD0 |
||
392 | bts [flags],8 |
||
393 | btr [flags],4 |
||
394 | ret |
||
395 | .ip0: |
||
396 | mov [dop8],0x60 |
||
397 | bts [flags],8 |
||
398 | ret |
||
399 | @@: movzx eax,[schk] |
||
400 | add eax,PMEM |
||
401 | inc [schk] |
||
402 | mov byte [eax],0x5D |
||
403 | bts [flags],9 |
||
404 | btr [flags],3 |
||
405 | ret |
||
406 | |||
407 | |||
408 | |||
409 | .p: test [flags],(1 shl 5) |
||
410 | jnz .pprg |
||
411 | bts [flags],11 |
||
412 | .nop: ret |
||
413 | .pprg: |
||
414 | test [flags],(1 shl 3) |
||
415 | jnz @f |
||
416 | test [flags],(1 shl 4) |
||
417 | jz .p0 |
||
418 | mov [dop8],0xB0 |
||
419 | bts [flags],8 |
||
420 | btr [flags],4 |
||
421 | ret |
||
422 | .p0: |
||
423 | mov [dop8],0x40 |
||
424 | bts [flags],8 |
||
425 | ret |
||
426 | @@: movzx eax,[schk] |
||
427 | add eax,PMEM |
||
428 | inc [schk] |
||
429 | mov byte [eax],0x5B |
||
430 | bts [flags],9 |
||
431 | btr [flags],3 |
||
432 | ret |
||
433 | |||
434 | |||
435 | |||
436 | .F: bts [flags],3 |
||
437 | ret |
||
438 | .K: bts [flags],4 |
||
439 | ret |
||
440 | .Cx: test [flags],(1 shl 5) |
||
441 | jnz .Cxprg |
||
442 | test [flags],(1 shl 11) |
||
443 | jnz .cx4d |
||
444 | test [flags],(1 shl 12) |
||
445 | jnz .cx6d |
||
446 | test [flags],(1 shl 9) |
||
447 | jnz .Cx0 |
||
448 | mov eax,0x0D |
||
449 | jmp .to_opcode |
||
450 | .cx4d: mov eax,0x4d |
||
451 | jmp .to_opcode |
||
452 | .cx6d: mov eax,0x6d |
||
453 | jmp .to_opcode |
||
454 | .Cxprg: |
||
455 | test [flags],(1 shl 8) |
||
456 | jz .Cx0 |
||
457 | add [dop8],0x0D |
||
458 | jmp .dop8 |
||
459 | .Cx0: |
||
460 | test [flags],(1 shl 9) |
||
461 | jz .Cx1 |
||
462 | mov al,0x0D |
||
463 | jmp .dop9 |
||
464 | .Cx1: |
||
465 | movzx eax,[schk] |
||
466 | add eax,PMEM |
||
467 | mov byte [eax],0x0D |
||
468 | inc [schk] |
||
469 | ret |
||
470 | .vp: test [flags],(1 shl 3) |
||
471 | jnz .vpsetprg |
||
472 | test [flags],(1 shl 5) |
||
473 | jnz .vpprg |
||
474 | test [flags],(1 shl 11) |
||
475 | jnz .vp4c |
||
476 | test [flags],(1 shl 12) |
||
477 | jnz .vp6c |
||
478 | test [flags],(1 shl 9) |
||
479 | jnz .vp0 |
||
480 | mov eax,0x0C |
||
481 | jmp .to_opcode |
||
482 | .vp4c: mov eax,0x4c |
||
483 | jmp .to_opcode |
||
484 | .vp6c: mov eax,0x6c |
||
485 | jmp .to_opcode |
||
486 | .vpsetprg: |
||
487 | test [flags],(1 shl 5) |
||
488 | jz @f |
||
489 | ret |
||
490 | .vpprg: |
||
491 | test [flags],(1 shl 8) |
||
492 | jz .vp0 |
||
493 | add [dop8],0x0c |
||
494 | jmp .dop8 |
||
495 | .vp0: |
||
496 | test [flags],(1 shl 9) |
||
497 | jz .vp1 |
||
498 | mov al,0x0C |
||
499 | jmp .dop9 |
||
500 | .vp1: |
||
501 | movzx eax,[schk] |
||
502 | add eax,PMEM |
||
503 | mov byte [eax],0x0C |
||
504 | inc [schk] |
||
505 | ret |
||
506 | @@: bts [flags],5 |
||
507 | btr [flags],3 |
||
508 | ret |
||
509 | .sign: test [flags],(1 shl 5) |
||
510 | jnz .signprg |
||
511 | test [flags],(1 shl 11) |
||
512 | jnz .sign4b |
||
513 | test [flags],(1 shl 12) |
||
514 | jnz .sign6b |
||
515 | test [flags],(1 shl 9) |
||
516 | jnz .sign0 |
||
517 | mov eax,0x0B |
||
518 | jmp .to_opcode |
||
519 | .sign4b: mov eax,0x4b |
||
520 | jmp .to_opcode |
||
521 | .sign6b: mov eax,0x6b |
||
522 | jmp .to_opcode |
||
523 | .signprg: |
||
524 | test [flags],(1 shl 8) |
||
525 | jz .sign0 |
||
526 | add [dop8],0x0B |
||
527 | jmp .dop8 |
||
528 | .sign0: test [flags],(1 shl 9) |
||
529 | jz .sign1 |
||
530 | mov al,0x0B |
||
531 | jmp .dop9 |
||
532 | .sign1: test [flags],(1 shl 3) |
||
533 | jnz @f |
||
534 | movzx eax,[schk] |
||
535 | add eax,PMEM |
||
536 | mov byte [eax],0x0B |
||
537 | inc [schk] |
||
538 | ret |
||
539 | @@: btr [flags],5 |
||
540 | btr [flags],3 |
||
541 | fld qword [S.X] |
||
542 | call ftos |
||
543 | call draw_string |
||
544 | ret |
||
545 | .up: test [flags],(1 shl 5) |
||
546 | jnz .upprg |
||
547 | test [flags],(1 shl 3) |
||
548 | jnz .up0f |
||
549 | test [flags],(1 shl 4) |
||
550 | jnz .upK |
||
551 | test [flags],(1 shl 11) |
||
552 | jnz .up4e |
||
553 | test [flags],(1 shl 12) |
||
554 | jnz .up6e |
||
555 | test [flags],(1 shl 9) |
||
556 | jnz .up0 |
||
557 | mov eax,0x0E |
||
558 | jmp .to_opcode |
||
559 | .up0f: mov eax,0x0F |
||
560 | jmp .to_opcode |
||
561 | .up4e: mov eax,0x4e |
||
562 | jmp .to_opcode |
||
563 | .up6e: mov eax,0x6e |
||
564 | jmp .to_opcode |
||
565 | .upprg: |
||
566 | test [flags],(1 shl 8) |
||
567 | jz .up0 |
||
568 | add [dop8],0x0E |
||
569 | jmp .dop8 |
||
570 | .up0: test [flags],(1 shl 9) |
||
571 | jz .up1 |
||
572 | mov al,0x0E |
||
573 | jmp .dop9 |
||
574 | .up1: movzx eax,[schk] |
||
575 | add eax,PMEM |
||
576 | inc [schk] |
||
577 | test [flags],(1 shl 3) |
||
578 | jnz @f |
||
579 | mov byte [eax],0x0E |
||
580 | ret |
||
581 | @@: mov byte [eax],0x0F |
||
582 | btr [flags],3 |
||
583 | ret |
||
584 | .upK: mov eax,0x3B |
||
585 | jmp .to_opcode |
||
586 | |||
587 | .xy: test [flags],(1 shl 5) |
||
588 | jnz .xyprg |
||
589 | test [flags],(1 shl 3) |
||
590 | jnz .xy24 |
||
591 | mov eax,0x14 |
||
592 | jmp .to_opcode |
||
593 | .xy24: mov eax,0x24 |
||
594 | jmp .to_opcode |
||
595 | .xyprg: |
||
596 | movzx eax,[schk] |
||
597 | add eax,PMEM |
||
598 | inc [schk] |
||
599 | test [flags],(1 shl 3) |
||
600 | jnz @f |
||
601 | mov byte [eax],0x14 |
||
602 | ret |
||
603 | @@: mov byte [eax],0x24 |
||
604 | btr [flags],3 |
||
605 | ret |
||
606 | .min: test [flags],(1 shl 5) |
||
607 | jnz .minprg |
||
608 | test [flags],(1 shl 3) |
||
609 | jnz .min21 |
||
610 | test [flags],(1 shl 9) |
||
611 | jnz .min0 |
||
612 | mov eax,0x11 |
||
613 | jmp .to_opcode |
||
614 | .min21: mov eax,0x21 |
||
615 | jmp .to_opcode |
||
616 | .minprg: |
||
617 | test [flags],(1 shl 8) |
||
618 | jz .min0 |
||
619 | add [dop8],0x0F |
||
620 | jmp .dop8 |
||
621 | .min0: test [flags],(1 shl 9) |
||
622 | jz .min1 |
||
623 | mov al,0x0F |
||
624 | jmp .dop9 |
||
625 | .min1: movzx eax,[schk] |
||
626 | add eax,PMEM |
||
627 | inc [schk] |
||
628 | test [flags],(1 shl 3) |
||
629 | jnz @f |
||
630 | mov byte [eax],0x11 |
||
631 | ret |
||
632 | @@: mov byte [eax],0x21 |
||
633 | btr [flags],3 |
||
634 | ret |
||
635 | .div: test [flags],(1 shl 5) |
||
636 | jnz .divprg |
||
637 | test [flags],(1 shl 3) |
||
638 | jnz .div23 |
||
639 | mov eax,0x13 |
||
640 | jmp .to_opcode |
||
641 | .div23: mov eax,0x23 |
||
642 | jmp .to_opcode |
||
643 | .divprg: |
||
644 | movzx eax,[schk] |
||
645 | add eax,PMEM |
||
646 | inc [schk] |
||
647 | test [flags],(1 shl 3) |
||
648 | jnz @f |
||
649 | mov byte [eax],0x13 |
||
650 | ret |
||
651 | @@: mov byte [eax],0x23 |
||
652 | btr [flags],3 |
||
653 | ret |
||
654 | .plus: test [flags],(1 shl 5) |
||
655 | jnz .plusprg |
||
656 | test [flags],(1 shl 3) |
||
657 | jnz .plus10 |
||
658 | mov eax,0x10 |
||
659 | jmp .to_opcode |
||
660 | .plus10: mov eax,0x20 |
||
661 | jmp .to_opcode |
||
662 | .plusprg: |
||
663 | movzx eax,[schk] |
||
664 | add eax,PMEM |
||
665 | inc [schk] |
||
666 | test [flags],(1 shl 3) |
||
667 | jnz @f |
||
668 | mov byte [eax],0x10 |
||
669 | ret |
||
670 | @@: mov byte [eax],0x20 |
||
671 | btr [flags],3 |
||
672 | ret |
||
673 | .x: test [flags],(1 shl 5) |
||
674 | jnz .xprg |
||
675 | test [flags],(1 shl 3) |
||
676 | jnz .x22 |
||
677 | mov eax,0x12 |
||
678 | jmp .to_opcode |
||
679 | .x22: mov eax,0x22 |
||
680 | jmp .to_opcode |
||
681 | .xprg: |
||
682 | movzx eax,[schk] |
||
683 | add eax,PMEM |
||
684 | inc [schk] |
||
685 | test [flags],(1 shl 3) |
||
686 | jnz @f |
||
687 | mov byte [eax],0x12 |
||
688 | ret |
||
689 | @@: mov byte [eax],0x22 |
||
690 | btr [flags],3 |
||
691 | ret |
||
692 | .dot: test [flags],(1 shl 5) |
||
693 | jnz .dotprg |
||
694 | test [flags],(1 shl 3) |
||
695 | jnz .dot25 |
||
696 | test [flags],(1 shl 11) |
||
697 | jnz .dot4a |
||
698 | test [flags],(1 shl 12) |
||
699 | jnz .dot6a |
||
700 | test [flags],(1 shl 9) |
||
701 | jnz .dot0 |
||
702 | mov eax,0x0A |
||
703 | jmp .to_opcode |
||
704 | .dot25: mov eax,0x25 |
||
705 | jmp .to_opcode |
||
706 | .dot4a: mov eax,0x4a |
||
707 | jmp .to_opcode |
||
708 | .dot6a: mov eax,0x6a |
||
709 | jmp .to_opcode |
||
710 | .dotprg: |
||
711 | test [flags],(1 shl 8) |
||
712 | jz .dot0 |
||
713 | add [dop8],0x0A |
||
714 | jmp .dop8 |
||
715 | .dot0: test [flags],(1 shl 9) |
||
716 | jz .dot1 |
||
717 | mov al,0x0A |
||
718 | jmp .dop9 |
||
719 | .dot1: movzx eax,[schk] |
||
720 | add eax,PMEM |
||
721 | inc [schk] |
||
722 | test [flags],(1 shl 3) |
||
723 | jnz @f |
||
724 | mov byte [eax],0x0A |
||
725 | ret |
||
726 | @@: mov byte [eax],0x25 |
||
727 | btr [flags],3 |
||
728 | ret |
||
729 | |||
730 | .0: test [flags],(1 shl 5) |
||
731 | jnz .0prg |
||
732 | test [flags],(1 shl 3) |
||
733 | jnz .015 |
||
734 | test [flags],(1 shl 11) |
||
735 | jnz .040 |
||
736 | test [flags],(1 shl 12) |
||
737 | jnz .060 |
||
738 | test [flags],(1 shl 9) |
||
739 | jnz .00 |
||
740 | mov eax,0 |
||
741 | jmp .to_opcode |
||
742 | .015: mov eax,0x15 |
||
743 | jmp .to_opcode |
||
744 | .040: mov eax,0x40 |
||
745 | jmp .to_opcode |
||
746 | .060: mov eax,0x60 |
||
747 | jmp .to_opcode |
||
748 | .0prg: |
||
749 | test [flags],(1 shl 8) |
||
750 | jz .00 |
||
751 | add [dop8],0x00 |
||
752 | jmp .dop8 |
||
753 | .00: test [flags],(1 shl 9) |
||
754 | jz .01 |
||
755 | mov al,0 |
||
756 | jmp .dop9 |
||
757 | .01: movzx eax,[schk] |
||
758 | add eax,PMEM |
||
759 | inc [schk] |
||
760 | test [flags],(1 shl 4) |
||
761 | jz @f |
||
762 | mov ebx,0 |
||
763 | test [flags],(1 shl 8) |
||
764 | jnz .dop8 |
||
765 | test [flags],(1 shl 9) |
||
766 | jnz .dop9 |
||
767 | mov byte [eax],0x54 |
||
768 | bts [flags],4 |
||
769 | ret |
||
770 | @@: test [flags],(1 shl 3) |
||
771 | jnz @f |
||
772 | mov byte [eax],0x00 |
||
773 | ret |
||
774 | @@: mov byte [eax],0x15 |
||
775 | btr [flags],3 |
||
776 | ret |
||
777 | |||
778 | .dop8: movzx eax,[schk] |
||
779 | add eax,PMEM |
||
780 | inc [schk] |
||
781 | mov bl,[dop8] |
||
782 | mov byte [eax],bl |
||
783 | btr [flags],8 |
||
784 | ret |
||
785 | .dop9: cmp [mov3],0 |
||
786 | jne @f |
||
787 | inc [mov3] |
||
788 | shl al,4 |
||
789 | mov [dop9],al |
||
790 | ret |
||
791 | @@: mov [mov3],0 |
||
792 | add al,[dop9] |
||
793 | test [flags],(1 shl 5) |
||
794 | jz @f |
||
795 | movzx ebx,[schk] |
||
796 | add ebx,PMEM |
||
797 | mov [ebx],al |
||
798 | inc [schk] |
||
799 | btr [flags],9 |
||
800 | ret |
||
801 | @@: mov [schk],al |
||
802 | btr [flags],9 |
||
803 | call draw_prog |
||
804 | ret |
||
805 | |||
806 | align 4 |
||
807 | .to_opcode: |
||
808 | shl eax,2 |
||
809 | add eax,OPCODEtable |
||
810 | mov ebx,[eax] |
||
811 | jmp ebx |
||
812 | |||
813 | dop8 db 0 |
||
814 | dop9 db 0 |
||
815 | mov3 db 0 |
||
816 | |||
817 | |||
818 | _1_: buttabnum 1,0x16,0x41,0x61,0 |
||
819 | _2_: buttabnum 2,0x17,0x42,0x62,0 |
||
820 | _3_: buttabnum 3,0x18,0x43,0x63,0 |
||
821 | _4_: buttabnum 4,0x19,0x44,0x64,0x31 |
||
822 | _5_: buttabnum 5,0x1A,0x45,0x65,0x32 |
||
823 | _6_: buttabnum 6,0x1B,0x46,0x66,0 |
||
824 | _7_: buttabnum 7,0x1C,0x47,0x67,0x34 |
||
825 | _8_: buttabnum 8,0x1D,0x48,0x68,0x35 |
||
826 | _9_: buttabnum 9,0x1E,0x49,0x69,0x36 |
||
827 | |||
828 | |||
829 | |||
830 | |||
831 | align 4 |
||
832 | stof: |
||
833 | mov esi,string |
||
834 | inc esi |
||
835 | cmp word [esi],0x2030 |
||
836 | je .null |
||
837 | mov dword [buf],0 |
||
838 | mov dword [buf+4],0 |
||
839 | mov word [buf+8],0 |
||
840 | xor ecx,ecx |
||
841 | @@: cmp byte [esi+ecx],'.' |
||
842 | je .dot |
||
843 | cmp byte [esi+ecx],0x20 |
||
844 | je .int |
||
845 | inc ecx |
||
846 | cmp ecx,8 |
||
847 | jne @b |
||
848 | .int: dec ecx |
||
849 | call .tobcd |
||
850 | fbld [buf] |
||
851 | jmp .tosign |
||
852 | |||
853 | .dot: push ecx |
||
854 | dec ecx |
||
855 | call .tobcd |
||
856 | fbld [buf] |
||
857 | pop ecx |
||
858 | add esi,ecx |
||
859 | inc esi |
||
860 | mov ebx,ecx |
||
861 | dec ebx |
||
862 | xor ecx,ecx |
||
863 | @@: cmp byte [esi+ecx],0x20 |
||
864 | je @f |
||
865 | cmp ebx,8 |
||
866 | je @f |
||
867 | inc ecx |
||
868 | inc ebx |
||
869 | jmp @b |
||
870 | @@: cmp ecx,0 |
||
871 | je .tosign |
||
872 | push ecx |
||
873 | dec ecx |
||
874 | mov dword [buf],0 |
||
875 | mov dword [buf+4],0 |
||
876 | mov word [buf+8],0 |
||
877 | call .tobcd |
||
878 | fbld [buf] |
||
879 | pop ecx |
||
880 | mov [perem],10 |
||
881 | @@: fidiv [perem] |
||
882 | loop @b |
||
883 | faddp |
||
884 | jmp .tosign |
||
885 | |||
886 | |||
887 | .tobcd: |
||
888 | mov edi,buf |
||
889 | @@: mov al,[esi+ecx] |
||
890 | sub al,48 |
||
891 | test ecx,ecx |
||
892 | jz @f |
||
893 | shl al,4 |
||
894 | mov ah,[esi+ecx-1] |
||
895 | sub ah,48 |
||
896 | shr ax,4 |
||
897 | mov [edi],al |
||
898 | inc edi |
||
899 | dec ecx |
||
900 | jz .tobcd1 |
||
901 | dec ecx |
||
902 | jnz @b |
||
903 | mov al,[esi] |
||
904 | sub al,48 |
||
905 | @@: mov [edi],al |
||
906 | .tobcd1: |
||
907 | ret |
||
908 | |||
909 | |||
910 | .tosign: |
||
911 | cmp byte [string],'-' |
||
912 | jne @f |
||
913 | fchs |
||
914 | @@: cmp byte [string+12],0x20 |
||
915 | je .ret |
||
916 | cmp byte [string+12],0x30 |
||
917 | jne @f |
||
918 | cmp byte [string+11],0x30 |
||
919 | je .ret |
||
920 | @@: mov al,[string+12] |
||
921 | sub al,48 |
||
922 | mov ah,[string+11] |
||
923 | sub ah,48 |
||
924 | shl al,4 |
||
925 | shr ax,4 |
||
926 | mov [buf],al |
||
927 | mov dword [buf+1],0 |
||
928 | mov dword [buf+5],0 |
||
929 | fbld [buf] |
||
930 | fistp [perem] |
||
931 | mov ecx,[perem] |
||
932 | mov [perem],10 |
||
933 | cmp byte [string+10],'-' |
||
934 | je .@@f |
||
935 | @@: fimul [perem] |
||
936 | loop @b |
||
937 | ret |
||
938 | .@@f: fidiv [perem] |
||
939 | loop .@@f |
||
940 | .ret: ret |
||
941 | .null: fldz |
||
942 | ret |
||
943 | |||
944 | align 4 |
||
945 | ftos: |
||
946 | test [flags],(1 shl 5) |
||
947 | jnz .prg |
||
948 | mov esi,string |
||
949 | mov dword [esi],0x20202020 |
||
950 | mov dword [esi+4],0x20202020 |
||
951 | mov dword [esi+8],0x20202020 |
||
952 | mov byte [esi+12],0x20 |
||
953 | ; fld st0 |
||
954 | ; fxtract |
||
955 | ; fstp st0 |
||
956 | ; fabs |
||
957 | ; fistp [perem] |
||
958 | ; mov eax,[perem] |
||
959 | ; cmp eax,0x1a |
||
960 | ; jg .1 |
||
961 | ; stdcall FpuFLtoA,0,8,buf2,SRC1_FPU or SRC1_REAL; or STR_SCI |
||
962 | ; mov ecx,9 |
||
963 | ; mov esi,string |
||
964 | ; mov edi,buf2 |
||
965 | ;@@: mov al,[edi] |
||
966 | ; test al,al |
||
967 | ; jz @f |
||
968 | ; mov [esi],al |
||
969 | ; inc esi |
||
970 | ; inc edi |
||
971 | ; loop @b |
||
972 | ;@@: ret |
||
973 | |||
974 | .1: stdcall FpuFLtoA,0,8,buf2,SRC1_FPU or SRC1_REAL or STR_SCI |
||
975 | mov ecx,10 |
||
976 | mov esi,string |
||
977 | mov edi,buf2 |
||
978 | @@: mov al,[edi] |
||
979 | test al,al |
||
980 | jz .ret |
||
981 | mov [esi],al |
||
982 | inc esi |
||
983 | inc edi |
||
984 | loop @b |
||
985 | ; add edi,9 |
||
986 | @@: cmp byte [edi],0 |
||
987 | je @f |
||
988 | inc edi |
||
989 | jmp @b |
||
990 | @@: mov ax,[edi-2] |
||
991 | mov [string+11],ax |
||
992 | mov al,[edi-5] |
||
993 | mov [string+10],al |
||
994 | .ret: |
||
995 | ; cmp word [string+11],0x2020 |
||
996 | ; je .ret2 |
||
997 | cmp byte [string+10],'-' |
||
998 | je .ret2 |
||
999 | mov ax,[string+11] |
||
1000 | sub ax,0x3030 |
||
1001 | xchg ah,al |
||
1002 | shl al,4 |
||
1003 | shr ax,4 |
||
1004 | cmp al,7 |
||
1005 | jge .ret2 |
||
1006 | mov word [string+10],' ' |
||
1007 | mov byte [string+12],' ' |
||
1008 | cmp al,0 |
||
1009 | je .ret2 |
||
1010 | xor edx,edx |
||
1011 | @@: mov bl,[string+2+edx] |
||
1012 | mov bh,[string+2+edx+1] |
||
1013 | xchg bh,bl |
||
1014 | mov [string+2+edx],bx |
||
1015 | inc edx |
||
1016 | dec al |
||
1017 | jnz @b |
||
1018 | .ret2: mov ecx,7 |
||
1019 | @@: cmp byte [string+2+ecx],'0' |
||
1020 | jne @f |
||
1021 | mov byte [string+2+ecx],' ' |
||
1022 | loop @b |
||
1023 | @@: cmp byte [string+2+ecx],'.' |
||
1024 | jne @f |
||
1025 | mov byte [string+2+ecx],' ' |
||
1026 | @@: cmp byte [string+10],'+' |
||
1027 | jne @f |
||
1028 | mov byte [string+10],' ' |
||
1029 | @@: |
||
1030 | ret |
||
1031 | .toascii: |
||
1032 | shl ax,4 |
||
1033 | shr al,4 |
||
1034 | cmp al,10 |
||
1035 | sbb al,69h |
||
1036 | das |
||
1037 | rol ax,8 |
||
1038 | cmp al,10 |
||
1039 | sbb al,69h |
||
1040 | das |
||
1041 | ret |
||
1042 | .prg: mov eax,0x20202020 |
||
1043 | mov dword [string],eax |
||
1044 | mov dword [string+4],eax |
||
1045 | mov dword [string+8],eax |
||
1046 | xor eax,eax |
||
1047 | mov al,[schk] |
||
1048 | mov ebx,eax |
||
1049 | call .toascii |
||
1050 | mov [string+11],ax |
||
1051 | cmp [schk],3 |
||
1052 | jb @f |
||
1053 | movzx eax,byte [PMEM+ebx-3] |
||
1054 | call .toascii |
||
1055 | mov [string+8],ax |
||
1056 | @@: cmp [schk],2 |
||
1057 | jb @f |
||
1058 | movzx eax,byte [PMEM+ebx-2] |
||
1059 | call .toascii |
||
1060 | mov [string+5],ax |
||
1061 | @@: cmp [schk],1 |
||
1062 | jb @f |
||
1063 | movzx eax,byte [PMEM+ebx-1] |
||
1064 | call .toascii |
||
1065 | mov [string+2],ax |
||
1066 | @@: |
||
1067 | ret |
||
1068 | |||
1069 | |||
1070 | ; ********************************************* |
||
1071 | ; ******* WINDOW DEFINITIONS AND DRAW ********* |
||
1072 | ; ********************************************* |
||
1073 | |||
1074 | draw_window: |
||
1075 | mcall 12,1 |
||
1076 | |||
1077 | mcall 48,3,sc,sizeof.system_colors |
||
1078 | |||
1079 | mov edx,[sc.work] |
||
1080 | or edx,0x34000000 |
||
1081 | mov ecx,200 |
||
1082 | shl ecx,16 |
||
1083 | add ecx,[scin_height] |
||
1084 | add ecx,343 |
||
1085 | mcall 0,160 shl 16+485,,,,title |
||
1086 | |||
1087 | mov ebp,smesh |
||
1088 | mcall 65,bmp_file+8,185*65536+262,2*65536+75,4,palitra |
||
1089 | |||
1090 | mcall 13,13*65536+122,24*65536+20,0xffffff |
||
1091 | |||
1092 | call draw_string |
||
1093 | |||
1094 | mcall 13,137*65536+32,48*65536+12,0x888888 |
||
1095 | |||
1096 | call set_but |
||
1097 | call draw_registers |
||
1098 | call draw_stack |
||
1099 | call draw_prog |
||
1100 | |||
1101 | mcall 8,176*65536+11,61*65536+10,35,0xdadada |
||
1102 | |||
1103 | mov edi,[sc.work] |
||
1104 | or edi,0x34000000 |
||
1105 | mcall 4,133*65536+63,0x81000000,txt.perek |
||
1106 | mcall ,403*65536+4,,txt.prog |
||
1107 | mcall ,403*65536+12,,txt.prog1 |
||
1108 | mcall ,380*65536+323,,txt.sk |
||
1109 | |||
1110 | if 0 |
||
1111 | mov [scroll_bar_data_vertical.all_redraw],1 |
||
1112 | push dword scroll_bar_data_vertical |
||
1113 | call [scrollbar_ver_draw] |
||
1114 | mov [scroll_bar_data_vertical.all_redraw],0 |
||
1115 | endf |
||
1116 | push dword edit1 |
||
1117 | call [edit_box_draw] |
||
1118 | |||
1119 | ;CK |
||
1120 | call draw_schk |
||
1121 | |||
1122 | ;обозначения регистров |
||
1123 | mcall 4,240*65536+4,0x81000000,txt.regs |
||
1124 | mov word [perem],"0:" |
||
1125 | mov byte [perem+2],0 |
||
1126 | mov ebx,210*65536+20 |
||
1127 | mov edx,perem |
||
1128 | push dword 15 |
||
1129 | @@: cmp dword [esp],5 |
||
1130 | je @f |
||
1131 | .prevr: int 0x40 |
||
1132 | add ebx,12 |
||
1133 | inc byte [perem] |
||
1134 | dec dword [esp] |
||
1135 | jnz @b |
||
1136 | jmp .nextr |
||
1137 | @@: add byte [perem],7 |
||
1138 | jmp .prevr |
||
1139 | .nextr: add esp,4 |
||
1140 | |||
1141 | ;обозначения стека |
||
1142 | mcall 4,240*65536+220,0x81000000,txt.stk |
||
1143 | mov word [perem],"T:" |
||
1144 | mov byte [perem+2],0 |
||
1145 | mov ebx,210*65536+240 |
||
1146 | mov edx,perem |
||
1147 | push dword 5 |
||
1148 | .firsts: cmp dword [esp],4 |
||
1149 | jne @f |
||
1150 | mov byte [perem],"Z" |
||
1151 | jmp .prevs |
||
1152 | @@: cmp dword [esp],3 |
||
1153 | jne @f |
||
1154 | mov byte [perem],"Y" |
||
1155 | jmp .prevs |
||
1156 | @@: cmp dword [esp],2 |
||
1157 | jne @f |
||
1158 | mov byte [perem],"X" |
||
1159 | jmp .prevs |
||
1160 | @@: cmp dword [esp],1 |
||
1161 | jne .prevs |
||
1162 | mov dword [perem],"X1" |
||
1163 | .prevs: int 0x40 |
||
1164 | add ebx,12 |
||
1165 | dec dword [esp] |
||
1166 | jnz .firsts |
||
1167 | .nexts: add esp,4 |
||
1168 | |||
1169 | mcall 12,2 |
||
1170 | ret |
||
1171 | |||
1172 | align 4 |
||
1173 | draw_string: |
||
1174 | ; mov edi,[sc.work] |
||
1175 | or edi,0x34ffffff |
||
1176 | mov edx,edi |
||
1177 | mcall 13,20*65536+105,30*65536+7 |
||
1178 | mcall 4,20*65536+30,0x900000ff,string,, |
||
1179 | ret |
||
1180 | |||
1181 | align 4 |
||
1182 | draw_schk: |
||
1183 | test [flags],(1 shl 13) |
||
1184 | jnz .ret |
||
1185 | mov edi,[sc.work] |
||
1186 | or edi,0x34000000 |
||
1187 | movzx ecx,[schk] |
||
1188 | mcall 47,0x020100,,400*65536+323,0x50000000, |
||
1189 | .ret: |
||
1190 | ret |
||
1191 | |||
1192 | align 4 |
||
1193 | set_but: |
||
1194 | mov ecx,34 |
||
1195 | mov eax,8 |
||
1196 | @@: push ecx |
||
1197 | lea ebx,[ecx+0x80000000+1] |
||
1198 | int 0x40 |
||
1199 | pop ecx |
||
1200 | loop @b |
||
1201 | |||
1202 | xor edi,edi |
||
1203 | mov esi,0xffffff |
||
1204 | bt [flags],30 |
||
1205 | jnc @f |
||
1206 | mov esi,0x0 |
||
1207 | @@: mcall 8,140*65536+7,50*65536+7,32 |
||
1208 | mov esi,0x0 |
||
1209 | add ebx,9*65536 |
||
1210 | inc edx |
||
1211 | bt [flags],30 |
||
1212 | jnc @f |
||
1213 | bt [flags],31 |
||
1214 | jc @f |
||
1215 | mov esi,0xffffff |
||
1216 | @@: mcall |
||
1217 | mov esi,0 |
||
1218 | add ebx,9*65536 |
||
1219 | inc edx |
||
1220 | bt [flags],30 |
||
1221 | jnc @f |
||
1222 | bt [flags],31 |
||
1223 | jnc @f |
||
1224 | mov esi,0xffffff |
||
1225 | @@: mcall |
||
1226 | |||
1227 | mov ecx,30 |
||
1228 | push ecx |
||
1229 | mov ecx,89*65536+22 |
||
1230 | .00: mov ebx,8*65536+27 |
||
1231 | .0: pop eax |
||
1232 | lea edx,[eax+(1 shl 30) + 1] |
||
1233 | push eax |
||
1234 | mcall 8,,, |
||
1235 | mov eax,ecx |
||
1236 | pop ecx |
||
1237 | dec ecx |
||
1238 | jz .ret |
||
1239 | push ecx |
||
1240 | cmp ecx,5 |
||
1241 | je .1 |
||
1242 | cmp ecx,10 |
||
1243 | je .1 |
||
1244 | cmp ecx,15 |
||
1245 | je .1 |
||
1246 | cmp ecx,20 |
||
1247 | je .1 |
||
1248 | cmp ecx,25 |
||
1249 | je .1 |
||
1250 | add ebx,36*65536 |
||
1251 | mov ecx,eax |
||
1252 | jmp .0 |
||
1253 | .1: add eax,42*65536 |
||
1254 | mov ecx,eax |
||
1255 | jmp .00 |
||
1256 | .ret: |
||
1257 | ret |
||
1258 | |||
1259 | align 4 |
||
1260 | draw_registers: |
||
1261 | test [flags],(1 shl 13) |
||
1262 | jnz .ret |
||
1263 | mov esi,R.0 |
||
1264 | mov ecx,15 |
||
1265 | mov edx,[sc.work] |
||
1266 | or edx,0x34000000 |
||
1267 | push edx |
||
1268 | mov ebx,220*65536+150 |
||
1269 | push ebx |
||
1270 | mov ebx,20*65536+9 |
||
1271 | push ebx |
||
1272 | push esi ecx |
||
1273 | @@: call .ftoa |
||
1274 | mov ebx,[esp+12] |
||
1275 | mov ecx,[esp+8] |
||
1276 | mov edx,[esp+16] |
||
1277 | mcall 13 |
||
1278 | mov ebx,[esp+12] |
||
1279 | mov eax,[esp+8] |
||
1280 | shr eax,16 |
||
1281 | mov bx,ax |
||
1282 | mov ecx,0;[esp+16] |
||
1283 | add ecx,0x80000000 |
||
1284 | mov edx,buf2 |
||
1285 | mcall 4 |
||
1286 | dec dword [esp] |
||
1287 | jz @f |
||
1288 | add dword [esp+4],8 |
||
1289 | mov esi,[esp+4] |
||
1290 | add dword [esp+8],12*65536 |
||
1291 | jmp @b |
||
1292 | @@: add esp,20 |
||
1293 | .ret: |
||
1294 | ret |
||
1295 | |||
1296 | .ftoa: |
||
1297 | fld qword [esi] |
||
1298 | fld st0 |
||
1299 | fabs |
||
1300 | fxtract |
||
1301 | fstp st0 |
||
1302 | fabs |
||
1303 | fistp [perem] |
||
1304 | mov eax,[perem] |
||
1305 | cmp eax,0x1a+16383 |
||
1306 | jge @f |
||
1307 | cmp eax,0x1a |
||
1308 | jge @f |
||
1309 | stdcall FpuFLtoA,0,8,buf2,SRC1_FPU or SRC1_REAL; or STR_SCI |
||
1310 | fstp st0 |
||
1311 | ret |
||
1312 | @@: stdcall FpuFLtoA,0,8,buf2,SRC1_FPU or SRC1_REAL or STR_SCI |
||
1313 | fstp st0 |
||
1314 | ret |
||
1315 | |||
1316 | align 4 |
||
1317 | draw_stack: |
||
1318 | ; test [flags],(1 shl 13) |
||
1319 | ; jnz .ret |
||
1320 | mov esi,S.T |
||
1321 | mov ecx,5 |
||
1322 | mov edx,[sc.work] |
||
1323 | or edx,0x34000000 |
||
1324 | push edx |
||
1325 | mov ebx,220*65536+150 |
||
1326 | push ebx |
||
1327 | mov ebx,240*65536+9 |
||
1328 | push ebx |
||
1329 | push esi ecx |
||
1330 | @@: call draw_registers.ftoa |
||
1331 | mov ebx,[esp+12] |
||
1332 | mov ecx,[esp+8] |
||
1333 | mov edx,[esp+16] |
||
1334 | mcall 13 |
||
1335 | mov ebx,[esp+12] |
||
1336 | mov eax,[esp+8] |
||
1337 | shr eax,16 |
||
1338 | mov bx,ax |
||
1339 | mov ecx,0;[esp+16] |
||
1340 | add ecx,0x80000000 |
||
1341 | mov edx,buf2 |
||
1342 | mcall 4 |
||
1343 | dec dword [esp] |
||
1344 | jz @f |
||
1345 | sub dword [esp+4],8 |
||
1346 | mov esi,[esp+4] |
||
1347 | add dword [esp+8],12*65536 |
||
1348 | jmp @b |
||
1349 | @@: add esp,20 |
||
1350 | ;.ret: |
||
1351 | ret |
||
1352 | |||
1353 | align 4 |
||
1354 | draw_prog: |
||
1355 | test [flags],(1 shl 13) |
||
1356 | jnz .ret |
||
1357 | pushd 26 |
||
1358 | movzx eax,[schk] |
||
1359 | mov [.sprog2],al |
||
1360 | xor edx,edx |
||
1361 | div dword [esp] |
||
1362 | xor edx,edx |
||
1363 | mul dword [esp] |
||
1364 | mov [.sprog],al |
||
1365 | mov edi,[sc.work] |
||
1366 | or edi,0x34000000 |
||
1367 | movzx ecx, [.sprog] |
||
1368 | add ecx,26 |
||
1369 | sub ecx,[esp] |
||
1370 | mov esi,0x5000459a |
||
1371 | push esi |
||
1372 | cmp cl,[.sprog2] |
||
1373 | jne @f |
||
1374 | mov esi,0x50cc0000 |
||
1375 | @@: mcall 47,0x020100,,400*65536+24,, |
||
1376 | pop esi |
||
1377 | add edx,30*65536 |
||
1378 | movzx ecx,[.sprog] |
||
1379 | add ecx,PMEM+26 |
||
1380 | sub ecx,[esp] |
||
1381 | movzx ecx, byte [ecx] |
||
1382 | mcall |
||
1383 | sub edx,30*65536 |
||
1384 | @@: add edx,11 |
||
1385 | dec dword [esp] |
||
1386 | jz @f |
||
1387 | movzx ecx, [.sprog] |
||
1388 | add ecx,26 |
||
1389 | sub ecx,[esp] |
||
1390 | push esi |
||
1391 | cmp cl,[.sprog2] |
||
1392 | jne .2 |
||
1393 | mov esi,0x50cc0000 |
||
1394 | .2: mcall |
||
1395 | pop esi |
||
1396 | add edx,30*65536 |
||
1397 | movzx ecx,[.sprog] |
||
1398 | add ecx,PMEM+26 |
||
1399 | sub ecx,[esp] |
||
1400 | movzx ecx, byte [ecx] |
||
1401 | mcall |
||
1402 | sub edx,30*65536 |
||
1403 | jmp @b |
||
1404 | @@: pop eax |
||
1405 | .ret: |
||
1406 | ret |
||
1407 | .sprog db 0 |
||
1408 | .sprog2 db 0 |
||
1409 | |||
1410 | |||
1411 | |||
1412 | |||
1413 | |||
1414 | window_load_save: |
||
1415 | popad |
||
1416 | mcall 51,1,.thread,(.threat_stack+32*4) |
||
1417 | pushad |
||
1418 | ret |
||
1419 | .thread: |
||
1420 | bts [flags],26 |
||
1421 | .red: |
||
1422 | mcall 12,1 |
||
1423 | mov edi,txt.load |
||
1424 | bt [flags],25 |
||
1425 | jc @f |
||
1426 | mov edi,txt.save |
||
1427 | @@: mcall 0,50*65536+300,0x70*65536+60,(0x34ffffff),, |
||
1428 | mcall 8,<245,43>,<2,14>,100,0xaaaaaa |
||
1429 | mcall 4,<252,5>,(0x80000000),txt.enter |
||
1430 | push dword edit2 |
||
1431 | call [edit_box_draw] |
||
1432 | mcall 12,2 |
||
1433 | .still: |
||
1434 | mcall 10 |
||
1435 | dec al |
||
1436 | jz .red |
||
1437 | dec al |
||
1438 | jz .key |
||
1439 | dec al |
||
1440 | jz .button |
||
1441 | jmp .still |
||
1442 | .button: |
||
1443 | mcall 17,1 |
||
1444 | cmp ah,1 |
||
1445 | jne @f |
||
1446 | .end: btr [flags],26 |
||
1447 | mcall -1 |
||
1448 | @@: cmp ah,100 |
||
1449 | jne .still |
||
1450 | bt [flags],25 |
||
1451 | jc .ld |
||
1452 | .sv: call save_prog |
||
1453 | jnc .end |
||
1454 | jmp .err |
||
1455 | .ld: call load_prog |
||
1456 | jnc .end |
||
1457 | .err: mcall 4,<5,19>,(0x80000000),txt.error |
||
1458 | jmp .still |
||
1459 | |||
1460 | |||
1461 | .key: |
||
1462 | mcall 2 |
||
1463 | cmp ah,13 |
||
1464 | jne @f |
||
1465 | bt [flags],25 |
||
1466 | jc .ld |
||
1467 | jmp .sv |
||
1468 | @@: cmp ah,27 |
||
1469 | je .end |
||
1470 | push dword edit2 |
||
1471 | call [edit_box_key] |
||
1472 | jmp .still |
||
1473 | |||
1474 | .threat_stack: times 32 dd 0 |
||
1475 | |||
1476 | |||
1477 | save_prog: |
||
1478 | mov [_size],256+8*(15+5)+6*3 |
||
1479 | mcall 68,12,[_size] |
||
1480 | test eax,eax |
||
1481 | jnz @f |
||
1482 | stc |
||
1483 | ret |
||
1484 | |||
1485 | @@: mov [_buffer],eax |
||
1486 | mov esi,S.X1 |
||
1487 | mov edi,eax |
||
1488 | mov byte [edi],"<" |
||
1489 | mov dword [edi+1],"СТЕК" |
||
1490 | mov byte [edi+5],">" |
||
1491 | add edi,6 |
||
1492 | mov ecx,5*2 |
||
1493 | cld |
||
1494 | @@: movsd |
||
1495 | loop @b |
||
1496 | mov esi,R.0 |
||
1497 | mov byte [edi],"<" |
||
1498 | mov dword [edi+1],"РГСТ" |
||
1499 | mov byte [edi+5],">" |
||
1500 | add edi,6 |
||
1501 | mov ecx,15*2 |
||
1502 | cld |
||
1503 | @@: movsd |
||
1504 | loop @b |
||
1505 | mov esi,PMEM |
||
1506 | mov byte [edi],"<" |
||
1507 | mov dword [edi+1],"ПРГМ" |
||
1508 | mov byte [edi+5],">" |
||
1509 | add edi,6 |
||
1510 | mov ecx,256/4 |
||
1511 | cld |
||
1512 | @@: movsd |
||
1513 | loop @b |
||
1514 | |||
1515 | mov [func_70.func_n],2 |
||
1516 | push [_size] |
||
1517 | pop [func_70.param3] |
||
1518 | push [_buffer] |
||
1519 | pop [func_70.param4] |
||
1520 | mov [func_70.name],buf_cmd_lin |
||
1521 | mcall 70,func_70 |
||
1522 | cmp al,0 ;сохранён удачно? |
||
1523 | je @f |
||
1524 | mcall 68,13,[_buffer] |
||
1525 | stc |
||
1526 | ret |
||
1527 | @@: mcall 68,13,[_buffer] |
||
1528 | clc |
||
1529 | ret |
||
1530 | |||
1531 | load_prog: |
||
1532 | mov [func_70.func_n],5 |
||
1533 | mov [func_70.param3],0 |
||
1534 | mov [func_70.param4],bufferfinfo |
||
1535 | mov [func_70.name],buf_cmd_lin |
||
1536 | mcall 70,func_70 |
||
1537 | test al,al ;файл найден? |
||
1538 | jz @f |
||
1539 | stc |
||
1540 | ret |
||
1541 | @@: mov eax, dword [bufferfinfo+32] ;копируем размер файла |
||
1542 | cmp eax,256+8*(15+5)+6*3 |
||
1543 | jbe @f |
||
1544 | stc |
||
1545 | ret |
||
1546 | |||
1547 | _size dd 0 |
||
1548 | _buffer dd 0 |
||
1549 | |||
1550 | @@: mov [_size],eax |
||
1551 | mcall 68,12,[_size] |
||
1552 | test eax,eax |
||
1553 | jnz @f |
||
1554 | stc |
||
1555 | ret ;ошибка на выделение блока |
||
1556 | @@: |
||
1557 | mov [_buffer],eax |
||
1558 | mov [func_70.func_n],0 |
||
1559 | mov [func_70.name],buf_cmd_lin |
||
1560 | push dword [_size] |
||
1561 | pop dword [func_70.param3] |
||
1562 | push dword [_buffer] |
||
1563 | pop dword [func_70.param4] |
||
1564 | mcall 70,func_70 |
||
1565 | test eax,eax |
||
1566 | jz @f |
||
1567 | stc |
||
1568 | ret ;ошибка чтения |
||
1569 | @@: |
||
1570 | |||
1571 | mov esi,[_buffer] |
||
1572 | mov ecx,[_size] |
||
1573 | @@: cmp byte [esi],"<" |
||
1574 | je .@f1 |
||
1575 | inc esi |
||
1576 | loop @b |
||
1577 | .end: mcall 68,13,[_buffer] |
||
1578 | clc |
||
1579 | ret |
||
1580 | .@f1: inc esi |
||
1581 | cmp dword [esi],"СТЕК" |
||
1582 | je .st |
||
1583 | cmp dword [esi],"РГСТ" |
||
1584 | je .rg |
||
1585 | cmp dword [esi],"ПРГМ" |
||
1586 | je .pr |
||
1587 | jmp @b |
||
1588 | .st: mov edi,S.X1 |
||
1589 | add esi,5 |
||
1590 | mov ebx,5*2*4 |
||
1591 | cld |
||
1592 | .st@: movsb |
||
1593 | cmp byte [esi],"<" |
||
1594 | jne .stB |
||
1595 | inc esi |
||
1596 | cmp dword [esi],"РГСТ" |
||
1597 | je .rg |
||
1598 | cmp dword [esi],"ПРГМ" |
||
1599 | je .pr |
||
1600 | dec esi |
||
1601 | .stB: dec ecx |
||
1602 | jz .end |
||
1603 | dec ebx |
||
1604 | jnz .st@ |
||
1605 | jmp @b |
||
1606 | .rg: mov edi,R.0 |
||
1607 | add esi,5 |
||
1608 | mov ebx,15*2*4 |
||
1609 | cld |
||
1610 | .rg@: movsb |
||
1611 | cmp byte [esi],"<" |
||
1612 | jne .rgB |
||
1613 | inc esi |
||
1614 | cmp dword [esi],"СТЕК" |
||
1615 | je .st |
||
1616 | cmp dword [esi],"ПРГМ" |
||
1617 | je .pr |
||
1618 | dec esi |
||
1619 | .rgB: dec ecx |
||
1620 | jz .end |
||
1621 | dec ebx |
||
1622 | jnz .rg@ |
||
1623 | jmp @b |
||
1624 | .pr: mov edi,PMEM |
||
1625 | mov eax,0 |
||
1626 | mov ebx,256/4 |
||
1627 | .pr0: mov [edi],eax |
||
1628 | add edi,4 |
||
1629 | dec ebx |
||
1630 | jnz .pr0 |
||
1631 | mov edi,PMEM |
||
1632 | add esi,5 |
||
1633 | mov ebx,256 |
||
1634 | cld |
||
1635 | .pr@: movsb |
||
1636 | cmp byte [esi],"<" |
||
1637 | jne .prB |
||
1638 | inc esi |
||
1639 | cmp dword [esi],"СТЕК" |
||
1640 | je .st |
||
1641 | cmp dword [esi],"РГСТ" |
||
1642 | je .rg |
||
1643 | dec esi |
||
1644 | .prB: dec ecx |
||
1645 | jz .end |
||
1646 | dec ebx |
||
1647 | jnz .pr@ |
||
1648 | jmp @b |
||
1649 | |||
1650 | |||
1651 | |||
1652 | |||
1653 | |||
1654 | |||
1655 | align 4 |
||
1656 | |||
1657 | S: |
||
1658 | .X1: dq 0.0 |
||
1659 | .X: dq 0.0 |
||
1660 | .Y: dq 0.0 |
||
1661 | .Z: dq 0.0 |
||
1662 | .T: dq 0.0 |
||
1663 | |||
1664 | RS: |
||
1665 | times 10 db 0 |
||
1666 | |||
1667 | align 4 |
||
1668 | R: |
||
1669 | .0: dq 0.0 |
||
1670 | .1: dq 0.0 |
||
1671 | .2: dq 0.0 |
||
1672 | .3: dq 0.0 |
||
1673 | .4: dq 0.0 |
||
1674 | .5: dq 0.0 |
||
1675 | .6: dq 0.0 |
||
1676 | .7: dq 0.0 |
||
1677 | .8: dq 0.0 |
||
1678 | .9: dq 0.0 |
||
1679 | .A: dq 0.0 |
||
1680 | .B: dq 0.0 |
||
1681 | .C: dq 0.0 |
||
1682 | .D: dq 0.0 |
||
1683 | .E: dq 0.0 |
||
1684 | .F: dq 0.0 |
||
1685 | dq 0.0 |
||
1686 | |||
1687 | |||
1688 | align 4 |
||
1689 | myimport: |
||
1690 | edit_box_draw dd aEdit_box_draw |
||
1691 | edit_box_key dd aEdit_box_key |
||
1692 | edit_box_mouse dd aEdit_box_mouse |
||
1693 | version_ed dd aVersion_ed |
||
1694 | |||
1695 | scrollbar_ver_draw dd aScrollbar_ver_draw |
||
1696 | scrollbar_ver_mouse dd aScrollbar_ver_mouse |
||
1697 | version_scrollbar dd aVersion_scrollbar |
||
1698 | |||
1699 | dd 0 |
||
1700 | dd 0 |
||
1701 | |||
1702 | aEdit_box_draw db 'edit_box',0 |
||
1703 | aEdit_box_key db 'edit_box_key',0 |
||
1704 | aEdit_box_mouse db 'edit_box_mouse',0 |
||
1705 | aVersion_ed db 'version_ed',0 |
||
1706 | |||
1707 | aScrollbar_ver_draw db 'scrollbar_v_draw',0 |
||
1708 | aScrollbar_ver_mouse db 'scrollbar_v_mouse',0 |
||
1709 | aVersion_scrollbar db 'version_scrollbar',0 |
||
1710 | |||
1711 | if 0 |
||
1712 | |||
1713 | align 4 |
||
1714 | scroll_bar_data_vertical: |
||
1715 | .x: |
||
1716 | .size_x dw 15;+0 |
||
1717 | .start_x dw 455 ;+2 |
||
1718 | .y: |
||
1719 | .size_y dw 284 ;+4 |
||
1720 | .start_y dw 19 ;+6 |
||
1721 | .btn_high dd 15 ;+8 |
||
1722 | .type dd 1 ;+12 |
||
1723 | .max_area dd 300+20 ;+16 |
||
1724 | .cur_area dd 50 ;+20 |
||
1725 | .position dd 0 ;+24 |
||
1726 | .bckg_col dd 0xAAAAAA ;+28 |
||
1727 | .frnt_col dd 0xCCCCCC ;+32 |
||
1728 | .line_col dd 0 ;+36 |
||
1729 | .redraw dd 0 ;+40 |
||
1730 | .delta dw 0 ;+44 |
||
1731 | .delta2 dw 0 ;+46 |
||
1732 | .run_x: |
||
1733 | .r_size_x dw 0 ;+48 |
||
1734 | .r_start_x dw 0 ;+50 |
||
1735 | .run_y: |
||
1736 | .r_size_y dw 0 ;+52 |
||
1737 | .r_start_y dw 0 ;+54 |
||
1738 | .m_pos dd 0 ;+56 |
||
1739 | .m_pos_2 dd 0 ;+60 |
||
1740 | .m_keys dd 0 ;+64 |
||
1741 | .run_size dd 0 ;+68 |
||
1742 | .position2 dd 0 ;+72 |
||
1743 | .work_size dd 0 ;+76 |
||
1744 | .all_redraw dd 0 ;+80 |
||
1745 | .ar_offset dd 10 ;+84 |
||
1746 | |||
1747 | endf |
||
1748 | |||
1749 | func_70: |
||
1750 | .func_n dd ? |
||
1751 | .param1 dd 0 |
||
1752 | .param2 dd 0 |
||
1753 | .param3 dd ? |
||
1754 | .param4 dd ? |
||
1755 | .rezerv db 0 |
||
1756 | .name dd ? |
||
1757 | |||
1758 | flags dd _flags |
||
1759 | |||
1760 | _pause dd 10 |
||
1761 | string_zero db " 0 ",0 |
||
1762 | buf: times 10 db 0 |
||
1763 | perem dd 0 |
||
1764 | buf2: times 25 db 0 |
||
1765 | string: db " 0 ",0 |
||
1766 | buf3: times 25 db 0 |
||
1767 | schk db 0 |
||
1768 | |||
1769 | title db appname,version,0 |
||
1770 | |||
1771 | txt: |
||
1772 | .save db 'Сохранить (Ctrl+S)',0 |
||
1773 | .error db 'Ошибка',0 |
||
1774 | .load db 'Загрузить (Ctrl+L)',0 |
||
1775 | .enter db 'Enter',0 |
||
1776 | .regs db "Регистры",0 |
||
1777 | .stk db "Стек",0 |
||
1778 | .perek db "Р ГРД Г >",0 |
||
1779 | .prog db "Программа",0 |
||
1780 | .prog1 db "Шаг Код",0 |
||
1781 | .sk db "СК:",0 |
||
1782 | .edbox db " ",0 |
||
1783 | |||
1784 | system_path db '/sys/lib/' |
||
1785 | boxlib_name db 'box_lib.obj',0 |
||
1786 | head_f_i: |
||
1787 | head_f_l db 'error',0 |
||
1788 | err_message_found_lib db 'box_lib.obj was not found',0 |
||
1789 | err_message_import db 'box_lib.obj was not imported',0 |
||
1790 | |||
1791 | edit1 edit_box 20,427,320,0xffffff,0x6a9480,0,0xAABBCC,0,2,txt.edbox,ed_focus,ed_focus,0,0 |
||
1792 | edit2 edit_box 240,2,2,0xffffff,0x6a9480,0,0xAABBCC,0,4096,buf_cmd_lin,ed_focus,2,0,0 |
||
1793 | |||
1794 | virtual at 0 |
||
5098 | clevermous | 1795 | file 'MK_b3-34_hand.bmp':0xA,4 |
1863 | yogev_ezra | 1796 | load offbits dword from 0 |
1797 | end virtual |
||
1798 | |||
1799 | palitra: |
||
5098 | clevermous | 1800 | file 'MK_b3-34_hand.bmp':0x36,offbits-0x36 |
1863 | yogev_ezra | 1801 | |
1802 | sizey = 262 |
||
1803 | sizex = 185 + 7 |
||
1804 | smesh = 3 |
||
1805 | |||
1806 | bmp_file: |
||
5098 | clevermous | 1807 | file 'MK_b3-34_hand.bmp':110 |
1863 | yogev_ezra | 1808 | repeat sizey/2 |
1809 | y = % - 1 |
||
1810 | z = sizey - % |
||
1811 | repeat sizex/2/4 |
||
1812 | load a dword from $ - sizex*sizey/2 + sizex*y/2+(%-1)*4 |
||
1813 | load b dword from $ - sizex*sizey/2 + sizex*z/2+(%-1)*4 |
||
1814 | store dword a at $ - sizex*sizey/2 + sizex*z/2+(%-1)*4 |
||
1815 | store dword b at $ - sizex*sizey/2 + sizex*y/2+(%-1)*4 |
||
1816 | end repeat |
||
1817 | end repeat |
||
1818 | |||
1819 | sound_data: |
||
1820 | db 40 |
||
1821 | dw 670 |
||
1822 | db 0 |
||
1823 | |||
1824 | I_END: |
||
1825 | |||
1826 | sc system_colors |
||
1827 | |||
1828 | procinfo: rb 1024 |
||
1829 | buf_cmd_lin rb 0 |
||
1830 | cur_dir_path rb 4096 |
||
1831 | |||
1832 | |||
1833 | PMEM: rb 256 |
||
1834 | |||
1835 | bufferfinfo rb 40 |
||
1836 | scin_height rd 1 |
||
1837 | |||
1838 | D_END:" |