FFORMAT/ESTEX.ASM
Anatoliy Belyanskiy 3ef8aefe30 Begin
2024-06-09 08:13:19 +10:00

603 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,(Page3)
push af
ld a,(SBuff0)
out (Page3),a ; ¯®¤ª«. ¡ãä¥à
ld a,(hFile1)
call ReadFile
jp c,err1 ; ®è¨¡ª  ç⥭¨ï ä ©« 
pop af
out (Page3),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,(Page3)
push af
ld a,(SBuff1)
out (Page3),a ; ¯®¤ª«. 1-î áâà ­¨æã
ld a,(hFile2)
call ReadFile
jp c,err1 ; ®è¨¡ª  ç⥭¨ï ä ©« 
ld a,(bigFile)
or a
jr z,endRead ; ¯à®ç¨â ­ ¢¥áì ä ©«
; ç¨â ¥¬ ®áâ â®ª ä ©« 
ost: ld de,0
ld a,(SBuff2)
out (Page3),a ; ¯®¤ª«. 2-î áâà ­¨æã
ld hl,WinBoxBuff ; ¡ãä¥à ¯®¤ ¤ ­­ë¥
ld a,(hFile2)
ld c,13h
RST ToDSS
jp c,err1 ; ®è¨¡ª  ç⥭¨ï ä ©« 
endRead: pop af
out (Page3),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,(Page3)
push af
ld a,(SBuff0)
out (Page3),a ; ¯®¤ª«. ¡ãä¥à
ld de,(Number1) ; ç¨á«® § ¯¨á. ¡ ©â
ld a,(hFile1) ; åí­¤«
call WriteFile
ex af,af'
pop af
out (Page3),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,(Page3)
push af
ld a,(SBuff1)
out (Page3),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,(SBuff2)
out (Page3),a ; ¯®¤ª«. 2-î áâà ­¨æã
;
tinFile: ld a,(hFile2) ; åí­¤«
call WriteFile
jr c,err1 ; ®è¨¡ª  § ¯¨á¨ ä ©« 
pop af
out (Page3),a ; ¢®ááâ. áâà ­¨æã
; § ªàëâì ä ©«
ld a,(hFile2) ; åí­¤«
call CloseFile
jr c,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 (Page3),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
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 ;
;
CurPath:
CurDisk: db 0,':\' ; á®åà. ⥪. ¤¨áª
CurDir: ds 256 ; á®åà. ⥪ã騩 ¯ãâì (ª â «®£)
;
TmpColor: db 0 ; ¢à¥¬. á®åà. æ¢¥â  ®ª­ 
; ä ©« ­ áâ஥ª ¯à®£à ¬¬ë
IniName: db "FFORMAT.INI",0
hFile3: db 0 ; ¤¥áªà¨¯â®à ä ©« 
;Number3:dw 0 ; à §¬¥à ä ©«  "fformat.ini"
BuffName: ds 45 ; ¡ãä¥à ¤«ï ä㭪樨 ¯®¨áª  ä ©« 
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 Page1 ;­®¬¥p  ¯®pâ  á ⥬, ª®â®pë© ï î§ î
jr z,.loc1
; ãáâ. ­®¢ë© ­®¬¥à Page1
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 Page3
ret z
; ãáâ. ­®¢ë© ­®¬¥à Page3
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,(Page3)
push af
ld a,(TRBoot)
out (Page3),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 (Page3),a ; ¢®ááâ. áâà ­¨æã
; § ªàëâì ä ©«
ld a,(hFile4)
jp CloseFile
;
trd_err: ld a,1
ld (sFlag1),a
ret