Subversion Repositories Kolibri OS

Rev

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  nor the
11
;       * Neither the name of the  nor 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  ''AS IS'' AND ANY
15
; THIS SOFTWARE IS PROVIDED BY Alexey Teplov aka  ''AS IS'' AND ANY
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  BE LIABLE FOR ANY
18
; DISCLAIMED. IN NO EVENT SHALL  BE LIABLE FOR ANY
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
}