Subversion Repositories Kolibri OS

Rev

Rev 7648 | Rev 8812 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
7646 leency 1
;   Простой пример программы для KolibriOS
2
;   озвучивает код нажатой клавиши
3
;
4
;   Компилировать FASM'ом
5
;        Можно открыть example.asm через программу FASM (её ярлык есть
6
;        на рабочем столе)
7
;        А можно просто нажать F9 в Tinypad'е. Лог компиляции
8
;        отображается на доске отладки (программа BOARD)
9
;
10
;   Что важно знать при программировании под Колибри:
11
;        Номер функции помещается в регистр eax.
12
;        Вызов системной функции осуществляется командой "int 0x40".
13
;        Все регистры, кроме явно указанных в возвращаемом значении,
14
;        включая регистр флагов eflags, сохраняются.
15
;
16
;    Пример:
17
;        mov eax, 1    ;Функция 1 - поставить точку в окне
18
;                      ;список сисфункций см. в DOCPACK - sysfuncr.txt
19
;        mov ebx, 10   ; координата x=10
20
;        mov ecx, 20   ; координата y=10
21
;        mov edx, 0xFFFfff ;цвет точки
22
;        int 0x40      ;вызвать функцию
23
;
24
;    Тоже самое с использованием макроса:
25
;        mcall 1, 10, 20, 0xFFFfff
26
;---------------------------------------------------------------------
27
 
28
  use32 	     ; включить 32-битный режим ассемблера
29
  org	 0	     ; адресация с нуля
30
 
31
  db	 'MENUET01'  ; 8-байтный идентификатор MenuetOS
32
  dd	 1	     ; версия заголовка (всегда 1)
33
  dd	 START	     ; адрес первой команды
34
  dd	 I_END	     ; размер программы
35
  dd	 MEM	     ; количество памяти
36
  dd	 STACKTOP    ; адрес вершины стэка
37
  dd	 0	     ; адрес буфера для параметров
38
  dd	 0	     ; зарезервировано
39
 
7650 leency 40
include "lang.inc"
7646 leency 41
include "../../macros.inc" ; макросы облегчают жизнь ассемблерщиков!
42
 
43
;---------------------------------------------------------------------
44
;---  НАЧАЛО ПРОГРАММЫ  ----------------------------------------------
45
;---------------------------------------------------------------------
46
 
47
START:
48
 
49
red:			; перерисовать окно
50
 
51
    call draw_window	; вызываем процедуру отрисовки окна
52
 
53
;---------------------------------------------------------------------
54
;---  ЦИКЛ ОБРАБОТКИ СОБЫТИЙ  ----------------------------------------
55
;---------------------------------------------------------------------
56
 
57
still:
58
    ;mcall 10            ; функция 10 - ждать события
59
    mov eax, 10
60
    int 0x40
61
 
62
    cmp  eax,2		; нажата клавиша ?
63
    je	 key		; если да - на key
64
    cmp  eax,3		; нажата кнопка ?
65
    je	 button 	; если да - на button
66
    cmp  eax,1		; перерисовать окно ?
67
    je	 red		; если да - на метку red
68
 
69
    jmp  still		; если другое событие - в начало цикла
70
 
71
 
72
 
73
;---------------------------------------------------------------------
74
 
75
 
76
  key:			; нажата клавиша на клавиатуре
77
    mcall 2		; функция 2 - считать код символа (в ah)
78
 
79
 
80
	cmp   ah, 0x41	      ; A - if Caps Lock ON
81
	jnz   @f
82
	jmp   _07
83
    @@:
84
	cmp   ah, 0x5a	      ; Z
85
	jnz   @f
86
	jmp   _08
87
    @@:
88
	cmp   ah, 0x53	      ; S
89
	jnz   @f
90
	jmp   _09
91
    @@:
92
	cmp   ah, 0x58	      ; X
93
	jnz   @f
94
	jmp   _0a
95
    @@:
96
	cmp   ah, 0x44	      ; D
97
	jnz   @f
98
	jmp   _0b
99
    @@:
100
	cmp   ah, 0x43	      ; C
101
	jnz   @f
102
	jmp   _0c
103
    @@:
104
	cmp   ah, 0x56	      ; V
105
	jnz   @f
106
   _01:
107
	mov   ah, 0x01
108
	jmp   p
109
    @@:
110
	cmp   ah, 0x47	      ; G
111
	jnz   @f
112
   _02:
113
	mov   ah, 0x02
114
	jmp   p
115
    @@:
116
	cmp   ah, 0x42	      ; B
117
	jnz   @f
118
   _03:
119
	mov   ah, 0x03
120
	jmp   p
121
    @@:
122
	cmp   ah, 0x48	      ; H
123
	jnz   @f
124
   _04:
125
	mov   ah, 0x04
126
	jmp   p
127
    @@:
128
	cmp   ah, 0x4e	      ; N
129
	jnz   @f
130
   _05:
131
	mov   ah, 0x05
132
	jmp   p
133
    @@:
134
	cmp   ah, 0x4d	      ; M
135
	jnz   @f
136
   _06:
137
	mov   ah, 0x06
138
	jmp   p
139
    @@:
140
	cmp   ah, 0x4b	      ; K
141
	jnz   @f
142
   _07:
143
	mov   ah, 0x07
144
	jmp   p
145
    @@:
146
	cmp   ah, 0x3c	      ; <
147
	jnz   @f
148
   _08:
149
	mov   ah, 0x08
150
	jmp   p
151
    @@:
152
	cmp   ah, 0x4c	      ; L
153
	jnz   @f
154
   _09:
155
	mov   ah, 0x09
156
	jmp   p
157
    @@:
158
	cmp   ah, 0x3e	      ; >
159
	jnz   @f
160
   _0a:
161
	mov   ah, 0x0a
162
	jmp   p
163
    @@:
164
	cmp   ah, 0x3a	      ; :
165
	jnz   @f
166
   _0b:
167
	mov   ah, 0x0b
168
	jmp   p
169
    @@:
170
	cmp   ah, 0x3f	      ; ?
171
	jnz   @f
172
   _0c:
173
	mov   ah, 0x0c
174
	jmp   p
175
    @@:
176
	cmp   ah, 0x22	      ; "
177
	jnz   @f
178
	jmp   _11
179
    @@:
180
	cmp   ah, 0x21	      ; key !-------
181
	jnz   @f
182
	jmp   _0c
183
    @@:
184
	cmp   ah, 0x51	      ; key Q
185
	jnz   @f
186
   _11:
187
	mov   ah, 0x11
188
	jmp   p
189
    @@:
190
	cmp   ah, 0x40	      ; key @
191
	jnz   @f
192
   _12:
193
	mov   ah, 0x12
194
	jmp   p
195
    @@:
196
	cmp   ah, 0x57	      ; key W
197
	jnz   @f
198
   _13:
199
	mov   ah, 0x13
200
	jmp   p
201
    @@:
202
	cmp   ah, 0x23	      ; key #
203
	jnz   @f
204
   _14:
205
	mov   ah, 0x14
206
	jmp   p
207
    @@:
208
	cmp   ah, 0x45	      ; key E
209
	jnz   @f
210
   _15:
211
	mov   ah, 0x15
212
	jmp   p
213
    @@:
214
	cmp   ah, 0x52	      ; key R
215
	jnz   @f
216
   _16:
217
	mov   ah, 0x16
218
	jmp   p
219
    @@:
220
	cmp   ah, 0x25	      ; key %
221
	jnz   @f
222
	jmp   _17
223
    @@:
224
	cmp   ah, 0x54	      ; key T
225
	jnz   @f
226
	jmp   _18
227
    @@:
228
	cmp   ah, 0x5e	      ; key ^
229
	jnz   @f
230
	jmp   _19
231
    @@:
232
	cmp   ah, 0x59	      ; key Y
233
	jnz   @f
234
	jmp   _1a
235
    @@:
236
	cmp   ah, 0x26	      ; key &
237
	jnz   @f
238
	jmp   _1b
239
    @@:
240
	cmp   ah, 0x55	      ; key U
241
	jnz   @f
242
	jmp   _1c
243
    @@:
244
	cmp   ah, 0x49	      ; key I
245
	jnz   @f
246
	jmp   _21
247
    @@:
248
	cmp   ah, 0x28	      ; key (
249
	jnz   @f
250
	jmp   _22
251
    @@:
252
	cmp   ah, 0x4f	      ; key O
253
	jnz   @f
254
	jmp   _23
255
    @@:
256
	cmp   ah, 0x29	      ; key )
257
	jnz   @f
258
	jmp   _24
259
    @@:
260
	cmp   ah, 0x50	      ; key P
261
	jnz   @f
262
	jmp   _25
263
    @@:
264
	cmp   ah, 0x7b	      ; key {
265
	jnz   @f
266
	jmp   _26
267
    @@:
268
	cmp   ah, 0x2b	      ; key +
269
	jnz   @f
270
	jmp   _27
271
    @@:
272
	cmp   ah, 0x7d	      ; key }
273
	jnz   @f
274
	jmp   _28
275
    @@:
276
	cmp   ah, 0x7c	      ; key |
277
	jnz   @f
278
	jmp   _29
279
    @@:
280
	cmp   ah, 0x61	      ; a - if Caps Lock OFF
281
	jnz   @f
282
   _17:
283
	mov   ah, 0x17
284
	jmp   p
285
    @@:
286
	cmp   ah, 0x7a	      ; z
287
	jnz   @f
288
   _18:
289
	mov   ah, 0x18
290
	jmp   p
291
    @@:
292
	cmp   ah, 0x73	      ; s
293
	jnz   @f
294
   _19:
295
	mov   ah, 0x19
296
	jmp   p
297
    @@:
298
	cmp   ah, 0x78	      ; x
299
	jnz   @f
300
   _1a:
301
	mov   ah, 0x1a
302
	jmp   p
303
    @@:
304
	cmp   ah, 0x64	      ; d
305
	jnz   @f
306
   _1b:
307
	mov   ah, 0x1b
308
	jmp   p
309
    @@:
310
	cmp   ah, 0x63	      ; c
311
	jnz   @f
312
   _1c:
313
	mov   ah, 0x1c
314
	jmp   p
315
    @@:
316
	cmp   ah, 0x76	      ; v
317
	jnz   @f
318
   _21:
319
	mov   ah, 0x21
320
	jmp   p
321
    @@:
322
	cmp   ah, 0x67	      ; g
323
	jnz   @f
324
   _22:
325
	mov   ah, 0x22
326
	jmp   p
327
    @@:
328
	cmp   ah, 0x62	      ; b
329
	jnz   @f
330
   _23:
331
	mov   ah, 0x23
332
	jmp   p
333
    @@:
334
	cmp   ah, 0x68	      ; h
335
	jnz   @f
336
   _24:
337
	mov   ah, 0x24
338
	jmp   p
339
    @@:
340
	cmp   ah, 0x6e	      ; n
341
	jnz   @f
342
   _25:
343
	mov   ah, 0x25
344
	jmp   p
345
    @@:
346
	cmp   ah, 0x6d	      ; m
347
	jnz   @f
348
   _26:
349
	mov   ah, 0x26
350
	jmp   p
351
    @@:
352
	cmp   ah, 0x6b	      ; k
353
	jnz   @f
354
   _27:
355
	mov   ah, 0x27
356
	jmp   p
357
    @@:
358
	cmp   ah, 0x2c	      ; ,
359
	jnz   @f
360
   _28:
361
	mov   ah, 0x28
362
	jmp   p
363
    @@:
364
	cmp   ah, 0x6c	      ; l
365
	jnz   @f
366
   _29:
367
	mov   ah, 0x29
368
	jmp   p
369
    @@:
370
	cmp   ah, 0x2e	      ; .
371
	jnz   @f
372
   _2a:
373
	mov   ah, 0x2a
374
	jmp   p
375
    @@:
376
	cmp   ah, 0x3b	      ; ;
377
	jnz   @f
378
   _2b:
379
	mov   ah, 0x2b
380
	jmp   p
381
    @@:
382
	cmp   ah, 0x2f	      ; /
383
	jnz   @f
384
   _2c:
385
	mov   ah, 0x2c
386
	jmp   p
387
    @@:
388
	cmp   ah, 0x27	      ; '
389
	jnz   @f
390
  _31:
391
	mov   ah, 0x31
392
	jmp   p
393
    @@:
394
	cmp   ah, 0x60	      ; key `
395
	jnz   @f
396
	jmp   _2c
397
    @@:
398
	cmp   ah, 0x09	      ; key tab
399
	jnz   @f
400
	jmp   _31
401
    @@:
402
	cmp   ah, 0x31	      ; key 1
403
	jnz   @f
404
  _32:
405
	mov   ah, 0x32
406
	jmp   p
407
    @@:
408
	cmp   ah, 0x71	      ; key q
409
	jnz   @f
410
  _33:
411
	mov   ah, 0x33
412
	jmp   p
413
    @@:
414
	cmp   ah, 0x32	      ; key 2
415
	jnz   @f
416
  _34:
417
	mov   ah, 0x34
418
	jmp   p
419
    @@:
420
	cmp   ah, 0x77	      ; key w
421
	jnz   @f
422
  _35:
423
	mov   ah, 0x35
424
	jmp   p
425
    @@:
426
	cmp   ah, 0x65	      ; key e
427
	jnz   @f
428
  _36:
429
	mov   ah, 0x36
430
	jmp   p
431
    @@:
432
	cmp   ah, 0x34	      ; key 4
433
	jnz   @f
434
  _37:
435
	mov   ah, 0x37
436
	jmp   p
437
    @@:
438
	cmp   ah, 0x72	      ; key r
439
	jnz   @f
440
  _38:
441
	mov   ah, 0x38
442
	jmp   p
443
    @@:
444
	cmp   ah, 0x35	      ; key 5
445
	jnz   @f
446
  _39:
447
	mov   ah, 0x39
448
	jmp   p
449
    @@:
450
	cmp   ah, 0x74	      ; key t
451
	jnz   @f
452
  _3a:
453
	mov   ah, 0x3a
454
	jmp   p
455
    @@:
456
	cmp   ah, 0x36	      ; key 6
457
	jnz   @f
458
  _3b:
459
	mov   ah, 0x3b
460
	jmp   p
461
    @@:
462
	cmp   ah, 0x79	      ; key y
463
	jnz   @f
464
  _3c:
465
	mov   ah, 0x3c
466
	jmp   p
467
    @@:
468
	cmp   ah, 0x75	      ; key u
469
	jnz   @f
470
  _41:
471
	mov   ah, 0x41
472
	jmp   p
473
    @@:
474
	cmp   ah, 0x38	      ; key 8
475
	jnz   @f
476
	mov   ah, 0x42
477
	jmp   p
478
    @@:
479
	cmp   ah, 0x69	      ; key i
480
	jnz   @f
481
	mov   ah, 0x43
482
	jmp   p
483
    @@:
484
	cmp   ah, 0x39	      ; key 9
485
	jnz   @f
486
	mov   ah, 0x44
487
	jmp   p
488
    @@:
489
	cmp   ah, 0x6f	      ; key o
490
	jnz   @f
491
	mov   ah, 0x45
492
	jmp   p
493
    @@:
494
	cmp   ah, 0x70	      ; key p
495
	jnz   @f
496
	mov   ah, 0x46
497
	jmp   p
498
    @@:
499
	cmp   ah, 0x2d	      ; key -
500
	jnz   @f
501
	mov   ah, 0x47
502
	jmp   p
503
    @@:
504
	cmp   ah, 0x5b	      ; key [
505
	jnz   @f
506
	mov   ah, 0x48
507
	jmp   p
508
    @@:
509
	cmp   ah, 0x3d	      ; key =
510
	jnz   @f
511
	mov   ah, 0x49
512
	jmp   p
513
    @@:
514
	cmp   ah, 0x5d	      ; key ]
515
	jnz   @f
516
	mov   ah, 0x4a
517
	jmp   p
518
    @@:
519
	cmp   ah, 0x5c	      ; key \
520
	jnz   @f
521
	mov   ah, 0x4b
522
	jmp   p
523
    @@:
524
	cmp   ah, 0x08	      ; key backspace
525
	jnz   @f
526
	mov   ah, 0x4c
527
	jmp   p
528
    @@:
529
	cmp   ah, 0x0d	      ; key enter
530
	jnz   @f
531
	mov   ah, 0x51
532
	jmp   p
533
    @@:
534
	cmp   ah, 0x66	      ; key f
535
	jnz   @f
536
	mov   ah, 0x01
537
	jmp   p
538
    @@:
539
	cmp   ah, 0x6a	      ; key j
540
	jnz   @f
541
	mov   ah, 0x05
542
	jmp   p
543
    @@:
544
	cmp   ah, 0x33	      ; key 3
545
	jnz   @f
546
	mov   ah, 0x08
547
	jmp   p
548
    @@:
549
	cmp   ah, 0x37	      ; key 7
550
	jnz   @f
551
	jmp   _11
552
    @@:
553
	cmp   ah, 0x30	      ; key 0
554
	jnz   @f
555
	jmp   _15
556
    @@:
557
	cmp   ah, 0xb4	      ; key home
558
	jnz   @f
559
	mov   ah, 0x10
560
	jmp   p
561
    @@:
562
	cmp   ah, 0xb5	      ; key end
563
	jnz   @f
564
   _70:
565
	mov   ah, 0xfc
566
	jmp   p
567
    @@:
568
	cmp   ah, 0xb8	      ; key Page Up
569
	jnz   @f
570
	mov   ah, 0x20
571
	jmp   p
572
    @@:
573
	cmp   ah, 0xb7	      ; key Page Down
574
	jnz   @f
575
	jmp   _70
576
    @@:
577
	cmp   ah, 0xff	      ; key F12
578
	jnz   @f
579
	mov   ah, 0x00
580
	jmp   p
581
    @@:
582
	cmp   ah, 0xb6	      ; key Del
583
	jnz   @f
584
	jmp   _70
585
    @@:
586
 
587
  p:
588
    mov  [M+1], ah  ; записать код символа как код ноты
589
 
590
    ; функция 55-55: системный динамик ("PlayNote")
591
    ;   esi - адрес мелодии
592
 
593
       mov  eax,55
594
       mov  ebx,eax
595
       mov  esi,M
596
       int  0x40
597
 
598
    ; или коротко:
599
    ;mcall 55, , , , Music
600
 
601
    jmp  still		; вернуться к началу цикла
602
 
603
 
604
;---------------------------------------------------------------------
605
 
606
  button:
607
    mcall 17		; 17 - получить идентификатор нажатой кнопки
608
 
609
	cmp  ah, 0xa1	    ; button 1
610
	jnz  @f
611
	jmp  _01
612
    @@:
613
	cmp  ah, 0x02	    ; button 2
614
	jnz  @f
615
	jmp  _02
616
    @@:
617
	cmp  ah, 0x03	    ; button 3
618
	jnz  @f
619
	jmp  _03
620
    @@:
621
	cmp  ah, 0x04
622
	jnz  @f
623
	jmp  _04
624
    @@:
625
	cmp  ah, 0x05
626
	jnz  @f
627
	jmp  _05
628
    @@:
629
	cmp  ah, 0x06
630
	jnz  @f
631
	jmp  _06
632
    @@:
633
	cmp  ah, 0x07
634
	jnz  @f
635
	jmp  _07
636
    @@:
637
	cmp  ah, 0x08	    ; button 8
638
	jnz  @f
639
	jmp  _08
640
    @@:
641
	cmp  ah, 0x09
642
	jnz  @f
643
	jmp  _09
644
    @@:
645
	cmp  ah, 0x0a	    ; button 10
646
	jnz  @f
647
	jmp  _0a
648
    @@:
649
	cmp  ah, 0x0b
650
	jnz  @f
651
	jmp  _0b
652
    @@:
653
	cmp  ah, 0x0c	    ; button 12
654
	jnz  @f
655
	jmp  _0c
656
    @@:
657
 
658
	cmp  ah, 0x11
659
	jnz  @f
660
	jmp  _11
661
    @@:
662
	cmp  ah, 0x12
663
	jnz  @f
664
	jmp  _12
665
    @@:
666
	cmp  ah, 0x13
667
	jnz  @f
668
	jmp  _13
669
    @@:
670
	cmp  ah, 0x14
671
	jnz  @f
672
	jmp  _14
673
    @@:
674
	cmp  ah, 0x15
675
	jnz  @f
676
	jmp  _15
677
    @@:
678
	cmp  ah, 0x16
679
	jnz  @f
680
	jmp  _16
681
    @@:
682
	cmp  ah, 0x17
683
	jnz  @f
684
	jmp  _17
685
    @@:
686
	cmp  ah, 0x18
687
	jnz  @f
688
	jmp  _18
689
    @@:
690
	cmp  ah, 0x19
691
	jnz  @f
692
	jmp  _19
693
    @@:
694
	cmp  ah, 0x1a
695
	jnz  @f
696
	jmp  _1a
697
    @@:
698
	cmp  ah, 0x1b
699
	jnz  @f
700
	jmp  _1b
701
    @@:
702
	cmp  ah, 0x1c
703
	jnz  @f
704
	jmp  _1c
705
    @@:
706
 
707
	cmp  ah, 0x21	    ; button 1
708
	jnz  @f
709
	jmp  _21
710
    @@:
711
	cmp  ah, 0x22
712
	jnz  @f
713
	jmp  _22
714
    @@:
715
	cmp  ah, 0x23	    ; button 3
716
	jnz  @f
717
	jmp  _23
718
    @@:
719
	cmp  ah, 0x24
720
	jnz  @f
721
	jmp  _24
722
    @@:
723
	cmp  ah, 0x25	    ; button 5
724
	jnz  @f
725
	jmp  _25
726
    @@:
727
	cmp  ah, 0x26
728
	jnz  @f
729
	jmp  _26
730
    @@:
731
	cmp  ah, 0x27	    ; button 7
732
	jnz  @f
733
	jmp  _27
734
    @@:
735
	cmp  ah, 0x28
736
	jnz  @f
737
	jmp  _28
738
    @@:
739
	cmp  ah, 0x29	    ; button 9
740
	jnz  @f
741
	jmp  _29
742
    @@:
743
	cmp  ah, 0x2a
744
	jnz  @f
745
	jmp  _2a
746
    @@:
747
	cmp  ah, 0x2b	    ; button 11
748
	jnz  @f
749
	jmp  _2b
750
    @@:
751
	cmp  ah, 0x2c
752
	jnz  @f
753
	jmp  _2c
754
    @@:
755
	cmp  ah, 0x31
756
	jnz  @f
757
	jmp  _31
758
 
759
    @@:
760
	cmp  ah, 0x32
761
	jnz  @f
762
	jmp  _32
763
    @@:
764
	cmp  ah, 0x33
765
	jnz  @f
766
	jmp  _33
767
    @@:
768
	cmp  ah, 0x34
769
	jnz  @f
770
	jmp  _34
771
    @@:
772
	cmp  ah, 0x35
773
	jnz  @f
774
	jmp  _35
775
    @@:
776
	cmp  ah, 0x36
777
	jnz  @f
778
	jmp  _36
779
    @@:
780
	cmp  ah, 0x37
781
	jnz  @f
782
	jmp  _37
783
    @@:
784
	cmp  ah, 0x38
785
	jnz  @f
786
	jmp  _38
787
    @@:
788
	cmp  ah, 0x39
789
	jnz  @f
790
	jmp  _39
791
    @@:
792
	cmp  ah, 0x3a
793
	jnz  @f
794
	jmp  _3a
795
    @@:
796
	cmp  ah, 0x3b
797
	jnz  @f
798
	jmp  _3b
799
    @@:
800
	cmp  ah, 0x3c
801
	jnz  @f
802
	jmp  _3c
803
    @@:
804
	cmp  ah, 0x41
805
	jnz  @f
806
	jmp  _41
807
    @@:
808
 
809
    cmp   ah, 1 	; если НЕ нажата кнопка с номером 1,
810
    jne   still 	;  вернуться
811
 
812
  .exit:
813
    mcall -1		; иначе конец программы
814
 
815
 
816
;---------------------------------------------------------------------
817
;---  ОПРЕДЕЛЕНИЕ И ОТРИСОВКА ОКНА  ----------------------------------
818
;---------------------------------------------------------------------
819
 
7648 leency 820
WHITE_W=48   ; While key width
821
BLACK_W=30   ; Black key width
822
BLACK_X=34   ; Black key X offset
823
 
7646 leency 824
draw_window:
825
 
826
    mcall 12, 1       ; функция 12: сообщить ОС о начале отрисовки
827
 
828
    mcall 48, 3, sc,sizeof.system_colors
829
 
830
    ; далее: сначала длинный вариант (закомментированный)
831
    ; затем короткий аналог с использованием макросов
832
 
833
;   mov  eax,0                   ; функция 0: определить окно
834
;   mov  ebx,200*65536+300       ; [x старт] *65536 + [x размер]
835
;   mov  ecx,200*65536+150       ; [y старт] *65536 + [y размер]
836
;   mov  edx, [sc.work]          ; цвет фона
837
;   or   edx, 0x33000000         ; и тип окна 3
838
;   mov  edi,header              ; ЗАГОЛОВОК ОКНА
839
;   int  0x40
840
 
841
    mov   edx, [sc.work]	 ; цвет фона
842
    or	  edx, 0x33000000	 ; и тип окна 3
7650 leency 843
    mcall 0, <20,WHITE_W*15+9>, <200,250>, , ,caption
7648 leency 844
 
845
    mcall 8,  , <0,100>, 0x21, 0xff7a74
846
    mcall 8,  , <0,100>, 0x23, 0x907040
847
    mcall 8,  , <0,100>, 0x25, 0xa08050
848
    mcall 8,  , <0,100>, 0x26, 0xb09060
849
    mcall 8,  , <00,100>, 0x28, 0xc0a070
850
    mcall 8,  , <00,100>, 0x2a, 0xd0b080
851
    mcall 8,  , <0,100>, 0x2c, 0xe0c090
852
    mcall 8,  , <0,100>, 0x31, 0xffa97c
853
    mcall 8,  , <0,100>, 0x33, 0xaf8d8d
854
    mcall 8,  , <0,100>, 0x35, 0xbf9d9d
855
    mcall 8,  , <0,100>, 0x36, 0xcfadad
856
    mcall 8,  , <00,100>, 0x38, 0xdfbdbd
857
    mcall 8,  , <00,100>, 0x3a, 0xefcdcd
858
    mcall 8,  , <0,100>, 0x3c, 0xffdddd
859
    mcall 8,  , <0,100>, 0x41, 0xffe558
7646 leency 860
 
7648 leency 861
    mcall 8,  , <0,50>, 0x22, 0x221100
862
    mcall 8,  , <0,50>, 0x24, 0x221100
863
    mcall 8,  , <0,50>, 0x27, 0x221100
864
    mcall 8,  , <0,50>, 0x29, 0x221100
865
    mcall 8,  , <0,50>, 0x2b, 0x221100
866
    mcall 8,  , <0,50>, 0x32, 0x221100
867
    mcall 8,  , <0,50>, 0x34, 0x221100
868
    mcall 8,  , <0,50>, 0x37, 0x221100
869
    mcall 8,  , <0,50>, 0x39, 0x221100
870
    mcall 8,  , <0,50>, 0x3b, 0x221100
7646 leency 871
 
7648 leency 872
    mcall 8,  , <100,100>, 0xa1, 0x702050
873
    mcall 8,  , <100,100>, 0x03, 0x683638
874
    mcall 8,  , <100,100>, 0x05, 0x784648
875
    mcall 8,  , <100,100>, 0x06, 0x885658
876
    mcall 8,  , <100,100>, 0x08, 0x986668
877
    mcall 8,  , <100,100>, 0x0a, 0xa87678
878
    mcall 8,  , <100,100>, 0x0c, 0xb88688
879
    mcall 8,  , <100,100>, 0x11, 0x880040
880
    mcall 8,  , <100,100>, 0x13, 0x90622b
881
    mcall 8,  , <100,100>, 0x15, 0xa0723b
882
    mcall 8,  , <100,100>, 0x16, 0xb0824b
883
    mcall 8,  , <100,100>, 0x18, 0xc0925b
884
    mcall 8,  , <100,100>, 0x1a, 0xd0a26b
885
    mcall 8,  , <100,100>, 0x1c, 0xe0b27b
886
    mcall 8,  , <100,100>, 0x21, 0xff7a74
7646 leency 887
 
7648 leency 888
    mcall 8,  , <100,50>, 0x02, 0x221100
889
    mcall 8,  , <100,50>, 0x04, 0x221100
890
    mcall 8,  , <100,50>, 0x07, 0x221100
891
    mcall 8,  , <100,50>, 0x09, 0x221100
892
    mcall 8,  , <100,50>, 0x0b, 0x221100
893
    mcall 8,  , <100,50>, 0x12, 0x221100
894
    mcall 8,  , <100,50>, 0x14, 0x221100
895
    mcall 8,  , <100,50>, 0x17, 0x221100
896
    mcall 8,  , <100,50>, 0x19, 0x221100
897
    mcall 8,  , <100,50>, 0x1b, 0x221100
7646 leency 898
 
899
 
900
    ; вывод текстовой строки
901
    mov   ecx, [sc.work_text]	 ; цвет фона
902
    or	  ecx, 0x90000000	 ; и тип строки
903
    mcall 4, <50, 205>, , message
904
    mcall 4, <10, 235>, , message1
905
    mcall 4, <10, 260>, , message2
906
    mcall 4, <10, 285>, , message3
907
    mcall 4, <10, 310>, , message4
7648 leency 908
    mcall 4, <16, 185>, , t_notes
7646 leency 909
 
910
    mcall 12, 2 		 ; функция 12.2, закончили рисовать
911
 
912
    ret 			 ; выходим из процедуры
913
 
914
 
915
;---------------------------------------------------------------------
916
;---  ДАННЫЕ ПРОГРАММЫ  ----------------------------------------------
917
;---------------------------------------------------------------------
918
 
919
 
920
; Второй байт в M (Music) изменяется нажатием клавиши
921
 
922
M:
923
  db  0x90, 0x30, 0
924
 
925
 
926
sc system_colors
927
 
7650 leency 928
if lang eq ru
929
  message  db 'Справка: щёлкните 2 раза на заголовке.',0
930
  message1 db 'Нажмите любую клавишу в английской раскладке - ',0
931
  message2 db 'должен звучать встроенный динамик компьютера (не колонки!)',0
932
  message3 db 'Нота "До" - клавиши V,Tab,U,Enter',0
933
  message4 db 'при включении Caps Lock - клавиши V,Q,I.',0
934
  t_notes  db 'ДО    РЕ    МИ    ФА   СОЛЬ   ЛЯ    СИ    ДО',0
935
  caption  db 'Детское пианино',0
936
else
937
  message  db 'To see help click twice on the window header',0
938
  message1 db 'Press any key in English keyboard layout - ',0
939
  message2 db 'so you will hear the sound from the PC-speaker (Beeper)',0
940
  message3 db 'Note "C" is the key V,Tab,U,Enter',0
941
  message4 db 'and when Caps Lock is on then the keys V,Q,I.',0
942
  t_notes  db 'C     D     E     F     G     A     B     C ',0
943
  caption  db 'Baby piano',0
944
end if
7646 leency 945
 
946
;---------------------------------------------------------------------
947
 
948
I_END:			; метка конца программы
949
  rb 4096		; память для стека
950
align 16
951
STACKTOP:		; метка вершины стека (при заполнении стек
952
			; растет в сторону уменьшения адресов, потому
953
			; память для него в коде программы встречается
954
			; раньше чем его вершина)
955
MEM:			; метка указывающая на конец программы плюс
956
			; размер используемой ею оперативной памяти
957
; Адрес метки MEM всегда должен быть больше чем адрес метки I_END.
958
; Метка STACKTOP должна располагается после метки I_END и перед меткой
959
;   MEM. STACKTOP может находится и перед I_END, но это не правильно.
960
; Имена меток могут быть с любыми названиями, главное соблюдать
961
;   правильный порядок их расположения.