Rev 143 | 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 |
||
248 | serge | 104 | ; \begin{Serge} |
105 | ; A you really believe it? |
||
106 | ; ┴ырцхэ, ъЄю тхЁєхЄ, Єхяыю хьє эр ётхЄх! |
||
107 | ; \end{Serge} |
||
31 | halyavin | 108 | drvinfo: ; 512 bytes driver info area |
109 | ; +0 - Full driver name |
||
110 | ; +32 - Driver version |
||
111 | ; +64 - Word List of support video modes (max 32 positions) |
||
112 | ; +128 - 5 words list of support vertical rate to each present mode |
||
113 | org $+32 |
||
114 | drvver: |
||
115 | org $+32 |
||
116 | vidmode: |
||
117 | org $+64 |
||
118 | _m1: |
||
119 | org drvinfo+200h |