24,31 → 24,31 |
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
;***************************************************************************** |
|
; Ìîäóëü ïàðñèíãà - ýòî ñòàíäàðòíûé êîìïîíåíò, âñòðàèâàåìûé âî âòîðè÷íûé çàãðóç÷èê. |
; Äàííûé ìîäóëü ïîçâîëÿåò ñòàíäàðòíî ïðîèçâåñòè ðàçáîð ini ôàéëà |
; (è ñ èñïîëüçîâàíèåì ïîëó÷åííûõ äàííûõ ÎÑ áóäåò çàãðóæàòüñÿ äàëüøå). |
;  íà÷àëå íàéäåì îòêðûâàþùèé "[" - ýòî áóäåò óêàçûâàòü íà íà÷àëî |
; ñåêöèè. Ïîääåðæèâàåòñÿ 1 ñåêöèÿ ýòî [loader], îñòàëüíûå ñåêöèè ìîãóò èìåòü |
; ëþáûå èìåíà, íî îíè äîëæíû áûòü çàêëþ÷åíû â â ñêîáêè [] |
; Модуль парсинга - это стандартный компонент, встраиваемый во вторичный загрузчик. |
; Данный модуль позволяет стандартно произвести разбор ini файла |
; (и с использованием полученных данных ОС будет загружаться дальше). |
; В начале найдем открывающий "[" - это будет указывать на начало |
; секции. Поддерживается 1 секция это [loader], остальные секции могут иметь |
; любые имена, но они должны быть заключены в в скобки [] |
macro use_parse |
{ |
;input cx=size of ini file |
parse_start: |
;es:di as 2000:0000 new segment |
;óñòàíîâèì óêàçàòåëü íà çàãðóæåííûé áëîê |
;установим указатель на загруженный блок |
enter 256, 0 ;set 16 byte for current task in stack |
;we are is not use bp because bp is pointer on array 16 byte |
mov word [save_bp_from_timer], bp ;save point to own data array |
mov save_cx, cx ;it's placed size of ini file |
les di, dword [file_data] |
;îáíóëèì âñå ïåðåìåííûå âûäåëåííûå èç ñòåêà |
;обнулим все переменные выделенные из стека |
;init flag |
xor ax, ax |
mov status_flag, ax |
;set data size |
mov info_real_mode_size, ini_data_ +0x1000 ;èçìåíèì çíà÷åíèå çàíÿòîñòè ïàìÿòè |
mov info_real_mode_size, ini_data_ +0x1000 ;изменим значение занятости памяти |
|
;ïîèñê íà÷àëà áëîêà. |
;поиск начала блока. |
;///////////check [loader] |
cld |
|
63,7 → 63,7 |
|
.start: |
call get_firs_sym ;get first symbol on new line |
.first_ret: ;ïåðâûé âîçâðàò |
.first_ret: ;первый возврат |
; jcxz .end_file ;.end_loader ;found or not found parametrs in section exit in section |
test cx, cx |
jz error.not_loader |
70,7 → 70,7 |
cmp al, '[' |
jz .parse_loader |
jmp .start |
;////// ïðîâåðêà íà íàëè÷åå ñåêöèè loader |
;////// проверка на наличее секции loader |
use_parse_loader |
;pause |
if DEBUG |
77,9 → 77,9 |
xor ax, ax |
int 16h |
end if |
;////// âûâîä ãðàôè÷åñêîãî ýêðàíà, âûáîð, ñåêöèè ïîä äåôîëòó |
;////// вывод графического экрана, выбор, секции под дефолту |
use_any_sec |
;ïàðñèíã âûáðàíîé èëè äåôîëòíîé ñåêöèè ò.å. ðàçáîð ïàðàìåòðîâ âûïîëíåíèå ñöåíàðèÿ |
;парсинг выбраной или дефолтной секции т.е. разбор параметров выполнение сценария |
use_parse_def_sect |
|
;////////////////// |