; Вывод карты диска, с выделением цветом bad-сторон ; вх: тек.дорожка ; тек.сторона ; флаг bad-вывода ; Map: ld a,(tracks) cp 83+1 ; запред. дорожка ret nc ld de,(cursor) ; Y/X полож. курсора ld hl,count ; счетчик dec (hl) jr nz,.loc1 ld (hl),4 ; сбросить счетчик "до инкремента X полож." inc de ; ++E, X полож. ld (cursor),de .loc1: ld a,(side) add a,d ld d,a ; Y полож. LD C,BIOS.LP_SET_PLACE ; уст. полож. курсора RST ToBIOS ; получить символ с экрана ld c,0B4h xor a RST ToBIOS ; ld a,(bad) ; 5/2/0 хороший/плохой/подозр. сектор ld c,a add a,52h ; вычислить атрибут ld e,a ; 57h/54h/52h атрибуты четного сектора ld a,(tracks) ; тек. дорожка rrca ld a,"▌" jr nc,.loc2 ; четная дорожка ; атрибут не четного сектора ld a,h and 0x0F rlca rlca rlca rlca add a,2 add a,c ld e,a ; ld a,"▐" ; не четная дорожка .loc2: ld bc,0181h ; печать символа с атрибутом RST ToBIOS ret maska equ 05h ; 5/2/0 "маска" ok/bad/wrn для уст.атрибута цвета bad: db maska ; атрибут bad=0k+03h cursor: dw 0D0Fh ; нач. полож. метки на карте count: db 5 ; Настройка окна процесса форматирования Setup_Map: xor a ld (_OS),a ld hl,553 ld (L0BB6+1),hl ld hl,512 ld (MinusSc+1),hl ld a,2 ld (SecCode+1),a ; код размера сектора ld hl,INTERL1 ld (INTERL+1),hl ; уст. интерлив для < 21 сектора ; ; ld hl,LABEL ; буфер имени метки ld a,(hl) or a jr nz,.loc0 ; ld hl,.loc22 ; "NO NAME " .loc0: ld de,LABEL1 ld b,11 LD A,(HL) CP ' '+1 JR C,.no_name ; .loop1: LD A,(HL) AND A JR Z,.empty ; CP #80 JR NC,.sym_ok ; CP #22 JR Z,.no_name CP #7C JR Z,.no_name CP #2A JR C,.check_3A CP #30 JR NC,.check_3A CP #2D JR Z,.sym_ok JR .no_name .check_3A: CP #3A JR C,.check_5B CP #40 JR NC,.check_5B JR .no_name .check_5B: CP #5B JR C,.sym_ok CP #5E JR C,.no_name .sym_ok: LD (DE),A INC HL INC DE DJNZ .loop1 ; .loop1: LD A,(HL) ; AND A ; JR Z,.empty ; CP '*' ; JR Z,.no_name ; CP '?' ; JR Z,.no_name ; CP '.' ; JR Z,.no_name ; CP '"' ; JR Z,.no_name ; CP '+' ; JR Z,.no_name ; CP ',' ; JR Z,.no_name ; CP '/' ; JR Z,.no_name ; CP ':' ; JR Z,.no_name ; CP ';' ; JR Z,.no_name ; CP '<' ; JR Z,.no_name ; CP '=' ; JR Z,.no_name ; CP '>' ; JR Z,.no_name ; CP '[' ; JR Z,.no_name ; CP '\' ; JR Z,.no_name ; CP ']' ; JR Z,.no_name ; CP '|' ; JR Z,.no_name ; .sym_ok: LD (DE),A ; INC HL ; INC DE ; DJNZ .loop1 jr .loc3 ; .empty: ld a,b cp 11 jr z,.no_name ; ex de,hl .loop2: ld (hl)," " inc hl djnz .loop2 jr .loc3 ; .no_name: ld hl,.loc22 ld de,LABEL1 ld bc,11 push hl ldir pop hl ld de,LABEL ld c,11 ldir ; ; .loc3: ld hl,(CurElem1) ; тек. полож. указателя формата ld a,h add a,l call Space call SetCyl call SetMedia push af cp 3 jr z,.loc4 cp 4 jr z,.loc4 cp 6 jr z,.loc4 cp 7 jr z,.loc4 cp 11 ;B 820 kB jr z,.loc4 cp 12 ;C 830 kB jr z,.loc4 ; 80 дорожек ld a,0FFh ld (metka1),a ld (metka2),a ld (metka4),a ld (metka3),a jr .loc5 ; 82-83 дорожки .loc4: ld a,"█" ld (metka1),a ld (metka2),a ld a," " ld (metka4),a ld a,"0" ld (metka3),a .loc5: pop af rlca ld e,a ld d,0 ld hl,.loc6 ld bc,7 add hl,de ld e,(hl) inc hl ld d,(hl) ex de,hl ld de,metka5 ldir ; ld a,(_OS) or a jr z,.loc30 ; ос ms-dos dec a jr nz,.loc28 ; ос cpm-80 ld a,(sFlag1) or a jr nz,.loc28 ; ошибки работы с файлом "boot.$b" ld a,(cSystem) or a jr z,.loc28 ld hl,.loc53 ; tr-dos "Boot disk " jr .loc27 ; ms-dos .loc30: ld hl,.loc25 ; "System files" ld a,(sFlag) or a jr nz,.loc28 ; ошибки работы с сист. файлами Estex ld a,(cSystem) or a jr nz,.loc27 .loc28: ld hl,.loc26 ; " " .loc27: ld de,metka7 ld bc,12 ldir ; настроить строку тек. режима ld hl,(CurElem1) ; тек. полож. указателя формата ld a,h add a,l ld hl,.loc52 ; " " cp 14 ; пункт CPM-80 ? jr z,.loc21 ; ms-dos, tr-dos ld hl,.loc29 ; "Optimize sectors" ld a,(Mode2) or a jr nz,.loc21 ld hl,.loc19 ; "Standart mode" ld a,(Mode0) or a jr nz,.loc21 ld hl,.loc20 ; "Quick format" .loc21: ld bc,18 ld de,metka6 ; строка в ListBox-е ldir ret ; .loc6: dw .loc7 ;0 1.44 Mb dw .loc8 ;1 1.52 Mb dw .loc9 ;2 1.60 Mb dw .loc10 ;3 1.64 Mb dw .loc11 ;4 1.66 Mb dw .loc12 ;5 1.68 Mb dw .loc13 ;6 1.72 Mb dw .loc14 ;7 1.74 Mb dw .loc052 ;8 1.2 Mb dw .loc15 ;9 720 kB dw .loc16 ;A 800 kB dw .loc17 ;B 820 kB dw .loc18 ;C 830 kB dw .loc50 ;D TR-DOS dw .loc51 ;E CP/M-80 ; .loc7: db "1.44 Mb" .loc8: db "1.52 Mb" .loc9: db "1.60 Mb" .loc10: db "1.64 Mb" .loc11: db "1.66 Mb" .loc12: db "1.68 Mb" .loc13: db "1.72 Mb" .loc14: db "1.74 Mb" .loc052: db " 1.2 Mb" .loc15: db "720 kB " .loc16: db "800 kB " .loc17: db "820 kB " .loc18: db "830 kB " .loc50: db "TR-DOS " .loc51: db "CP/M-80" ; .loc19: db "(Standart mode) " .loc29: db "(Optimize sectors)" .loc20: db "(Quick format) " .loc52: db " " .loc22: db "NO NAME " .loc25: db "System files" .loc53: db "Boot disk " .loc26: db " " ; Занести размер выбранного формата в байтах Space: push af rlca ld e,a ld d,0 ld hl,.loc1 ld bc,7 add hl,de ld e,(hl) inc hl ld d,(hl) ex de,hl push hl ld de,space1 ldir pop hl ld bc,7 ld de,space2 ldir ld hl,.loc14 ld de,space3 ; сбр. число bad-секторов ld bc,4 ldir ld hl," 0" ld (space4),hl ; сбр. тек. число дорожек pop af ret .loc1: dw .loc2 ; 1.44Mb dw .loc3 ; 1.52Mb dw .loc4 ; 1.60Mb dw .loc5 ; 1.64Mb dw .loc6 ; 1.66Mb dw .loc7 ; 1.68Mb dw .loc8 ; 1.72Mb dw .loc9 ; 1.74Mb dw .loc17 ; 1.2Mb 5.25 dw .loc10 ; 720kB dw .loc11 ; 800kB dw .loc12 ; 820kB dw .loc13 ; 830kB dw .loc15 ; TR-DOS 16 сект. по 256 байт dw .loc16 ; CP/M-80 5 сект. по 1024 байт ; .loc2: db "1457664" ; 1.44Mb .loc3: db "1539584" ; 1.52Mb .loc4: db "1620480" ; 1.60Mb .loc5: db "1661440" ; 1.64Mb .loc6: db "1681920" ; 1.66Mb .loc7: db "1702400" ; 1.68Mb .loc8: db "1745408" ; 1.72Mb .loc9: db "1765888" ; 1.74Mb .loc10: db " 730112" ; 720kB .loc17: db "1228800" ; 1.2Mb 5.25 .loc11: db " 812032" ; 800kB .loc12: db " 832512" ; 820kB .loc13: db " 842752" ; 830kB .loc15: db " 651264" ; TR-DOS 16 сект. по 256 байт .loc16: db " 819200" ; CP/M-80 5 сект. по 1024 байт ; .loc14: db " 0" ; сбросить число bad-секторов ; Настроить макс. число дорожек SetCyl: push af cp 3 jr z,.loc2 cp 6 jr z,.loc2 cp 11 ; 820kB jr z,.loc2 cp 4 jr z,.loc3 cp 7 jr z,.loc3 cp 12 ; 830kB jr z,.loc3 ld a,80-1 ; 80 дорожек .loc1: ld (TRACKS+1),a pop af ret .loc2: ld a,82-1 ; 82 дорожки jr .loc1 .loc3: ld a,83-1 ; 83 дорожки jr .loc1 ; Настроить BPB ms-dos загрузчика SetMedia: push af or a jr z,.loc1 ; 1.44Mb dec a jp z,.loc2 ; 1.52Mb dec a jp z,.loc3 ; 1.60Mb dec a jp z,.loc4 ; 1.64Mb dec a jp z,.loc5 ; 1.66Mb dec a jp z,.loc6 ; 1.68Mb dec a jp z,.loc7 ; 1.72Mb dec a jp z,.loc8 ; 1.74Mb dec a jp z,.loc17 ; 1.2Mb dec a jp z,.loc9 ; 720kB dec a jp z,.loc10 ; 800kB dec a jp z,.loc11 ; 820kB dec a jp z,.loc14 ; 830kB dec a jp z,.trdos ; TR-DOS jp .cpm ; CPM-80 ;1.44Mb .loc1: ld hl,108 ; размер межсект. пробела ld (GAP3),hl ld hl,0016h ld (Avail+2),hl ; 4 байта размера формата ld hl,3E00h ld (Avail),hl ld a,18 ; число секторов ld (FSETUP.sectorsAll),a ld hl,18 ; секторов на сторону ld (FSETUP.sectorsSide),hl ld a,34 ; посл. служ. сектор ld (FSETUP.lastSector),a ld hl,16896 ; размер FAT-ов + Root dir ld (frm5+1),hl ld hl,2880 ; секторов на диске ld (ASect+1),hl ld hl,9 ; секторов на FAT ld (FSect+1),hl .loc13: ld a,BOOT_SECTOR.Floppy_3x5_1x44 ; байт формата .l1_2: ld (frm4+1),a ld a,1 ; секторов на кластер ld (FSETUP.sectorsPerCluster),a ld hl,224 ; записей в корне ld (frm6+1),hl .loc12: ld hl,Avail ld de,avail1 ld bc,4 ldir ; сохр. емкость дискеты в доп. ячейке pop af ret ;1.52Mb .loc2: ld hl,42 ; размер межсект. пробела ld (GAP3),hl ld hl,0017h ld (Avail+2),hl ; 4 байта размера формата ld hl,7E00h ld (Avail),hl ld a,19 ; число секторов ld (FSETUP.sectorsAll),a ld hl,19 ; секторов на сторону ld (FSETUP.sectorsSide),hl ld a,34 ; посл. служ. сектор ld (FSETUP.lastSector),a ld hl,16896 ; размер FAT-ов + Root dir ld (frm5+1),hl ld hl,3040 ; секторов на диске ld (ASect+1),hl ld hl,9 ; секторов на FAT ld (FSect+1),hl jr .loc13 ;1.60Mb .loc3: ld hl,0018h ld (Avail+2),hl ; 4 байта размера формата ld hl,0BA00h ld (Avail),hl ld a,20 ; число секторов ld (FSETUP.sectorsAll),a ld hl,20 ; секторов на сторону ld (FSETUP.sectorsSide),hl ld a,36 ; посл. служ. сектор ld (FSETUP.lastSector),a ld hl,17920 ; размер FAT-ов + Root dir ld (frm5+1),hl ld hl,3200 ; секторов на диске ld (ASect+1),hl ld hl,10 ; секторов на FAT ld (FSect+1),hl jp .loc50 ;1.64Mb .loc4: ld hl,0019h ld (Avail+2),hl ; 4 байта размера формата ld hl,5A00h ld (Avail),hl ld a,20 ; число секторов ld (FSETUP.sectorsAll),a ld hl,20 ; секторов на сторону ld (FSETUP.sectorsSide),hl ld a,36 ; посл. служ. сектор ld (FSETUP.lastSector),a ld hl,17920 ; размер FAT-ов + Root dir ld (frm5+1),hl ld hl,3280 ; секторов на диске ld (ASect+1),hl ld hl,10 ; секторов на FAT ld (FSect+1),hl jr .loc50 ;1.66Mb .loc5: ld hl,0019h ld (Avail+2),hl ; 4 байта размера формата ld hl,0AA00h ld (Avail),hl ld a,20 ; число секторов ld (FSETUP.sectorsAll),a ld hl,20 ; секторов на сторону ld (FSETUP.sectorsSide),hl ld a,36 ; посл. служ. сектор ld (FSETUP.lastSector),a ld hl,17920 ; размер FAT-ов + Root dir ld (frm5+1),hl ld hl,3320 ; секторов на диске ld (ASect+1),hl ld hl,10 ; секторов на FAT ld (FSect+1),hl .loc50: ld hl,40 ; размер межсект. пробела ld (GAP3),hl jp .loc13 ;1.68Mb .loc6: ld hl,0019h ld (Avail+2),hl ; 4 байта размера формата ld hl,0FA00h ld (Avail),hl ld a,21 ; число секторов ld (FSETUP.sectorsAll),a ld hl,21 ; секторов на сторону ld (FSETUP.sectorsSide),hl ld a,36 ; посл. служ. сектор ld (FSETUP.lastSector),a ld hl,17920 ; размер FAT-ов + Root dir ld (frm5+1),hl ld hl,3360 ; секторов на диске ld (ASect+1),hl ld hl,10 ; секторов на FAT ld (FSect+1),hl jp .loc80 ;1.72Mb .loc7: ld hl,001Ah ld (Avail+2),hl ; 4 байта размера формата ld hl,0A200h ld (Avail),hl ld a,21 ; число секторов ld (FSETUP.sectorsAll),a ld hl,21 ; секторов на сторону ld (FSETUP.sectorsSide),hl ld a,36 ; посл. служ. сектор ld (FSETUP.lastSector),a ld hl,17920 ; размер FAT-ов + Root dir ld (frm5+1),hl ld hl,3444 ; секторов на диске ld (ASect+1),hl ld hl,10 ; секторов на FAT ld (FSect+1),hl jr .loc80 ;1.74Mb .loc8: ld hl,001Ah ld (Avail+2),hl ; 4 байта размера формата ld hl,0F200h ld (Avail),hl ld a,21 ; число секторов ld (FSETUP.sectorsAll),a ld hl,21 ; секторов на сторону ld (FSETUP.sectorsSide),hl ld a,38 ; посл. служ. сектор ld (FSETUP.lastSector),a ld hl,18944 ; размер FAT-ов + Root dir ld (frm5+1),hl ld hl,3486 ; секторов на диске ld (ASect+1),hl ld hl,11 ; секторов на FAT ld (FSect+1),hl .loc80: ld hl,11 ; размер межсект. пробела ld (GAP3),hl ld hl,INTERL2 ; уст. интерлив для 21 сектора ld (INTERL+1),hl jp .loc13 ;720kB .loc9: ld hl,80 ; размер межсект. пробела ld (GAP3),hl ld hl,000Bh ld (Avail+2),hl ; 4 байта размера формата ld hl,2400h ld (Avail),hl ld a,9 ; число секторов ld (FSETUP.sectorsAll),a ld hl,9 ; секторов на сторону ld (FSETUP.sectorsSide),hl ld hl,1440 ; секторов на диске ld (ASect+1),hl .loc15: ld hl,6656 ; размер FAT-ов + Root dir ld (frm5+1),hl ld a,14 ; посл. служ. сектор ld (FSETUP.lastSector),a ld hl,3 ; секторов на FAT ld (FSect+1),hl ld a,BOOT_SECTOR.Floppy_5x25_720 ; байт формата ld (frm4+1),a ld a,2 ; секторов на кластер ld (FSETUP.sectorsPerCluster),a ld hl,112 ; записей в корне ld (frm6+1),hl jp .loc12 ;800kB .loc10: ld hl,000Ch ld (Avail+2),hl ; 4 байта размера формата ld hl,6400h ld (Avail),hl ld hl,1600 ; секторов на диске ld (ASect+1),hl jr .loc16 ;820kB .loc11: ld hl,000Ch ld (Avail+2),hl ; 4 байта размера формата ld hl,0B400h ld (Avail),hl ld hl,1640 ; секторов на диске ld (ASect+1),hl jr .loc16 ;830kB .loc14: ld hl,000Ch ld (Avail+2),hl ; 4 байта размера формата ld hl,0DC00h ld (Avail),hl ld hl,1660 ; секторов на диске ld (ASect+1),hl .loc16: ld a,10 ; число секторов ld (FSETUP.sectorsAll),a ld hl,10 ; секторов на сторону ld (FSETUP.sectorsSide),hl ld hl,36 ; размер межсект. пробела ld (GAP3),hl ld hl,INTERL3 ; уст. интерлив для 21 сектора ld (INTERL+1),hl jr .loc15 ; TR-DOS .trdos: ld hl,50 ; размер межсект. пробела ld (GAP3),hl ld hl,256 ld (MinusSc+1),hl ld hl,INTERL4 ld (INTERL+1),hl ; уст. интерлив для < 21 сектора ld hl,0009h ld (Avail+2),hl ; 4 байта размера формата ld hl,0F000h ld (Avail),hl ld a,1 ld (_OS),a ld (SecCode+1),a ; код размера сектора ld hl,297 ; 553-256 ld (L0BB6+1),hl jp .loc12 ; CP/M-80 .cpm: ld hl,50 ; размер межсект. пробела ld (GAP3),hl ld hl,1024 ld (MinusSc+1),hl ld hl,000Ch ld (Avail+2),hl ; 4 байта размера формата ld hl,8000h ld (Avail),hl ld a,2 ld (_OS),a inc a ld (SecCode+1),a ; код размера сектора ld hl,1065 ; 553+512 ld (L0BB6+1),hl jp .loc12 ; 5.25 1,2Mb .loc17: ld hl,84 ;54 ; размер межсект. пробела ld (GAP3),hl ld hl,#0012 ld (Avail+2),hl ; 4 байта размера формата ld hl,#C000 ld (Avail),hl ld a,15 ; число секторов ld (FSETUP.sectorsAll),a ld hl,15 ; секторов на сторону ld (FSETUP.sectorsSide),hl ld a,30 ; посл. служ. сектор ld (FSETUP.lastSector),a ld hl,14848 ; размер FAT-ов + Root dir ld (frm5+1),hl ld hl,2400 ; секторов на диске ld (ASect+1),hl ld hl,7 ; секторов на FAT ld (FSect+1),hl ld a,BOOT_SECTOR.Floppy_5x25_1x20 ; байт формата jp .l1_2 ; Вывод в десятичном формате (7 разрядов) ; вх: hl'= мл.разряд ; hl = ст.разряд Hex7Dec:EXX LD BC,4240h EXX LD BC,000Fh ;1.000.000 EXX ld iy,tmp1 res 7,(iy+0) CALL GetLenN32 LD BC,86A0h EXX LD BC,0001h ;100.000 EXX CALL GetLenN32 LD BC,10000 ;10.000 EXX LD BC,0 ;100.000 EXX CALL GetLenN32 Hex4Dec:LD BC,1000 ;1.000 CALL GetLenN16 LD BC,100 ;100 CALL GetLenN16 LD BC,10 ;10 CALL GetLenN16 LD A,L ADD A,"0" LD (DE),A RET tmp1: db 0 GetLenN32: LD A,2Fh OR A .loc1: INC A SBC HL,BC EXX SBC HL,BC EXX JR NC,.loc1 ADD HL,BC EXX ADC HL,BC EXX CP "0" JR Z,.loc2 SET 7,(IY+0) .loc2: BIT 7,(IY+0) JR NZ,.loc3 LD A," " .loc3: LD (DE),A INC DE RET GetLenN16: LD A,2Fh OR A .loc1: INC A SBC HL,BC JR NC,.loc1 ADD HL,BC CP "0" JR Z,.loc2 SET 7,(IY+0) .loc2: BIT 7,(IY+0) JR NZ,.loc3 LD A," " .loc3: LD (DE),A INC DE RET Avail: dw 0,0 ; число доступ. байт avail1: dw 0,0 ; ячейка для восст. "Avail" ; Вычисление и вывод доступного пространства дискеты 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 ;"Системные файлы скопированы" ;okno4: ld a,10h ; цвет вывод. окна ;ld (_mtk1+1),a ;ld hl,SysCopy ;jr _mtk ; "Отсутствует диск или устройство" okno3: ld a,40h ; цвет вывод. окна ld (_mtk1+1),a ld hl,MissingDisk jr _mtk ; "Прервано пользователем" okno0: ld a,10h ; цвет вывод. окна ld (_mtk1+1),a ld hl,Interrupt jr _mtk ; "Форматирование завершено" okno1: ld a,10h ; цвет вывод. окна ld (_mtk1+1),a ld hl,FComplite jr _mtk ; "Ошибка записи сист. области или не совместимый формат" okno2: ld a,40h ; цвет вывод. окна ld (_mtk1+1),a ld hl,NoForm _mtk: ld (_mtk2+1),hl ; ld a,(ColDialWn) ; сохр. цвет окна push af _mtk1: ld a,40h ; цвет вывод. окна ld (ColDialWn),a _mtk2: ld hl,NoForm ; "Ошибка записи сист. области" call DialogW pop af ld (ColDialWn),a ; восст. цвет окна ret ; Очистить карту ClearMap: ld de,0D0Fh ; Y/X полож. верх. строки LD C,BIOS.LP_SET_PLACE RST ToBIOS call clrMap ld de,0E0Fh ; Y/X полож. нижн. строки LD C,BIOS.LP_SET_PLACE RST ToBIOS ; clrMap: ld hl,.loc2 ld a,(metka1) cp 0xFF ; стоп-байт ld b,42 ; длина строки при > 80 дорожках jr nz,.loc1 ld b,40 ; длина строки при 80 дорожках .loc1: ld c,85h ; вывод строки ld e,75h ; норм. атрибут карты RST ToBIOS ret ; .loc2: db "██████████████████████████████████████████" ; Установить заданный формат текущего флоповода. ; Для 5.25" уст. всегда 1МГц тактовой ВГ93 (практически не нужна). SetDrive: ld a,(CurElem0) ; (0=A,1=B) тек. диск ld hl,DriveA ; форматы в RadioCheck "A:" or a jr z,.loc1 ld hl,DriveB ; форматы в RadioCheck "B:" .loc1: xor a cp (hl) jr nz,.d1440 ; 1.44Mb 3.5" ; девайс 720kB 5.25" .loc2: ld a,12h ; всегда форматить на 1МГц тактовой .loc3: ld (density),a ret ; девайс 1.44Mb 3.5" .d1440: ld hl,(CurElem1) ; тек. полож. указателя формата ld a,h add a,l cp 9 ; пункт 720kB и ниже ;!HARDCODE jr nc,.loc2 ld a,13h jr .loc3 ; форматы 1.44Mb..1.52Mb ; Создание метки дискеты (MS-DOS) CreateLabel: ; ld hl,LABEL ; имя метки ; ld a,(hl) ; or a ; ret z ; call SetDisketa ; уст. текущим диском дискету ; ; создать файл ; ld hl,LABEL ; имя метки ; ld a,08h ; атрибут "метка тома" ; ld c,0Ah ; RST ToDSS ; jr c,.loc1 ; ошибка создания метки ; ;ret c ; ; закрыть файл ; ld c,12h ; RST ToDSS ; .loc1: jp RestPath ; восст. диск и путь ; ><|?*/\:" ld hl,LABEL1 ld de,L2400 + BOOT_SECTOR.FAT.LABEL LD BC,11 ; счетчик LDIR RET ; ; ; LD A,(HL) ; CP ' '+1 ; JR C,.no_name ; .loop1: LD A,(HL) ; AND A ; jr z,.empty ; CP '*' ; JR Z,.no_name ; CP '.' ; JR Z,.no_name ; CP '"' ; JR Z,.no_name ; CP '+' ; JR Z,.no_name ; CP ',' ; JR Z,.no_name ; CP '/' ; JR Z,.no_name ; CP ':' ; JR Z,.no_name ; CP ';' ; JR Z,.no_name ; CP '<' ; JR Z,.no_name ; CP '=' ; JR Z,.no_name ; CP '>' ; JR Z,.no_name ; CP '[' ; JR Z,.no_name ; CP '\' ; JR Z,.no_name ; CP ']' ; JR Z,.no_name ; CP '|' ; JR Z,.no_name ; LD (DE),A ; INC HL ; INC DE ; DJNZ .loop1 ; RET ; ; ; .empty: ld a,b ; cp 11 ; jr z,.no_name ; ; ; ex de,hl ; .loop2: ld (hl)," " ; inc hl ; djnz .loop2 ; ret ; ; ; .no_name: ld hl,Setup_Map.loc22 ; ld de,L2400 + BOOT_SECTOR.FAT.LABEL ; ld bc,11 ; push hl ; ldir ; pop hl ; ld de,LABEL ; ld c,11 ; ldir ; ret ; Выходные значения: ; D - день ; E - месяц ; IX - год ; H - час ; L - минуты ; B - секунды ; C - день недели ;!TEST CreateSerialNumber: ld c,Dss.SysTime rst ToDSS ; ex de,hl add ix,de ld (L2400 + BOOT_SECTOR.FAT.SERIAL_NUMBER + 2),ix ; ld a,d ld d,b xor c .loop: rra djnz .loop ; ld e,h ld h,l ld l,e ; ld e,a add hl,de ; ld e,l ; ld l,h ; ld h,e ld (L2400 + BOOT_SECTOR.FAT.SERIAL_NUMBER),hl ret /* ;1.44Mb WORD 108 ; размер межсект. пробела DWORD #00163E00 ; 4 байта размера формата BYTE 18 ; число секторов WORD 18 ; секторов на сторону BYTE 34 ; посл. служ. сектор WORD 16896 ; размер FAT-ов + Root dir WORD 2880 ; секторов на диске WORD 9 ; секторов на FAT BYTE #F0 ; байт формата BYTE 1 ; секторов на кластер WORD 224 ; записей в корне ;1.52Mb WORD 42 ; размер межсект. пробела DWORD #00177E00 ; 4 байта размера формата BYTE 19 ; число секторов WORD 19 ; секторов на сторону BYTE 34 ; посл. служ. сектор WORD 16896 ; размер FAT-ов + Root dir WORD 3040 ; секторов на диске WORD 9 ; секторов на FAT BYTE #F0 ; байт формата BYTE 1 ; секторов на кластер WORD 224 ; записей в корне ;1.60Mb WORD 40 ; размер межсект. пробела .loc50 DWORD #0018BA00 ; 4 байта размера формата BYTE 20 ; число секторов WORD 20 ; секторов на сторону BYTE 36 ; посл. служ. сектор WORD 17920 ; размер FAT-ов + Root dir WORD 3200 ; секторов на диске WORD 10 ; секторов на FAT BYTE #F0 ; байт формата .loc13 BYTE 1 ; секторов на кластер .loc13 WORD 224 ; записей в корне .loc13 ;1.64Mb WORD 40 ; размер межсект. пробела DWORD #00195A00 ; 4 байта размера формата BYTE 20 ; число секторов WORD 20 ; секторов на сторону BYTE 36 ; посл. служ. сектор WORD 17920 ; размер FAT-ов + Root dir WORD 3280 ; секторов на диске WORD 10 ; секторов на FAT BYTE #F0 ; байт формата BYTE 1 ; секторов на кластер WORD 224 ; записей в корне ;1.66Mb WORD 40 ; размер межсект. пробела DWORD #0019AA00 ; 4 байта размера формата BYTE 20 ; число секторов WORD 20 ; секторов на сторону BYTE 36 ; посл. служ. сектор WORD 17920 ; размер FAT-ов + Root dir WORD 3320 ; секторов на диске WORD 10 ; секторов на FAT BYTE #F0 ; байт формата BYTE 1 ; секторов на кластер WORD 224 ; записей в корне ;1.68Mb WORD 11 ; размер межсект. пробела .loc80 DWORD #0019FA00 ; 4 байта размера формата BYTE 21 ; число секторов WORD 21 ; секторов на сторону BYTE 36 ; посл. служ. сектор WORD 17920 ; размер FAT-ов + Root dir WORD 3360 ; секторов на диске WORD 10 ; секторов на FAT BYTE #F0 ; байт формата BYTE 1 ; секторов на кластер WORD 224 ; записей в корне ;1.72Mb WORD 11 ; размер межсект. пробела DWORD #001AA200 ; 4 байта размера формата BYTE 21 ; число секторов WORD 21 ; секторов на сторону BYTE 36 ; посл. служ. сектор WORD 17920 ; размер FAT-ов + Root dir WORD 3444 ; секторов на диске WORD 10 ; секторов на FAT BYTE #F0 ; байт формата BYTE 1 ; секторов на кластер WORD 224 ; записей в корне ;1.74Mb WORD 11 ; размер межсект. пробела DWORD #001AF200 ; 4 байта размера формата BYTE 21 ; число секторов WORD 21 ; секторов на сторону BYTE 38 ; посл. служ. сектор WORD 18944 ; размер FAT-ов + Root dir WORD 3486 ; секторов на диске WORD 11 ; секторов на FAT BYTE #F0 ; байт формата BYTE 1 ; секторов на кластер WORD 224 ; записей в корне ;720kB WORD 80 ; размер межсект. пробела DWORD #000B2400 ; 4 байта размера формата BYTE 9 ; число секторов WORD 9 ; секторов на сторону BYTE 14 ; посл. служ. сектор WORD 6656 ; размер FAT-ов + Root dir WORD 1440 ; секторов на диске WORD 3 ; секторов на FAT BYTE #F9 ; байт формата BYTE 2 ; секторов на кластер WORD 112 ; записей в корне ;800kB WORD 36 ; размер межсект. пробела DWORD #000C6400 ; 4 байта размера формата BYTE 10 ; число секторов WORD 10 ; секторов на сторону BYTE 14 ; посл. служ. сектор WORD 6656 ; размер FAT-ов + Root dir WORD 1600 ; секторов на диске WORD 3 ; секторов на FAT BYTE #F9 ; байт формата BYTE 2 ; секторов на кластер WORD 112 ; записей в корне WORD INTERL3 ; Таблица интерливов секторов ;820kB WORD 36 ; размер межсект. пробела DWORD #000CB400 ; 4 байта размера формата BYTE 10 ; число секторов WORD 10 ; секторов на сторону BYTE 14 ; посл. служ. сектор WORD 6656 ; размер FAT-ов + Root dir WORD 1600 ; секторов на диске WORD 3 ; секторов на FAT BYTE #F9 ; байт формата BYTE 2 ; секторов на кластер WORD 112 ; записей в корне WORD INTERL3 ; Таблица интерливов секторов ;830kB WORD 36 ; размер межсект. пробела DWORD #000CDC00 ; 4 байта размера формата BYTE 10 ; число секторов WORD 10 ; секторов на сторону BYTE 14 ; посл. служ. сектор WORD 6656 ; размер FAT-ов + Root dir WORD 1660 ; секторов на диске WORD 3 ; секторов на FAT BYTE #F9 ; байт формата BYTE 2 ; секторов на кластер WORD 112 ; записей в корне WORD INTERL3 ; Таблица интерливов секторов ; 5,25 1,2Mb WORD 54 ; размер межсект. пробела DWORD #0012C000 ; 4 байта размера формата BYTE 15 ; число секторов WORD 15 ; секторов на сторону BYTE 30 ; 32 ; посл. служ. сектор WORD 14848 ; 15872 ; размер FAT-ов + Root dir WORD 2400 ; секторов на диске WORD 7 ; секторов на FAT BYTE #F9 ; байт формата BYTE 1 ; секторов на кластер WORD 224 ; записей в корне WORD INTERL3 ; Таблица интерливов секторов ;1.44Mb WORD 108 ; размер межсект. пробела DWORD #00163E00 ; 4 байта размера формата BYTE 18 ; число секторов WORD 18 ; секторов на сторону BYTE 34 ; посл. служ. сектор WORD 16896 ; размер FAT-ов + Root dir WORD 2880 ; секторов на диске WORD 9 ; секторов на FAT BYTE #F0 ; байт формата BYTE 1 ; секторов на кластер WORD 224 ; записей в корне */ ;