Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. ;************************************
  2. ;******** Œ€ŠŽ‘› *******************
  3. ;************************************
  4. ;------------------------------------
  5. ; constants
  6. ;-----------------------梥â:0xRRGGBB
  7. cBLACK     = 0x000000 ; ç¥à­ë©
  8. cRED       = 0xFF0000 ; ªà á­ë©
  9. cYELLOW    = 0xFFFF00 ; ¦¥«âë©
  10. cGREEN     = 0x00FF00 ; §¥«¥­ë©
  11. cNAVY      = 0x0000FF ; ᨭ¨©
  12. cMAGENTA   = 0xFF00FF ; ¬ «¨­®¢ë©
  13. cBLUE      = 0x00FFFF ; £®«ã¡®©
  14. cWHITE     = 0xFFFFFF ; ¡¥«ë©
  15. cBROWN     = 0x554433 ; ª®à¨ç­¥¢ë©
  16.  
  17. ;-------------------------------
  18. cMAGENTAl  = 0xB800B8 ; magenta light
  19. cVIOLETl   = 0xF800F8 ; 䨮«¥â®¢ë© ᢥâ«
  20.  
  21. macro BeginProgram
  22.  {
  23.   use32
  24.   org 0x0
  25.  
  26.   db 'MENUET01'
  27.   dd 0x01
  28.   dd __start
  29.   dd __end
  30.   dd 0x10000   ;__memory
  31.   dd 0x10000   ;__stack
  32.   dd 0x0       ; dd __params
  33.   dd 0x0
  34.   __start:
  35.  }
  36.  
  37. macro EndProgram
  38.  {
  39.   align 32
  40.   rb 256
  41.   __end:
  42.   ;org 0x10000
  43.   __stack:
  44.   __memory:
  45.  }
  46.  
  47.  
  48. macro LoopBegin  lab,begi
  49. {
  50.         push  ecx                        ; ECX->STACK store  old
  51.         mov   ecx,begi
  52.   lab:
  53.         push  ecx                        ; ECX->STACK counter store
  54. }
  55.  
  56. macro LoopEnd lab,endi
  57. {
  58.         pop   ecx                        ;ECX<-STACK counter restore
  59.         inc   ecx
  60.         cmp   ecx,endi
  61.         jne   lab
  62.         pop   ecx                        ;ECX<-STACK restore  old
  63. }
  64.  
  65. macro SetEventMask mmm
  66. {
  67.         mov eax,40
  68.         mov ebx,mmm
  69.         int 0x40
  70. }
  71.  
  72. macro Subroutines
  73. {
  74. ;------------------------------------------------------------------------------
  75.  rndseed:
  76.         mov     eax,26
  77.         mov     ebx,9
  78.         int     0x40
  79.         mov dword[seed],eax
  80.         ret
  81.  rndnext:
  82.         mov eax,3
  83.         int 0x40
  84.         shr eax,16
  85.         add eax,dword[seed]
  86.        ; not eax
  87.         ror eax,3
  88.         xor eax,0xdeadbeef
  89.         mov dword[seed],eax
  90.         ret
  91. ;============0========== word[px],word[py]
  92.   o_put:
  93.         mov     ax,word[px]
  94.         shl     eax,16        ;*65536
  95.         add     eax,35        ;+35
  96.         mov     ebx,eax       ;posX*65536+dX       ; [x0] *65536 + [dx]
  97.         mov     ax,word[py]   ;
  98.         shl     eax,16        ;*65536
  99.         add     eax,35        ;+35
  100.         mov     ecx,eax       ;posY*65536+dY       ; [y0] *65536 + [dy]
  101.         mov     edx,cB
  102.         mov     eax,13         ; äã­ªæ¨ï 13  -  box
  103.         int     0x40           ;BLACK BOX---------------
  104.  
  105.         mov     ax,word[px]
  106.         inc     ax             ;+1
  107.         inc     ax             ;+1
  108.         shl     eax,16         ;*65536
  109.         add     eax,31         ;3         ;+35
  110.         mov     ebx,eax        ;posX*65536+dX     ; [x0] *65536 + [dx]
  111.  
  112.         mov     ax,word[py]
  113.         add    eax,2
  114.         ;inc     eax
  115.         ;inc     eax
  116.         shl     eax,16
  117.         add     eax,31         ;3       ;-2
  118.         mov     ecx,eax        ;posY*65536+dY     ; [y0] *65536 + [dy]
  119.         mov     edx,cW
  120.         mov     eax,13                      ; äã­ªæ¨ï 13  -  box
  121.         int     0x40           ;WHITE BOX----------
  122.         ret
  123. ;============X==========
  124.   x_put:
  125.         ;xor     eax,eax
  126.         mov      ax,word[px]
  127.         shl     eax,16        ;*65536
  128.         add      ax,word[px]
  129.         add     eax,35        ;+35
  130.         mov     ebx,eax       ;posX*65536+dX
  131.  
  132.         xor     eax,eax
  133.         mov      ax,word[py]
  134.         shl     eax,16        ;*65536
  135.         add      ax,word[py]
  136.         add     eax,35        ;+35
  137.         mov     ecx,eax       ;posX*65536+dX
  138.         mov     edx,cB
  139.         mov     eax,38        ; äã­ªæ¨ï 38  -  line   \
  140.         int     0x40
  141. ;------------------------------xx
  142.         xor     eax,eax
  143.         mov     ax,word[px]
  144.         inc     eax
  145.         shl     eax,16        ;*65536
  146.         add      ax,word[px]
  147.         add     eax,36        ;+35+1
  148.         mov     ebx,eax       ;posX*65536+dX
  149.         xor     eax,eax
  150.         mov     ax,word[py]
  151.         shl     eax,16        ;*65536
  152.         add      ax,word[py]
  153.         add     eax,35        ;+35
  154.         mov     ecx,eax       ;posX*65536+dX       ; [x0] *65536 + [dx]
  155.         mov     edx,cB
  156.         mov     eax,38        ; äã­ªæ¨ï 38  -  line    \\
  157.         int     0x40
  158. ;---------------------------------
  159.         xor     eax,eax
  160.         mov     ax,word[px]
  161.         shl     eax,16        ;*65536
  162.         mov     ebx,eax       ;posX*65536 =    .BX
  163.  
  164.         xor     eax,eax
  165.         mov     ax,word[px]
  166.         add     eax,35
  167.         add     ebx,eax       ;---------------------------BX
  168.  
  169.         xor     eax,eax
  170.         mov     ax,word[py]
  171.         add     eax,35
  172.         shl     eax,16        ;*65536
  173.         add     ax,word[py]   ;+y
  174.         mov     ecx,eax       ;(posY+35)*65536+posY = .CX
  175.         mov     edx,cB        ; 梥â : ç¥à­ë©
  176.         mov     eax,38        ; äã­ªæ¨ï 38  -  line     /
  177.         int     0x40
  178. ;----------------------------------------
  179.         xor     eax,eax
  180.         mov      ax,word[px]
  181.         inc      ax
  182.         shl     eax,16        ;*65536
  183.         mov     ebx,eax       ;posX*65536 =    .BX
  184.  
  185.         xor     eax,eax
  186.         mov     ax,word[px]
  187.         add     eax,36        ;+35+1
  188.         add     ebx,eax       ;---------------------------BX
  189.  
  190.         xor     eax,eax
  191.         mov     ax,word[py]
  192.         add     eax,35
  193.         shl     eax,16        ;*65536
  194.         add     ax,word[py]   ;+y
  195.         mov     ecx,eax       ;(posY+35)*65536+posY = .CX
  196.         mov     edx,cB
  197.         mov     eax,38        ; äã­ªæ¨ï 38  -  line      //
  198.         int     0x40
  199.         ret
  200. ;------------------------------------Ž‚…Š€ H  ¢ë¨£àëè­ãî á¨âã æ¨î-----x
  201.  x_win: xor ecx,ecx
  202.         xor ebx,ebx
  203.         xor eax,eax
  204.   lx0:  mov  bx,word[poxl]        ;áà ¢­¨âì ⥪ãéãî á¨âã æ¨î ­  ¯®«¥ X
  205.         mov esi,ecx
  206.         shl esi,1                 ;*2
  207.         mov  ax,word[oxwall+esi]  ; next pattern
  208.         and ebx,eax               ;á ¯®¡¥¤­ë¬¨ , ¥á«¨ å®âì ®¤­  ᮢ¯ ¤ ¥â -
  209.         sub eax,ebx
  210.          jz  wx                   ;¯®¡¥¤   -> set byte xwin=1
  211.         inc ecx
  212.         cmp ecx,8                 ;横«  ecx < 8
  213.         jb lx0
  214.   g00:                            ;­¥â ᮢ¯ ¤¥­¨©
  215.         ret
  216.    wx:
  217.         inc   byte[xwin]     ;mov   byte[xwin],1
  218.         ret
  219. ;------------------------------------Ž‚…Š€ H  ¢ë¨£àëè­ãî á¨âã æ¨î-----0
  220.  o_win: xor ecx,ecx
  221.         xor ebx,ebx
  222.         xor eax,eax
  223.   lo0:  mov  bx,word[pool]        ;áà ¢­¨âì ⥪ãéãî á¨âã æ¨î ­  ¯®«¥ O
  224.         mov esi,ecx
  225.         shl esi,1                 ;*2
  226.         mov  ax,word[oxwall+esi]  ; next pattern
  227.         and ebx,eax               ;á ¯®¡¥¤­ë¬¨ , ¥á«¨ å®âì ®¤­  ᮢ¯ ¤ ¥â -
  228.         sub eax,ebx
  229.         jz  wo                    ;¯®¡¥¤   -> set byte owin=1
  230.         inc ecx
  231.         cmp ecx,8                 ;横«
  232.         jb lo0
  233.         ret
  234.    wo:  inc byte[owin]            ;mov   byte[owin],1
  235.         ret
  236. ;==================================COmbinations -0- =============
  237.  o_com: xor ecx,ecx
  238.         xor ebx,ebx
  239.         xor eax,eax
  240.  l000:  mov  bx,word[poxl]        ;  â¥ªãéãî á¨âã æ¨î ­  ¯®«¥ X
  241.        ;  or  bx,word[pool]        ;+ ⥪ãéãî á¨âã æ¨î ­  ¯®«¥ O
  242.         mov esi,ecx
  243.         shl esi,2                 ;*4 -ᤢ¨£ -á«®¢
  244.         mov  ax,word[prav+esi]    ; á«¥¤ãî饥 ¯à ¢¨«®
  245.         and ebx,eax               ; ¥á«¨ ­¥ ᮢ¯ ¤ ¥â -
  246.         sub eax,ebx
  247.         jnz @F                    ;next ecx
  248.          xor eax,eax
  249.          xor ebx,ebx
  250.          mov ax,word[prav+esi+2]  ;esi<-¨§ â ¡«¨æë ¯à ¢¨«
  251.          mov bl,byte[pox+eax]
  252.          cmp ebx,0                ;empty?
  253.          je  g00d
  254.    @@:
  255.         inc ecx
  256.         cmp ecx,24                 ;横« ¤® 24
  257.         jb l000
  258.         ret                       ;­¥â ᮢ¯ ¤¥­¨©  - do nothing
  259.   g00d:
  260.                                   ;¯à¨¬¥­¨âì ¥£®
  261.         xor eax,eax
  262.         mov ax,word[prav+esi+2]     ;esi<-¨§ â ¡«¨æë ¯à ¢¨«
  263.         mov esi,eax
  264.         mov dword[idx],esi        ;á®åà ­¨¬ ¢ idx
  265.         ret
  266.  
  267. ;==================================¯à¥¤¢ë¨£àëè­ ï ª®¬¡¨­ æ¨ï...
  268.  x_com: xor ecx,ecx
  269.         xor ebx,ebx
  270.         xor eax,eax
  271.  l111:  mov  bx,word[pool]        ;  â¥ªãéãî á¨âã æ¨î ­  ¯®«¥ O
  272.         mov esi,ecx
  273.         shl esi,2                 ;*4 -ᤢ¨£ -á«®¢
  274.         mov  ax,word[prav+esi]    ; á«¥¤ãî饥 ¯à ¢¨«®
  275.         and ebx,eax               ; ¥á«¨ ­¥ ᮢ¯ ¤ ¥â -
  276.         sub eax,ebx
  277.         jnz @F                    ;next ecx
  278.          xor eax,eax
  279.          xor ebx,ebx
  280.          mov ax,word[prav+esi+2]  ;esi<-¨§ â ¡«¨æë ¯à ¢¨«
  281.          mov bl,byte[pox+eax]
  282.          cmp ebx,0                ;empty?
  283.          je  g11d
  284.    @@:
  285.         inc ecx
  286.         cmp ecx,24                ;横« ¤® 24
  287.         jb l111
  288.         ret                       ;­¥â ᮢ¯ ¤¥­¨©  - do nothing
  289.  
  290.   g11d:
  291.                                   ;¯à¨¬¥­¨âì ¥£®
  292.         xor eax,eax
  293.         mov ax,word[prav+esi+2]   ;esi<-¨§ â ¡«¨æë ¯à ¢¨«
  294.         mov esi,eax
  295.         mov dword[idx],esi        ;á®åà ­¨¬ ¢ idx
  296.         ret
  297. }
  298.  
  299. macro playing_field
  300. {
  301.   pole_x0:
  302.         mov     eax,38                 ; func 38
  303.         mov     edx,cB                 ; the color is black
  304.  
  305.         mov     ebx,92*65536+92        ;x
  306.         mov     ecx,42*65536+192       ;y
  307.         int     0x40                   ;-  line  vert 1
  308.         mov     ebx,142*65536+142      ;x
  309.         mov     ecx,42*65536+192       ;y
  310.         int     0x40                   ;-  line  vert 2
  311.         mov     ebx,42*65536+192       ;x
  312.         mov     ecx,92*65536+92        ;y
  313.         int     0x40                   ;-  line  horiz 1
  314.         mov     ebx,42*65536+192       ;x
  315.         mov     ecx,142*65536+142      ;y
  316.         int     0x40                   ;-  line  horiz 2
  317. }
  318.