Subversion Repositories Kolibri OS

Rev

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