Kernel: Smoothing image code from Mario79, build scripts for skin and drivers/build.bat
Programs: fasm updated to 1.67.14, small fixes in desktop, stackcfg, calc, board, pipes, freecell, big cleanup of unused programs, added some applications from 0.6.3.0 distr... git-svn-id: svn://kolibrios.org@205 a494cfbc-eb01-0410-851d-a64ba20cac60
4
kernel/trunk/drivers/build.bat
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
@fasm unisound.asm unisound.obj
|
||||||
|
@fasm sis.asm sis.obj
|
||||||
|
@fasm infinity.asm infinity.obj
|
||||||
|
@pause
|
2
kernel/trunk/skin/build.bat
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
@fasm default.asm default.skn
|
||||||
|
@pause
|
@ -1033,30 +1033,63 @@ vesa20_drawbackground_stretch:
|
|||||||
|
|
||||||
|
|
||||||
sdp3: ; MAIN LOOP
|
sdp3: ; MAIN LOOP
|
||||||
|
|
||||||
cmp [edi+WinMapAddress],byte 1 ; ptrBuffer^<>byte(1)
|
cmp [edi+WinMapAddress],byte 1 ; ptrBuffer^<>byte(1)
|
||||||
jne snbgp
|
jne snbgp
|
||||||
|
|
||||||
push eax
|
push eax
|
||||||
push ebx
|
push ebx
|
||||||
|
|
||||||
mov eax,dword [WinMapAddress-8]
|
mov eax,dword [WinMapAddress-8]
|
||||||
imul eax, [esp+4] ;4
|
imul eax, [esp+4] ;4
|
||||||
xor edx,edx
|
xor edx,edx
|
||||||
mov ebx,[ScreenWidth]
|
mov ebx,[ScreenWidth]
|
||||||
div ebx
|
div ebx
|
||||||
|
mov cx,dx
|
||||||
lea esi,[eax+eax*2]
|
lea esi,[eax+eax*2]
|
||||||
mov eax,dword [WinMapAddress-4]
|
mov eax,dword [WinMapAddress-4]
|
||||||
imul eax, [esp+0] ;0
|
imul eax, [esp+0] ;0
|
||||||
xor edx,edx
|
xor edx,edx
|
||||||
mov ebx,[ScreenHeight]
|
mov ebx,[ScreenHeight]
|
||||||
div ebx
|
div ebx
|
||||||
|
shl ecx,16
|
||||||
|
mov cx,dx
|
||||||
imul eax, [esp+8] ;8
|
imul eax, [esp+8] ;8
|
||||||
add esi,eax
|
add esi,eax
|
||||||
|
|
||||||
mov eax,[esi+0x300000]
|
mov eax,[esi+0x300000]
|
||||||
|
push eax
|
||||||
|
ror ecx,16
|
||||||
|
xor eax,eax
|
||||||
|
mov ax,cx
|
||||||
|
shl eax,1 ; óìíîæåíèå íà 2
|
||||||
|
lea eax,[eax+eax*4] ; óìíîæåíèå íà 5
|
||||||
|
xor edx,edx
|
||||||
|
mov ebx,[ScreenWidth]
|
||||||
|
div ebx
|
||||||
|
cmp eax,5
|
||||||
|
pop eax
|
||||||
|
jb @f
|
||||||
|
mov ebx,[esi+0x300000+3]
|
||||||
|
call overlapping_of_points
|
||||||
|
@@:
|
||||||
|
push eax
|
||||||
|
ror ecx,16
|
||||||
|
xor eax,eax
|
||||||
|
mov ax,cx
|
||||||
|
shl eax,1 ; óìíîæåíèå íà 2
|
||||||
|
lea eax,[eax+eax*4] ; óìíîæåíèå íà
|
||||||
|
xor edx,edx
|
||||||
|
mov ebx,[ScreenHeight]
|
||||||
|
div ebx
|
||||||
|
cmp eax,5
|
||||||
|
pop eax
|
||||||
|
jb @f
|
||||||
|
mov ebx,[display_data-8]
|
||||||
|
shl ebx,1
|
||||||
|
add ebx,[display_data-8]
|
||||||
|
add ebx,0x300000
|
||||||
|
add ebx,esi
|
||||||
|
mov ebx,[ebx]
|
||||||
|
call overlapping_of_points
|
||||||
|
@@:
|
||||||
and eax,0xffffff
|
and eax,0xffffff
|
||||||
|
|
||||||
xchg edi, ebp
|
xchg edi, ebp
|
||||||
stosw
|
stosw
|
||||||
shr eax,16
|
shr eax,16
|
||||||
@ -1066,12 +1099,44 @@ vesa20_drawbackground_stretch:
|
|||||||
jz @f
|
jz @f
|
||||||
inc ebp ; +1
|
inc ebp ; +1
|
||||||
@@:
|
@@:
|
||||||
|
|
||||||
pop ebx
|
pop ebx
|
||||||
pop eax
|
pop eax
|
||||||
|
|
||||||
jmp shook1
|
jmp shook1
|
||||||
|
|
||||||
|
overlapping_of_points:
|
||||||
|
push ecx edi
|
||||||
|
mov ecx,eax
|
||||||
|
mov edx,ebx
|
||||||
|
xor eax,eax
|
||||||
|
mov al,cl
|
||||||
|
xor ebx,ebx
|
||||||
|
mov bl,dl
|
||||||
|
add eax,ebx
|
||||||
|
rcr eax,1
|
||||||
|
xor edi,edi
|
||||||
|
mov di,ax
|
||||||
|
xor eax,eax
|
||||||
|
mov al,ch
|
||||||
|
xor ebx,ebx
|
||||||
|
mov bl,dh
|
||||||
|
add eax,ebx
|
||||||
|
rcr eax,1
|
||||||
|
ror edi,8
|
||||||
|
add edi,eax
|
||||||
|
ror ecx,8
|
||||||
|
ror edx,8
|
||||||
|
xor eax,eax
|
||||||
|
mov al,ch
|
||||||
|
xor ebx,ebx
|
||||||
|
mov bl,dh
|
||||||
|
add eax,ebx
|
||||||
|
rcr eax,1
|
||||||
|
ror edi,8
|
||||||
|
add eax,edi
|
||||||
|
ror eax,16
|
||||||
|
pop edi ecx
|
||||||
|
ret
|
||||||
|
|
||||||
snbgp:
|
snbgp:
|
||||||
add ebp,3 ; +3
|
add ebp,3 ; +3
|
||||||
cmp [ScreenBPP],byte 24 ; 24 or 32 bpp ? - x size
|
cmp [ScreenBPP],byte 24 ; 24 or 32 bpp ? - x size
|
||||||
|
@ -123,8 +123,10 @@ macro mpack dest, hsrc, lsrc
|
|||||||
end if
|
end if
|
||||||
}
|
}
|
||||||
|
|
||||||
macro __mov reg,a { ; mike.dld
|
macro __mov reg,a,b { ; mike.dld
|
||||||
if ~a eq
|
if (~a eq)&(~b eq)
|
||||||
|
mpack reg,a,b
|
||||||
|
else if (~a eq)&(b eq)
|
||||||
mov reg,a
|
mov reg,a
|
||||||
end if
|
end if
|
||||||
}
|
}
|
||||||
@ -141,11 +143,6 @@ macro mcall a,b,c,d,e,f { ; mike.dld
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
; language for programs
|
|
||||||
lang fix ru ; ru en fr ge fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; optimize the code for size
|
; optimize the code for size
|
||||||
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp>
|
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp>
|
||||||
|
|
||||||
@ -177,7 +174,7 @@ macro sub arg1,arg2
|
|||||||
|
|
||||||
macro mov arg1,arg2
|
macro mov arg1,arg2
|
||||||
{
|
{
|
||||||
if (arg1 in __regs) & (arg2 eqtype 0)
|
if (arg1 in __regs) & ((arg2 eqtype 0) | (arg2 eqtype '0'))
|
||||||
if (arg2) = 0
|
if (arg2) = 0
|
||||||
xor arg1,arg1
|
xor arg1,arg1
|
||||||
else if (arg2) = 1
|
else if (arg2) = 1
|
||||||
@ -221,7 +218,13 @@ struc process_information
|
|||||||
.x_size dd ? ; +42
|
.x_size dd ? ; +42
|
||||||
.y_size dd ? ; +46
|
.y_size dd ? ; +46
|
||||||
.slot_state dw ? ; +50
|
.slot_state dw ? ; +50
|
||||||
rb (1024-52)
|
dw ? ; +52 - reserved
|
||||||
|
.client_left dd ? ; +54
|
||||||
|
.client_top dd ? ; +58
|
||||||
|
.client_width dd ? ; +62
|
||||||
|
.client_height dd ? ; +66
|
||||||
|
.wnd_state db ? ; +70
|
||||||
|
rb (1024-71)
|
||||||
}
|
}
|
||||||
struct process_information
|
struct process_information
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
;
|
;
|
||||||
; Created: December 16, 2004
|
; Created: December 16, 2004
|
||||||
;
|
;
|
||||||
; Last changed: February 2, 2005
|
; Last changed: August 27, 2006
|
||||||
;
|
;
|
||||||
; Compile with FASM
|
; Compile with FASM
|
||||||
|
|
||||||
@ -237,18 +237,16 @@ _BGIfont_Prepare:
|
|||||||
mov esi,edi ; esi->FontName
|
mov esi,edi ; esi->FontName
|
||||||
mov [.dest],edi ; ptr to load font
|
mov [.dest],edi ; ptr to load font
|
||||||
if ~ BGI_LEVEL eq KERNEL
|
if ~ BGI_LEVEL eq KERNEL
|
||||||
mov [.fsize],1
|
mov eax, 70
|
||||||
mov eax,58
|
mov ebx, .fontattr
|
||||||
mov ebx,.fontinfo
|
|
||||||
int 0x40
|
int 0x40
|
||||||
test eax, eax
|
test eax, eax
|
||||||
jnz .fail
|
jnz .fail
|
||||||
dps2 '1'
|
dps2 '1'
|
||||||
shr ebx,9
|
mov eax, [.fileattr+32]
|
||||||
inc ebx
|
mov [.fsize], eax
|
||||||
mov [.fsize],ebx
|
|
||||||
mov ebx,.fontinfo
|
mov ebx,.fontinfo
|
||||||
mov eax,58
|
mov eax,70
|
||||||
int 0x40 ; ebx - file size
|
int 0x40 ; ebx - file size
|
||||||
else
|
else
|
||||||
push edi esi edx
|
push edi esi edx
|
||||||
@ -340,11 +338,22 @@ if ~ BGI_LEVEL eq KERNEL
|
|||||||
.fontinfo:
|
.fontinfo:
|
||||||
dd 0
|
dd 0
|
||||||
dd 0
|
dd 0
|
||||||
|
dd 0
|
||||||
.fsize dd 0
|
.fsize dd 0
|
||||||
.dest dd 0
|
.dest dd 0
|
||||||
dd 0x10000
|
.fontfullname:
|
||||||
db BGIFONT_PATH
|
db BGIFONT_PATH
|
||||||
.font db 'FONT.CHR',0
|
.font db 'FONT.CHR',0
|
||||||
|
|
||||||
|
.fontattr:
|
||||||
|
dd 5
|
||||||
|
dd 0
|
||||||
|
dd 0
|
||||||
|
dd 0
|
||||||
|
dd .fileattr
|
||||||
|
db 0
|
||||||
|
dd .fontfullname
|
||||||
|
.fileattr rd 40/4
|
||||||
else
|
else
|
||||||
.dest dd 0
|
.dest dd 0
|
||||||
.font db 'FONT CHR'
|
.font db 'FONT CHR'
|
||||||
@ -479,6 +488,7 @@ end if
|
|||||||
loop .next
|
loop .next
|
||||||
mov ecx,edx ; ecx - x size
|
mov ecx,edx ; ecx - x size
|
||||||
movzx dx,byte[edi+6]
|
movzx dx,byte[edi+6]
|
||||||
|
mov [BGIheight],dx
|
||||||
mov ebx,[esp+36]
|
mov ebx,[esp+36]
|
||||||
and ebx,BGI_HAMASK
|
and ebx,BGI_HAMASK
|
||||||
cmp ebx,BGI_HARIGHT
|
cmp ebx,BGI_HARIGHT
|
||||||
@ -690,7 +700,7 @@ end if
|
|||||||
.color dd ?
|
.color dd ?
|
||||||
.vec_end dd ?
|
.vec_end dd ?
|
||||||
BGIfont_Ptr dd 0
|
BGIfont_Ptr dd 0
|
||||||
width dd ?
|
BGIheight dw ?
|
||||||
deform dd ?
|
deform dd ?
|
||||||
BGIangle dd ?
|
BGIangle dd ?
|
||||||
Xscale dd ?
|
Xscale dd ?
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
; Last changed: February 2, 2005
|
; Last changed: February 2, 2005
|
||||||
;
|
;
|
||||||
|
|
||||||
BGIFONT_PATH equ '/RD/1/'
|
BGIFONT_PATH equ '/RD/1/FONTS/'
|
||||||
_X equ 340
|
_X equ 340
|
||||||
_Y equ 240
|
_Y equ 240
|
||||||
|
|
||||||
@ -35,8 +35,8 @@ macro ListFonts
|
|||||||
mcall 47,0x80100,,,0x10ffffff
|
mcall 47,0x80100,,,0x10ffffff
|
||||||
jecxz .nofont
|
jecxz .nofont
|
||||||
lea ebx,[edx+80 shl 16+12]
|
lea ebx,[edx+80 shl 16+12]
|
||||||
mov edx,_BGIfont_Prepare.dest+8
|
mov edx,_BGIfont_Prepare.fontfullname
|
||||||
mov esi,BGIfont_Coo-1
|
mov esi,_BGIfont_Prepare.fontattr-1
|
||||||
sub esi,edx
|
sub esi,edx
|
||||||
add ecx,0x3b800b8
|
add ecx,0x3b800b8
|
||||||
BGIfont_Outtext
|
BGIfont_Outtext
|
||||||
|
@ -143,10 +143,6 @@ macro mcall a,b,c,d,e,f { ; mike.dld
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; optimize the code for size
|
; optimize the code for size
|
||||||
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp>
|
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp>
|
||||||
|
|
||||||
@ -178,7 +174,7 @@ macro sub arg1,arg2
|
|||||||
|
|
||||||
macro mov arg1,arg2
|
macro mov arg1,arg2
|
||||||
{
|
{
|
||||||
if (arg1 in __regs) & (arg2 eqtype 0)
|
if (arg1 in __regs) & ((arg2 eqtype 0) | (arg2 eqtype '0'))
|
||||||
if (arg2) = 0
|
if (arg2) = 0
|
||||||
xor arg1,arg1
|
xor arg1,arg1
|
||||||
else if (arg2) = 1
|
else if (arg2) = 1
|
||||||
@ -222,7 +218,13 @@ struc process_information
|
|||||||
.x_size dd ? ; +42
|
.x_size dd ? ; +42
|
||||||
.y_size dd ? ; +46
|
.y_size dd ? ; +46
|
||||||
.slot_state dw ? ; +50
|
.slot_state dw ? ; +50
|
||||||
rb (1024-52)
|
dw ? ; +52 - reserved
|
||||||
|
.client_left dd ? ; +54
|
||||||
|
.client_top dd ? ; +58
|
||||||
|
.client_width dd ? ; +62
|
||||||
|
.client_height dd ? ; +66
|
||||||
|
.wnd_state db ? ; +70
|
||||||
|
rb (1024-71)
|
||||||
}
|
}
|
||||||
struct process_information
|
struct process_information
|
||||||
|
|
||||||
|
@ -1,206 +0,0 @@
|
|||||||
;
|
|
||||||
; COLOR TABLE
|
|
||||||
;
|
|
||||||
; Compile with FASM for Menuet
|
|
||||||
;
|
|
||||||
|
|
||||||
use32
|
|
||||||
|
|
||||||
org 0x0
|
|
||||||
|
|
||||||
db 'MENUET00' ; 8 byte id
|
|
||||||
dd 38 ; required os
|
|
||||||
dd START ; program start
|
|
||||||
dd I_END ; program image size
|
|
||||||
dd 0x1000 ; required amount of memory
|
|
||||||
dd 0x1000 ; esp = 0x7FFF0
|
|
||||||
dd 0x00000000 ; reserved=no extended header
|
|
||||||
|
|
||||||
include 'lang.inc'
|
|
||||||
include 'macros.inc'
|
|
||||||
|
|
||||||
|
|
||||||
START: ; start of execution
|
|
||||||
|
|
||||||
call shape_window
|
|
||||||
|
|
||||||
call draw_window ; at first, draw the window
|
|
||||||
|
|
||||||
still:
|
|
||||||
|
|
||||||
mov eax,10 ; wait here for event
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
cmp eax,1 ; redraw request ?
|
|
||||||
jz red
|
|
||||||
cmp eax,2 ; key in buffer ?
|
|
||||||
jz key
|
|
||||||
cmp eax,3 ; button in buffer ?
|
|
||||||
jz button
|
|
||||||
|
|
||||||
jmp still
|
|
||||||
|
|
||||||
red: ; redraw
|
|
||||||
call draw_window
|
|
||||||
jmp still
|
|
||||||
|
|
||||||
key: ; key
|
|
||||||
mov eax,2 ; just read it and ignore
|
|
||||||
int 0x40
|
|
||||||
jmp still
|
|
||||||
|
|
||||||
button: ; button
|
|
||||||
mov eax,17 ; get id
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
cmp ah,1 ; button id=1 ?
|
|
||||||
jnz noclose
|
|
||||||
mov eax,0xffffffff ; close this program
|
|
||||||
int 0x40
|
|
||||||
noclose:
|
|
||||||
|
|
||||||
jmp still
|
|
||||||
|
|
||||||
|
|
||||||
shape_window:
|
|
||||||
|
|
||||||
pusha
|
|
||||||
|
|
||||||
mov eax,50 ; give the address of reference area
|
|
||||||
mov ebx,0
|
|
||||||
mov ecx,shape_reference
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
mov eax,50 ; give the scaling ( 5 -> 2^5 )
|
|
||||||
mov ebx,1
|
|
||||||
mov ecx,5
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
popa
|
|
||||||
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
shape_reference:
|
|
||||||
|
|
||||||
db 1,0,1,0,1,0,1,0
|
|
||||||
db 0,1,0,1,0,1,0,1
|
|
||||||
db 1,0,1,0,1,0,1,0
|
|
||||||
db 0,1,0,1,0,1,0,1
|
|
||||||
db 1,0,1,0,1,0,1,0
|
|
||||||
db 0,1,0,1,0,1,0,1
|
|
||||||
db 1,0,1,0,1,0,1,0
|
|
||||||
db 0,1,0,1,0,1,0,1
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; *********************************************
|
|
||||||
; ******* WINDOW DEFINITIONS AND DRAW ********
|
|
||||||
; *********************************************
|
|
||||||
|
|
||||||
|
|
||||||
draw_window:
|
|
||||||
|
|
||||||
mov eax,12 ; function 12:tell os about windowdraw
|
|
||||||
mov ebx,1 ; 1, start of draw
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
; DRAW WINDOW
|
|
||||||
mov eax,0 ; function 0 : define and draw window
|
|
||||||
mov ebx,100*65536+255 ; [x start] *65536 + [x size]
|
|
||||||
mov ecx,100*65536+255 ; [y start] *65536 + [y size]
|
|
||||||
mov edx,0x00000000
|
|
||||||
mov esi,0x8099bbff ; color of grab bar RRGGBB,8->color glide
|
|
||||||
mov edi,0x0099bbee ; color of frames RRGGBB
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
call draw_colors
|
|
||||||
|
|
||||||
; CLOSE BUTTON
|
|
||||||
mov eax,8 ; function 8 : define and draw button
|
|
||||||
mov ebx,5*65536+12 ; [x start] *65536 + [x size]
|
|
||||||
mov ecx,5*65536+12 ; [y start] *65536 + [y size]
|
|
||||||
mov edx,1 ; button id
|
|
||||||
mov esi,0xccaa22 ; button color RRGGBB
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
mov eax,12 ; function 12:tell os about windowdraw
|
|
||||||
mov ebx,2 ; 2, end of draw
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
draw_colors:
|
|
||||||
|
|
||||||
pusha
|
|
||||||
|
|
||||||
mov [bar],dword 0
|
|
||||||
|
|
||||||
mov eax,-1
|
|
||||||
mov ebx,0
|
|
||||||
mov ecx,0
|
|
||||||
mov edx,0
|
|
||||||
|
|
||||||
mov edi,0
|
|
||||||
|
|
||||||
dc1:
|
|
||||||
|
|
||||||
add eax,1
|
|
||||||
cmp eax,256
|
|
||||||
jb na1
|
|
||||||
mov eax,0
|
|
||||||
add ebx,1
|
|
||||||
cmp ebx,256
|
|
||||||
jb na1
|
|
||||||
mov ebx,0
|
|
||||||
add ecx,5
|
|
||||||
na1:
|
|
||||||
|
|
||||||
mov dl,al
|
|
||||||
shl edx,8
|
|
||||||
mov dl,bl
|
|
||||||
shl edx,8
|
|
||||||
mov dl,cl
|
|
||||||
|
|
||||||
na2:
|
|
||||||
|
|
||||||
pusha
|
|
||||||
push edx
|
|
||||||
|
|
||||||
xor edx,edx
|
|
||||||
mov eax,edi
|
|
||||||
mov ebx,256
|
|
||||||
div ebx
|
|
||||||
mov ebx,edx
|
|
||||||
mov ecx,eax
|
|
||||||
|
|
||||||
add ebx,[addx]
|
|
||||||
add ecx,[addy]
|
|
||||||
|
|
||||||
pop edx
|
|
||||||
mov eax,1
|
|
||||||
int 0x40
|
|
||||||
popa
|
|
||||||
|
|
||||||
add edi,1
|
|
||||||
|
|
||||||
cmp edi,256*256
|
|
||||||
jb dc1
|
|
||||||
|
|
||||||
popa
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; DATA AREA
|
|
||||||
|
|
||||||
I_END:
|
|
||||||
|
|
||||||
bar dd ?
|
|
||||||
|
|
||||||
add1 dd ?
|
|
||||||
add2 dd ?
|
|
||||||
|
|
||||||
addx dd ?
|
|
||||||
addy dd ?
|
|
@ -20,7 +20,7 @@ use32
|
|||||||
db "MENUET01"
|
db "MENUET01"
|
||||||
dd 0x01
|
dd 0x01
|
||||||
dd ENTRANCE
|
dd ENTRANCE
|
||||||
dd I_END
|
dd EYES_END
|
||||||
dd 0x3000
|
dd 0x3000
|
||||||
dd 0x3000
|
dd 0x3000
|
||||||
dd 0x0
|
dd 0x0
|
||||||
@ -30,9 +30,280 @@ include 'macros.inc'
|
|||||||
ENTRANCE: ; start of code
|
ENTRANCE: ; start of code
|
||||||
|
|
||||||
; ==== main ====
|
; ==== main ====
|
||||||
|
|
||||||
|
call prepare_eyes
|
||||||
|
|
||||||
|
call shape_window
|
||||||
|
|
||||||
|
still:
|
||||||
|
|
||||||
|
call draw_eyes ; draw those funny "eyes"
|
||||||
|
|
||||||
|
mov eax,23 ; wait for event with timeout
|
||||||
|
mov ebx,TIMEOUT
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
cmp eax,1 ; redraw ?
|
||||||
|
jnz no_draw
|
||||||
|
call redraw_overlap
|
||||||
|
no_draw:
|
||||||
|
|
||||||
|
cmp eax,2 ; key ?
|
||||||
|
jz key
|
||||||
|
|
||||||
|
cmp eax,3 ; button ?
|
||||||
|
jz button
|
||||||
|
|
||||||
|
jmp still ; loop
|
||||||
|
|
||||||
|
; EVENTS
|
||||||
|
|
||||||
|
key:
|
||||||
|
mov eax,2 ; just read and ignore
|
||||||
|
int 0x40
|
||||||
|
jmp still
|
||||||
|
|
||||||
|
button: ; analyze button
|
||||||
|
mov eax,-1 ; this is button 1 - we have only one button :-)
|
||||||
|
int 0x40
|
||||||
|
jmp still
|
||||||
|
|
||||||
|
; -====- declarations -====-
|
||||||
|
|
||||||
|
imagedata equ EYES_END
|
||||||
|
skindata equ EYES_END+925
|
||||||
|
winref equ EYES_END+6325
|
||||||
|
|
||||||
|
; -====- shape -====-
|
||||||
|
|
||||||
|
shape_window:
|
||||||
|
|
||||||
|
mov eax,50 ; set up shape reference area
|
||||||
|
mov ebx,0
|
||||||
|
mov ecx,winref
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
; -====- redrawing -====-
|
||||||
|
|
||||||
|
draw_eyes: ; check mousepos to disable blinking
|
||||||
|
|
||||||
|
mov eax,37
|
||||||
|
xor ebx,ebx
|
||||||
|
int 0x40
|
||||||
|
cmp dword [mouse],eax
|
||||||
|
jne redraw_ok
|
||||||
|
ret
|
||||||
|
redraw_ok:
|
||||||
|
mov [mouse],eax
|
||||||
|
|
||||||
|
redraw_overlap: ; label for redraw event (without checkmouse)
|
||||||
|
|
||||||
|
mov eax,12
|
||||||
|
mov ebx,1
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
xor eax,eax ; define window
|
||||||
|
mov ebx,[win_ebx]
|
||||||
|
mov ecx,[win_ecx]
|
||||||
|
xor edx,edx
|
||||||
|
xor esi,esi
|
||||||
|
xor edi,edi
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
mov eax,8 ; define closebutton
|
||||||
|
mov ebx,60
|
||||||
|
mov ecx,45
|
||||||
|
mov edx,1
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
mov eax,7
|
||||||
|
mov ebx,skindata
|
||||||
|
mov ecx,60*65536+30
|
||||||
|
mov edx,15
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
mov eax,15
|
||||||
|
mov ebx,30
|
||||||
|
call draw_eye_point
|
||||||
|
add eax,30
|
||||||
|
call draw_eye_point
|
||||||
|
|
||||||
|
mov eax,12
|
||||||
|
mov ebx,2
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
draw_eye_point: ; draw eye point (EAX=X, EBX=Y)
|
||||||
|
pusha
|
||||||
|
|
||||||
|
mov ecx, [mouse] ; ecx = mousex, edx = mousey
|
||||||
|
mov edx,ecx
|
||||||
|
shr ecx,16
|
||||||
|
and edx,0xFFFF
|
||||||
|
|
||||||
|
; ===> calculate position
|
||||||
|
|
||||||
|
push eax
|
||||||
|
push ebx
|
||||||
|
mov byte [sign1],0
|
||||||
|
mov esi, [win_ebx]
|
||||||
|
shr esi,16
|
||||||
|
add eax,esi
|
||||||
|
sub ecx,eax ; ECX=ECX-EAX (signed) , ECX=|ECX|
|
||||||
|
jnc abs_ok_1
|
||||||
|
neg ecx
|
||||||
|
mov byte [sign1],1
|
||||||
|
abs_ok_1:
|
||||||
|
mov [temp1],ecx
|
||||||
|
mov byte [sign2],0
|
||||||
|
mov esi,[win_ecx]
|
||||||
|
shr esi,16
|
||||||
|
add ebx,esi
|
||||||
|
sub edx,ebx ; EDX=EDX-EBX (signed) , EDX=|EDX|
|
||||||
|
jnc abs_ok_2
|
||||||
|
neg edx
|
||||||
|
mov byte [sign2],1
|
||||||
|
abs_ok_2:
|
||||||
|
mov [temp2],edx
|
||||||
|
pop ebx
|
||||||
|
pop eax
|
||||||
|
|
||||||
|
push eax ; ECX*=ECX
|
||||||
|
push edx
|
||||||
|
xor eax,eax
|
||||||
|
xor edx,edx
|
||||||
|
mov ax,cx
|
||||||
|
mul cx
|
||||||
|
shl edx,16
|
||||||
|
or eax,edx
|
||||||
|
mov ecx,eax
|
||||||
|
pop edx
|
||||||
|
pop eax
|
||||||
|
|
||||||
|
push eax ; EDX*=EDX
|
||||||
|
push ecx
|
||||||
|
mov ecx,edx
|
||||||
|
xor eax,eax
|
||||||
|
xor edx,edx
|
||||||
|
mov ax,cx
|
||||||
|
mul cx
|
||||||
|
shl edx,16
|
||||||
|
or eax,edx
|
||||||
|
mov edx,eax
|
||||||
|
pop ecx
|
||||||
|
pop eax
|
||||||
|
|
||||||
|
push ebx
|
||||||
|
push ecx
|
||||||
|
push edx
|
||||||
|
push eax
|
||||||
|
mov ebx,ecx ; EBX=ECX+EDX
|
||||||
|
add ebx,edx
|
||||||
|
xor edi,edi ; ESI=SQRT(EBX)
|
||||||
|
mov ecx,edi
|
||||||
|
mov edx,edi
|
||||||
|
inc edi
|
||||||
|
mov eax,edi
|
||||||
|
inc edi
|
||||||
|
sqrt_loop:
|
||||||
|
add ecx,eax
|
||||||
|
add eax,edi
|
||||||
|
inc edx
|
||||||
|
cmp ecx,ebx
|
||||||
|
jbe sqrt_loop
|
||||||
|
dec edx
|
||||||
|
mov esi,edx
|
||||||
|
mov ax,si ; ESI=ESI/7
|
||||||
|
mov dl,7
|
||||||
|
div dl
|
||||||
|
and ax,0xFF
|
||||||
|
mov si,ax ; ESI ? 0 : ESI=1
|
||||||
|
jnz nozeroflag1
|
||||||
|
mov si,1
|
||||||
|
nozeroflag1:
|
||||||
|
|
||||||
|
pop eax
|
||||||
|
pop edx
|
||||||
|
pop ecx
|
||||||
|
pop ebx
|
||||||
|
|
||||||
|
push eax ; ECX=[temp1]/ESI
|
||||||
|
push edx
|
||||||
|
mov eax,[temp1]
|
||||||
|
mov dx,si
|
||||||
|
div dl
|
||||||
|
mov cl,al
|
||||||
|
and ecx,0xFF
|
||||||
|
pop edx
|
||||||
|
pop eax
|
||||||
|
|
||||||
|
cmp byte [sign1],1
|
||||||
|
je subtract_1
|
||||||
|
add eax,ecx ; EAX=EAX+ECX
|
||||||
|
jmp calc_ok_1
|
||||||
|
subtract_1:
|
||||||
|
sub eax,ecx ; EAX=EAX-ECX
|
||||||
|
calc_ok_1:
|
||||||
|
|
||||||
|
push eax ; EDX=[temp2]/ESI
|
||||||
|
push ecx
|
||||||
|
mov eax,[temp2]
|
||||||
|
mov dx,si
|
||||||
|
div dl
|
||||||
|
mov dl,al
|
||||||
|
and dx,0xFF
|
||||||
|
pop ecx
|
||||||
|
pop eax
|
||||||
|
|
||||||
|
cmp byte [sign2],1
|
||||||
|
je subtract_2
|
||||||
|
add ebx,edx ; EBX=EBX+EDX
|
||||||
|
jmp calc_ok_2
|
||||||
|
subtract_2:
|
||||||
|
sub ebx,edx ; EBX=EBX-EDX
|
||||||
|
calc_ok_2:
|
||||||
|
|
||||||
|
; <===
|
||||||
|
|
||||||
|
mov ecx,ebx ; draw point
|
||||||
|
mov ebx,eax
|
||||||
|
mov eax,13
|
||||||
|
dec ecx
|
||||||
|
dec ecx
|
||||||
|
dec ebx
|
||||||
|
dec ebx
|
||||||
|
shl ecx,16
|
||||||
|
add ecx,4
|
||||||
|
shl ebx,16
|
||||||
|
add ebx,4
|
||||||
|
mov eax,13
|
||||||
|
xor edx,edx
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
popa
|
||||||
|
ret
|
||||||
|
|
||||||
|
; -====- working on images and window -====-
|
||||||
|
|
||||||
prepare_eyes:
|
prepare_eyes:
|
||||||
|
|
||||||
mov esi,imagedata ; transform grayscale to putimage format
|
;mov eax,6 ; load EYES.RAW
|
||||||
|
;mov ebx,graphix
|
||||||
|
;mov ecx,0x00000000
|
||||||
|
;mov edx,0xFFFFFFFF
|
||||||
|
;mov esi,imagedata
|
||||||
|
;int 0x40
|
||||||
|
;cmp eax,0xFFFFFFFF
|
||||||
|
;jnz filefound
|
||||||
|
|
||||||
|
;mov eax,-1 ; file not exists...
|
||||||
|
;int 0x40
|
||||||
|
|
||||||
|
;filefound:
|
||||||
|
mov esi,imagedata+25 ; transform grayscale to putimage format
|
||||||
mov edi,skindata
|
mov edi,skindata
|
||||||
mov ecx,30
|
mov ecx,30
|
||||||
transform_loop:
|
transform_loop:
|
||||||
@ -63,7 +334,7 @@ sub eax,30*65536
|
|||||||
mov [win_ebx],eax
|
mov [win_ebx],eax
|
||||||
mov [win_ecx],dword 10*65536+44
|
mov [win_ecx],dword 10*65536+44
|
||||||
|
|
||||||
mov esi,imagedata ; calculate shape reference area
|
mov esi,imagedata+25 ; calculate shape reference area
|
||||||
mov edi,winref
|
mov edi,winref
|
||||||
mov ecx,900 ; disable drag bar
|
mov ecx,900 ; disable drag bar
|
||||||
mov al,0
|
mov al,0
|
||||||
@ -80,203 +351,19 @@ call copy_line
|
|||||||
pop ecx
|
pop ecx
|
||||||
loop shape_loop
|
loop shape_loop
|
||||||
|
|
||||||
; -====- shape -====-
|
|
||||||
|
|
||||||
shape_window:
|
|
||||||
|
|
||||||
mov eax,50 ; set up shape reference area
|
|
||||||
xor ebx,ebx
|
|
||||||
mov ecx,winref
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
call draw_window
|
|
||||||
|
|
||||||
still:
|
|
||||||
|
|
||||||
call draw_eyes ; draw those funny "eyes"
|
|
||||||
|
|
||||||
_wait:
|
|
||||||
mov eax,23 ; wait for event with timeout
|
|
||||||
mov ebx,TIMEOUT
|
|
||||||
int 0x40
|
|
||||||
dec eax
|
|
||||||
jz redraw
|
|
||||||
dec eax
|
|
||||||
jz key
|
|
||||||
dec eax
|
|
||||||
jnz still
|
|
||||||
button:
|
|
||||||
or eax, -1
|
|
||||||
int 0x40
|
|
||||||
key:
|
|
||||||
mov al, 2
|
|
||||||
int 0x40
|
|
||||||
jmp still
|
|
||||||
redraw:
|
|
||||||
call draw_window
|
|
||||||
call redraw_eyes
|
|
||||||
jmp _wait
|
|
||||||
|
|
||||||
; -====- redrawing -====-
|
|
||||||
|
|
||||||
draw_eyes: ; check mousepos to disable blinking
|
|
||||||
|
|
||||||
mov eax,37
|
|
||||||
xor ebx,ebx
|
|
||||||
int 0x40
|
|
||||||
cmp dword [mouse],eax
|
|
||||||
jne redraw_ok
|
|
||||||
ret
|
ret
|
||||||
redraw_ok:
|
|
||||||
mov [mouse],eax
|
|
||||||
|
|
||||||
redraw_eyes:
|
|
||||||
mov eax,7
|
|
||||||
mov ebx,skindata
|
|
||||||
mov ecx,60*65536+30
|
|
||||||
mov edx,15
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
mov eax,15
|
|
||||||
mov ebx,30
|
|
||||||
call draw_eye_point
|
|
||||||
add eax,30
|
|
||||||
call draw_eye_point
|
|
||||||
ret
|
|
||||||
|
|
||||||
draw_window:
|
|
||||||
|
|
||||||
mov eax,12
|
|
||||||
mov ebx,1
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
xor eax,eax ; define window
|
|
||||||
mov ebx,[win_ebx]
|
|
||||||
mov ecx,[win_ecx]
|
|
||||||
xor edx,edx
|
|
||||||
xor esi,esi
|
|
||||||
xor edi,edi
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
mov eax,8 ; define closebutton
|
|
||||||
mov ebx,60
|
|
||||||
mov ecx,45
|
|
||||||
mov edx,1
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
mov eax,12
|
|
||||||
mov ebx,2
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
ret
|
|
||||||
|
|
||||||
draw_eye_point: ; draw eye point (EAX=X, EBX=Y)
|
|
||||||
pusha
|
|
||||||
|
|
||||||
movzx ecx, word [mouse+2] ; ecx = mousex, esi = mousey
|
|
||||||
movzx esi, word [mouse]
|
|
||||||
|
|
||||||
; ===> calculate position
|
|
||||||
|
|
||||||
push eax
|
|
||||||
push ebx
|
|
||||||
mov byte [sign1],0
|
|
||||||
mov edx, [win_ebx]
|
|
||||||
shr edx,16
|
|
||||||
add eax,edx
|
|
||||||
sub ecx,eax ; ECX=ECX-EAX (signed) , ECX=|ECX|
|
|
||||||
jnc abs_ok_1
|
|
||||||
neg ecx
|
|
||||||
mov byte [sign1],1
|
|
||||||
abs_ok_1:
|
|
||||||
push ecx ; save x distance
|
|
||||||
mov byte [sign2],0
|
|
||||||
mov edx,[win_ecx]
|
|
||||||
shr edx,16
|
|
||||||
add ebx,edx
|
|
||||||
sub esi,ebx ; EDX=EDX-EBX (signed) , EDX=|EDX|
|
|
||||||
jnc abs_ok_2
|
|
||||||
neg esi
|
|
||||||
mov byte [sign2],1
|
|
||||||
abs_ok_2:
|
|
||||||
mov [temp2],esi
|
|
||||||
|
|
||||||
; ESI = ECX*ECX+ESI*ESI
|
|
||||||
imul ecx, ecx
|
|
||||||
imul esi, esi
|
|
||||||
add esi, ecx
|
|
||||||
|
|
||||||
xor ecx,ecx ; EDX=SQRT(EBX)
|
|
||||||
xor edx,edx
|
|
||||||
mov eax,1
|
|
||||||
sqrt_loop:
|
|
||||||
; in this moment ecx=edx*edx, eax=1+2*edx
|
|
||||||
add ecx,eax
|
|
||||||
inc eax
|
|
||||||
inc eax
|
|
||||||
inc edx
|
|
||||||
cmp ecx,esi
|
|
||||||
jbe sqrt_loop
|
|
||||||
dec edx
|
|
||||||
mov eax,edx ; EDX=EDX/7
|
|
||||||
mov dl,7
|
|
||||||
div dl
|
|
||||||
and eax,0xFF
|
|
||||||
mov edx,eax ; EDX ? 0 : EDX=1
|
|
||||||
jnz nozeroflag1
|
|
||||||
inc edx
|
|
||||||
nozeroflag1:
|
|
||||||
|
|
||||||
pop eax ; EAX = x distance
|
|
||||||
; ECX=EAX/EDX
|
|
||||||
div dl
|
|
||||||
movzx ecx,al
|
|
||||||
pop ebx
|
|
||||||
pop eax
|
|
||||||
|
|
||||||
cmp byte [sign1], 0
|
|
||||||
jz @f
|
|
||||||
neg ecx
|
|
||||||
@@:
|
|
||||||
add eax, ecx
|
|
||||||
|
|
||||||
push eax ; ESI=[temp2]/EDX
|
|
||||||
mov eax,[temp2]
|
|
||||||
div dl
|
|
||||||
movzx esi,al
|
|
||||||
pop eax
|
|
||||||
|
|
||||||
cmp byte [sign2], 0
|
|
||||||
jz @f
|
|
||||||
neg esi
|
|
||||||
@@:
|
|
||||||
add ebx, esi
|
|
||||||
|
|
||||||
; <===
|
|
||||||
|
|
||||||
; draw point
|
|
||||||
lea ecx, [ebx-2]
|
|
||||||
lea ebx, [eax-2]
|
|
||||||
shl ecx,16
|
|
||||||
add ecx,4
|
|
||||||
shl ebx,16
|
|
||||||
add ebx,4
|
|
||||||
mov eax,13
|
|
||||||
xor edx,edx
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
popa
|
|
||||||
ret
|
|
||||||
|
|
||||||
; -====- working on images and window -====-
|
|
||||||
|
|
||||||
copy_line: ; copy single line to shape reference area
|
copy_line: ; copy single line to shape reference area
|
||||||
mov ecx,30
|
mov ecx,30
|
||||||
cpl_loop:
|
cpl_loop:
|
||||||
lodsb
|
lodsb
|
||||||
; input is image: 0xFF = white pixel, 0 = black pixel
|
cmp al,0xFF
|
||||||
; output is membership boolean: 0 = pixel no, 1 = pixel ok
|
jnz set_one
|
||||||
inc eax
|
mov al,0
|
||||||
|
jmp cpl_ok
|
||||||
|
set_one:
|
||||||
|
mov al,1
|
||||||
|
cpl_ok:
|
||||||
stosb
|
stosb
|
||||||
loop cpl_loop
|
loop cpl_loop
|
||||||
ret
|
ret
|
||||||
@ -288,19 +375,14 @@ ret
|
|||||||
win_ebx dd 0x0
|
win_ebx dd 0x0
|
||||||
win_ecx dd 0x0
|
win_ecx dd 0x0
|
||||||
mouse dd 0xFFFFFFFF
|
mouse dd 0xFFFFFFFF
|
||||||
|
;graphix db "EYES.RAW "
|
||||||
EYES_END: ; end of code
|
|
||||||
imagedata:
|
|
||||||
; texture is 900 bytes starting from 25th
|
|
||||||
file "eyes.raw":25,900
|
|
||||||
I_END:
|
|
||||||
|
|
||||||
; temporary storage for math routines
|
; temporary storage for math routines
|
||||||
|
|
||||||
sign1 db ?
|
temp1 dd 0
|
||||||
sign2 db ?
|
temp2 dd 0
|
||||||
align 4
|
sign1 db 0
|
||||||
temp2 dd ?
|
sign2 db 0
|
||||||
|
|
||||||
skindata rb 60*30*3
|
EYES_END: ; end of code
|
||||||
winref rb 45*60
|
file "EYES.RAW"
|
||||||
|
@ -143,10 +143,6 @@ macro mcall a,b,c,d,e,f { ; mike.dld
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; optimize the code for size
|
; optimize the code for size
|
||||||
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp>
|
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp>
|
||||||
|
|
||||||
@ -178,7 +174,7 @@ macro sub arg1,arg2
|
|||||||
|
|
||||||
macro mov arg1,arg2
|
macro mov arg1,arg2
|
||||||
{
|
{
|
||||||
if (arg1 in __regs) & (arg2 eqtype 0)
|
if (arg1 in __regs) & ((arg2 eqtype 0) | (arg2 eqtype '0'))
|
||||||
if (arg2) = 0
|
if (arg2) = 0
|
||||||
xor arg1,arg1
|
xor arg1,arg1
|
||||||
else if (arg2) = 1
|
else if (arg2) = 1
|
||||||
@ -222,7 +218,13 @@ struc process_information
|
|||||||
.x_size dd ? ; +42
|
.x_size dd ? ; +42
|
||||||
.y_size dd ? ; +46
|
.y_size dd ? ; +46
|
||||||
.slot_state dw ? ; +50
|
.slot_state dw ? ; +50
|
||||||
rb (1024-52)
|
dw ? ; +52 - reserved
|
||||||
|
.client_left dd ? ; +54
|
||||||
|
.client_top dd ? ; +58
|
||||||
|
.client_width dd ? ; +62
|
||||||
|
.client_height dd ? ; +66
|
||||||
|
.wnd_state db ? ; +70
|
||||||
|
rb (1024-71)
|
||||||
}
|
}
|
||||||
struct process_information
|
struct process_information
|
||||||
|
|
||||||
|
2
programs/demos/fire/trunk/build.bat
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
@fasm fire.asm fire
|
||||||
|
@pause
|
@ -1,4 +0,0 @@
|
|||||||
@erase lang.inc
|
|
||||||
@echo lang fix en >lang.inc
|
|
||||||
@fasm fire.asm fire
|
|
||||||
@pause
|
|
@ -1,4 +0,0 @@
|
|||||||
@erase lang.inc
|
|
||||||
@echo lang fix ru >lang.inc
|
|
||||||
@fasm fire.asm fire
|
|
||||||
@pause
|
|
@ -13,7 +13,6 @@ use32
|
|||||||
dd mem_end
|
dd mem_end
|
||||||
dd 0,0 ; no parameters, no path
|
dd 0,0 ; no parameters, no path
|
||||||
|
|
||||||
;include 'lang.inc'
|
|
||||||
include 'macros.inc'
|
include 'macros.inc'
|
||||||
|
|
||||||
START:
|
START:
|
||||||
|
@ -143,10 +143,6 @@ macro mcall a,b,c,d,e,f { ; mike.dld
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; optimize the code for size
|
; optimize the code for size
|
||||||
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp>
|
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp>
|
||||||
|
|
||||||
@ -178,7 +174,7 @@ macro sub arg1,arg2
|
|||||||
|
|
||||||
macro mov arg1,arg2
|
macro mov arg1,arg2
|
||||||
{
|
{
|
||||||
if (arg1 in __regs) & (arg2 eqtype 0)
|
if (arg1 in __regs) & ((arg2 eqtype 0) | (arg2 eqtype '0'))
|
||||||
if (arg2) = 0
|
if (arg2) = 0
|
||||||
xor arg1,arg1
|
xor arg1,arg1
|
||||||
else if (arg2) = 1
|
else if (arg2) = 1
|
||||||
@ -222,7 +218,13 @@ struc process_information
|
|||||||
.x_size dd ? ; +42
|
.x_size dd ? ; +42
|
||||||
.y_size dd ? ; +46
|
.y_size dd ? ; +46
|
||||||
.slot_state dw ? ; +50
|
.slot_state dw ? ; +50
|
||||||
rb (1024-52)
|
dw ? ; +52 - reserved
|
||||||
|
.client_left dd ? ; +54
|
||||||
|
.client_top dd ? ; +58
|
||||||
|
.client_width dd ? ; +62
|
||||||
|
.client_height dd ? ; +66
|
||||||
|
.wnd_state db ? ; +70
|
||||||
|
rb (1024-71)
|
||||||
}
|
}
|
||||||
struct process_information
|
struct process_information
|
||||||
|
|
||||||
|
2
programs/demos/fire2/trunk/build.bat
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
@fasm fire2.asm fire2
|
||||||
|
@pause
|
@ -1,4 +0,0 @@
|
|||||||
@erase lang.inc
|
|
||||||
@echo lang fix en >lang.inc
|
|
||||||
@fasm fire2.asm fire2
|
|
||||||
@pause
|
|
@ -9,7 +9,6 @@ use32
|
|||||||
dd mem_end
|
dd mem_end
|
||||||
dd 0x0, 0x0
|
dd 0x0, 0x0
|
||||||
|
|
||||||
;include 'lang.inc'
|
|
||||||
START:
|
START:
|
||||||
|
|
||||||
mov edi, my_img
|
mov edi, my_img
|
||||||
|
@ -143,9 +143,6 @@ macro mcall a,b,c,d,e,f { ; mike.dld
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; optimize the code for size
|
; optimize the code for size
|
||||||
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp>
|
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp>
|
||||||
|
|
||||||
@ -177,7 +174,7 @@ macro sub arg1,arg2
|
|||||||
|
|
||||||
macro mov arg1,arg2
|
macro mov arg1,arg2
|
||||||
{
|
{
|
||||||
if (arg1 in __regs) & (arg2 eqtype 0)
|
if (arg1 in __regs) & ((arg2 eqtype 0) | (arg2 eqtype '0'))
|
||||||
if (arg2) = 0
|
if (arg2) = 0
|
||||||
xor arg1,arg1
|
xor arg1,arg1
|
||||||
else if (arg2) = 1
|
else if (arg2) = 1
|
||||||
@ -221,7 +218,13 @@ struc process_information
|
|||||||
.x_size dd ? ; +42
|
.x_size dd ? ; +42
|
||||||
.y_size dd ? ; +46
|
.y_size dd ? ; +46
|
||||||
.slot_state dw ? ; +50
|
.slot_state dw ? ; +50
|
||||||
rb (1024-52)
|
dw ? ; +52 - reserved
|
||||||
|
.client_left dd ? ; +54
|
||||||
|
.client_top dd ? ; +58
|
||||||
|
.client_width dd ? ; +62
|
||||||
|
.client_height dd ? ; +66
|
||||||
|
.wnd_state db ? ; +70
|
||||||
|
rb (1024-71)
|
||||||
}
|
}
|
||||||
struct process_information
|
struct process_information
|
||||||
|
|
||||||
|
@ -146,7 +146,6 @@ macro mcall a,b,c,d,e,f { ; mike.dld
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; optimize the code for size
|
; optimize the code for size
|
||||||
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp>
|
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp>
|
||||||
|
|
@ -22,7 +22,7 @@ APP_MEMORY = 0x00800000
|
|||||||
|
|
||||||
;; Menuet header
|
;; Menuet header
|
||||||
|
|
||||||
appname equ "FASM "
|
appname equ "flat assembler "
|
||||||
|
|
||||||
use32
|
use32
|
||||||
|
|
||||||
@ -392,11 +392,11 @@ text:
|
|||||||
s_compile db 'COMPILE'
|
s_compile db 'COMPILE'
|
||||||
s_run db ' RUN '
|
s_run db ' RUN '
|
||||||
|
|
||||||
infile db 'EXAMPLE.ASM'
|
infile db 'example.asm'
|
||||||
times MAX_PATH+$-infile db 0
|
times MAX_PATH+$-infile db 0
|
||||||
outfile db 'EXAMPLE'
|
outfile db 'example'
|
||||||
times MAX_PATH+$-outfile db 0
|
times MAX_PATH+$-outfile db 0
|
||||||
path db '/RD/1/'
|
path db '/rd/1/'
|
||||||
times MAX_PATH+$-path db 0
|
times MAX_PATH+$-path db 0
|
||||||
|
|
||||||
lf db 13,10,0
|
lf db 13,10,0
|
||||||
|
@ -33,7 +33,7 @@
|
|||||||
; cannot simply be copied and put under another distribution licence
|
; cannot simply be copied and put under another distribution licence
|
||||||
; (including the GNU Public Licence).
|
; (including the GNU Public Licence).
|
||||||
|
|
||||||
VERSION_STRING equ "1.67.13"
|
VERSION_STRING equ "1.67.14"
|
||||||
|
|
||||||
VERSION_MAJOR = 1
|
VERSION_MAJOR = 1
|
||||||
VERSION_MINOR = 67
|
VERSION_MINOR = 67
|
||||||
|
@ -223,6 +223,10 @@ basic_instruction:
|
|||||||
cdq
|
cdq
|
||||||
cmp ecx,edx
|
cmp ecx,edx
|
||||||
jne value_out_of_range
|
jne value_out_of_range
|
||||||
|
cmp [value_type],4
|
||||||
|
jne get_simm32_ok
|
||||||
|
mov [value_type],2
|
||||||
|
get_simm32_ok:
|
||||||
ret
|
ret
|
||||||
basic_reg:
|
basic_reg:
|
||||||
lods byte [esi]
|
lods byte [esi]
|
||||||
@ -6019,6 +6023,9 @@ get_address:
|
|||||||
mov edx,[symbol_identifier]
|
mov edx,[symbol_identifier]
|
||||||
mov [address_symbol],edx
|
mov [address_symbol],edx
|
||||||
mov edx,eax
|
mov edx,eax
|
||||||
|
ror ecx,16
|
||||||
|
mov cl,[value_type]
|
||||||
|
rol ecx,16
|
||||||
mov bx,0FF00h
|
mov bx,0FF00h
|
||||||
address_ok:
|
address_ok:
|
||||||
ret
|
ret
|
||||||
|
2
programs/develop/mtdbg/build.bat
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
@fasm mtdbg.asm mtdbg
|
||||||
|
@pause
|
4825
programs/develop/mtdbg/mtdbg.asm
Normal file
203
programs/develop/mtdbg/mtdbg.txt
Normal file
@ -0,0 +1,203 @@
|
|||||||
|
Введение.
|
||||||
|
|
||||||
|
mtdbg представляет собой отладчик для операционной системы Kolibri. Данная
|
||||||
|
документация описывает возможности отладчика и работу с ним. Если нужны
|
||||||
|
какие-то возможности отладчика, которых ещё нет, либо обращайтесь на форум
|
||||||
|
meos.sysbin.com (раздел "Программы"), либо мыльте мне на адрес, указанный в
|
||||||
|
конце данного файла.
|
||||||
|
|
||||||
|
Общее описание.
|
||||||
|
|
||||||
|
В каждый момент времени mtdbg может отлаживать только одну программу. Назовём
|
||||||
|
такую программу загруженной для отладки. Если никакая программа не загружена,
|
||||||
|
абсолютное большинство действий по отладке недоступно.
|
||||||
|
|
||||||
|
mtdbg управляется командной строкой, вводимой с клавиатуры. Командная строка
|
||||||
|
изображается в нижней части окна отладчика. Обрабатываются стандартные клавиши
|
||||||
|
ввода Backspace,Delete,Home,End,стрелки влево/вправо.
|
||||||
|
Команды нечувствительны к регистру символов. В качестве разделителя
|
||||||
|
используется произвольное ненулевое число пробелов.
|
||||||
|
|
||||||
|
В любой момент отладчик можно завершить командой "quit" (без аргументов).
|
||||||
|
Впрочем, можно и просто нажать на кнопку закрытия в левом верхнем углу окна.
|
||||||
|
|
||||||
|
Запуск отладчика без параметров командной строки приводит к тому, что
|
||||||
|
никакая программа не загружена. Также mtdbg можно запускать с командной
|
||||||
|
строкой, в этом случае он попытается загрузить программу с именем, указанным
|
||||||
|
как первый аргумент командной строки, и параметрами, указанными как
|
||||||
|
последующие (если они есть).
|
||||||
|
|
||||||
|
Если никакая программа не загружена, то можно загрузить программу командой
|
||||||
|
load <полное имя исполняемого файла> [<аргументы>]
|
||||||
|
Например:
|
||||||
|
load /rd/1/example
|
||||||
|
LOAD /rd/1/aclock w200 h200
|
||||||
|
LoaD /hd0/1/menuetos/dosbox/dosbox
|
||||||
|
Всё, что стоит после первого пробела после имени исполняемого файла, дословно
|
||||||
|
передаётся программе в качестве командной строки.
|
||||||
|
Команда load сообщает о результате в окне сообщений (немного выше окна
|
||||||
|
командной строки). Если программу удалось загрузить, то об этом появится
|
||||||
|
соответствующее сообщение; если не удалось, то в сообщении будет указана
|
||||||
|
причина ошибки. Наиболее вероятная - "file not found", если неправильно указано
|
||||||
|
имя файла.
|
||||||
|
Может случиться так, что загруженная программа упакована. Общий принцип
|
||||||
|
упаковки программ следующий: сначала исходный файл пакуется (каким-нибудь
|
||||||
|
алгоритмом сжатия), потом приписывается небольшой по размеру код, который
|
||||||
|
получает управление при запуске программы, распаковывает в памяти исходный код,
|
||||||
|
после чего передаёт ему управление. Если программа упакована, то её "настоящий"
|
||||||
|
код не виден и для отладки нужно предварительно пройти код распаковщика.
|
||||||
|
mtdbg определяет большинство существующих упаковщиков (mxp,mxp_lzo,mxp_nrv,
|
||||||
|
mtappack) и в этом случае предлагает автоматически пройти до "настоящего" кода.
|
||||||
|
Рекомендуется согласиться (нажать 'y' или <Enter>), но можно и отказаться.
|
||||||
|
При отказе и в случае, когда программа упакована чем-то неизвестным, можно
|
||||||
|
использовать команду "unpack" (без аргументов). Вызывайте её только в случае,
|
||||||
|
когда вы уверены, что программа упакована и что управление ещё не дошло до
|
||||||
|
основного кода!
|
||||||
|
|
||||||
|
Загруженную программу можно прибить командой "terminate" (без аргументов).
|
||||||
|
Команда "detach" (без аргументов) отключается от программы, после чего
|
||||||
|
программа продолжает выполняться нормально, как если бы отладчика не было.
|
||||||
|
После обеих этих команд программа перестаёт быть отлаживаемой.
|
||||||
|
|
||||||
|
Можно заново загрузить программу для отладки командой "reload" (без
|
||||||
|
аргументов). Если уже есть загруженная программа, то она прибивается и
|
||||||
|
запускается (с самого начала) новый экземпляр (с той же командной строкой),
|
||||||
|
в этом случае команда аналогична командам
|
||||||
|
terminate
|
||||||
|
load <last program name> <last program arguments>
|
||||||
|
В противном случае заново загружается программа, которую отлаживали последней
|
||||||
|
(в текущем сеансе работы с mtdbg) (с той же командной строкой), т.е. почти то
|
||||||
|
же самое, что и
|
||||||
|
load <last program name> <last program arguments>,
|
||||||
|
но команда reload в обоих случаях короче и удобнее; кроме того, load считает,
|
||||||
|
что загружается новая программа, и переводит окно данных (см. ниже) на
|
||||||
|
нулевой адрес, а reload сохраняет текущий адрес.
|
||||||
|
|
||||||
|
Всегда доступна команда "help", которую можно сокращать до "h".
|
||||||
|
Все команды разбиты на группы.
|
||||||
|
help без аргументов показывает список групп команд.
|
||||||
|
help с указанием группы выводит список команд этой группы с краткими
|
||||||
|
комментариями.
|
||||||
|
help с указанием команды выводит информацию о заданной команде.
|
||||||
|
Например:
|
||||||
|
help
|
||||||
|
help control
|
||||||
|
h LoaD
|
||||||
|
|
||||||
|
Окно отладчика состоит из следующих элементов, перечисляемых сверху вниз:
|
||||||
|
- строка состояния. При наличии загруженной программы показывает ее имя и
|
||||||
|
состояние ("Running"/"Paused"), при отсутствии сообщает "No program loaded".
|
||||||
|
- окно регистров - показывает значения регистров общего назначения, регистра
|
||||||
|
eip и регистра флагов. Последний записан двумя способами: полное hex-значение
|
||||||
|
и состояния отдельных флагов: CF,PF,AF,ZF,SF,DF,OF: если флаг сброшен, то
|
||||||
|
изображается маленькая буква, если установлен, то заглавная.
|
||||||
|
Регистры, изменившиеся с предыдущего момента, подсвечиваются зеленым.
|
||||||
|
- окно данных (окно дампа) - показывает содержимое памяти загруженной программы
|
||||||
|
- окно кода (окно дизассемблера) - показывает код программы в виде
|
||||||
|
дизассемблированных инструкций
|
||||||
|
- окно сообщений
|
||||||
|
- окно командной строки
|
||||||
|
|
||||||
|
В окне дампа можно просматривать данные, начиная с любого адреса, для этого
|
||||||
|
есть команда
|
||||||
|
d <выражение>
|
||||||
|
Команда d без аргументов пролистывает окно дампа вниз.
|
||||||
|
То же самое относится к окну кода и команде
|
||||||
|
u <выражение>
|
||||||
|
или просто u.
|
||||||
|
Например:
|
||||||
|
d esi - показывает данные, находящиеся по адресу esi (например, полезна перед
|
||||||
|
выполнением инструкции rep movsb)
|
||||||
|
d esp - показывает стек
|
||||||
|
u eip - дизассемблирует инструкции, начиная с текущей
|
||||||
|
|
||||||
|
Выражения в mtdbg могут включать
|
||||||
|
- шестнадцатеричные константы
|
||||||
|
- имена всех регистров общего назначения (8 32-битных, 8 16-битных и
|
||||||
|
8 8-битных) и регистра eip; значения 16- и 8-битных регистров расширяются
|
||||||
|
нулями до 32 бит
|
||||||
|
- четыре арифметические операции +,-,*,/ (со стандартными приоритетами) и
|
||||||
|
скобки.
|
||||||
|
Все вычисления производятся по модулю 2^32.
|
||||||
|
Примеры выражений:
|
||||||
|
eax
|
||||||
|
eip+2
|
||||||
|
ecx-esi-1F
|
||||||
|
al+AH*bl
|
||||||
|
ax + 2* bH*(eip+a73)
|
||||||
|
3*esi*di/EAX
|
||||||
|
Команда
|
||||||
|
? <выражение>
|
||||||
|
вычисляет значение указанного выражения.
|
||||||
|
|
||||||
|
Значения регистров загруженной программы можно изменять командой r, имеющей
|
||||||
|
две абсолютно эквивалентные формы:
|
||||||
|
r <регистр> <выражение>
|
||||||
|
r <регистр>=<выражение>
|
||||||
|
(в обоих случаях можно расставлять пробелы по вкусу). В качестве регистра можно
|
||||||
|
указывать любой из вышеупомянутых - 24 регистра общего назначения и eip.
|
||||||
|
|
||||||
|
|
||||||
|
Допустим, команда load успешно загрузила программу для отладки.
|
||||||
|
Сразу после загрузки программа приостановлена и не выполняется.
|
||||||
|
Нажатие Ctrl+F7 (аналог командной строки - команда "s") делает один шаг в
|
||||||
|
загруженной программе, после чего управление возвращается отладчику, который
|
||||||
|
показывает новое содержимое регистров и памяти. Системный вызов int 40h при
|
||||||
|
этом считается одним шагом.
|
||||||
|
Нажатие Ctrl+F8 (аналог командной строки - команда "p") также делает шаг в
|
||||||
|
загруженной программе, но при этом вызовы процедур, строковые операции с
|
||||||
|
префиксом rep/repz/repnz и циклы loop выполняются как один шаг.
|
||||||
|
Команды пошагового выполнения используются, как правило, на отдельных участках
|
||||||
|
программы, когда нужно, например, регулярно отслеживать значения регистров
|
||||||
|
и/или каких-то переменных в памяти.
|
||||||
|
Команда
|
||||||
|
g <выражение>
|
||||||
|
возобновляет выполнение программы и ждёт, пока управление дойдёт до
|
||||||
|
eip=соответствующему адресу, а в этот момент приостанавливает программу.
|
||||||
|
Команда "g" без аргументов просто возобновляет выполнение программы.
|
||||||
|
|
||||||
|
Приостановить выполнение программы можно командой "stop" (без аргументов).
|
||||||
|
|
||||||
|
Обычно требуется, чтобы программа нормально выполнялась, но при наступлении
|
||||||
|
определённых условий программа приостанавалась и управление получал отладчик.
|
||||||
|
Соответствующие условия называются точками останова, breakpoint(s), в
|
||||||
|
просторечии - бряками. Простейший тип точек останова - на конкретный адрес,
|
||||||
|
т.е. прерывать выполнение при eip=<заданное значение>. Такие точки останова
|
||||||
|
устанавливаются командой
|
||||||
|
bp <выражение>
|
||||||
|
Замечание. Если есть только одна такая точка останова, удобнее вместо неё
|
||||||
|
использовать команду "g" с аргументом.
|
||||||
|
|
||||||
|
Другой тип точек останова - по обращению к заданному участку памяти.
|
||||||
|
Таких точек останова может быть не больше четырёх (поскольку используются
|
||||||
|
аппаратные возможности процессоров x86, где допускаются только 4 таких точки).
|
||||||
|
bpm <выражение> - брякается на любой доступ к байту по указанному адресу
|
||||||
|
bpm w <выражение> - брякается на запись байта по указанному адресу
|
||||||
|
bpmb,bpmw,bpmd <выражение> - брякаются на доступ к соответственно байту, слову
|
||||||
|
и двойному слову по указанному адресу. bpm и bpmb - синонимы. При использовании
|
||||||
|
bpmw,bpmd адрес должен быть выровнен соответственно на границу слова (т.е. быть
|
||||||
|
чётным) или на границу двойного слова (т.е. делиться на 4).
|
||||||
|
bpmb,bpmw,bpmd w <выражение> - аналогично для бряка на запись.
|
||||||
|
|
||||||
|
Список установленных точек останова можно просмотреть командой "bl", информацию
|
||||||
|
о конкретной точке останова можно получить с помощью "bl <номер>". Ненужные
|
||||||
|
точки останова удаляются командой "bc <номер>", временно ненужные можно
|
||||||
|
запретить командой "bd <номер>", когда они станут снова нужны, используйте
|
||||||
|
команду "be <номер>".
|
||||||
|
|
||||||
|
Замечания.
|
||||||
|
|
||||||
|
1. При отладке собственных программ можно вставлять в код инструкции
|
||||||
|
int3 (обратите внимание на отсутствие пробела!). Такая инструкция вызывает
|
||||||
|
исключение при нормальном запуске, что приведёт к завершению процесса,
|
||||||
|
но при работе под отладчиком просто активизируется отладчик (с сообщением
|
||||||
|
"int3 command at xxx"). Это позволяет не думать о том, какие адреса
|
||||||
|
использовать в командах g и/или bp.
|
||||||
|
2. Весь вывод и весь ввод ориентирован на 16-ричную систему счисления.
|
||||||
|
3. Когда программа выполняется, окна регистров и данных показывают информацию,
|
||||||
|
относящуюся к моменту до возобновления; установка значений регистров в
|
||||||
|
этом режиме невозможна. Впрочем, команда "d" в этом режиме показывает
|
||||||
|
информацию, верную в момент выдачи команды.
|
||||||
|
|
||||||
|
diamond
|
||||||
|
mailto:diamondz@land.ru
|
@ -1,4 +0,0 @@
|
|||||||
@erase lang.inc
|
|
||||||
@echo lang fix en >lang.inc
|
|
||||||
@fasm mview.asm mview
|
|
||||||
@pause
|
|
@ -1,4 +0,0 @@
|
|||||||
@erase lang.inc
|
|
||||||
@echo lang fix ru >lang.inc
|
|
||||||
@fasm mview.asm mview
|
|
||||||
@pause
|
|
@ -143,9 +143,6 @@ macro mcall a,b,c,d,e,f { ; mike.dld
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; optimize the code for size
|
; optimize the code for size
|
||||||
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp>
|
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp>
|
||||||
|
|
||||||
@ -177,7 +174,7 @@ macro sub arg1,arg2
|
|||||||
|
|
||||||
macro mov arg1,arg2
|
macro mov arg1,arg2
|
||||||
{
|
{
|
||||||
if (arg1 in __regs) & (arg2 eqtype 0)
|
if (arg1 in __regs) & ((arg2 eqtype 0) | (arg2 eqtype '0'))
|
||||||
if (arg2) = 0
|
if (arg2) = 0
|
||||||
xor arg1,arg1
|
xor arg1,arg1
|
||||||
else if (arg2) = 1
|
else if (arg2) = 1
|
||||||
@ -221,7 +218,13 @@ struc process_information
|
|||||||
.x_size dd ? ; +42
|
.x_size dd ? ; +42
|
||||||
.y_size dd ? ; +46
|
.y_size dd ? ; +46
|
||||||
.slot_state dw ? ; +50
|
.slot_state dw ? ; +50
|
||||||
rb (1024-52)
|
dw ? ; +52 - reserved
|
||||||
|
.client_left dd ? ; +54
|
||||||
|
.client_top dd ? ; +58
|
||||||
|
.client_width dd ? ; +62
|
||||||
|
.client_height dd ? ; +66
|
||||||
|
.wnd_state db ? ; +70
|
||||||
|
rb (1024-71)
|
||||||
}
|
}
|
||||||
struct process_information
|
struct process_information
|
||||||
|
|
||||||
|
@ -1,4 +0,0 @@
|
|||||||
@erase lang.inc
|
|
||||||
@echo lang fix en >lang.inc
|
|
||||||
@fasm hexhd.asm hexhd
|
|
||||||
@pause
|
|
@ -1,4 +0,0 @@
|
|||||||
@erase lang.inc
|
|
||||||
@echo lang fix ru >lang.inc
|
|
||||||
@fasm hexhd.asm hexhd
|
|
||||||
@pause
|
|
@ -1,235 +0,0 @@
|
|||||||
;
|
|
||||||
; EXAMPLE APPLICATION
|
|
||||||
;
|
|
||||||
; Compile with FASM for Menuet
|
|
||||||
;
|
|
||||||
|
|
||||||
use32
|
|
||||||
|
|
||||||
org 0x0
|
|
||||||
|
|
||||||
db 'MENUET00' ; 8 byte id
|
|
||||||
dd 38 ; required os
|
|
||||||
dd START ; program start
|
|
||||||
dd I_END ; program image size
|
|
||||||
dd 0x5000 ; required amount of memory
|
|
||||||
dd 0x5000 ; esp = 0x7FFF0
|
|
||||||
dd 0x00000000 ; reserved=no extended header
|
|
||||||
|
|
||||||
include 'lang.inc'
|
|
||||||
include 'macros.inc'
|
|
||||||
|
|
||||||
START: ; start of execution
|
|
||||||
|
|
||||||
call open_file
|
|
||||||
|
|
||||||
call draw_window ; at first, draw the window
|
|
||||||
|
|
||||||
still:
|
|
||||||
|
|
||||||
mov eax,10 ; wait here for event
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
cmp eax,1 ; redraw request ?
|
|
||||||
je red
|
|
||||||
cmp eax,2 ; key in buffer ?
|
|
||||||
je key
|
|
||||||
cmp eax,3 ; button in buffer ?
|
|
||||||
je button
|
|
||||||
|
|
||||||
jmp still
|
|
||||||
|
|
||||||
red: ; redraw
|
|
||||||
call draw_window
|
|
||||||
jmp still
|
|
||||||
|
|
||||||
key: ; key
|
|
||||||
mov eax,2 ; just read it and ignore
|
|
||||||
int 0x40
|
|
||||||
jmp still
|
|
||||||
|
|
||||||
button: ; button
|
|
||||||
mov eax,17 ; get id
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
cmp ah,1 ; button id=1 ?
|
|
||||||
jne noclose
|
|
||||||
mov eax,-1 ; close this program
|
|
||||||
int 0x40
|
|
||||||
noclose:
|
|
||||||
|
|
||||||
cmp ah,2
|
|
||||||
jne noexam
|
|
||||||
jmp still
|
|
||||||
noexam:
|
|
||||||
|
|
||||||
cmp ah,3
|
|
||||||
jne noback
|
|
||||||
mov edi,block
|
|
||||||
cmp dword [edi],0
|
|
||||||
je nonext
|
|
||||||
dec dword [edi]
|
|
||||||
call open_file
|
|
||||||
call draw_window
|
|
||||||
noback:
|
|
||||||
|
|
||||||
cmp ah,4
|
|
||||||
jne nonext
|
|
||||||
mov edi,block
|
|
||||||
inc dword [edi]
|
|
||||||
call open_file
|
|
||||||
call draw_window
|
|
||||||
nonext:
|
|
||||||
|
|
||||||
jmp still
|
|
||||||
|
|
||||||
|
|
||||||
; *********************************************
|
|
||||||
; ******* WINDOW DEFINITIONS AND DRAW ********
|
|
||||||
; *********************************************
|
|
||||||
|
|
||||||
|
|
||||||
draw_window:
|
|
||||||
|
|
||||||
mov eax,12 ; function 12:tell os about windowdraw
|
|
||||||
mov ebx,1 ; 1, start of draw
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
; DRAW WINDOW
|
|
||||||
mov eax,0 ; function 0 : define and draw window
|
|
||||||
mov ebx,0*65536+400 ; [x start] *65536 + [x size]
|
|
||||||
mov ecx,0*65536+270+200 ; [y start] *65536 + [y size]
|
|
||||||
mov edx,0x038899aa;1111cc ; color of work area RRGGBB,8->c
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
mov eax,4 ; function 4 : write text to window
|
|
||||||
mov ebx,144*65536+8 ; [x start] *65536 + [y start]
|
|
||||||
mov ecx,0x00ffffff ; color of text RRGGBB
|
|
||||||
mov edx,labelt ; pointer to text beginning
|
|
||||||
mov esi,labellen-labelt ; text length
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
mov eax,47 ;decimal
|
|
||||||
mov ecx,[block]
|
|
||||||
mov edx,64*65536+34
|
|
||||||
mov ebx,10
|
|
||||||
shl ebx,16
|
|
||||||
mov esi,0x00ffffff
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
add edx,128*65536 ;hex
|
|
||||||
mov bh,1
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
mov eax,8
|
|
||||||
mov ebx,280*65536+16*6
|
|
||||||
mov ecx,30*65536+14
|
|
||||||
|
|
||||||
mov edx,2
|
|
||||||
mov esi,0x3f49df;5599cc
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
mov ebx,15*65536+32
|
|
||||||
add edx,1
|
|
||||||
mov eax,8
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
add ebx,127*65536
|
|
||||||
add edx,1
|
|
||||||
mov eax,8
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
|
|
||||||
mov eax,4
|
|
||||||
mov ebx,14*65536+33
|
|
||||||
mov ecx,0xffffff
|
|
||||||
mov edx,buttons
|
|
||||||
mov esi,blen-buttons
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
|
|
||||||
mov ebx,280*65536+65 ; draw info text with function 4
|
|
||||||
mov ecx,0xffffff
|
|
||||||
mov edx,text
|
|
||||||
mov esi,16
|
|
||||||
mov edi,16*2
|
|
||||||
newline:
|
|
||||||
|
|
||||||
pusha ; hext
|
|
||||||
|
|
||||||
mov edi,16
|
|
||||||
|
|
||||||
mov ecx,edx
|
|
||||||
|
|
||||||
mov edx,ebx
|
|
||||||
sub edx,265*65536
|
|
||||||
|
|
||||||
newhex:
|
|
||||||
|
|
||||||
mov eax,47
|
|
||||||
mov ebx,0x00020101
|
|
||||||
xor esi,0xffff00
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
add edx,16*65536
|
|
||||||
add ecx,1
|
|
||||||
|
|
||||||
dec edi
|
|
||||||
jne newhex
|
|
||||||
|
|
||||||
popa
|
|
||||||
|
|
||||||
mov eax,4 ; text
|
|
||||||
int 0x40
|
|
||||||
add ebx,12
|
|
||||||
add edx,16
|
|
||||||
dec edi
|
|
||||||
jnz newline
|
|
||||||
|
|
||||||
|
|
||||||
mov eax,12 ; function 12:tell os about windowdraw
|
|
||||||
mov ebx,2 ; 2, end of draw
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
open_file:
|
|
||||||
|
|
||||||
pusha
|
|
||||||
|
|
||||||
mov eax,58
|
|
||||||
mov ebx,fileinfo
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
popa
|
|
||||||
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; DATA AREA
|
|
||||||
|
|
||||||
fileinfo:
|
|
||||||
dd 8
|
|
||||||
block dd 0
|
|
||||||
dd 1
|
|
||||||
dd text
|
|
||||||
dd os
|
|
||||||
db '/HARDDISK/FIRST',0
|
|
||||||
|
|
||||||
|
|
||||||
labelt:
|
|
||||||
db 'EDITOR HEXADECIMAL'
|
|
||||||
labellen:
|
|
||||||
|
|
||||||
buttons db ' << >> << OPTIONS >> '
|
|
||||||
blen:
|
|
||||||
|
|
||||||
os:
|
|
||||||
times 16384 db ?
|
|
||||||
text:
|
|
||||||
|
|
||||||
I_END:
|
|
@ -1,265 +0,0 @@
|
|||||||
; new application structure
|
|
||||||
macro meos_app_start
|
|
||||||
{
|
|
||||||
use32
|
|
||||||
org 0x0
|
|
||||||
|
|
||||||
db 'MENUET01'
|
|
||||||
dd 0x01
|
|
||||||
dd __start
|
|
||||||
dd __end
|
|
||||||
dd __memory
|
|
||||||
dd __stack
|
|
||||||
|
|
||||||
if used __params & ~defined __params
|
|
||||||
dd __params
|
|
||||||
else
|
|
||||||
dd 0x0
|
|
||||||
end if
|
|
||||||
|
|
||||||
dd 0x0
|
|
||||||
}
|
|
||||||
MEOS_APP_START fix meos_app_start
|
|
||||||
|
|
||||||
macro code
|
|
||||||
{
|
|
||||||
__start:
|
|
||||||
}
|
|
||||||
CODE fix code
|
|
||||||
|
|
||||||
macro data
|
|
||||||
{
|
|
||||||
__data:
|
|
||||||
}
|
|
||||||
DATA fix data
|
|
||||||
|
|
||||||
macro udata
|
|
||||||
{
|
|
||||||
if used __params & ~defined __params
|
|
||||||
__params:
|
|
||||||
db 0
|
|
||||||
__end:
|
|
||||||
rb 255
|
|
||||||
else
|
|
||||||
__end:
|
|
||||||
end if
|
|
||||||
__udata:
|
|
||||||
}
|
|
||||||
UDATA fix udata
|
|
||||||
|
|
||||||
macro meos_app_end
|
|
||||||
{
|
|
||||||
align 32
|
|
||||||
rb 2048
|
|
||||||
__stack:
|
|
||||||
__memory:
|
|
||||||
}
|
|
||||||
MEOS_APP_END fix meos_app_end
|
|
||||||
|
|
||||||
|
|
||||||
; macro for defining multiline text data
|
|
||||||
struc mstr [sstring]
|
|
||||||
{
|
|
||||||
forward
|
|
||||||
local ssize
|
|
||||||
virtual at 0
|
|
||||||
db sstring
|
|
||||||
ssize = $
|
|
||||||
end virtual
|
|
||||||
dd ssize
|
|
||||||
db sstring
|
|
||||||
common
|
|
||||||
dd -1
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
; strings
|
|
||||||
macro sz name,[data] { ; from MFAR [mike.dld]
|
|
||||||
common
|
|
||||||
if used name
|
|
||||||
label name
|
|
||||||
end if
|
|
||||||
forward
|
|
||||||
if used name
|
|
||||||
db data
|
|
||||||
end if
|
|
||||||
common
|
|
||||||
if used name
|
|
||||||
.size = $-name
|
|
||||||
end if
|
|
||||||
}
|
|
||||||
|
|
||||||
macro lsz name,[lng,data] { ; from MFAR [mike.dld]
|
|
||||||
common
|
|
||||||
if used name
|
|
||||||
label name
|
|
||||||
end if
|
|
||||||
forward
|
|
||||||
if (used name)&(lang eq lng)
|
|
||||||
db data
|
|
||||||
end if
|
|
||||||
common
|
|
||||||
if used name
|
|
||||||
.size = $-name
|
|
||||||
end if
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; easy system call macro
|
|
||||||
macro mpack dest, hsrc, lsrc
|
|
||||||
{
|
|
||||||
if (hsrc eqtype 0) & (lsrc eqtype 0)
|
|
||||||
mov dest, (hsrc) shl 16 + lsrc
|
|
||||||
else
|
|
||||||
if (hsrc eqtype 0) & (~lsrc eqtype 0)
|
|
||||||
mov dest, (hsrc) shl 16
|
|
||||||
add dest, lsrc
|
|
||||||
else
|
|
||||||
mov dest, hsrc
|
|
||||||
shl dest, 16
|
|
||||||
add dest, lsrc
|
|
||||||
end if
|
|
||||||
end if
|
|
||||||
}
|
|
||||||
|
|
||||||
macro __mov reg,a { ; mike.dld
|
|
||||||
if ~a eq
|
|
||||||
mov reg,a
|
|
||||||
end if
|
|
||||||
}
|
|
||||||
|
|
||||||
macro mcall a,b,c,d,e,f { ; mike.dld
|
|
||||||
__mov eax,a
|
|
||||||
__mov ebx,b
|
|
||||||
__mov ecx,c
|
|
||||||
__mov edx,d
|
|
||||||
__mov esi,e
|
|
||||||
__mov edi,f
|
|
||||||
int 0x40
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; optimize the code for size
|
|
||||||
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp>
|
|
||||||
|
|
||||||
macro add arg1,arg2
|
|
||||||
{
|
|
||||||
if (arg2 eqtype 0)
|
|
||||||
if (arg2) = 1
|
|
||||||
inc arg1
|
|
||||||
else
|
|
||||||
add arg1,arg2
|
|
||||||
end if
|
|
||||||
else
|
|
||||||
add arg1,arg2
|
|
||||||
end if
|
|
||||||
}
|
|
||||||
|
|
||||||
macro sub arg1,arg2
|
|
||||||
{
|
|
||||||
if (arg2 eqtype 0)
|
|
||||||
if (arg2) = 1
|
|
||||||
dec arg1
|
|
||||||
else
|
|
||||||
sub arg1,arg2
|
|
||||||
end if
|
|
||||||
else
|
|
||||||
sub arg1,arg2
|
|
||||||
end if
|
|
||||||
}
|
|
||||||
|
|
||||||
macro mov arg1,arg2
|
|
||||||
{
|
|
||||||
if (arg1 in __regs) & (arg2 eqtype 0)
|
|
||||||
if (arg2) = 0
|
|
||||||
xor arg1,arg1
|
|
||||||
else if (arg2) = 1
|
|
||||||
xor arg1,arg1
|
|
||||||
inc arg1
|
|
||||||
else if (arg2) = -1
|
|
||||||
or arg1,-1
|
|
||||||
else if (arg2) > -128 & (arg2) < 128
|
|
||||||
push arg2
|
|
||||||
pop arg1
|
|
||||||
else
|
|
||||||
mov arg1,arg2
|
|
||||||
end if
|
|
||||||
else
|
|
||||||
mov arg1,arg2
|
|
||||||
end if
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
macro struct name
|
|
||||||
{
|
|
||||||
virtual at 0
|
|
||||||
name name
|
|
||||||
sizeof.#name = $ - name
|
|
||||||
end virtual
|
|
||||||
}
|
|
||||||
|
|
||||||
; structures used in MeOS
|
|
||||||
struc process_information
|
|
||||||
{
|
|
||||||
.cpu_usage dd ? ; +0
|
|
||||||
.window_stack_position dw ? ; +4
|
|
||||||
.window_stack_value dw ? ; +6
|
|
||||||
.not_used1 dw ? ; +8
|
|
||||||
.process_name rb 12 ; +10
|
|
||||||
.memory_start dd ? ; +22
|
|
||||||
.used_memory dd ? ; +26
|
|
||||||
.PID dd ? ; +30
|
|
||||||
.x_start dd ? ; +34
|
|
||||||
.y_start dd ? ; +38
|
|
||||||
.x_size dd ? ; +42
|
|
||||||
.y_size dd ? ; +46
|
|
||||||
.slot_state dw ? ; +50
|
|
||||||
rb (1024-52)
|
|
||||||
}
|
|
||||||
struct process_information
|
|
||||||
|
|
||||||
struc system_colors
|
|
||||||
{
|
|
||||||
.frame dd ?
|
|
||||||
.grab dd ?
|
|
||||||
.grab_button dd ?
|
|
||||||
.grab_button_text dd ?
|
|
||||||
.grab_text dd ?
|
|
||||||
.work dd ?
|
|
||||||
.work_button dd ?
|
|
||||||
.work_button_text dd ?
|
|
||||||
.work_text dd ?
|
|
||||||
.work_graph dd ?
|
|
||||||
}
|
|
||||||
struct system_colors
|
|
||||||
|
|
||||||
|
|
||||||
; constants
|
|
||||||
|
|
||||||
; events
|
|
||||||
EV_IDLE = 0
|
|
||||||
EV_TIMER = 0
|
|
||||||
EV_REDRAW = 1
|
|
||||||
EV_KEY = 2
|
|
||||||
EV_BUTTON = 3
|
|
||||||
EV_EXIT = 4
|
|
||||||
EV_BACKGROUND = 5
|
|
||||||
EV_MOUSE = 6
|
|
||||||
EV_IPC = 7
|
|
||||||
EV_STACK = 8
|
|
||||||
|
|
||||||
; event mask bits for function 40
|
|
||||||
EVM_REDRAW = 1b
|
|
||||||
EVM_KEY = 10b
|
|
||||||
EVM_BUTTON = 100b
|
|
||||||
EVM_EXIT = 1000b
|
|
||||||
EVM_BACKGROUND = 10000b
|
|
||||||
EVM_MOUSE = 100000b
|
|
||||||
EVM_IPC = 1000000b
|
|
||||||
EVM_STACK = 10000000b
|
|
@ -3596,12 +3596,14 @@ associations:
|
|||||||
dd aJpg, jpegview
|
dd aJpg, jpegview
|
||||||
dd aJpeg, jpegview
|
dd aJpeg, jpegview
|
||||||
dd aGif, gifview
|
dd aGif, gifview
|
||||||
dd aWav, ac97wav
|
dd aWav, ac97
|
||||||
dd aMp3, ac97wav
|
dd aMp3, ac97
|
||||||
dd aMid, midamp
|
dd aMid, midamp
|
||||||
dd aBmp, mv
|
dd aBmp, mv
|
||||||
dd aPng, archer
|
dd aPng, archer
|
||||||
dd aRtf, rtfread
|
dd aRtf, rtfread
|
||||||
|
dd a3ds, view3ds
|
||||||
|
dd aLif, life2
|
||||||
associations_end:
|
associations_end:
|
||||||
|
|
||||||
aAsm db 'asm',0
|
aAsm db 'asm',0
|
||||||
@ -3618,7 +3620,7 @@ gifview db '/rd/1/GIFVIEW',0
|
|||||||
|
|
||||||
aWav db 'wav',0
|
aWav db 'wav',0
|
||||||
aMp3 db 'mp3',0
|
aMp3 db 'mp3',0
|
||||||
ac97wav db '/rd/1/AC97WAV',0
|
ac97 db '/rd/1/AC97SND',0
|
||||||
|
|
||||||
aMid db 'mid',0
|
aMid db 'mid',0
|
||||||
midamp db '/rd/1/MIDAMP',0
|
midamp db '/rd/1/MIDAMP',0
|
||||||
@ -3632,6 +3634,12 @@ archer db '/rd/1/@rcher',0
|
|||||||
aRtf db 'rtf',0
|
aRtf db 'rtf',0
|
||||||
rtfread db '/rd/1/RtfRead',0
|
rtfread db '/rd/1/RtfRead',0
|
||||||
|
|
||||||
|
a3ds db '3ds',0
|
||||||
|
view3ds db '/rd/1/3d/view3ds',0
|
||||||
|
|
||||||
|
aLif db 'lif',0
|
||||||
|
life2 db '/rd/1/demos/life2',0
|
||||||
|
|
||||||
bConfirmDelete db 1
|
bConfirmDelete db 1
|
||||||
|
|
||||||
; ‡¤¥áì § ª 稢 îâáï ª®ä¨£ãà æ¨®ë¥ ¤ ë¥
|
; ‡¤¥áì § ª 稢 îâáï ª®ä¨£ãà æ¨®ë¥ ¤ ë¥
|
||||||
|
@ -1,4 +0,0 @@
|
|||||||
@erase lang.inc
|
|
||||||
@echo lang fix en >lang.inc
|
|
||||||
@fasm rdfdel.asm rdfdel
|
|
||||||
@pause
|
|
@ -1,4 +0,0 @@
|
|||||||
@erase lang.inc
|
|
||||||
@echo lang fix ru >lang.inc
|
|
||||||
@fasm rdfdel.asm rdfdel
|
|
||||||
@pause
|
|
@ -1,232 +0,0 @@
|
|||||||
;
|
|
||||||
; FILE COPIER
|
|
||||||
;
|
|
||||||
; Compile with FASM for Menuet
|
|
||||||
;
|
|
||||||
|
|
||||||
use32
|
|
||||||
org 0x0
|
|
||||||
|
|
||||||
db 'MENUET00' ; 8 byte id
|
|
||||||
dd 38 ; required os
|
|
||||||
dd START ; program start
|
|
||||||
dd I_END ; program image size
|
|
||||||
dd 0x1000 ; required amount of memory
|
|
||||||
dd 0x1000
|
|
||||||
dd 0 ; reserved=no extended header
|
|
||||||
|
|
||||||
include "lang.inc"
|
|
||||||
include "macros.inc"
|
|
||||||
|
|
||||||
START: ; start of execution
|
|
||||||
|
|
||||||
call draw_window ; at first, draw the window
|
|
||||||
|
|
||||||
still:
|
|
||||||
|
|
||||||
mov eax,10 ; wait here for event
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
cmp eax,1 ; redraw request ?
|
|
||||||
jz red
|
|
||||||
cmp eax,2 ; key in buffer ?
|
|
||||||
jz key
|
|
||||||
cmp eax,3 ; button in buffer ?
|
|
||||||
jz button
|
|
||||||
|
|
||||||
jmp still
|
|
||||||
|
|
||||||
red: ; redraw
|
|
||||||
call draw_window
|
|
||||||
jmp still
|
|
||||||
|
|
||||||
key: ; key
|
|
||||||
mov eax,2 ; just read it and ignore
|
|
||||||
int 0x40
|
|
||||||
jmp still
|
|
||||||
|
|
||||||
button: ; button
|
|
||||||
mov eax,17 ; get id
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
cmp ah,1 ; button id=1 ?
|
|
||||||
jnz noclose
|
|
||||||
mov eax,0xffffffff ; close this program
|
|
||||||
int 0x40
|
|
||||||
noclose:
|
|
||||||
|
|
||||||
|
|
||||||
cmp ah,3 ; delete ?
|
|
||||||
jnz nodelete
|
|
||||||
mov eax,32
|
|
||||||
mov ebx,destination
|
|
||||||
int 0x40
|
|
||||||
jmp still
|
|
||||||
nodelete:
|
|
||||||
|
|
||||||
|
|
||||||
cmp ah,4
|
|
||||||
jz f2
|
|
||||||
jmp nof12
|
|
||||||
|
|
||||||
f2:
|
|
||||||
mov [addr],dword destination
|
|
||||||
mov [ya],dword 35
|
|
||||||
jmp rk
|
|
||||||
|
|
||||||
rk:
|
|
||||||
mov edi,[addr]
|
|
||||||
mov al,' '
|
|
||||||
mov ecx,11
|
|
||||||
rep stosb
|
|
||||||
|
|
||||||
call print_text
|
|
||||||
|
|
||||||
mov edi,[addr]
|
|
||||||
|
|
||||||
f11:
|
|
||||||
mov eax,10
|
|
||||||
int 0x40
|
|
||||||
cmp eax,2
|
|
||||||
jz fbu
|
|
||||||
jmp still
|
|
||||||
fbu:
|
|
||||||
mov eax,2
|
|
||||||
int 0x40
|
|
||||||
shr eax,8
|
|
||||||
cmp eax,8
|
|
||||||
jnz nobs
|
|
||||||
cmp edi,[addr]
|
|
||||||
jz f11
|
|
||||||
sub edi,1
|
|
||||||
mov [edi],byte 0
|
|
||||||
call print_text
|
|
||||||
jmp f11
|
|
||||||
nobs:
|
|
||||||
cmp eax,dword 31
|
|
||||||
jbe f11
|
|
||||||
cmp eax,dword 95
|
|
||||||
jb keyok
|
|
||||||
sub eax,32
|
|
||||||
keyok:
|
|
||||||
mov [edi],al
|
|
||||||
|
|
||||||
call print_text
|
|
||||||
|
|
||||||
add edi,1
|
|
||||||
mov esi,[addr]
|
|
||||||
add esi,11
|
|
||||||
cmp esi,edi
|
|
||||||
jnz f11
|
|
||||||
|
|
||||||
jmp still
|
|
||||||
|
|
||||||
print_text:
|
|
||||||
|
|
||||||
mov eax,13
|
|
||||||
mov ebx,109*65536+11*6
|
|
||||||
mov ecx,[ya]
|
|
||||||
shl ecx,16
|
|
||||||
mov cx,8
|
|
||||||
mov edx,0xffffff
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
mov eax,4
|
|
||||||
mov ebx,109*65536
|
|
||||||
add ebx,[ya]
|
|
||||||
mov ecx,0x000000
|
|
||||||
mov edx,[addr]
|
|
||||||
mov esi,11
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
ret
|
|
||||||
|
|
||||||
nof12:
|
|
||||||
jmp still
|
|
||||||
|
|
||||||
|
|
||||||
; *********************************************
|
|
||||||
; ******* WINDOW DEFINITIONS AND DRAW ********
|
|
||||||
; *********************************************
|
|
||||||
|
|
||||||
|
|
||||||
draw_window:
|
|
||||||
|
|
||||||
mov eax,12 ; function 12:tell os about windowdraw
|
|
||||||
mov ebx,1 ; 1, start of draw
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
; DRAW WINDOW
|
|
||||||
mov eax,0 ; function 0 : define and draw window
|
|
||||||
mov ebx,100*65536+230 ; [x start] *65536 + [x size]
|
|
||||||
mov ecx,100*65536+105 ; [y start] *65536 + [y size]
|
|
||||||
mov edx,0x03ffffff ; color of work area RRGGBB
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
; WINDOW LABEL
|
|
||||||
mov eax,4 ; function 4 : write text to window
|
|
||||||
mov ebx,8*65536+8 ; [x start] *65536 + [y start]
|
|
||||||
mov ecx,0x10ffffff ; color of text RRGGBB
|
|
||||||
mov edx,header ; pointer to text beginning
|
|
||||||
mov esi,header.len ; text length
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
mov esi,0xbbbbbb
|
|
||||||
|
|
||||||
mov eax,8 ; DELETE BUTTON
|
|
||||||
mov ebx,20*65536+190
|
|
||||||
mov ecx,63*65536+15
|
|
||||||
mov edx,3
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
mov eax,8
|
|
||||||
mov ebx,200*65536+10
|
|
||||||
mov ecx,33*65536+10
|
|
||||||
mov edx,4
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
mov esi,destination
|
|
||||||
mov edi,text+14
|
|
||||||
mov ecx,11
|
|
||||||
cld
|
|
||||||
rep movsb
|
|
||||||
|
|
||||||
mov ebx,25*65536+35 ; draw info text with function 4
|
|
||||||
mov ecx,0x0
|
|
||||||
mov edx,text
|
|
||||||
mov esi,40
|
|
||||||
newline:
|
|
||||||
mov eax,4
|
|
||||||
int 0x40
|
|
||||||
add ebx,16*2
|
|
||||||
add edx,40
|
|
||||||
cmp [edx],byte 'x'
|
|
||||||
jnz newline
|
|
||||||
|
|
||||||
|
|
||||||
mov eax,12 ; function 12:tell os about windowdraw
|
|
||||||
mov ebx,2 ; 2, end of draw
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
; DATA AREA
|
|
||||||
|
|
||||||
destination db 'EXAMPLE.ASM'
|
|
||||||
|
|
||||||
addr dd 0x0
|
|
||||||
ya dd 0x0
|
|
||||||
|
|
||||||
text:
|
|
||||||
db 'FILENAME : yyyyyyyyyyy '
|
|
||||||
db ' DELETE FROM RAMDISK '
|
|
||||||
|
|
||||||
db 'x' ; <- END MARKER, DONT DELETE
|
|
||||||
|
|
||||||
|
|
||||||
header:
|
|
||||||
db 'RAMDISK FILE DELETE'
|
|
||||||
.len = $ - header
|
|
||||||
|
|
||||||
I_END:
|
|
@ -1,15 +1,3 @@
|
|||||||
; language for programs
|
|
||||||
lang fix en ; ru en fr ge fi
|
|
||||||
|
|
||||||
@^ fix macro comment {
|
|
||||||
^@ fix }
|
|
||||||
|
|
||||||
|
|
||||||
macro m2m dest,src {
|
|
||||||
push src
|
|
||||||
pop dest
|
|
||||||
}
|
|
||||||
|
|
||||||
; new application structure
|
; new application structure
|
||||||
macro meos_app_start
|
macro meos_app_start
|
||||||
{
|
{
|
||||||
@ -89,7 +77,14 @@ struc mstr [sstring]
|
|||||||
macro sz name,[data] { ; from MFAR [mike.dld]
|
macro sz name,[data] { ; from MFAR [mike.dld]
|
||||||
common
|
common
|
||||||
if used name
|
if used name
|
||||||
name db data
|
label name
|
||||||
|
end if
|
||||||
|
forward
|
||||||
|
if used name
|
||||||
|
db data
|
||||||
|
end if
|
||||||
|
common
|
||||||
|
if used name
|
||||||
.size = $-name
|
.size = $-name
|
||||||
end if
|
end if
|
||||||
}
|
}
|
||||||
@ -98,61 +93,17 @@ macro lsz name,[lng,data] { ; from MFAR [mike.dld]
|
|||||||
common
|
common
|
||||||
if used name
|
if used name
|
||||||
label name
|
label name
|
||||||
|
end if
|
||||||
forward
|
forward
|
||||||
if lang eq lng
|
if (used name)&(lang eq lng)
|
||||||
db data
|
db data
|
||||||
end if
|
end if
|
||||||
common
|
common
|
||||||
|
if used name
|
||||||
.size = $-name
|
.size = $-name
|
||||||
end if
|
end if
|
||||||
}
|
}
|
||||||
|
|
||||||
macro szc name,elsz,[data] { ; from MFAR [mike.dld]
|
|
||||||
common
|
|
||||||
local s,m
|
|
||||||
m = 0
|
|
||||||
if used name
|
|
||||||
label name
|
|
||||||
virtual at 0
|
|
||||||
db data
|
|
||||||
s = $
|
|
||||||
end virtual
|
|
||||||
d#elsz s
|
|
||||||
if m < s
|
|
||||||
m = s
|
|
||||||
end if
|
|
||||||
db data
|
|
||||||
.size = $-name
|
|
||||||
.maxl = m
|
|
||||||
end if
|
|
||||||
}
|
|
||||||
|
|
||||||
macro lszc name,elsz,[lng,data] { ; from MFAR [mike.dld]
|
|
||||||
common
|
|
||||||
local s,m,c
|
|
||||||
m = 0
|
|
||||||
c = 0
|
|
||||||
if used name
|
|
||||||
label name
|
|
||||||
forward
|
|
||||||
if lang eq lng
|
|
||||||
virtual at 0
|
|
||||||
db data
|
|
||||||
s = $
|
|
||||||
end virtual
|
|
||||||
d#elsz s
|
|
||||||
if m < s
|
|
||||||
m = s
|
|
||||||
end if
|
|
||||||
db data
|
|
||||||
c = c+1
|
|
||||||
end if
|
|
||||||
common
|
|
||||||
.size = $-name
|
|
||||||
.maxl = m
|
|
||||||
.count = c
|
|
||||||
end if
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
; easy system call macro
|
; easy system call macro
|
||||||
@ -172,12 +123,6 @@ macro mpack dest, hsrc, lsrc
|
|||||||
end if
|
end if
|
||||||
}
|
}
|
||||||
|
|
||||||
;macro __mov reg,a { ; mike.dld
|
|
||||||
; if ~a eq
|
|
||||||
; mov reg,a
|
|
||||||
; end if
|
|
||||||
;}
|
|
||||||
|
|
||||||
macro __mov reg,a,b { ; mike.dld
|
macro __mov reg,a,b { ; mike.dld
|
||||||
if (~a eq)&(~b eq)
|
if (~a eq)&(~b eq)
|
||||||
mpack reg,a,b
|
mpack reg,a,b
|
||||||
@ -197,71 +142,6 @@ macro mcall a,b,c,d,e,f { ; mike.dld
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
; -------------------------
|
|
||||||
macro header a,[b] {
|
|
||||||
common
|
|
||||||
use32
|
|
||||||
org 0
|
|
||||||
db 'MENUET',a
|
|
||||||
forward
|
|
||||||
if b eq
|
|
||||||
dd 0
|
|
||||||
else
|
|
||||||
dd b
|
|
||||||
end if }
|
|
||||||
macro section name { align 16
|
|
||||||
label name }
|
|
||||||
macro func name {
|
|
||||||
if ~used name
|
|
||||||
display 'FUNC NOT USED: ',`name,13,10
|
|
||||||
else
|
|
||||||
align 4
|
|
||||||
name:
|
|
||||||
;pushad
|
|
||||||
;pushfd
|
|
||||||
;dps `name
|
|
||||||
;newline
|
|
||||||
;mcall 5,1
|
|
||||||
;popfd
|
|
||||||
;popad
|
|
||||||
}
|
|
||||||
macro endf { end if }
|
|
||||||
|
|
||||||
macro diff16 title,l1,l2
|
|
||||||
{
|
|
||||||
local s,d
|
|
||||||
s = l2-l1
|
|
||||||
display title,': 0x'
|
|
||||||
repeat 8
|
|
||||||
d = '0' + s shr ((8-%) shl 2) and $0F
|
|
||||||
if d > '9'
|
|
||||||
d = d + 'A'-'9'-1
|
|
||||||
end if
|
|
||||||
display d
|
|
||||||
end repeat
|
|
||||||
display 13,10
|
|
||||||
}
|
|
||||||
|
|
||||||
macro diff10 title,l1,l2
|
|
||||||
{
|
|
||||||
local s,d,z,m
|
|
||||||
s = l2-l1
|
|
||||||
z = 0
|
|
||||||
m = 1000000000
|
|
||||||
display title,': '
|
|
||||||
repeat 10
|
|
||||||
d = '0' + s / m
|
|
||||||
s = s - (s/m)*m
|
|
||||||
m = m / 10
|
|
||||||
if d <> '0'
|
|
||||||
z = 1
|
|
||||||
end if
|
|
||||||
if z <> 0
|
|
||||||
display d
|
|
||||||
end if
|
|
||||||
end repeat
|
|
||||||
display 13,10
|
|
||||||
}
|
|
||||||
|
|
||||||
; optimize the code for size
|
; optimize the code for size
|
||||||
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp>
|
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp>
|
||||||
@ -294,7 +174,7 @@ macro sub arg1,arg2
|
|||||||
|
|
||||||
macro mov arg1,arg2
|
macro mov arg1,arg2
|
||||||
{
|
{
|
||||||
if (arg1 in __regs) & (arg2 eqtype 0)
|
if (arg1 in __regs) & ((arg2 eqtype 0) | (arg2 eqtype '0'))
|
||||||
if (arg2) = 0
|
if (arg2) = 0
|
||||||
xor arg1,arg1
|
xor arg1,arg1
|
||||||
else if (arg2) = 1
|
else if (arg2) = 1
|
||||||
@ -314,230 +194,54 @@ macro mov arg1,arg2
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
macro RGB [a] {
|
|
||||||
common
|
|
||||||
match (r=,g=,b),a \{
|
|
||||||
\dd ((r) shl 16) or ((g) shl 8) or (b)
|
|
||||||
\}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
struc POINT _t,_dx,_dy {
|
|
||||||
.x _t _dx
|
|
||||||
.y _t _dy
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
; Macroinstructions for defining data structures
|
|
||||||
|
|
||||||
macro struct name
|
macro struct name
|
||||||
{ fields@struct equ name
|
{
|
||||||
match child parent, name \{ fields@struct equ child,fields@\#parent \}
|
|
||||||
sub@struct equ
|
|
||||||
struc db [val] \{ \common fields@struct equ fields@struct,.,db,<val> \}
|
|
||||||
struc dw [val] \{ \common fields@struct equ fields@struct,.,dw,<val> \}
|
|
||||||
struc du [val] \{ \common fields@struct equ fields@struct,.,du,<val> \}
|
|
||||||
struc dd [val] \{ \common fields@struct equ fields@struct,.,dd,<val> \}
|
|
||||||
struc dp [val] \{ \common fields@struct equ fields@struct,.,dp,<val> \}
|
|
||||||
struc dq [val] \{ \common fields@struct equ fields@struct,.,dq,<val> \}
|
|
||||||
struc dt [val] \{ \common fields@struct equ fields@struct,.,dt,<val> \}
|
|
||||||
struc rb count \{ fields@struct equ fields@struct,.,db,count dup (?) \}
|
|
||||||
struc rw count \{ fields@struct equ fields@struct,.,dw,count dup (?) \}
|
|
||||||
struc rd count \{ fields@struct equ fields@struct,.,dd,count dup (?) \}
|
|
||||||
struc rp count \{ fields@struct equ fields@struct,.,dp,count dup (?) \}
|
|
||||||
struc rq count \{ fields@struct equ fields@struct,.,dq,count dup (?) \}
|
|
||||||
struc rt count \{ fields@struct equ fields@struct,.,dt,count dup (?) \}
|
|
||||||
macro db [val] \{ \common \local anonymous
|
|
||||||
fields@struct equ fields@struct,anonymous,db,<val> \}
|
|
||||||
macro dw [val] \{ \common \local anonymous
|
|
||||||
fields@struct equ fields@struct,anonymous,dw,<val> \}
|
|
||||||
macro du [val] \{ \common \local anonymous
|
|
||||||
fields@struct equ fields@struct,anonymous,du,<val> \}
|
|
||||||
macro dd [val] \{ \common \local anonymous
|
|
||||||
fields@struct equ fields@struct,anonymous,dd,<val> \}
|
|
||||||
macro dp [val] \{ \common \local anonymous
|
|
||||||
fields@struct equ fields@struct,anonymous,dp,<val> \}
|
|
||||||
macro dq [val] \{ \common \local anonymous
|
|
||||||
fields@struct equ fields@struct,anonymous,dq,<val> \}
|
|
||||||
macro dt [val] \{ \common \local anonymous
|
|
||||||
fields@struct equ fields@struct,anonymous,dt,<val> \}
|
|
||||||
macro rb count \{ \local anonymous
|
|
||||||
fields@struct equ fields@struct,anonymous,db,count dup (?) \}
|
|
||||||
macro rw count \{ \local anonymous
|
|
||||||
fields@struct equ fields@struct,anonymous,dw,count dup (?) \}
|
|
||||||
macro rd count \{ \local anonymous
|
|
||||||
fields@struct equ fields@struct,anonymous,dd,count dup (?) \}
|
|
||||||
macro rp count \{ \local anonymous
|
|
||||||
fields@struct equ fields@struct,anonymous,dp,count dup (?) \}
|
|
||||||
macro rq count \{ \local anonymous
|
|
||||||
fields@struct equ fields@struct,anonymous,dq,count dup (?) \}
|
|
||||||
macro rt count \{ \local anonymous
|
|
||||||
fields@struct equ fields@struct,anonymous,dt,count dup (?) \}
|
|
||||||
macro union \{ fields@struct equ fields@struct,,union,<
|
|
||||||
sub@struct equ union \}
|
|
||||||
macro struct \{ fields@struct equ fields@struct,,substruct,<
|
|
||||||
sub@struct equ substruct \}
|
|
||||||
virtual at 0 }
|
|
||||||
|
|
||||||
macro ends
|
|
||||||
{ match , sub@struct \{ restruc db,dw,du,dd,dp,dq,dt
|
|
||||||
restruc rb,rw,rd,rp,rq,rt
|
|
||||||
purge db,dw,du,dd,dp,dq,dt
|
|
||||||
purge rb,rw,rd,rp,rq,rt
|
|
||||||
purge union,struct
|
|
||||||
match name=,fields,fields@struct \\{ fields@struct equ
|
|
||||||
make@struct name,fields
|
|
||||||
fields@\\#name equ fields \\}
|
|
||||||
end virtual \}
|
|
||||||
match any, sub@struct \{ fields@struct equ fields@struct> \}
|
|
||||||
restore sub@struct }
|
|
||||||
|
|
||||||
macro make@struct name,[field,type,def]
|
|
||||||
{ common
|
|
||||||
if $
|
|
||||||
display 'Error: definition of ',`name,' contains illegal instructions.',0Dh,0Ah
|
|
||||||
err
|
|
||||||
end if
|
|
||||||
local define
|
|
||||||
define equ name
|
|
||||||
forward
|
|
||||||
local sub
|
|
||||||
match , field \{ make@substruct type,name,sub def
|
|
||||||
define equ define,.,sub, \}
|
|
||||||
match any, field \{ define equ define,.#field,type,<def> \}
|
|
||||||
common
|
|
||||||
match fields, define \{ define@struct fields \} }
|
|
||||||
|
|
||||||
macro define@struct name,[field,type,def]
|
|
||||||
{ common
|
|
||||||
local list
|
|
||||||
list equ
|
|
||||||
forward
|
|
||||||
if ~ field eq .
|
|
||||||
name#field type def
|
|
||||||
sizeof.#name#field = $ - name#field
|
|
||||||
else
|
|
||||||
rb sizeof.#type
|
|
||||||
end if
|
|
||||||
local value
|
|
||||||
match any, list \{ list equ list, \}
|
|
||||||
list equ list <value>
|
|
||||||
common
|
|
||||||
sizeof.#name = $
|
|
||||||
restruc name
|
|
||||||
match values, list \{
|
|
||||||
struc name value \\{
|
|
||||||
match any, fields@struct \\\{ fields@struct equ fields@struct,.,name,<values> \\\}
|
|
||||||
match , fields@struct \\\{ label .
|
|
||||||
forward
|
|
||||||
match , value \\\\{ field type def \\\\}
|
|
||||||
match any, value \\\\{ field type value
|
|
||||||
if ~ field eq .
|
|
||||||
rb sizeof.#name#field - ($-field)
|
|
||||||
end if \\\\}
|
|
||||||
common \\\} \\} \} }
|
|
||||||
|
|
||||||
macro enable@substruct
|
|
||||||
{ macro make@substruct substruct,parent,name,[field,type,def]
|
|
||||||
\{ \common
|
|
||||||
\local define
|
|
||||||
define equ parent,name
|
|
||||||
\forward
|
|
||||||
\local sub
|
|
||||||
match , field \\{ match any, type \\\{ enable@substruct
|
|
||||||
make@substruct type,name,sub def
|
|
||||||
purge make@substruct
|
|
||||||
define equ define,.,sub, \\\} \\}
|
|
||||||
match any, field \\{ define equ define,.\#field,type,<def> \\}
|
|
||||||
\common
|
|
||||||
match fields, define \\{ define@\#substruct fields \\} \} }
|
|
||||||
|
|
||||||
enable@substruct
|
|
||||||
|
|
||||||
macro define@union parent,name,[field,type,def]
|
|
||||||
{ common
|
|
||||||
virtual at 0
|
virtual at 0
|
||||||
forward
|
name name
|
||||||
if ~ field eq .
|
sizeof.#name = $ - name
|
||||||
virtual at 0
|
|
||||||
parent#field type def
|
|
||||||
sizeof.#parent#field = $ - parent#field
|
|
||||||
end virtual
|
end virtual
|
||||||
if sizeof.#parent#field > $
|
}
|
||||||
rb sizeof.#parent#field - $
|
|
||||||
end if
|
|
||||||
else if sizeof.#type > $
|
|
||||||
rb sizeof.#type - $
|
|
||||||
end if
|
|
||||||
common
|
|
||||||
sizeof.#name = $
|
|
||||||
end virtual
|
|
||||||
struc name [value] \{ \common
|
|
||||||
label .\#name
|
|
||||||
last@union equ
|
|
||||||
forward
|
|
||||||
match any, last@union \\{ virtual at .\#name
|
|
||||||
field type def
|
|
||||||
end virtual \\}
|
|
||||||
match , last@union \\{ match , value \\\{ field type def \\\}
|
|
||||||
match any, value \\\{ field type value \\\} \\}
|
|
||||||
last@union equ field
|
|
||||||
common rb sizeof.#name - ($ - .\#name) \} }
|
|
||||||
|
|
||||||
macro define@substruct parent,name,[field,type,def]
|
|
||||||
{ common
|
|
||||||
virtual at 0
|
|
||||||
forward
|
|
||||||
if ~ field eq .
|
|
||||||
parent#field type def
|
|
||||||
sizeof.#parent#field = $ - parent#field
|
|
||||||
else
|
|
||||||
rb sizeof.#type
|
|
||||||
end if
|
|
||||||
local value
|
|
||||||
common
|
|
||||||
sizeof.#name = $
|
|
||||||
end virtual
|
|
||||||
struc name value \{
|
|
||||||
label .\#name
|
|
||||||
forward
|
|
||||||
match , value \\{ field type def \\}
|
|
||||||
match any, value \\{ field type value
|
|
||||||
if ~ field eq .
|
|
||||||
rb sizeof.#parent#field - ($-field)
|
|
||||||
end if \\}
|
|
||||||
common \} }
|
|
||||||
|
|
||||||
; structures used in MeOS
|
; structures used in MeOS
|
||||||
|
struc process_information
|
||||||
|
{
|
||||||
|
.cpu_usage dd ? ; +0
|
||||||
|
.window_stack_position dw ? ; +4
|
||||||
|
.window_stack_value dw ? ; +6
|
||||||
|
.not_used1 dw ? ; +8
|
||||||
|
.process_name rb 12 ; +10
|
||||||
|
.memory_start dd ? ; +22
|
||||||
|
.used_memory dd ? ; +26
|
||||||
|
.PID dd ? ; +30
|
||||||
|
.x_start dd ? ; +34
|
||||||
|
.y_start dd ? ; +38
|
||||||
|
.x_size dd ? ; +42
|
||||||
|
.y_size dd ? ; +46
|
||||||
|
.slot_state dw ? ; +50
|
||||||
|
dw ? ; +52 - reserved
|
||||||
|
.client_left dd ? ; +54
|
||||||
|
.client_top dd ? ; +58
|
||||||
|
.client_width dd ? ; +62
|
||||||
|
.client_height dd ? ; +66
|
||||||
|
.wnd_state db ? ; +70
|
||||||
|
rb (1024-71)
|
||||||
|
}
|
||||||
struct process_information
|
struct process_information
|
||||||
cpu_usage dd ? ; +0
|
|
||||||
window_stack_position dw ? ; +4
|
|
||||||
window_stack_value dw ? ; +6
|
|
||||||
not_used1 dw ? ; +8
|
|
||||||
process_name rb 12 ; +10
|
|
||||||
memory_start dd ? ; +22
|
|
||||||
used_memory dd ? ; +26
|
|
||||||
PID dd ? ; +30
|
|
||||||
x_start dd ? ; +34
|
|
||||||
y_start dd ? ; +38
|
|
||||||
x_size dd ? ; +42
|
|
||||||
y_size dd ? ; +46
|
|
||||||
slot_state dw ? ; +50
|
|
||||||
rb (1024-52)
|
|
||||||
ends
|
|
||||||
|
|
||||||
|
struc system_colors
|
||||||
|
{
|
||||||
|
.frame dd ?
|
||||||
|
.grab dd ?
|
||||||
|
.grab_button dd ?
|
||||||
|
.grab_button_text dd ?
|
||||||
|
.grab_text dd ?
|
||||||
|
.work dd ?
|
||||||
|
.work_button dd ?
|
||||||
|
.work_button_text dd ?
|
||||||
|
.work_text dd ?
|
||||||
|
.work_graph dd ?
|
||||||
|
}
|
||||||
struct system_colors
|
struct system_colors
|
||||||
frame dd ?
|
|
||||||
grab dd ?
|
|
||||||
grab_button dd ?
|
|
||||||
grab_button_text dd ?
|
|
||||||
grab_text dd ?
|
|
||||||
work dd ?
|
|
||||||
work_button dd ?
|
|
||||||
work_button_text dd ?
|
|
||||||
work_text dd ?
|
|
||||||
work_graph dd ?
|
|
||||||
ends
|
|
||||||
|
|
||||||
|
|
||||||
; constants
|
; constants
|
||||||
|
@ -607,9 +607,11 @@ is_brow:
|
|||||||
mov ebx, gifview
|
mov ebx, gifview
|
||||||
cmp ecx, 'GIF'
|
cmp ecx, 'GIF'
|
||||||
jz run
|
jz run
|
||||||
mov ebx, ac97wav
|
mov ebx, ac97
|
||||||
cmp ecx, 'WAV'
|
cmp ecx, 'WAV'
|
||||||
jz run
|
jz run
|
||||||
|
cmp ecx, 'MP3'
|
||||||
|
jz run
|
||||||
mov ebx, midamp
|
mov ebx, midamp
|
||||||
cmp ecx, 'MID'
|
cmp ecx, 'MID'
|
||||||
jz run
|
jz run
|
||||||
@ -631,6 +633,12 @@ is_brow:
|
|||||||
jz run
|
jz run
|
||||||
cmp ecx, 'INC'
|
cmp ecx, 'INC'
|
||||||
jz run
|
jz run
|
||||||
|
mov ebx, life2
|
||||||
|
cmp ecx, 'LIF'
|
||||||
|
jz run
|
||||||
|
mov ebx, view3ds
|
||||||
|
cmp ecx, '3DS' and not 0x20202020
|
||||||
|
jz run
|
||||||
jmp still
|
jmp still
|
||||||
|
|
||||||
execute:
|
execute:
|
||||||
@ -2540,12 +2548,14 @@ editor db '/RD/1/TINYPAD',0
|
|||||||
bmpview db '/RD/1/MV',0
|
bmpview db '/RD/1/MV',0
|
||||||
jpgview db '/RD/1/JPEGVIEW',0
|
jpgview db '/RD/1/JPEGVIEW',0
|
||||||
gifview db '/RD/1/GIFVIEW',0
|
gifview db '/RD/1/GIFVIEW',0
|
||||||
ac97wav db '/RD/1/AC97WAV',0
|
ac97 db '/RD/1/AC97SND',0
|
||||||
rtfread db '/RD/1/RTFREAD',0
|
rtfread db '/RD/1/RTFREAD',0
|
||||||
; //// Willow
|
; //// Willow
|
||||||
pngview db '/RD/1/@RCHER',0
|
pngview db '/RD/1/@RCHER',0
|
||||||
; //// Willow
|
; //// Willow
|
||||||
midamp db '/RD/1/MIDAMP',0
|
midamp db '/RD/1/MIDAMP',0
|
||||||
|
view3ds db '/RD/1/3D/VIEW3DS',0
|
||||||
|
life2 db '/RD/1/DEMOS/LIFE2',0
|
||||||
|
|
||||||
more_char db 10h
|
more_char db 10h
|
||||||
|
|
||||||
|
BIN
programs/games/freecell/Buben.bmp
Normal file
After Width: | Height: | Size: 824 B |
BIN
programs/games/freecell/Club.bmp
Normal file
After Width: | Height: | Size: 824 B |
BIN
programs/games/freecell/ClubSml.bmp
Normal file
After Width: | Height: | Size: 248 B |
BIN
programs/games/freecell/ClubUD.bmp
Normal file
After Width: | Height: | Size: 824 B |
BIN
programs/games/freecell/Cross.bmp
Normal file
After Width: | Height: | Size: 824 B |
BIN
programs/games/freecell/Diam.bmp
Normal file
After Width: | Height: | Size: 824 B |
BIN
programs/games/freecell/DiamSml.bmp
Normal file
After Width: | Height: | Size: 248 B |
BIN
programs/games/freecell/DiamUD.bmp
Normal file
After Width: | Height: | Size: 824 B |
BIN
programs/games/freecell/Heart.bmp
Normal file
After Width: | Height: | Size: 824 B |
BIN
programs/games/freecell/HeartSml.bmp
Normal file
After Width: | Height: | Size: 248 B |
BIN
programs/games/freecell/HeartUD.bmp
Normal file
After Width: | Height: | Size: 824 B |
269
programs/games/freecell/MACROS.INC
Normal file
@ -0,0 +1,269 @@
|
|||||||
|
; new application structure
|
||||||
|
macro meos_app_start
|
||||||
|
{
|
||||||
|
use32
|
||||||
|
org 0x0
|
||||||
|
|
||||||
|
db 'MENUET01'
|
||||||
|
dd 0x01
|
||||||
|
dd __start
|
||||||
|
dd __end
|
||||||
|
dd __memory
|
||||||
|
dd __stack
|
||||||
|
|
||||||
|
if used __params & ~defined __params
|
||||||
|
dd __params
|
||||||
|
else
|
||||||
|
dd 0x0
|
||||||
|
end if
|
||||||
|
|
||||||
|
dd 0x0
|
||||||
|
}
|
||||||
|
MEOS_APP_START fix meos_app_start
|
||||||
|
|
||||||
|
macro code
|
||||||
|
{
|
||||||
|
__start:
|
||||||
|
}
|
||||||
|
CODE fix code
|
||||||
|
|
||||||
|
macro data
|
||||||
|
{
|
||||||
|
__data:
|
||||||
|
}
|
||||||
|
DATA fix data
|
||||||
|
|
||||||
|
macro udata
|
||||||
|
{
|
||||||
|
if used __params & ~defined __params
|
||||||
|
__params:
|
||||||
|
db 0
|
||||||
|
__end:
|
||||||
|
rb 255
|
||||||
|
else
|
||||||
|
__end:
|
||||||
|
end if
|
||||||
|
__udata:
|
||||||
|
}
|
||||||
|
UDATA fix udata
|
||||||
|
|
||||||
|
macro meos_app_end
|
||||||
|
{
|
||||||
|
align 32
|
||||||
|
rb 2048
|
||||||
|
__stack:
|
||||||
|
__memory:
|
||||||
|
}
|
||||||
|
MEOS_APP_END fix meos_app_end
|
||||||
|
|
||||||
|
|
||||||
|
; macro for defining multiline text data
|
||||||
|
struc mstr [sstring]
|
||||||
|
{
|
||||||
|
forward
|
||||||
|
local ssize
|
||||||
|
virtual at 0
|
||||||
|
db sstring
|
||||||
|
ssize = $
|
||||||
|
end virtual
|
||||||
|
dd ssize
|
||||||
|
db sstring
|
||||||
|
common
|
||||||
|
dd -1
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
; strings
|
||||||
|
macro sz name,[data] { ; from MFAR [mike.dld]
|
||||||
|
common
|
||||||
|
if used name
|
||||||
|
label name
|
||||||
|
end if
|
||||||
|
forward
|
||||||
|
if used name
|
||||||
|
db data
|
||||||
|
end if
|
||||||
|
common
|
||||||
|
if used name
|
||||||
|
.size = $-name
|
||||||
|
end if
|
||||||
|
}
|
||||||
|
|
||||||
|
macro lsz name,[lng,data] { ; from MFAR [mike.dld]
|
||||||
|
common
|
||||||
|
if used name
|
||||||
|
label name
|
||||||
|
end if
|
||||||
|
forward
|
||||||
|
if (used name)&(lang eq lng)
|
||||||
|
db data
|
||||||
|
end if
|
||||||
|
common
|
||||||
|
if used name
|
||||||
|
.size = $-name
|
||||||
|
end if
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; easy system call macro
|
||||||
|
macro mpack dest, hsrc, lsrc
|
||||||
|
{
|
||||||
|
if (hsrc eqtype 0) & (lsrc eqtype 0)
|
||||||
|
mov dest, (hsrc) shl 16 + lsrc
|
||||||
|
else
|
||||||
|
if (hsrc eqtype 0) & (~lsrc eqtype 0)
|
||||||
|
mov dest, (hsrc) shl 16
|
||||||
|
add dest, lsrc
|
||||||
|
else
|
||||||
|
mov dest, hsrc
|
||||||
|
shl dest, 16
|
||||||
|
add dest, lsrc
|
||||||
|
end if
|
||||||
|
end if
|
||||||
|
}
|
||||||
|
|
||||||
|
macro __mov reg,a,b { ; mike.dld
|
||||||
|
if (~a eq)&(~b eq)
|
||||||
|
mpack reg,a,b
|
||||||
|
else if (~a eq)&(b eq)
|
||||||
|
mov reg,a
|
||||||
|
end if
|
||||||
|
}
|
||||||
|
|
||||||
|
macro mcall a,b,c,d,e,f { ; mike.dld
|
||||||
|
__mov eax,a
|
||||||
|
__mov ebx,b
|
||||||
|
__mov ecx,c
|
||||||
|
__mov edx,d
|
||||||
|
__mov esi,e
|
||||||
|
__mov edi,f
|
||||||
|
int 0x40
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; optimize the code for size
|
||||||
|
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp>
|
||||||
|
|
||||||
|
macro add arg1,arg2
|
||||||
|
{
|
||||||
|
if (arg2 eqtype 0)
|
||||||
|
if (arg2) = 1
|
||||||
|
inc arg1
|
||||||
|
else
|
||||||
|
add arg1,arg2
|
||||||
|
end if
|
||||||
|
else
|
||||||
|
add arg1,arg2
|
||||||
|
end if
|
||||||
|
}
|
||||||
|
|
||||||
|
macro sub arg1,arg2
|
||||||
|
{
|
||||||
|
if (arg2 eqtype 0)
|
||||||
|
if (arg2) = 1
|
||||||
|
dec arg1
|
||||||
|
else
|
||||||
|
sub arg1,arg2
|
||||||
|
end if
|
||||||
|
else
|
||||||
|
sub arg1,arg2
|
||||||
|
end if
|
||||||
|
}
|
||||||
|
|
||||||
|
macro mov arg1,arg2
|
||||||
|
{
|
||||||
|
if (arg1 in __regs) & ((arg2 eqtype 0) | (arg2 eqtype '0'))
|
||||||
|
if (arg2) = 0
|
||||||
|
xor arg1,arg1
|
||||||
|
else if (arg2) = 1
|
||||||
|
xor arg1,arg1
|
||||||
|
inc arg1
|
||||||
|
else if (arg2) = -1
|
||||||
|
or arg1,-1
|
||||||
|
else if (arg2) > -128 & (arg2) < 128
|
||||||
|
push arg2
|
||||||
|
pop arg1
|
||||||
|
else
|
||||||
|
mov arg1,arg2
|
||||||
|
end if
|
||||||
|
else
|
||||||
|
mov arg1,arg2
|
||||||
|
end if
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
macro struct name
|
||||||
|
{
|
||||||
|
virtual at 0
|
||||||
|
name name
|
||||||
|
sizeof.#name = $ - name
|
||||||
|
end virtual
|
||||||
|
}
|
||||||
|
|
||||||
|
; structures used in MeOS
|
||||||
|
struc process_information
|
||||||
|
{
|
||||||
|
.cpu_usage dd ? ; +0
|
||||||
|
.window_stack_position dw ? ; +4
|
||||||
|
.window_stack_value dw ? ; +6
|
||||||
|
.not_used1 dw ? ; +8
|
||||||
|
.process_name rb 12 ; +10
|
||||||
|
.memory_start dd ? ; +22
|
||||||
|
.used_memory dd ? ; +26
|
||||||
|
.PID dd ? ; +30
|
||||||
|
.x_start dd ? ; +34
|
||||||
|
.y_start dd ? ; +38
|
||||||
|
.x_size dd ? ; +42
|
||||||
|
.y_size dd ? ; +46
|
||||||
|
.slot_state dw ? ; +50
|
||||||
|
dw ? ; +52 - reserved
|
||||||
|
.client_left dd ? ; +54
|
||||||
|
.client_top dd ? ; +58
|
||||||
|
.client_width dd ? ; +62
|
||||||
|
.client_height dd ? ; +66
|
||||||
|
.wnd_state db ? ; +70
|
||||||
|
rb (1024-71)
|
||||||
|
}
|
||||||
|
struct process_information
|
||||||
|
|
||||||
|
struc system_colors
|
||||||
|
{
|
||||||
|
.frame dd ?
|
||||||
|
.grab dd ?
|
||||||
|
.grab_button dd ?
|
||||||
|
.grab_button_text dd ?
|
||||||
|
.grab_text dd ?
|
||||||
|
.work dd ?
|
||||||
|
.work_button dd ?
|
||||||
|
.work_button_text dd ?
|
||||||
|
.work_text dd ?
|
||||||
|
.work_graph dd ?
|
||||||
|
}
|
||||||
|
struct system_colors
|
||||||
|
|
||||||
|
|
||||||
|
; constants
|
||||||
|
|
||||||
|
; events
|
||||||
|
EV_IDLE = 0
|
||||||
|
EV_TIMER = 0
|
||||||
|
EV_REDRAW = 1
|
||||||
|
EV_KEY = 2
|
||||||
|
EV_BUTTON = 3
|
||||||
|
EV_EXIT = 4
|
||||||
|
EV_BACKGROUND = 5
|
||||||
|
EV_MOUSE = 6
|
||||||
|
EV_IPC = 7
|
||||||
|
EV_STACK = 8
|
||||||
|
|
||||||
|
; event mask bits for function 40
|
||||||
|
EVM_REDRAW = 1b
|
||||||
|
EVM_KEY = 10b
|
||||||
|
EVM_BUTTON = 100b
|
||||||
|
EVM_EXIT = 1000b
|
||||||
|
EVM_BACKGROUND = 10000b
|
||||||
|
EVM_MOUSE = 100000b
|
||||||
|
EVM_IPC = 1000000b
|
||||||
|
EVM_STACK = 10000000b
|
BIN
programs/games/freecell/Pick.bmp
Normal file
After Width: | Height: | Size: 824 B |
BIN
programs/games/freecell/Spade.bmp
Normal file
After Width: | Height: | Size: 824 B |
BIN
programs/games/freecell/SpadeSml.bmp
Normal file
After Width: | Height: | Size: 248 B |
BIN
programs/games/freecell/SpadeUD.bmp
Normal file
After Width: | Height: | Size: 824 B |
2
programs/games/freecell/build.bat
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
@fasm freecell.asm freecell
|
||||||
|
@pause
|
2096
programs/games/freecell/freecell.ASM
Normal file
26
programs/games/freecell/play.txt
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
FreeCell.
|
||||||
|
|
||||||
|
You can find this games in Windows XP and Linux Mandrake 9.0 distributions.
|
||||||
|
|
||||||
|
Rules to FreeCell can be found in help files for those games but I place here
|
||||||
|
game rules from site www.freecell.org:
|
||||||
|
|
||||||
|
4 cells (top left) - storage locations for cards.
|
||||||
|
Only 1 card allowed in each cell.
|
||||||
|
|
||||||
|
8 tableau piles (below foundations and cells) - build down by alternate color.
|
||||||
|
Move groups of cards if they are in sequence down by alternate color and if
|
||||||
|
there are enough free cells that the cards could be moved individually.
|
||||||
|
Spaces can be filled by any card or legal group of cards (see KingOnly for
|
||||||
|
option). At the start of the game 7 cards are dealt face up to the leftmost 4
|
||||||
|
piles, 6 cards are dealt face up to the remaining piles.
|
||||||
|
|
||||||
|
Some features not implemented yet: moving groups of cards - you
|
||||||
|
can move only one card at one time, no automatic moving of
|
||||||
|
some cards in home.
|
||||||
|
|
||||||
|
|
||||||
|
You only need to copy the file freecell to the floppy; The rest of the
|
||||||
|
files are for assembling the code.
|
||||||
|
|
||||||
|
Alexandr Gorbovets gorsash@mail.ru
|
@ -1,835 +0,0 @@
|
|||||||
lang equ ru ; ru en fr ge fi
|
|
||||||
|
|
||||||
;
|
|
||||||
; Assembler
|
|
||||||
; SMALL
|
|
||||||
; CODE
|
|
||||||
; Libary
|
|
||||||
;
|
|
||||||
; Ver 0.14 By Pavlushin Evgeni (RUSSIA)
|
|
||||||
; www.waptap@mail.ru
|
|
||||||
|
|
||||||
;Please compile aplications on FASM ver1.54 or higer!!!
|
|
||||||
|
|
||||||
;InfoList
|
|
||||||
;0.01 scank,putpix,puttxt
|
|
||||||
;0.02 label,random,colors
|
|
||||||
;0.03 window,startwd,endwd,attributes
|
|
||||||
;0.04 close,delay,scevent ~30.04.2004
|
|
||||||
;0.05 small random, ~04.05.2004
|
|
||||||
;0.06 wtevent ~09.05.2004
|
|
||||||
;0.07 timeevent ~23.05.2004
|
|
||||||
;0.08 txtput ~14.06.2004
|
|
||||||
;0.09 opendialog,savedialog ~20.06.2004
|
|
||||||
;0.10 wordstoreg by halyavin, add at ~30.08.2004
|
|
||||||
; random bug deleted eax is use.
|
|
||||||
;0.11 loadfile from me +puttxt bug del ~07.09.2004
|
|
||||||
;0.12 open/save dialog ~13.09.2004
|
|
||||||
;0.13 dialogs bugs deleted
|
|
||||||
;0.14 drawlbut ~03.10.2004
|
|
||||||
|
|
||||||
; LOADFILE
|
|
||||||
; (SYNTAX) LOADFILE 'full_path_to_file',file_load_area,file_temp_area
|
|
||||||
; (SAMPLE) LOADFILE '/rd/1/clock.bmp',load_area,temp_area
|
|
||||||
|
|
||||||
macro loadfile file_name,file_load_area,file_temp_area
|
|
||||||
{
|
|
||||||
local open,fileinfo,string
|
|
||||||
jmp open
|
|
||||||
fileinfo:
|
|
||||||
dd 0
|
|
||||||
dd 0
|
|
||||||
dd 1
|
|
||||||
dd file_load_area
|
|
||||||
dd file_temp_area
|
|
||||||
string:
|
|
||||||
db file_name,0
|
|
||||||
open:
|
|
||||||
mov dword [fileinfo+8],1 ; how many blocks to read (1)
|
|
||||||
mov eax,58
|
|
||||||
mov ebx,fileinfo
|
|
||||||
int 0x40
|
|
||||||
mov eax,[file_load_area+2]
|
|
||||||
shr eax,9 ; ¯®¤¥«¨¬ 512 ¨ ¯à¨¡ ¢¨¬ 1 - ¯®«ã稬 ç¨á«® ¡«®ª®¢
|
|
||||||
inc eax
|
|
||||||
mov dword [fileinfo+8],eax
|
|
||||||
mov eax,58
|
|
||||||
mov ebx,fileinfo
|
|
||||||
int 0x40
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
macro wordstoreg reg,hiword,loword
|
|
||||||
{
|
|
||||||
if hiword eqtype 0 & loword eqtype 0
|
|
||||||
mov reg,hiword*65536+loword
|
|
||||||
else if hiword eqtype 12 & loword eqtype eax
|
|
||||||
mov reg,hiword*65536
|
|
||||||
add reg,loword
|
|
||||||
else if hiword eqtype 12 & loword eqtype [123]
|
|
||||||
mov reg,hiword*65536
|
|
||||||
add reg,loword
|
|
||||||
else
|
|
||||||
mov reg,hiword
|
|
||||||
shl reg,16
|
|
||||||
add reg,loword
|
|
||||||
end if
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
; DRAW BUTTON with label
|
|
||||||
|
|
||||||
macro drawlbut x,y,xs,ys,text,id,bcolor,tcolor
|
|
||||||
{
|
|
||||||
local asd,lab
|
|
||||||
jmp asd
|
|
||||||
lab db text ;arg label
|
|
||||||
asd:
|
|
||||||
wordstoreg ebx,x,xs
|
|
||||||
wordstoreg ecx,y,ys
|
|
||||||
mov edx,id
|
|
||||||
mov esi,bcolor
|
|
||||||
mov eax,8
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
mov eax,asd-lab ;calc size
|
|
||||||
mov ebx,6
|
|
||||||
mul ebx
|
|
||||||
mov esi,eax
|
|
||||||
|
|
||||||
mov eax,xs
|
|
||||||
sub eax,esi
|
|
||||||
shr eax,1
|
|
||||||
add eax,x
|
|
||||||
|
|
||||||
mov edx,ys
|
|
||||||
sub edx,7
|
|
||||||
shr edx,1
|
|
||||||
add edx,y
|
|
||||||
|
|
||||||
mov ebx,eax
|
|
||||||
shl ebx,16
|
|
||||||
add ebx,edx
|
|
||||||
|
|
||||||
mov ecx,tcolor ;arg4 color
|
|
||||||
mov edx,lab
|
|
||||||
mov esi,asd-lab ;calc size
|
|
||||||
mov eax,4
|
|
||||||
int 0x40
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
macro opendialog redproc,openoff,erroff,path
|
|
||||||
{
|
|
||||||
local new_d, get_loops, dlg_pid_get, DLGPID, num_of_proc
|
|
||||||
local run_fileinfo, param
|
|
||||||
local getmesloop, loox, mred, mkey, mbutton, mgetmes
|
|
||||||
local dlg_is_work, ready, procinfo
|
|
||||||
;
|
|
||||||
; STEP 1 Run SYSXTREE with parametrs MYPID 4 bytes in dec,
|
|
||||||
; 1 byte space, 1 byte type of dialog (O - Open ,S - Save)
|
|
||||||
;
|
|
||||||
|
|
||||||
cld
|
|
||||||
;; mov esi,path
|
|
||||||
mov edi,path
|
|
||||||
mov eax,0
|
|
||||||
mov ecx,200
|
|
||||||
rep stosb
|
|
||||||
|
|
||||||
;mov [get_loops],0
|
|
||||||
mov [dlg_pid_get],0
|
|
||||||
|
|
||||||
; Get my PID in dec format 4 bytes
|
|
||||||
mov eax,9
|
|
||||||
mov ebx,procinfo
|
|
||||||
mov ecx,-1
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
; convert eax bin to param dec
|
|
||||||
mov eax,dword [procinfo+30] ;offset of myPID
|
|
||||||
mov edi,param+4-1 ;offset to 4 bytes
|
|
||||||
mov ecx,4
|
|
||||||
mov ebx,10
|
|
||||||
cld
|
|
||||||
new_d:
|
|
||||||
xor edx,edx
|
|
||||||
div ebx
|
|
||||||
add dl,'0'
|
|
||||||
mov [edi],dl
|
|
||||||
dec edi
|
|
||||||
loop new_d
|
|
||||||
|
|
||||||
; wirite 1 byte space to param
|
|
||||||
mov [param+4],byte 32 ;Space for next parametr
|
|
||||||
; and 1 byte type of dialog to param
|
|
||||||
mov [param+5],byte 'O' ;Get Open dialog (Use 'S' for Save dialog)
|
|
||||||
|
|
||||||
;
|
|
||||||
; STEP2 prepare IPC area for get messages
|
|
||||||
;
|
|
||||||
|
|
||||||
; prepare IPC area
|
|
||||||
mov [path],dword 0
|
|
||||||
mov [path+4],dword 8
|
|
||||||
|
|
||||||
; define IPC memory
|
|
||||||
mov eax,60
|
|
||||||
mov ebx,1 ; define IPC
|
|
||||||
mov ecx,path ; offset of area
|
|
||||||
mov edx,150 ; size 150 bytes
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
; change wanted events list 7-bit IPC event
|
|
||||||
mov eax,40
|
|
||||||
mov ebx,01000111b
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
;
|
|
||||||
; STEP 3 run SYSTEM XTREE with parameters
|
|
||||||
;
|
|
||||||
|
|
||||||
mov eax,58
|
|
||||||
mov ebx,run_fileinfo
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
call redproc
|
|
||||||
|
|
||||||
mov [get_loops],0
|
|
||||||
getmesloop:
|
|
||||||
mov eax,23
|
|
||||||
mov ebx,50 ;0.5 sec
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
cmp eax,1
|
|
||||||
je mred
|
|
||||||
cmp eax,2
|
|
||||||
je mkey
|
|
||||||
cmp eax,3
|
|
||||||
je mbutton
|
|
||||||
cmp eax,7
|
|
||||||
je mgetmes
|
|
||||||
|
|
||||||
; Get number of procces
|
|
||||||
mov ebx,procinfo
|
|
||||||
mov ecx,-1
|
|
||||||
mov eax,9
|
|
||||||
int 0x40
|
|
||||||
mov ebp,eax
|
|
||||||
|
|
||||||
loox:
|
|
||||||
mov eax,9
|
|
||||||
mov ebx,procinfo
|
|
||||||
mov ecx,ebp
|
|
||||||
int 0x40
|
|
||||||
mov eax,[DLGPID]
|
|
||||||
cmp [procinfo+30],eax ;IF Dialog find
|
|
||||||
je dlg_is_work ;jmp to dlg_is_work
|
|
||||||
dec ebp
|
|
||||||
jnz loox
|
|
||||||
|
|
||||||
jmp erroff
|
|
||||||
|
|
||||||
dlg_is_work:
|
|
||||||
cmp [procinfo+50],word 9 ;If slot state 9 - dialog is terminated
|
|
||||||
je erroff ;TESTODP2 terminated too
|
|
||||||
|
|
||||||
cmp [dlg_pid_get],dword 1
|
|
||||||
je getmesloop
|
|
||||||
inc [get_loops]
|
|
||||||
cmp [get_loops],4 ;2 sec if DLG_PID not get, TESTOP2 terminated
|
|
||||||
jae erroff
|
|
||||||
jmp getmesloop
|
|
||||||
|
|
||||||
mred:
|
|
||||||
call redproc
|
|
||||||
jmp getmesloop
|
|
||||||
mkey:
|
|
||||||
mov eax,2
|
|
||||||
int 0x40 ; read (eax=2)
|
|
||||||
jmp getmesloop
|
|
||||||
mbutton:
|
|
||||||
mov eax,17 ; get id
|
|
||||||
int 0x40
|
|
||||||
cmp ah,1 ; button id=1 ?
|
|
||||||
jne getmesloop
|
|
||||||
mov eax,-1 ; close this program
|
|
||||||
int 0x40
|
|
||||||
mgetmes:
|
|
||||||
|
|
||||||
; If dlg_pid_get then second message get jmp to still
|
|
||||||
cmp [dlg_pid_get],dword 1
|
|
||||||
je ready
|
|
||||||
|
|
||||||
; First message is number of PID SYSXTREE dialog
|
|
||||||
|
|
||||||
; convert PID dec to PID bin
|
|
||||||
movzx eax,byte [path+16]
|
|
||||||
sub eax,48
|
|
||||||
imul eax,10
|
|
||||||
movzx ebx,byte [path+16+1]
|
|
||||||
add eax,ebx
|
|
||||||
sub eax,48
|
|
||||||
imul eax,10
|
|
||||||
movzx ebx,byte [path+16+2]
|
|
||||||
add eax,ebx
|
|
||||||
sub eax,48
|
|
||||||
imul eax,10
|
|
||||||
movzx ebx,byte [path+16+3]
|
|
||||||
add eax,ebx
|
|
||||||
sub eax,48
|
|
||||||
mov [DLGPID],eax
|
|
||||||
|
|
||||||
; Claear and prepare IPC area for next message
|
|
||||||
mov [path],dword 0
|
|
||||||
mov [path+4],dword 8
|
|
||||||
mov [path+8],dword 0
|
|
||||||
mov [path+12],dword 0
|
|
||||||
mov [path+16],dword 0
|
|
||||||
|
|
||||||
; Set dlg_pid_get for get next message
|
|
||||||
mov [dlg_pid_get],dword 1
|
|
||||||
call redproc ;show DLG_PID
|
|
||||||
jmp getmesloop
|
|
||||||
|
|
||||||
ready:
|
|
||||||
;
|
|
||||||
; The second message get
|
|
||||||
; Second message is 100 bytes path to SAVE/OPEN file
|
|
||||||
; shl path string on 16 bytes
|
|
||||||
;
|
|
||||||
cld
|
|
||||||
mov esi,path+16
|
|
||||||
mov edi,path
|
|
||||||
mov ecx,200
|
|
||||||
rep movsb
|
|
||||||
mov [edi],byte 0
|
|
||||||
|
|
||||||
jmp openoff
|
|
||||||
|
|
||||||
|
|
||||||
; DATA AREA
|
|
||||||
get_loops dd 0
|
|
||||||
dlg_pid_get dd 0
|
|
||||||
DLGPID dd 0
|
|
||||||
|
|
||||||
param:
|
|
||||||
dd 0 ; My dec PID
|
|
||||||
dd 0,0 ; Type of dialog
|
|
||||||
|
|
||||||
run_fileinfo:
|
|
||||||
dd 16
|
|
||||||
dd 0
|
|
||||||
dd param
|
|
||||||
dd 0
|
|
||||||
dd procinfo ; 0x10000
|
|
||||||
;run_filepath
|
|
||||||
db '/RD/1/SYSXTREE',0
|
|
||||||
|
|
||||||
procinfo:
|
|
||||||
times 256 db 0
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
macro savedialog redproc,openoff,erroff,path
|
|
||||||
{
|
|
||||||
local new_d, get_loops, dlg_pid_get, DLGPID, num_of_proc
|
|
||||||
local run_fileinfo, run_filepath, param
|
|
||||||
local getmesloop, loox, mred, mkey, mbutton, mgetmes
|
|
||||||
local dlg_is_work, ready, procinfo
|
|
||||||
;
|
|
||||||
; STEP 1 Run SYSXTREE with parametrs MYPID 4 bytes in dec,
|
|
||||||
; 1 byte space, 1 byte type of dialog (O - Open ,S - Save)
|
|
||||||
;
|
|
||||||
|
|
||||||
cld
|
|
||||||
;; mov esi,path
|
|
||||||
mov edi,path
|
|
||||||
mov eax,0
|
|
||||||
mov ecx,200
|
|
||||||
rep stosb
|
|
||||||
|
|
||||||
;mov [get_loops],0
|
|
||||||
mov [dlg_pid_get],0
|
|
||||||
|
|
||||||
; Get my PID in dec format 4 bytes
|
|
||||||
mov eax,9
|
|
||||||
mov ebx,procinfo
|
|
||||||
mov ecx,-1
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
; convert eax bin to param dec
|
|
||||||
mov eax,dword [procinfo+30] ;offset of myPID
|
|
||||||
mov edi,param+4-1 ;offset to 4 bytes
|
|
||||||
mov ecx,4
|
|
||||||
mov ebx,10
|
|
||||||
cld
|
|
||||||
new_d:
|
|
||||||
xor edx,edx
|
|
||||||
div ebx
|
|
||||||
add dl,'0'
|
|
||||||
mov [edi],dl
|
|
||||||
dec edi
|
|
||||||
loop new_d
|
|
||||||
|
|
||||||
; wirite 1 byte space to param
|
|
||||||
mov [param+4],byte 32 ;Space for next parametr
|
|
||||||
; and 1 byte type of dialog to param
|
|
||||||
mov [param+5],byte 'S' ;Get Open dialog (Use 'S' for Save dialog)
|
|
||||||
|
|
||||||
;
|
|
||||||
; STEP2 prepare IPC area for get messages
|
|
||||||
;
|
|
||||||
|
|
||||||
; prepare IPC area
|
|
||||||
mov [path],dword 0
|
|
||||||
mov [path+4],dword 8
|
|
||||||
|
|
||||||
; define IPC memory
|
|
||||||
mov eax,60
|
|
||||||
mov ebx,1 ; define IPC
|
|
||||||
mov ecx,path ; offset of area
|
|
||||||
mov edx,120 ; size 150 bytes
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
; change wanted events list 7-bit IPC event
|
|
||||||
mov eax,40
|
|
||||||
mov ebx,01000111b
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
;
|
|
||||||
; STEP 3 run SYSTEM XTREE with parameters
|
|
||||||
;
|
|
||||||
|
|
||||||
mov eax,58
|
|
||||||
mov ebx,run_fileinfo
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
call redproc
|
|
||||||
|
|
||||||
mov [get_loops],0
|
|
||||||
getmesloop:
|
|
||||||
mov eax,23
|
|
||||||
mov ebx,50 ;0.5 sec
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
cmp eax,1
|
|
||||||
je mred
|
|
||||||
cmp eax,2
|
|
||||||
je mkey
|
|
||||||
cmp eax,3
|
|
||||||
je mbutton
|
|
||||||
cmp eax,7
|
|
||||||
je mgetmes
|
|
||||||
|
|
||||||
; Get number of procces
|
|
||||||
mov ebx,procinfo
|
|
||||||
mov ecx,-1
|
|
||||||
mov eax,9
|
|
||||||
int 0x40
|
|
||||||
mov ebp,eax
|
|
||||||
|
|
||||||
loox:
|
|
||||||
mov eax,9
|
|
||||||
mov ebx,procinfo
|
|
||||||
mov ecx,ebp
|
|
||||||
int 0x40
|
|
||||||
mov eax,[DLGPID]
|
|
||||||
cmp [procinfo+30],eax ;IF Dialog find
|
|
||||||
je dlg_is_work ;jmp to dlg_is_work
|
|
||||||
dec ebp
|
|
||||||
jnz loox
|
|
||||||
|
|
||||||
jmp erroff
|
|
||||||
|
|
||||||
dlg_is_work:
|
|
||||||
cmp [procinfo+50],word 9 ;If slot state 9 - dialog is terminated
|
|
||||||
je erroff ;TESTODP2 terminated too
|
|
||||||
|
|
||||||
cmp [dlg_pid_get],dword 1
|
|
||||||
je getmesloop
|
|
||||||
inc [get_loops]
|
|
||||||
cmp [get_loops],4 ;2 sec if DLG_PID not get, TESTOP2 terminated
|
|
||||||
jae erroff
|
|
||||||
jmp getmesloop
|
|
||||||
|
|
||||||
mred:
|
|
||||||
call redproc
|
|
||||||
jmp getmesloop
|
|
||||||
mkey:
|
|
||||||
int 0x40 ; read (eax=2)
|
|
||||||
jmp getmesloop
|
|
||||||
mbutton:
|
|
||||||
mov eax,17 ; get id
|
|
||||||
int 0x40
|
|
||||||
cmp ah,1 ; button id=1 ?
|
|
||||||
jne getmesloop
|
|
||||||
mov eax,-1 ; close this program
|
|
||||||
int 0x40
|
|
||||||
mgetmes:
|
|
||||||
|
|
||||||
; If dlg_pid_get then second message get jmp to still
|
|
||||||
cmp [dlg_pid_get],dword 1
|
|
||||||
je ready
|
|
||||||
|
|
||||||
; First message is number of PID SYSXTREE dialog
|
|
||||||
|
|
||||||
; convert PID dec to PID bin
|
|
||||||
movzx eax,byte [path+16]
|
|
||||||
sub eax,48
|
|
||||||
imul eax,10
|
|
||||||
movzx ebx,byte [path+16+1]
|
|
||||||
add eax,ebx
|
|
||||||
sub eax,48
|
|
||||||
imul eax,10
|
|
||||||
movzx ebx,byte [path+16+2]
|
|
||||||
add eax,ebx
|
|
||||||
sub eax,48
|
|
||||||
imul eax,10
|
|
||||||
movzx ebx,byte [path+16+3]
|
|
||||||
add eax,ebx
|
|
||||||
sub eax,48
|
|
||||||
mov [DLGPID],eax
|
|
||||||
|
|
||||||
; Claear and prepare IPC area for next message
|
|
||||||
mov [path],dword 0
|
|
||||||
mov [path+4],dword 8
|
|
||||||
mov [path+8],dword 0
|
|
||||||
mov [path+12],dword 0
|
|
||||||
mov [path+16],dword 0
|
|
||||||
|
|
||||||
; Set dlg_pid_get for get next message
|
|
||||||
mov [dlg_pid_get],dword 1
|
|
||||||
call redproc ;show DLG_PID
|
|
||||||
jmp getmesloop
|
|
||||||
|
|
||||||
ready:
|
|
||||||
;
|
|
||||||
; The second message get
|
|
||||||
; Second message is 100 bytes path to SAVE/OPEN file
|
|
||||||
; shl path string on 16 bytes
|
|
||||||
;
|
|
||||||
cld
|
|
||||||
mov esi,path+16
|
|
||||||
mov edi,path
|
|
||||||
mov ecx,200
|
|
||||||
rep movsb
|
|
||||||
mov [edi],byte 0
|
|
||||||
|
|
||||||
jmp openoff
|
|
||||||
|
|
||||||
|
|
||||||
; DATA AREA
|
|
||||||
get_loops dd 0
|
|
||||||
dlg_pid_get dd 0
|
|
||||||
DLGPID dd 0
|
|
||||||
|
|
||||||
param:
|
|
||||||
rb 4 ; My dec PID
|
|
||||||
rb 6 ; Type of dialog
|
|
||||||
|
|
||||||
run_fileinfo:
|
|
||||||
dd 16
|
|
||||||
dd 0
|
|
||||||
dd param
|
|
||||||
dd 0
|
|
||||||
dd procinfo
|
|
||||||
run_filepath:
|
|
||||||
db '/RD/1/SYSXTREE',0
|
|
||||||
|
|
||||||
procinfo:
|
|
||||||
times 256 db 0
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; RANDOM - generate random count (small)
|
|
||||||
; (SYNTAX) RANDOM MaxCount,OutArgument
|
|
||||||
; (SAMPLE) RANDOM 10000,eax
|
|
||||||
; ( NOTE ) Maxint<65536 ; use random 65536,eax for more combinations
|
|
||||||
|
|
||||||
randomuse = 0
|
|
||||||
|
|
||||||
macro random arg1,arg2
|
|
||||||
{
|
|
||||||
local rxproc
|
|
||||||
randomuse = randomuse + 1
|
|
||||||
|
|
||||||
jmp rxproc
|
|
||||||
|
|
||||||
if defined randomuse & randomuse = 1
|
|
||||||
randomproc:
|
|
||||||
jmp rnj
|
|
||||||
rsx1 dw 0x4321
|
|
||||||
rsx2 dw 0x1234
|
|
||||||
rnj:
|
|
||||||
; mov eax,arg1
|
|
||||||
push bx
|
|
||||||
push cx
|
|
||||||
push dx
|
|
||||||
push si
|
|
||||||
push di
|
|
||||||
mov cx,ax
|
|
||||||
mov ax,word ptr rsx1
|
|
||||||
mov bx,word ptr rsx2
|
|
||||||
mov si,ax
|
|
||||||
mov di,bx
|
|
||||||
mov dl,ah
|
|
||||||
mov ah,al
|
|
||||||
mov al,bh
|
|
||||||
mov bh,bl
|
|
||||||
xor bl,bl
|
|
||||||
rcr dl,1
|
|
||||||
rcr ax,1
|
|
||||||
rcr bx,1
|
|
||||||
add bx,di
|
|
||||||
adc ax,si
|
|
||||||
add bx,0x62e9
|
|
||||||
adc ax,0x3619
|
|
||||||
mov word ptr rsx1,bx
|
|
||||||
mov word ptr rsx2,ax
|
|
||||||
xor dx,dx
|
|
||||||
cmp ax,0
|
|
||||||
je nodiv
|
|
||||||
cmp cx,0
|
|
||||||
je nodiv
|
|
||||||
div cx
|
|
||||||
nodiv:
|
|
||||||
mov ax,dx
|
|
||||||
pop di
|
|
||||||
pop si
|
|
||||||
pop dx
|
|
||||||
pop cx
|
|
||||||
pop bx
|
|
||||||
and eax,0000ffffh
|
|
||||||
; mov arg2,0
|
|
||||||
; mov arg2,eax
|
|
||||||
ret
|
|
||||||
end if
|
|
||||||
|
|
||||||
rxproc:
|
|
||||||
mov eax,arg1
|
|
||||||
call randomproc
|
|
||||||
mov arg2,eax
|
|
||||||
}
|
|
||||||
|
|
||||||
macro scank
|
|
||||||
{
|
|
||||||
mov eax,10
|
|
||||||
int 0x40
|
|
||||||
}
|
|
||||||
|
|
||||||
macro putpix x,y,color
|
|
||||||
{
|
|
||||||
mov ebx,x
|
|
||||||
mov ecx,y
|
|
||||||
mov edx,color
|
|
||||||
mov eax,1
|
|
||||||
int 0x40
|
|
||||||
}
|
|
||||||
|
|
||||||
macro puttxt x,y,offs,size,color
|
|
||||||
{
|
|
||||||
; mov ebx,x
|
|
||||||
; shl ebx,16
|
|
||||||
; add ebx,y
|
|
||||||
wordstoreg ebx,x,y
|
|
||||||
mov ecx,color
|
|
||||||
mov edx,offs
|
|
||||||
mov esi,size
|
|
||||||
mov eax,4
|
|
||||||
int 0x40
|
|
||||||
}
|
|
||||||
|
|
||||||
macro outcount data, x, y, color, numtype
|
|
||||||
{
|
|
||||||
mov ecx,data
|
|
||||||
mov ebx,numtype
|
|
||||||
mov bl,0
|
|
||||||
; mov edx,x*65536+y
|
|
||||||
wordstoreg edx,x,y
|
|
||||||
mov esi,color
|
|
||||||
mov eax,47
|
|
||||||
int 0x40
|
|
||||||
}
|
|
||||||
|
|
||||||
; SCEVENT - Scan event
|
|
||||||
|
|
||||||
macro scevent red,key,but
|
|
||||||
{
|
|
||||||
mov eax,11
|
|
||||||
int 0x40
|
|
||||||
dec eax
|
|
||||||
jz red
|
|
||||||
dec eax
|
|
||||||
jz key
|
|
||||||
dec eax
|
|
||||||
jz but
|
|
||||||
}
|
|
||||||
|
|
||||||
; WTEVENT - Wait event
|
|
||||||
|
|
||||||
macro wtevent red,key,but
|
|
||||||
{
|
|
||||||
mov eax,10
|
|
||||||
int 0x40
|
|
||||||
dec eax
|
|
||||||
jz red
|
|
||||||
dec eax
|
|
||||||
jz key
|
|
||||||
dec eax
|
|
||||||
jz but
|
|
||||||
}
|
|
||||||
|
|
||||||
; TIMEEVENT - Wite for event with timeout
|
|
||||||
|
|
||||||
macro timeevent xfps,noevent,red,key,but
|
|
||||||
{
|
|
||||||
mov eax,23
|
|
||||||
mov ebx,xfps
|
|
||||||
int 0x40
|
|
||||||
cmp eax,0
|
|
||||||
je noevent
|
|
||||||
dec eax
|
|
||||||
jz red
|
|
||||||
dec eax
|
|
||||||
jz key
|
|
||||||
dec eax
|
|
||||||
jz but
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
; CLOSE - Close program
|
|
||||||
|
|
||||||
macro close
|
|
||||||
{
|
|
||||||
mov eax,-1
|
|
||||||
int 0x40
|
|
||||||
}
|
|
||||||
|
|
||||||
; DELAY - Create delay 1/100 sec
|
|
||||||
; (SYNTAX) Delay time
|
|
||||||
; (SAMPLE) Delay 100 ;delay 2 sec 1/100*200=2 sec
|
|
||||||
|
|
||||||
macro delay arg1
|
|
||||||
{
|
|
||||||
mov eax,5
|
|
||||||
mov ebx,arg1
|
|
||||||
int 0x40
|
|
||||||
}
|
|
||||||
|
|
||||||
; WINDOW - Draw window
|
|
||||||
; (SYNTAX) WINDOW Xstart,Ystart,'Text',Color
|
|
||||||
; (SAMPLE) WINDOW 10,10,640+8,480+24,window_Skinned
|
|
||||||
|
|
||||||
macro window arg1,arg2,arg3,arg4,arg5
|
|
||||||
{
|
|
||||||
; mov ebx,arg1*65536+arg3
|
|
||||||
; mov ecx,arg2*65536+arg4
|
|
||||||
wordstoreg ebx,arg1,arg3
|
|
||||||
wordstoreg ecx,arg2,arg4
|
|
||||||
mov edx,arg5
|
|
||||||
mov eax,0
|
|
||||||
int 0x40
|
|
||||||
}
|
|
||||||
|
|
||||||
macro colorwindow arg1,arg2,arg3,arg4,arg5,arg6,arg7
|
|
||||||
{
|
|
||||||
mov ebx,arg1*65536+arg3
|
|
||||||
mov ecx,arg2*65536+arg4
|
|
||||||
mov edx,arg5
|
|
||||||
mov esi,arg6
|
|
||||||
mov edi,arg7
|
|
||||||
mov eax,0
|
|
||||||
int 0x40
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
; STARTWD - Start of window draw
|
|
||||||
|
|
||||||
macro startwd
|
|
||||||
{
|
|
||||||
mov eax,12
|
|
||||||
mov ebx,1
|
|
||||||
int 0x40
|
|
||||||
}
|
|
||||||
|
|
||||||
; ENDWD - End window draw
|
|
||||||
|
|
||||||
macro endwd
|
|
||||||
{
|
|
||||||
mov eax,12
|
|
||||||
mov ebx,2
|
|
||||||
int 0x40
|
|
||||||
}
|
|
||||||
|
|
||||||
; LABEL - Put text to frame
|
|
||||||
; (SYNTAX) LABEL Xstart,Ystart,'Text',Color
|
|
||||||
; (SAMPLE) LABEL 10,12,'Hello World!',cl_Green+font_Big
|
|
||||||
|
|
||||||
macro label arg1,arg2,arg3,arg4
|
|
||||||
{
|
|
||||||
local asd,lab
|
|
||||||
jmp asd
|
|
||||||
lab db arg3 ;arg label
|
|
||||||
asd:
|
|
||||||
; mov ebx,arg1 ;arg1=y arg2=x
|
|
||||||
; shl ebx,16
|
|
||||||
; add ebx,arg2
|
|
||||||
wordstoreg ebx,arg1,arg2
|
|
||||||
mov ecx,arg4 ;arg4 color
|
|
||||||
mov edx,lab
|
|
||||||
mov esi,asd-lab ;calc size
|
|
||||||
mov eax,4
|
|
||||||
int 0x40
|
|
||||||
}
|
|
||||||
|
|
||||||
;Key's
|
|
||||||
key_Up equ 178
|
|
||||||
key_Down equ 177
|
|
||||||
key_Right equ 179
|
|
||||||
key_Left equ 176
|
|
||||||
key_Esc equ 27
|
|
||||||
key_Space equ 32
|
|
||||||
key_Enter equ 13
|
|
||||||
key_Bspace equ 8
|
|
||||||
key_F1 equ 50
|
|
||||||
key_F2 equ 51
|
|
||||||
key_F3 equ 52
|
|
||||||
key_F4 equ 53
|
|
||||||
key_F5 equ 54
|
|
||||||
key_F6 equ 55
|
|
||||||
key_F7 equ 56
|
|
||||||
key_F8 equ 57
|
|
||||||
key_F9 equ 48
|
|
||||||
key_F10 equ 49
|
|
||||||
key_F11 equ 68
|
|
||||||
key_F12 equ 255
|
|
||||||
key_Home equ 180
|
|
||||||
key_End equ 181
|
|
||||||
key_PgUp equ 184
|
|
||||||
key_PgDown equ 183
|
|
||||||
|
|
||||||
;Attributes
|
|
||||||
|
|
||||||
;Window Attributes
|
|
||||||
window_Skinned equ 0x03000000
|
|
||||||
window_Type2 equ 0x02000000
|
|
||||||
window_Type1 equ 0x00000000
|
|
||||||
window_Reserve equ 0x01000000
|
|
||||||
|
|
||||||
;Font Attributes
|
|
||||||
font_Big equ 0x10000000
|
|
||||||
|
|
||||||
;Colors
|
|
||||||
cl_White equ 0x00ffffff
|
|
||||||
cl_Black equ 0x00000000
|
|
||||||
cl_Grey equ 0x00888888
|
|
||||||
cl_Red equ 0x00ff0000
|
|
||||||
cl_Lime equ 0x0000ff00
|
|
||||||
cl_Green equ 0x0000af00
|
|
||||||
cl_Blue equ 0x000000ff
|
|
||||||
cl_Purple equ 0x008080ff
|
|
||||||
cl_Violet equ 0x008040ff
|
|
||||||
cl_Cyan equ 0x0040e0ff
|
|
@ -1,4 +0,0 @@
|
|||||||
@erase lang.inc
|
|
||||||
@echo lang fix en >lang.inc
|
|
||||||
@fasm life.asm life
|
|
||||||
@pause
|
|
@ -1,4 +0,0 @@
|
|||||||
@erase lang.inc
|
|
||||||
@echo lang fix ru >lang.inc
|
|
||||||
@fasm life.asm life
|
|
||||||
@pause
|
|
@ -1,190 +0,0 @@
|
|||||||
;
|
|
||||||
; LIFE.ASM
|
|
||||||
;
|
|
||||||
; This program displays Conways game of life
|
|
||||||
;
|
|
||||||
; Compile with FASM for Menuet;
|
|
||||||
;
|
|
||||||
;
|
|
||||||
; Version 0.1 30th March 2004
|
|
||||||
; Mike Hibbett
|
|
||||||
;
|
|
||||||
; Version 0.2 23th May 2004
|
|
||||||
; Random generation dots with start
|
|
||||||
;
|
|
||||||
; Convert to ASCL Libary by Pavlushin Evgeni
|
|
||||||
;
|
|
||||||
; This is an experiment to see how small a usefull application can get
|
|
||||||
;
|
|
||||||
|
|
||||||
use32
|
|
||||||
org 0x0
|
|
||||||
|
|
||||||
db 'MENUET01' ; 8 byte id
|
|
||||||
dd 0x01 ; header version
|
|
||||||
dd START ; start of code
|
|
||||||
dd I_END ; size of image
|
|
||||||
dd 0x100000 ; memory for app
|
|
||||||
dd 0x100000 ; esp
|
|
||||||
dd 0x0 , 0x0 ; I_Param , I_Icon
|
|
||||||
include 'ascl.inc'
|
|
||||||
|
|
||||||
macro setcell x,y { mov [esi + 512*(y)*3 + (x)*3], al }
|
|
||||||
|
|
||||||
START:
|
|
||||||
|
|
||||||
mov al, 0xFF
|
|
||||||
mov esi, I_END
|
|
||||||
|
|
||||||
; This is the seed pattern.
|
|
||||||
|
|
||||||
; Life needs a seed pattern, which is 'hardcode' at compile time
|
|
||||||
; The grid is 512 wide (x direction) by 512 deep (y direction)
|
|
||||||
; setcell take the arguments setcell x,y
|
|
||||||
; 0,0 is the top left corner.
|
|
||||||
|
|
||||||
setcell 200,120
|
|
||||||
setcell 201,120
|
|
||||||
setcell 200,121
|
|
||||||
setcell 199,121
|
|
||||||
setcell 200,122
|
|
||||||
|
|
||||||
setcell 70,120
|
|
||||||
setcell 71,120
|
|
||||||
setcell 70,121
|
|
||||||
setcell 69,121
|
|
||||||
setcell 70,122
|
|
||||||
|
|
||||||
call draw_window
|
|
||||||
|
|
||||||
;Random generation dots
|
|
||||||
|
|
||||||
mov ecx,20000
|
|
||||||
xxx:
|
|
||||||
push ecx
|
|
||||||
random 30000,edi ;up pice of screen
|
|
||||||
mov al,0xff
|
|
||||||
shl edi,3
|
|
||||||
; mov [I_END+edi],al
|
|
||||||
; random 50000,edi ;down pice of screen
|
|
||||||
; mov al,0xff
|
|
||||||
; shl edi,3
|
|
||||||
add edi,512*460 ;760
|
|
||||||
mov [I_END+edi],al
|
|
||||||
pop ecx
|
|
||||||
dec ecx
|
|
||||||
jnz xxx
|
|
||||||
|
|
||||||
still:
|
|
||||||
|
|
||||||
timeevent 5,nokey,red,key,button ;Wait EVENT with 5 fps
|
|
||||||
jmp still
|
|
||||||
|
|
||||||
red: ; REDRAW WINDOW
|
|
||||||
call draw_window
|
|
||||||
jmp still
|
|
||||||
|
|
||||||
key: ; KEY
|
|
||||||
mov eax,2 ; get it, but ignore
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
nokey:
|
|
||||||
|
|
||||||
; cycle life state
|
|
||||||
|
|
||||||
mov esi, I_END + 512*3
|
|
||||||
|
|
||||||
mov al, 0xFF
|
|
||||||
|
|
||||||
lifeloop:
|
|
||||||
mov ah, 0
|
|
||||||
cmp [esi - 3], al
|
|
||||||
jne t2
|
|
||||||
inc ah
|
|
||||||
t2:
|
|
||||||
cmp [esi + 3], al
|
|
||||||
jne t3
|
|
||||||
inc ah
|
|
||||||
t3:
|
|
||||||
cmp [esi - 512*3], al
|
|
||||||
jne t4
|
|
||||||
inc ah
|
|
||||||
t4:
|
|
||||||
cmp [esi + 512*3], al
|
|
||||||
jne t5
|
|
||||||
inc ah
|
|
||||||
t5:
|
|
||||||
cmp [esi - 512*3 - 3], al
|
|
||||||
jne t6
|
|
||||||
inc ah
|
|
||||||
t6:
|
|
||||||
cmp [esi - 512*3 + 3], al
|
|
||||||
jne t7
|
|
||||||
inc ah
|
|
||||||
t7:
|
|
||||||
cmp [esi + 512*3 - 3], al
|
|
||||||
jne t8
|
|
||||||
inc ah
|
|
||||||
t8:
|
|
||||||
cmp [esi + 512*3 + 3], al
|
|
||||||
jne tend
|
|
||||||
inc ah
|
|
||||||
|
|
||||||
tend:
|
|
||||||
; If cell is empty but has 3 neigbours, birth
|
|
||||||
; If cell is occupied and has 2,3 neigbours, live
|
|
||||||
; else die
|
|
||||||
|
|
||||||
cmp ah, 3
|
|
||||||
jne btest
|
|
||||||
mov [esi+1], al
|
|
||||||
jmp nextcell
|
|
||||||
|
|
||||||
btest:
|
|
||||||
cmp ah, 2
|
|
||||||
jne nextcell
|
|
||||||
cmp [esi], al
|
|
||||||
jne nextcell
|
|
||||||
mov [esi+1], al
|
|
||||||
|
|
||||||
nextcell:
|
|
||||||
add esi, 3
|
|
||||||
cmp esi, I_END + 512*512*3
|
|
||||||
jne lifeloop
|
|
||||||
|
|
||||||
; copy new generation across
|
|
||||||
|
|
||||||
mov ecx, 512*512*3
|
|
||||||
mov esi, I_END+1
|
|
||||||
mov edi, I_END
|
|
||||||
rep movsb ; copy the data across
|
|
||||||
|
|
||||||
mov ecx, 512*512
|
|
||||||
mov esi, I_END
|
|
||||||
nc1:
|
|
||||||
mov [esi+2], byte 0
|
|
||||||
add esi, 3
|
|
||||||
loop nc1
|
|
||||||
|
|
||||||
mov ebx, I_END
|
|
||||||
mov ecx, 512*65536+512
|
|
||||||
mov edx, 5*65536+20
|
|
||||||
mov eax,7
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
jmp still
|
|
||||||
|
|
||||||
button: ; BUTTON - only close supported
|
|
||||||
close
|
|
||||||
|
|
||||||
; *********************************************
|
|
||||||
; ******* WINDOW DEFINITIONS AND DRAW ********
|
|
||||||
; *********************************************
|
|
||||||
draw_window:
|
|
||||||
startwd
|
|
||||||
window 50,50,512+9,512+23,window_Skinned
|
|
||||||
label 8,8,'Life Screen',cl_White+font_Big
|
|
||||||
endwd
|
|
||||||
ret
|
|
||||||
|
|
||||||
I_END:
|
|
2
programs/games/pipes/build.bat
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
@fasm pipes.asm pipes
|
||||||
|
@pause
|
649
programs/games/pipes/pipes.asm
Normal file
@ -0,0 +1,649 @@
|
|||||||
|
;
|
||||||
|
; pipes for menuet {and now kolibri}
|
||||||
|
; v1.2
|
||||||
|
; 2006 by Mario Birkner
|
||||||
|
;
|
||||||
|
; l.mod. 27.08.06/15:11
|
||||||
|
;
|
||||||
|
; Compile with FASM
|
||||||
|
;
|
||||||
|
bgcolor equ 0x0074744A ;thx
|
||||||
|
fgcolor equ 0x00E7C750 ;to
|
||||||
|
fg2color equ 0x00E0B0A0 ;colorref
|
||||||
|
fg3color equ 0x007F7F55
|
||||||
|
btcolor equ 0x005B6200
|
||||||
|
|
||||||
|
|
||||||
|
use32
|
||||||
|
|
||||||
|
org 0x0
|
||||||
|
|
||||||
|
db 'MENUET01' ; 8 byte id
|
||||||
|
dd 0x01 ; header version
|
||||||
|
dd START ; start of code
|
||||||
|
dd I_END ; size of image
|
||||||
|
dd 0x100000 ; memory for app
|
||||||
|
dd 0x7fff0 ; esp
|
||||||
|
dd 0x0 , 0x0 ; I_Param , I_Icon
|
||||||
|
|
||||||
|
START: ; start of execution
|
||||||
|
|
||||||
|
call draw_window
|
||||||
|
call draw_board
|
||||||
|
|
||||||
|
still:
|
||||||
|
|
||||||
|
mov eax,10 ; wait here for event
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
cmp eax,1 ; redraw request ?
|
||||||
|
je red
|
||||||
|
cmp eax,2 ; key in buffer ?
|
||||||
|
je key
|
||||||
|
cmp eax,3 ; button in buffer ?
|
||||||
|
je button
|
||||||
|
|
||||||
|
jmp still
|
||||||
|
|
||||||
|
red: ; redraw
|
||||||
|
call draw_window
|
||||||
|
call draw_board
|
||||||
|
call draw_message
|
||||||
|
jmp still
|
||||||
|
|
||||||
|
key: ; key
|
||||||
|
mov eax,2 ; just read it and ignore
|
||||||
|
int 0x40
|
||||||
|
jmp still
|
||||||
|
button: ; button
|
||||||
|
call get_input
|
||||||
|
jmp still
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
get_input:
|
||||||
|
pusha
|
||||||
|
mov eax,17 ; get id
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
cmp ah,1 ; button id=1 ?
|
||||||
|
jne .noclose
|
||||||
|
|
||||||
|
mov eax,-1 ; close this program
|
||||||
|
int 0x40
|
||||||
|
.noclose:
|
||||||
|
cmp ah,4
|
||||||
|
jne .moderate
|
||||||
|
mov [diffic],1
|
||||||
|
jmp .enddiffic
|
||||||
|
.moderate:
|
||||||
|
cmp ah,3
|
||||||
|
jne .easy
|
||||||
|
mov [diffic],3
|
||||||
|
jmp .enddiffic
|
||||||
|
.easy:
|
||||||
|
cmp ah,2
|
||||||
|
jne .board
|
||||||
|
mov [diffic],5
|
||||||
|
.enddiffic:
|
||||||
|
mov [score],0
|
||||||
|
mov [speed],40
|
||||||
|
mov [level],1
|
||||||
|
mov [stat],0
|
||||||
|
mov [time],0
|
||||||
|
call draw_window
|
||||||
|
call scramble_board
|
||||||
|
call draw_board
|
||||||
|
call countdown
|
||||||
|
call wassermarsch
|
||||||
|
jmp .getno
|
||||||
|
.board:
|
||||||
|
cmp [stat],2
|
||||||
|
jge .getno
|
||||||
|
shr eax,8 ; -> 24bit id
|
||||||
|
cmp eax,10
|
||||||
|
jle .getno
|
||||||
|
cmp eax,150
|
||||||
|
jg .getno
|
||||||
|
sub eax,10
|
||||||
|
mov edi,eax
|
||||||
|
add edi,map
|
||||||
|
cmp [edi], byte 1
|
||||||
|
jg .nogerade
|
||||||
|
xor byte [edi], 1
|
||||||
|
call draw_board
|
||||||
|
jmp .getno
|
||||||
|
.nogerade:
|
||||||
|
cmp [edi], byte 6
|
||||||
|
jge .getno
|
||||||
|
cmp [edi], byte 5
|
||||||
|
jne .rota
|
||||||
|
sub byte [edi],4
|
||||||
|
.rota:
|
||||||
|
inc byte [edi]
|
||||||
|
call draw_board
|
||||||
|
.getno:
|
||||||
|
popa
|
||||||
|
ret
|
||||||
|
;//// end of event detection
|
||||||
|
get_direction: ;Setzt Richtungs-Konstanten
|
||||||
|
pusha ;IN:
|
||||||
|
mov eax,[esp+28] ;eax - Richtung IN
|
||||||
|
mov ebx,[esp+16] ;ebx - Teilchen (Map-Wert)
|
||||||
|
cmp ebx,0 ;OUT:
|
||||||
|
jne .no0 ;eax - Richtung OUT
|
||||||
|
cmp eax,14
|
||||||
|
jne .o0
|
||||||
|
jmp .setout
|
||||||
|
.o0:
|
||||||
|
cmp eax,-14
|
||||||
|
jne .col
|
||||||
|
jmp .setout
|
||||||
|
.no0:
|
||||||
|
cmp ebx,1
|
||||||
|
jne .no1
|
||||||
|
cmp eax,1
|
||||||
|
jne .o1
|
||||||
|
jmp .setout
|
||||||
|
.o1:
|
||||||
|
cmp eax,-1
|
||||||
|
jne .col
|
||||||
|
jmp .setout
|
||||||
|
.no1:
|
||||||
|
cmp ebx,2
|
||||||
|
jne .no2
|
||||||
|
cmp eax,14
|
||||||
|
jne .o2
|
||||||
|
sub eax,13
|
||||||
|
jmp .setout
|
||||||
|
.o2:
|
||||||
|
cmp eax,-1
|
||||||
|
jne .col
|
||||||
|
sub eax,13
|
||||||
|
jmp .setout
|
||||||
|
.no2:
|
||||||
|
cmp ebx,3
|
||||||
|
jne .no3
|
||||||
|
cmp eax,-14
|
||||||
|
jne .o3
|
||||||
|
add eax,15
|
||||||
|
jmp .setout
|
||||||
|
.o3:
|
||||||
|
cmp eax,-1
|
||||||
|
jne .col
|
||||||
|
add eax,15
|
||||||
|
jmp .setout
|
||||||
|
.no3:
|
||||||
|
cmp ebx,4
|
||||||
|
jne .no4
|
||||||
|
cmp eax,-14
|
||||||
|
jne .o4
|
||||||
|
add eax,13
|
||||||
|
jmp .setout
|
||||||
|
.o4:
|
||||||
|
cmp eax,1
|
||||||
|
jne .col
|
||||||
|
add eax,13
|
||||||
|
jmp .setout
|
||||||
|
.no4:
|
||||||
|
cmp ebx,5
|
||||||
|
jne .no5
|
||||||
|
cmp eax,14
|
||||||
|
jne .o5
|
||||||
|
sub eax,15
|
||||||
|
jmp .setout
|
||||||
|
.o5:
|
||||||
|
cmp eax,1
|
||||||
|
jne .col
|
||||||
|
sub eax,15
|
||||||
|
jmp .setout
|
||||||
|
.no5:
|
||||||
|
cmp ebx,6
|
||||||
|
jne .no6
|
||||||
|
jmp .setout
|
||||||
|
.no6:
|
||||||
|
cmp ebx,7
|
||||||
|
jne .no7
|
||||||
|
mov eax,14
|
||||||
|
jmp .setout
|
||||||
|
.no7:
|
||||||
|
cmp ebx,8
|
||||||
|
jne .no8
|
||||||
|
cmp eax,14
|
||||||
|
jne .col
|
||||||
|
mov [stat],1
|
||||||
|
jmp .setout
|
||||||
|
.no8:
|
||||||
|
cmp ebx,16 ; cross 2x
|
||||||
|
jne .col
|
||||||
|
add [score],10 ; + 10 bonus points
|
||||||
|
jmp .setout
|
||||||
|
.col:
|
||||||
|
xor eax,eax
|
||||||
|
.setout:
|
||||||
|
xor ebx,ebx
|
||||||
|
mov [esp+28],eax
|
||||||
|
mov [esp+16],ebx
|
||||||
|
popa
|
||||||
|
ret
|
||||||
|
|
||||||
|
countdown:
|
||||||
|
pusha
|
||||||
|
xor eax,eax
|
||||||
|
mov al,[diffic]
|
||||||
|
imul eax,10
|
||||||
|
mov [time],eax
|
||||||
|
.udown:
|
||||||
|
call show_score
|
||||||
|
mov ecx,10
|
||||||
|
.down:
|
||||||
|
mov eax,5
|
||||||
|
mov ebx,10
|
||||||
|
int 0x40
|
||||||
|
mov eax,11
|
||||||
|
int 0x40
|
||||||
|
cmp eax,1
|
||||||
|
jne .nored
|
||||||
|
call draw_window
|
||||||
|
call draw_board
|
||||||
|
jmp .nothing
|
||||||
|
.nored:
|
||||||
|
cmp eax,3
|
||||||
|
jne .nothing
|
||||||
|
call get_input
|
||||||
|
.nothing:
|
||||||
|
cmp [stat],0 ;bugfix 210806
|
||||||
|
jnz .exitsub ;bugfix 210806
|
||||||
|
dec ecx
|
||||||
|
jnz .down
|
||||||
|
dec [time]
|
||||||
|
jnz .udown
|
||||||
|
.exitsub: ;bugfix 210806
|
||||||
|
popa
|
||||||
|
ret
|
||||||
|
|
||||||
|
wassermarsch:
|
||||||
|
pusha
|
||||||
|
.restart:
|
||||||
|
mov esi,map+16 ;start position
|
||||||
|
mov eax, 14 ;start-richtung
|
||||||
|
.findway:
|
||||||
|
movzx ebx, byte [esi]
|
||||||
|
call get_direction
|
||||||
|
test eax,eax
|
||||||
|
jz .collision
|
||||||
|
push eax
|
||||||
|
xor eax,eax
|
||||||
|
mov al,6
|
||||||
|
sub al,[diffic]
|
||||||
|
add [score],eax ;points/item = 6 - difficulty
|
||||||
|
mov ecx,dword [speed]
|
||||||
|
add byte [esi],10
|
||||||
|
.down:
|
||||||
|
mov eax,5
|
||||||
|
mov ebx,2
|
||||||
|
int 0x40
|
||||||
|
mov eax,11
|
||||||
|
int 0x40
|
||||||
|
cmp eax,1
|
||||||
|
jne .nored
|
||||||
|
call draw_window
|
||||||
|
.nored:
|
||||||
|
cmp eax,3
|
||||||
|
jne .noevnt
|
||||||
|
call get_input
|
||||||
|
.noevnt:
|
||||||
|
dec ecx
|
||||||
|
jnz .down
|
||||||
|
pop eax
|
||||||
|
|
||||||
|
add esi,eax
|
||||||
|
call draw_board
|
||||||
|
call show_score
|
||||||
|
jmp .findway
|
||||||
|
.collision:
|
||||||
|
cmp [stat],1
|
||||||
|
jne .loose
|
||||||
|
call draw_message
|
||||||
|
mov eax,5
|
||||||
|
mov ebx,500
|
||||||
|
int 0x40
|
||||||
|
mov [stat],0
|
||||||
|
inc [level]
|
||||||
|
cmp [speed],6 ;waterflowdelay < 6 ?
|
||||||
|
jle .skipsub
|
||||||
|
sub [speed],2
|
||||||
|
.skipsub:
|
||||||
|
call draw_window
|
||||||
|
call scramble_board
|
||||||
|
call draw_board
|
||||||
|
call countdown
|
||||||
|
jmp .restart
|
||||||
|
.loose:
|
||||||
|
mov [stat],2
|
||||||
|
call draw_message
|
||||||
|
popa
|
||||||
|
ret
|
||||||
|
|
||||||
|
show_score:
|
||||||
|
pusha
|
||||||
|
mov eax,13 ;clear time and score area
|
||||||
|
mov ebx,50 shl 16 +15
|
||||||
|
mov ecx,395 shl 16 +15
|
||||||
|
mov edx,bgcolor
|
||||||
|
int 0x40
|
||||||
|
add ebx,60 shl 16 + 20
|
||||||
|
int 0x40
|
||||||
|
add ebx,80 shl 16
|
||||||
|
int 0x40
|
||||||
|
mov eax,47
|
||||||
|
mov ebx,0x20000
|
||||||
|
mov ecx,[time]
|
||||||
|
mov edx,50*65536+398
|
||||||
|
mov esi,fg2color
|
||||||
|
int 0x40
|
||||||
|
mov ebx,0x50000
|
||||||
|
mov ecx,[score]
|
||||||
|
add edx,60 shl 16
|
||||||
|
int 0x40
|
||||||
|
mov ebx,0x20000
|
||||||
|
mov ecx,[level]
|
||||||
|
add edx,80 shl 16
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
popa
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
scramble_board:
|
||||||
|
pusha
|
||||||
|
mov edi,map+16 ;startpunkt
|
||||||
|
mov eax,7 ;wieder-
|
||||||
|
stosb ;herstellen
|
||||||
|
|
||||||
|
mov ebx, 0x00000007 ;modul m max-wert
|
||||||
|
.loop_through:
|
||||||
|
mov esi,edi
|
||||||
|
lodsb
|
||||||
|
cmp eax, 9
|
||||||
|
je .skip
|
||||||
|
inc eax
|
||||||
|
xor edx, edx
|
||||||
|
div ebx ;modulo -> edx
|
||||||
|
mov eax, edx
|
||||||
|
cmp eax,6
|
||||||
|
jne .skip
|
||||||
|
dec [half]
|
||||||
|
movzx eax, byte [half]
|
||||||
|
jnz .skip
|
||||||
|
mov [half], byte 7
|
||||||
|
.skip:
|
||||||
|
stosb
|
||||||
|
cmp edi,map+125 ;endpunkt erhalten
|
||||||
|
jge .exit
|
||||||
|
jmp .loop_through
|
||||||
|
.exit:
|
||||||
|
mov eax,8
|
||||||
|
stosb
|
||||||
|
popa
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
gen_image:
|
||||||
|
pusha
|
||||||
|
xor ebx,ebx ;default: kein wasser
|
||||||
|
movzx eax,byte [map] ;erstes byte der map lesen (position)
|
||||||
|
inc byte [map] ;position inkrementieren
|
||||||
|
add eax,map ;zur position die map-adresse addieren
|
||||||
|
movzx esi,byte [eax]
|
||||||
|
cmp esi,10
|
||||||
|
jl .nowater
|
||||||
|
sub esi,10 ;map-werte+10 sind mit wasser gefuellt
|
||||||
|
mov ebx,1
|
||||||
|
cmp esi,16
|
||||||
|
jne .nowater
|
||||||
|
sub esi,10
|
||||||
|
.nowater:
|
||||||
|
imul esi,3072 ;mapwert * 32*32*3 = image-adresse
|
||||||
|
add esi,images
|
||||||
|
mov edi,0x10000
|
||||||
|
mov ecx,32*32*3
|
||||||
|
.gendd: ;RGB-Image im Speicher generieren
|
||||||
|
mov eax,dword [esi] ;byte aus imagemap lesen
|
||||||
|
shl eax,8
|
||||||
|
shr eax,8
|
||||||
|
cmp ebx,0
|
||||||
|
jz .nowcolor
|
||||||
|
mov ebx,eax
|
||||||
|
cmp ebx,0x00B0B5B0
|
||||||
|
jne .nog1
|
||||||
|
jmp .wcolor
|
||||||
|
.nog1:
|
||||||
|
cmp ebx,0x00A0A5A0
|
||||||
|
jne .nog2
|
||||||
|
jmp .wcolor
|
||||||
|
.nog2:
|
||||||
|
cmp ebx,0x00909590
|
||||||
|
jne .nog3
|
||||||
|
jmp .wcolor
|
||||||
|
.nog3:
|
||||||
|
cmp ebx,0x00808580
|
||||||
|
jne .nog4
|
||||||
|
jmp .wcolor
|
||||||
|
.nog4:
|
||||||
|
cmp ebx,0x00707570
|
||||||
|
jne .nowcolor
|
||||||
|
jmp .wcolor
|
||||||
|
.wcolor:
|
||||||
|
add eax,0x40
|
||||||
|
.nowcolor:
|
||||||
|
add esi,3
|
||||||
|
stosd
|
||||||
|
dec edi
|
||||||
|
loop .gendd
|
||||||
|
popa
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; *********************************************
|
||||||
|
; ******* WINDOW DEFINITIONS AND DRAW ********
|
||||||
|
; *********************************************
|
||||||
|
draw_message:
|
||||||
|
pusha
|
||||||
|
cmp [stat],0
|
||||||
|
je .nomessage
|
||||||
|
cmp [stat],3
|
||||||
|
je .nomessage
|
||||||
|
mov eax,13
|
||||||
|
mov ebx,146 shl 16 + 200
|
||||||
|
mov ecx,190 shl 16 + 40
|
||||||
|
mov edx,0x0
|
||||||
|
int 0x40
|
||||||
|
add ebx,2 shl 16 - 4
|
||||||
|
add ecx,2 shl 16 - 4
|
||||||
|
mov edx,fgcolor
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
cmp [stat],1
|
||||||
|
je .winmessage
|
||||||
|
mov eax,4
|
||||||
|
mov ebx,186 shl 16 +200
|
||||||
|
mov edx,lbl_gameover+1
|
||||||
|
movzx esi,byte [lbl_gameover]
|
||||||
|
mov ecx,btcolor
|
||||||
|
add ecx,0x10000000
|
||||||
|
int 0x40
|
||||||
|
add ebx,8 shl 16 +17
|
||||||
|
mov edx,lbl_yscore+1
|
||||||
|
movzx esi,byte [lbl_yscore]
|
||||||
|
mov ecx,btcolor
|
||||||
|
int 0x40
|
||||||
|
mov esi,ecx ;color
|
||||||
|
mov edx,ebx ;pos
|
||||||
|
add edx,80 shl 16
|
||||||
|
mov ebx,0x50000 ;type
|
||||||
|
mov ecx,[score] ;inp
|
||||||
|
mov eax,47
|
||||||
|
int 0x40
|
||||||
|
jmp .nomessage
|
||||||
|
.winmessage:
|
||||||
|
mov eax,4
|
||||||
|
mov ebx,152 shl 16 +200
|
||||||
|
mov edx,lbl_win+1
|
||||||
|
movzx esi,byte [lbl_win]
|
||||||
|
mov ecx,btcolor
|
||||||
|
add ecx,0x10000000
|
||||||
|
int 0x40
|
||||||
|
mov ebx,152 shl 16 +217
|
||||||
|
add edx,esi
|
||||||
|
mov ecx,btcolor
|
||||||
|
int 0x40
|
||||||
|
.nomessage:
|
||||||
|
popa
|
||||||
|
ret
|
||||||
|
|
||||||
|
draw_board:
|
||||||
|
pusha
|
||||||
|
mov ebx,15*65536+32
|
||||||
|
mov ecx,50*65536+32
|
||||||
|
mov edx,15*65536+50 ;Spielfeldposition
|
||||||
|
mov esi,10 ;Spielfeldgroesse Y
|
||||||
|
.vloop:
|
||||||
|
mov edi,14 ;Spielfeldgroesse X
|
||||||
|
.hloop:
|
||||||
|
call gen_image
|
||||||
|
push edx
|
||||||
|
mov eax,8
|
||||||
|
movsx edx, byte [map]
|
||||||
|
add edx,9 ;button-id = map-pos + 10;gen_image inkrements
|
||||||
|
add edx,0x50000000 ;no button image - no esi need
|
||||||
|
int 0x40
|
||||||
|
pop edx
|
||||||
|
push ebx
|
||||||
|
push ecx
|
||||||
|
mov eax,7
|
||||||
|
mov ebx,0x10000
|
||||||
|
mov ecx,32 shl 16 +32
|
||||||
|
int 0x40
|
||||||
|
pop ecx
|
||||||
|
pop ebx
|
||||||
|
add edx,33 shl 16
|
||||||
|
add ebx,33 shl 16
|
||||||
|
dec edi
|
||||||
|
jnz .hloop
|
||||||
|
sub edx,14*(33 shl 16) ;Spielfeldgroesse X
|
||||||
|
sub ebx,14*(33 shl 16)
|
||||||
|
add edx,33
|
||||||
|
add ecx,33 shl 16
|
||||||
|
dec esi
|
||||||
|
jnz .vloop
|
||||||
|
mov [map], byte 1 ;Map-Position zuruecksetzen
|
||||||
|
popa
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
draw_window:
|
||||||
|
pusha
|
||||||
|
|
||||||
|
mov eax,12 ; function 12:tell os about windowdraw
|
||||||
|
mov ebx,1 ; 1, start of draw
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
; DRAW WINDOW
|
||||||
|
mov eax,0 ; function 0 : define and draw window
|
||||||
|
mov ebx,100*65536+492 ; [x start] *65536 + [x size]
|
||||||
|
mov ecx,100*65536+420 ; [y start] *65536 + [y size]
|
||||||
|
mov edx,bgcolor ; color of work area RRGGBB,8->color gl
|
||||||
|
or edx,0x13000000
|
||||||
|
mov edi,header
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
mov eax,8
|
||||||
|
mov ebx,84*65536+72
|
||||||
|
mov ecx,28*65536+15
|
||||||
|
mov edx,2
|
||||||
|
mov esi,btcolor
|
||||||
|
int 0x40
|
||||||
|
add ebx,76 shl 16
|
||||||
|
inc edx
|
||||||
|
int 0x40
|
||||||
|
add ebx,76 shl 16
|
||||||
|
inc edx
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
mov eax,4
|
||||||
|
mov ebx,26 shl 16 +32
|
||||||
|
mov ecx,fgcolor
|
||||||
|
mov edx,lbl_toolbar+1
|
||||||
|
movsx esi, byte [lbl_toolbar]
|
||||||
|
int 0x40
|
||||||
|
mov ebx,18 shl 16 +398
|
||||||
|
mov edx,lbl_score+1
|
||||||
|
movsx esi, byte [lbl_score]
|
||||||
|
int 0x40
|
||||||
|
mov ebx,350 shl 16 +405
|
||||||
|
mov ecx,fg3color
|
||||||
|
mov edx,lbl_copy+1
|
||||||
|
movsx esi,byte [lbl_copy]
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
mov eax,12 ; function 12:tell os about windowdraw
|
||||||
|
mov ebx,2 ; 2, end of draw
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
popa
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
; DATA AREA
|
||||||
|
|
||||||
|
|
||||||
|
header db 'PIPES',0
|
||||||
|
lbl_gameover:
|
||||||
|
db 19
|
||||||
|
db 'G a m e O v e r !'
|
||||||
|
lbl_win:
|
||||||
|
db 32
|
||||||
|
db ' G r e a t ! '
|
||||||
|
db " Let's goin'on! "
|
||||||
|
lbl_yscore:
|
||||||
|
db 11
|
||||||
|
db 'Your Score:'
|
||||||
|
lbl_toolbar:
|
||||||
|
db 43
|
||||||
|
db 'New Game: Easy Moderate Hard'
|
||||||
|
lbl_copy:
|
||||||
|
db 23
|
||||||
|
db 'v1.2 2006,Mario Birkner'
|
||||||
|
lbl_score:
|
||||||
|
db 28
|
||||||
|
db 'Time: Score: Level:'
|
||||||
|
stat db 3 ;0=gameplay 1=won 2-lost 3=stopped
|
||||||
|
speed db 0
|
||||||
|
time dd 0
|
||||||
|
diffic db 0 ;1=hard 3=moderate 5=easy 8=dedicated to Wildwest - try it out!
|
||||||
|
score dd 0
|
||||||
|
level dd 1
|
||||||
|
half db 1 ;reduces the random-crosses
|
||||||
|
|
||||||
|
map: ;14*10 blocks + position
|
||||||
|
db 1 ;<- act. position
|
||||||
|
db 9,9,9,9,9,9,9,9,9,9,9,9,9,9
|
||||||
|
db 9,7,1,3,2,0,1,1,0,3,4,4,3,9
|
||||||
|
db 9,5,0,2,2,1,3,0,3,1,1,6,4,9
|
||||||
|
db 9,4,0,4,6,0,3,3,2,6,0,1,2,9
|
||||||
|
db 9,3,0,1,2,4,6,4,5,1,2,4,1,9
|
||||||
|
db 9,5,3,2,6,3,2,1,2,1,2,6,0,9
|
||||||
|
db 9,4,0,2,3,0,4,1,2,3,2,3,4,9
|
||||||
|
db 9,2,0,4,5,6,3,1,3,0,4,1,0,9
|
||||||
|
db 9,1,0,3,5,4,2,2,4,1,6,0,8,9
|
||||||
|
db 9,9,9,9,9,9,9,9,9,9,9,9,9,9
|
||||||
|
images:
|
||||||
|
file 'pipes.raw'
|
||||||
|
I_END:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
1
programs/games/pipes/pipes.raw
Normal file
@ -220,7 +220,7 @@ button: ; button
|
|||||||
jmp still
|
jmp still
|
||||||
|
|
||||||
end_program:
|
end_program:
|
||||||
mov eax,-1 ; close this program
|
or eax,-1 ; close this program
|
||||||
int 0x40
|
int 0x40
|
||||||
|
|
||||||
go_new_game:
|
go_new_game:
|
||||||
|