kolibrios-fun/programs/emulator/PrMK/trunk/opcodes.inc
Yogev Ezra 63cf01e274 Added sources: emulator/PrMK , games/klavisha
git-svn-id: svn://kolibrios.org@1863 a494cfbc-eb01-0410-851d-a64ba20cac60
2011-02-15 11:55:49 +00:00

1445 lines
20 KiB
PHP

align 4
OPCODEtable:
dd _00,_00,_00,_00,_00,_00,_00,_00 ;00-07
dd _00,_00,_0A,_0B,_0C,_0D,_0E,_0F ;08-0f
dd _10,_11,_12,_13,_14,_15,_16,_17 ;10-17
dd _18,_19,_1A,_1B,_1C,_1D,_1E,_1f ;18-1f
dd _20,_21,_22,_23,_24,_25,_1f,_1f ;20-27
dd _1f,_1f,_1f,_1f,_1f,_1f,_1f,_1f ;28-2f
dd _1f,_31,_32,_1f,_34,_35,_36,_1f ;30-37
dd _1f,_1f,_1f,_3B,_1f,_1f,_1f,_1f ;38-3f
times 16 dd _40 ;40-4f
dd _50,_51,_52,_53,_54,_1f,_1f,_57 ;50-57
dd _58,_59,_5A,_5B,_5C,_5D,_5E,_1f ;58-5f
times 16 dd _60 ;60-6f
times 16 dd _70 ;70-7f
times 16 dd _80 ;80-8f
times 16 dd _90 ;90-9f
times 16 dd _A0 ;a0-af
times 16 dd _B0 ;b0-bf
times 16 dd _C0 ;c0-cf
times 16 dd _D0 ;d0-df
times 16 dd _E0 ;e0-ef
times 16 dd _1f ;f0-ff
move1 db 0
move2 db 0
move1dot db 0
_1f: ret
;*************************************
_3B:
mcall 3
shl eax,16
shr eax,16
mov [perem],eax
fild [perem]
mcall 26,9
shl eax,16
shr eax,18
mov [perem],eax
fild [perem]
fcom st1
jnc @f
fdivrp
mov [perem],10
fild [perem]
fdivp
jmp .1
@@: fdivp
.1: fld qword [S.Z]
fstp qword [S.T]
fld qword [S.Y]
fstp qword [S.Z]
fld qword [S.X]
fst qword [S.Y]
fstp qword [S.X1]
fstp qword [S.X]
call draw_stack
fld qword [S.X]
call ftos
call draw_string
bts [flags],10
btr [flags],6
btr [flags],4
ret
_36:
bt [flags],0
jnc @f
inc [schk]
@@: fld qword [S.Y]
fld qword [S.X]
fst qword [S.X1]
fcom st1
fstsw ax
sahf
jc @f
fstp qword [S.X]
fstp st0
jmp .1
@@: fstp st0
fstp qword [S.X]
.1:
fld qword [S.Z]
fstp qword [S.Y]
fld qword [S.T]
fstp qword [S.Z]
; fldz
; fstp qword [S.T]
call draw_stack
fld qword [S.X]
call ftos
call draw_string
bts [flags],10
btr [flags],6
ret
_35:
bt [flags],0
jnc @f
inc [schk]
@@: fld qword [S.X]
fst qword [S.X1]
fldz
fcomp st1
fstsw ax
sahf
jz @f
jc @f
frndint
fcom qword [S.X]
fstsw ax
sahf
jnc .0
fld1
faddp
jmp .0
@@: frndint
fcom qword [S.X]
fstsw ax
sahf
jc .0
jz .0
fld1
fsubp
.0: fld qword [S.X]
fsubrp
fst qword [S.X]
call ftos
call draw_string
call draw_stack
bts [flags],10
btr [flags],6
ret
_34:
bt [flags],0
jnc @f
inc [schk]
@@: fld qword [S.X]
fst qword [S.X1]
fldz
fcomp st1
fstsw ax
sahf
jz @f
jc @f
frndint
fcom qword [S.X]
fstsw ax
sahf
jnc .0
fld1
faddp
jmp .0
@@: frndint
fcom qword [S.X]
fstsw ax
sahf
jc .0
jz .0
fld1
fsubp
.0: fst qword [S.X]
call ftos
call draw_string
call draw_stack
bts [flags],10
btr [flags],6
ret
_32:
bt [flags],0
jnc @f
inc [schk]
@@: fld qword [S.X]
fstp qword [S.X1]
fldz
fcomp qword [S.X]
fstsw ax
sahf
fld1
jz @f
jc @f
fchs
@@: fst qword [S.X]
call ftos
call draw_string
call draw_stack
bts [flags],10
btr [flags],6
ret
_31:
bt [flags],0
jnc @f
inc [schk]
@@: fld qword [S.X]
fst qword [S.X1]
fabs
fst qword [S.X]
call ftos
call draw_string
call draw_stack
bts [flags],10
btr [flags],6
ret
;************************************
_E0:
;x=0 ;0!=x
inc [schk]
@@: fldz
fcomp qword [S.X]
fstsw ax
sahf
jnz @f
ret
@@: sub eax,OPCODEtable
shr eax,2
sub eax,0xE0;90
shl eax,3
add eax,R.0
fld qword [eax]
cmp ebx,6
jge @f
fld1
cmp ebx,4
jge .2
fsubrp
jmp @f
.2: faddp
@@: fst qword [eax]
fabs
fistp [perem]
mov eax,[perem]
mov [schk],al
ret
_D0:
inc [schk]
sub eax,OPCODEtable
shr eax,2
sub eax,0xD0
mov ebx,eax
shl eax,3
add eax,R.0
fld qword [eax]
cmp ebx,6
ja @f
fld1
cmp ebx,4
jge .2
fsubrp
jmp @f
.2: faddp
@@: frndint
fst qword [eax]
fabs
fistp [perem]
mov eax,[perem]
shl eax,31-4
shr eax,31-4
shl eax,3
add eax,R.0
fld qword [eax]
fld qword [S.Z]
fstp qword [S.T]
fld qword [S.Y]
fstp qword [S.Z]
fld qword [S.X]
fst qword [S.Y]
fstp qword [S.X1]
fstp qword [S.X]
call draw_registers
call draw_stack
bts [flags],10
btr [flags],6
ret
_C0:
;x<0 ;0<x
inc [schk]
@@: fldz
fcomp qword [S.X]
fstsw ax
sahf
jz @f
jc @f
ret
@@: sub eax,OPCODEtable
shr eax,2
sub eax,0xC0
shl eax,3
add eax,R.0
fld qword [eax]
cmp ebx,6
jge @f
fld1
cmp ebx,4
jge .2
fsubrp
jmp @f
.2: faddp
@@: fst qword [eax]
fabs
fistp [perem]
mov eax,[perem]
mov [schk],al
ret
_B0:
inc [schk]
sub eax,OPCODEtable
shr eax,2
sub eax,0xB0
shl eax,3
add eax,R.0
fld qword [eax]
cmp ebx,6
jge @f
fld1
cmp ebx,4
jge .2
fsubrp
jmp @f
.2: faddp
@@: fst qword [eax]
fabs
fistp [perem]
mov eax,[perem]
mov ecx,16
xor edx,edx
div ecx
mov eax,edx
shl eax,3
add eax,R.0
fld qword [S.X]
fstp qword [eax]
bts [flags],10
btr [flags],6
ret
_A0:
inc [schk]
mov cl,[schk]
sub eax,OPCODEtable
shr eax,2
sub eax,0xA0
shl eax,3
add eax,R.0
fld qword [eax]
cmp ebx,6
jge @f
fld1
cmp ebx,4
jge .2
fsubrp
jmp @f
.2: faddp
@@: fst qword [eax]
fabs
fistp [perem]
mov eax,[perem]
mov [schk],al
mov al,[RS+3]
mov [RS+4],al
mov al,[RS+2]
mov [RS+3],al
mov al,[RS+1]
mov [RS+2],al
mov al,[RS+0]
mov [RS+1],al
mov [RS+0],cl
bts [flags],10
btr [flags],6
ret
_90:
;x>=0 ;0>x
inc [schk]
@@: fldz
fcomp qword [S.X]
fstsw ax
sahf
jp @f
jz @f
jc @f
jmp .1
@@: ret
.1: sub eax,OPCODEtable
shr eax,2
sub eax,0x90
shl eax,3
add eax,R.0
fld qword [eax]
cmp ebx,6
jge @f
fld1
cmp ebx,4
jge .2
fsubrp
jmp @f
.2: faddp
@@: fst qword [eax]
fabs
fistp [perem]
mov eax,[perem]
mov [schk],al
ret
_80:
inc [schk]
sub eax,OPCODEtable
shr eax,2
sub eax,0x80
shl eax,3
add eax,R.0
fld qword [eax]
cmp ebx,6
jge @f
fld1
cmp ebx,4
jge .2
fsubrp
jmp @f
.2: faddp
@@: fst qword [eax]
fabs
fistp [perem]
mov eax,[perem]
mov [schk],al
ret
_70: ;x!=0 ;x=0
inc [schk]
@@: fldz
fcomp qword [S.X]
fstsw ax
sahf
jz @f
ret
@@: sub eax,OPCODEtable
shr eax,2
sub eax,0x70
mov ebx,eax
shl eax,3
add eax,R.0
fld qword [eax]
cmp ebx,6
jge @f
fld1
cmp ebx,4
jge .2
fsubrp
jmp @f
.2: faddp
@@: fst qword [eax]
fabs
fistp [perem]
mov eax,[perem]
mov [schk],al
ret
_5D:
inc [schk]
fld qword [R.0]
fld1
fsubp
fst qword [R.0]
fabs
fistp [perem]
mov eax,[perem]
test eax,eax
jz @f
movzx eax,[schk]
add eax,PMEM
mov al,[eax]
mov [schk],al
jmp .1
@@: inc [schk]
.1: call draw_registers
bts [flags],10
btr [flags],6
ret
_5B:
inc [schk]
fld qword [R.1]
fld1
fsubp
fst qword [R.1]
fabs
fistp [perem]
mov eax,[perem]
test eax,eax
jz @f
movzx eax,[schk]
add eax,PMEM
mov al,[eax]
mov [schk],al
jmp .1
@@: inc [schk]
.1: call draw_registers
bts [flags],10
btr [flags],6
ret
_5A:
inc [schk]
fld qword [R.3]
fld1
fsubp
fst qword [R.3]
fabs
fistp [perem]
mov eax,[perem]
test eax,eax
jz @f
movzx eax,[schk]
add eax,PMEM
mov al,[eax]
mov [schk],al
jmp .1
@@: inc [schk]
.1: call draw_registers
bts [flags],10
btr [flags],6
ret
_58: ;F,L2
inc [schk]
fld qword [R.2]
fld1
fsubp
fst qword [R.2]
fabs
fistp [perem]
mov eax,[perem]
test eax,eax
jz @f
movzx eax,[schk]
add eax,PMEM
mov al,[eax]
mov [schk],al
jmp .1
@@: inc [schk]
.1: call draw_registers
bts [flags],10
btr [flags],6
ret
_5E: ;x=0
; bt [flags],0
; jnc @f
inc [schk]
@@: fldz
fcomp qword [S.X]
fstsw ax
sahf
jnz @f
inc [schk]
ret
@@: movzx eax, byte [schk]
add eax,PMEM
mov al,[eax]
mov [schk],al
ret
_5C: ;x<0
; bt [flags],0
; jnc @f
inc [schk]
@@: fldz
fcomp qword [S.X]
fstsw ax
sahf
jc @f
jz @f
inc [schk]
ret
@@: movzx eax, byte [schk]
add eax,PMEM
mov al,[eax]
mov [schk],al
ret
_59: ;x>=0
; bt [flags],0
; jnc @f
inc [schk]
@@: fldz
fcomp qword [S.X]
fstsw ax
sahf
jp @f
jz @f
jc @f
jmp .1
@@: inc [schk]
ret
.1: movzx eax, byte [schk]
add eax,PMEM
mov al,[eax]
mov [schk],al
ret
_57: ;x!=0
; bt [flags],0
; jnc @f
inc [schk]
@@: fldz
fcomp qword [S.X]
fstsw ax
sahf
jz @f
inc [schk]
ret
@@: movzx eax, byte [schk]
add eax,PMEM
mov al,[eax]
mov [schk],al
ret
_54:
inc [schk]
ret
_53: bt [flags],0
jnc @f
inc [schk]
mov al,[RS+3]
mov [RS+4],al
mov al,[RS+2]
mov [RS+3],al
mov al,[RS+1]
mov [RS+2],al
mov al,[RS+0]
mov [RS+1],al
mov al,[schk]
inc al
mov [RS+0],al
movzx eax,[schk]
add eax,PMEM
mov al,[eax]
mov [schk],al
bts [flags],10
btr [flags],6
ret
@@: bts [flags],0
movzx eax,[schk]
add eax,PMEM
movzx eax,byte [eax]
shl eax,2
add eax,OPCODEtable
mov ebx,[eax]
call ebx
btr [flags],0
call draw_schk
call draw_prog
ret
_52: inc [schk]
bt [flags],0
jnc @f
mov al,[RS+0]
mov [schk],al
mov al,[RS+1]
mov [RS+0],al
mov al,[RS+2]
mov [RS+1],al
mov al,[RS+3]
mov [RS+2],al
mov al,[RS+4]
mov [RS+3],al
mov byte [RS+4],0
ret
@@: mov [schk],0
call draw_prog
call draw_schk
ret
_51:
; bt [flags],0
; jnc @f
inc [schk]
@@: movzx eax, byte [schk]
add eax,PMEM
mov al,[eax]
mov [schk],al
ret
_50:
btc [flags],0
jc @f
ret
@@: inc [schk]
fld qword [S.X]
call ftos
call draw_string
call draw_registers
bts [flags],10
btr [flags],6
ret
_60:
bt [flags],0
jnc @f
inc [schk]
@@: sub eax,OPCODEtable
shr eax,2
sub eax,0x60
shl eax,3
add eax,R.0
fld qword [eax]
fld qword [S.Z]
fstp qword [S.T]
fld qword [S.Y]
fstp qword [S.Z]
fld qword [S.X]
fstp qword [S.Y]
fstp qword [S.X]
call draw_stack
fld qword [S.X]
call ftos
call draw_string
call draw_registers
bts [flags],10
btr [flags],6
btr [flags],12
btr [flags],3
ret
_40:
bt [flags],0
jnc @f
inc [schk]
@@: sub eax,OPCODEtable
shr eax,2
sub eax,0x40
shl eax,3
add eax,R.0
fld qword [S.X]
fstp qword [eax]
call draw_stack
fld qword [S.X]
call ftos
call draw_string
call draw_registers
bts [flags],10
btr [flags],6
btr [flags],11
btr [flags],3
ret
_25:
bt [flags],0
jnc @f
inc [schk]
@@: fld qword [S.X1]
fld qword [S.X]
fstp qword [S.X1]
fld qword [S.Y]
fstp qword [S.X]
fld qword [S.Z]
fstp qword [S.Y]
fld qword [S.T]
fstp qword [S.Z]
fstp qword [S.T]
call draw_stack
fld qword [S.X]
call ftos
call draw_string
bts [flags],10
btr [flags],6
btr [flags],3
ret
_24:
bt [flags],0
jnc @f
inc [schk]
@@: fld qword [S.X]
fst qword [S.X1]
fld qword [S.Y]
call FpuXexpY
fstp qword [S.X]
call draw_stack
fld qword [S.X]
call ftos
call draw_string
bts [flags],10
btr [flags],6
btr [flags],3
ret
_23:
bt [flags],0
jnc @f
inc [schk]
@@: fld qword [S.X]
fst qword [S.X1]
fld1
fdivrp
fstp qword [S.X]
call draw_stack
fld qword [S.X]
call ftos
call draw_string
bts [flags],10
btr [flags],6
btr [flags],3
ret
_22:
bt [flags],0
jnc @f
inc [schk]
@@: fld qword [S.X]
fst qword [S.X1]
fmul st,st
fstp qword [S.X]
call draw_stack
fld qword [S.X]
call ftos
call draw_string
bts [flags],10
btr [flags],6
btr [flags],3
ret
_21:
bt [flags],0
jnc @f
inc [schk]
@@: fld qword [S.X]
fst qword [S.X1]
fsqrt
fstp qword [S.X]
call draw_stack
fld qword [S.X]
call ftos
call draw_string
bts [flags],10
btr [flags],6
btr [flags],3
ret
_20:
bt [flags],0
jnc @f
inc [schk]
@@: fld qword [S.X]
fstp qword [S.X1]
fld qword [S.Z]
fstp qword [S.T]
fld qword [S.Y]
fstp qword [S.Z]
fld qword [S.X]
fstp qword [S.Y]
fldpi
fstp qword [S.X]
call draw_stack
fld qword [S.X]
call ftos
call draw_string
bts [flags],10
btr [flags],6
btr [flags],3
ret
_1E:
bt [flags],0
jnc @f
inc [schk]
@@: fld qword [S.X]
fst qword [S.X1]
call FpuTan
fstp qword [S.X]
call draw_stack
fld qword [S.X]
call ftos
call draw_string
bts [flags],10
btr [flags],6
btr [flags],3
ret
_1D:
bt [flags],0
jnc @f
inc [schk]
@@: fld qword [S.X]
fst qword [S.X1]
call FpuCos
fstp qword [S.X]
call draw_stack
fld qword [S.X]
call ftos
call draw_string
bts [flags],10
btr [flags],6
btr [flags],3
ret
_1C:
bt [flags],0
jnc @f
inc [schk]
@@: fld qword [S.X]
fst qword [S.X1]
call FpuSin
fstp qword [S.X]
call draw_stack
fld qword [S.X]
call ftos
call draw_string
bts [flags],10
btr [flags],6
btr [flags],3
ret
_1B:
bt [flags],0
jnc @f
inc [schk]
@@: fld qword [S.X]
fst qword [S.X1]
call FpuArctan
fstp qword [S.X]
call draw_stack
fld qword [S.X]
call ftos
call draw_string
bts [flags],10
btr [flags],6
btr [flags],3
ret
_1A:
bt [flags],0
jnc @f
inc [schk]
@@: fld qword [S.X]
fst qword [S.X1]
call FpuArccos
fstp qword [S.X]
call draw_stack
fld qword [S.X]
call ftos
call draw_string
bts [flags],10
btr [flags],6
btr [flags],3
ret
_19:
bt [flags],0
jnc @f
inc [schk]
@@: fld qword [S.X]
fst qword [S.X1]
call FpuArcsin
fstp qword [S.X]
call draw_stack
fld qword [S.X]
call ftos
call draw_string
bts [flags],10
btr [flags],6
btr [flags],3
ret
_18:
bt [flags],0
jnc @f
inc [schk]
@@: fld qword [S.X]
fst qword [S.X1]
fldln2
fxch
fyl2x
fstp qword [S.X]
call draw_stack
fld qword [S.X]
call ftos
call draw_string
bts [flags],10
btr [flags],6
btr [flags],3
ret
_17:
bt [flags],0
jnc @f
inc [schk]
@@: fld qword [S.X]
fst qword [S.X1]
fldlg2
fxch
fyl2x
fstp qword [S.X]
call draw_stack
fld qword [S.X]
call ftos
call draw_string
bts [flags],10
btr [flags],6
btr [flags],3
ret
_16:
bt [flags],0
jnc @f
inc [schk]
@@: fld qword [S.X]
fst qword [S.X1]
call FpuEexpX
fstp qword [S.X]
call draw_stack
fld qword [S.X]
call ftos
call draw_string
bts [flags],10
btr [flags],6
btr [flags],3
ret
_15:
bt [flags],0
jnc @f
inc [schk]
@@: mov [perem],10
fild [perem]
fld qword [S.X]
fst qword [S.X1]
call FpuXexpY
fstp qword [S.X]
call draw_stack
fld qword [S.X]
call ftos
call draw_string
bts [flags],10
btr [flags],6
btr [flags],3
ret
_14:
bt [flags],0
jnc @f
inc [schk]
@@: fld qword [S.Y]
fld qword [S.X]
fst qword [S.Y]
fstp qword [S.X1]
fstp qword [S.X]
call draw_stack
fld qword [S.X]
call ftos
call draw_string
bts [flags],10
btr [flags],6
ret
_13:
bt [flags],0
jnc @f
inc [schk]
@@: fld qword [S.Y]
fld qword [S.X]
fdivp
fld qword [S.X]
fstp qword [S.X1]
fstp qword [S.X]
fld qword [S.Z]
fstp qword [S.Y]
fld qword [S.T]
fstp qword [S.Z]
; fldz
; fstp qword [S.T]
call draw_stack
fld qword [S.X]
call ftos
call draw_string
bts [flags],10
btr [flags],6
ret
_12:
bt [flags],0
jnc @f
inc [schk]
@@: fld qword [S.Y]
fld qword [S.X]
fmulp
fld qword [S.X]
fstp qword [S.X1]
fstp qword [S.X]
fld qword [S.Z]
fstp qword [S.Y]
fld qword [S.T]
fstp qword [S.Z]
; fldz
; fstp qword [S.T]
call draw_stack
fld qword [S.X]
call ftos
call draw_string
bts [flags],10
btr [flags],6
ret
_11:
bt [flags],0
jnc @f
inc [schk]
@@: fld qword [S.Y]
fld qword [S.X]
fsubp
fld qword [S.X]
fstp qword [S.X1]
fstp qword [S.X]
fld qword [S.Z]
fstp qword [S.Y]
fld qword [S.T]
fstp qword [S.Z]
; fldz
; fstp qword [S.T]
call draw_stack
fld qword [S.X]
call ftos
call draw_string
bts [flags],10
btr [flags],6
ret
_10:
bt [flags],0
jnc @f
inc [schk]
@@: fld qword [S.X]
fld qword [S.Y]
faddp
fld qword [S.X]
fstp qword [S.X1]
fstp qword [S.X]
fld qword [S.Z]
fstp qword [S.Y]
fld qword [S.T]
fst qword [S.Z]
; fldz
; fstp qword [S.T]
call draw_stack
fld qword [S.X]
call ftos
call draw_string
bts [flags],10
btr [flags],6
ret
_0F:
bt [flags],0
jnc @f
inc [schk]
@@: fld qword [S.Z]
fstp qword [S.T]
fld qword [S.Y]
fstp qword [S.Z]
fld qword [S.X]
fstp qword [S.Y]
fld qword [S.X1]
fstp qword [S.X]
call draw_stack
fld qword [S.X]
call ftos
call draw_string
bts [flags],10
btr [flags],6
btr [flags],3
ret
_0E:
bt [flags],0
jnc @f
inc [schk]
@@:
; call stof
; fstp qword [S.X]
fld qword [S.Z]
fstp qword [S.T]
fld qword [S.Y]
fstp qword [S.Z]
fld qword [S.X]
fstp qword [S.Y]
call draw_string
; call stof
; fstp qword [S.X]
call draw_stack
bts [flags],10
bts [flags],7
btr [flags],6
ret
_0D:
bt [flags],0
jnc @f
inc [schk]
@@: bt [flags],3
jc .F
fldz
fstp qword [S.X]
mov esi,string_zero
mov edi,string
mov ecx,13
cld
@@: movsb
loop @b
mov [move1],0
mov [move2],0
mov [move1dot],0
call draw_string
call stof
fstp qword [S.X]
call draw_stack
btr [flags],6
btr [flags],10
btr [flags],11
btr [flags],4
btr [flags],8
btr [flags],9
ret
.F:
btr [flags],3
ret
_0C:
bt [flags],0
jnc @f
inc [schk]
@@: btc [flags],6
btr [flags],10
call draw_string
call stof
fstp qword [S.X]
call draw_stack
cmp byte [string+12],0x20
jne @f
mov word [string+11],0x3030
@@:
cmp byte [string+1],"0"
je @f
ret
@@: cmp word [string+2]," "
je @f
cmp word [string+2],". "
je @f
ret
@@: mov dword [string]," 1 "
call draw_string
call stof
fstp qword [S.X]
call draw_stack
ret
_0B:
bt [flags],0
jnc @f
inc [schk]
@@: jmp .0
; test [flags],(1 shl 7)
jz @f
call null.null
jmp .0
@@: test [flags],(1 shl 10)
jz .0
call null
.0:; fld qword [S.X]
; call ftos
bt [flags],6
jc @f
cmp byte [string],'-'
jne .sign_1
mov byte [string],' '
call draw_string
call stof
fstp qword [S.X]
call draw_stack
ret
.sign_1:
mov byte [string],'-'
call draw_string
call stof
fstp qword [S.X]
call draw_stack
ret
@@:
cmp byte [string+10],'-'
jne .sign_2
mov byte [string+10],' '
call draw_string
call stof
fstp qword [S.X]
call draw_stack
ret
.sign_2:
mov byte [string+10],'-'
call draw_string
call stof
fstp qword [S.X]
call draw_stack
ret
_0A:
bt [flags],0
jnc @f
inc [schk]
@@: test [flags],(1 shl 7)
jz @f
call null.null
jmp .0
@@: test [flags],(1 shl 10)
jz .0
call null
.0: cmp [move1],8
jge .nop
cmp [move1],0
jne @f
mov [move1],1
mov [move1dot],1
mov word [string+1],'0.'
call draw_string
call stof
fstp qword [S.X]
call draw_stack
.nop: ret
@@:
cmp [move1dot],1
je .nop
movzx esi,[move1]
mov byte [esi+string+1],'.'
mov [move1dot],1
call draw_string
call stof
fstp qword [S.X]
call draw_stack
ret
_00:
sub eax,OPCODEtable
shr eax,2
add eax,0x30
push eax
bt [flags],0
jnc @f
inc [schk]
@@: test [flags],(1 shl 7)
jz @f
call null.null
jmp .0
@@: test [flags],(1 shl 10)
jz .0
call null
.0: pop ebx
test [flags],(1 shl 6)
jnz @f
cmp [move1],8
jge .nop
movzx esi,[move1]
movzx edi,[move1dot]
add esi,edi
mov byte [esi+string+1],bl
inc [move1]
call draw_string
call stof
fstp qword [S.X]
call draw_stack
ret
@@:
cmp [move2],0
jne @f
mov byte [string+12],bl
inc [move2]
call draw_string
call stof
fstp qword [S.X]
call draw_stack
ret
@@:
mov al, [string+12]
mov [string+11],al
mov byte [string+12],bl
call draw_string
call stof
fstp qword [S.X]
call draw_stack
.nop: ret
null: fld qword [S.Z]
fstp qword [S.T]
fld qword [S.Y]
fstp qword [S.Z]
fld qword [S.X]
fstp qword [S.Y]
.null: call null_string
btr [flags],10
btr [flags],7
ret
null_string:
mov esi,string_zero
mov edi,string
mov ecx,13
cld
@@: movsb
loop @b
mov [move1],0
mov [move2],0
mov [move1dot],0
ret