FFORMAT/FORMAT.ASM
2025-05-02 04:08:17 +10:00

1634 lines
33 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,1Ch
out (SysPort),a
call A0626 ; á¡à®á¨âì ª®­â஫«¥à
; ¤¥à­ãâì £®«®¢ª®©
ld a,70
out (REGDATA),a
ld a,18h ; ¯¥à¥©â¨ ­  § ¤ ­. ¤®à®¦ªã
call A092C ; § ­¥á⨠ª®¬ ­¤ã
call A092A ; ­  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 L09D9 ; § ¯¨áì á¨áâ. ®¡« áâ¨
call ClsDial ; § ªàëâì ®ª­® ¤¨ «®£ 
pop af
ld (ColDialWn),a
;
ld a,(RetCode)
or a
jr nz,Parsing ; ¡ë«¨ ®è¨¡ª¨ ¯à¨ § ¯¨á¨ á¨áâ. ®¡« áâ¨
call A092A ; ­  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,4
out (SysPort),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
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-î ¤®à®¦ªã
A092A: ld a,8
; ¯®á« âì ª®¬ ­¤ã
A092C: 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-¡ãâ 
L09D9: ld a,(density)
ld c,8Fh ; turbo on/off
RST ToBIOS
xor a
ld (tracks),a
call A092A ; ¯¥à¥©â¨ ­  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
.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 ; áâ®à®­ã ¨ ¤¨áª ¢ ª®­â஫«¥à
L08F0: call L0906 ; § ¯¨áì ᥪâ®à 
ret nz ; ®è¨¡ª¨ § ¯¨á¨
ld a,(sect) ; ⥪. ᥪâ®à
inc a
ld (sect),a
loc02: cp 18+1 ; § ¯à¥¤¥«ì­ë© ᥪâ®à
jr nz,L08F0
; § ¯¨áì 1-© áâ®à®­ë
ld a,1
ld (side),a ; ⥪. áâ®à®­ 
ld (sect),a ; ⥪. ᥪâ®à
call L0870 ; áâ®à®­ã ¨ ¤¨áª ¢ ª®­â஫«¥à
L08F6: call L0906 ; § ¯¨áì ᥪâ®à 
ret nz ; ®è¨¡ª¨ § ¯¨á¨
ld a,(sect) ; ⥪. ᥪâ®à
inc a
ld (sect),a
loc03: cp 18+1 ; § ¯à¥¤. ᥪâ®à ?
jr nz,L08F6
; § ¯¨áì § £àã§ç¨ª  ç¥à¥§ sys
ld a,(cSystem) ; ä« £ á®§¤ ­¨ï á¨áâ. ¤¨áª¥âë
or a
ret z
;
;
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,(Page1)
ex af,af'
ld a,(hPages.TRBoot)
out (Page1),a ; ¯®¤ª«. ¡ãä¥à
ld hl,4000h ; ­ ç «® Page1
ld de,L2400+1000h
SizeBt: ld bc,4000h
ldir
ex af,af'
out (Page1),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,(Page3)
push af
ld a,(hPages.BuffTrk)
out (Page3),a ; ¯®¤ª«. ¡ãä¥à áâàãªâãàë ¤®à®¦ª¨
ld hl,L4000 ; ­ ç «® ¤ ­­ëå
ld (L0AC8),hl
call L0870 ; ¢ ª®­â஫«¥à áâ®à®­ã ¨ ¤¨áª
ld a,(tracks) ;- ⥪. ¤®à®¦ª 
out (REGTRK),a ;- ॣ¨áâà ¤®à®¦ª¨
ld a,0xF4 ; § ¯¨áì ¤®à®¦ª¨
call A0875
pop af
out (Page3),a
ret
; “áâ. £®«®¢ªã ­  á«¥¤. ¤®à®¦ªã
NxtTrack:
ld hl,tracks
inc (hl)
; “áâ. £®«®¢ªã ­  ⥪. ¤®à®¦ªã
L0759: ld a,(tracks) ; ⥪. ¤®à®¦ª 
out (REGDATA),a ; ॣ¨áâà ¤ ­­ëå
ld a,18h ; ¯¥à¥©â¨ ­  § ¤ ­. ¤®à®¦ªã
jp A092C ; § ­¥á⨠ª®¬ ­¤ã
; —<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 A092C ; § ­¥á⨠ª®¬ ­¤ã
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,(Page3)
push af
ld a,(hPages.BuffTrk)
out (Page3),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 (Page3),a ; ¢®ááâ. à ¡. áâà ­¨æã
ret
; ‘®§¤ ¥â ¢ ¡ãä¥à¥ áâàãªâãàã ¤®à®¦ª¨
; <20>ãä¥à: 0xC000..0xFFFF
L0B21: in a,(Page3)
push af
ld a,(hPages.BuffTrk)
out (Page3),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 |
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 ¬ àª¥à  |
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 ¡ ©â  ¬ àª¥à 
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 (Page3),a ; ¢ª«. à ¡®çãî áâà ­¨æã 0xC000
ret
FILL: ld (hl),c
inc hl
djnz FILL
ret
; ‡ ¯®«­¥­¨¥ ¡ãä¥à  áâàãªâãàë ¤®à®¦ª¨ ª®¤®¬ 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,512 ; ¤«¨­  boot- 
ldir
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
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
frm1: ld a,18 ; ç¨á«® ᥪâ®à®¢
ld (loc05+1),a
ld (loc08+1),a
SSect: ld hl,18 ; ᥪâ®à®¢ ­  áâ®à®­ã
ld (MS_Boot.media6),hl
inc a ; § ¯à¥¤. ᥪâ®à
ld (loc02+1),a
ld (loc03+1),a
ld (loc06+1),a
frm2: ld a,34 ; ¯®á«. á«ã¦. ᥪâ®à ¤¨áª¥âë
ld (LastSect),a
frm3: ld a,1 ; ᥪâ®à®¢ ­  ª« áâ¥à
ld (MS_Boot.media1),a
frm4: ld a,0xF0 ; ¡ ©â ä®à¬ â 
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,0x3C,0x90 ; 3 ¡ ©â , ª®¤ ¯¥à¥å®¤  ­  § £àã§ç¨ª
; 8 ¡ ©â, OEM ID
db "DSS "
.dss_major_ver: db "1."
.dss_minor_ver: db "71"
;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 0xF0 ; # 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 ä ©«®¢®© á¨á⥬ë
;--------------;
/*
db 0xFA,0x33,0xD2,0x8E,0xD2,0xBC,0xF0,0x7B
db 0xFB,0xB8,0xC0,0x07,0x8E,0xD8,0xE8,0x89
db 0x00,0xBE,0xFE,0x00,0xFC,0xBB,0x70,0x00
db 0xE8,0x25,0x00,0x32,0xE4,0xCD,0x16,0x3C
db 0x1B,0x74,0x18,0x3C,0x0D,0x74,0x08,0x3C
db 0x20,0x74,0x04,0x3C,0x6F,0x75,0xEC,0xBE
db 0xDF,0x01,0xE8,0x0B,0x00,0xBE,0xC1,0x01
db 0xE8,0x05,0x00,0xE8,0x5C,0x00,0xCD,0x19
db 0xAC,0x0A,0xC0,0x74,0x46,0x3C,0x01,0x75
db 0x05,0xAC,0x8A,0xD8,0xEB,0xF2,0x3C,0x02
db 0x75,0x0A,0xAD,0x8B,0xD0,0x56,0xE8,0x62
db 0x00,0x5E,0xEB,0xE4,0x3C,0x03,0x75,0x0A
db 0xAC,0xA2,0x00,0x00,0x89,0x36,0x01,0x00
db 0xEB,0xD6,0x3C,0x04,0x75,0x0C,0xFE,0x0E
db 0x00,0x00,0x74,0x04,0x8B,0x36,0x01,0x00
db 0xEB,0xC6,0x33,0xC9,0xA8,0x80,0x74,0x05
db 0x24,0x7F,0x8A,0xC8,0xAC,0x41,0xE8,0x17
db 0x00,0xEB,0xB5,0x36,0xA1,0x6C,0x04,0x05
db 0x04,0x00,0x36,0x39,0x06,0x6C,0x04,0x72
db 0xF9,0xC3,0xB8,0x03,0x00,0xCD,0x10,0xC3
db 0x56,0x3C,0x0A,0x74,0x10,0xB4,0x09,0xCD
db 0x10,0x02,0xD1,0x80,0xFA,0x50,0x73,0x05
db 0xE8,0x08,0x00,0x5E,0xC3,0xFE,0xC6,0x32
db 0xD2,0xEB,0xF5,0xB4,0x02,0xCD,0x10,0xC3
; 21 ¡ ©â
db " FFORMAT Version "
db major_version + "0","."
db (minor_version / 10) + "0",(minor_version % 10) + "0"
;
db 0xBA,0x20,0x01,0x1F,0x03,0x07,0xCF,0xB0
db 0x04,0x91,0xB0,0x01,0x4E,0x80,0xC9,0xA7
db 0xCD,0x80,0xBB,0x01,0x1F,0x93,0xB0,0x03
db 0x06,0x91,0xB0,0x01,0x4E,0x80,0xBA,0xA7
db 0x20,0x80,0xBA,0x01,0x07,0x81,0xB0,0x01
db 0x1F,0x91,0xB0,0x04,0x91,0xB0,0x01,0x4E
db 0x80,0xC8,0xA7,0xCD,0x80,0xBC,0x01,0x07
db 0x81,0xB0,0x01,0x1F,0x91,0xB0,0x93,0xB0
db 0x01,0x07,0xA9,0xB0,0x01,0x1F,0x91,0xB0
db 0x03,0x07,0xCF,0xB0,0x04,0x01,0x70
; 16 ¡ ©â
db " RLE Boot record"
db 0xC6,0x20,0x01,0x4F,0x02,0x15,0x0A
; 36 ¡ ©â
db "Sorry, but this disk is not bootable"
db 0x02,0x16,0x0B
; 33 ¡ ©â 
db "Insert SYSTEM disk into the drive"
db 0x01,0x7F,0x02,0x22,0x0D
; ­¥ ­ ¦ âë© ¡ãâ®­
db "",82h,20h,01h,7Ch,"O",01h,7Fh,"k",82h,20h,""
db 0x01,0x40,0x80,0xDC,0x02,0x23,0x0E,0x89
db 0xDF,0x02,0x00,0x19,0x00,0x01,0x4E,0x02
db 0x22,0x0D,0x20,0x01,0x7F
; ­ ¦ âë© ¡ãâ®­
db "",82h,20h,01h,7Ch,"O",01h,7Fh,"k",82h,20h,""
db 0x01,0x4E,0x02,0x23,0x0E,0x89,0x20,0x02
db 0x00,0x19,0x00
dw 0xAA55
*/
;[]========================================================[]
; ޝà®á áâ âãá  ­ ¦ â¨ï ª« ¢¨è¨
; ¢ë室: 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 A092C ; § ­¥á⨠ª®¬ ­¤ã
call L07B3 ; ®¦¨¤ ­¨¥ £®â®¢­®á⨠<20>ƒŒ„
ret z ; ­¥â ®è¨¡®ª
call okno3 ; "‚áâ ¢ì⥠¤¨áª¥âã"
ld a,(hl)
cp cmOkey
jr z,.loc1
.loc2: call Fresh
xor a
scf
ret