Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1863 yogev_ezra 1
align 4
2
 
3
OPCODEtable:
4
 
5
dd _00,_00,_00,_00,_00,_00,_00,_00 ;00-07
6
dd _00,_00,_0A,_0B,_0C,_0D,_0E,_0F ;08-0f
7
dd _10,_11,_12,_13,_14,_15,_16,_17 ;10-17
8
dd _18,_19,_1A,_1B,_1C,_1D,_1E,_1f ;18-1f
9
dd _20,_21,_22,_23,_24,_25,_1f,_1f ;20-27
10
dd _1f,_1f,_1f,_1f,_1f,_1f,_1f,_1f ;28-2f
11
dd _1f,_31,_32,_1f,_34,_35,_36,_1f ;30-37
12
dd _1f,_1f,_1f,_3B,_1f,_1f,_1f,_1f ;38-3f
13
times 16 dd _40 ;40-4f
14
dd _50,_51,_52,_53,_54,_1f,_1f,_57 ;50-57
15
dd _58,_59,_5A,_5B,_5C,_5D,_5E,_1f ;58-5f
16
times 16 dd _60 ;60-6f
17
times 16 dd _70 ;70-7f
18
times 16 dd _80 ;80-8f
19
times 16 dd _90 ;90-9f
20
times 16 dd _A0 ;a0-af
21
times 16 dd _B0 ;b0-bf
22
times 16 dd _C0 ;c0-cf
23
times 16 dd _D0 ;d0-df
24
times 16 dd _E0 ;e0-ef
25
times 16 dd _1f ;f0-ff
26
 
27
 
28
move1 db 0
29
move2 db 0
30
move1dot db 0
31
 
32
_1f: ret
33
 
34
;*************************************
35
 
36
_3B:
37
	mcall	3
38
	shl	eax,16
39
	shr	eax,16
40
	mov	[perem],eax
41
	fild	[perem]
42
	mcall	26,9
43
	shl	eax,16
44
	shr	eax,18
45
	mov	[perem],eax
46
	fild	[perem]
47
	fcom	st1
48
	jnc	@f
49
	fdivrp
50
	mov	[perem],10
51
	fild	[perem]
52
	fdivp
53
	jmp	.1
54
   @@:	fdivp
55
   .1:	fld	qword [S.Z]
56
	fstp	qword [S.T]
57
	fld	qword [S.Y]
58
	fstp	qword [S.Z]
59
	fld	qword [S.X]
60
	fst	qword [S.Y]
61
	fstp	qword [S.X1]
62
	fstp	qword [S.X]
63
	call	draw_stack
64
	fld	qword [S.X]
65
	call	ftos
66
	call	draw_string
67
	bts	[flags],10
68
	btr	[flags],6
69
	btr	[flags],4
70
	ret
71
 
72
_36:
73
	bt	[flags],0
74
	jnc	@f
75
	inc	[schk]
76
  @@:	fld	qword [S.Y]
77
	fld	qword [S.X]
78
	fst	qword [S.X1]
79
 
80
	fcom	st1
81
	fstsw	ax
82
	sahf
83
	jc	@f
84
	fstp	qword [S.X]
85
	fstp	st0
86
	jmp	.1
87
  @@:	fstp	st0
88
	fstp	qword [S.X]
89
  .1:
90
	fld	qword [S.Z]
91
	fstp	qword [S.Y]
92
	fld	qword [S.T]
93
	fstp	qword [S.Z]
94
;	fldz
95
;	fstp	qword [S.T]
96
	call	draw_stack
97
	fld	qword [S.X]
98
	call	ftos
99
	call	draw_string
100
	bts	[flags],10
101
	btr	[flags],6
102
	ret
103
 
104
_35:
105
	bt	[flags],0
106
	jnc	@f
107
	inc	[schk]
108
  @@:	fld	qword [S.X]
109
	fst	qword [S.X1]
110
	fldz
111
	fcomp	st1
112
	fstsw	ax
113
	sahf
114
	jz	@f
115
	jc	@f
116
	frndint
117
	fcom	qword [S.X]
118
	fstsw	ax
119
	sahf
120
	jnc	.0
121
	fld1
122
	faddp
123
	jmp	.0
124
  @@:	frndint
125
	fcom	qword [S.X]
126
	fstsw	 ax
127
	sahf
128
	jc	.0
129
	jz	.0
130
	fld1
131
	fsubp
132
  .0:	fld	qword [S.X]
133
	fsubrp
134
	fst	qword [S.X]
135
	call	ftos
136
	call	draw_string
137
	call	draw_stack
138
	bts	[flags],10
139
	btr	[flags],6
140
	ret
141
 
142
 
143
_34:
144
	bt	[flags],0
145
	jnc	@f
146
	inc	[schk]
147
  @@:	fld	qword [S.X]
148
	fst	qword [S.X1]
149
	fldz
150
	fcomp	st1
151
	fstsw	ax
152
	sahf
153
	jz	@f
154
	jc	@f
155
	frndint
156
	fcom	qword [S.X]
157
	fstsw	ax
158
	sahf
159
	jnc	.0
160
	fld1
161
	faddp
162
	jmp	.0
163
  @@:	frndint
164
	fcom	qword [S.X]
165
	fstsw	 ax
166
	sahf
167
	jc	.0
168
	jz	.0
169
	fld1
170
	fsubp
171
  .0:	fst	qword [S.X]
172
	call	ftos
173
	call	draw_string
174
	call	draw_stack
175
	bts	[flags],10
176
	btr	[flags],6
177
	ret
178
 
179
_32:
180
	bt	[flags],0
181
	jnc	@f
182
	inc	[schk]
183
  @@:	fld	qword [S.X]
184
	fstp	qword [S.X1]
185
	fldz
186
	fcomp	qword [S.X]
187
	fstsw	 ax
188
	sahf
189
	fld1
190
	jz	@f
191
	jc	@f
192
	fchs
193
  @@:	fst	qword [S.X]
194
	call	ftos
195
	call	draw_string
196
	call	draw_stack
197
	bts	[flags],10
198
	btr	[flags],6
199
	ret
200
 
201
_31:
202
	bt	[flags],0
203
	jnc	@f
204
	inc	[schk]
205
  @@:	fld	qword [S.X]
206
	fst	qword [S.X1]
207
	fabs
208
	fst	qword [S.X]
209
	call	ftos
210
	call	draw_string
211
	call	draw_stack
212
	bts	[flags],10
213
	btr	[flags],6
214
	ret
215
 
216
;************************************
217
_E0:
218
	;x=0 ;0!=x
219
	inc	[schk]
220
  @@:	fldz
221
	fcomp	qword [S.X]
222
	fstsw	 ax
223
	sahf
224
	jnz	@f
225
	ret
226
  @@:	sub	eax,OPCODEtable
227
	shr	eax,2
228
	sub	eax,0xE0;90
229
	shl	eax,3
230
	add	eax,R.0
231
	fld	qword [eax]
232
	cmp	ebx,6
233
	jge	@f
234
	fld1
235
	cmp	ebx,4
236
	jge	.2
237
	fsubrp
238
	jmp	@f
239
  .2:	faddp
240
  @@:	fst	qword [eax]
241
	fabs
242
	fistp	[perem]
243
	mov	eax,[perem]
244
	mov	[schk],al
245
	ret
246
 
247
_D0:
248
	inc	[schk]
249
 
250
	sub	eax,OPCODEtable
251
	shr	eax,2
252
	sub	eax,0xD0
253
	mov	ebx,eax
254
	shl	eax,3
255
	add	eax,R.0
256
	fld	qword [eax]
257
	cmp	ebx,6
258
	ja	@f
259
	fld1
260
	cmp	ebx,4
261
	jge	.2
262
	fsubrp
263
	jmp	@f
264
  .2:	faddp
265
  @@:	frndint
266
	fst	qword [eax]
267
	fabs
268
	fistp	[perem]
269
	mov	eax,[perem]
270
	shl	eax,31-4
271
	shr	eax,31-4
272
	shl	eax,3
273
	add	eax,R.0
274
 
275
	fld	qword [eax]
276
 
277
	fld	qword [S.Z]
278
	fstp	qword [S.T]
279
	fld	qword [S.Y]
280
	fstp	qword [S.Z]
281
	fld	qword [S.X]
282
	fst	qword [S.Y]
283
	fstp	qword [S.X1]
284
 
285
	fstp	qword [S.X]
286
 
287
	call	draw_registers
288
	call	draw_stack
289
	bts	[flags],10
290
	btr	[flags],6
291
	ret
292
 
293
_C0:
294
	;x<0 ;0
295
	inc	[schk]
296
  @@:	fldz
297
	fcomp	qword [S.X]
298
	fstsw	 ax
299
	sahf
300
	jz	@f
301
	jc	@f
302
	ret
303
  @@:	sub	eax,OPCODEtable
304
	shr	eax,2
305
	sub	eax,0xC0
306
	shl	eax,3
307
	add	eax,R.0
308
	fld	qword [eax]
309
	cmp	ebx,6
310
	jge	@f
311
	fld1
312
	cmp	ebx,4
313
	jge	.2
314
	fsubrp
315
	jmp	@f
316
  .2:	faddp
317
  @@:	fst	qword [eax]
318
	fabs
319
	fistp	[perem]
320
	mov	eax,[perem]
321
	mov	[schk],al
322
	ret
323
 
324
_B0:
325
	inc	[schk]
326
 
327
	sub	eax,OPCODEtable
328
	shr	eax,2
329
	sub	eax,0xB0
330
	shl	eax,3
331
	add	eax,R.0
332
	fld	qword [eax]
333
	cmp	ebx,6
334
	jge	@f
335
	fld1
336
	cmp	ebx,4
337
	jge	.2
338
	fsubrp
339
	jmp	@f
340
  .2:	faddp
341
  @@:	fst	qword [eax]
342
	fabs
343
	fistp	[perem]
344
	mov	eax,[perem]
345
	mov	ecx,16
346
	xor	edx,edx
347
	div	ecx
348
	mov	eax,edx
349
	shl	eax,3
350
	add	eax,R.0
351
	fld	qword [S.X]
352
	fstp	qword [eax]
353
 
354
	bts	[flags],10
355
	btr	[flags],6
356
	ret
357
 
358
_A0:
359
	inc	[schk]
360
	mov	cl,[schk]
361
 
362
	sub	eax,OPCODEtable
363
	shr	eax,2
364
	sub	eax,0xA0
365
	shl	eax,3
366
	add	eax,R.0
367
	fld	qword [eax]
368
	cmp	ebx,6
369
	jge	@f
370
	fld1
371
	cmp	ebx,4
372
	jge	.2
373
	fsubrp
374
	jmp	@f
375
  .2:	faddp
376
  @@:	fst	qword [eax]
377
	fabs
378
	fistp	[perem]
379
	mov	eax,[perem]
380
	mov	[schk],al
381
 
382
	mov	al,[RS+3]
383
	mov	[RS+4],al
384
	mov	al,[RS+2]
385
	mov	[RS+3],al
386
	mov	al,[RS+1]
387
	mov	[RS+2],al
388
	mov	al,[RS+0]
389
	mov	[RS+1],al
390
 
391
	mov	[RS+0],cl
392
	bts	[flags],10
393
	btr	[flags],6
394
	ret
395
 
396
_90:
397
	;x>=0 ;0>x
398
	inc	[schk]
399
  @@:	fldz
400
	fcomp	qword [S.X]
401
	fstsw	 ax
402
	sahf
403
	jp	@f
404
	jz	@f
405
	jc	@f
406
	jmp	.1
407
  @@:	ret
408
  .1:	sub	eax,OPCODEtable
409
	shr	eax,2
410
	sub	eax,0x90
411
	shl	eax,3
412
	add	eax,R.0
413
	fld	qword [eax]
414
	cmp	ebx,6
415
	jge	@f
416
	fld1
417
	cmp	ebx,4
418
	jge	.2
419
	fsubrp
420
	jmp	@f
421
  .2:	faddp
422
  @@:	fst	qword [eax]
423
	fabs
424
	fistp	[perem]
425
	mov	eax,[perem]
426
	mov	[schk],al
427
	ret
428
 
429
_80:
430
	inc	[schk]
431
	sub	eax,OPCODEtable
432
	shr	eax,2
433
	sub	eax,0x80
434
	shl	eax,3
435
	add	eax,R.0
436
	fld	qword [eax]
437
	cmp	ebx,6
438
	jge	@f
439
	fld1
440
	cmp	ebx,4
441
	jge	.2
442
	fsubrp
443
	jmp	@f
444
  .2:	faddp
445
  @@:	fst	qword [eax]
446
	fabs
447
	fistp	[perem]
448
	mov	eax,[perem]
449
	mov	[schk],al
450
	ret
451
 
452
_70:	;x!=0 ;x=0
453
	inc	[schk]
454
  @@:	fldz
455
	fcomp	qword [S.X]
456
	fstsw	 ax
457
	sahf
458
	jz	@f
459
	ret
460
  @@:	sub	eax,OPCODEtable
461
	shr	eax,2
462
	sub	eax,0x70
463
	mov	ebx,eax
464
	shl	eax,3
465
	add	eax,R.0
466
	fld	qword [eax]
467
	cmp	ebx,6
468
	jge	@f
469
	fld1
470
	cmp	ebx,4
471
	jge	.2
472
	fsubrp
473
	jmp	@f
474
  .2:	faddp
475
  @@:	fst	qword [eax]
476
	fabs
477
	fistp	[perem]
478
	mov	eax,[perem]
479
	mov	[schk],al
480
	ret
481
 
482
_5D:
483
	inc	[schk]
484
	fld	qword [R.0]
485
	fld1
486
	fsubp
487
	fst	qword [R.0]
488
	fabs
489
	fistp	[perem]
490
	mov	eax,[perem]
491
	test	eax,eax
492
	jz	@f
493
	movzx	eax,[schk]
494
	add	eax,PMEM
495
	mov	al,[eax]
496
	mov	[schk],al
497
	jmp	.1
498
  @@:	inc	[schk]
499
  .1:	call	draw_registers
500
	bts	[flags],10
501
	btr	[flags],6
502
	ret
503
 
504
_5B:
505
	inc	[schk]
506
	fld	qword [R.1]
507
	fld1
508
	fsubp
509
	fst	qword [R.1]
510
	fabs
511
	fistp	[perem]
512
	mov	eax,[perem]
513
	test	eax,eax
514
	jz	@f
515
	movzx	eax,[schk]
516
	add	eax,PMEM
517
	mov	al,[eax]
518
	mov	[schk],al
519
	jmp	.1
520
  @@:	inc	[schk]
521
  .1:	call	draw_registers
522
	bts	[flags],10
523
	btr	[flags],6
524
	ret
525
 
526
 
527
_5A:
528
	inc	[schk]
529
	fld	qword [R.3]
530
	fld1
531
	fsubp
532
	fst	qword [R.3]
533
	fabs
534
	fistp	[perem]
535
	mov	eax,[perem]
536
	test	eax,eax
537
	jz	@f
538
	movzx	eax,[schk]
539
	add	eax,PMEM
540
	mov	al,[eax]
541
	mov	[schk],al
542
	jmp	.1
543
  @@:	inc	[schk]
544
  .1:	call	draw_registers
545
	bts	[flags],10
546
	btr	[flags],6
547
	ret
548
 
549
 
550
_58:	;F,L2
551
	inc	[schk]
552
	fld	qword [R.2]
553
	fld1
554
	fsubp
555
	fst	qword [R.2]
556
	fabs
557
	fistp	[perem]
558
	mov	eax,[perem]
559
	test	eax,eax
560
	jz	@f
561
	movzx	eax,[schk]
562
	add	eax,PMEM
563
	mov	al,[eax]
564
	mov	[schk],al
565
	jmp	.1
566
  @@:	inc	[schk]
567
  .1:	call	draw_registers
568
	bts	[flags],10
569
	btr	[flags],6
570
	ret
571
 
572
 
573
 
574
_5E:	;x=0
575
;       bt      [flags],0
576
;       jnc     @f
577
	inc	[schk]
578
  @@:	fldz
579
	fcomp	qword [S.X]
580
	fstsw	 ax
581
	sahf
582
	jnz	@f
583
	inc	[schk]
584
	ret
585
  @@:	movzx	eax, byte [schk]
586
	add	eax,PMEM
587
	mov	al,[eax]
588
	mov	[schk],al
589
	ret
590
 
591
_5C:	;x<0
592
;       bt      [flags],0
593
;       jnc     @f
594
	inc	[schk]
595
  @@:	fldz
596
	fcomp	qword [S.X]
597
	fstsw	 ax
598
	sahf
599
	jc	@f
600
	jz	@f
601
	inc	[schk]
602
	ret
603
  @@:	movzx	eax, byte [schk]
604
	add	eax,PMEM
605
	mov	al,[eax]
606
	mov	[schk],al
607
	ret
608
 
609
_59:	;x>=0
610
;       bt      [flags],0
611
;       jnc     @f
612
	inc	[schk]
613
  @@:	fldz
614
	fcomp	qword [S.X]
615
	fstsw	 ax
616
	sahf
617
	jp	@f
618
	jz	@f
619
	jc	@f
620
	jmp	.1
621
  @@:	inc	[schk]
622
	ret
623
  .1:	movzx	eax, byte [schk]
624
	add	eax,PMEM
625
	mov	al,[eax]
626
	mov	[schk],al
627
	ret
628
 
629
_57:  ;x!=0
630
;       bt      [flags],0
631
;       jnc     @f
632
	inc	[schk]
633
  @@:	fldz
634
	fcomp	qword [S.X]
635
	fstsw	 ax
636
	sahf
637
	jz	@f
638
	inc	[schk]
639
	ret
640
  @@:	movzx	eax, byte [schk]
641
	add	eax,PMEM
642
	mov	al,[eax]
643
	mov	[schk],al
644
	ret
645
 
646
_54:
647
	inc	[schk]
648
	ret
649
 
650
_53:	bt	[flags],0
651
	jnc	@f
652
	inc	[schk]
653
	mov	al,[RS+3]
654
	mov	[RS+4],al
655
	mov	al,[RS+2]
656
	mov	[RS+3],al
657
	mov	al,[RS+1]
658
	mov	[RS+2],al
659
	mov	al,[RS+0]
660
	mov	[RS+1],al
661
	mov	al,[schk]
662
	inc	al
663
	mov	[RS+0],al
664
	movzx	eax,[schk]
665
	add	eax,PMEM
666
	mov	al,[eax]
667
	mov	[schk],al
668
	bts	[flags],10
669
	btr	[flags],6
670
	ret
671
  @@:	bts	[flags],0
672
	movzx	eax,[schk]
673
	add	eax,PMEM
674
	movzx	eax,byte [eax]
675
	shl	eax,2
676
	add	eax,OPCODEtable
677
	mov	ebx,[eax]
678
	call	ebx
679
	btr	[flags],0
680
	call	draw_schk
681
	call	draw_prog
682
ret
683
 
684
_52:	inc	[schk]
685
	bt	[flags],0
686
	jnc	@f
687
	mov	al,[RS+0]
688
	mov	[schk],al
689
	mov	al,[RS+1]
690
	mov	[RS+0],al
691
	mov	al,[RS+2]
692
	mov	[RS+1],al
693
	mov	al,[RS+3]
694
	mov	[RS+2],al
695
	mov	al,[RS+4]
696
	mov	[RS+3],al
697
	mov	byte [RS+4],0
698
	ret
699
  @@:	mov	[schk],0
700
	call draw_prog
701
	call draw_schk
702
ret
703
 
704
 
705
_51:
706
;       bt      [flags],0
707
;       jnc     @f
708
	inc	[schk]
709
  @@:	movzx	eax, byte [schk]
710
	add	eax,PMEM
711
	mov	al,[eax]
712
	mov	[schk],al
713
	ret
714
 
715
 
716
_50:
717
	btc	[flags],0
718
	jc	@f
719
	ret
720
  @@:	inc	[schk]
721
	fld	qword [S.X]
722
	call	ftos
723
	call	draw_string
724
	call	draw_registers
725
	bts	[flags],10
726
	btr	[flags],6
727
	ret
728
 
729
_60:
730
	bt	[flags],0
731
	jnc	@f
732
	inc	[schk]
733
  @@:	sub	eax,OPCODEtable
734
	shr	eax,2
735
	sub	eax,0x60
736
	shl	eax,3
737
	add	eax,R.0
738
	fld	qword [eax]
739
	fld	qword [S.Z]
740
	fstp	qword [S.T]
741
	fld	qword [S.Y]
742
	fstp	qword [S.Z]
743
	fld	qword [S.X]
744
	fstp	qword [S.Y]
745
	fstp	qword [S.X]
746
	call	draw_stack
747
	fld	qword [S.X]
748
	call	ftos
749
	call	draw_string
750
	call	draw_registers
751
	bts	[flags],10
752
	btr	[flags],6
753
	btr	[flags],12
754
	btr	[flags],3
755
	ret
756
 
757
_40:
758
	bt	[flags],0
759
	jnc	@f
760
	inc	[schk]
761
  @@:	sub	eax,OPCODEtable
762
	shr	eax,2
763
	sub	eax,0x40
764
	shl	eax,3
765
	add	eax,R.0
766
	fld	qword [S.X]
767
	fstp	qword [eax]
768
	call	draw_stack
769
	fld	qword [S.X]
770
	call	ftos
771
	call	draw_string
772
	call	draw_registers
773
	bts	[flags],10
774
	btr	[flags],6
775
	btr	[flags],11
776
	btr	[flags],3
777
	ret
778
 
779
_25:
780
	bt	[flags],0
781
	jnc	@f
782
	inc	[schk]
783
  @@:	fld	qword [S.X1]
784
	fld	qword [S.X]
785
	fstp	qword [S.X1]
786
	fld	qword [S.Y]
787
	fstp	qword [S.X]
788
	fld	qword [S.Z]
789
	fstp	qword [S.Y]
790
	fld	qword [S.T]
791
	fstp	qword [S.Z]
792
	fstp	qword [S.T]
793
	call	draw_stack
794
	fld	qword [S.X]
795
	call	ftos
796
	call	draw_string
797
	bts	[flags],10
798
	btr	[flags],6
799
	btr	[flags],3
800
	ret
801
 
802
_24:
803
	bt	[flags],0
804
	jnc	@f
805
	inc	[schk]
806
  @@:	fld	qword [S.X]
807
	fst	qword [S.X1]
808
	fld	qword [S.Y]
809
	call	FpuXexpY
810
	fstp	qword [S.X]
811
	call	draw_stack
812
	fld	qword [S.X]
813
	call	ftos
814
	call	draw_string
815
	bts	[flags],10
816
	btr	[flags],6
817
	btr	[flags],3
818
	ret
819
 
820
_23:
821
	bt	[flags],0
822
	jnc	@f
823
	inc	[schk]
824
  @@:	fld	qword [S.X]
825
	fst	qword [S.X1]
826
	fld1
827
	fdivrp
828
	fstp	qword [S.X]
829
	call	draw_stack
830
	fld	qword [S.X]
831
	call	ftos
832
	call	draw_string
833
	bts	[flags],10
834
	btr	[flags],6
835
	btr	[flags],3
836
	ret
837
 
838
_22:
839
	bt	[flags],0
840
	jnc	@f
841
	inc	[schk]
842
  @@:	fld	qword [S.X]
843
	fst	qword [S.X1]
844
	fmul	st,st
845
	fstp	qword [S.X]
846
	call	draw_stack
847
	fld	qword [S.X]
848
	call	ftos
849
	call	draw_string
850
	bts	[flags],10
851
	btr	[flags],6
852
	btr	[flags],3
853
	ret
854
 
855
_21:
856
	bt	[flags],0
857
	jnc	@f
858
	inc	[schk]
859
  @@:	fld	qword [S.X]
860
	fst	qword [S.X1]
861
	fsqrt
862
	fstp	qword [S.X]
863
	call	draw_stack
864
	fld	qword [S.X]
865
	call	ftos
866
	call	draw_string
867
	bts	[flags],10
868
	btr	[flags],6
869
	btr	[flags],3
870
	ret
871
 
872
 
873
_20:
874
	bt	[flags],0
875
	jnc	@f
876
	inc	[schk]
877
  @@:	fld	qword [S.X]
878
	fstp	qword [S.X1]
879
	fld	qword [S.Z]
880
	fstp	qword [S.T]
881
	fld	qword [S.Y]
882
	fstp	qword [S.Z]
883
	fld	qword [S.X]
884
	fstp	qword [S.Y]
885
	fldpi
886
	fstp	qword [S.X]
887
	call	draw_stack
888
	fld	qword [S.X]
889
	call	ftos
890
	call	draw_string
891
	bts	[flags],10
892
	btr	[flags],6
893
	btr	[flags],3
894
	ret
895
 
896
_1E:
897
	bt	[flags],0
898
	jnc	@f
899
	inc	[schk]
900
  @@:	fld	qword [S.X]
901
	fst	qword [S.X1]
902
	call	FpuTan
903
	fstp	qword [S.X]
904
	call	draw_stack
905
	fld	qword [S.X]
906
	call	ftos
907
	call	draw_string
908
	bts	[flags],10
909
	btr	[flags],6
910
	btr	[flags],3
911
	ret
912
 
913
 
914
_1D:
915
	bt	[flags],0
916
	jnc	@f
917
	inc	[schk]
918
  @@:	fld	qword [S.X]
919
	fst	qword [S.X1]
920
	call	FpuCos
921
	fstp	qword [S.X]
922
	call	draw_stack
923
	fld	qword [S.X]
924
	call	ftos
925
	call	draw_string
926
	bts	[flags],10
927
	btr	[flags],6
928
	btr	[flags],3
929
	ret
930
 
931
_1C:
932
	bt	[flags],0
933
	jnc	@f
934
	inc	[schk]
935
  @@:	fld	qword [S.X]
936
	fst	qword [S.X1]
937
	call	FpuSin
938
	fstp	qword [S.X]
939
	call	draw_stack
940
	fld	qword [S.X]
941
	call	ftos
942
	call	draw_string
943
	bts	[flags],10
944
	btr	[flags],6
945
	btr	[flags],3
946
	ret
947
 
948
_1B:
949
	bt	[flags],0
950
	jnc	@f
951
	inc	[schk]
952
  @@:	fld	qword [S.X]
953
	fst	qword [S.X1]
954
	call	FpuArctan
955
	fstp	qword [S.X]
956
	call	draw_stack
957
	fld	qword [S.X]
958
	call	ftos
959
	call	draw_string
960
	bts	[flags],10
961
	btr	[flags],6
962
	btr	[flags],3
963
	ret
964
 
965
_1A:
966
	bt	[flags],0
967
	jnc	@f
968
	inc	[schk]
969
  @@:	fld	qword [S.X]
970
	fst	qword [S.X1]
971
	call	FpuArccos
972
	fstp	qword [S.X]
973
	call	draw_stack
974
	fld	qword [S.X]
975
	call	ftos
976
	call	draw_string
977
	bts	[flags],10
978
	btr	[flags],6
979
	btr	[flags],3
980
	ret
981
_19:
982
	bt	[flags],0
983
	jnc	@f
984
	inc	[schk]
985
  @@:	fld	qword [S.X]
986
	fst	qword [S.X1]
987
	call	FpuArcsin
988
	fstp	qword [S.X]
989
	call	draw_stack
990
	fld	qword [S.X]
991
	call	ftos
992
	call	draw_string
993
	bts	[flags],10
994
	btr	[flags],6
995
	btr	[flags],3
996
	ret
997
 
998
 
999
_18:
1000
	bt	[flags],0
1001
	jnc	@f
1002
	inc	[schk]
1003
  @@:	fld	qword [S.X]
1004
	fst	qword [S.X1]
1005
	fldln2
1006
	fxch
1007
	fyl2x
1008
	fstp	qword [S.X]
1009
	call	draw_stack
1010
	fld	qword [S.X]
1011
	call	ftos
1012
	call	draw_string
1013
	bts	[flags],10
1014
	btr	[flags],6
1015
	btr	[flags],3
1016
	ret
1017
 
1018
_17:
1019
	bt	[flags],0
1020
	jnc	@f
1021
	inc	[schk]
1022
  @@:	fld	qword [S.X]
1023
	fst	qword [S.X1]
1024
	fldlg2
1025
	fxch
1026
	fyl2x
1027
	fstp	qword [S.X]
1028
	call	draw_stack
1029
	fld	qword [S.X]
1030
	call	ftos
1031
	call	draw_string
1032
	bts	[flags],10
1033
	btr	[flags],6
1034
	btr	[flags],3
1035
	ret
1036
 
1037
 
1038
_16:
1039
	bt	[flags],0
1040
	jnc	@f
1041
	inc	[schk]
1042
  @@:	fld	qword [S.X]
1043
	fst	qword [S.X1]
1044
	call	FpuEexpX
1045
	fstp	qword [S.X]
1046
	call	draw_stack
1047
	fld	qword [S.X]
1048
	call	ftos
1049
	call	draw_string
1050
	bts	[flags],10
1051
	btr	[flags],6
1052
	btr	[flags],3
1053
	ret
1054
 
1055
_15:
1056
	bt	[flags],0
1057
	jnc	@f
1058
	inc	[schk]
1059
  @@:	mov	[perem],10
1060
	fild	[perem]
1061
	fld	qword [S.X]
1062
	fst	qword [S.X1]
1063
	call	FpuXexpY
1064
	fstp	qword [S.X]
1065
	call	draw_stack
1066
	fld	qword [S.X]
1067
	call	ftos
1068
	call	draw_string
1069
	bts	[flags],10
1070
	btr	[flags],6
1071
	btr	[flags],3
1072
	ret
1073
 
1074
_14:
1075
	bt	[flags],0
1076
	jnc	@f
1077
	inc	[schk]
1078
  @@:	fld	qword [S.Y]
1079
	fld	qword [S.X]
1080
	fst	qword [S.Y]
1081
	fstp	qword [S.X1]
1082
	fstp	qword [S.X]
1083
	call	draw_stack
1084
	fld	qword [S.X]
1085
	call	ftos
1086
	call	draw_string
1087
	bts	[flags],10
1088
	btr	[flags],6
1089
	ret
1090
_13:
1091
	bt	[flags],0
1092
	jnc	@f
1093
	inc	[schk]
1094
  @@:	fld	qword [S.Y]
1095
	fld	qword [S.X]
1096
	fdivp
1097
	fld	qword [S.X]
1098
	fstp	qword [S.X1]
1099
	fstp	qword [S.X]
1100
	fld	qword [S.Z]
1101
	fstp	qword [S.Y]
1102
	fld	qword [S.T]
1103
	fstp	qword [S.Z]
1104
;	fldz
1105
;	fstp	qword [S.T]
1106
	call	draw_stack
1107
	fld	qword [S.X]
1108
	call	ftos
1109
	call	draw_string
1110
	bts	[flags],10
1111
	btr	[flags],6
1112
	ret
1113
_12:
1114
	bt	[flags],0
1115
	jnc	@f
1116
	inc	[schk]
1117
  @@:	fld	qword [S.Y]
1118
	fld	qword [S.X]
1119
	fmulp
1120
	fld	qword [S.X]
1121
	fstp	qword [S.X1]
1122
	fstp	qword [S.X]
1123
	fld	qword [S.Z]
1124
	fstp	qword [S.Y]
1125
	fld	qword [S.T]
1126
	fstp	qword [S.Z]
1127
;	fldz
1128
;	fstp	qword [S.T]
1129
	call	draw_stack
1130
	fld	qword [S.X]
1131
	call	ftos
1132
	call	draw_string
1133
	bts	[flags],10
1134
	btr	[flags],6
1135
	ret
1136
_11:
1137
	bt	[flags],0
1138
	jnc	@f
1139
	inc	[schk]
1140
  @@:	fld	qword [S.Y]
1141
	fld	qword [S.X]
1142
	fsubp
1143
	fld	qword [S.X]
1144
	fstp	qword [S.X1]
1145
	fstp	qword [S.X]
1146
	fld	qword [S.Z]
1147
	fstp	qword [S.Y]
1148
	fld	qword [S.T]
1149
	fstp	qword [S.Z]
1150
;	fldz
1151
;	fstp	qword [S.T]
1152
	call	draw_stack
1153
	fld	qword [S.X]
1154
	call	ftos
1155
	call	draw_string
1156
	bts	[flags],10
1157
	btr	[flags],6
1158
	ret
1159
 
1160
_10:
1161
	bt	[flags],0
1162
	jnc	@f
1163
	inc	[schk]
1164
  @@:	fld	qword [S.X]
1165
	fld	qword [S.Y]
1166
	faddp
1167
	fld	qword [S.X]
1168
	fstp	qword [S.X1]
1169
	fstp	qword [S.X]
1170
	fld	qword [S.Z]
1171
	fstp	qword [S.Y]
1172
	fld	qword [S.T]
1173
	fst	qword [S.Z]
1174
;	fldz
1175
;	fstp	qword [S.T]
1176
	call	draw_stack
1177
	fld	qword [S.X]
1178
	call	ftos
1179
	call	draw_string
1180
	bts	[flags],10
1181
	btr	[flags],6
1182
	ret
1183
 
1184
_0F:
1185
	bt	[flags],0
1186
	jnc	@f
1187
	inc	[schk]
1188
  @@:	fld	qword [S.Z]
1189
	fstp	qword [S.T]
1190
	fld	qword [S.Y]
1191
	fstp	qword [S.Z]
1192
	fld	qword [S.X]
1193
	fstp	qword [S.Y]
1194
	fld	qword [S.X1]
1195
	fstp	qword [S.X]
1196
	call	draw_stack
1197
	fld	qword [S.X]
1198
	call	ftos
1199
	call	draw_string
1200
	bts	[flags],10
1201
	btr	[flags],6
1202
	btr	[flags],3
1203
	ret
1204
 
1205
_0E:
1206
	bt	[flags],0
1207
	jnc	@f
1208
	inc	[schk]
1209
  @@:
1210
;       call    stof
1211
;       fstp    qword [S.X]
1212
	fld	qword [S.Z]
1213
	fstp	qword [S.T]
1214
	fld	qword [S.Y]
1215
	fstp	qword [S.Z]
1216
	fld	qword [S.X]
1217
	fstp	qword [S.Y]
1218
	call	draw_string
1219
;       call    stof
1220
;       fstp    qword [S.X]
1221
	call	draw_stack
1222
	bts	[flags],10
1223
	bts	[flags],7
1224
	btr	[flags],6
1225
	ret
1226
_0D:
1227
	bt	[flags],0
1228
	jnc	@f
1229
	inc	[schk]
1230
  @@:	bt	[flags],3
1231
	jc	.F
1232
	fldz
1233
	fstp	qword	[S.X]
1234
	mov	esi,string_zero
1235
	mov	edi,string
1236
	mov	ecx,13
1237
	cld
1238
	@@:	movsb
1239
	loop @b
1240
	mov	[move1],0
1241
	mov	[move2],0
1242
	mov	[move1dot],0
1243
	call	draw_string
1244
	call	stof
1245
	fstp	qword [S.X]
1246
	call	draw_stack
1247
	btr	[flags],6
1248
	btr	[flags],10
1249
	btr	[flags],11
1250
	btr	[flags],4
1251
	btr	[flags],8
1252
	btr	[flags],9
1253
	ret
1254
	.F:
1255
	btr	[flags],3
1256
	ret
1257
_0C:
1258
	bt	[flags],0
1259
	jnc	@f
1260
	inc	[schk]
1261
  @@:	btc	[flags],6
1262
	btr	[flags],10
1263
	call	draw_string
1264
	call	stof
1265
	fstp	qword [S.X]
1266
	call	draw_stack
1267
	cmp byte [string+12],0x20
1268
	jne @f
1269
	mov word [string+11],0x3030
1270
	@@:
1271
	cmp byte [string+1],"0"
1272
	je @f
1273
	ret
1274
  @@:	cmp word [string+2],"  "
1275
	je @f
1276
	cmp word [string+2],". "
1277
	je @f
1278
	ret
1279
  @@:	mov dword [string]," 1  "
1280
	call	draw_string
1281
	call	stof
1282
	fstp	qword [S.X]
1283
	call	draw_stack
1284
	ret
1285
_0B:
1286
	bt	[flags],0
1287
	jnc	@f
1288
	inc	[schk]
1289
  @@:	jmp	.0
1290
	;       test [flags],(1 shl 7)
1291
	jz @f
1292
	call null.null
1293
	jmp .0
1294
  @@:	test [flags],(1 shl 10)
1295
	jz .0
1296
	call null
1297
  .0:;  fld     qword [S.X]
1298
;       call    ftos
1299
	bt [flags],6
1300
	jc	@f
1301
	cmp byte [string],'-'
1302
	jne .sign_1
1303
	mov byte [string],' '
1304
	call	draw_string
1305
	call	stof
1306
	fstp	qword [S.X]
1307
	call	draw_stack
1308
	ret
1309
	.sign_1:
1310
	mov byte [string],'-'
1311
	call	draw_string
1312
	call	stof
1313
	fstp	qword [S.X]
1314
	call	draw_stack
1315
	ret
1316
		@@:
1317
	cmp byte [string+10],'-'
1318
	jne .sign_2
1319
	mov byte [string+10],' '
1320
	call	draw_string
1321
	call	stof
1322
	fstp	qword [S.X]
1323
	call	draw_stack
1324
	ret
1325
	.sign_2:
1326
	mov byte [string+10],'-'
1327
	call	draw_string
1328
	call	stof
1329
	fstp	qword [S.X]
1330
	call	draw_stack
1331
	ret
1332
 
1333
_0A:
1334
	bt	[flags],0
1335
	jnc	@f
1336
	inc	[schk]
1337
  @@:	test [flags],(1 shl 7)
1338
	jz @f
1339
	call null.null
1340
	jmp .0
1341
  @@:	test [flags],(1 shl 10)
1342
	jz .0
1343
	call null
1344
  .0:	cmp [move1],8
1345
	jge .nop
1346
	cmp [move1],0
1347
	jne	@f
1348
	mov [move1],1
1349
	mov [move1dot],1
1350
	mov word [string+1],'0.'
1351
	call	draw_string
1352
	call	stof
1353
	fstp	qword [S.X]
1354
	call	draw_stack
1355
  .nop: ret
1356
		@@:
1357
	cmp [move1dot],1
1358
	je .nop
1359
	movzx esi,[move1]
1360
	mov byte [esi+string+1],'.'
1361
	mov [move1dot],1
1362
	call	draw_string
1363
	call	stof
1364
	fstp	qword [S.X]
1365
	call	draw_stack
1366
	ret
1367
 
1368
_00:
1369
	sub	eax,OPCODEtable
1370
	shr	eax,2
1371
	add	eax,0x30
1372
	push	eax
1373
	bt	[flags],0
1374
	jnc	@f
1375
	inc	[schk]
1376
  @@:	test [flags],(1 shl 7)
1377
	jz @f
1378
	call null.null
1379
	jmp .0
1380
  @@:	test [flags],(1 shl 10)
1381
	jz .0
1382
	call null
1383
  .0:	pop ebx
1384
	test [flags],(1 shl 6)
1385
	jnz	@f
1386
	cmp [move1],8
1387
	jge .nop
1388
	movzx esi,[move1]
1389
	movzx edi,[move1dot]
1390
	add esi,edi
1391
	mov byte [esi+string+1],bl
1392
	inc [move1]
1393
	call	draw_string
1394
	call	stof
1395
	fstp	qword [S.X]
1396
	call	draw_stack
1397
	ret
1398
		@@:
1399
	cmp [move2],0
1400
	jne @f
1401
	mov byte [string+12],bl
1402
	inc [move2]
1403
	call	draw_string
1404
	call	stof
1405
	fstp	qword [S.X]
1406
	call	draw_stack
1407
	ret
1408
	@@:
1409
	mov al, [string+12]
1410
	mov [string+11],al
1411
	mov byte [string+12],bl
1412
	call	draw_string
1413
	call	stof
1414
	fstp	qword [S.X]
1415
	call	draw_stack
1416
 .nop:	ret
1417
 
1418
null:	fld	qword [S.Z]
1419
	fstp	qword [S.T]
1420
	fld	qword [S.Y]
1421
	fstp	qword [S.Z]
1422
	fld	qword [S.X]
1423
	fstp	qword [S.Y]
1424
.null:	call	null_string
1425
	btr	[flags],10
1426
	btr	[flags],7
1427
ret
1428
 
1429
 
1430
 
1431
 
1432
 
1433
null_string:
1434
	mov	esi,string_zero
1435
	mov	edi,string
1436
	mov	ecx,13
1437
	cld
1438
	@@:	movsb
1439
	loop @b
1440
	mov	[move1],0
1441
	mov	[move2],0
1442
	mov	[move1dot],0
1443
ret
1444