; Работает через порты ВГ93. ; Выделяет 8 страниц памяти. ; ; При создании загрузочной дискеты, копирует загрузчик Estex ; в секторы 2..4 и корректирует BPB boot-сектора, устанавливая ; 10 зарезерв. секторов (4 для 720kB) и 1 копию FAT. С систем- ; ного диска копирует на дискету системные файлы. ; ; ; !TODO брать загрузочный сектор с системного диска, а не таскать в себе ; !TODO переделать под запись загрузчика нового доса, который больше 3-х секторов include './shared_includes/constants/dss_equ.inc' include './shared_includes/constants/bios_equ.inc' include './shared_includes/constants/sp2000.inc' include './shared_includes/structures/FileSystem.inc' include 'version.inc' WinBoxBuff equ 0xC000 ; начало буфера if release org 0x6400 else org 0x6200 db 'EX' ; exe ID db 'E' ; exe тип db 1 ; 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 ; выделяем блок в hPages.Size страниц ld bc,hPages.Size*256 + Dss.GetMem RST ToDSS jr c,err_mem ; нет памяти ;ld (hBlock),a ; хэндл блока ; создать список выдел. страниц ld hl,hPages ld c,0C5h RST ToBIOS ; вкл. рабочую страницу в SLOT3 (исп. для буфера сист. области дискеты) ld a,(hPages.BuffSys2) out (SLOT3),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 ;[]=================== Начало программы =========================[] Begin: ; сохр. экран call SaveScreen ; сохр. полож. курсора сист. экрана ld c,BIOS.LP_GET_PLACE 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" include "exit.asm" include "estex.asm" include "format.asm" ;[]==============================================================[] ;[]==============================================================[] 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-2025 " db " (c) 2005-2026 Sprinter Team " ; ;ds 562 ; 565 + start2 = 672 (_2 -_1) ;[]==============================================================[] ;[]==============================================================[] ;hBlock: db 0 ; хэндл выдел. блока hPages: .BuffSys2: db #FF ; хэндл рабочей страницы (+для сист. области) .BuffTrk: db #FF ; хэндл стр. буфера структуры дорожки (и "system.exe") .Win1: db #FF ; хэндл стр. сохр. экрана .Win2: db #FF ; хэндл стр. сохр. гл. окон форматилки .TRBoot: db #FF ; хэндл буфера загрузчика TR-DOS ;.SBuff0: db #FF ; хэндл буфера "system.exe" ;.SBuff1: db #FF ; хэндлы буфера под ;.SBuff2: db #FF ; файл "system.dos" .Size equ $-hPages db 0xFF ; стоп-байт списка ; буфер для функции поиска файла BuffName: ds 45 ; сохр. текущий путь (каталог) CurDir: ds 256 ; Рабочий буфер Input Line CompBuff: ds 16 ; _1: DialData: ds 16 ; Буфер заголовка вывод. окна DialName: ds 16 DialTab: ds 128 ; Буфер под объекты ReCompBuff: ds 512 ;[]==============================================================[] ;[]==============================================================[] ds 80 Stack: db 0 ; буфер под стек программы ;[]==============================================================[] ;[]==============================================================[] ES_BPB equ $ ;ES_Boot equ ES_BPB + 512 ; incbin "estex.bs" ; загрузчик Estex ;[]==============================================================[] CurPath equ ES_BPB + 512 ;!TEST ;[]==============================================================[] ; Буфер системной области дискеты L2400 equ CurPath + 257 ;[]==============================================================[]