Subversion Repositories Kolibri OS

Rev

Rev 7648 | Go to most recent revision | Details | 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
 
819
draw_window:
820
 
821
    mcall 12, 1       ; функция 12: сообщить ОС о начале отрисовки
822
 
823
    mcall 48, 3, sc,sizeof.system_colors
824
 
825
    ; далее: сначала длинный вариант (закомментированный)
826
    ; затем короткий аналог с использованием макросов
827
 
828
;   mov  eax,0                   ; функция 0: определить окно
829
;   mov  ebx,200*65536+300       ; [x старт] *65536 + [x размер]
830
;   mov  ecx,200*65536+150       ; [y старт] *65536 + [y размер]
831
;   mov  edx, [sc.work]          ; цвет фона
832
;   or   edx, 0x33000000         ; и тип окна 3
833
;   mov  edi,header              ; ЗАГОЛОВОК ОКНА
834
;   int  0x40
835
 
836
    mov   edx, [sc.work]	 ; цвет фона
837
    or	  edx, 0x33000000	 ; и тип окна 3
838
    mcall 0, <0,760>, <200,250>, , ,title
839
 
840
    mcall 8,  <0,50>, <0,100>, 0x21, 0xff7a74
841
    mcall 8,  <50,50>, <0,100>, 0x23, 0x907040
842
    mcall 8,  <100,50>, <0,100>, 0x25, 0xa08050
843
    mcall 8,  <150,50>, <0,100>, 0x26, 0xb09060
844
    mcall 8,  <200,50>, <00,100>, 0x28, 0xc0a070
845
    mcall 8,  <250,50>, <00,100>, 0x2a, 0xd0b080
846
    mcall 8,  <300,50>, <0,100>, 0x2c, 0xe0c090
847
    mcall 8,  <350,50>, <0,100>, 0x31, 0xffa97c
848
    mcall 8,  <400,50>, <0,100>, 0x33, 0xaf8d8d
849
    mcall 8,  <450,50>, <0,100>, 0x35, 0xbf9d9d
850
    mcall 8,  <500,50>, <0,100>, 0x36, 0xcfadad
851
    mcall 8,  <550,50>, <00,100>, 0x38, 0xdfbdbd
852
    mcall 8,  <600,50>, <00,100>, 0x3a, 0xefcdcd
853
    mcall 8,  <650,50>, <0,100>, 0x3c, 0xffdddd
854
    mcall 8,  <700,50>, <0,100>, 0x41, 0xffe558
855
 
856
    mcall 8,  <35,30>, <0,50>, 0x22, 0x221100
857
    mcall 8,  <85,30>, <0,50>, 0x24, 0x221100
858
    mcall 8,  <185,30>, <0,50>, 0x27, 0x221100
859
    mcall 8,  <235,30>, <0,50>, 0x29, 0x221100
860
    mcall 8,  <285,30>, <0,50>, 0x2b, 0x221100
861
    mcall 8,  <385,30>, <0,50>, 0x32, 0x221100
862
    mcall 8,  <435,30>, <0,50>, 0x34, 0x221100
863
    mcall 8,  <535,30>, <0,50>, 0x37, 0x221100
864
    mcall 8,  <585,30>, <0,50>, 0x39, 0x221100
865
    mcall 8,  <635,30>, <0,50>, 0x3b, 0x221100
866
 
867
    mcall 8,  <0,50>, <100,100>, 0xa1, 0x702050
868
    mcall 8,  <50,50>, <100,100>, 0x03, 0x683638
869
    mcall 8,  <100,50>, <100,100>, 0x05, 0x784648
870
    mcall 8,  <150,50>, <100,100>, 0x06, 0x885658
871
    mcall 8,  <200,50>, <100,100>, 0x08, 0x986668
872
    mcall 8,  <250,50>, <100,100>, 0x0a, 0xa87678
873
    mcall 8,  <300,50>, <100,100>, 0x0c, 0xb88688
874
    mcall 8,  <350,50>, <100,100>, 0x11, 0x880040
875
    mcall 8,  <400,50>, <100,100>, 0x13, 0x90622b
876
    mcall 8,  <450,50>, <100,100>, 0x15, 0xa0723b
877
    mcall 8,  <500,50>, <100,100>, 0x16, 0xb0824b
878
    mcall 8,  <550,50>, <100,100>, 0x18, 0xc0925b
879
    mcall 8,  <600,50>, <100,100>, 0x1a, 0xd0a26b
880
    mcall 8,  <650,50>, <100,100>, 0x1c, 0xe0b27b
881
    mcall 8,  <700,50>, <100,100>, 0x21, 0xff7a74
882
 
883
    mcall 8,  <35,30>, <100,50>, 0x02, 0x221100
884
    mcall 8,  <85,30>, <100,50>, 0x04, 0x221100
885
    mcall 8,  <185,30>, <100,50>, 0x07, 0x221100
886
    mcall 8,  <235,30>, <100,50>, 0x09, 0x221100
887
    mcall 8,  <285,30>, <100,50>, 0x0b, 0x221100
888
    mcall 8,  <385,30>, <100,50>, 0x12, 0x221100
889
    mcall 8,  <435,30>, <100,50>, 0x14, 0x221100
890
    mcall 8,  <535,30>, <100,50>, 0x17, 0x221100
891
    mcall 8,  <585,30>, <100,50>, 0x19, 0x221100
892
    mcall 8,  <635,30>, <100,50>, 0x1b, 0x221100
893
 
894
 
895
    ; вывод текстовой строки
896
    mov   ecx, [sc.work_text]	 ; цвет фона
897
    or	  ecx, 0x90000000	 ; и тип строки
898
    mcall 4, <50, 205>, , message
899
    mcall 4, <10, 235>, , message1
900
    mcall 4, <10, 260>, , message2
901
    mcall 4, <10, 285>, , message3
902
    mcall 4, <10, 310>, , message4
903
    mcall 4, <15, 185>, , message5
904
    mcall 4, <65, 185>, , message6
905
    mcall 4, <115, 185>, , message7
906
    mcall 4, <165, 185>, , message8
907
    mcall 4, <210, 185>, , message9
908
    mcall 4, <265, 185>, , message10
909
    mcall 4, <315, 185>, , message11
910
    mcall 4, <365, 185>, , message5
911
 
912
    mcall 12, 2 		 ; функция 12.2, закончили рисовать
913
 
914
    ret 			 ; выходим из процедуры
915
 
916
 
917
;---------------------------------------------------------------------
918
;---  ДАННЫЕ ПРОГРАММЫ  ----------------------------------------------
919
;---------------------------------------------------------------------
920
 
921
 
922
; Второй байт в M (Music) изменяется нажатием клавиши
923
 
924
M:
925
  db  0x90, 0x30, 0
926
 
927
 
928
sc system_colors
929
 
930
message db 'Справка: щёлкните 2 раза на заголовке.',0
931
message1 db 'Нажмите любую клавишу в английской раскладке - ',0
932
message2  db 'должен звучать динамик компьютера.',0
933
message3  db 'Нота "До" - клавиши V,Tab,U,Enter, при включении',0
934
message4  db 'Caps Lock - клавиши V,Q,I.',0
935
message5  db 'ДО',0
936
message6  db 'РЕ',0
937
message7  db 'МИ',0
938
message8  db 'ФА',0
939
message9  db 'СОЛЬ',0
940
message10  db 'ЛЯ',0
941
message11  db 'СИ',0
942
title db 'Детское пианино',0
943
 
944
;---------------------------------------------------------------------
945
 
946
I_END:			; метка конца программы
947
  rb 4096		; память для стека
948
align 16
949
STACKTOP:		; метка вершины стека (при заполнении стек
950
			; растет в сторону уменьшения адресов, потому
951
			; память для него в коде программы встречается
952
			; раньше чем его вершина)
953
MEM:			; метка указывающая на конец программы плюс
954
			; размер используемой ею оперативной памяти
955
; Адрес метки MEM всегда должен быть больше чем адрес метки I_END.
956
; Метка STACKTOP должна располагается после метки I_END и перед меткой
957
;   MEM. STACKTOP может находится и перед I_END, но это не правильно.
958
; Имена меток могут быть с любыми названиями, главное соблюдать
959
;   правильный порядок их расположения.