FFORMAT/ESTEX.ASM
Tolik a1ab539980 Правильная генерация FAT_SERIAL_NUMBER
Создание метки диска в BPB
Запись системных файлов на FAT12 с помощью вызова SYS
2025-06-26 19:53:58 +10:00

614 lines
12 KiB
NASM
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

; <20> ¡®â  á á¨á⥬­ë¬¨ ¨ boot-ä ©« ¬¨;
; ”ã­ªæ¨ï áà ¢­¥­¨ï ¯®à⮢ ®ª®­ <20>¨®á  ¨ ¨á¯®«ì§ã¥¬ëå ¯à®£à ¬¬®©;
;
;--- Š®¯¨à®¢ ­¨¥ á¨áâ. ä ©«®¢ ¢ ¡ãä¥àë
; ¢ëå: "CY" ¯à¨ ®è¨¡ª¥
;
; CopySysFiles: xor a
; ld (sFlag),a
; ld (bigFile),a
; ld a,(ColDialWn) ; á®åà. 梥⠮ª­ 
; ld (TmpColor),a
; ; <20>®¬¥à § £à㧮筮£® ¤¨áª 
; ld bc,0009h
; RST ToDSS
; ld (SysDisk),a
; ; “áâ ­®¢¨âì ⥪ã騬 § £àã§®ç­ë© ¤¨áª
; ld a,(SysDisk)
; ld c,1
; RST ToDSS
; ; “áâ ­®¢¨âì "ª®à¥­ì" boot-¤¨áª 
; ld hl,RootDir
; ld c,1Dh
; RST ToDSS
; ;<3B> ©â¨ ä ©« "SYSTEM.EXE"
; ;ld hl,Name1
; ;call FirstFile
; ;jp c,NoFound ; ä ©« ­¥ ­ ©¤¥­
; ; ®âªàëâì ä ©«
; ld hl,Name1
; call OpenFile
; jp c,error1 ; ®è¨¡ª  ®âªàëâ¨ï ä ©« 
; ld (hFile1),a
; ; ¯à®ç¨â âì ä ©«
; in a,(SLOT3)
; push af
; ld a,(hPages.SBuff0)
; out (SLOT3),a ; ¯®¤ª«. ¡ãä¥à
; ld a,(hFile1)
; call ReadFile
; jp c,err1 ; ®è¨¡ª  ç⥭¨ï ä ©« 
; pop af
; out (SLOT3),a ; ¢®ááâ. áâà ­¨æã
; ld (Number1),de ; ç¨á«® ¯à®ç¨â ­­ëå ¡ ©â
; ; § ªàëâì ä ©«
; ld a,(hFile1)
; call CloseFile
; jp c,error1 ; ®è¨¡ª  § ªàëâ¨ï ä ©« 
; ;<3B> ©â¨ ä ©« "SYSTEM.DOS"
; ;ld hl,Name2
; ;call FirstFile
; ;jp c,error1 ; ä ©« ­¥ ­ ©¤¥­
; ; ®âªàëâì ä ©«
; ld hl,Name2
; call OpenFile
; jp c,error1 ; ®è¨¡ª  ®âªàëâ¨ï ä ©« 
; ld (hFile2),a
; ; ã§­ âì à §¬¥à ä ©« 
; ld hl,0
; ld ix,0 ; ¬«.á«®¢®
; ld bc,0215h ; 㪠§ â¥«ì ®â ª®­æ  ä ©« 
; RST ToDSS
; jp c,error1
; push ix
; pop hl
; ld de,4001h
; ; hl >= de
; ld a,l
; sub e
; ld l,a
; ld a,h
; sbc a,d
; ld h,a
; inc hl
; ld (ost+1),hl ; á®åà. à §¬¥à ®áâ âª  ä ©« 
; jr c,tinRead ; ä ©« < 1-© áâà ­¨æë
; ld a,1
; ld (bigFile),a ; ä ©« > 1-© áâà ­¨æë
; tinRead: ld (Number2),ix ; á®åà. à §¬¥à ä ©« 
; ; 㪠§ â¥«ì ­  ­ ç «® ä ©« 
; ld hl,0
; ld ix,0 ; ¬«.á«®¢®
; ld a,(hFile2)
; ld bc,0015h ; 㪠§ â¥«ì ®â ­ ç «  ä ©« 
; RST ToDSS
; jp c,error1
; ; ¯à®ç¨â âì ä ©«
; in a,(SLOT3)
; push af
; ld a,(hPages.SBuff1)
; out (SLOT3),a ; ¯®¤ª«. 1-î áâà ­¨æã
; ld a,(hFile2)
; call ReadFile
; jp c,err1 ; ®è¨¡ª  ç⥭¨ï ä ©« 
; ld a,(bigFile)
; or a
; jr z,endRead ; ¯à®ç¨â ­ ¢¥áì ä ©«
; ; ç¨â ¥¬ ®áâ â®ª ä ©« 
; ost: ld de,0
; ld a,(hPages.SBuff2)
; out (SLOT3),a ; ¯®¤ª«. 2-î áâà ­¨æã
; ld hl,WinBoxBuff ; ¡ãä¥à ¯®¤ ¤ ­­ë¥
; ld a,(hFile2)
; ld c,13h
; RST ToDSS
; jp c,err1 ; ®è¨¡ª  ç⥭¨ï ä ©« 
; endRead: pop af
; out (SLOT3),a ; ¢®ááâ. áâà ­¨æã
; ; § ªàëâì ä ©«
; ld a,(hFile2)
; call CloseFile
; jp c,error1 ; ®è¨¡ª  § ªàëâ¨ï ä ©« 
; ret
; ä« £, 0/1 - ®âà ¡®â âì/­¥â ä㭪樨 WriteSysFiles
sFlag: db 0
; ä« £, 0/1 - ®âà ¡®â âì/­¥â ä㭪樨 § ¯¨á¨ trd-boot` 
sFlag1: db 0
; ä« £, 0/1 - "system.dos" ¬¥­ìè¥/¡®«ìè¥ 1-© áâà ­¨æë
;bigFile: db 0
;--- ‡ ¯¨áì á¨áâ. ä ©«®¢ ­  ¤¨áª¥âã
; ¢ëå: "CY" ¯à¨ ®è¨¡ª¥
;
WriteSysFiles: ld a,(sFlag)
or a
ret nz
; Žâªàëâì ®ª­®
ld a,(ColDialWn) ; á®åà. 梥⠮ª­ 
ld (TmpColor),a
ld a,10h ; 梥⠢뢮¤. ®ª­ 
ld (ColDialWn),a
ld hl,SysWrite ; "Writing system files..."
call PutDialWn
; áªàëâì ¬ëèªã
call HiddenMouse
; “áâ. ⥪ã騩 ¤¨áª ¨ ¯ãâì ­  ¤¨áª¥âã
;call SetDisketa
; ‘®§¤ âì ä ©« "SYSTEM.EXE"
;ld hl,Name1 ; ¨¬ï ä ©« 
;call CreateFile
;jp c,error1 ; ®è¨¡ª  á®§¤ ­¨ï ä ©« 
;ld (hFile1),a
;; § ¯¨á âì ä ©«
;in a,(SLOT3)
;push af
;ld a,(hPages.SBuff0)
;out (SLOT3),a ; ¯®¤ª«. ¡ãä¥à
;ld de,(Number1) ; ç¨á«® § ¯¨á. ¡ ©â
;ld a,(hFile1) ; åí­¤«
;call WriteFile
;ex af,af'
;pop af
;out (SLOT3),a ; ¢®ááâ. áâà ­¨æã
;ex af,af'
;jr c,error1 ; ®è¨¡ª  § ¯¨á¨ ä ©« 
;; § ªàëâì ä ©«
;ld a,(hFile1) ; åí­¤«
;call CloseFile
;jr c,error1 ; ®è¨¡ª  § ªàëâ¨ï ä ©« 
; ‘®§¤ âì ä ©« "SYSTEM.DOS"
;ld hl,Name2 ; ¨¬ï ä ©« 
;call CreateFile
;jr c,error1 ; ®è¨¡ª  á®§¤ ­¨ï ä ©« 
;ld (hFile2),a
;; § ¯¨á âì ä ©«
;in a,(SLOT3)
;push af
;ld a,(hPages.SBuff1)
;out (SLOT3),a ; ¯®¤ª«. 1-î áâà ­¨æã
;ld de,(Number2) ; à §¬¥à "system.dos"
;ld hl,4000h ; 1-­  áâà ­¨æ 
;ld a,(bigFile)
;or a
;jr z,tinFile ; ä ©« <= 1-© áâà ­¨æë
;ex de,hl
;sbc hl,de
;push hl
;ld a,(hFile2) ; åí­¤«
;call WriteFile
;pop de
;jr c,err1 ; ®è¨¡ª  § ¯¨á¨ ä ©« 
;ld a,(hPages.SBuff2)
;out (SLOT3),a ; ¯®¤ª«. 2-î áâà ­¨æã
;
; tinFile: ld a,(hFile2) ; åí­¤«
; call WriteFile
; jr c,err1 ; ®è¨¡ª  § ¯¨á¨ ä ©« 
; pop af
; out (SLOT3),a ; ¢®ááâ. áâà ­¨æã
; ; § ªàëâì ä ©«
; ld a,(hFile2) ; åí­¤«
; call CloseFile
; jr c,error1 ; ®è¨¡ª  § ªàëâ¨ï ä ©« 
;
;
; § ¯¨áì § £àã§ç¨ª  ç¥à¥§ sys
ld hl,.sys_name
ld a,(DskName)
ld (.sys_prm_disk),a
ld bc,Dss.Exec
rst ToDSS
;
jr c,.error1
and a
jr nz,.error1
;
; ¢®ááâ. ¤¨áª ¨ ¯ãâì
call RestPath
; § ªàëâì ®ª­® "‡ ¯¨áì á¨áâ. ä ©«®¢"
call ClsDial
; ®âªàëâì ®ª­® "System files transfered"
ld hl,SysCopy
call PutDialWn
; áªàëâì ¬ëèªã
call HiddenMouse
; § ¤¥à¦ª  ¢ 2 ᥪ㭤ë
ei
ld b,2 ; ᥪ㭤ë
1: ld a,49 ; 1/50 ᥪ㭤ë
2: halt
dec a
jr nz,2B
djnz 1B
; § ªàëâì ®ª­®
call ClsDial
ld a,(TmpColor)
ld (ColDialWn),a ; ¢®ááâ. ¯à¥¦­îî ãáâ ­®¢ªã æ¢¥â  ®ª­ 
ret
;
; err1: pop af
; out (SLOT3),a ; ¢®ááâ. áâà ­¨æã
;
.error1: call RestPath ; ¢®ááâ. ¤¨áª ¨ ¯ãâì
ld a,40h
ld (ColDialWn),a
ld hl,ErrSysFiles
call DialogW
ld a,(TmpColor)
ld (ColDialWn),a
ld a,1
ld (sFlag),a
ret
.sys_name: db "SYS.EXE "
.sys_prm_disk: dz "A: 1"
; SetDisketa: ; “áâ. ⥪ã騩 ¤¨áª ­  ä®à¬ â. ¤¨áª¥âã
; ld a,(DISK)
; ld c,1
; RST ToDSS
; ; “áâ. "ª®à¥­ì" ¤¨áª¥âë
; ld hl,RootDir
; ld c,1Dh
; RST ToDSS
; ret
RestPath: ; ‚®ááâ. ⥪ã騩 ¤¨áª
; ld a,(CurDisk)
; ld c,Dss.ChDisk
; RST ToDSS
; ‚®ááâ. ⥪. ¯ãâì
ld hl,CurPath
ld c,Dss.ChDir
RST ToDSS
ret
; <20> ©â¨ ä ©«
FirstFile: ld bc,0019h ; ¨¬ï ¢ ä®à¬ â¥ 11 ¡ ©â
ld de,BuffName ; 44 ¡ ©â  ¡ãä¥à 
ld a,20h ;  âਡãâ " à娢­ë©"
RST ToDSS
ret
; ‘®§¤ âì ä ©«
; CreateFile: ld c,0Ah
; ld a,20h ;  âਡãâ " à娢­ë©"
; RST ToDSS
; ret
; Žâªàëâì ä ©«
OpenFile: ld c,11h
ld a,1 ; ­  ç⥭¨¥
RST ToDSS
ret
; <20>à®ç¨â âì ä ©«
; ReadFile: ld hl,WinBoxBuff ;L4000 ¡ãä¥à ¯®¤ ¤ ­­ë¥
; ld de,4000h ; ç¨á«® ç¨â ¥¬ëå ¡ ©â (1 áâà ­¨æ )
; ld c,13h
; RST ToDSS
; ret
; ‡ ¯¨áì ä ©« 
; WriteFile: ld hl,WinBoxBuff ;L4000 ¡ãä¥à ¤ ­­ëå
; ld c,14h
; RST ToDSS
; ret
; ‡ ªàëâì ä ©«
CloseFile: ld c,12h
RST ToDSS
ret
SysDisk: db 0 ; ­®¬¥à § £à. ¤¨áª 
;Name1: db "SYSTEM.EXE",0
;Name2: db "SYSTEM.DOS",0
;Name2: db "DIAL.TXT",0
;hFile1: db 0 ; åí­¤« ä ©«  "system.exe"
;hFile2: db 0 ; åí­¤« ä ©«  "system.dos"
;Number1: dw 0 ; à §¬¥à ä ©«  "system.exe"
;Number2: dw 0 ; à §¬¥à ä ©«  "system.dos"
;RootDir: db '\',0 ;
;
CurDisk: db 0,':\' ; á®åà. ⥪. ¤¨áª
;
TmpColor: db 0 ; ¢à¥¬. á®åà. æ¢¥â  ®ª­ 
; ä ©« ­ áâ஥ª ¯à®£à ¬¬ë
IniName: db "FFORMAT.INI",0
hFile3: db 0 ; ¤¥áªà¨¯â®à ä ©« 
;Number3:dw 0 ; à §¬¥à ä ©«  "fformat.ini"
TrdName: db "BOOT.$B",0 ; ¨¬ï trd-boot ä ©« 
hFile4: db 0 ; ¤¥áªà¨¯â®à ä ©« 
;[]===============================================[]
/*
; Ž¯à¥¤¥«¥­¨¥ ⥪ã饩 ª®­ä¨£ãà æ¨¨
; ¯®à⮢ ¨ ¢ª«î祭­ëå áâà ­¨æ އ“
compare_page: ld c,0C6h ;¯®«ãç¨âì ª®­ä. ¯®à⮢
ld a,1 ;¯ à ¬¥âàë 1-£® ®ª­ 
RST ToBIOS
ld a,c ;¢®â §¤¥áì ¨¤¥â áp ¢­¥­¨¥ áç¨â ­­®£®
cp SLOT1 ;­®¬¥p  ¯®pâ  á ⥬, ª®â®pë© ï î§ î
jr z,.loc1
; ãáâ. ­®¢ë© ­®¬¥à SLOT1
ld (port1+1),a
ld (port2+1),a
ld (port3+1),a
ld (port4+1),a
.loc1: ld c,0C6h
ld a,3 ;¯ à ¬¥âàë 3-£® ®ª­ 
RST ToBIOS
ld a,c
cp SLOT3
ret z
; ãáâ. ­®¢ë© ­®¬¥à SLOT3
ld (port5+1),a
ld (port6+1),a
ld (port7+1),a
ld (port8+1),a
ld (port9+1),a
ld (port10+1),a
ld (port11+1),a
ld (port12+1),a
ld (port13+1),a
ld (port14+1),a
ld (port15+1),a
ld (port16+1),a
ld (L091B+1),a
ld (port18+1),a
ld (port19+1),a
ld (L0BAA+1),a
ld (port21+1),a
ld (port22+1),a
ld (L0B21+1),a
ld (port24+1),a
ld (port25+1),a
ld (port26+1),a
ld (port27+1),a
ld (port28+1),a
ld (port29+1),a
ld (PushBut+1),a
ld (port31+1),a
ld (port32+1),a
ld (port33+1),a
ld (port34+1),a
ld (port35+1),a
ld (port36+1),a
ld (port37+1),a
ld (port38+1),a
ld (port39+1),a
ld (port40+1),a
ld (port41+1),a
ld (port42+1),a
ld (port43+1),a
ld (port44+1),a
ld (port45+1),a
ld (port46+1),a
ld (port47+1),a
ld (port48+1),a
ld (port49+1),a
ld (port50+1),a
ld (port51+1),a
ld (port52+1),a
ld (port53+1),a
ld (port54+1),a
ld (port55+1),a
ld (port56+1),a
ld (port57+1),a
ld (port58+1),a
ld (port59+1),a
ld (port60+1),a
ld (port61+1),a
ld (port62+1),a
ld (ChangeR+1),a
ld (port64+1),a
ld (port65+1),a
;
ld (port69+1),a
ld (port70+1),a
ld (port71+1),a
ld (port73+1),a
;
ld (port74+1),a
ld (port75+1),a
ld (port76+1),a
;
ld (port77+1),a
ld (port78+1),a
ret
*/
;[]===============================================[]
; —⥭¨¥ ä ©«  ­ áâ஥ª (¯®¨áª ¢ ⥪. ª â «®£¥)
; —¨â îâáï 2 ¡ ©â  ¢ ¡ãä¥à BuffName
; <20>ਠ®è¨¡ª å - ¯à®áâ® ¢ë室
ReadInit:
; ­ ©â¨ ä ©« "form.ini"
ld hl,IniName
call FirstFile
ret c ; ä ©« ­¥ ­ ©¤¥­
; ®âªàëâì ä ©«
ld hl,IniName
ld c,11h
ld a,1 ; ­  ç⥭¨¥
RST ToDSS
ret c ; ®è¨¡ª  ®âªàëâ¨ï
ld (hFile3),a
; ¯à®ç¨â âì ä ©«
ld a,(hFile3)
ld hl,BuffName ; ¡ãä¥à ¯®¤ ¤ ­­ë¥
ld de,2 ; ç¨á«® ç¨â ¥¬ëå ¡ ©â
ld c,13h
RST ToDSS
;ld (Number3),de ; ç¨á«® ¯à®ç¨â ­­ëå ¡ ©â
; § ªàëâì ä ©«
ld a,(hFile3)
call CloseFile
jp SetParam ; ­ áâநâì 2 ï祩ª¨ ®¯æ¨© ¤¨áª®¢
; ‡ ¯¨áì ¢ ä ©« ­ áâ஥ª
; <20>ਠ®è¨¡ª¥ á®§¤ ­¨ï - ¯à®áâ® ¢ë室
SaveInit: ; ¢®ááâ. ­ ç «ì­ë© ¤¨áª ¨ ª â «®£
; ld a,(CurDisk)
; ld c,1
; RST ToDSS
; ld hl,CurDir
; ld c,Dss.ChDir
; RST ToDSS
ld hl,CurPath
ld c,Dss.ChDir
RST ToDSS
;
call GetParam ; ­ áâநâì ¡ãä¥à ¤«ï § ¯¨á¨
; á®§¤ âì ä ©« (áãé¥áâ. ã१ ¥â ¤® ­ã«ï)
ld hl,IniName ; "form.ini"
ld c,0Ah
ld a,20h ;  âਡãâ " à娢­ë©"
RST ToDSS
ret c ; ®è¨¡ª  á®§¤ ­¨ï ä ©« 
ld (hFile3),a ; á®åà. åí­¤«
; § ¯¨áì ä ©« 
ld hl,BuffName ; ¡ãä¥à ¤ ­­ëå
ld de,2 ; ç¨á«® § ¯¨á. ¡ ©â
ld c,14h
RST ToDSS
; § ªàëâì ä ©«
ld a,(hFile3)
jp CloseFile
; <20> áâநâì ¡ãä¥à ¤«ï § ¯¨á¨ "form.ini"
GetParam: ld hl,DriveA
call .loc1
ld hl,BuffName
ld (hl),a ; ¤«ï ¤¨áª  "A:"
;
ld hl,DriveB
call .loc1
ld hl,BuffName+1
ld (hl),a ; ¤«ï ¤¨áª  "B:"
ret
;
.loc1: xor a
ld b,3 ; 3 ï祩ª¨
ld c,a ; áç¥â稪
.loc2: cp (hl)
jr nz,.loc3
inc hl
inc c
djnz .loc2
.loc3: ld a,c
and 3
ret
; <20> áâநâì 2 ï祩ª¨ RadioCheck-  ®¯æ¨© ¤¨áª®¢
SetParam: ; ®¡­ã«¨âì 6 ï祥ª ®¯æ¨© ¤¨áª®¢ A/B
ld hl,DriveA
ld b,6
xor a
.loc1: ld (hl),a
inc hl
djnz .loc1
;
ld hl,DriveA
ld de,BuffName ; ¤¨áª "A:"
ld a,(de)
ld c,a
add hl,bc
ld (hl),1 ; ®â¬¥â¨âì "RadioCheck" ¤¨áª  "A:"
;
inc de ; ­  ¡ ©â ¤¨áª  "B:"
ld hl,DriveB
ld a,(de)
ld c,a
add hl,bc
ld (hl),1 ; ®â¬¥â¨âì "RadioCheck" ¤¨áª  "B:"
ret
; Š®¯¨à®¢ ­¨¥ trd-§ £àã§ç¨ª  ¨§ ¢­¥è­¥£® ä ©« .
; <20>ਠ®è¨¡ª å à ¡®âë á ä ©«®¬ - ¯à®áâ® ¢ë室 ¨§ ¯/¯à®£à ¬¬ë.
CopyBootTRD: xor a
ld (sFlag1),a
; ­ ©â¨ ä ©« "boot.$b"
ld hl,TrdName
call FirstFile
jr c,trd_err ; ä ©« ­¥ ­ ©¤¥­
; ®âªàëâì ä ©«
ld hl,TrdName
call OpenFile
jr c,trd_err ; ®è¨¡ª  ®âªàëâ¨ï
ld (hFile4),a
; ¯à®ç¨â âì ä ©«
in a,(SLOT3)
push af
ld a,(hPages.TRBoot)
out (SLOT3),a ; ¯®¤ª«. ¡ãä¥à
; ç¨â ¥¬ § £®«®¢®ª ¡ãâ 
ld hl,NameBt ; ¡ãä¥à ¯®¤ ¤ ­­ë¥
ld de,17 ; ç¨á«® ç¨â ¥¬ëå ¡ ©â
ld a,(hFile4)
ld c,13h
RST ToDSS
; ç¨â ¥¬ ⥫® ¡ãâ 
ld e,0
ld a,(NameBt+14) ; ã§­ âì à §¬¥à ¡ãâ 
ld d,a
cp 40h
jr c,.loc1
ld d,40h
.loc1: ld (SizeBt+1),de ; á®åà. à §¬¥à ¡ãâ 
ld hl,L4000 ; 0C000h ¡ãä¥à ¯®¤ ¡ãâ
ld a,(hFile4)
ld c,13h
RST ToDSS
pop af
out (SLOT3),a ; ¢®ááâ. áâà ­¨æã
; § ªàëâì ä ©«
ld a,(hFile4)
jp CloseFile
;
trd_err: ld a,1
ld (sFlag1),a
ret