;#************************** ;#* LIGHTS (c)* main.inc ;#************************** 15/10/2007 L0 equ 0x0000F8 ; light off L1 equ 0xFFFF00 ; light on LAG equ 2 deltaX equ 35 deltaY equ 35 posX equ 50 posY equ 50 macro main_loop { ; äãªæ¨ï ®âà¨á®¢ª¨ ®ª draw_window: mov eax,12 ; äãªæ¨ï 12: á®®¡é¨âì á¨á⥬¥ ® ; á®áâ®ï¨¨ ¯¥à¥à¨á®¢ª¨ ®ª mov ebx,1 ; ¯®¤äãªæ¨ï 1, ç «® ¯¥à¥à¨á®¢ª¨ int 0x40 ; ===== ŽŠŽ !!1 mov eax,0 ; äãªæ¨ï 0: ®¯à¥¤¥«¨âì ¨ ¢ë¢¥á⨠®ª® mov ebx,100*65536+270 ; [x ç «ìë©] *65536 + [x à §¬¥à] mov ecx,100*65536+280 ; [y ç «ìë©] *65536 + [y à §¬¥à] mov edx,0x02ccddff ; 梥â à ¡®ç¥© ®¡« á⨠RRGGBB ; 0x02000000 = ⨯ ®ª 2 mov esi,0x808899AA ; 梥⠮¡« á⨠§ £®«®¢ª RRGGBB ; 0x80000000 = 梥⠯¥à¥â¥ª ¥â mov edi,0xFFAAcc ; 梥â à ¬ª¨ RRGGBB int 0x40 ; €„ˆ‘œ ¢ § £®«®¢ª¥ Lights v0.001 mov eax,4 ; äãªæ¨ï 4: ¯¨á âì ⥪áâ ¢ ®ª¥ mov ebx,8*65536+8 ; [x ç «ìë©] *65536 + [y ç «ìë©] mov ecx,0x00224422 ; 梥â ⥪áâ RRGGBB ; áâ à訩 ¡ ©â (0x00) - à §¬¥à èà¨äâ ; (¬ «¥ìª¨©) mov edx,text ; 㪠§ ⥫ì ç «® ⥪áâ mov esi,texts-text ; ¤«¨ ⥪áâ ¢ ¡ ©â å int 0x40 xor eax,eax ; €„ˆ‘œ ¢ ®ª¥!!! mov ecx,eax lb: ;loop ecx mov edi,ecx ; shl edi,3 ; add edi,tBut ; add al,byte[edi+1] ; ; inc ecx ; cmp ecx,25 ; jne lb ;ecx<25 cmp eax, 0xE7 ;25 jne goon ;int3 ;call Bin2Hex mov eax,4 ; äãªæ¨ï 4: ¯¨á âì ⥪áâ ¢ ®ª¥ mov ebx,80*65536+250 ; [x ç «ìë©] *65536 + [y ç «ìë©] mov ecx,0x10FF22FF ; 梥â ⥪áâ RRGGBB ; ; áâ à訩 ¡ ©â (0x10) - à §¬¥à èà¨äâ ; ; (¡®«ì让) ;mov edx,txthex ;mov esi,17 mov edx,texts ; 㪠§ ⥫ì ç «® ⥪áâ mov esi,textend-texts ; ¤«¨ ⥪áâ ¢ ¡ ©â å int 0x40 goon: ;------------------------------------------------------------------------------- ; ----ŠŽŠˆ---- ; button() ;------------------------------------------------------------------------------- mov eax,8 ; äãªæ¨ï 8: ®¯à¥¤¥«¨âì ¨ ¢ë¢¥á⨠ª®¯ªã mov ebx,(200-19)*65536+12 ; [x ç «ìë©] *65536 + [x à §¬¥à] mov ecx,5*65536+12 ; [y ç «ìë©] *65536 + [y à §¬¥à] mov edx,100 ; ¨¤¥â¨ä¨ª â®à ª®¯ª¨ =1 mov esi,0xFF6611 ; 梥⠪®¯ª¨ RRGGBB int 0x40 ; ===ŠŽŠ€ ‡€Š›’ˆŸ ŽŠ€=== LoopBegin labl,0 ;ecx - loop index ;add ecx,5 mov edi,ecx shl edi,3 ;edi*8 -index of table add edi,tBut xor ebx,ebx mov bl,byte[edi+2] ;X shl ebx,16 ;*65536=256*256 add ebx,deltaX-LAG ;dX xor ecx,ecx mov cl,byte[edi+3] ;Y shl ecx,16 ;*65536=256*256 add ecx,deltaY-LAG ;dY xor edx,edx mov dl,byte[edi] ;N xor esi,esi cmp byte[edi+1], 0 ;Color = 0/1 je lit_off mov esi,L1 ;on jmp lend lit_off: mov esi,L0 ;off lend: mov eax,8 ;8-BUTTON int 0x40 LoopEnd labl,25 ;============================================================= endbut: mov eax,12 ; äãªæ¨ï 12: á®®¡é¨âì á¨á⥬¥ ® ; á®áâ®ï¨¨ ¯¥à¥à¨á®¢ª¨ ®ª mov ebx,2 ; ¯®¤äãªæ¨ï 2, ¯¥à¥à¨á®¢ª ®ª®ç¥ int 0x40 ;ret ; ª®¥æ äãªæ¨¨ - íâ® ¥ äãªæ¨ï! event_wait: ;mov eax,10 ; äãªæ¨ï 10:=0A ®¦¨¤ ¨¥ ᮡëâ¨ï mov eax,23 mov ebx,100 int 0x40 ; ⨯ ᮡëâ¨ï ¢®§¢à éñ ¢ eax, ¤ «¥¥ ¯à®¢¥à塞, ª ª®¥ ᮡë⨥ ¯à®¨§®è«® ;------------------------------------------------------------------------------- cmp eax,1 ; § ¯à®á ¯¥à¥à¨á®¢ªã? je redraw cmp eax,2 ; ¦ â ª« ¢¨è ª« ¢¨ âãàë? je key cmp eax,3 ; ¦ â ª®¯ª ¢ ®ª¥ ¯à®£à ¬¬ë? je button jmp event_wait ; ¢®§¢à é ¥¬áï ª ç «ã 横« ®¦¨¤ ¨ï ᮡë⨩ ; ¯®á«¥ ⮣®, ª ª ᮡë⨥ ¨¤¥â¨ä¨æ¨à®¢ ®, ¥£® ¤® ®¡à ¡®â âì ;------------------------------------------------------------------------------- redraw: call draw_window ; ¢ë§ë¢ ¥¬ äãªæ¨î draw_window ¨ jmp event_wait ; ¢®§¢à é ¥¬áï § ¤ ª 横«ã ®¦¨¤ ¨ï key: mov eax,2 ; áç¨âë¢ ¥¬ ª®¤ ¦ ⮩ ª« ¢¨è¨. ‚®§¢à é¥ ¢ ah. int 0x40 ; Š« ¢¨è ¤®«¦ ¡ëâì ¯à®ç¨â ¤«ï ®ç¨á⪨ cmp ah,27 je clos0 ; exit on ESC ; jmp event_wait ; ¢®§¢à â ª event_wait button: mov eax,17 ; áç¨âë¢ ¥¬ ¨¤¥â¨ä¨ª â®à ¦ ⮩ ª®¯ª¨ int 0x40 ; ¢®§¢à é¥ ah. ;------------------------------------------------------------------------------- ; ᬮâਬ, ª ª ï ª®¯ª ¡ë« ¦ â ¨ ᮮ⢥âáâ¢ãî騬 ®¡à §®¬ ॠ£¨à㥬. ;------------------------------------------------------------------------------- cmp ah,100 ; ª®¯ª á id=100("§ ªàëâì")? jne noclose clos0: mov eax,-1 ; äãªæ¨ï -1: § ¢¥àè¨âì ¯à®£à ¬¬ã int 0x40 ; ª®¯ª 5-29 noclose: xor ecx,ecx ; mov cl,ah ; sub ecx,5 ; ecx - index for tBut mov edi,ecx call x_lit ;+0 - æ¥âà mov [tButIdx],edi ;save index mov edi,[tButIdx] cmp byte[edi+6],0 je next000 mov edi,ecx inc edi call x_lit ;+1 á¯à ¢ next000: mov edi,[tButIdx] cmp byte[edi+5],0 je next001 mov edi,ecx dec edi call x_lit ;-1 á«¥¢ next001: mov edi,[tButIdx] cmp byte[edi+4],0 je next002 mov edi,ecx sub edi,5 call x_lit ;-5 ᢥàåã next002: mov edi,[tButIdx] cmp byte[edi+7],0 je next003 mov edi,ecx add edi,5 call x_lit ;+5 ᨧã next003: call draw_window jmp event_wait ;================================-- x_lit: ; edi - index shl edi,3 ; edi*8 -index of table tBut add edi,tBut ; not byte[edi+1] ; invert second byte = L0/L1 ret ; ;================================-- call draw_window ; è ª®¯ª ;) ; §¤¥áì ¯à®¢¥à塞 ®áâ «ìë¥ ª®¯ª¨ jmp event_wait ;¢®§¢à é ¥¬áï ª 横«ã ®¦¨¤ ¨ï }