Subversion Repositories Kolibri OS

Rev

Rev 2734 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;#**************************
  2. ;#*    X-0-X    =  MAIN()
  3. ;#************************** 21/10/2007
  4. cB     equ cBLACK
  5. cW     equ cWHITE
  6.  
  7. macro main_loop
  8. {
  9.  
  10. ; ®«ãç¨âì áâ ­¤ àâ­ë¥ æ¢¥â  ®ª®­
  11. ;========================================
  12. mov eax, 48
  13. mov ebx, 3
  14. mov ecx, colors
  15. mov edx, 40
  16. int 0x40
  17.  
  18.  
  19.  
  20. ; äã­ªæ¨ï ®âà¨á®¢ª¨ ®ª­ 
  21. ;========================================
  22. draw_window:
  23.         mov     eax,12                ; äã­ªæ¨ï 12:     á®®¡é¨âì á¨á⥬¥
  24.         mov     ebx,1                 ; ¯®¤äã­ªæ¨ï 1,  ­ ç «® ¯¥à¥à¨á®¢ª¨
  25.         int     0x40
  26.                                       ; =====  ŽŠŽ !!!
  27.         mov     eax,0                 ; äã­ªæ¨ï 0: ®¯à¥¤¥«¨âì ¨ ¢ë¢¥á⨠®ª­®
  28.         mov     ebx,100*65536+250     ; [x ­ ç «ì­ë©] *65536 + [x à §¬¥à]
  29.         mov     ecx,ebx  ;,100*65536+250     ; [y ­ ç «ì­ë©] *65536 + [y à §¬¥à]
  30.         mov     edx, 0x34FFFFFF
  31.  
  32.         mov     esi, 0x808899AA       ; 梥⠧ £®«®¢ª  RRGGBB
  33.         mov     edi, caption          ; § £®«®¢®ª
  34.         int     0x40
  35.  
  36. ;-----------------------------------#-----------------------------------------
  37. ; SCENE OF GAME - PLAY YARD - BOARD - DESK - PLAYING FIELD
  38. ;---------------
  39.  playing_field                        ;macro in macs.inc
  40. ;-------------------------------------------------------------------------------
  41. ;                              ----ŠŽŠˆ----
  42. ;-------------------------------------------------------------------------------
  43. ;buttons:
  44.         mov     eax,8                 ;
  45.         mov     ebx,200*65536+35      ;
  46.         mov     ecx,15*65536+20       ;
  47.         mov     edx,200               ;== NEW GAME ==
  48.         mov     esi, [colors+0x18]
  49.         int     0x40
  50. ;--------------------------------------------
  51.         mov     eax,4                 ;  ­ ¯¨á âì ⥪áâ ­  ª­®¯ª¥ NEW
  52.         mov     ebx,210*65536+20
  53.         mov     ecx,[colors+0x1C]
  54.         mov     edx,textend
  55.         mov     esi,3
  56.         int     0x40
  57.  endbut:
  58.         mov     eax,12
  59.         mov     ebx,2
  60.         int     0x40
  61. ;============================= draw_window: END
  62.  event_wait:
  63.         mov     eax,23        ;==‘Ž›’ˆŸ==
  64.         mov     ebx,100       ;¦¤ âì ᥪ㭤ã
  65.         int     0x40
  66. ;-------------------------------------------------------------------------------
  67. ; ⨯ ᮡëâ¨ï ¢®§¢à éñ­ ¢ eax, ¤ «¥¥ ¯à®¢¥à塞, ª ª®¥ ᮡë⨥ ¯à®¨§®è«®
  68. ;-------------------------------------------------------------------------------
  69.         cmp     eax,1        ; § ¯à®á ­  ¯¥à¥à¨á®¢ªã?
  70.         je      redraw
  71.         cmp     eax,2        ; ­ ¦ â  ª« ¢¨è  ª« ¢¨ âãàë?
  72.         je      key
  73.         cmp     eax,3        ; ­ ¦ â  ª­®¯ª  ¢ ®ª­¥ ¯à®£à ¬¬ë?
  74.         je      button
  75.         cmp     eax,6        ; mouse - click or move?
  76.         je      MOUSE
  77.         jmp     event_wait   ; ¢®§¢à é ¥¬áï ª ­ ç «ã 横«  ®¦¨¤ ­¨ï ᮡë⨩
  78.                              ; ¥á«¨ ᮡë⨩  ­¥â
  79. ;-------------------------------------------------------------------------------
  80. ;  ®¡à ¡®âª  ᮡë⨩
  81. ;-------------------------------------------------------------------------------
  82. redraw:
  83.         call    draw_window  ; ¢ë§ë¢ ¥¬ äã­ªæ¨î draw_window ¨
  84.         jmp     event_wait   ; ¢®§¢à é ¥¬áï ­ § ¤ ª 横«ã ®¦¨¤ ­¨ï
  85. key:
  86.         mov     eax,2        ; áç¨â뢠¥¬ ª®¤ ­ ¦ â®© ª« ¢¨è¨. ‚®§¢à é¥­ ¢ ah.
  87.         int     0x40         ; Š« ¢¨è  ¤®«¦­  ¡ëâì ¯à®ç¨â ­  ¤«ï ®ç¨á⪨
  88.         jmp     event_wait   ; ¢®§¢à â ª event_wait
  89. button:
  90.         mov     eax,17       ; áç¨â뢠¥¬ ¨¤¥­â¨ä¨ª â®à ­ ¦ â®© ª­®¯ª¨
  91.         int     0x40         ; ¢®§¢à é¥­ ¢ ah.
  92. ;-------------------------------------------------------------------------------
  93. ; ᬮâਬ, ª ª ï ª­®¯ª  ¡ë«  ­ ¦ â  ¨ ᮮ⢥âáâ¢ãî騬 ®¡à §®¬ ॠ£¨à㥬.
  94. ;-------------------------------------------------------------------------------
  95.         cmp     ah, 1          ; ª­®¯ª  á id=1 ("§ ªàëâì")?
  96.         jne     noclose        ;
  97.   clos0:                       ;
  98.         mov     eax,-1         ; äã­ªæ¨ï -1: § ¢¥àè¨âì ¯à®£à ¬¬ã
  99.         int     0x40           ;
  100.   noclose:                     ; ª­®¯ª  id=200( "New" )
  101.         mov dword[pox],0
  102.         mov dword[pox+4],0     ;clear memory
  103.         mov dword[pox_],0      ;rest and other stuff
  104.         mov word[poxl],0       ; bits of pole X
  105.         mov word[pool],0       ; bits of pole O
  106.         ;mov byte[fill],0       ; ®¡­ã«ï¥¬ áç¥â稪 室®¢
  107.         ;mov byte[xwin],0       ; flag - x winner
  108.         ;mov byte[owin],0       ; flag - o winner
  109.         jmp     redraw         ; ç¨á⮥ ¨£à®¢®¥ ¯®«¥ ==>>
  110. ;-------------------------------------------------------------------------------
  111. ; ᬮâਬ, £¤¥ ¡ë«  ­ ¦ â  ¬ëèì
  112. ;-------------------------------------------------------------------------------
  113.  MOUSE:
  114.         mov eax,37      ; ¬ëèìî..
  115.         mov ebx,2
  116.         int 0x40
  117.         cmp eax,0       ; ..­¨ç¥£® ­¥ ­ ¦ â® - ¦¤ âì ᮡë⨩
  118.         je  event_wait
  119.                         ;­ ¦ â  ª­®¯ª  ¬ëè¨
  120.         mov eax,37      ; cursor coords
  121.         mov ebx,1
  122.         int 0x40        ;eax=x*65536+y
  123.         mov [px],eax    ;[px][py]  -  ª®®à¤¨­ â  ⪭ã⮣® ¬¥áâ 
  124.        
  125.         cmp [px],word 40
  126.         jb  event_wait 
  127.        
  128.         cmp [px],word 200
  129.         ja  event_wait 
  130.        
  131.         cmp [py],word 40
  132.         jb  event_wait 
  133.        
  134.         cmp [py],word 200
  135.         ja  event_wait 
  136.  
  137.           xor eax,eax
  138.      g11:                      ;1st cell======
  139.           cmp word[px],92
  140.           ja g12               ;>92
  141.           cmp word[py],92
  142.           ja g12               ;>92
  143.  
  144.           ;mov dword[idx],0     ;N=(0..8)
  145.           jmp puts
  146.  
  147.      g12:                      ;2nd cell========
  148.           inc al
  149.           cmp word[py],145
  150.           ja g13               ;>142
  151.           cmp word[px],92
  152.           ja g13               ;>92
  153.           ;mov dword[idx],1     ;N=(0..8)
  154.           jmp puts
  155.      g13:                      ;3=========
  156.           inc al
  157.           cmp word[px],92
  158.           ja g21               ;>92
  159.           ;mov dword[idx],2     ;N=(0..8)
  160.           jmp puts
  161.      g21:                      ;4========
  162.           inc al
  163.           cmp word[px],145
  164.           ja g22
  165.           cmp word[py],92
  166.           ja g22
  167.           ;mov dword[idx],3     ;N=(0..8)
  168.           jmp puts
  169.      g22:                      ;5=======
  170.           inc al
  171.           cmp word[px],145
  172.           ja g23
  173.           cmp word[py],145
  174.           ja g23
  175.           ;mov dword[idx],4     ;N=(0..8)
  176.           jmp puts
  177.      g23:                      ;6=======
  178.           inc al
  179.           cmp word[px],142
  180.           ja g31               ;>142
  181.           ;mov dword[idx],5     ;N=(0..8)
  182.           jmp puts
  183.      g31:                      ;7=======
  184.           inc al
  185.           cmp word[py],92
  186.           ja g32
  187.           ;mov dword[idx],6     ;N=(0..8)
  188.           jmp puts
  189.      g32:                      ;8======
  190.           inc al
  191.           cmp word[py],145
  192.           ja g33
  193.           ;mov dword[idx],7     ;N=(0..8)
  194.           jmp puts
  195.      g33:                      ;9======
  196.           inc al
  197.           ;mov dword[idx],8     ;N=(0..8)
  198.  
  199.    puts:                            ;㦥 ®¯à¥¤¥«¨«¨ ª«¥âªã
  200.            push eax
  201.            pop dword[idx]
  202.           mov esi,dword[idx]        ;
  203.           cmp byte[pox+esi],0       ;¯®«¥ ᢮¡®¤­®? (0-᢮¡®¤­®¥ ¯®«¥)
  204.           jne event_wait            ;¢®§¢à é ¥¬áï ­ § ¤ ª 横«ã ®¦¨¤ ­¨ï
  205.  
  206.           shl esi,2                 ;*4
  207.           mov eax,dword[pole+esi]
  208.           mov dword[px],eax           ;x coord from tabl ->px
  209.           ;mov ax,word[pole+esi+2]
  210.           ;mov word[py],ax           ;y coord from tabl ->py
  211.  
  212.           call x_put                ;"X"
  213.  
  214.           mov esi,dword[idx]        ;esi - cell number  =0..8
  215.           mov byte[pox+esi],'x'
  216.           inc byte[fill]            ;turn+1
  217.  
  218.           xor eax,eax               ;eax=0
  219.           inc eax                   ;bit=1       eax=1
  220.           mov ecx,dword[idx]        ;  esi=n
  221.           shl  ax,cl                ; <<n-bit   bit[n]=1
  222.           or word[poxl],ax          ;set bit in [poxl]
  223.  
  224.           call x_win                ;¯à®¢¥àª  ¢ë¨£àëè  •
  225.           cmp byte[xwin],1          ;ä« £ ¯®¡¥¤ë ãáâ ­®¢«¥­?
  226.           jne del5                  ;­¥â - ¯¥à¥áª®ª ­  delay
  227.  
  228.         mov     eax,4                 ; äã­ª 4: ­ ¯¨á âì ⥪áâ 'WINNER!'
  229.         mov     ebx,18*65536+215      ; [x ­ ç] *65536 + [y ­ ç]
  230.         mov     ecx, [colors+0x20]    ; 梥â ⥪áâ  RRGGBB
  231.         mov     edx,texts             ; 㪠§ â¥«ì ­  ­ ç «® ⥪áâ 
  232.         mov     esi,textend-texts     ; ¤«¨­  ⥪áâ  ¢ ¡ ©â å
  233.         int     0x40                  ;
  234.         jmp   event_wait              ; ¢®§¢à é ¥¬áï ­ § ¤ ª 横«ã ®¦¨¤ ­¨ï
  235.  
  236. ;===========================================================
  237.  del5:    mov eax,5                 ;=== delay 0,5 sec ===
  238.           mov ebx,50
  239.           int 0x40
  240.  
  241.           cmp byte[fill],8    ;¢á¥ ¯®«ï § ­ïâë - 室¨âì ­¥ªã¤ 
  242.           jnb event_wait      ;¢®§¢à é ¥¬áï ­ § ¤ ª 横«ã ®¦¨¤ ­¨ï - ª®­¥æ.
  243.  
  244.    rnew:                      ;
  245.           call rndnext              ; á«ãç ©­®¥ ç¨á«® ¢ eax
  246.           and eax, 0111b            ; eax = 0..7
  247.           mov esi,eax               ; eax->esi
  248.           call rndnext              ; á«ãç ©­®¥ ç¨á«® ¢ eax
  249.           and eax, 01b              ; eax= 0..1
  250.           add esi,eax               ; esi+=eax
  251.                                     ;esi=0..8 - index
  252.           cmp byte[pox+esi],0       ;á«ãç ©­®¥ ¯®«¥ ᢮¡®¤­®?
  253.           jne rnew                  ;­¥â - ­®¢®¥ á«ãç ©­®¥ ç¨á«®
  254.  
  255.           cmp byte[pox+4],0         ;業âà ᢮¡®¤¥­?
  256.           jne @F                    ;­¥â - á«ãç ©­ë© 室 (㦥 ¢ esi)
  257.           mov esi,4                 ;¤   - 室¨¬ ¢ 業âà (4) ¢¬¥áâ® á«ãç.
  258.      @@:
  259.           mov dword[idx],esi        ;á®åà ­¨¬ ¢ idx
  260.                                     ;esi=0..8 - index
  261.           call o_com                ;¯à®¢¥àª  24å ª®¬¡¨­ æ¨© XX0
  262.           call x_com                ;¯à®¢¥àª  24å ª®¬¡¨­ æ¨© 00*
  263.  
  264.           mov esi,dword[idx]        ;idx-¨­¤¥ªá ª«¥âª¨(0..8) ªã¤  室
  265.           shl esi,2                 ; esi*4 - ¯®«¥ á®á⮨⠨§ § ¯¨á¥© ¯® dword
  266.           mov eax,dword[pole+esi]     ;
  267.           mov dword[px],eax           ;x coord from tabl ->px
  268.         ;  mov ax,word[pole+esi+2]   ;
  269.         ;  mov word[py],ax           ;y coord from tabl ->py
  270.           call o_put                ; à¨á㥬 ­®«¨ª 'O'
  271.  
  272.           mov esi,dword[idx]
  273.           mov byte[pox+esi],'o'
  274.           inc byte[fill]            ;turn++
  275.  
  276.           xor eax,eax               ;eax=0
  277.           inc eax                   ;bit=1       eax=1
  278.           mov ecx,dword[idx]        ;  ecx=n
  279.           shl  ax,cl                ; <<n-bit   bit[n]=1
  280.           or word[pool],ax          ;set bit in [pool]
  281.  
  282.           call o_win
  283.           cmp byte[owin],1
  284.           jne event_wait
  285.  
  286.         mov     eax,4                 ; äã­ª 4: ­ ¯¨á âì ⥪áâ 'LOOSER!'
  287.         mov     ebx,48*65536+215      ; [x ­ ç] *65536 + [y ­ ç]
  288.         mov     ecx, [colors+0x20]    ; 梥â ⥪áâ  RRGGBB
  289.         mov     edx,lootxt            ; 㪠§ â¥«ì ­  ­ ç «® ⥪áâ 
  290.         mov     esi,text-lootxt       ; ¤«¨­  ⥪áâ  ¢ ¡ ©â å
  291.         int     0x40                  ;
  292.         jmp   event_wait              ; ¢®§¢à é ¥¬áï ­ § ¤ ª 横«ã ®¦¨¤ ­¨ï
  293. ;===========================================--
  294. ;
  295. }
  296.  
  297.  
  298.