1,4 → 1,4 |
; Copyright (c) 2008-2009, <Lrz> |
; Copyright (c) 2009, <Lrz> |
; All rights reserved. |
; |
; Redistribution and use in source and binary forms, with or without |
12,7 → 12,7 |
; names of its contributors may be used to endorse or promote products |
; derived from this software without specific prior written permission. |
; |
; THIS SOFTWARE IS PROVIDED BY Alexey Teplov nickname <Lrz> ''AS IS'' AND ANY |
; THIS SOFTWARE IS PROVIDED BY Alexey Teplov aka <Lrz> ''AS IS'' AND ANY |
; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
; DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY |
25,20 → 25,94 |
;***************************************************************************** |
|
;start of the project 13.02.2008 year. |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
;Secondary Loader copyright Alexey Teplov nickname <Lrz> |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
;Secondary Loader copyright Alexey Teplov aka <Lrz> & K Soft team |
;if you need log preproc |
;///////////// |
;include 'listing.inc' |
;enable listing |
;//////////// |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
;start of code: ; |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
;;;;;;;;;;;;;;;;;;;;;;;;;; |
;start of code: |
;;;;;;;;;;;;;;; |
DEBUG equ 1 |
root_dir_entry_count equ 224 ;êîë-âî ýëåìåíòîâ â êîðíåâîé äèððåêòîðèè |
;point_to_fat_struc equ 0xA000 ;âðåìåííûé áóôåð, êóäà áóäåò ðàçìåùåíà Fat òàáëèöà, è çàòåì ïåðåíåñåíà çà 1 ìá |
ini_data_ equ 0x2000 ;ôàéë ãäå ðàçìåùåí ôàéë ñöåíàðèÿ çàãðóçêè, òàì ïðîèñõîäèò ñèíòàêñè÷åñêèé ðàçáîð |
size_show_section equ 18 |
default_timeout_value equ 5 ;default value to timeout is will was some errors |
flag_found_default equ 0x1 ;default value is found |
flag_found_timeout equ 0x2 ;timeout value is found |
flag_found_LM equ 0x1 ;found LM value |
flag_found_RS equ 0x2 ;found RS value |
flag_found_GTRFMS equ 0x4 ;found type RamFS |
flag_found_RamdiskSector equ 0x8 ;found RamdiskSector |
flag_found_RamdiskCluster equ 0x16 ;found RamdiskCluster |
;statick data ýòè äàííûå íå ïðåäîïðåäåëÿþòñÿ â òå÷åíèè âûïîëíåíèÿ âñåé ïðîãðàììû. |
save_cx equ word [bp-2] ;save cx size ini file |
ret_on_ch equ word [bp-4] ;point to return ðàçðóøàåìîå çíà÷åíèå |
save_cx_d equ word [bp-6] ;save cx - size default section and working section |
status_flag equ word [bp-8] ;status flag |
point_loader equ word [bp-10] |
point_default equ word [bp-12] ;point to default |
|
;äàííûå êîòîðûå çàâèñèìû îò âåòêè âûïîëíåíèÿ è êîòîðûå ìîãóò áûòü ïåðåîïðåäåëåíû â ïðîöåññå âûïîëíåíèÿ ïðîãðàììû. |
point_to_hframe equ word [bp-14] ;point on start frame (for change section) |
point_to_1 equ word [bp-16] |
point_to_2 equ word [bp-18] |
point_to_3 equ word [bp-20] |
point_to_4 equ word [bp-22] |
point_to_5 equ word [bp-24] |
point_to_6 equ word [bp-26] |
point_to_7 equ word [bp-28] |
point_to_8 equ word [bp-30] |
point_to_9 equ word [bp-32] |
point_to_10 equ word [bp-34] |
point_to_11 equ word [bp-36] |
point_to_12 equ word [bp-38] |
point_to_13 equ word [bp-40] |
point_to_14 equ word [bp-42] |
point_to_15 equ word [bp-44] |
point_to_16 equ word [bp-46] |
point_to_16 equ word [bp-48] |
point_to_17 equ word [bp-50] |
point_to_18 equ word [bp-52] |
;here array for fast scroling 16 word - poin to start section |
point_to_point_def equ word [bp-54] |
point_to_eframe equ word [bp-56] ;point on point frame |
|
|
|
; òóò ðàñïîëîæåíî âðåìåííîå õðàíèëèùå äëÿ cx è di ïðè ïåðåõîäå íà ñëåäóþùèé áóôåð ïðè ïîèñêå ñåêöèé |
find_sec_di equ word [bp-58] ;òóò áóäåò õðàíèòüñÿ di |
info_real_mode_size equ word [bp-60];òóò õðàíèòüñÿ èíôîðìàöèÿ î çàíÿòîé îáëàñòè ò.å. ðàçìåð, ìîæíî óçíàòü ñêîëüêî îñòàëîñü ìåñòà âû÷èñëèâ |
free_ad_memory equ word [bp-62] ;ñêîëüêî ó íàñ ðàñøèðåííîé ïàìÿòè äëÿ ôîðìèðîâàíèÿ ðàì äèñêà è çàãðóçêè ìîäóëåé |
show_errors_sect equ word [bp-64] ;ïåðåìåíàÿ êîòîðàÿ õðàíèò áèòû îøèáîê äëÿ êàæäîé ëîãè÷åñêîé ñåêöèè. |
save_descript_size equ word [bp-66] ;save descript size previos section ñîõðàíèì ðàçìåð ïðåäûäóùåé ñåêöèè êîòîðóþ âûâîäèëè |
save_ramdisksize equ dword [bp-70] ;save size of ramdisk in byte |
save_file_size equ dword [bp-74] ;save size of reading file |
set_ramfs equ word [bp-76] ;îïðåäåëåííûé òèï ôàéëîâîé ñèñòåìû,íóæíî äëÿ ôîðìèðîâàíèÿ ðàì äèñêà |
point_next_fat_str equ word [bp-78] ;óêàçàòåëü íà ñëåäóþùèé ýëåìåíò fat òàáëèöû |
size_root_dir equ word [bp-80] ;êîë-âî ýëåìåíòîâ â ñåêòîðàõ ïî 512 áàéò êîðíåâîé äèðåêòîðèè |
firstDataSect equ word [bp-82] ;ïåðâûé ñåêòîð äàííûõ â ñåòîðàõ îò 0 |
DataClasters equ word [bp-84] ;ðàçìåð ìàññèâà äîñòóïíîé äëÿ çàïèñè äàííûõ â êëàñòåðàõ. |
point_to_free_root equ word [bp-86] ;óêàçàòåëü íà ñëåäóþùèé ïóñòóþ çàïèñü â ðóò äèð |
point_to_dest_file_name equ word [bp-88] ;óêàçûâàåò íà íà÷àëî èìåíè ôàéëà íàçíà÷åíèÿ. |
data_offset equ word [bp-90] ;ñìåùåíèå â êëàñòåðàõ äëÿ çàïèñàííûõ äàííûõ ò.å ïåðåêèíóòûõ çà 1-é ìá |
first_input equ word [bp-92] ;ïîëå äëÿ ôëàãîâ â ïðåîáðàçîâàíèè èìåíè. |
save_di_RAMDISK equ word [bp-94] ;ñîõðàíèì di -óêàçàòåëÿ ïðè îáðàáîòêå ñåêöèè |
save_cx_RAMDISK equ word [bp-96] ;ñîõðàíèì ðàçìåð îñòàòêà ñåêöèè |
status_flag_loader_f equ word [bp-98] ;ñîõðàíèì ðåçóëüòàò âûïîëåíåíèÿ çàãðóçêè ôàéëà |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
;äàííûå êîòîðûå èñïîëüçóþòñÿ ïðè îáðàáîòêå ñåêöèè, ò.å. ïîñëå íàæàòèÿ Enter, óæå íå âîçìîæíî âåðíóòüñÿ â ïåðâîíà÷àëüíûé ýêðàí |
;äëÿ âîçâðàòà, íåîáõîäèìî ïåðåçàïóñòèòü ïîëíîñòüþ êîä ò.å. ñòàðòîâàòü ñ 0õ1000:0000 |
|
|
|
|
use16 |
org 0x0 |
jmp start |
include 'sl_equ.inc' ; â ôàéëå ðàçìåùåíû âñå equ ïðåäîïðåäåëåíèÿ |
include 'boot_st.inc' |
include 'debug_msg.inc' ;here is message from debug |
include 'parse_dat.inc' |
91,18 → 165,6 |
call putchar |
loop @b |
|
if DEBUG |
pushad |
mov ax,cs |
shl eax,4 ; â äåñÿòè÷íîé ñèñòåìå àäðåñ ñåãìåíòà |
mov cx,0xa |
mov di,cseg_msg |
call decode |
;*************** |
mov si,cseg_msg |
call printplain |
popad |
end if |
|
|
if DEBUG |
154,27 → 216,11 |
; set up esp |
movzx esp, sp |
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
; init memory |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
|
|
|
; Load startos.ini |
mov cx,loop_read_startos_file ;êîë-âî ïîïûòîê ÷òåíèÿ ôàéëà êîíôèãóðàöèè startos.ini |
align 4 |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
; Load startos.ini ; |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
load_startos_file: |
|
xor ax,ax |
xor ax,ax ; function 1 - read file |
mov di,file_data |
inc ax ;function 1 - read file |
push cx |
inc ax |
call far dword [loader_callback] |
pop cx |
push cs |
push cs |
pop ds |
181,10 → 227,29 |
pop es |
|
test bx,bx |
jz check_conf_file |
dec cx |
jnz load_startos_file |
jnz error_ini |
|
;Check config file in current dir |
push ax ;save size file |
if DEBUG |
mov cx,0x0a |
mov di,show_decode |
call decode |
;Show size |
mov si,show_string |
call printplain |
end if |
|
|
;Show message |
mov si,load_ini |
call printplain |
|
pop cx ;restore size file |
use_parse ;parsing startos.ini |
; |
jmp ini_loaded |
|
;SET DEFAULT Not use ini file |
error_ini: |
mov si, error_ini_f1 ;Error: cannot load ini file, buffer is full |
203,7 → 268,7 |
mov si, error_ini_common |
call printplain |
; wait for keypress |
xor ax,ax |
mov ah, 0 |
int 16h |
|
ini_loaded: |
210,34 → 275,14 |
|
jmp $ |
|
align 4 |
check_conf_file: |
;Check config file in current dir |
push ax ;save size file |
if DEBUG |
mov cx,0x0a |
mov di,show_decode |
call decode |
;Show size |
mov si,show_string |
call printplain |
end if |
|
|
;Show message |
mov si,load_ini |
call printplain |
|
pop cx ;restore size file |
use_parse ;parsing startos.ini |
; |
jmp ini_loaded |
|
;;;;;;;;;;;;;;;;;;;;;;;;;;; |
;DATA |
;;;;;;;;;;;;;;;;;;;;;;;;;;; |
; table for move to extended memory (int 15h, ah=87h) |
align 4 |
align 8 |
table_15_87: |
db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0 |
db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0 |
300,7 → 345,7 |
;Òóò áóäóò ðàñïîëîãàòñüÿ äàííûå, êîòîðûå çàòðóäíèòåëüíî ðàñïîëîãàòü â ñòåêîâîé îáëàñòè.... |
;;; |
;timer |
shot_name_fat rb 11 ;âðåìåííûé áóôåð äëÿ fat12, â íåì õðàíÿòüñÿ èìåíà ôàéëîâ ïðèâåäåííûå ê ïðàâèëàì FAT /* âäàëüíåéøåì ïåðåíåñòè â ñòýê |
shot_name_fat rb 11 |
if DEBUG |
rb 1 ;íóæåí äëÿ îòëàäêè è âûâîäà èìåíè ôàéëà ïîñëå ïðåîáðàçîâàíèÿ |
dest_name_fat rb 12 |