FORMAT/FDD_LOW.asm

1652 lines
32 KiB
NASM
Raw Permalink 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.

MODULE FDD_LOW_FORMAT
; <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
RET
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 ; "®è¨¡ª  § ¯¨á¨ á¨áâ. ®¡« á⨠¨«¨ ­¥ ᮢ¬. ä®à¬ â"
;
;!FIXIT "§ ¯à¥é¥­  § ¯¨áì"
ReadOnly:
;!FIXIT ­¥â ¤¨áª¥âë (ª®¤ 80h)
nodisk: ;call okno3 ; "‚áâ ¢ì⥠¤¨áª¥âã"
;ld a,(hl)
;cp cmOkey
;ret nz
;; ¤¨áª¥â  ¢ë­ãâ  (¢ ¯à®æ¥áᥠä®à¬-­¨ï)
;jp FFORM1
;!FIXIT "®è¨¡ª  § ¯¨á¨ á¨áâ. ®¡« á⨠¨«¨ ­¥ ᮢ¬. ä®à¬ â"
okno2: DI
HALT
; 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 ; ¢ë¢¥á⨠­ ç. ¤ ­­ë¥
;!FIXIT ¢ë¢®¤ ­®¬¥à  ¤®à®¦ª¨
L0D92:
;!FIXIT ¢ë¢®¤ áâ®à®­ë
L0D93:
DI
HALT
; ‘ªàëâì ¬ëèªã
; 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,BuffTrk ; ­ ç «® ¤ ­­ëå
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" - ¯à®æ¥áá ¯à¥à¢ ­
;!FIXIT ­ ¤® «¨?
maska equ 05h ; 5/2/0 "¬ áª " ok/bad/wrn ¤«ï ãáâ. âਡãâ  æ¢¥â 
bad: db maska ;  âਡãâ bad=0k+03h
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 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
; 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
CLEAR: LD HL,BuffTrk
LD (HL),#4E
LD DE,BuffTrk + 1
LD BC,#4000-1
LDIR
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
; ƒ« ¢­ ï äã­ªæ¨ï ä®à¬ â¨à®¢ ­¨ï
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
;!FIXIT ã¡à âì «¨è­¥¥
; ‚ëç¨á«¥­¨¥ ¨ ¢ë¢®¤ ¤®áâ㯭®£® ¯à®áâà ­á⢠ ¤¨áª¥âë
CalcAvail:
ld de,1529h ; Y/X ¯®«®¦. "Available bytes"
LD C,BIOS.LP_SET_PLACE
RST ToBIOS
and a ; á¡à. ¯¥à¥­®á
ld de,space2 ; ¡ãä¥à ç¨á« 
ld hl,(Avail) ; ¬«.à §àï¤
MinusSc:ld bc,512
sbc hl,bc
ld (Avail),hl
exx
ld hl,(Avail+2) ; áâ.à §àï¤
ld bc,0
sbc hl,bc
ld (Avail+2),hl
call Hex7Dec
ld hl,space2
ld bc,0785h ; ¢ë¢®¤ áâப¨
ld e,ColFormNumber ;  âਡãâ
RST ToBIOS
;
ld de,142Ch ; Y/X ¯®«®¦. "Bad sectors"
LD C,BIOS.LP_SET_PLACE
RST ToBIOS
ld hl,(BadSect)
inc hl
ld (BadSect),hl
ld iy,tmp1
res 7,(iy+0)
ld de,space3
call Hex4Dec ; ¢ë¢®¤ ª®«-¢  bad-ᥪâ®à®¢
ld hl,space3
ld bc,0485h ; ¢ë¢®¤ áâப¨
ld e,ColFormNumber ;  âਡãâ
RST ToBIOS
ret
/////////////////////////////////////////////////////////////////////////
; <09><EFBFBD><EFBFBD>ˆ ŠŽ<C5A0> ЀРEQU ;
/////////////////////////////////////////////////////////////////////////
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
count: db 5
Avail: dw 0,0 ; ç¨á«® ¤®áâã¯. ¡ ©â
avail1: dw 0,0 ; ï祩ª  ¤«ï ¢®ááâ. "Avail"
; ’ ¡«¨æë ¨­â¥à«¨¢®¢ ᥪâ®à®¢
;
; 720kB, 1.44Mb..1.64Mb
INTERL1: ds 20 ; 1,2,3,...20
BuffTrk: EQU $ ; ¡ãä¥à â४ 
/////////////////////////////////////////////////////////////////////////
ENDMODULE