; Работает через порты ВГ93. ; Выделяет 8 страниц памяти. ; ; При создании загрузочной дискеты, копирует загрузчик Estex ; в секторы 2..4 и корректирует BPB boot-сектора, устанавливая ; 10 зарезерв. секторов (4 для 720kB) и 1 копию FAT. С систем- ; ного диска копирует на дискету системные файлы. ; ; define release 1 ; режим компиляции исходника ; ; описание ds xx ; %imacro ds 1 ; times %1 db 0 ; %endmacro ; ; описание ds xx,yy ; %imacro ds 2 ; times %1 db %2 ; %endmacro include './shared_includes/constants/dss_equ.inc' include './shared_includes/constants/bios_equ.inc' SysPort equ 0x3C ; сист. порт (без подкл. ПЗУ биоса) Page1 equ 0xA2 ; порт 1-й страницы Page3 equ 0xE2 ; порт 3-й страницы WinBoxBuff equ 0xC000 ; начало буфера ; версия программы major_version equ 1 minor_version equ 13 if release org 0x6400 else org 0x6200 db 'EX' ; exe ID db 'E' ; exe тип db 0 ; exe версия dw 512 ; мл. смещ. кода dw 0 ; ст. смещ. кода dw 0 ; end-beg, первичный загрузчик dw 0,0 ; резерв dw 0 ; dw Start ; адрес загрузки кода dw Start ; адрес передачи управления dw Stack ; адрес стека ds 490 ; резерв endif Start: ld sp,Stack ; режим турбо - 1.44Mb ld a,13h ld c,8Fh RST ToBIOS ; сравнить исп. номера портов страниц с номерами портов Биоса ;call compare_page ; выделяем блок в 8 страниц ld bc,8*256 + Dss.GetMem ;!HARDCODE RST ToDSS jr c,err_mem ; нет памяти ld (hBlock),a ; хэндл блока ; создать список выдел. страниц ld hl,hPages ld c,0C5h RST ToBIOS ; вкл. рабочую страницу в Page3 (исп. для буфера сист. области дискеты) ld a,(BuffSys) out (Page3),a ; очистить буфер клавы ld bc,Dss.ScanKey*256 + Dss.K_CLEAR RST ToDSS ; получить свой каталог LD HL,#6200 LD DE,CurPath LD BC,256 LDIR ; сохр. текущий диск ld c,2 RST ToDSS ADD A,"A" ld (#6200),a ;!HARDCODE ; сохр. текущий путь ld c,Dss.CurDir ld hl,#6200+3 ; буфер тек. пути ;!HARDCODE RST ToDSS ; перейти в свой каталог ld hl,CurPath ld c,#1D ; Dss.ChDir RST ToDSS ; jp Begin err_mem: ld hl,NoMem ld a,30 ld (quit+1),a call Print ; выход в ДОС jp quit NoMem: db "Not enough memory !",0Dh,0Ah,0 hBlock: db 0 ; хэндл выдел. блока hPages: BuffSys: db 0 ; хэндл рабочей страницы (+для сист. области) BuffTrk: db 0 ; хэндл стр. буфера структуры дорожки (и "system.exe") Win1: db 0 ; хэндл стр. сохр. экрана Win2: db 0 ; хэндл стр. сохр. гл. окон форматилки TRBoot: db 0 ; хэндл буфера загрузчика TR-DOS SBuff0: db 0 ; хэндл буфера "system.exe" SBuff1: db 0 ; хэндлы буфера под SBuff2: db 0 ; файл "system.dos" db 0xFF ; стоп-байт списка ;[]=================== Начало программы =========================[] Begin: ; сохр. экран call SaveScreen ; сохр. полож. курсора сист. экрана ld c,8Eh RST ToBIOS ld (sys_cursor_coords),de ; иниц. драйвер мышки ld c,0 RST ToDSS.Mouse jr nc,continue ld hl,NoMouse ; драйвер мыши не установлен call Print ; ждем нажатия клавиши ld c,30h RST ToDSS continue: call ReadInit ; чтение "fformat.ini" и настройка call CopyBootTRD ; скопир. бут из "boot.$b" (если есть) call CopySysFiles ; скопир. сист. файлы в буферы include "dialog.asm" include "listbox.asm" include "radio.asm" include "mouse.asm" include "map.asm" ; вектор для отображения курсора rst38: di push iy push ix push hl push de push bc push af ld a,(CurILFl) or a call nz,PrnILCr pop af pop bc pop de pop hl pop ix pop iy vect: jp 0x0000 ; адрес сист. вектора ; Рабочий буфер Input Line CompBuff: ds 16 _1: DialData: ds 16 ; Буфер заголовка вывод. окна DialName: ds 16 DialTab: ds 128 ; Буфер под объекты ReCompBuff: ds 512 _2: NoMouse: db "Driver mouse not installed",0Dh,0Ah,0 Title: db " Floppy disk formatting utility Version " db major_version + "0","." db (minor_version / 10) + "0",(minor_version % 10) + "0" db " (c) 2005-2007 " ; ds 562 ; 565 + start2 = 672 (_2 -_1) include "exit.asm" include "estex.asm" include "form.asm" ds 80 Stack: db 0 ; буфер под стек программы ES_Boot: incbin "estex.bs" ; загрузчик Estex ; Буфер системной области дискеты L2400: