0,0 → 1,1838 |
; 15/III 2010 staper@inbox.ru |
|
appname equ 'à®£à ¬¬¨àã¥¬ë© ¬¨ªà®ª «ìªã«ïâ®à ' |
version equ '' |
|
include 'macros.inc' |
|
header '01',1,START,I_END,(D_END+0x100),(D_END+0x100),0,cur_dir_path |
|
include 'opcodes.inc' |
include 'proc32.inc' |
include 'MASMFpuLib.asm' |
include 'editbox_ex.mac' |
include 'load_lib.mac' |
include 'macroPRMK.inc' |
|
_flags = 0x0 |
;0 1 - ¨á¯®«¥¨¥ ¯à®£à ¬¬ë |
;1 1 - ¢ à¨©ë© ®áâ ®¢, ¥ ¨á¯®«ì§ã¥âáï |
;2- |
;3 1 - ¦ â F |
;4 1 - ¦ â K |
;5 1 - ०¨¬ ¯à®£à ¬¬¨à®¢ ¨ï |
;6 1 - § ¯®«¥¨¥ íªá¯®¥âë |
;7 1 - ॣ¨áâàë ¯®¤ïâë |
;8 1 - ¤®¯®«¥¨¥ ª®¬ ¤ë (0å4?,0å6? ¨ ¯à.) |
;9 1 - ¤®§ ¯¨áì ª®¬ ¤ë ( ¤à¥á ¯¥à¥å®¤ ¯®á«¥ ) |
;10 1 - ¥®¡å®¤¨¬® ®¡ã«¨âì íªà ãî áâபã, ® ¥ ¯®ª §ë¢ âì ¥ñ, ¯®¤ïâì ॣ¨áâàë |
;11 1 - ¦ â |
;12 1 - ¦ â |
;13 1 - áªàë¢ âì ॣ¨áâàë ¨ ¯à®£à ¬¬ã |
;25-27 - ¨á¯®«ì§ãîâáï ¢ ¤¨ «®£¥ á®åà ¥¨¥ï/§ £à㧪¨ |
;28- |
;29 - "sk" ¢ key |
;30 0 - âà á楤¥âë¥ äãªæ¨¨ ¯à¥¤áâ ¢«¥ë ¢ à ¤¨ å, ¨ ç¥ 31 |
;31 0/1 - âà á楤¥âë¥ äãªæ¨¨ ¯à¥¤áâ ¢«¥ë ¢ £à ¤ å/£à ¤ãá å |
|
START: |
load_library boxlib_name,cur_dir_path,buf_cmd_lin,system_path,\ |
err_message_found_lib,head_f_l,myimport,err_message_import,head_f_i |
|
mcall 40,0x7 |
mcall 48,4 |
mov [scin_height],eax |
|
;®¯à¥¤¥«ï¥¬ ¤«¨ã áâப¨ á ¯ à ¬¥âà ¬¨ |
mov esi,buf_cmd_lin |
xor ecx,ecx |
@@: cmp byte [esi+ecx],0 |
je @f |
inc ecx |
jmp @b |
@@: mov dword [edit2.size],ecx |
mov dword [edit2.pos],ecx |
|
mcall 68,11 |
cmp dword [edit2.pos],0 |
je @f |
call load_prog |
@@: |
|
red: |
call draw_window |
still: |
test [flags],(1 shl 0) |
jnz main_loop |
mcall 10 |
.0: dec eax |
jz red |
dec eax |
jz key |
dec eax |
jz button |
sub eax,3 |
jz mouse |
jmp still |
main_loop: |
mcall 11 |
test eax,eax |
jnz still.0 |
cmp [schk],-1 |
jne @f |
btr [flags],0 |
mcall 55,55,,,sound_data |
jmp still |
@@: movzx esi,[schk] |
movzx eax, byte [esi+PMEM] |
shl eax,2 |
add eax,OPCODEtable |
call dword [eax] |
call draw_schk |
call draw_prog |
test [flags],(1 shl 0) |
jz @f |
mcall 5,[_pause] |
jmp still |
@@: mcall 55,55,,,sound_data |
jmp still |
|
mouse: if 0 |
push dword scroll_bar_data_vertical |
call [scrollbar_ver_mouse] |
endf |
jmp still |
|
button: |
mcall 17 |
dec ah |
jnz @f |
mcall -1 |
@@: cmp ah,31 |
jae .grd |
movzx eax,ah |
cmp eax,30 |
jg still |
shl eax,2 |
call dword [eax+but_table-4] |
test [flags],(1 shl 5) |
jz @f |
call ftos |
call draw_string |
call draw_prog |
@@: call draw_schk |
jmp still |
.grd: cmp ah,31 |
jne @f |
btr [flags],30 |
call set_but |
jmp still |
@@: cmp ah,32 |
jne @f |
bts [flags],30 |
btr [flags],31 |
call set_but |
jmp still |
@@: cmp ah,33 |
jne @f |
bts [flags],30 |
bts [flags],31 |
call set_but |
@@: cmp ah,34 |
jne @f |
btc [flags],13 |
jc .331 |
mcall 67,-1,-1,198,-1 |
jmp still |
.331: |
mcall 67,-1,-1,485,-1 |
@@: jmp still |
|
key: |
mcall 2 |
@@: cmp ah,12 ;load |
jne @f |
bt [flags],27 |
jc still |
bt [flags],26 |
jc still |
bts [flags],25 |
call window_load_save |
jmp still |
@@: cmp ah,19 ;save |
jne @f |
bt [flags],27 |
jc still |
bt [flags],26 |
jc still |
btr [flags],25 |
call window_load_save |
jmp still |
|
@@: push dword edit1 |
call [edit_box_key] |
|
.0: call draw_schk |
|
cmp [edit1.pos],2 |
jb still |
test [flags],(1 shl 29) |
jnz @f |
cmp word [txt.edbox],"sk"; or "BP" or "Bp" or "bP" |
jne @f |
bts [flags],29 |
mov word [txt.edbox],0x2020 |
mov [edit1.size],0 |
mov [edit1.pos],0 |
push dword edit1 |
call [edit_box_draw] |
jmp key.0 |
@@: mov ah,[txt.edbox] |
sub ah,48 |
cmp ah,9 |
jbe .1 |
sub ah,7 |
cmp ah,15 |
jbe .1 |
sub ah,32 |
.1: mov al,[txt.edbox+1] |
sub al,48 |
cmp al,9 |
jbe .2 |
sub al,7 |
cmp al,15 |
jbe .1 |
sub al,32 |
.2: shl al,4 |
shr ax,4 |
mov [edit1.size],0 |
mov [edit1.pos],0 |
test [flags],(1 shl 29) |
jnz .4 |
movzx ebx,[schk] |
add ebx,PMEM |
mov [ebx],al |
inc [schk] |
jmp .3 |
.4: mov [schk],al |
btr [flags],29 |
.3: call draw_schk |
mov word [txt.edbox],0x2020 |
push dword edit1 |
call [edit_box_draw] |
call draw_prog |
test [flags],(1 shl 5) |
jz @f |
call ftos |
call draw_string |
@@: jmp key.0 |
|
|
align 4 |
|
but_table: |
|
dd .Cx, .vp, .sign, .dot, .0 |
dd .up, .xy, _3_, _2_, _1_ |
dd .min, .div, _6_, _5_, _4_ |
dd .plus, .x, _9_, _8_, _7_ |
dd .PP, .BP, .p, .ip, .K |
dd .Sp, .Vo, .shgl, .shgr, .F |
|
.BP: test [flags],(1 shl 5) |
jnz @f |
bts [flags],9 |
ret |
@@: movzx eax,[schk] |
add eax,PMEM |
inc [schk] |
test [flags],(1 shl 3) |
jnz @f |
test [flags],(1 shl 4) |
jz .BP0 |
mov [dop8],0x80 |
bts [flags],8 |
btr [flags],4 |
ret |
.BP0: mov byte [eax],0x51 |
bts [flags],9 |
ret |
@@: mov byte [eax],0x58 |
bts [flags],9 |
btr [flags],3 |
ret |
.shgl: test [flags],(1 shl 5) |
jnz @f |
ret |
@@: test [flags],(1 shl 3) |
jnz @f |
test [flags],(1 shl 4) |
jz .shgl0 |
mov [dop8],0xE0 |
bts [flags],8 |
btr [flags],4 |
ret |
.shgl0: |
dec [schk] |
ret |
@@: movzx eax,[schk] |
add eax,PMEM |
inc [schk] |
mov byte [eax],0x5E |
bts [flags],9 |
btr [flags],3 |
ret |
|
.shgr: test [flags],(1 shl 5) |
jnz @f |
ret |
@@: test [flags],(1 shl 3) |
jnz @f |
test [flags],(1 shl 4) |
jz .shgr0 |
mov [dop8],0xC0 |
bts [flags],8 |
btr [flags],4 |
ret |
.shgr0: |
inc [schk] |
ret |
@@: movzx eax,[schk] |
add eax,PMEM |
inc [schk] |
mov byte [eax],0x5C |
bts [flags],9 |
btr [flags],3 |
ret |
|
.PP: test [flags],(1 shl 5) |
jnz .PPprg |
mov eax,0x53 |
jmp .to_opcode |
.PPprg: |
movzx eax,[schk] |
add eax,PMEM |
inc [schk] |
test [flags],(1 shl 3) |
jnz @f |
test [flags],(1 shl 4) |
jz .PP0 |
mov [dop8],0xA0 |
bts [flags],8 |
btr [flags],4 |
dec [schk] |
ret |
.PP0: |
mov byte [eax],0x53 |
bts [flags],9 |
ret |
@@: mov byte [eax],0x5A |
bts [flags],9 |
btr [flags],3 |
ret |
.Vo: test [flags],(1 shl 5) |
jnz .Voprg |
mov eax,0x52 |
jmp .to_opcode |
.Voprg: |
movzx eax,[schk] |
add eax,PMEM |
inc [schk] |
test [flags],(1 shl 3) |
jnz @f |
test [flags],(1 shl 4) |
jz .Vo0 |
mov [dop8],0x90 |
bts [flags],8 |
btr [flags],4 |
dec [schk] |
ret |
.Vo0: |
mov byte [eax],0x52 |
ret |
@@: mov byte [eax],0x59 |
bts [flags],9 |
btr [flags],3 |
ret |
|
.Sp: test [flags],(1 shl 5) |
jnz .Spprg |
mov eax,0x50 |
jmp .to_opcode |
.Spprg: |
movzx eax,[schk] |
add eax,PMEM |
inc [schk] |
test [flags],(1 shl 3) |
jnz @f |
test [flags],(1 shl 4) |
jz .Sp0 |
mov [dop8],0x70 |
bts [flags],8 |
btr [flags],4 |
dec [schk] |
ret |
.Sp0: |
mov byte [eax],0x50 |
ret |
@@: mov byte [eax],0x57 |
bts [flags],9 |
btr [flags],3 |
ret |
.ip: test [flags],(1 shl 5) |
jnz .ipprg |
bts [flags],12 |
ret |
.ipprg: |
test [flags],(1 shl 3) |
jnz @f |
test [flags],(1 shl 4) |
jz .ip0 |
mov [dop8],0xD0 |
bts [flags],8 |
btr [flags],4 |
ret |
.ip0: |
mov [dop8],0x60 |
bts [flags],8 |
ret |
@@: movzx eax,[schk] |
add eax,PMEM |
inc [schk] |
mov byte [eax],0x5D |
bts [flags],9 |
btr [flags],3 |
ret |
|
|
|
.p: test [flags],(1 shl 5) |
jnz .pprg |
bts [flags],11 |
.nop: ret |
.pprg: |
test [flags],(1 shl 3) |
jnz @f |
test [flags],(1 shl 4) |
jz .p0 |
mov [dop8],0xB0 |
bts [flags],8 |
btr [flags],4 |
ret |
.p0: |
mov [dop8],0x40 |
bts [flags],8 |
ret |
@@: movzx eax,[schk] |
add eax,PMEM |
inc [schk] |
mov byte [eax],0x5B |
bts [flags],9 |
btr [flags],3 |
ret |
|
|
|
.F: bts [flags],3 |
ret |
.K: bts [flags],4 |
ret |
.Cx: test [flags],(1 shl 5) |
jnz .Cxprg |
test [flags],(1 shl 11) |
jnz .cx4d |
test [flags],(1 shl 12) |
jnz .cx6d |
test [flags],(1 shl 9) |
jnz .Cx0 |
mov eax,0x0D |
jmp .to_opcode |
.cx4d: mov eax,0x4d |
jmp .to_opcode |
.cx6d: mov eax,0x6d |
jmp .to_opcode |
.Cxprg: |
test [flags],(1 shl 8) |
jz .Cx0 |
add [dop8],0x0D |
jmp .dop8 |
.Cx0: |
test [flags],(1 shl 9) |
jz .Cx1 |
mov al,0x0D |
jmp .dop9 |
.Cx1: |
movzx eax,[schk] |
add eax,PMEM |
mov byte [eax],0x0D |
inc [schk] |
ret |
.vp: test [flags],(1 shl 3) |
jnz .vpsetprg |
test [flags],(1 shl 5) |
jnz .vpprg |
test [flags],(1 shl 11) |
jnz .vp4c |
test [flags],(1 shl 12) |
jnz .vp6c |
test [flags],(1 shl 9) |
jnz .vp0 |
mov eax,0x0C |
jmp .to_opcode |
.vp4c: mov eax,0x4c |
jmp .to_opcode |
.vp6c: mov eax,0x6c |
jmp .to_opcode |
.vpsetprg: |
test [flags],(1 shl 5) |
jz @f |
ret |
.vpprg: |
test [flags],(1 shl 8) |
jz .vp0 |
add [dop8],0x0c |
jmp .dop8 |
.vp0: |
test [flags],(1 shl 9) |
jz .vp1 |
mov al,0x0C |
jmp .dop9 |
.vp1: |
movzx eax,[schk] |
add eax,PMEM |
mov byte [eax],0x0C |
inc [schk] |
ret |
@@: bts [flags],5 |
btr [flags],3 |
ret |
.sign: test [flags],(1 shl 5) |
jnz .signprg |
test [flags],(1 shl 11) |
jnz .sign4b |
test [flags],(1 shl 12) |
jnz .sign6b |
test [flags],(1 shl 9) |
jnz .sign0 |
mov eax,0x0B |
jmp .to_opcode |
.sign4b: mov eax,0x4b |
jmp .to_opcode |
.sign6b: mov eax,0x6b |
jmp .to_opcode |
.signprg: |
test [flags],(1 shl 8) |
jz .sign0 |
add [dop8],0x0B |
jmp .dop8 |
.sign0: test [flags],(1 shl 9) |
jz .sign1 |
mov al,0x0B |
jmp .dop9 |
.sign1: test [flags],(1 shl 3) |
jnz @f |
movzx eax,[schk] |
add eax,PMEM |
mov byte [eax],0x0B |
inc [schk] |
ret |
@@: btr [flags],5 |
btr [flags],3 |
fld qword [S.X] |
call ftos |
call draw_string |
ret |
.up: test [flags],(1 shl 5) |
jnz .upprg |
test [flags],(1 shl 3) |
jnz .up0f |
test [flags],(1 shl 4) |
jnz .upK |
test [flags],(1 shl 11) |
jnz .up4e |
test [flags],(1 shl 12) |
jnz .up6e |
test [flags],(1 shl 9) |
jnz .up0 |
mov eax,0x0E |
jmp .to_opcode |
.up0f: mov eax,0x0F |
jmp .to_opcode |
.up4e: mov eax,0x4e |
jmp .to_opcode |
.up6e: mov eax,0x6e |
jmp .to_opcode |
.upprg: |
test [flags],(1 shl 8) |
jz .up0 |
add [dop8],0x0E |
jmp .dop8 |
.up0: test [flags],(1 shl 9) |
jz .up1 |
mov al,0x0E |
jmp .dop9 |
.up1: movzx eax,[schk] |
add eax,PMEM |
inc [schk] |
test [flags],(1 shl 3) |
jnz @f |
mov byte [eax],0x0E |
ret |
@@: mov byte [eax],0x0F |
btr [flags],3 |
ret |
.upK: mov eax,0x3B |
jmp .to_opcode |
|
.xy: test [flags],(1 shl 5) |
jnz .xyprg |
test [flags],(1 shl 3) |
jnz .xy24 |
mov eax,0x14 |
jmp .to_opcode |
.xy24: mov eax,0x24 |
jmp .to_opcode |
.xyprg: |
movzx eax,[schk] |
add eax,PMEM |
inc [schk] |
test [flags],(1 shl 3) |
jnz @f |
mov byte [eax],0x14 |
ret |
@@: mov byte [eax],0x24 |
btr [flags],3 |
ret |
.min: test [flags],(1 shl 5) |
jnz .minprg |
test [flags],(1 shl 3) |
jnz .min21 |
test [flags],(1 shl 9) |
jnz .min0 |
mov eax,0x11 |
jmp .to_opcode |
.min21: mov eax,0x21 |
jmp .to_opcode |
.minprg: |
test [flags],(1 shl 8) |
jz .min0 |
add [dop8],0x0F |
jmp .dop8 |
.min0: test [flags],(1 shl 9) |
jz .min1 |
mov al,0x0F |
jmp .dop9 |
.min1: movzx eax,[schk] |
add eax,PMEM |
inc [schk] |
test [flags],(1 shl 3) |
jnz @f |
mov byte [eax],0x11 |
ret |
@@: mov byte [eax],0x21 |
btr [flags],3 |
ret |
.div: test [flags],(1 shl 5) |
jnz .divprg |
test [flags],(1 shl 3) |
jnz .div23 |
mov eax,0x13 |
jmp .to_opcode |
.div23: mov eax,0x23 |
jmp .to_opcode |
.divprg: |
movzx eax,[schk] |
add eax,PMEM |
inc [schk] |
test [flags],(1 shl 3) |
jnz @f |
mov byte [eax],0x13 |
ret |
@@: mov byte [eax],0x23 |
btr [flags],3 |
ret |
.plus: test [flags],(1 shl 5) |
jnz .plusprg |
test [flags],(1 shl 3) |
jnz .plus10 |
mov eax,0x10 |
jmp .to_opcode |
.plus10: mov eax,0x20 |
jmp .to_opcode |
.plusprg: |
movzx eax,[schk] |
add eax,PMEM |
inc [schk] |
test [flags],(1 shl 3) |
jnz @f |
mov byte [eax],0x10 |
ret |
@@: mov byte [eax],0x20 |
btr [flags],3 |
ret |
.x: test [flags],(1 shl 5) |
jnz .xprg |
test [flags],(1 shl 3) |
jnz .x22 |
mov eax,0x12 |
jmp .to_opcode |
.x22: mov eax,0x22 |
jmp .to_opcode |
.xprg: |
movzx eax,[schk] |
add eax,PMEM |
inc [schk] |
test [flags],(1 shl 3) |
jnz @f |
mov byte [eax],0x12 |
ret |
@@: mov byte [eax],0x22 |
btr [flags],3 |
ret |
.dot: test [flags],(1 shl 5) |
jnz .dotprg |
test [flags],(1 shl 3) |
jnz .dot25 |
test [flags],(1 shl 11) |
jnz .dot4a |
test [flags],(1 shl 12) |
jnz .dot6a |
test [flags],(1 shl 9) |
jnz .dot0 |
mov eax,0x0A |
jmp .to_opcode |
.dot25: mov eax,0x25 |
jmp .to_opcode |
.dot4a: mov eax,0x4a |
jmp .to_opcode |
.dot6a: mov eax,0x6a |
jmp .to_opcode |
.dotprg: |
test [flags],(1 shl 8) |
jz .dot0 |
add [dop8],0x0A |
jmp .dop8 |
.dot0: test [flags],(1 shl 9) |
jz .dot1 |
mov al,0x0A |
jmp .dop9 |
.dot1: movzx eax,[schk] |
add eax,PMEM |
inc [schk] |
test [flags],(1 shl 3) |
jnz @f |
mov byte [eax],0x0A |
ret |
@@: mov byte [eax],0x25 |
btr [flags],3 |
ret |
|
.0: test [flags],(1 shl 5) |
jnz .0prg |
test [flags],(1 shl 3) |
jnz .015 |
test [flags],(1 shl 11) |
jnz .040 |
test [flags],(1 shl 12) |
jnz .060 |
test [flags],(1 shl 9) |
jnz .00 |
mov eax,0 |
jmp .to_opcode |
.015: mov eax,0x15 |
jmp .to_opcode |
.040: mov eax,0x40 |
jmp .to_opcode |
.060: mov eax,0x60 |
jmp .to_opcode |
.0prg: |
test [flags],(1 shl 8) |
jz .00 |
add [dop8],0x00 |
jmp .dop8 |
.00: test [flags],(1 shl 9) |
jz .01 |
mov al,0 |
jmp .dop9 |
.01: movzx eax,[schk] |
add eax,PMEM |
inc [schk] |
test [flags],(1 shl 4) |
jz @f |
mov ebx,0 |
test [flags],(1 shl 8) |
jnz .dop8 |
test [flags],(1 shl 9) |
jnz .dop9 |
mov byte [eax],0x54 |
bts [flags],4 |
ret |
@@: test [flags],(1 shl 3) |
jnz @f |
mov byte [eax],0x00 |
ret |
@@: mov byte [eax],0x15 |
btr [flags],3 |
ret |
|
.dop8: movzx eax,[schk] |
add eax,PMEM |
inc [schk] |
mov bl,[dop8] |
mov byte [eax],bl |
btr [flags],8 |
ret |
.dop9: cmp [mov3],0 |
jne @f |
inc [mov3] |
shl al,4 |
mov [dop9],al |
ret |
@@: mov [mov3],0 |
add al,[dop9] |
test [flags],(1 shl 5) |
jz @f |
movzx ebx,[schk] |
add ebx,PMEM |
mov [ebx],al |
inc [schk] |
btr [flags],9 |
ret |
@@: mov [schk],al |
btr [flags],9 |
call draw_prog |
ret |
|
align 4 |
.to_opcode: |
shl eax,2 |
add eax,OPCODEtable |
mov ebx,[eax] |
jmp ebx |
|
dop8 db 0 |
dop9 db 0 |
mov3 db 0 |
|
|
_1_: buttabnum 1,0x16,0x41,0x61,0 |
_2_: buttabnum 2,0x17,0x42,0x62,0 |
_3_: buttabnum 3,0x18,0x43,0x63,0 |
_4_: buttabnum 4,0x19,0x44,0x64,0x31 |
_5_: buttabnum 5,0x1A,0x45,0x65,0x32 |
_6_: buttabnum 6,0x1B,0x46,0x66,0 |
_7_: buttabnum 7,0x1C,0x47,0x67,0x34 |
_8_: buttabnum 8,0x1D,0x48,0x68,0x35 |
_9_: buttabnum 9,0x1E,0x49,0x69,0x36 |
|
|
|
|
align 4 |
stof: |
mov esi,string |
inc esi |
cmp word [esi],0x2030 |
je .null |
mov dword [buf],0 |
mov dword [buf+4],0 |
mov word [buf+8],0 |
xor ecx,ecx |
@@: cmp byte [esi+ecx],'.' |
je .dot |
cmp byte [esi+ecx],0x20 |
je .int |
inc ecx |
cmp ecx,8 |
jne @b |
.int: dec ecx |
call .tobcd |
fbld [buf] |
jmp .tosign |
|
.dot: push ecx |
dec ecx |
call .tobcd |
fbld [buf] |
pop ecx |
add esi,ecx |
inc esi |
mov ebx,ecx |
dec ebx |
xor ecx,ecx |
@@: cmp byte [esi+ecx],0x20 |
je @f |
cmp ebx,8 |
je @f |
inc ecx |
inc ebx |
jmp @b |
@@: cmp ecx,0 |
je .tosign |
push ecx |
dec ecx |
mov dword [buf],0 |
mov dword [buf+4],0 |
mov word [buf+8],0 |
call .tobcd |
fbld [buf] |
pop ecx |
mov [perem],10 |
@@: fidiv [perem] |
loop @b |
faddp |
jmp .tosign |
|
|
.tobcd: |
mov edi,buf |
@@: mov al,[esi+ecx] |
sub al,48 |
test ecx,ecx |
jz @f |
shl al,4 |
mov ah,[esi+ecx-1] |
sub ah,48 |
shr ax,4 |
mov [edi],al |
inc edi |
dec ecx |
jz .tobcd1 |
dec ecx |
jnz @b |
mov al,[esi] |
sub al,48 |
@@: mov [edi],al |
.tobcd1: |
ret |
|
|
.tosign: |
cmp byte [string],'-' |
jne @f |
fchs |
@@: cmp byte [string+12],0x20 |
je .ret |
cmp byte [string+12],0x30 |
jne @f |
cmp byte [string+11],0x30 |
je .ret |
@@: mov al,[string+12] |
sub al,48 |
mov ah,[string+11] |
sub ah,48 |
shl al,4 |
shr ax,4 |
mov [buf],al |
mov dword [buf+1],0 |
mov dword [buf+5],0 |
fbld [buf] |
fistp [perem] |
mov ecx,[perem] |
mov [perem],10 |
cmp byte [string+10],'-' |
je .@@f |
@@: fimul [perem] |
loop @b |
ret |
.@@f: fidiv [perem] |
loop .@@f |
.ret: ret |
.null: fldz |
ret |
|
align 4 |
ftos: |
test [flags],(1 shl 5) |
jnz .prg |
mov esi,string |
mov dword [esi],0x20202020 |
mov dword [esi+4],0x20202020 |
mov dword [esi+8],0x20202020 |
mov byte [esi+12],0x20 |
; fld st0 |
; fxtract |
; fstp st0 |
; fabs |
; fistp [perem] |
; mov eax,[perem] |
; cmp eax,0x1a |
; jg .1 |
; stdcall FpuFLtoA,0,8,buf2,SRC1_FPU or SRC1_REAL; or STR_SCI |
; mov ecx,9 |
; mov esi,string |
; mov edi,buf2 |
;@@: mov al,[edi] |
; test al,al |
; jz @f |
; mov [esi],al |
; inc esi |
; inc edi |
; loop @b |
;@@: ret |
|
.1: stdcall FpuFLtoA,0,8,buf2,SRC1_FPU or SRC1_REAL or STR_SCI |
mov ecx,10 |
mov esi,string |
mov edi,buf2 |
@@: mov al,[edi] |
test al,al |
jz .ret |
mov [esi],al |
inc esi |
inc edi |
loop @b |
; add edi,9 |
@@: cmp byte [edi],0 |
je @f |
inc edi |
jmp @b |
@@: mov ax,[edi-2] |
mov [string+11],ax |
mov al,[edi-5] |
mov [string+10],al |
.ret: |
; cmp word [string+11],0x2020 |
; je .ret2 |
cmp byte [string+10],'-' |
je .ret2 |
mov ax,[string+11] |
sub ax,0x3030 |
xchg ah,al |
shl al,4 |
shr ax,4 |
cmp al,7 |
jge .ret2 |
mov word [string+10],' ' |
mov byte [string+12],' ' |
cmp al,0 |
je .ret2 |
xor edx,edx |
@@: mov bl,[string+2+edx] |
mov bh,[string+2+edx+1] |
xchg bh,bl |
mov [string+2+edx],bx |
inc edx |
dec al |
jnz @b |
.ret2: mov ecx,7 |
@@: cmp byte [string+2+ecx],'0' |
jne @f |
mov byte [string+2+ecx],' ' |
loop @b |
@@: cmp byte [string+2+ecx],'.' |
jne @f |
mov byte [string+2+ecx],' ' |
@@: cmp byte [string+10],'+' |
jne @f |
mov byte [string+10],' ' |
@@: |
ret |
.toascii: |
shl ax,4 |
shr al,4 |
cmp al,10 |
sbb al,69h |
das |
rol ax,8 |
cmp al,10 |
sbb al,69h |
das |
ret |
.prg: mov eax,0x20202020 |
mov dword [string],eax |
mov dword [string+4],eax |
mov dword [string+8],eax |
xor eax,eax |
mov al,[schk] |
mov ebx,eax |
call .toascii |
mov [string+11],ax |
cmp [schk],3 |
jb @f |
movzx eax,byte [PMEM+ebx-3] |
call .toascii |
mov [string+8],ax |
@@: cmp [schk],2 |
jb @f |
movzx eax,byte [PMEM+ebx-2] |
call .toascii |
mov [string+5],ax |
@@: cmp [schk],1 |
jb @f |
movzx eax,byte [PMEM+ebx-1] |
call .toascii |
mov [string+2],ax |
@@: |
ret |
|
|
; ********************************************* |
; ******* WINDOW DEFINITIONS AND DRAW ********* |
; ********************************************* |
|
draw_window: |
mcall 12,1 |
|
mcall 48,3,sc,sizeof.system_colors |
|
mov edx,[sc.work] |
or edx,0x34000000 |
mov ecx,200 |
shl ecx,16 |
add ecx,[scin_height] |
add ecx,343 |
mcall 0,160 shl 16+485,,,,title |
|
mov ebp,smesh |
mcall 65,bmp_file+8,185*65536+262,2*65536+75,4,palitra |
|
mcall 13,13*65536+122,24*65536+20,0xffffff |
|
call draw_string |
|
mcall 13,137*65536+32,48*65536+12,0x888888 |
|
call set_but |
call draw_registers |
call draw_stack |
call draw_prog |
|
mcall 8,176*65536+11,61*65536+10,35,0xdadada |
|
mov edi,[sc.work] |
or edi,0x34000000 |
mcall 4,133*65536+63,0x81000000,txt.perek |
mcall ,403*65536+4,,txt.prog |
mcall ,403*65536+12,,txt.prog1 |
mcall ,380*65536+323,,txt.sk |
|
if 0 |
mov [scroll_bar_data_vertical.all_redraw],1 |
push dword scroll_bar_data_vertical |
call [scrollbar_ver_draw] |
mov [scroll_bar_data_vertical.all_redraw],0 |
endf |
push dword edit1 |
call [edit_box_draw] |
|
;CK |
call draw_schk |
|
;®¡®§ 票ï ॣ¨áâ஢ |
mcall 4,240*65536+4,0x81000000,txt.regs |
mov word [perem],"0:" |
mov byte [perem+2],0 |
mov ebx,210*65536+20 |
mov edx,perem |
push dword 15 |
@@: cmp dword [esp],5 |
je @f |
.prevr: int 0x40 |
add ebx,12 |
inc byte [perem] |
dec dword [esp] |
jnz @b |
jmp .nextr |
@@: add byte [perem],7 |
jmp .prevr |
.nextr: add esp,4 |
|
;®¡®§ 票ï á⥪ |
mcall 4,240*65536+220,0x81000000,txt.stk |
mov word [perem],"T:" |
mov byte [perem+2],0 |
mov ebx,210*65536+240 |
mov edx,perem |
push dword 5 |
.firsts: cmp dword [esp],4 |
jne @f |
mov byte [perem],"Z" |
jmp .prevs |
@@: cmp dword [esp],3 |
jne @f |
mov byte [perem],"Y" |
jmp .prevs |
@@: cmp dword [esp],2 |
jne @f |
mov byte [perem],"X" |
jmp .prevs |
@@: cmp dword [esp],1 |
jne .prevs |
mov dword [perem],"X1" |
.prevs: int 0x40 |
add ebx,12 |
dec dword [esp] |
jnz .firsts |
.nexts: add esp,4 |
|
mcall 12,2 |
ret |
|
align 4 |
draw_string: |
; mov edi,[sc.work] |
or edi,0x34ffffff |
mov edx,edi |
mcall 13,20*65536+105,30*65536+7 |
mcall 4,20*65536+30,0x900000ff,string,, |
ret |
|
align 4 |
draw_schk: |
test [flags],(1 shl 13) |
jnz .ret |
mov edi,[sc.work] |
or edi,0x34000000 |
movzx ecx,[schk] |
mcall 47,0x020100,,400*65536+323,0x50000000, |
.ret: |
ret |
|
align 4 |
set_but: |
mov ecx,34 |
mov eax,8 |
@@: push ecx |
lea ebx,[ecx+0x80000000+1] |
int 0x40 |
pop ecx |
loop @b |
|
xor edi,edi |
mov esi,0xffffff |
bt [flags],30 |
jnc @f |
mov esi,0x0 |
@@: mcall 8,140*65536+7,50*65536+7,32 |
mov esi,0x0 |
add ebx,9*65536 |
inc edx |
bt [flags],30 |
jnc @f |
bt [flags],31 |
jc @f |
mov esi,0xffffff |
@@: mcall |
mov esi,0 |
add ebx,9*65536 |
inc edx |
bt [flags],30 |
jnc @f |
bt [flags],31 |
jnc @f |
mov esi,0xffffff |
@@: mcall |
|
mov ecx,30 |
push ecx |
mov ecx,89*65536+22 |
.00: mov ebx,8*65536+27 |
.0: pop eax |
lea edx,[eax+(1 shl 30) + 1] |
push eax |
mcall 8,,, |
mov eax,ecx |
pop ecx |
dec ecx |
jz .ret |
push ecx |
cmp ecx,5 |
je .1 |
cmp ecx,10 |
je .1 |
cmp ecx,15 |
je .1 |
cmp ecx,20 |
je .1 |
cmp ecx,25 |
je .1 |
add ebx,36*65536 |
mov ecx,eax |
jmp .0 |
.1: add eax,42*65536 |
mov ecx,eax |
jmp .00 |
.ret: |
ret |
|
align 4 |
draw_registers: |
test [flags],(1 shl 13) |
jnz .ret |
mov esi,R.0 |
mov ecx,15 |
mov edx,[sc.work] |
or edx,0x34000000 |
push edx |
mov ebx,220*65536+150 |
push ebx |
mov ebx,20*65536+9 |
push ebx |
push esi ecx |
@@: call .ftoa |
mov ebx,[esp+12] |
mov ecx,[esp+8] |
mov edx,[esp+16] |
mcall 13 |
mov ebx,[esp+12] |
mov eax,[esp+8] |
shr eax,16 |
mov bx,ax |
mov ecx,0;[esp+16] |
add ecx,0x80000000 |
mov edx,buf2 |
mcall 4 |
dec dword [esp] |
jz @f |
add dword [esp+4],8 |
mov esi,[esp+4] |
add dword [esp+8],12*65536 |
jmp @b |
@@: add esp,20 |
.ret: |
ret |
|
.ftoa: |
fld qword [esi] |
fld st0 |
fabs |
fxtract |
fstp st0 |
fabs |
fistp [perem] |
mov eax,[perem] |
cmp eax,0x1a+16383 |
jge @f |
cmp eax,0x1a |
jge @f |
stdcall FpuFLtoA,0,8,buf2,SRC1_FPU or SRC1_REAL; or STR_SCI |
fstp st0 |
ret |
@@: stdcall FpuFLtoA,0,8,buf2,SRC1_FPU or SRC1_REAL or STR_SCI |
fstp st0 |
ret |
|
align 4 |
draw_stack: |
; test [flags],(1 shl 13) |
; jnz .ret |
mov esi,S.T |
mov ecx,5 |
mov edx,[sc.work] |
or edx,0x34000000 |
push edx |
mov ebx,220*65536+150 |
push ebx |
mov ebx,240*65536+9 |
push ebx |
push esi ecx |
@@: call draw_registers.ftoa |
mov ebx,[esp+12] |
mov ecx,[esp+8] |
mov edx,[esp+16] |
mcall 13 |
mov ebx,[esp+12] |
mov eax,[esp+8] |
shr eax,16 |
mov bx,ax |
mov ecx,0;[esp+16] |
add ecx,0x80000000 |
mov edx,buf2 |
mcall 4 |
dec dword [esp] |
jz @f |
sub dword [esp+4],8 |
mov esi,[esp+4] |
add dword [esp+8],12*65536 |
jmp @b |
@@: add esp,20 |
;.ret: |
ret |
|
align 4 |
draw_prog: |
test [flags],(1 shl 13) |
jnz .ret |
pushd 26 |
movzx eax,[schk] |
mov [.sprog2],al |
xor edx,edx |
div dword [esp] |
xor edx,edx |
mul dword [esp] |
mov [.sprog],al |
mov edi,[sc.work] |
or edi,0x34000000 |
movzx ecx, [.sprog] |
add ecx,26 |
sub ecx,[esp] |
mov esi,0x5000459a |
push esi |
cmp cl,[.sprog2] |
jne @f |
mov esi,0x50cc0000 |
@@: mcall 47,0x020100,,400*65536+24,, |
pop esi |
add edx,30*65536 |
movzx ecx,[.sprog] |
add ecx,PMEM+26 |
sub ecx,[esp] |
movzx ecx, byte [ecx] |
mcall |
sub edx,30*65536 |
@@: add edx,11 |
dec dword [esp] |
jz @f |
movzx ecx, [.sprog] |
add ecx,26 |
sub ecx,[esp] |
push esi |
cmp cl,[.sprog2] |
jne .2 |
mov esi,0x50cc0000 |
.2: mcall |
pop esi |
add edx,30*65536 |
movzx ecx,[.sprog] |
add ecx,PMEM+26 |
sub ecx,[esp] |
movzx ecx, byte [ecx] |
mcall |
sub edx,30*65536 |
jmp @b |
@@: pop eax |
.ret: |
ret |
.sprog db 0 |
.sprog2 db 0 |
|
|
|
|
|
window_load_save: |
popad |
mcall 51,1,.thread,(.threat_stack+32*4) |
pushad |
ret |
.thread: |
bts [flags],26 |
.red: |
mcall 12,1 |
mov edi,txt.load |
bt [flags],25 |
jc @f |
mov edi,txt.save |
@@: mcall 0,50*65536+300,0x70*65536+60,(0x34ffffff),, |
mcall 8,<245,43>,<2,14>,100,0xaaaaaa |
mcall 4,<252,5>,(0x80000000),txt.enter |
push dword edit2 |
call [edit_box_draw] |
mcall 12,2 |
.still: |
mcall 10 |
dec al |
jz .red |
dec al |
jz .key |
dec al |
jz .button |
jmp .still |
.button: |
mcall 17,1 |
cmp ah,1 |
jne @f |
.end: btr [flags],26 |
mcall -1 |
@@: cmp ah,100 |
jne .still |
bt [flags],25 |
jc .ld |
.sv: call save_prog |
jnc .end |
jmp .err |
.ld: call load_prog |
jnc .end |
.err: mcall 4,<5,19>,(0x80000000),txt.error |
jmp .still |
|
|
.key: |
mcall 2 |
cmp ah,13 |
jne @f |
bt [flags],25 |
jc .ld |
jmp .sv |
@@: cmp ah,27 |
je .end |
push dword edit2 |
call [edit_box_key] |
jmp .still |
|
.threat_stack: times 32 dd 0 |
|
|
save_prog: |
mov [_size],256+8*(15+5)+6*3 |
mcall 68,12,[_size] |
test eax,eax |
jnz @f |
stc |
ret |
|
@@: mov [_buffer],eax |
mov esi,S.X1 |
mov edi,eax |
mov byte [edi],"<" |
mov dword [edi+1],"
" |
mov byte [edi+5],">" |
add edi,6 |
mov ecx,5*2 |
cld |
@@: movsd |
loop @b |
mov esi,R.0 |
mov byte [edi],"<" |
mov dword [edi+1],"" |
mov byte [edi+5],">" |
add edi,6 |
mov ecx,15*2 |
cld |
@@: movsd |
loop @b |
mov esi,PMEM |
mov byte [edi],"<" |
mov dword [edi+1],"" |
mov byte [edi+5],">" |
add edi,6 |
mov ecx,256/4 |
cld |
@@: movsd |
loop @b |
|
mov [func_70.func_n],2 |
push [_size] |
pop [func_70.param3] |
push [_buffer] |
pop [func_70.param4] |
mov [func_70.name],buf_cmd_lin |
mcall 70,func_70 |
cmp al,0 ;á®åà ñ 㤠ç®? |
je @f |
mcall 68,13,[_buffer] |
stc |
ret |
@@: mcall 68,13,[_buffer] |
clc |
ret |
|
load_prog: |
mov [func_70.func_n],5 |
mov [func_70.param3],0 |
mov [func_70.param4],bufferfinfo |
mov [func_70.name],buf_cmd_lin |
mcall 70,func_70 |
test al,al ;ä ©« ©¤¥? |
jz @f |
stc |
ret |
@@: mov eax, dword [bufferfinfo+32] ;ª®¯¨à㥬 à §¬¥à ä ©« |
cmp eax,256+8*(15+5)+6*3 |
jbe @f |
stc |
ret |
|
_size dd 0 |
_buffer dd 0 |
|
@@: mov [_size],eax |
mcall 68,12,[_size] |
test eax,eax |
jnz @f |
stc |
ret ;®è¨¡ª ¢ë¤¥«¥¨¥ ¡«®ª |
@@: |
mov [_buffer],eax |
mov [func_70.func_n],0 |
mov [func_70.name],buf_cmd_lin |
push dword [_size] |
pop dword [func_70.param3] |
push dword [_buffer] |
pop dword [func_70.param4] |
mcall 70,func_70 |
test eax,eax |
jz @f |
stc |
ret ;®è¨¡ª ç⥨ï |
@@: |
|
mov esi,[_buffer] |
mov ecx,[_size] |
@@: cmp byte [esi],"<" |
je .@f1 |
inc esi |
loop @b |
.end: mcall 68,13,[_buffer] |
clc |
ret |
.@f1: inc esi |
cmp dword [esi],"
" |
je .st |
cmp dword [esi],"" |
je .rg |
cmp dword [esi],"" |
je .pr |
jmp @b |
.st: mov edi,S.X1 |
add esi,5 |
mov ebx,5*2*4 |
cld |
.st@: movsb |
cmp byte [esi],"<" |
jne .stB |
inc esi |
cmp dword [esi],"" |
je .rg |
cmp dword [esi],"" |
je .pr |
dec esi |
.stB: dec ecx |
jz .end |
dec ebx |
jnz .st@ |
jmp @b |
.rg: mov edi,R.0 |
add esi,5 |
mov ebx,15*2*4 |
cld |
.rg@: movsb |
cmp byte [esi],"<" |
jne .rgB |
inc esi |
cmp dword [esi],"
" |
je .st |
cmp dword [esi],"" |
je .pr |
dec esi |
.rgB: dec ecx |
jz .end |
dec ebx |
jnz .rg@ |
jmp @b |
.pr: mov edi,PMEM |
mov eax,0 |
mov ebx,256/4 |
.pr0: mov [edi],eax |
add edi,4 |
dec ebx |
jnz .pr0 |
mov edi,PMEM |
add esi,5 |
mov ebx,256 |
cld |
.pr@: movsb |
cmp byte [esi],"<" |
jne .prB |
inc esi |
cmp dword [esi],"
" |
je .st |
cmp dword [esi],"" |
je .rg |
dec esi |
.prB: dec ecx |
jz .end |
dec ebx |
jnz .pr@ |
jmp @b |
|
|
|
|
|
|
align 4 |
|
S: |
.X1: dq 0.0 |
.X: dq 0.0 |
.Y: dq 0.0 |
.Z: dq 0.0 |
.T: dq 0.0 |
|
RS: |
times 10 db 0 |
|
align 4 |
R: |
.0: dq 0.0 |
.1: dq 0.0 |
.2: dq 0.0 |
.3: dq 0.0 |
.4: dq 0.0 |
.5: dq 0.0 |
.6: dq 0.0 |
.7: dq 0.0 |
.8: dq 0.0 |
.9: dq 0.0 |
.A: dq 0.0 |
.B: dq 0.0 |
.C: dq 0.0 |
.D: dq 0.0 |
.E: dq 0.0 |
.F: dq 0.0 |
dq 0.0 |
|
|
align 4 |
myimport: |
edit_box_draw dd aEdit_box_draw |
edit_box_key dd aEdit_box_key |
edit_box_mouse dd aEdit_box_mouse |
version_ed dd aVersion_ed |
|
scrollbar_ver_draw dd aScrollbar_ver_draw |
scrollbar_ver_mouse dd aScrollbar_ver_mouse |
version_scrollbar dd aVersion_scrollbar |
|
dd 0 |
dd 0 |
|
aEdit_box_draw db 'edit_box',0 |
aEdit_box_key db 'edit_box_key',0 |
aEdit_box_mouse db 'edit_box_mouse',0 |
aVersion_ed db 'version_ed',0 |
|
aScrollbar_ver_draw db 'scrollbar_v_draw',0 |
aScrollbar_ver_mouse db 'scrollbar_v_mouse',0 |
aVersion_scrollbar db 'version_scrollbar',0 |
|
if 0 |
|
align 4 |
scroll_bar_data_vertical: |
.x: |
.size_x dw 15;+0 |
.start_x dw 455 ;+2 |
.y: |
.size_y dw 284 ;+4 |
.start_y dw 19 ;+6 |
.btn_high dd 15 ;+8 |
.type dd 1 ;+12 |
.max_area dd 300+20 ;+16 |
.cur_area dd 50 ;+20 |
.position dd 0 ;+24 |
.bckg_col dd 0xAAAAAA ;+28 |
.frnt_col dd 0xCCCCCC ;+32 |
.line_col dd 0 ;+36 |
.redraw dd 0 ;+40 |
.delta dw 0 ;+44 |
.delta2 dw 0 ;+46 |
.run_x: |
.r_size_x dw 0 ;+48 |
.r_start_x dw 0 ;+50 |
.run_y: |
.r_size_y dw 0 ;+52 |
.r_start_y dw 0 ;+54 |
.m_pos dd 0 ;+56 |
.m_pos_2 dd 0 ;+60 |
.m_keys dd 0 ;+64 |
.run_size dd 0 ;+68 |
.position2 dd 0 ;+72 |
.work_size dd 0 ;+76 |
.all_redraw dd 0 ;+80 |
.ar_offset dd 10 ;+84 |
|
endf |
|
func_70: |
.func_n dd ? |
.param1 dd 0 |
.param2 dd 0 |
.param3 dd ? |
.param4 dd ? |
.rezerv db 0 |
.name dd ? |
|
flags dd _flags |
|
_pause dd 10 |
string_zero db " 0 ",0 |
buf: times 10 db 0 |
perem dd 0 |
buf2: times 25 db 0 |
string: db " 0 ",0 |
buf3: times 25 db 0 |
schk db 0 |
|
title db appname,version,0 |
|
txt: |
.save db '®åà ¨âì (Ctrl+S)',0 |
.error db '訡ª ',0 |
.load db ' £à㧨âì (Ctrl+L)',0 |
.enter db 'Enter',0 |
.regs db "¥£¨áâàë",0 |
.stk db "⥪",0 |
.perek db " >",0 |
.prog db "à®£à ¬¬ ",0 |
.prog1 db " £ ®¤",0 |
.sk db ":",0 |
.edbox db " ",0 |
|
system_path db '/sys/lib/' |
boxlib_name db 'box_lib.obj',0 |
head_f_i: |
head_f_l db 'error',0 |
err_message_found_lib db 'box_lib.obj was not found',0 |
err_message_import db 'box_lib.obj was not imported',0 |
|
edit1 edit_box 20,427,320,0xffffff,0x6a9480,0,0xAABBCC,0,2,txt.edbox,ed_focus,ed_focus,0,0 |
edit2 edit_box 240,2,2,0xffffff,0x6a9480,0,0xAABBCC,0,4096,buf_cmd_lin,ed_focus,2,0,0 |
|
virtual at 0 |
file 'MK_b3-34_hand.BMP':0xA,4 |
load offbits dword from 0 |
end virtual |
|
palitra: |
file 'MK_b3-34_hand.BMP':0x36,offbits-0x36 |
|
sizey = 262 |
sizex = 185 + 7 |
smesh = 3 |
|
bmp_file: |
file 'MK_b3-34_hand.BMP':110 |
repeat sizey/2 |
y = % - 1 |
z = sizey - % |
repeat sizex/2/4 |
load a dword from $ - sizex*sizey/2 + sizex*y/2+(%-1)*4 |
load b dword from $ - sizex*sizey/2 + sizex*z/2+(%-1)*4 |
store dword a at $ - sizex*sizey/2 + sizex*z/2+(%-1)*4 |
store dword b at $ - sizex*sizey/2 + sizex*y/2+(%-1)*4 |
end repeat |
end repeat |
|
sound_data: |
db 40 |
dw 670 |
db 0 |
|
I_END: |
|
sc system_colors |
|
procinfo: rb 1024 |
buf_cmd_lin rb 0 |
cur_dir_path rb 4096 |
|
|
PMEM: rb 256 |
|
bufferfinfo rb 40 |
scin_height rd 1 |
|
D_END: |