Subversion Repositories Kolibri OS

Rev

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