;#**************************
;#*        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   ;¢®§¢à é ¥¬áï ª 横«ã ®¦¨¤ ­¨ï
}