; Работает через порты ВГ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 'version.inc' SysPort equ 0x3C ; сист. порт (без подкл. ПЗУ биоса) Page1 equ 0xA2 ; порт 1-й страницы Page3 equ 0xE2 ; порт 3-й страницы WinBoxBuff equ 0xC000 ; начало буфера 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,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" ; вектор для отображения курсора ; 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+1: 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-2025 " ; 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: