Subversion Repositories Kolibri OS

Rev

Rev 1805 | Rev 7134 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;   SQ_game for MenuetOS
  2. ;   Author:    Alexei Ershov aka ealex
  3. ;   E-mail:    e-al[at]yandex[dot]ru
  4. ;   Fidonet:   2:469/335.38
  5. ; slightly optimized by diamond
  6. ; english translation by diamond (two strings in end of source)
  7.  
  8.  
  9.         BtnSize     equ 32      ; à §¬¥à ª­®¯ª¨
  10.         BtnSpace    equ 10      ; ¯à®¬¥¦ã⮪ ¬¥¦¤ã ª­®¯ª ¬¨
  11.         NofBtn      equ 4   ; à §¬¥à ¯®«ï (3-15)
  12.         Color1      equ 0xcc0000
  13.         Color2      equ 0x00cc00
  14.  
  15.         FieldSize   = (BtnSize+BtnSpace)*NofBtn + BtnSpace*3
  16.         center      = FieldSize / 2
  17.  
  18.  
  19.   use32              ; ¢ª«îç¨âì 32-¡¨â­ë© ०¨¬  áᥬ¡«¥à 
  20.   org    0x0         ;  ¤à¥á æ¨ï á ­ã«ï
  21.  
  22.   db     'MENUET01'  ; 8-¡ ©â­ë© ¨¤¥­â¨ä¨ª â®à MenuetOS
  23.   dd     0x01        ; ¢¥àá¨ï § £®«®¢ª  (¢á¥£¤  1)
  24.   dd     START       ;  ¤à¥á ¯¥à¢®© ª®¬ ­¤ë
  25.   dd     I_END       ; à §¬¥à ¯à®£à ¬¬ë
  26.   dd     0x1000      ; ª®«¨ç¥á⢮ ¯ ¬ïâ¨
  27.   dd     0x1000      ;  ¤à¥á ¢¥à設ë áâíª 
  28.   dd     0x0         ;  ¤à¥á ¡ãä¥à  ¤«ï ¯ à ¬¥â஢ (­¥ ¨á¯®«ì§ã¥âáï)
  29.   dd     0x0         ; § à¥§¥à¢¨à®¢ ­®
  30.  
  31. include 'lang.inc'
  32. include 'MACROS.INC' ; ¬ ªà®áë ®¡«¥£ç îâ ¦¨§­ì  áᥬ¡«¥à騪®¢!
  33.  
  34.  
  35. START:
  36.     call Game_Init
  37. red:
  38.     call Draw_Window
  39.  
  40. still:
  41.     mcall 10            ; äã­ªæ¨ï 10 - ¦¤ âì ᮡëâ¨ï
  42.         dec     eax
  43.         jz      red
  44.         dec     eax
  45.         jnz     button
  46.  
  47.  key:                  ; ­ ¦ â  ª« ¢¨è  ­  ª« ¢¨ âãà¥
  48.         mov     al, 2
  49.         int     0x40
  50.         jmp     still
  51. ;---------------------------------------------------------------------
  52.  
  53. button:
  54.         mov     al, 17  ; 17 - ¯®«ãç¨âì ¨¤¥­â¨ä¨ª â®à ­ ¦ â®© ª­®¯ª¨
  55.         int     0x40
  56.     cmp   ah, 1         ; ¥á«¨ ­ ¦ â  ª­®¯ª  á ­®¬¥à®¬ 1, ¢ë室¨¬
  57.     je    .exit
  58.  
  59.     cmp   ah, 2         ; ¥á«¨ ­ ¦ â  ª­®¯ª  2, ­ ç¨­ ¥¬ ­®¢ãî ¨£àã
  60.     je    START
  61.  
  62.       ;  ¦  ª­®¯ª  ­  ¯®«¥
  63.         inc     dword [moves]     ; 㢥«¨ç¨¢ ¥¬ ç¨á«® 室®¢
  64.  
  65.         shr     eax, 8            ; ¢ eax ¨¤¥­â¨ä¨ª â®à ­ ¦ â®© ª­®¯ª¨
  66.  
  67.         mov     dh, NofBtn
  68.         div     dh            ; al = ax(­®¬¥à ª­®¯ª¨) / NofBtn
  69.                               ; ah = ®áâ â®ª  (á¬. à¨áã­®ª)
  70.         mov     ebx, eax      ; á®åà ­¨¬ ç áâ­®¥ ¨ ®áâ â®ª ¢ ebx
  71.  
  72.       ; al\ah 0   1    2    3
  73.       ;     +-+  +-+  +-+  +-+
  74.       ;  1  |4|  |5|  |6|  |7|
  75.       ;     +-+  +-+  +-+  +-+
  76.  
  77.       ;     +-+  +-+  +-+  +-+
  78.       ;  2  |8|  |9|  |10  |11
  79.       ;     +-+  +-+  +-+  +-+
  80.  
  81.       ;     +-+  +-+  +-+  +-+
  82.       ;  3  |12  |13  |14  |15
  83.       ;     +-+  +-+  +-+  +-+
  84.  
  85.       ;     +-+  +-+  +-+  +-+
  86.       ;  4  |16  |17  |18  |19
  87.       ;     +-+  +-+  +-+  +-+
  88.  
  89. ; Œ¥­ï¥¬ 梥â á⮫¡¨ª 
  90.         shr     eax, 8        ; eax = ah
  91.         mov     edi, field
  92.         add     edi, eax    ; edi 㪠§¢ë¥â ­  ¯¥à¢ãî ª­®¯ªã ¨ ¨áª®¬®¬ áâ«¡æ¥
  93.         mov     ecx, NofBtn
  94. @@:
  95.         not     byte[edi]    ; ¬¥­ï¥¬ 梥⠢® ¢á¥¬ á⮫¡¨ª¥
  96.         dec     ecx
  97.         add     edi, NofBtn
  98.         test    ecx, ecx
  99.         jnz     @r
  100.  
  101. ; Œ¥­ï¥¬ 梥â áâப¨
  102.         mov     eax, ebx      ; ¢®ááâ ­ ¢«¨¢ ¥¬ eax
  103.         dec     eax
  104.         mov     dl, NofBtn
  105.         mul     dl            ; ax = al * NofBtn
  106.         mov     edi, field
  107.         add     edi, eax     ; edi 㪠§¢ë¥â ­  ¯¥à¢ãî ª­®¯ªã ¢ ¨áª®¬®© áâப¥
  108.         mov     ecx, NofBtn
  109. @@:
  110.         not     byte [edi]    ; ¬¥­ï¥¬ 梥⠢® ¢á¥© áâப¥
  111.         dec     ecx
  112.         inc     edi
  113.         test    ecx, ecx
  114.         jnz     @r
  115. ; –¢¥â ­ ¦ â®© ª­®¯ª¨ ¬¥­ï«áï 2 à §  (ª®£¤  ®¡à ¡ â뢠«¨ áâப㠨 á⮫¡¥æ),
  116. ; â.¥. ®áâ «áï ¯¥à¢®­ ç «­ë¬
  117. ; Œ¥­ï¥¬ 梥⠭ ¦ â®© ª­®¯ª¨
  118.         shr     ebx, 8        ; ebx = ®áâ â®ª (ah ­  à¨áã­ª¥)
  119.         not     byte [field+eax+ebx]
  120.         jmp     red
  121.  
  122.  
  123.  
  124.   .exit:
  125.     mcall -1            ; ¨­ ç¥ ª®­¥æ ¯à®£à ¬¬ë
  126.  
  127.  
  128. ;----------------------------------------------------------------------------
  129. ;               Draw_Window
  130. ;----------------------------------------------------------------------------
  131. Draw_Window:
  132.  
  133.     mcall 12, 1
  134.     mcall 0, 200*65536+FieldSize,\
  135.              200*65536+FieldSize+20+20+20,\
  136.              0x14AABBCC, 0x805080D0, header
  137.  
  138.     mcall 8, BtnSpace*2*65536 + 83,\
  139.              (FieldSize+BtnSpace+20)*65536+ 15, 2
  140.     mcall 4, (BtnSpace*2+3)*65536+(BtnSize+BtnSpace)*NofBtn+BtnSpace*4+20+4,\
  141.              0x10DDEEFF, strNew, strNew_e - strNew
  142.     mcall 4, (center - 25) * 65536 + 30, 0, strMovs, strMovs_e - strMovs
  143.     mcall 47, 4*65536+1, moves, (center + 2 ) * 65536 + 30, 0
  144.  
  145.  
  146.  
  147.         mov     ecx, (20+20+BtnSpace-BtnSize)*65536+BtnSize
  148.         mov     edx, NofBtn           ; ¨¤¥­â¨ä¨ª â®à ¯¥à¢®© ª­®¯ª¨ ­  ¯®«¥
  149.                                       ; ᬠà¨áã­®ª
  150.  
  151. buttons:                              ; à¨á㥬 ª­®¯®çª¨
  152.         mov     eax, edx
  153.         mov     dh, NofBtn
  154.         div     dh           ; al = ax / dh, ah - ®áâ â®ª
  155.         mov     dh, 0
  156.         test    ah, ah       ; ¥á«¨ ah = 0, ­ ç¨­ ¥¬ ­®¢ë© àï¤
  157.         jnz     @f
  158.         add     ecx, (BtnSize+BtnSpace)*65536
  159.         mov     ebx, BtnSpace*2*65536+BtnSize
  160. @@:
  161.         mov     esi, Color1                    ; ¡ ©â ¯®  ¤à¥áã
  162.         cmp     byte [field-NofBtn+edx], 0      ; field-NofBtn+­®¬¥à_ª­®¯ª¨
  163.         jz      @f                              ; £®¢®à¨â ® ¥¥ 梥â¥
  164.         mov     esi, Color2
  165. @@:
  166.         mcall 8,
  167.         add     ebx, (BtnSize+BtnSpace)*65536
  168.         inc     edx                        ; ¯¥à¥å®¤¨¬ ª á«¥¤ãî饩 ª­®¯ª¥
  169.         cmp     edx, NofBtn*(NofBtn+1)
  170.         jb      buttons
  171.  
  172.     mcall 12, 2                    ; äã­ªæ¨ï 12: á®®¡é¨âì Ž‘ ®¡ ®âà¨á®¢ª¥ ®ª­ 
  173.  
  174. ret
  175.  
  176. ;----------------------------------------------------------------------------
  177. ;               Game_Init
  178. ;----------------------------------------------------------------------------
  179. Game_Init:
  180.         and     [moves], 0             ; ®¡­ã«¨¬ ª®«¨ç¥á⢮ 室®¢
  181.  
  182.         call    random                 ; ¢ eax á«ãç ©­®¥ ç¨á«®
  183.         mov     ecx, NofBtn * NofBtn   ; ¢ ecx ª®«-¢® ª­®¯®ª ­  ¯®«¥
  184.         mov     bh, 0                  ; ¤«ï ª ¦¤®© ª­®¯ª¨ ¡ã¤¥¬ ¡à âì
  185.                                        ; 1 ¡¨â ¨§ eax, bh - ᪮«ìª®
  186. button_init:                           ; ¡¨â 㦥 ¨á¯®«ì§®¢ «¨
  187.         shr     eax, 1           ; ¬« ¤è¨© ¡¨â ¯®¯ ¤ ¥â ¢ ä« £ CF
  188.                                  ; ¢ § ¢¨á¨¬®á⨠®â ¥£® §­ ç¥­¨ï
  189.                                  ; ¢ bl § ¯¨á뢠¥âáï -1 ¨«¨ 0
  190.         sbb     bl, bl
  191.         mov     [field + ecx - 1], bl
  192.  
  193.         inc     bh
  194.         cmp     bh, 32           ; ¥á«¨ ¨á¯®«ì§®¢ ­ë ¢á¥ 32 ¡¨â  ¨§ eax
  195.         jb      @f               ; ­ ® ¯®«ãç¨âì ­®¢®¥ á«ãç ©­®¥ ç¨á«®
  196.         call    random
  197.         mov     bh, 0
  198. @@:
  199.         loop    button_init
  200.  
  201. ret
  202.  
  203. ;----------------------------------------------------------------------------
  204. ;     random - ¢§ïâ  ¨§ â¥âà¨á 
  205. ;----------------------------------------------------------------------------
  206. random:         mov eax,[generator]
  207.                 add eax,-43ab45b5h
  208.                 ror eax,1
  209.                 xor eax,32c4324fh
  210.                 ror eax,1
  211.                 mov [generator],eax
  212.                 ; --- IVAN ---
  213.                 mov eax,26
  214.                 mov ebx,9
  215.                 int 0x40
  216.                 xor eax,0xdeadbeef
  217.                 add eax,[generator]
  218.                 ; --- IVAN ---
  219.                 ret
  220.  
  221. ;============================================================================
  222.  
  223. field           db NofBtn * NofBtn dup(0)
  224. moves           dd 0
  225. generator       dd 0
  226.  
  227. if lang eq ru
  228. header          db 'CQ game',0
  229. header_e:
  230. strMovs         db '•Ž„'        ; '•Ž„'
  231. strMovs_e:
  232. strNew          db '®¢ ï ¨£à ' ; '®¢ ï ¨£à '
  233. strNew_e:
  234. else
  235. header          db 'CQ game',0
  236. header_e:
  237. strMovs         db 'MOVE'
  238. strMovs_e:
  239. strNew          db ' New game'
  240. strNew_e:
  241. end if
  242.  
  243.  
  244.  
  245. I_END:                             ; ¬¥âª  ª®­æ  ¯à®£à ¬¬ë
  246.