Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
31 halyavin 1
;
2
;   Пример программы для MenuetOS
3
;   озвучивает код нажатой клавиши ;)
4
;
5
;   Компилировать FASM'ом
6
;
7
;   См. также:
8
;     template.asm  -  пример простейшей программы (новый!)
9
;     rb.asm        -  контекстное меню рабочего стола
10
;     example2.asm  -  пример меню и дополнительных окон
11
;     example3.asm  -  пример меню, реализованного по-другому
12
;---------------------------------------------------------------------
13
 
14
  use32              ; включить 32-битный режим ассемблера
15
  org    0x0         ; адресация с нуля
16
 
17
  db     'MENUET01'  ; 8-байтный идентификатор MenuetOS
18
  dd     0x01        ; версия заголовка (всегда 1)
19
  dd     START       ; адрес первой команды
20
  dd     I_END       ; размер программы
21
  dd     0x1000      ; количество памяти
22
  dd     0x1000      ; адрес вершины стэка
23
  dd     0x0         ; адрес буфера для параметров (не используется)
24
  dd     0x0         ; зарезервировано
25
 
143 diamond 26
include 'MACROS.INC' ; макросы облегчают жизнь ассемблерщиков!
31 halyavin 27
 
28
;---------------------------------------------------------------------
29
;---  НАЧАЛО ПРОГРАММЫ  ----------------------------------------------
30
;---------------------------------------------------------------------
31
 
32
START:
33
;       mcall 5,10
143 diamond 34
        mov     ecx, 1
35
        mov     edx, drvinfo
36
        push    @f
37
        jmp     call_driver
38
@@:
31 halyavin 39
;       jmp run_launcher
40
 
143 diamond 41
        mov     ecx, 2
42
        push    @f
43
call_driver:
44
        mcall 21,13
45
        ret
46
@@:
47
;       cmp eax,-1
48
        inc     eax
31 halyavin 49
       je   run_launcher
50
;       cmp  ecx,280
51
;       je  change_vrr
52
;       cmp  ecx,277
53
;       je  change_vrr
54
;       cmp  ecx,6
55
;       je  change_vrr
56
;       cmp  ecx,7
57
;       je  change_vrr
58
;       jmp  run_launcher
59
change_vrr:
60
;       mov ax,cx
61
;       dec cx
62
;       shl cx,1
63
;       xor edx,edx
64
;       mov dx,[vidmode+ecx]
65
;       mov ebx,ecx
66
;       shl ebx,2
67
;       add ebx,ecx   ; ebx=ebx*5
68
;       shr ax,8
69
;       dec ax
70
;       shl ax,1
71
;       add ebx,eax
72
;       ror edx,16
73
;       mov dx,[_m1+ebx]
74
;       rol edx,16
75
        ;mov eax,ecx
143 diamond 76
        mov     eax, 10
77
        cmp cx,277+3
78
        je  yes_277
79
        cmp cx,274+3
80
        jne yes_280
31 halyavin 81
     yes_274:
82
        add al,10
83
     yes_277:
84
        add al,10
85
     yes_280:
143 diamond 86
        mov     edx, [_m1+eax-2]
87
        lea     dx, [ecx-3]
88
        push    run_launcher
89
        mov     ecx, 3
90
        jmp     call_driver
31 halyavin 91
run_launcher:
143 diamond 92
       mcall 70,launcher
31 halyavin 93
       mcall -1
143 diamond 94
launcher:
95
        dd      7
96
        dd      0
97
        dd      0
98
        dd      0
99
        dd      0
100
        db      '/RD/1/LAUNCHER'
101
I_END:                             ; метка конца программы
102
        db      ?       ; system loader will zero all memory after program end
103
                        ; this byte will be terminating zero for launcher string
31 halyavin 104
drvinfo:   ; 512 bytes driver info area
105
; +0   - Full driver name
106
; +32  - Driver version
107
; +64  - Word List of support video modes (max 32 positions)
108
; +128 - 5 words list of support vertical rate to each present mode
109
      org $+32
110
drvver:
111
      org $+32
112
vidmode:
113
      org $+64
114
_m1:
115
      org drvinfo+200h