FFORMAT/FORMAT.ASM

1571 lines
31 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.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

; <20>®àâë ƒ93
REGCOM equ 0x0F ; ¯®àâ ª®¬ ­¤ ¨ áâ âãá 
REGTRK equ 0x3F ; ¯®àâ ¤®à®¦ª¨
REGSEC equ 0x5F ; ¯®àâ ᥪâ®à 
REGDATA equ 0x7F ; ¯®àâ ¤ ­­ëå
REGCTRL equ 0xFF ; ¯®àâ ã¯à ¢«¥­¨ï
L4000 equ 0xC000 ; ¡ãä¥à áâàãªâãàë ¤®à®¦ª¨
; ”®à¬ â¨«ª 
FFORMAT:
ld a,2 ; ç¨á«® ¯®¯ë⮪ ¨­¨æ. ƒ93 ¯®á«¥ £«îª®¢
ld (try_init),a
FFORM1: call ClearMap ; ®ç¨áâ¨âì ª àâã
call Fresh ; ®¡­®¢¨âì ª®­áâ ­âë ®ª­  ä®à¬-­¨ï
call HiddenMouse ; áªàëâì ¬ëèªã
call init_interlive ; ãáâ. ¨­â¥à«¨¢ ¤«ï ¢á¥å ä®à¬ â®¢
call L0B21 ; á®§¤. ¢ áâà. BuffTrk áâàãªâãàã ¤®à®¦ª¨
ld a,(_OS)
or a
jr z,.loc1 ; ms-dos
dec a
jr nz,.loc2 ; cpm-80
; tr-dos
call SysAreaTRDOS
jr .loc2
; ms-dos
.loc1: call L09A8 ; á®§¤. á L2400.. áâàãªâãàã á¨áâ. ®¡« áâ¨
; ®âªà. ®ª­® ¨­¨æ. ¤¨áª®¢®¤ 
.loc2: ld a,(ColDialWn) ; á®åà. 梥⠮ª­ 
ld (TmpColor),a
ld a,1Fh ; 梥⠮ª­ 
ld (ColDialWn),a
ld hl,InitFdd ; "Resetting drive..."
call PutDialWn
call HiddenMouse ; áªàëâì ¬ëèªã
call set_1440
; Žâªàëâì ¯®àâë ƒ93
ld a,SYS_PORT.CNF_3
out (SYS_PORT.RAM),a
call A0626 ; á¡à®á¨âì ª®­â஫«¥à
; ¤¥à­ãâì £®«®¢ª®©
ld a,70
out (REGDATA),a
ld a,18h ; ¯¥à¥©â¨ ­  § ¤ ­. ¤®à®¦ªã
call FDC_CMD ; § ­¥á⨠ª®¬ ­¤ã
call FDC_CMD.zeroTrk ; ­  0-î ¤®à®¦ªã
;
; ¯à®¢¥à¨âì ­ «¨ç¨¥ ¤¨áª¥âë
call L0C65 ; â¥áâ ­  ç⥭¨¥ ᥪâ®à 
jr z,.loc3 ; Ok
call set_720
call L0C65 ; â¥áâ ­  ç⥭¨¥ ᥪâ®à 
jr z,.loc3 ; Ok
cp 0x80 ; ¯à®¢¥à塞 ­  ®âáãâá⢨¥ ¤¨áª¥âë
jr z,Pars1 ; ­¥â ¤¨áª¥âë
; â¥áâ ­  § é¨â㠮⠧ ¯¨á¨
.loc3: call L0906 ; â¥áâ ­  § ¯¨áì ᥪâ®à 
bit 6,a
jr nz,Pars1 ; "§ é¨â  § ¯¨á¨"
;
call ClsDial ; § ªàëâì ®ª­®
ld a,(TmpColor)
ld (ColDialWn),a
call HiddenMouse ; áªàëâì ¬ëèªã
ld a,(Mode1) ; "Quick format"
or a
jr nz,.loc4
call L0BFF ; ä®à¬ â¨à®¢ ­¨¥
call RestoreTime ; ¢®ááâ. á¨áâ. ¢à¥¬ï
jp c,Abort ; ¯à¥à뢠­¨¥ ®¯¥à æ¨¨
jp nz,Parsing ; ¥áâì ®è¨¡ª¨ § ¯¨á¨/ç⥭¨ï
;
.loc4: xor a
ld (RetCode),a ; ®ç¨áâ¨âì ª®¤ ¢®§¢à â  ®è¨¡®ª
ld a,(ColDialWn) ; á®åà. 梥⠮ª­ 
push af
ld a,17h ; 梥⠢뢮¤. ®ª­ 
ld (ColDialWn),a
ld hl,SystemArea ; "Writing system area..."
call PutDialWn
call HiddenMouse ; áªàëâì ¬ëèªã
call SysWR ; § ¯¨áì á¨áâ. ®¡« áâ¨
call ClsDial ; § ªàëâì ®ª­® ¤¨ «®£ 
pop af
ld (ColDialWn),a
;
ld a,(RetCode)
or a
jr nz,Parsing ; ¡ë«¨ ®è¨¡ª¨ ¯à¨ § ¯¨á¨ á¨áâ. ®¡« áâ¨
call FDC_CMD.zeroTrk ; ­  0-î ¤®à®¦ªã
; ‡ ªàëâì ¯®àâë ƒ93
call Abort
ld a,(_OS)
or a
jp nz,okno1 ; ¯à¨ tr-dos, cp/m-80
;
ld a,(cSystem) ; ä« £ ª®¯¨à. á¨á⥬­ëå ä ©«®¢
or a
call nz,WriteSysFiles ; § ¯¨áì á¨áâ. ä ©«®¢ ­  ¤¨áª¥âã
;call CreateLabel ; á®§¤ âì ¬¥âªã ¤¨áª¥âë, ¥á«¨ § ¤ ­ 
jp okno1 ; "”®à¬. § ¢¥à襭®", ¢ë室 ¨§ ä㭪樨 fformat
Abort: call A0626 ; á¡à®á¨âì ª®­â஫«¥à
; § ªàëâì ¯®àâë ƒ93
ld a,SYS_PORT.CNF_0
out (SYS_PORT.RAM),a
ld c,1 ; ¯®ª § âì ¬ëèªã
RST ToDSS.Mouse
ret
; § ªàëâì ®ª­® "Resseting drive..."
Pars1: ;­¥â ¤¨áª , R/O
call ClsDial
ld a,(TmpColor)
ld (ColDialWn),a
;
; <20> §¡®à ®è¨¡®ª § ¯¨á¨/ç⥭¨ï
Parsing:;«î¡ë¥ ®è¨¡ª¨
call Abort
ld a,(RetCode)
bit 6,a ; ¡¨â "§ ¯à¥é¥­  § ¯¨áì"
jr nz,ReadOnly
and 0x18 ; 4,3 ¡¨âë
jr z,nodisk
ld hl,try_init
dec (hl)
jp nz,FFORM1
jp okno2 ; "®è¨¡ª  § ¯¨á¨ á¨áâ. ®¡« á⨠¨«¨ ­¥ ᮢ¬. ä®à¬ â"
;
; ­¥â ¤¨áª¥âë (ª®¤ 80h)
nodisk: call okno3 ; "‚áâ ¢ì⥠¤¨áª¥âã"
ld a,(hl)
cp cmOkey
ret nz
; ¤¨áª¥â  ¢ë­ãâ  (¢ ¯à®æ¥áᥠä®à¬-­¨ï)
jp FFORM1
ReadOnly:
ld a,(ColDialWn)
push af
ld a,4Fh ; 梥⠮ª­  ä®à¬ â¨à®¢ ­¨ï
ld (ColDialWn),a
ld hl,Protect ; "‡ é¨â  ®â § ¯¨á¨"
call DialogW
pop af
ld (ColDialWn),a
ret
; —¨á«® ¯®¯ë⮪ ¨­¨æ. ƒ93 ¯®á«¥ ®è¨¡®ª "R/O" ¨ (¨«¨)
; "®è¨¡ª  § ¯¨á¨ á¨áâ. ®¡« á⨠¨«¨ ­¥ ᮢ¬. ä®à¬ â"
try_init:
db 2
; Ž¡­®¢¨âì ª®­áâ ­âë ®ª­  ¯à®æ¥áá  ä®à¬-­¨ï
Fresh: call Reset_Map ; á¡à®á¨âì tracks, side
call L0D92 ; ¢ë¢®¤ ­®¬¥à  ¤®à®¦ª¨
call L0D93 ; ¢ë¢®¤ áâ®à®­ë
; á¡à®á¨âì ç¨á«® bad-ᥪâ®à®¢ ¨ ¤®áâ㯭. ¥¬ª®áâì ¤¨áª¥âë
ld hl,-1 ; ª®à४â. ¤«ï CalcAvail
ld (BadSect),hl
ld hl,(avail1) ; ¬«.à §àï¤
ld bc,(MinusSc+1) ; 512/256/1024
add hl,bc ; ª®à४â. ¤«ï CalcAvail
ld (Avail),hl
ld hl,(avail1+2) ; ¬«.à §àï¤
ld (Avail+2),hl
jp CalcAvail ; ¢ë¢¥á⨠­ ç. ¤ ­­ë¥
; ‘ªàëâì ¬ëèªã
HiddenMouse:
ld c,2
RST ToDSS.Mouse
ret
; ‚ª«. ०¨¬ 1.44Mb
set_1440:
ld a,13h ; 1.44Mb
jr set_hz
; ‚ª«. ०¨¬ 720kB
set_720:
ld a,12h ; 720kB
set_hz: ld c,8Fh ; turbo
RST ToBIOS
ret
; ‘¡à®á¨âì ª àâã ¢ ­ ç «ì­®¥ á®áâ®ï­¨¥
Reset_Map:
xor a
ld (tracks),a
ld (side),a
inc a
ld (sect),a
ld a,5
ld (count),a
ld a,maska ; 05h  âਡãâ ­®à¬. ᥪâ®à 
ld (bad),a
ld hl,0D0Fh
ld (cursor),hl ; ¢®ááâ. ¯®«®¦. ¬¥âª¨
ret
;[]======================================================[]
; ‡ ­¥á⨠¢ ª®­â஫«¥à ¤¨áª ¨ áâ®à®­ã
L0870: ld a,(side)
xor 1 ; 1 = 0-ï áâ®à®­ , 0 = 1-ï áâ®à®­ 
add a,a
add a,a
add a,a
add a,a
ld c,a
ld a,(DISK)
or c
or 00001100b ; 0Ch
out (REGCTRL),a
ret
; ‘¡à®á ƒ93
; ãáâ ­®¢ª  ­  ⥪. ¤¨áª ¨ 0-î áâ®à®­ã
A0626: ex af,af'
ld a,(DISK) ; ¤¨áª
and 3
;ld c,a
;ld a,00011000b ; á¡à®á ƒ93 ­ã«¥¬ 2-£® ¡¨â 
;or c
or %0001'1000
out (REGCTRL),a
set 2,a ; 1Ch
out (REGCTRL),a
call A0929 ; á¡à. ª®­â஫«¥à
ex af,af'
ret
;----
; ¯à¥à뢠­¨¥ FDC
A0929: ld a,0D0h ; abort (force interrupt)
out (REGCOM),a
call delay ; delay 16 usec
in a,(REGDATA) ; ç⥭¨¥ ॣ¨áâà  ¤ ­­ëå (clear DRQ)
in a,(REGCOM) ; ç⥭¨¥ áâ âãá  (clear INTRQ)
ld a,0D0h ; abort again (why?)
out (REGCOM),a
call delay ; delay 16 usec
in a,(REGCOM) ; ¯®«ãç¨âì áâ âãá (ॣ¨áâà ª®¬ ­¤)
ret
delay: ; >=16. usec delay
;ld b,5
;djnz $ ; 13 T-states each
ld a,1Fh
dec a
jr nz,$-1
ret
;----
; á¡à®á ª®­â஫«¥à 
;A0929: ld a,0D0h
; jr A092C
; £®«®¢ªã ­  0-î ¤®à®¦ªã
FDC_CMD.zeroTrk:
ld a,8
; ¯®á« âì ª®¬ ­¤ã
FDC_CMD: out (REGCOM),a
exx
ld b,3+3; ; 3 áç¥â稪
call delay ; ¬¨ªà®-¯ ã§ 
.loc2: ld de,0
.loc3: in a,(REGCOM)
;bit 7,a ; ¤¨áª¥â  ¬¥­ï« áì ? (NZ-¤ )
;...
rrca ; â¥áâ ­  0-© ¡¨â
jr nc,.loc4 ; £®â®¢
dec de
ld a,d
or e
jr nz,.loc3
djnz .loc2
.loc4: in a,(REGCOM) ; ¯®«ãç¨âì ª®¤ áâ âãá 
exx
ret
; ަ¨¤ ­¨¥ £®â®¢­®á⨠<20>ƒŒ„
L07AF: xor a
ld (side),a ; ⥪. áâ®à®­ 
L07B3: call L0870 ; ¢ ª®­â஫«¥à áâ®à®­ã ¨ ¤¨áª
ld a,3+6; ; 3 ç¨á«® ¯®¯ë⮪ ®¦¨¤ ­¨ï
ld (L0ACB),a
; 横« ®¦¨¤ ­¨ï
.loc1: ld hl,0
.loc2: in a,(REGCOM)
and 0x81 ; 7 ¨ 0 ¡¨âë
ret z
dec hl
ld a,h
or l
jr nz,.loc2
; ¤¥ªà¥¬¥­â ¯®¯ë⮪ ®¦¨¤ ­¨ï
ld hl,L0ACB ; ç¨á«® ¯®¯ë⮪
dec (hl)
jr nz,.loc1
; 3 ¯®¯ë⪨ ®¦¨¤ ­¨ï § ª®­ç¥­ë
call A0929; ;§ ª®¬¬¥­â. á¡à®á ª®­â஫«¥à 
;call A0626 ; á¡à®á¨âì ®¡à é¥­¨¥ ª ƒ93
ld a,0x80 ; ª®¤ - ­¥â ¤¨áª 
or a
ret
; ‡ ¯¨áì á¨áâ. ®¡« á⨠ms-dos ¨«¨ trd-¡ãâ 
SysWR: ld a,(density)
ld c,8Fh ; turbo on/off
RST ToBIOS
xor a
ld (tracks),a
call FDC_CMD.zeroTrk ; ¯¥à¥©â¨ ­  0-î ¤®à®¦ªã
ld hl,L2400 ; ¡ãä¥à á¨áâ. ®¡« áâ¨
ld (L0AC8),hl
ld a,(_OS)
or a
jr z,_msdos
dec a
jr z,_trdos
ret
;jp _cpm80
; Š®¯¨àã¥â 2-î FAT ¨ § ¯¨á뢠¥â á¨áâ. ®¡« áâì ¤¨áª¥âë,
; ¯à¨ ¢ª«. ®¯æ¨¨ ª®¯¨àã¥â § £àã§ç¨ª Estex ¢ ᥪâ®àë 2..4.
_msdos: ld a,(MS_Boot.media5) ; ç¨á«® ᥪâ®à®¢ ­  FAT
ld e,a
ld hl,0
ld bc,512 ; !HARDCODE
.loc0: add hl,bc
dec a
jr nz,.loc0
ld a,e
push hl
ld hl,0
ld de,L2400+512 ; ­ ç «® 1-© FAT
.loc1: add hl,bc
dec a
jr nz,.loc1
pop bc
add hl,de
ex de,hl
ldir
;
; bpb boot loader
;ld a,(cSystem) ; ä« £ á®§¤ ­¨ï á¨áâ. ¤¨áª¥âë
;or a
;jr z,.loc2
; ª®¯¨à. § £àã§ç¨ª  Estex ¢ á¨áâ. ®¡« áâì
;ld hl,ES_Boot ; ª®¤ § £àã§ç¨ª 
;ld de,L2400+512 ; ­ ç «® 1-© FAT
;ld bc,1536 ; 512*3 ᥪâ. = à §¬¥à § £àã§ç¨ª 
;ldir
; ᪮à४â. BPB ¢ ¡ãä¥à¥
;ld a,(MS_Boot.media5)
;inc a
;ld (L2400+14),a
;ld a,1 ; ç¨á«® ª®¯¨© FAT
;ld (L2400+16),a ; ᬥé. ­  ç¨á«® ª®¯¨©
;
;
.loc2: call L07AF ; ®¦¨¤ ­¨¥ £®â®¢­®á⨠­£¬¤
; § ¯¨áì 0-© áâ®à®­ë
ld a,1
ld (sect),a ; 1-© ᥪâ®à (boot)
call L0870 ; áâ®à®­ã ¨ ¤¨áª ¢ ª®­â஫«¥à
.loopWr0: call L0906 ; § ¯¨áì ᥪâ®à 
ret nz ; ®è¨¡ª¨ § ¯¨á¨
ld a,(sect) ; ⥪. ᥪâ®à
inc a
ld (sect),a
.maxSector0+1: cp 18+1 ; § ¯à¥¤¥«ì­ë© ᥪâ®à
jr nz,.loopWr0
; § ¯¨áì 1-© áâ®à®­ë
ld a,1
ld (side),a ; ⥪. áâ®à®­ 
ld (sect),a ; ⥪. ᥪâ®à
call L0870 ; áâ®à®­ã ¨ ¤¨áª ¢ ª®­â஫«¥à
.loopWr1: call L0906 ; § ¯¨áì ᥪâ®à 
ret nz ; ®è¨¡ª¨ § ¯¨á¨
ld a,(sect) ; ⥪. ᥪâ®à
inc a
ld (sect),a
.maxSector1+1: cp 18+1 ; § ¯à¥¤. ᥪâ®à ?
jr nz,.loopWr1
ret
; ‡ ¯¨áì á¨áâ. ®¡« á⨠TR-DOS.
; <20>ਠboot-¤¨áª¥ ª®à४â¨àã¥â ­ ç «® ᢮¡. ¬¥áâ ,
; ç¨á«® ᢮¡. ᥪâ®à®¢ ¨ ç¨á«® § ¯¨á. ä ©«®¢
_trdos: xor a ; ¢ëç¨á«¨âì ç¨á«® ᢮¡. ᥪâ®à®¢
ld hl,(BadSect)
ex de,hl
ld hl,2544 ; ®¡é¥¥ ç¨á«® ᥪâ®à®¢
sbc hl,de ; ¬¨­ãá bad-ᥪâ®àë
ld (L2400+2277),hl ; ç¨á«® ᢮¡. ᥪâ®à®¢
ld e,16 ; ¯à¥¤ãáâ ­®¢ª 
;
ld a,(sFlag1)
or a
jr nz,.loc8 ; ®è¨¡ª¨ à ¡®âë á ä ©«®¬ "boot.$b"
ld a,(cSystem) ; ä« £ á®§¤ ­¨ï boot-¤¨áª¥âë
or a
jr z,.loc8 ; ­¥ § £à㧮筠ï
;
call copy1 ; ᪮¯¨à®¢ âì ⥫® ¡ãâ 
ld a,(NameBt+14)
ld c,a
add a,e
ld e,a ; e=1000h+à §¬¥à ¡ãâ 
xor a
ld b,a
sbc hl,bc ; ¬¨­ãá à §¬¥à ¡ãâ  (¢ ᥪâ®à å)
; ç¨á«® ä ©«®¢, § ¯¨á. ­  ¤¨áª
inc a
ld (L2400+2276),a
; § ­¥á⨠ॠ«ì­®¥ ç¨á«® ᢮¡. ᥪâ®à®¢
ld (L2400+2277),hl
; ¢ëç¨á«. ­ ç «® ᢮¡. ¬¥áâ 
ld a,c
cp 16
jr c,.loc6 ; à §¬¥à ¡ãâ  ¬¥­ìè¥ 16-⨠ᥪâ®à®¢
add a,10h
rrca
rrca
rrca
rrca
ld h,a
ld l,b
jr .loc7
.loc6: ld hl,0100h
add hl,bc
.loc7: ld (L2400+2273),hl ; ­ ç «® ᢮¡. ¬¥áâ  ­  ¤¨áª¥
;
.loc8: call L07AF ; ®¦¨¤ ­¨¥ £®â®¢­®á⨠­£¬¤
.loc2: ld a,1 ; á 1-£® ᥪâ®à 
ld (sect),a
call L0870 ; áâ®à®­ã ¨ ¤¨áª ¢ ª®­â஫«¥à
.loc3: call L0906 ; § ¯¨áì ᥪâ®à 
ret nz ; ®è¨¡ª¨ § ¯¨á¨
dec e
ld a,(sect) ; ⥪. ᥪâ®à
inc a
ld (sect),a
cp 16+1 ; § ¯à¥¤. ᥪâ®à
jr nz,.loc3
; á«¥¤. áâ®à®­ 
ld a,(side)
xor 1
ld (side),a
ld a,e
or a
ret z ; § ¯¨á ­  ⮫쪮 á¨áâ. ®¡« áâì
sub 16
jr c,.loc4 ; ®áâ â®ª ¬¥­ìè¥ 16-⨠ᥪâ®à®¢
ld a,(side)
or a
call z,NxtTrack
jr .loc2
;
.loc4: add a,16 ; a=®áâ â®ª ᥪâ®à®¢
ld b,a
ld a,1 ; á 1-£® ᥪâ®à 
ld (sect),a
exx
call L0870 ; áâ®à®­ã ¨ ¤¨áª ¢ ª®­â஫«¥à
exx
.loc5: push bc
call L0906 ; § ¯¨áì ᥪâ®à 
pop bc
ret nz ; ®è¨¡ª¨ § ¯¨á¨
ld hl,sect ; ⥪. ᥪâ®à
inc (hl)
djnz .loc5
ret
; ‘ª®¯¨à®¢ âì ⥫® ¡ãâ  ¨§ ¡ãä¥à  TRBoot ¢ ¡ãä¥à L2400+1000h
copy1: exx
in a,(SLOT1)
ex af,af'
ld a,(hPages.TRBoot)
out (SLOT1),a ; ¯®¤ª«. ¡ãä¥à
ld hl,4000h ; ­ ç «® SLOT1
ld de,L2400+1000h
SizeBt: ld bc,4000h
ldir
ex af,af'
out (SLOT1),a ; ¯®¤ª«. ¡ãä¥à
exx
ret
; § £®«®¢®ª ¡ãâ  "boot.$b"
NameBt: ds 17
L0906: ld a,(sect) ; ⥪. ᥪâ®à
out (REGSEC),a ; ॣ¨áâà ᥪâ®à 
ld a,0xA0 ; § ¯¨áì ᥪâ®à 
; ‡€<E280A1>ˆœ …ŠŽ<E28099>€ (¤®à®¦ª¨)
; 0x00 - Ok
; 0x40 - Read-Only
; 0x80 - No disk
; Z - ¡¥§ ®è¨¡®ª, NZ - ®è¨¡ª¨
; Š®¤ë ¢®§¢à â  ¤¥©á⢨⥫ì­ë ¯à¨ § ¯¨á¨ ᥪâ®à®¢.
A0875: push de
ld hl,(L0AC8) ;  ¤à¥á ¡ãä¥à 
ld de,0
ld b,4 ; áç¥â稪
di
ld c,REGDATA ; ¯®àâ ¤ ­­ëå
out (REGCOM),a ; ¯®á« âì ª®¬ ­¤ã
.loc1: in a,(REGCTRL)
and 0C0h
jr nz,.loc2
dec de
ld a,e
or d
jr nz,.loc1
djnz .loc1
ld a,0x80
jr .loc4 ; ­¥â ¤¨áª 
.loc2: outi ; (hl) -> ¢ ¯®àâ
.loc3: in a,(REGCTRL)
and 0C0h
jr z,.loc3
jp p,.loc2
in a,(REGCOM)
.loc4: ld (RetCode),a
ld (L0AC8),hl
pop de
ei
ex af,af'
call A0929
ex af,af'
or a
ret
; ‡ ¯¨áì ¤®à®¦ª¨
L091B: in a,(SLOT3)
push af
ld a,(hPages.BuffTrk)
out (SLOT3),a ; ¯®¤ª«. ¡ãä¥à áâàãªâãàë ¤®à®¦ª¨
ld hl,L4000 ; ­ ç «® ¤ ­­ëå
ld (L0AC8),hl
call L0870 ; ¢ ª®­â஫«¥à áâ®à®­ã ¨ ¤¨áª
ld a,(tracks) ;- ⥪. ¤®à®¦ª 
out (REGTRK),a ;- ॣ¨áâà ¤®à®¦ª¨
ld a,0xF4 ; § ¯¨áì ¤®à®¦ª¨
call A0875
pop af
out (SLOT3),a
ret
; “áâ. £®«®¢ªã ­  á«¥¤. ¤®à®¦ªã
NxtTrack:
ld hl,tracks
inc (hl)
; “áâ. £®«®¢ªã ­  ⥪. ¤®à®¦ªã
L0759: ld a,(tracks) ; ⥪. ¤®à®¦ª 
out (REGDATA),a ; ॣ¨áâà ¤ ­­ëå
ld a,18h ; ¯¥à¥©â¨ ­  § ¤ ­. ¤®à®¦ªã
jp FDC_CMD ; § ­¥á⨠ª®¬ ­¤ã
; —<E28099>ˆ…ŠŽ<E28099>€.
; —⥭¨¥ ¯à®¨á室¨â ¢ ­¨ªã¤ , â.¥. ¢¥à¨ä¨ª æ¨ï.
; Read-Only ­¥ «®¢¨â
; 0x00 - Ok
; 0x08 - ®è¨¡ª  CRC
; 0x10 - ­¥ ­ ©¤¥­ë âà¥¡ã¥¬ë¥ ¤®à®¦ª , ᥪâ®à ¨«¨ áâ®à®­ 
; 0x80 - No disk
; Z - ¡¥§ ®è¨¡®ª, NZ - ®è¨¡ª 
L0C65: ld a,(sect) ; ⥪. ᥪâ®à
out (REGSEC),a ; ¢ ॣ¨áâà ᥪâ®à 
ld a,(side) ; ⥪. áâ®à®­ 
add a,a
add a,a
add a,a
or 0x80
; 0-ï áâ®à®­ : 80h
; 1-ï áâ®à®­ : 88h
call FDC_CMD ; § ­¥á⨠ª®¬ ­¤ã
di
ld c,REGCOM
ld b,3 ; áç¥â稪 ¯®¯ë⮪
.loc1: ld de,0 ; áç¥â稪
.loc2: in a,(c)
and 0x18 ; 4,3-© ¡¨âë
jr nz,.loc6 ; ®è¨¡ª 
in a,(REGDATA)
dec de
ld a,d
or e
jr nz,.loc3
djnz .loc1
ld a,0x80 ; ª®¤ "­¥â ¤¨áª "
or a
jr .loc5
.loc3: in a,(c)
and 1 ; 0-© ¡¨â
jr nz,.loc2 ; ª®­âà. § ­ïâ
in a,(c)
and 0x18 ; â¥áâ ­  4,3-© ¡¨âë
.loc5: ld (RetCode),a
ei
ex af,af'
call A0929
ex af,af'
or a
ret
.loc6: djnz .loc1
jr .loc5
; —⥭¨¥ (¢¥à¨ä¨ª æ¨ï) ᥪâ®à®¢ ®¤­®© áâ®à®­ë
; Z - Ok
; NZ - ¥áâì ®è¨¡ª¨
; "CY" - ¯à®æ¥áá ¯à¥à¢ ­
L0C87: ld a,maska ; 05h
ld (bad),a ; ¯à¨§­ ª ­®à¬. ᥪâ®à 
ld (flg_bad+1),a ; á¡à. ä« £ ­ «¨ç¨ï bad-ᥪâ®à®¢
ld (flg_wrn+1),a ; á¡à. ä« £ ­ «¨ç¨ï warn-ᥪâ®à®¢
ld a,1
ld (sect),a ; ⥪. ᥪâ®à
call L0870 ; áâ®à®­ã ¨ ¤¨áª ¢ ª®­â஫«¥à
L0C8C: ld a,3+1 ; 3 ¯®¯ë⪨
ld (L0C63),a ; ⥪. ¯®¯ë⪨ ç⥭¨ï ᥪâ®à 
L0C91: call L0D25 ; ¯à¨§­ ª ­ ¦ â¨ï ª« ¢¨è¨
ret c ; ¯à®æ¥áá ¯à¥à¢ ­
call L0C65 ; â¥áâ ­  ç⥭¨¥ ᥪâ®à 
jr z,L0CC3 ; ¡¥§ ®è¨¡®ª
;  ­ «¨§ ®è¨¡ª¨
cp 0x80
jr z,L0CB7 ; ®âáãâáâ¢ã¥â ¤¨áª
; ᥪâ®à ­¥ ç¨â ¥âáï
xor a
ld (flg_wrn+1),a ; ãáâ. ä« £ "¡ë«¨ ¯®¤®§à. ᥪâ®àë"
ld hl,L0C63 ; ⥪. ¯®¯ë⪨ ç⥭¨ï ᥪâ®à 
dec (hl) ; 㬥­ìè¨âì ç¨á«® ¯®¯ë⮪
jr nz,L0C91 ; ¯®¢â®à¨âì ç⥭¨¥
; ¢á¥ ¯®¯ë⪨ ¨á⥪«¨
ld a,(tracks) ; ⥪. ¤®à®¦ª 
or a ; ­ã«¥¢ ï ?
jr nz,L0CB8
; ¯«®å ï ­ã«¥¢ ï ¤®à®¦ª  (­  ¯ àᨭ£ ®è¨¡®ª)
L0CB7: xor a
dec a
ret
; Žâ¬¥â¨âì ᥪâ®à ª ª "BAD"
L0CB8: xor a
ld (flg_bad+1),a ; ãáâ. ä« £ "¡ë«¨ bad-ᥪâ®àë"
ld a,(_OS) ; ⨯ Ž‘-¨ ms-dos ?
or a
call z,L0ACF ; ¢ëç¨á«¨âì ï祩ªã bad-ᥪâ®à  ¢ FAT-¥
push bc
call CalcAvail ; ++bad-ᥪâ. á ¢ë¢®¤®¬ "Available bytes"
pop bc
L0CC3: ld hl,sect
inc (hl) ; ¨­ªà¥¬¥­â ⥪. ᥪâ®à 
loc06: ld a,18+1
cp (hl) ; § ¯à¥¤. ᥪâ®à ?
jr nz,L0C8C ; ç¨â âì á«¥¤. ᥪâ®à
; ¢á¥ ᥪâ®àë áâ®à®­ë ¯à®ç¨â ­ë
flg_bad:ld a,1
or a
jr z,_done1 ; ¡ë«¨ "bad"
flg_wrn:ld a,1
or a
jr z,_done2 ; ¡ë«¨ "warn"
xor a
ret
;
_done1: ld a,2
ld (bad),a
xor a
ret
_done2: xor a
ld (bad),a
ret
;[]==============================================================[]
; ¢ëç¨á«¨âì ï祩ªã bad-ᥪâ®à  ¢ FAT-¥
L0ACF: ld hl,(MS_Boot.media6) ; ᥪâ®à®¢ ­  áâ®à®­ã
add hl,hl ; *2 (ᥪâ®à®¢ ­  ¢áî ¤®à®¦ªã)
ex de,hl
ld hl,0
ld a,(tracks) ; ⥪. ¤®à®¦ª 
L0AD8: add hl,de
dec a
jr nz,L0AD8
ld a,(side) ; ⥪. áâ®à®­ 
or a
jr z,L0AE8
ld de,(MS_Boot.media6) ; ᥪâ®à®¢ ­  áâ®à®­ã
add hl,de
L0AE8: ld a,(sect) ; ⥪. ᥪâ®à
ld e,a
add hl,de
ld a,(LastSect) ; ­®¬¥à ¯®á«. á«ã¦. ᥪâ®à  ¤¨áª¥âë
cpl
inc a
ld e,a
ld d,0xFF
add hl,de
xor a
ld a,h
rra
ld h,a
ld a,l
rra
ld l,a
ld a,(MS_Boot.media1) ; ᥪâ®à®¢ ­  ª« áâ¥à
ld e,a
ld d,0
add hl,de
; <20>®¬¥ç ¥â ¢ ¡ãä¥à¥ FAT-  bad-ᥪâ®à
push hl
push de
ld a,l
rrca ; ç¥â­ë©/­¥ ç¥â­ë© ?
jr nc,L0A1C ; ç¥â­ë© ᥪâ®à
call L0A2C
ld a,(hl)
and 0x0F
or 0x70
ld (hl),a
inc hl
ld (hl),0xFF
jr L0A28
L0A1C: call L0A2C
ld (hl),0xF7
inc hl
ld a,(hl)
and 0xF0
or 0x0F
ld (hl),a
L0A28: xor a
pop de
pop hl
ret
L0A2C: push hl
xor a
ld a,h
rra
ld h,a
ld a,l
rra
ld l,a
pop de
add hl,de
ld de,L2400+512 ; ­ ç «® 1-© FAT
add hl,de
ret
;[]============================================[]
; “áâ ­®¢ª  ᬥ饭¨ï ¯®à浪®¢ëå ­®¬¥à®¢
; ᥪâ®à®¢ ­  +2 («ãç訩 ¢ à¨ ­â).
;
add_offset:
ld hl,(MS_Boot.media6) ; ç¨á«® ᥪâ®à®¢ ¢ ⥪. ä®à¬ â¥
ld a,(_OS) ; ⨯ Ž‘-¨
or a
jr z,.loc0 ; ms-dos
ld l,16 ; ç¨á«® ᥪâ®à®¢ tr-dos
dec a
ret nz ; cpm/80
.loc0: ld c,l
ld b,0
ld hl,(INTERL+1) ; ¬ áᨢ ­®¬¥à®¢ ᥪâ®à®¢
ld d,h
ld e,l
add hl,bc ; ¢ ª®­¥æ ¬ áᨢ 
ld b,c
inc b
.loc1: ld a,(hl)
push af ; ­ ª®¯¨âì ¢ á⥪¥ ­®¬¥à  ᥪâ®à®¢
dec hl
djnz .loc1
inc hl
;
inc hl ;- ᬥé. ­  2 ᥪâ®à 
inc hl ;-
ld b,c
dec b ;- ç¨á«® ᥪâ®à®¢ - 2
dec b ;-
.loc2: pop af
ld (hl),a
inc hl
djnz .loc2
;
pop af
ld (de),a
inc de
pop af
ld (de),a
pop af ; ¢ë஢­ïâì ¡ « ­á á⥪ 
ret
; “áâ ­®¢¨âì ¨­â¥à«¨¢ ¤«ï ¢á¥å ä®à¬ â®¢
init_interlive:
; ¤«ï 720kB, 1.44Mb..1.64Mb
ld b,20 ; ç¨á«® ᥪâ®à®¢
ld hl,INTERL1
ld c,1
.loc1: ld (hl),c
inc c
inc hl
djnz .loc1
; ¤«ï 1.68Mb..1.74Mb
ld b,10
ld de,010Ch ; c=12
call .loc2
ld (hl),d
inc hl
; ¤«ï 800kB..830kB
ld b,5
ld de,0106h
call .loc2
; ¤«ï TR-DOS
ld b,8
ld de,0109h
.loc2: ld (hl),d
inc hl
ld (hl),e
inc d
inc e
inc hl
djnz .loc2
ret
; ’ ¡«¨æë ¨­â¥à«¨¢®¢ ᥪâ®à®¢
;
; 720kB, 1.44Mb..1.64Mb
INTERL1: ds 20 ; 1,2,3,...20
; 1.68Mb..1.74Mb
INTERL2: ds 21 ; 1,x,2,x,3,x,... (¨­â¥à«¨¢ = 2)
; 800kB..830kB
INTERL3: ds 10 ; ¨­â¥à«¨¢ = 2
; TR-DOS
INTERL4: ds 16 ; ¨­â¥à«¨¢ = 2
; <20>®«ãç¨âì ⥪. ­®¬¥à ᥪâ®à  ¨§ â ¡«¨æë
; ¨­â¥à«¨¢  ¨ ­ áâநâì à ¡. ï祩ªã
L0B05: push hl
ld a,(L0BA9) ; áç¥â稪 ᥪâ®à®¢
ld c,a
ld b,0
INTERL: ld hl,INTERL1 ; â ¡«¨æ  ¨­â¥à«¨¢  ᥪâ®à®¢
add hl,bc
ld a,(hl) ; ¯®«ãç¨âì ¨­â¥à«¨¢ ᥪâ®à 
ld (sect),a ; ⥪. ᥪâ®à
pop hl
ret
; à §¬¥à GAP1- 
GAP1 equ 50
; ¬¥¦á¥ªâ®à­ë© ¯à®¡¥« (¯¥à¥¬. ¢¥«¨ç¨­ , § ¤ ¥âáï ¯à¨ ä®à¬ â¨à®¢ ­¨¨)
GAP3 dw 108 ; ¯®-㬮«ç ­¨î ¤«ï 1.44Mb
; <20>®¤£®â®¢¨âì § £®«®¢ª¨ ᥪâ®à®¢ ¤®à®¦ª¨ (®¤­®© áâ®à®­ë)
L0BAA: in a,(SLOT3)
push af
ld a,(hPages.BuffTrk)
out (SLOT3),a ; ¯®¤ª«. ¡ãä¥à ¤®à®¦ª¨
xor a
ld (L0BA9),a ; ®¡­ã«¨âì áç¥â稪 ᥪâ®à®¢
;
ld hl,GAP1+16
ld (L0BB5+1),hl
ld a,GAP1
ld (GAP+1),a
ld hl,L4000+96 ; ¯¥à¥©â¨ ­  ­ ç «® ᥪâ®à  (®¡®©â¨ GAP4A)
;
; 横« ¨­¨æ. § £®«®¢ª®¢ ᥪâ®à®¢
L0BB2: call L0B05 ; ¯®«ãç¨âì ⥪. ­®¬¥à ᥪâ®à  ¨§ â ¡«¨æë ¨­â¥à«¨¢ 
L0BB5: ld bc,GAP1+16 ;# ¯¥à¥©â¨ ­  § £®«®¢®ª ᥪâ®à  (66=GAP1+12ᨭåà®+IDAM)
add hl,bc ; hl= ¤à¥á § £®«®¢ª 
exx
ld bc,16 ; 12 ᨭåà®-¡ ©â + IDAM
ld hl,(GAP3)
add hl,bc
ld (L0BB5+1),hl ; ãáâ. ¬¥¦á¥ªâ. ¯à®¡¥«
exx
; § £®«®¢®ª ᥪâ®à 
ld a,(tracks) ; ⥪. ¤®à®¦ª 
ld (hl),a
inc hl
;
ld a,(_OS)
or a
jr z,.loc1
dec a
jr z,.loc2 ; ¤«ï TR-DOS ¢á¥£¤  0-ï áâ®à®­ 
;
.loc1: ld a,(side) ; ⥪. áâ®à®­ 
.loc2: ld (hl),a
inc hl
ld a,(sect) ; ⥪. ᥪâ®à
ld (hl),a
inc hl
L0BB6: ld bc,553 ; ¯®á«¥ § £®«®¢ª  ᥪâ®à  ¤® ª®­æ  ᥪâ®à 
add hl,bc
ld a,(L0BA9) ; áç¥â稪 ⥪. ᥪâ®à 
inc a
ld (L0BA9),a
loc05: cp 18 ; ¯®á«. ᥪâ®à ?
jr nz,L0BB2
pop af
out (SLOT3),a ; ¢®ááâ. à ¡. áâà ­¨æã
ret
; ‘®§¤ ¥â ¢ ¡ãä¥à¥ áâàãªâãàã ¤®à®¦ª¨
; <20>ãä¥à: 0xC000..0xFFFF
L0B21: in a,(SLOT3)
push af
ld a,(hPages.BuffTrk)
out (SLOT3),a ; ¯®¤ª«. ¡ãä¥à ¤®à®¦ª¨
call CLEAR ; § ¯®«­¨âì ¡ãä¥à ª®¤®¬ 0x4E
ld hl,L4000 ; ­ ç «® ¡ãä¥à  ¤ ­­ëå ¤®à®¦ª¨
xor a
ld (L0BA9),a ; ®¡­ã«¨âì áç¥â稪 ᥪâ®à®¢
; <20> ç «® ¤®à®¦ª¨
; GAP4A, 80 ¡ ©â
ld bc,504Eh ; 80 ¡ ©â 4Eh
call FILL ; c -> (hl), dec b
ld bc,0C00h ; 12 ᨭåà®-¡ ©â
call FILL
ld bc,03F6h ; 3 ¡ ©â  F6 (C2) |
call FILL ; | IAM
ld (hl),0FCh ; 1 ¡ ©â FC |
inc hl
; ­ ç «® ᥪâ®à  (+96 ¯¥à¢®£® ᥪâ®à  ®â ­ ç. ¤®à®¦ª¨)
L0B3E: ; GAP1, 50 ¡ ©â
GAP: ld b,GAP1 ; GAP1/GAP3
ld c,4Eh
call FILL ; c -> (hl), dec b
; ᨭåà®-¡ ©âë
ld bc,0C00h ; 12 ᨭåà®-¡ ©â®¢
call FILL
;
ld bc,03F5h ; 3 ¡ ©â  F5 ¬ àª¥à  (A1) |
call FILL ; | IDAM
ld (hl),0FEh ; ¨ FE, ¥£® ¨¤¥­â¨ä¨ª â®à |
inc hl
; ‡ £®«®¢®ª ᥪâ®à 
ld bc,0300h ; 3 ¡ ©â  § £®«®¢ª  ᥪâ®à 
call FILL
SecCode:ld (hl),2 ; ª®¤ à §¬¥à  ᥪâ®à 
inc hl
ld (hl),0F7h ; 1 ¡ ©â CRC
inc hl
ld bc,164Eh ; 22 ¡ ©â  GAP2
call FILL
ld bc,0C00h ; 12 ᨭåà®-¡ ©â®¢
call FILL
; DATA AM
ld bc,03F5h ; 3 ¡ ©â  F5 ¬ àª¥à  (A1)
call FILL
ld (hl),0FBh ; ¨ ¥£® ¨¤¥­â¨ä¨ª â®à
inc hl
; Ž¡« áâì ¤ ­­ëå
ld bc,00E5h ; 256 ¡ ©â®¢ § ¯®«­¨â¥«ï
call FILL ; c -> (hl), dec b
ld a,(_OS) ; ⨯ ⥪ã饩 Ž‘
or a
jr z,.loc1 ; ms-dos
dec a
jr z,.loc2 ; tr-dos
; cpm-80
ld bc,00E5h ; 256
call FILL
ld bc,00E5h ; 256
call FILL
.loc1: ld bc,00E5h ; 256
call FILL
; CRC ®¡« á⨠¤ ­­ëå
.loc2: ld (hl),0F7h ; 1 ¡ ©â
; Š®­¥æ ᥪâ®à 
inc hl
ld a,(GAP3)
ld (GAP+1),a ; ãáâ. ¬¥¦á¥ªâ. ¯à®¡¥«
ld a,(L0BA9) ; áç¥â稪 ­®¬¥à  ⥪. ᥪâ®à 
inc a
ld (L0BA9),a
loc08: cp 18 ; ¯®á«¥¤­¨© ᥪâ®à ?
jr nz,L0B3E
; GAP4B, ®áâ â®ª ¤®à®¦ª¨ (¡ãä¥à 㦥 § ¯®«­¥­ 0x4E)
pop af
out (SLOT3),a ; ¢ª«. à ¡®çãî áâà ­¨æã 0xC000
ret
FILL: ld (hl),c
inc hl
djnz FILL
ret
;!FIXIT ¢®â ­ å¥à  á⥪®¬?
; ‡ ¯®«­¥­¨¥ ¡ãä¥à  áâàãªâãàë ¤®à®¦ª¨ ª®¤®¬ 0x4E
CLEAR: ld (L0ACD),sp
ld sp,0 ; § ¯®«­¥­¨¥ á 0xFFFF
ld bc,0x4E4E ; ª®¤ § ¯®«­¥­¨ï
.loc1: push bc
ld hl,0
add hl,sp
ld a,h
cp 0xC0 ; áâ. ¡ ©â ­¨¦­¥© £à ­¨æë
jr nz,.loc1
ld a,l
or a
jr nz,.loc1
ld sp,(L0ACD)
ret
; ‘®§¤ ¥â ¢ ¡ãä¥à¥ á¨á⥬­ãî ®¡« áâì ¤¨áª¥âë (boot-ᥪâ®à, FAT, Root dir).
; <20>ãä¥à: L2400...
; ¬ ªá. ¤«¨­  ®¡« áâ¨: 0x4C00 ¤«ï 1.74Mb
L09A8: ld de,L2400 ; ¡ãä¥à Boot-ᥪâ®à 
ld hl,MS_Boot ; ms-dos boot-ᥪâ®à
ld bc,MS_Boot.SIZE ; ¤«¨­  boot- 
ldir ;!TEST
ex de,hl ; hl = ­ ç «® FAT ¢ ¡ãä¥à¥
loc07: ld bc,16896 ; 6656/16896 ¤«¨­  FAT-®¢ + Root dir
ld e,0 ; ¡ ©â § ¯®«­¥­¨ï
call L0994 ; ¯¥à¥ª çª  ¥ -> (hl)
ld a,(MS_Boot.media4) ; ¡ ©â-®¯¨á â¥«ì ä®à¬ â  ¤¨áª 
ld hl,L2400+512
ld (hl),a ; § ­¥á⨠¯¥à¢ë¬ ¡ ©â®¬ ¢ FAT
inc hl
ld (hl),0FFh ; 2 ¨ 3-© ¡ ©âë FAT
inc hl
ld (hl),0FFh
call CreateLabel ; á®§¤ âì ¬¥âªã ¤¨áª¥âë, ¥á«¨ § ¤ ­ 
call CreateSerialNumber
ret
L0994: ld (hl),e
inc hl
dec bc
ld a,b
or c
jr nz,L0994
ret
; <20> áâநâì ä®à¬ â¨«ªã ­  ⥪. ä®à¬ â ¤¨áª¥âë
FSETUP: ld a,(_OS)
or a
jr nz,noMSDOS
.sectorsAll+1: ld a,18 ; ç¨á«® ᥪâ®à®¢
ld (loc05+1),a
ld (loc08+1),a
.sectorsSide+1: ld hl,18 ; ᥪâ®à®¢ ­  áâ®à®­ã
ld (MS_Boot.media6),hl
inc a ; § ¯à¥¤. ᥪâ®à
ld (_msdos.maxSector0),a
ld (_msdos.maxSector1),a
ld (loc06+1),a
.lastSector+1: ld a,34 ; ¯®á«. á«ã¦. ᥪâ®à ¤¨áª¥âë
ld (LastSect),a
.sectorsPerCluster+1:
ld a,1 ; ᥪâ®à®¢ ­  ª« áâ¥à
ld (MS_Boot.media1),a
frm4: ld a,BOOT_SECTOR.Floppy_3x5_1x44 ; ¡ ©â ä®à¬ â 
ld (MS_Boot.media4),a
frm5: ld hl,16896 ; à §¬¥à FAT-®¢ + Root dir
ld (loc07+1),hl
frm6: ld hl,224 ; § ¯¨á¥© ¢ ª®à­¥
ld (MS_Boot.media2),hl
ASect: ld hl,2880 ; ᥪâ®à®¢ ­  ¤¨áª¥
ld (MS_Boot.media3),hl
FSect: ld hl,9 ; ᥪâ®à®¢ ­  FAT
ld (MS_Boot.media5),hl
ret
;
noMSDOS: dec a
jr nz,SetCPM
; <20> áâநâì ä®à¬ â¨«ªã ­  ä®à¬ â TR-DOS
ld a,16 ; ç¨á«® ᥪâ®à®¢
jr setOS
; <20> áâநâì ä®à¬ â¨«ªã ­  ä®à¬ â CP/M-80
SetCPM: ld a,5 ; ç¨á«® ᥪâ®à®¢
setOS: ld (loc05+1),a
ld (loc08+1),a
inc a ; § ¯à¥¤. ᥪâ®à
ld (loc06+1),a
ret
; ‘®§¤ ¥â ¢ ¡ãä¥à¥ á¨á⥬­ãî ®¡« áâì TR-DOS ¤¨áª¥âë.
SysAreaTRDOS:
; ®ç¨áâ¨âì ¬¥áâ® ¤® ¡ãâ 
ld hl,L2400 ; ¡ãä¥à á¨áâ. ®¡« áâ¨
ld bc,1000h ; 16*256
ld e,0 ; ¡ ©â § ¯®«­¥­¨ï
call L0994 ; ®ç¨áâ¨âì á¨áâ. ®¡« áâì
ld a,(sFlag1)
or a
jr nz,.loc0 ; ®è¨¡ª¨ à ¡®âë á ä ©«®¬ "boot.$b"
ld a,(cSystem) ; ä« £ á®§¤ ­¨ï boot-¤¨áª¥âë
or a
jr z,.loc0 ; ­¥ § £à㧮筠ï
;
ld hl,NameBt
ld de,L2400
ld bc,13
ldir
inc hl
ldi
ex de,hl
ld (hl),0
inc hl
ld (hl),1
;
.loc0: ld hl,L2400+2274 ; +226 ®â ­ ç « 
ld (hl),1 ; áâ.¡ ©â ­ ç «® ᢮¡. ¬¥áâ  ­  ¤¨áª¥
inc hl
ld (hl),22 ; ⨯ à §¬¥âª¨ ¤¨áª 
inc hl ; ç¨á«® ä ©«®¢ ­  ¤¨áª¥
inc hl
ld (hl),240 ; ç¨á«® ᢮¡. ᥪâ®à®¢
inc hl ;
ld (hl),9 ;
inc hl
ld (hl),16 ; +231 ç¨á«® ᥪâ®à®¢ ­  ¤®à®¦ª¥
;
ld de,LABEL ; ¡ãä¥à ¨¬¥­¨ ¬¥âª¨ ä®à¬ â¨«ª¨
ld a,(de)
or a
jr nz,.loc1 ; ¬¥âª  § ¤ ­ 
ld de,.loc4 ; ¬¥âª  ¯® 㬮«ç ­¨î
.loc1: ld hl,L2400+2293 ; ¯¥à¥©â¨ ­  ¬¥âªã ¢ ¡ãä¥à¥
ex de,hl
ld b,11 ; ¤«¨­  ¬¥âª¨
.loc2: ld a,(hl)
or a
jr z,.loc3
ld (de),a
inc hl
inc de
djnz .loc2
ret
.loc3: ld a," "
ld (de),a
inc de
djnz .loc3
ret
; tr-dos ¬¥âª  ¯® 㬮«ç ­¨î
.loc4: db "FFORMAT",0
LastSect: db 34 ; 34/14, ¯®á«. á«ã¦. ᥪâ®à
DISK: db 0 ; ¤¨áª (0=A,1=B)
L0AC8: dw 0 ; ⥪.  ¤à¥á ¢ á¨áâ. ¡ãä¥à¥
L0ACB: db 0 ; áç¥â稪 ¯®¯ë⮪ ®¦¨¤ ­¨ï
L0ACD: dw 0 ; á®åà. á⥪ 
L0BA9: db 0 ; áç¥â稪 ᥪâ®à®¢
L0C63: db 0 ; ⥪. ¯®¯ë⪨ ç⥭¨ï ᥪâ®à 
;L0C64: db 0 ; ⥪. ç¨á«® 3-å à §®¢ëå ¯®¯ë⮪ ç⥭¨ï
BadSect: dw 0 ; ç¨á«® bad-ᥪâ®à®¢
sect: db 0 ; ⥪. ᥪâ®à
side: db 0 ; ⥪. áâ®à®­ 
tracks: db 0 ; ⥪. ¤®à®¦ª 
RetCode: db 0 ; ª®¤ ¢®§¢à â  § ¯¨á¨ ᥪâ®à /¤®à®¦ª¨
density: db 0 ; 13h/12h ०¨¬ 1.44Mb/720kB
; ƒ« ¢­ ï äã­ªæ¨ï ä®à¬ â¨à®¢ ­¨ï
L0BFF: ld a,(density)
ld c,8Fh ; turbo on/off
RST ToBIOS
ld hl,0
ld (BadSect),hl ; ç¨á«® bad-ᥪâ®à®¢
call InitElapsedTime ; á®åà. ¨ á¡à®á¨âì ¢à¥¬ï
call L07AF ; ®¦¨¤ ­¨¥ £®â®¢­®á⨠­£¬¤
; 横« ä®à¬ â. ¤®à®¦¥ª
L0C14: call FORMAT_TRK ; ä®à¬ â¨à®¢ ­¨¥
ret c ; ä®à¬ â. ¯à¥à¢ ­®
ret nz ; ¥áâì ®è¨¡ª¨ ç⥭¨ï
; ­¥â ®è¨¡®ª
ld a,(Mode2) ; "Optimize sectors"
or a
call nz,add_offset ; ᬥé. +2 ª ¯®à浪. ­®¬¥à ¬ ᥪâ®à®¢
ld hl,tracks
inc (hl) ; ++⥪. ¤®à®¦ª¨
TRACKS: ld a,82
cp (hl)
jr nc,L0C14
xor a ; ª®­¥æ ä®à¬-­¨ï (¨«¨ ¯à¨ ®è¨¡ª å)
ret
; ”®à¬ â¨à. ®¤­®© ¤®à®¦ª¨
FORMAT_TRK: xor a
ld (side),a ; ⥪. áâ®à®­ 
ld (RetCode),a ; á¡à. ¢®§¢à. ª®¤
.loop: ;ld a,2
;ld (L0C64),a ; ç¨á«® 3-å à §®¢ëå ¯®¯ë⮪
call L0BAA ; ¨­¨æ. § £®«®¢ª®¢ ᥪâ®à®¢ ¤®à®¦ª¨
call L0759 ; ãáâ. £®«®¢ªã ­  ⥪. ¤®à®¦ªã
call L091B ; § ¯¨áì æ¥«®© ¤®à®¦ª¨
call L0C87 ; â¥áâ ­  ç⥭¨¥ ᥪâ®à®¢ ®¤­®© áâ®à®­ë
ret c ; ¢ë室 - ¯à®æ¥áá ¯à¥à¢ ­
ret nz ; ¥áâì ®è¨¡ª¨ ç⥭¨ï
call Map ; ¢ë¢®¤ ª àâë
call L0D93 ; ¢ë¢®¤ "Side: X"
call L0D92 ; ¢ë¢®¤ "Cylinder: XX"
call ElapsedTime ; ¢ë¢®¤ ¢à¥¬¥­¨ à ¡®âë
call L0D25 ; ¯à¨§­ ª ­ ¦ â¨ï ª« ¢¨è¨
ret c ; ¯à®æ¥áá ¯à¥à¢ ­
ld hl,side
inc (hl) ; ᬥ­  áâ®à®­ë
ld a,(hl) ; ⥪. áâ®à®­ 
cp 1+1 ; § ¯à¥¤¥«ì­ ï ?
jr nz,.loop
xor a
ret
; ‚뢮¤ ⥪. ­®¬¥à  ¤®à®¦ª¨
L0D92: ld de,1323h ; Y/X ¯®«®¦. ªãàá®à 
LD C,BIOS.LP_SET_PLACE
RST ToBIOS
ld a,(tracks) ; ⥪. ¤®à®¦ª 
ld l,a
ld bc,10 ; ¤¥áï⪨
ld h,b
ld de,space4
ld iy,tmp1
res 7,(iy+0)
call GetLenN16
ld a,l
add a,"0"
ld (de),a
ld hl,space4
ld bc,0285h ; ¢ë¢®¤ áâப¨
ld e,ColFormNumber ;  âਡãâ
RST ToBIOS
ret
; ‚뢮¤ ⥪. áâ®à®­ë
L0D93: ld de,1316h ; Y/X ¯®«®¦. ªãàá®à 
LD C,BIOS.LP_SET_PLACE
RST ToBIOS
ld a,(side) ; ⥪. áâ®à®­ 
add a,"0"
ld bc,0181h ; ¢ë¢®¤ ᨬ¢®« 
ld e,ColFormNumber ;  âਡãâ
RST ToBIOS
ret
; ‘®åà ­¥­¨¥ ¨ á¡à®á ⥪. ¢à¥¬¥­¨
InitElapsedTime:
ld c,0F5h ; ¯à®¢¥à¨âì ­ «¨ç¨¥ ¬/á CMOS
RST ToBIOS
jr nc,.loc1 ; ¥áâì ¬/á
xor a ; false
ld (cmos),a
ret
.loc1: ld a,1 ; true
ld (cmos),a
ld de,140Fh ; Y/X ¯®«®¦. ªãàá®à 
LD C,BIOS.LP_SET_PLACE
RST ToBIOS
ld hl,.string
ld bc,0E85h ; ¢ë¢®¤ áâப¨
ld e,ColFormText ; 梥â áâப¨
RST ToBIOS
ld hl,.time
ld bc,0885h ; ¢ë¢®¤ áâப¨
ld e,ColFormNumber ;  âਡãâ
RST ToBIOS
; á®åà. ⥪. ¢à¥¬ï
ld c,21h
RST ToDSS
ld (hours),hl ; ç áë/¬¨­ãâë
ld a,b
ld (seconds),a ; ᥪ㭤ë
; á¡à®á¨âì ¢à¥¬ï
ld h,0 ; ç áë
ld l,h ; ¬¨­ãâë
ld b,h ; ᥪ㭤ë
ld c,22h ; ãáâ. ⥪ã騥 ¤ âã ¨ ¢à¥¬ï
RST ToDSS
ret
.string:db "Elapsed time: "
.time: db "00:00:00"
hours: dw 0 ; ç áë/¬¨­ãâë
seconds:db 0 ; ᥪ㭤ë
cmos: db 0 ; ä« £ ­ «¨ç¨ï ¬/á CMOS (false/true)
; ‚뢥á⨠¢à¥¬ï à ¡®âë
ElapsedTime:
ld a,(cmos)
or a
ret z ; ­¥â ¬/á CMOS
ld de,141Dh ; Y/X ¯®«®¦. ªãàá®à 
LD C,BIOS.LP_SET_PLACE
RST ToBIOS
;
ld c,21h ; ¯®«ãç¨âì ⥪. ¢à¥¬ï
RST ToDSS
ex de,hl
ld a,d
ld hl,elptime
call GetData ; ç áë
ld a,e
call GetData ; ¬¨­ãâë
ld a,b
call GetData ; ᥪ㭤ë
;
ld hl,elptime
ld bc,0885h ; ¢ë¢®¤ áâப¨
ld e,ColFormNumber ;  âਡãâ
RST ToBIOS
ret
elptime:db "00:00:00"
; ‚뢮¤ ¤¥áï⪮¢ á ¢¥¤ã騬 ­ã«¥¬
; ¢å: A=ç¨á«®
; HL=¡ãä¥à
GetData:ld c,"0"-1
.loc1: inc c
sub 10
jr nc,.loc1
ld (hl),c
inc hl
add a,58
ld (hl),a
inc hl
inc hl
ret
; ‚®ááâ. á¨á⥬­®¥ ¢à¥¬ï
RestoreTime:
push af
ld a,(cmos)
or a
jr z,.loc1 ; ­¥â ¬/á CMOS
; ¯®«ãç¨âì ⥪. ¢à¥¬ï (elapsed time)
ld c,21h
RST ToDSS
; d - ¤¥­ì
; e - ¬¥áïæ
; ix - £®¤
; h - ç á
; l - ¬¨­ãâë
; b - ᥪ㭤ë
push de
ex de,hl ; de = elapsed time
ld hl,(hours) ; ç áë/¬¨­ãâë
ld a,(seconds) ; ᥪ㭤ë
call CalcTime
pop de
; ãáâ. ¢à¥¬ï
ld c,22h
RST ToDSS
.loc1: pop af
ret
; ª®à४â¨à®¢ª  ¢à¥¬¥­¨
CalcTime:
ld c,60
; ᥪ㭤ë
add a,b
cp c
jr c,.loc1
inc e ; ++¬¨­ãâë
sub c
.loc1: ld b,a
; ¬¨­ãâë
ld a,l
add a,e
cp c
jr c,.loc2
inc d ; ++ç áë
sub c
.loc2: ld l,a
; ç áë
ld a,d
add a,h
cp 24
jr c,.loc3
sub 24
.loc3: ld h,a
ret
;-------------------------------------------------+
; MS-DOS § £àã§ç¨ª ¤¨áª¥â (¨§ fformat), 512 ¡ ©â. |
; ä®à¬ â 1.44Mb. |
; ¤«ï 720kB á¬. ¬¥âªã '#' |
;-------------------------------------------------+
MS_Boot:
.pc_code: db 0xEB,0xFE,0x00 ; 0-2. 3 ¡ ©â , ª®¤ ¯¥à¥å®¤  ­  § £àã§ç¨ª
; 8 ¡ ©â, OEM ID
db "DSS "
.dss_major_ver: db "1."
.dss_minor_ver: db "71" ;3-10
;BPB, 17 ¡ ©â
.BPB: dw 512 ; ¡ ©â ­  ᥪâ®à
.media1: db 1 ; # 2, ᥪâ®à®¢ ­  ª« áâ¥à
.reserved: dw 1 ; § à¥§¥à¢. ᥪâ®à®¢
.fat_num: db 2 ; ç¨á«® FAT-®¢
.media2: dw 224 ; # 112, § ¯¨á¥© ¢ ª®à­¥
.media3: dw 2880 ; # 1440, ¢á¥å ᥪâ®à®¢ ­  ¤¨áª¥
.media4: db BOOT_SECTOR.Floppy_3x5_1x44 ; # 0xF9, ¡ ©â ä®à¬ â 
.media5: dw 9 ; # 3, ᥪâ®à®¢ ­  FAT
.media6: dw 18 ; # 9, ᥪâ®à®¢ ­  áâ®à®­ã
dw 2 ; ª®«-¢® áâ®à®­ ¤¨áª 
;extended boot-record
dw 0,0 ; áªàëâëå ᥪâ®à®¢
dw 0,0 ; ¢á¥å ᥪâ®à®¢ ­  ¤¨áª¥
dw 0 ; 䨧. ­®¬¥à ¤¨áª 
db 0x29 ; ᨣ­ âãà  à áè. boot-§ ¯¨á¨
.serial: dw 0000,0000 ; á¥à¨©­ë© ­®¬¥à ¤¨áª¥âë 2D3A:96C2
.label: db "NO NAME " ; 11 ¡ ©â, ¬¥âª  ¤¨áª¥âë
db "FAT12 " ; 8 ¡ ©â, ID ä ©«®¢®© á¨á⥬ë
block 510-62,0
dw #AA55
.SIZE EQU $-MS_Boot
;[]========================================================[]
; ޝà®á áâ âãá  ­ ¦ â¨ï ª« ¢¨è¨
; ¢ë室: NZ - ­ ¦ â  (¡ãä¥à ­¥ ¯ãáâ)
L0D25: ld c,31h
RST ToDSS
ret z
cp 0Dh ; Enter
jr z,.loc3
cp 1Bh ; Esc
jr z,.loc3
and 5Fh
cp "C" ; Hot-key
jr z,.loc3
xor a
ret
; ®ç¨áâ¨âì ¡ãä¥à ª« ¢ë
.loc3: ld bc,3135h
RST ToDSS
; ®ª­® "¯à¥à¢ âì ¯à®æ¥áá ?"
call okno0
ld a,(hl)
cp cmOkey
jr z,.loc2
.loc1: call HiddenMouse ; áªàëâì ¬ëèªã
ld a,(tracks)
out (REGDATA),a
ld a,18h ; ¯¥à¥©â¨ ­  § ¤ ­. ¤®à®¦ªã
call FDC_CMD ; § ­¥á⨠ª®¬ ­¤ã
call L07B3 ; ®¦¨¤ ­¨¥ £®â®¢­®á⨠<20>ƒŒ„
ret z ; ­¥â ®è¨¡®ª
call okno3 ; "‚áâ ¢ì⥠¤¨áª¥âã"
ld a,(hl)
cp cmOkey
jr z,.loc1
.loc2: call Fresh
xor a
scf
ret