Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1803 yogev_ezra 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
}