Rev 3539 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3539 | Rev 3544 | ||
---|---|---|---|
1 | ; Copyright (c) 2009, |
1 | ; Copyright (c) 2009, |
2 | ; All rights reserved. |
2 | ; All rights reserved. |
3 | ; |
3 | ; |
4 | ; Redistribution and use in source and binary forms, with or without |
4 | ; Redistribution and use in source and binary forms, with or without |
5 | ; modification, are permitted provided that the following conditions are met: |
5 | ; modification, are permitted provided that the following conditions are met: |
6 | ; * Redistributions of source code must retain the above copyright |
6 | ; * Redistributions of source code must retain the above copyright |
7 | ; notice, this list of conditions and the following disclaimer. |
7 | ; notice, this list of conditions and the following disclaimer. |
8 | ; * Redistributions in binary form must reproduce the above copyright |
8 | ; * Redistributions in binary form must reproduce the above copyright |
9 | ; notice, this list of conditions and the following disclaimer in the |
9 | ; notice, this list of conditions and the following disclaimer in the |
10 | ; documentation and/or other materials provided with the distribution. |
10 | ; documentation and/or other materials provided with the distribution. |
11 | ; * Neither the name of the |
11 | ; * Neither the name of the |
12 | ; names of its contributors may be used to endorse or promote products |
12 | ; names of its contributors may be used to endorse or promote products |
13 | ; derived from this software without specific prior written permission. |
13 | ; derived from this software without specific prior written permission. |
14 | ; |
14 | ; |
15 | ; THIS SOFTWARE IS PROVIDED BY Alexey Teplov aka |
15 | ; THIS SOFTWARE IS PROVIDED BY Alexey Teplov aka |
16 | ; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
16 | ; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
17 | ; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
17 | ; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
18 | ; DISCLAIMED. IN NO EVENT SHALL |
18 | ; DISCLAIMED. IN NO EVENT SHALL |
19 | ; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
19 | ; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
20 | ; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
20 | ; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
21 | ; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
21 | ; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
22 | ; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
22 | ; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
23 | ; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
23 | ; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
24 | ; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
24 | ; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
25 | ;***************************************************************************** |
25 | ;***************************************************************************** |
26 | 26 | ||
27 | ;тут распологается модуль с помощью которого будут парситься все остальные секции |
27 | ;тут распологается модуль с помощью которого будут парситься все остальные секции |
28 | color_sym_black equ 0 |
28 | color_sym_black equ 0 |
29 | color_sym_blue equ 1 |
29 | color_sym_blue equ 1 |
30 | color_sym_green equ 2 |
30 | color_sym_green equ 2 |
31 | color_sym_turquoise equ 3 |
31 | color_sym_turquoise equ 3 |
32 | color_sym_red equ 4 |
32 | color_sym_red equ 4 |
33 | 33 | ||
34 | color_sym_lightgray equ 7 |
34 | color_sym_lightgray equ 7 |
35 | 35 | ||
36 | color_sym_lightblue equ 9 |
36 | color_sym_lightblue equ 9 |
37 | color_sym_lettuce equ 10 |
37 | color_sym_lettuce equ 10 |
38 | color_sym_pink equ 12 |
38 | color_sym_pink equ 12 |
39 | color_sym_yellow equ 14 |
39 | color_sym_yellow equ 14 |
40 | 40 | ||
41 | macro use_any_sec |
41 | macro use_any_sec |
42 | { |
42 | { |
43 | ;узнаем работу предыдущего шага т.е. чему = timeout, если он 0, то визуальная часть не будет отображена на дисплее с выбором загрузочных секций. |
43 | ;узнаем работу предыдущего шага т.е. чему = timeout, если он 0, то визуальная часть не будет отображена на дисплее с выбором загрузочных секций. |
44 | ;иначе мы ее должны отобразить и ждать заявленое время для выбора и конигурирования пукнктов секции от пользователя. |
44 | ;иначе мы ее должны отобразить и ждать заявленое время для выбора и конигурирования пукнктов секции от пользователя. |
45 | 45 | ||
46 | if DEBUG |
46 | if DEBUG |
47 | pusha |
47 | pusha |
48 | mov ax, word [value_timeout];идет проверка на наличее значения timeout, для более быстрой работы, этот параметр должен быть уже обработан,т.е. в этом случае при его =0 будет сформирован указатель только на дефолтную секцию, иначе информация будет собрана по всем секциям и составлены указатели в блоке памяти |
48 | mov ax, word [value_timeout];идет проверка на наличее значения timeout, для более быстрой работы, этот параметр должен быть уже обработан,т.е. в этом случае при его =0 будет сформирован указатель только на дефолтную секцию, иначе информация будет собрана по всем секциям и составлены указатели в блоке памяти |
49 | ; mov ax,cx |
49 | ; mov ax,cx |
50 | mov cx, 0x0a |
50 | mov cx, 0x0a |
51 | mov di, show_db1 |
51 | mov di, show_db1 |
52 | mov dword[ds:di], ' ' |
52 | mov dword[ds:di], ' ' |
53 | mov word [ds:di+4], ' ' |
53 | mov word [ds:di+4], ' ' |
54 | call decode |
54 | call decode |
55 | ;Show size |
55 | ;Show size |
56 | mov si, show_db1 |
56 | mov si, show_db1 |
57 | call printplain |
57 | call printplain |
58 | ; |
58 | ; |
59 | popa |
59 | popa |
60 | end if |
60 | end if |
61 | 61 | ||
62 | test ax, ax |
62 | test ax, ax |
63 | jz .parse_run_only |
63 | jz .parse_run_only |
64 | 64 | ||
65 | ;отобразим полный список всех найденых секций. |
65 | ;отобразим полный список всех найденых секций. |
66 | if DEBUG |
66 | if DEBUG |
67 | pusha |
67 | pusha |
68 | mov si, show_all_sect |
68 | mov si, show_all_sect |
69 | call printplain |
69 | call printplain |
70 | popa |
70 | popa |
71 | end if |
71 | end if |
72 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
72 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
73 | mov al, 0xf6 ; Сброс клавиатуры, разрешить сканирование |
73 | mov al, 0xf6 ; Сброс клавиатуры, разрешить сканирование |
74 | out 0x60, al |
74 | out 0x60, al |
75 | xor cx, cx |
75 | xor cx, cx |
76 | .wait_loop: ; variant 2 |
76 | .wait_loop: ; variant 2 |
77 | ; reading state of port of 8042 controller |
77 | ; reading state of port of 8042 controller |
78 | in al, 64h |
78 | in al, 64h |
79 | and al, 00000010b ; ready flag |
79 | and al, 00000010b ; ready flag |
80 | ; wait until 8042 controller is ready |
80 | ; wait until 8042 controller is ready |
81 | loopnz .wait_loop |
81 | loopnz .wait_loop |
82 | 82 | ||
83 | 83 | ||
84 | ; set keyboard typematic rate & delay |
84 | ; set keyboard typematic rate & delay |
85 | mov al, 0xf3 |
85 | mov al, 0xf3 |
86 | out 0x60, al |
86 | out 0x60, al |
87 | xor cx, cx |
87 | xor cx, cx |
88 | @@: |
88 | @@: |
89 | in al, 64h |
89 | in al, 64h |
90 | test al, 2 |
90 | test al, 2 |
91 | loopnz @b |
91 | loopnz @b |
92 | mov al, 0 |
92 | mov al, 0 |
93 | out 0x60, al |
93 | out 0x60, al |
94 | xor cx, cx |
94 | xor cx, cx |
95 | @@: |
95 | @@: |
96 | in al, 64h |
96 | in al, 64h |
97 | test al, 2 |
97 | test al, 2 |
98 | loopnz @b |
98 | loopnz @b |
99 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
99 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
100 | ; get start time |
100 | ; get start time |
101 | call gettime |
101 | call gettime |
102 | mov dword [start_timer], eax |
102 | mov dword [start_timer], eax |
103 | mov word [timer_], newtimer |
103 | mov word [timer_], newtimer |
104 | mov word [timer_+2], cs |
104 | mov word [timer_+2], cs |
105 | ;установить свое прерывание на таймер т.е. код будет перрываться ~18 раз в сек и переходить на обработчик |
105 | ;установить свое прерывание на таймер т.е. код будет перрываться ~18 раз в сек и переходить на обработчик |
106 | cli |
106 | cli |
107 | push 0 |
107 | push 0 |
108 | pop es |
108 | pop es |
109 | push dword [es:8*4] |
109 | push dword [es:8*4] |
110 | pop dword [old_timer] |
110 | pop dword [old_timer] |
111 | push dword [timer_] |
111 | push dword [timer_] |
112 | pop dword [es:8*4] |
112 | pop dword [es:8*4] |
113 | sti |
113 | sti |
114 | 114 | ||
115 | ;процедура формирования буфера для скролинга секций |
115 | ;процедура формирования буфера для скролинга секций |
116 | ;if DEBUG |
116 | ;if DEBUG |
117 | ; pusha |
117 | ; pusha |
118 | ; mov ax,point_default |
118 | ; mov ax,point_default |
119 | ; mov ax,cx |
119 | ; mov ax,cx |
120 | ; mov cx,0x0a |
120 | ; mov cx,0x0a |
121 | ; mov di,show_db1 |
121 | ; mov di,show_db1 |
122 | ; mov dword[ds:di],' ' |
122 | ; mov dword[ds:di],' ' |
123 | ; mov word [ds:di+4],' ' |
123 | ; mov word [ds:di+4],' ' |
124 | ; call decode |
124 | ; call decode |
125 | ;Show size |
125 | ;Show size |
126 | ; mov si,show_db1 |
126 | ; mov si,show_db1 |
127 | ; call printplain |
127 | ; call printplain |
128 | ; |
128 | ; |
129 | ; xor ax,ax |
129 | ; xor ax,ax |
130 | ; int 0x16 |
130 | ; int 0x16 |
131 | ; popa |
131 | ; popa |
132 | ;end if |
132 | ;end if |
133 | ;;;;;;;;;;;;;размер предыдущей сеции установим =0 |
133 | ;;;;;;;;;;;;;размер предыдущей сеции установим =0 |
134 | mov save_descript_size, 18 |
134 | mov save_descript_size, 18 |
135 | ;отобразить black screen |
135 | ;отобразить black screen |
136 | show_bl_sc ;es=0xb800 |
136 | show_bl_sc ;es=0xb800 |
137 | .show_all_scr: |
137 | .show_all_scr: |
138 | get_frame_buffer ;es=0x2000 |
138 | get_frame_buffer ;es=0x2000 |
139 | ;отображение секций |
139 | ;отображение секций |
140 | call show_bl_sc_sect ;es=0xb800 |
140 | call show_bl_sc_sect ;es=0xb800 |
141 | ;отобразить активный курсор |
141 | ;отобразить активный курсор |
142 | .show_active_cursor: |
142 | .show_active_cursor: |
143 | show_act_cursor |
143 | show_act_cursor |
144 | show_descript ;макрос по отображению описания секции |
144 | show_descript ;макрос по отображению описания секции |
145 | 145 | ||
146 | ;отобразить Press any key .... |
146 | ;отобразить Press any key .... |
147 | mov eax, dword [old_timer] |
147 | mov eax, dword [old_timer] |
148 | cmp eax, dword [timer_] |
148 | cmp eax, dword [timer_] |
149 | jz .interrupt_16 |
149 | jz .interrupt_16 |
150 | 150 | ||
151 | show_timer_message |
151 | show_timer_message |
152 | mov word [start_stack], sp |
152 | mov word [start_stack], sp |
153 | .interrupt_16: |
153 | .interrupt_16: |
154 | xor ax, ax ;получим информацию о том что нажато |
154 | xor ax, ax ;получим информацию о том что нажато |
155 | int 0x16 |
155 | int 0x16 |
156 | ;check on change |
156 | ;check on change |
157 | mov ebx, dword [old_timer] |
157 | mov ebx, dword [old_timer] |
158 | cmp ebx, dword [timer_] |
158 | cmp ebx, dword [timer_] |
159 | jz @f |
159 | jz @f |
160 | ;restore timer interrupt |
160 | ;restore timer interrupt |
161 | cli |
161 | cli |
162 | push 0 |
162 | push 0 |
163 | pop es |
163 | pop es |
164 | ; mov eax,dword [old_timer] ; восстановим прежднее прерывание |
164 | ; mov eax,dword [old_timer] ; восстановим прежднее прерывание |
165 | mov [es:8*4], ebx |
165 | mov [es:8*4], ebx |
166 | mov dword [timer_], ebx |
166 | mov dword [timer_], ebx |
167 | sti |
167 | sti |
168 | 168 | ||
169 | push ax |
169 | push ax |
170 | clear_timer_msg |
170 | clear_timer_msg |
171 | pop ax |
171 | pop ax |
172 | @@: |
172 | @@: |
173 | call clean_active_cursor ;clean old cursor ;es=0xb800 |
173 | call clean_active_cursor ;clean old cursor ;es=0xb800 |
174 | 174 | ||
175 | cmp ah, 0x48 ;реакция системы на события |
175 | cmp ah, 0x48 ;реакция системы на события |
176 | jz .up |
176 | jz .up |
177 | cmp ah, 0x50 |
177 | cmp ah, 0x50 |
178 | jz .down |
178 | jz .down |
179 | cmp ah, 0x49 |
179 | cmp ah, 0x49 |
180 | jz .pgup |
180 | jz .pgup |
181 | cmp ah, 0x51 |
181 | cmp ah, 0x51 |
182 | jz .pgdown |
182 | jz .pgdown |
183 | cmp ah, 0x47 |
183 | cmp ah, 0x47 |
184 | jz .home |
184 | jz .home |
185 | cmp ah, 0x4f |
185 | cmp ah, 0x4f |
186 | jz .end |
186 | jz .end |
187 | 187 | ||
188 | cmp al, 0xD |
188 | cmp al, 0xD |
189 | jnz .show_active_cursor |
189 | jnz .show_active_cursor |
190 | 190 | ||
191 | jmp .end_show_all ;парсинг секции которая указана в point_default |
191 | jmp .end_show_all ;парсинг секции которая указана в point_default |
192 | .up: |
192 | .up: |
193 | mov si, point_to_point_def ;значение указателя |
193 | mov si, point_to_point_def ;значение указателя |
194 | add si, 2 |
194 | add si, 2 |
195 | lea ax, point_to_hframe |
195 | lea ax, point_to_hframe |
196 | 196 | ||
197 | cmp si, ax |
197 | cmp si, ax |
198 | ja @f |
198 | ja @f |
199 | 199 | ||
200 | mov point_to_point_def, si |
200 | mov point_to_point_def, si |
201 | mov ax, [si] |
201 | mov ax, [si] |
202 | mov point_default, ax |
202 | mov point_default, ax |
203 | jmp .show_active_cursor |
203 | jmp .show_active_cursor |
204 | @@: |
204 | @@: |
205 | call find_before_sect |
205 | call find_before_sect |
206 | jmp .show_all_scr |
206 | jmp .show_all_scr |
207 | 207 | ||
208 | 208 | ||
209 | 209 | ||
210 | .down: |
210 | .down: |
211 | mov si, point_to_point_def ;значение указателя |
211 | mov si, point_to_point_def ;значение указателя |
212 | mov ax, point_to_eframe ;указатель на последний элемент |
212 | mov ax, point_to_eframe ;указатель на последний элемент |
213 | sub si, 2 |
213 | sub si, 2 |
214 | cmp si, ax |
214 | cmp si, ax |
215 | jb @f |
215 | jb @f |
216 | 216 | ||
217 | mov point_to_point_def, si |
217 | mov point_to_point_def, si |
218 | mov ax, [si] |
218 | mov ax, [si] |
219 | mov point_default, ax |
219 | mov point_default, ax |
220 | jmp .show_active_cursor |
220 | jmp .show_active_cursor |
221 | 221 | ||
222 | @@: |
222 | @@: |
223 | call find_next_sect |
223 | call find_next_sect |
224 | jmp .show_all_scr |
224 | jmp .show_all_scr |
225 | 225 | ||
226 | .pgup: |
226 | .pgup: |
227 | mov cx, size_show_section |
227 | mov cx, size_show_section |
228 | @@: |
228 | @@: |
229 | push cx |
229 | push cx |
230 | call find_before_sect |
230 | call find_before_sect |
231 | pop cx |
231 | pop cx |
232 | loop @b |
232 | loop @b |
233 | jmp .show_all_scr |
233 | jmp .show_all_scr |
234 | 234 | ||
235 | 235 | ||
236 | .pgdown: |
236 | .pgdown: |
237 | mov cx, size_show_section |
237 | mov cx, size_show_section |
238 | @@: |
238 | @@: |
239 | push cx |
239 | push cx |
240 | call find_next_sect |
240 | call find_next_sect |
241 | pop cx |
241 | pop cx |
242 | loop @b |
242 | loop @b |
243 | jmp .show_all_scr |
243 | jmp .show_all_scr |
244 | 244 | ||
245 | .home: |
245 | .home: |
246 | xor di, di |
246 | xor di, di |
247 | call find_next_sect.h |
247 | call find_next_sect.h |
248 | jmp .show_all_scr |
248 | jmp .show_all_scr |
249 | 249 | ||
250 | .end: |
250 | .end: |
251 | mov di, save_cx |
251 | mov di, save_cx |
252 | call find_before_sect.e |
252 | call find_before_sect.e |
253 | jmp .show_all_scr |
253 | jmp .show_all_scr |
254 | 254 | ||
255 | 255 | ||
256 | 256 | ||
257 | 257 | ||
258 | ; тут мы будем парсить только дефолтную секцию и выполнять ее ничего не предлагая пользователю из диалогов. |
258 | ; тут мы будем парсить только дефолтную секцию и выполнять ее ничего не предлагая пользователю из диалогов. |
259 | .parse_run_only: |
259 | .parse_run_only: |
260 | if DEBUG |
260 | if DEBUG |
261 | pusha |
261 | pusha |
262 | mov si, no_show_only_w |
262 | mov si, no_show_only_w |
263 | call printplain |
263 | call printplain |
264 | popa |
264 | popa |
265 | end if |
265 | end if |
266 | 266 | ||
267 | 267 | ||
268 | .end_show_all: |
268 | .end_show_all: |
269 | } |
269 | } |
270 | 270 | ||
271 | 271 | ||
272 | 272 | ||
273 | 273 | ||
274 | 274 | ||
275 | 275 | ||
276 | 276 | ||
277 | 277 | ||
278 | 278 | ||
279 | 279 | ||
280 | 280 | ||
281 | 281 | ||
282 | 282 | ||
283 | 283 | ||
284 | 284 | ||
285 | ;show black screen SL |
285 | ;show black screen SL |
286 | macro show_bl_sc |
286 | macro show_bl_sc |
287 | { |
287 | { |
288 | ;;;;;;;;;;;;;;; |
288 | ;;;;;;;;;;;;;;; |
289 | ;очистим экран и выведем меню |
289 | ;очистим экран и выведем меню |
290 | ; draw frames |
290 | ; draw frames |
291 | xor ax, ax |
291 | xor ax, ax |
292 | if DEBUG |
292 | if DEBUG |
293 | mov ax, 0x0720 |
293 | mov ax, 0x0720 |
294 | end if |
294 | end if |
295 | push 0xb800 |
295 | push 0xb800 |
296 | pop es |
296 | pop es |
297 | xor di, di |
297 | xor di, di |
298 | ; draw top |
298 | ; draw top |
299 | mov cx, 25 * 80 |
299 | mov cx, 25 * 80 |
300 | rep stosw |
300 | rep stosw |
301 | ;;;;;;;;;;;;;;;;;;;;;;; show 'Secondary Loader v0.xxx' |
301 | ;;;;;;;;;;;;;;;;;;;;;;; show 'Secondary Loader v0.xxx' |
302 | mov di, 164 |
302 | mov di, 164 |
303 | mov si, version |
303 | mov si, version |
304 | mov cx, version_end-version |
304 | mov cx, version_end-version |
305 | mov ah, color_sym_yellow |
305 | mov ah, color_sym_yellow |
306 | @@: |
306 | @@: |
307 | lodsb |
307 | lodsb |
308 | stosw |
308 | stosw |
309 | loop @b |
309 | loop @b |
310 | ;;;;;;;;;;;;;;;;;;;;;;; show firm )) |
310 | ;;;;;;;;;;;;;;;;;;;;;;; show firm )) |
311 | mov di, (2*160-(2*(soft_mes_end-soft_mes+4))) ;286 |
311 | mov di, (2*160-(2*(soft_mes_end-soft_mes+4))) ;286 |
312 | mov ah, color_sym_pink;color_sym_red |
312 | mov ah, color_sym_pink;color_sym_red |
313 | mov al, 'K' |
313 | mov al, 'K' |
314 | stosw |
314 | stosw |
315 | mov al, ' ' |
315 | mov al, ' ' |
316 | stosw |
316 | stosw |
317 | mov ah, color_sym_lightgray;color_sym_lightblue;color_sym_pink |
317 | mov ah, color_sym_lightgray;color_sym_lightblue;color_sym_pink |
318 | mov si, soft_mes |
318 | mov si, soft_mes |
319 | mov cx, soft_mes_end- soft_mes |
319 | mov cx, soft_mes_end- soft_mes |
320 | @@: |
320 | @@: |
321 | lodsb |
321 | lodsb |
322 | stosw |
322 | stosw |
323 | loop @b |
323 | loop @b |
324 | ;;;;;;;;;;;;;;;;;;;;;;; show '__________________________' |
324 | ;;;;;;;;;;;;;;;;;;;;;;; show '__________________________' |
325 | mov di, 480 |
325 | mov di, 480 |
326 | mov ah, color_sym_yellow |
326 | mov ah, color_sym_yellow |
327 | mov al, 'Д' |
327 | mov al, 0xC4 ; '─' |
328 | mov cx, 61 |
328 | mov cx, 61 |
329 | rep stosw |
329 | rep stosw |
330 | ;;;;;;;;;;;;;;;;;;;;;;; show 'Select section' |
330 | ;;;;;;;;;;;;;;;;;;;;;;; show 'Select section' |
331 | mov di, 804 |
331 | mov di, 804 |
332 | mov si, select_section |
332 | mov si, select_section |
333 | mov cx, select_section_end - select_section |
333 | mov cx, select_section_end - select_section |
334 | mov ah, color_sym_lightgray |
334 | mov ah, color_sym_lightgray |
335 | @@: |
335 | @@: |
336 | lodsb |
336 | lodsb |
337 | stosw |
337 | stosw |
338 | loop @b |
338 | loop @b |
339 | ;;;;;;;;;;;;;;;;;;;;;;; show 'Section description' |
339 | ;;;;;;;;;;;;;;;;;;;;;;; show 'Section description' |
340 | mov di, 880 |
340 | mov di, 880 |
341 | mov si, section_description |
341 | mov si, section_description |
342 | mov cx, section_description_end - section_description |
342 | mov cx, section_description_end - section_description |
343 | ; mov ah,color_sym_lightgray |
343 | ; mov ah,color_sym_lightgray |
344 | @@: |
344 | @@: |
345 | lodsb |
345 | lodsb |
346 | stosw |
346 | stosw |
347 | loop @b |
347 | loop @b |
348 | 348 | ||
349 | } |
349 | } |
350 | 350 | ||
351 | macro show_timer_message |
351 | macro show_timer_message |
352 | { |
352 | { |
353 | ;;;;;;;;;;;;;;;;;;;;; show Press any key |
353 | ;;;;;;;;;;;;;;;;;;;;; show Press any key |
354 | ;;;;;;;;;;;;;;;;;;;;; show ramk |
354 | ;;;;;;;;;;;;;;;;;;;;; show ramk |
355 | 355 | ||
356 | xor ax, ax |
356 | xor ax, ax |
357 | mov di, 3360 |
357 | mov di, 3360 |
358 | mov cx, 80*4 |
358 | mov cx, 80*4 |
359 | rep stosw |
359 | rep stosw |
360 | 360 | ||
361 | mov di, 3362 |
361 | mov di, 3362 |
362 | mov ah, color_sym_pink |
362 | mov ah, color_sym_pink |
363 | mov al, 0xDA |
363 | mov al, 0xDA |
364 | stosw |
364 | stosw |
365 | mov al, 0xc4 |
365 | mov al, 0xc4 |
366 | mov cx, 76 |
366 | mov cx, 76 |
367 | rep stosw |
367 | rep stosw |
368 | mov al, 0xBF |
368 | mov al, 0xBF |
369 | stosw |
369 | stosw |
370 | add di, 4 |
370 | add di, 4 |
371 | mov al, 0xb3 |
371 | mov al, 0xb3 |
372 | stosw |
372 | stosw |
373 | add di, 152 |
373 | add di, 152 |
374 | stosw |
374 | stosw |
375 | add di, 4 |
375 | add di, 4 |
376 | stosw |
376 | stosw |
377 | add di, 152 |
377 | add di, 152 |
378 | stosw |
378 | stosw |
379 | add di, 4 |
379 | add di, 4 |
380 | mov al, 0xc0 |
380 | mov al, 0xc0 |
381 | stosw |
381 | stosw |
382 | mov al, 0xc4 |
382 | mov al, 0xc4 |
383 | mov cx, 76 |
383 | mov cx, 76 |
384 | rep stosw |
384 | rep stosw |
385 | mov al, 0xd9 |
385 | mov al, 0xd9 |
386 | stosw |
386 | stosw |
387 | ;;;;;;;;;;;;;;;;;;;;;;;;ramk is complete show |
387 | ;;;;;;;;;;;;;;;;;;;;;;;;ramk is complete show |
388 | ;show first message |
388 | ;show first message |
389 | mov si, start_msg |
389 | mov si, start_msg |
390 | mov cx, start_msg_e-start_msg |
390 | mov cx, start_msg_e-start_msg |
391 | mov di, 3526 |
391 | mov di, 3526 |
392 | @@: |
392 | @@: |
393 | lodsb |
393 | lodsb |
394 | stosw |
394 | stosw |
395 | loop @b |
395 | loop @b |
396 | ;;;;;;;;;;;;;;;;;;;; show press Enter to.... |
396 | ;;;;;;;;;;;;;;;;;;;; show press Enter to.... |
397 | add di, 44 |
397 | add di, 44 |
398 | mov si, time_msg |
398 | mov si, time_msg |
399 | mov cx, time_msg_e-time_msg |
399 | mov cx, time_msg_e-time_msg |
400 | @@: |
400 | @@: |
401 | lodsb |
401 | lodsb |
402 | stosw |
402 | stosw |
403 | loop @b |
403 | loop @b |
404 | } |
404 | } |
405 | 405 | ||
406 | 406 | ||
407 | 407 | ||
408 | 408 | ||
409 | 409 | ||
410 | 410 | ||
411 | 411 | ||
412 | 412 | ||
413 | macro get_frame_buffer |
413 | macro get_frame_buffer |
414 | { |
414 | { |
415 | mov cx, save_cx ;it's placed size of ini file |
415 | mov cx, save_cx ;it's placed size of ini file |
416 | les di, dword [file_data] |
416 | les di, dword [file_data] |
417 | 417 | ||
418 | mov si, di ;point frame |
418 | mov si, di ;point frame |
419 | mov bx, cx |
419 | mov bx, cx |
420 | mov dx, size_show_section |
420 | mov dx, size_show_section |
421 | ; mov point_to_hframe,di ; внесем значение, так подстраховка не более |
421 | ; mov point_to_hframe,di ; внесем значение, так подстраховка не более |
422 | 422 | ||
423 | mov al, byte [es:di] |
423 | mov al, byte [es:di] |
424 | push word .first_ret_bl_sc |
424 | push word .first_ret_bl_sc |
425 | cmp al, ' ' |
425 | cmp al, ' ' |
426 | jz .first_bl_sc |
426 | jz .first_bl_sc |
427 | jmp get_firs_sym.not_space |
427 | jmp get_firs_sym.not_space |
428 | .first_bl_sc: |
428 | .first_bl_sc: |
429 | jmp get_firs_sym.first_sp |
429 | jmp get_firs_sym.first_sp |
430 | 430 | ||
431 | .start_hbl: |
431 | .start_hbl: |
432 | call get_firs_sym ;get first symbol on new line |
432 | call get_firs_sym ;get first symbol on new line |
433 | test cx, cx |
433 | test cx, cx |
434 | jz error.correct_exit_bl ;critical error not found default point it's not possible because it's param chacking before |
434 | jz error.correct_exit_bl ;critical error not found default point it's not possible because it's param chacking before |
435 | cmp al, '[' |
435 | cmp al, '[' |
436 | jnz .start_hbl |
436 | jnz .start_hbl |
437 | 437 | ||
438 | mov si, di ;point frame |
438 | mov si, di ;point frame |
439 | mov bx, cx |
439 | mov bx, cx |
440 | mov dx, size_show_section |
440 | mov dx, size_show_section |
441 | jmp .analisist_al |
441 | jmp .analisist_al |
442 | 442 | ||
443 | 443 | ||
444 | .start_bl: |
444 | .start_bl: |
445 | call get_firs_sym ;get first symbol on new line |
445 | call get_firs_sym ;get first symbol on new line |
446 | .first_ret_bl_sc: ;первый возврат |
446 | .first_ret_bl_sc: ;первый возврат |
447 | test cx, cx |
447 | test cx, cx |
448 | jz error.correct_exit_bl ;critical error not found default point it's not possible because it's param chacking before |
448 | jz error.correct_exit_bl ;critical error not found default point it's not possible because it's param chacking before |
449 | .analisist_al: |
449 | .analisist_al: |
450 | cmp al, '[' |
450 | cmp al, '[' |
451 | jnz .start_bl |
451 | jnz .start_bl |
452 | ;просматриваем ini файл с начала в поисках секции указаной как default |
452 | ;просматриваем ini файл с начала в поисках секции указаной как default |
453 | ;поиск фрейма в котором содержиться значение default |
453 | ;поиск фрейма в котором содержиться значение default |
454 | .found_sect_bl: |
454 | .found_sect_bl: |
455 | cmp di, point_loader |
455 | cmp di, point_loader |
456 | jz .start_bl |
456 | jz .start_bl |
457 | cmp di, point_default |
457 | cmp di, point_default |
458 | jz .save_point_def |
458 | jz .save_point_def |
459 | 459 | ||
460 | dec dx |
460 | dec dx |
461 | jnz .start_bl |
461 | jnz .start_bl |
462 | 462 | ||
463 | jmp .start_hbl |
463 | jmp .start_hbl |
464 | 464 | ||
465 | 465 | ||
466 | .save_point_def: |
466 | .save_point_def: |
467 | ;итак далее мы должны заполнить frame буфер адресов секций, что бы потом по нему быстро перемещаться не вычисляя снова адреса |
467 | ;итак далее мы должны заполнить frame буфер адресов секций, что бы потом по нему быстро перемещаться не вычисляя снова адреса |
468 | mov di, si ;указатель на начало |
468 | mov di, si ;указатель на начало |
469 | mov cx, bx |
469 | mov cx, bx |
470 | lea si, point_to_hframe |
470 | lea si, point_to_hframe |
471 | mov dx, size_show_section+1 ;т.к. у нас структура содержит размер между первым и вторым указателем, то нам нужно на 1 адрес больше обсчитать секций. |
471 | mov dx, size_show_section+1 ;т.к. у нас структура содержит размер между первым и вторым указателем, то нам нужно на 1 адрес больше обсчитать секций. |
472 | ;переходим на обработку значения указателя |
472 | ;переходим на обработку значения указателя |
473 | mov al, byte [es:di] |
473 | mov al, byte [es:di] |
474 | push word .first_ret_mfb |
474 | push word .first_ret_mfb |
475 | cmp al, ' ' |
475 | cmp al, ' ' |
476 | jz .first_bl_mbf |
476 | jz .first_bl_mbf |
477 | jmp get_firs_sym.not_space |
477 | jmp get_firs_sym.not_space |
478 | .first_bl_mbf: |
478 | .first_bl_mbf: |
479 | jmp get_firs_sym.first_sp |
479 | jmp get_firs_sym.first_sp |
480 | 480 | ||
481 | .start_mfb: |
481 | .start_mfb: |
482 | call get_firs_sym ;get first symbol on new line |
482 | call get_firs_sym ;get first symbol on new line |
483 | .first_ret_mfb: ;первый возврат |
483 | .first_ret_mfb: ;первый возврат |
484 | jcxz .val_buff_comp ;.end_loader ;found or not found parametrs in section exit in section |
484 | jcxz .val_buff_comp ;.end_loader ;found or not found parametrs in section exit in section |
485 | cmp al, '[' |
485 | cmp al, '[' |
486 | jnz .start_mfb |
486 | jnz .start_mfb |
487 | 487 | ||
488 | .found_sect_mfb: |
488 | .found_sect_mfb: |
489 | cmp di, point_loader ;if we have section loader |
489 | cmp di, point_loader ;if we have section loader |
490 | jz .start_mfb |
490 | jz .start_mfb |
491 | 491 | ||
492 | mov [si], di |
492 | mov [si], di |
493 | 493 | ||
494 | sub si, 2 |
494 | sub si, 2 |
495 | dec dx |
495 | dec dx |
496 | jnz .start_mfb |
496 | jnz .start_mfb |
497 | ;bufer is full |
497 | ;bufer is full |
498 | jmp @f |
498 | jmp @f |
499 | .val_buff_comp: |
499 | .val_buff_comp: |
500 | push save_cx |
500 | push save_cx |
501 | pop word [si] |
501 | pop word [si] |
502 | sub si, 2 |
502 | sub si, 2 |
503 | @@: |
503 | @@: |
504 | 504 | ||
505 | add si, 4 |
505 | add si, 4 |
506 | mov point_to_eframe, si |
506 | mov point_to_eframe, si |
507 | 507 | ||
508 | } |
508 | } |
509 | 509 | ||
510 | macro show_act_cursor |
510 | macro show_act_cursor |
511 | { |
511 | { |
512 | ;отображение курсора по умолчанию |
512 | ;отображение курсора по умолчанию |
513 | lea si, point_to_hframe |
513 | lea si, point_to_hframe |
514 | mov di, 962-160 |
514 | mov di, 962-160 |
515 | mov ax, point_default |
515 | mov ax, point_default |
516 | mov cx, size_show_section |
516 | mov cx, size_show_section |
517 | .home_show_cur: |
517 | .home_show_cur: |
518 | mov bx, [si] |
518 | mov bx, [si] |
519 | add di, 160 |
519 | add di, 160 |
520 | cmp bx, ax |
520 | cmp bx, ax |
521 | jz .show_cursor_activ |
521 | jz .show_cursor_activ |
522 | sub si, 2 |
522 | sub si, 2 |
523 | loop .home_show_cur |
523 | loop .home_show_cur |
524 | 524 | ||
525 | .show_cursor_activ: |
525 | .show_cursor_activ: |
526 | ; push 0xb800 |
526 | ; push 0xb800 |
527 | ; pop es |
527 | ; pop es |
528 | mov point_to_point_def, si |
528 | mov point_to_point_def, si |
529 | mov ax, (color_sym_red*0x100+0x10) |
529 | mov ax, (color_sym_red*0x100+0x10) |
530 | stosw |
530 | stosw |
531 | add di, 68 |
531 | add di, 68 |
532 | inc ax |
532 | inc ax |
533 | stosw |
533 | stosw |
534 | } |
534 | } |
535 | 535 | ||
536 | macro clear_timer_msg |
536 | macro clear_timer_msg |
537 | { |
537 | { |
538 | push 0xb800 |
538 | push 0xb800 |
539 | pop es |
539 | pop es |
540 | xor ax, ax |
540 | xor ax, ax |
541 | if DEBUG |
541 | if DEBUG |
542 | mov ax, 0x0720 |
542 | mov ax, 0x0720 |
543 | end if |
543 | end if |
544 | ;;;;;;;;;;;;;;;;;;;;; show Press any key |
544 | ;;;;;;;;;;;;;;;;;;;;; show Press any key |
545 | mov di, 3360 |
545 | mov di, 3360 |
546 | mov cx, 80*4 |
546 | mov cx, 80*4 |
547 | rep stosw |
547 | rep stosw |
548 | 548 | ||
549 | ;show sect |
549 | ;show sect |
550 | push ini_data_ |
550 | push ini_data_ |
551 | pop es |
551 | pop es |
552 | call show_bl_sc_sect ;es=0xb800 |
552 | call show_bl_sc_sect ;es=0xb800 |
553 | 553 | ||
554 | } |
554 | } |
555 | 555 | ||
556 | macro show_descript |
556 | macro show_descript |
557 | ;Этот макрос показывает краткое описание, если оно есть у секции в пункте |
557 | ;Этот макрос показывает краткое описание, если оно есть у секции в пункте |
558 | ;Section description |
558 | ;Section description |
559 | { |
559 | { |
560 | local .start_p_sh_d |
560 | local .start_p_sh_d |
561 | local .exit |
561 | local .exit |
562 | local .rest_value_loop_sh_d |
562 | local .rest_value_loop_sh_d |
563 | local .end_sh_desc_sec |
563 | local .end_sh_desc_sec |
564 | local .loop_message |
564 | local .loop_message |
565 | local .show_mess_prev_eq |
565 | local .show_mess_prev_eq |
566 | mov di, point_default |
566 | mov di, point_default |
567 | push ini_data_ |
567 | push ini_data_ |
568 | mov si, point_to_point_def |
568 | mov si, point_to_point_def |
569 | pop es |
569 | pop es |
570 | sub si, 2 |
570 | sub si, 2 |
571 | mov cx, [si] ;загрузим указатель наследующию секцию |
571 | mov cx, [si] ;загрузим указатель наследующию секцию |
572 | sub cx, di ;вот теперь имеем истиный размер |
572 | sub cx, di ;вот теперь имеем истиный размер |
573 | ;di - указатель на дефолтную секцию т.е. выбранную cx - размер области. для просмотра |
573 | ;di - указатель на дефолтную секцию т.е. выбранную cx - размер области. для просмотра |
574 | 574 | ||
575 | .start_p_sh_d: |
575 | .start_p_sh_d: |
576 | call get_firs_sym ;get first symbol on new line |
576 | call get_firs_sym ;get first symbol on new line |
577 | test cx, cx |
577 | test cx, cx |
578 | jz .exit ;нету? ну ладно - следующее значение тогда ) |
578 | jz .exit ;нету? ну ладно - следующее значение тогда ) |
579 | cmp al, 'd' |
579 | cmp al, 'd' |
580 | jnz .start_p_sh_d |
580 | jnz .start_p_sh_d |
581 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
581 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
582 | 582 | ||
583 | mov bx, cx |
583 | mov bx, cx |
584 | mov ax, di |
584 | mov ax, di |
585 | 585 | ||
586 | mov si, parse_descript |
586 | mov si, parse_descript |
587 | mov cx, parse_descript_e - parse_descript |
587 | mov cx, parse_descript_e - parse_descript |
588 | repe cmpsb |
588 | repe cmpsb |
589 | jnz .rest_value_loop_sh_d ;is not compare |
589 | jnz .rest_value_loop_sh_d ;is not compare |
590 | 590 | ||
591 | sub bx, parse_descript_e - parse_descript;correct cx |
591 | sub bx, parse_descript_e - parse_descript;correct cx |
592 | add bx, cx |
592 | add bx, cx |
593 | mov cx, bx |
593 | mov cx, bx |
594 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; разбор аля ' = ' |
594 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; разбор аля ' = ' |
595 | mov ax, 0x3d20 ;cut al=' ' ah='=' |
595 | mov ax, 0x3d20 ;cut al=' ' ah='=' |
596 | repe scasb |
596 | repe scasb |
597 | jcxz .rest_value_loop_sh_d ;not found param timeout |
597 | jcxz .rest_value_loop_sh_d ;not found param timeout |
598 | 598 | ||
599 | cmp ah, byte [es:di-1] ;find '=' |
599 | cmp ah, byte [es:di-1] ;find '=' |
600 | jnz .rest_value_loop_sh_d |
600 | jnz .rest_value_loop_sh_d |
601 | 601 | ||
602 | repe scasb ;cut ' ' |
602 | repe scasb ;cut ' ' |
603 | inc cx |
603 | inc cx |
604 | dec di |
604 | dec di |
605 | ;;;;;;;;;;;;;;;;;;;;di указывает на строчку, которую нам нужно выводить. |
605 | ;;;;;;;;;;;;;;;;;;;;di указывает на строчку, которую нам нужно выводить. |
606 | ;строчка будет выводиться блоками по 37 символов. |
606 | ;строчка будет выводиться блоками по 37 символов. |
607 | ;настроим куда будем выводить т.е. начало |
607 | ;настроим куда будем выводить т.е. начало |
608 | ;es:di - указывают на строчку из которой мы берем символ, ds:si куда будем выводить |
608 | ;es:di - указывают на строчку из которой мы берем символ, ds:si куда будем выводить |
609 | push di |
609 | push di |
610 | pop si |
610 | pop si |
611 | 611 | ||
612 | push es |
612 | push es |
613 | pop ds |
613 | pop ds |
614 | 614 | ||
615 | push 0xb800 |
615 | push 0xb800 |
616 | pop es |
616 | pop es |
617 | 617 | ||
618 | mov di, 1040 |
618 | mov di, 1040 |
619 | mov bx, 18 |
619 | mov bx, 18 |
620 | mov find_sec_di, di |
620 | mov find_sec_di, di |
621 | mov save_cx_d, bx |
621 | mov save_cx_d, bx |
622 | ;;;;;;;;;;;;;;;;;;;;;;;;;; |
622 | ;;;;;;;;;;;;;;;;;;;;;;;;;; |
623 | ;clean string |
623 | ;clean string |
624 | 624 | ||
625 | push di |
625 | push di |
626 | xor ax, ax |
626 | xor ax, ax |
627 | 627 | ||
628 | @@: |
628 | @@: |
629 | mov cx, 38 |
629 | mov cx, 38 |
630 | push di |
630 | push di |
631 | rep stosw |
631 | rep stosw |
632 | pop di |
632 | pop di |
633 | 633 | ||
634 | cmp save_descript_size, bx |
634 | cmp save_descript_size, bx |
635 | jz @f |
635 | jz @f |
636 | 636 | ||
637 | 637 | ||
638 | add di, 160 |
638 | add di, 160 |
639 | dec bx |
639 | dec bx |
640 | jnz @b |
640 | jnz @b |
641 | 641 | ||
642 | @@: |
642 | @@: |
643 | pop di |
643 | pop di |
644 | ;enter in mess |
644 | ;enter in mess |
645 | .show_mess_prev_eq: |
645 | .show_mess_prev_eq: |
646 | lodsb |
646 | lodsb |
647 | mov ah, color_sym_lettuce;color_sym_turquoise |
647 | mov ah, color_sym_lettuce;color_sym_turquoise |
648 | ; sub di,2 |
648 | ; sub di,2 |
649 | cmp al, '"' |
649 | cmp al, '"' |
650 | jz .loop_message |
650 | jz .loop_message |
651 | cmp al, "'" |
651 | cmp al, "'" |
652 | jnz .end_sh_desc_sec |
652 | jnz .end_sh_desc_sec |
653 | 653 | ||
654 | .loop_message: |
654 | .loop_message: |
655 | mov cx, 38 |
655 | mov cx, 38 |
656 | @@: |
656 | @@: |
657 | lodsb |
657 | lodsb |
658 | cmp al, '"' |
658 | cmp al, '"' |
659 | jz .end_sh_desc_sec |
659 | jz .end_sh_desc_sec |
660 | cmp al, "'" |
660 | cmp al, "'" |
661 | jz .end_sh_desc_sec |
661 | jz .end_sh_desc_sec |
662 | stosw |
662 | stosw |
663 | loop @b |
663 | loop @b |
664 | 664 | ||
665 | add find_sec_di, 160 |
665 | add find_sec_di, 160 |
666 | mov di, find_sec_di |
666 | mov di, find_sec_di |
667 | dec save_cx_d |
667 | dec save_cx_d |
668 | cmp save_cx_d, 0 |
668 | cmp save_cx_d, 0 |
669 | jnz .loop_message |
669 | jnz .loop_message |
670 | 670 | ||
671 | .end_sh_desc_sec: |
671 | .end_sh_desc_sec: |
672 | push save_cx_d |
672 | push save_cx_d |
673 | pop save_descript_size |
673 | pop save_descript_size |
674 | 674 | ||
675 | push cs |
675 | push cs |
676 | pop ds |
676 | pop ds |
677 | jmp .exit |
677 | jmp .exit |
678 | 678 | ||
679 | 679 | ||
680 | .rest_value_loop_sh_d: |
680 | .rest_value_loop_sh_d: |
681 | mov di, ax |
681 | mov di, ax |
682 | mov cx, bx |
682 | mov cx, bx |
683 | jmp .start_p_sh_d |
683 | jmp .start_p_sh_d |
684 | 684 | ||
685 | .exit: |
685 | .exit: |
686 | } |
686 | } |