Руководство по HamsterCMS от TomoTomoTan
Ручной «Хомяк» – наглядное пособие по Hamster CMS. Предисловие и глава 1. - Как включить
Ручной «Хомяк» – наглядное пособие по Hamster CMS. Глава 2 - О шаблонах и содержимом
Ручной «Хомяк» – наглядное пособие по Hamster CMS. Глава 3 - Доступ к сайту через FTP, редактирование шаблона
Ручной «Хомяк» – наглядное пособие по Hamster CMS. Глава 4 - Устройство шаблона. Немного о включениях.
Ручной «Хомяк» – наглядное пособие по Hamster CMS. Глава 5 - Создание собственного шаблона. Загрузка файлов на сайт с помощью WebFTP

Частозадаваемые вопросы по хостингу | Вопросы по IRC | Веб-чат (работает в Opera 10.63/Win98 и современных браузерах)

Низкоуровневое форматирование дискет

Moderator: push0ret

User avatar
push0ret
Набирающий обороты
Posts: 44
Joined: Sun Dec 29, 2024 2:48 pm
Has thanked: 23 times
Been thanked: 33 times

Низкоуровневое форматирование дискет

Post by push0ret »

Написал программу для форматирования дискет. Кому надо, пользуйтесь. Форматирование со стандартным размером кластера 512 байт. Пользуйтесь с осторожностью, во время форматирования дискету не извлекать, а также не будет возможности восстановления файлов, дискета будет перезаписана.

Ссылка на скачивание: https://push0ret.w10.site/downloads/pformat.com

Исходный код:

Code: Select all

.model  tiny
.286
code    segment
org     100h

start:

mov ah, 9d
lea dx, usr_msg
int 21h

wait_key:

mov ah, 1d
int 21h

cmp al, 32h
jz exit

cmp al, 31h
jnz wait_key

mov ah, 2d
mov dl, 0Dh
int 21h

;Select disk

mov ah, 9d
lea dx, usr_msg2
int 21h

sel_disk:

mov ah, 1d
int 21h

cmp al, 32h
ja sel_disk

cmp al, 31h
jb sel_disk

sub al, 31h

mov disk, al

;FORMAT

format:

;2 & 11 sectors (FAT tables)

mov ah, 3d
mov dl, disk
mov dh, 0
mov ch, 0
mov cl, 2d
mov al, 1d
lea bx, fat_table
int 13h

mov ah, 3d
mov cl, 11d
mov al, 1d
int 13h

;format first cylinder

lea bx, other_sectors
mov al, 1d
mov cx, 8d

format_0cyl:

push cx
mov ah, 3d
mov cl, sector
int 13h

inc sector
pop cx

loop format_0cyl

cmp sector, 19d
jz format_other_side0

mov sector, 12d
mov cx, 7d

jmp format_0cyl

;Format other cylinders on side 0

format_other_side0:

mov sector, 1d
mov cx, 18d

format_side0:

push cx
mov ah, 3d
mov dl, disk
mov dh, side
mov ch, cyl
mov cl, sector
mov al, 1d
lea bx, other_sectors
int 13h

inc sector
pop cx

loop format_side0

cmp cyl, 80d
jz format_side1

mov sector, 1d
inc cyl
mov cx, 18d
jmp format_side0

format_side1:

mov sector, 1d
mov cyl, 0d
mov side, 1d

mov sector, 1d
mov cx, 18d

format_side1_sectors:

push cx
mov ah, 3d
mov dl, disk
mov dh, side
mov ch, cyl
mov cl, sector
mov al, 1d
lea bx, other_sectors
int 13h

inc sector
pop cx

loop format_side1_sectors

cmp cyl, 80d
jz format_boot_sec

mov sector, 1d
inc cyl
mov cx, 18d
jmp format_side1_sectors

format_boot_sec:

mov ah, 3d
mov dl, disk
mov dh, 0
mov ch, 0
mov cl, 1d
mov al, 1d
lea bx, boot_rec
int 13h

format_done:

mov ah, 9d
lea dx, usr_msg3
int 21h

exit:

mov ax, 4c00h
int 21h

usr_msg         db      '1. Low level format', 0Ah, 0Dh
		db      '2. Exit', 0Ah, 0Dh, 24h        
usr_msg2        db      'Select disk:', 0Ah, 0Dh
		db      '1. A', 0Ah, 0Dh
		db      '2. B', 0Ah, 0Dh, 24h
usr_msg3	db	0Dh, 'Formated!', 24h
disk            db      ?
sector          db      3d
cyl             db      1d
side            db      0

fat_table       db      0F0h, 0FFh, 0FFh, 509d dup(0)
other_sectors   db      512d dup(0)

boot_rec		db	0EBh, 3Ch, 90h, 50h, 55h, 53h, 48h, 30h, 52h, 45h, 54h, 0, 02d, 01d, 01d, 0, 02d, 0E0h, 0 
			db	40h, 0Bh, 0F0h, 09d, 0, 12h, 0, 02d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29h, 48h, 0Fh, 63h, 0B4h, 4Eh, 4Fh, 20h, 4Eh, 41h 
			db	4Dh, 45h, 20h, 20h, 20h, 20h, 46h, 41h, 54h, 31h, 32h, 20h, 20h, 20h, 33h, 0C9h, 8Eh, 0D1h, 0BCh, 0F0h, 7Bh, 8Eh, 0D9h 
			db	0B8h, 0, 20h, 8Eh, 0C0h, 0FCh, 0BDh, 0, 7Ch, 38h, 4Eh, 24h, 7Dh, 24h, 8Bh, 0C1h, 99h, 0E8h, 3Ch, 01d, 72h, 1Ch, 83h, 0EBh 
			db	3Ah, 66h, 0A1h, 1Ch, 7Ch, 26h, 66h, 3Bh, 07h, 26h, 8Ah, 57h, 0FCh, 75h, 06d, 80h, 0CAh, 02d, 88h, 56h, 02d, 80h, 0C3h, 10h 
			db	73h, 0EBh, 33h, 0C9h, 8Ah, 46h, 10h, 98h, 0F7h, 66h, 16h, 03d, 46h, 1Ch, 13h, 56h, 1Eh, 03d, 46h, 0Eh, 13h, 0D1h, 8Bh, 76h, 11h 
			db	60h, 89h, 46h, 0FCh, 89h, 56h, 0FEh, 0B8h, 20h, 0, 0F7h, 0E6h, 8Bh, 5Eh, 0Bh, 03d, 0C3h, 48h, 0F7h, 0F3h, 01d, 46h, 0FCh, 11h, 4Eh 
			db	0FEh, 61h, 0BFh, 0, 0, 0E8h, 0E6h, 0, 72h, 39h, 26h, 38h, 2Dh, 74h, 17h, 60h, 0B1h, 0Bh, 0BEh, 0A1h, 7Dh, 0F3h, 0A6h, 61h, 74h, 32h 
			db	4Eh, 74h, 09d, 83h, 0C7h, 20h, 3Bh, 0FBh, 72h, 0E6h, 0EBh, 0DCh, 0A0h, 0FBh, 7Dh, 0B4h, 7Dh, 8Bh, 0F0h, 0ACh, 98h, 40h, 74h, 0Ch, 48h, 74h 
			db	13h, 0B4h, 0Eh, 0BBh, 07d, 0, 0CDh, 10h, 0EBh, 0EFh, 0A0h, 0FDh, 7Dh, 0EBh, 0E6h, 0A0h, 0FCh, 7Dh, 0EBh, 0E1h, 0CDh, 16h, 0CDh, 19h, 26h, 8Bh 
			db	55h, 1Ah, 52h, 0B0h, 01d, 0BBh, 0, 0, 0E8h, 3Bh, 0, 72h, 0E8h, 5Bh, 8Ah, 56h, 24h, 0BEh, 0Bh, 7Ch, 8Bh, 0FCh, 0C7h, 46h, 0F0h, 3Dh, 7Dh, 0C7h 
			db	46h, 0F4h, 29h, 7Dh, 8Ch, 0D9h, 89h, 4Eh, 0F2h, 89h, 4Eh, 0F6h, 0C6h, 06d, 96h, 7Dh, 0CBh, 0EAh, 03d, 0, 0, 20h, 0Fh, 0B6h, 0C8h, 66h, 8Bh, 46h 
			db	0F8h, 66h, 03d, 46h, 1Ch, 66h, 8Bh, 0D0h, 66h, 0C1h, 0EAh, 10h, 0EBh, 5Eh, 0Fh, 0B6h, 0C8h, 4Ah, 4Ah, 8Ah, 46h, 0Dh, 32h, 0E4h, 0F7h, 0E2h, 03d 
			db	46h, 0FCh, 13h, 56h, 0FEh, 0EBh, 4Ah, 52h, 50h, 06d, 53h, 6Ah, 01d, 6Ah, 10h, 91h, 8Bh, 46h, 18h, 96h, 92h, 33h, 0D2h, 0F7h, 0F6h, 91h, 0F7h, 0F6h 
			db	42h, 87h, 0CAh, 0F7h, 76h, 1Ah, 8Ah, 0F2h, 8Ah, 0E8h, 0C0h, 0CCh, 02d, 0Ah, 0CCh, 0B8h, 01d, 02d, 80h, 7Eh, 02d, 0Eh, 75h, 04h, 0B4h, 42h, 8Bh, 0F4h 
			db	8Ah, 56h, 24h, 0CDh, 13h, 61h, 61h, 72h, 0Bh, 40h, 75h, 01d, 42h, 03d, 5Eh, 0B, 49h, 75h, 06d, 0F8h, 0C3h, 41h, 0BBh, 0, 0, 60h, 66h, 6Ah, 0, 0EBh, 0B0h 
			db	42h, 4Fh, 4Fh, 54h, 4Dh, 47h, 52h, 20h, 20h, 20h, 20h, 0Dh, 0Ah, 52h, 65h, 6Dh, 6Fh, 76h, 65h, 20h, 64h, 69h, 73h, 6Bh, 73h, 20h, 6Fh, 72h, 20h, 6Fh, 74h 
			db	68h, 65h, 72h, 20h, 6Dh, 65h, 64h, 69h, 61h, 2Eh, 0FFh, 0Dh, 0Ah, 44h, 69h, 73h, 6Bh, 20h, 65h, 72h, 72h, 6Fh, 72h, 0FFh, 0Dh, 0Ah, 50h, 72h, 65h, 73h, 73h 
			db	20h, 61h, 6Eh, 79h, 20h, 6Bh, 65h, 79h, 20h, 74h, 6Fh, 20h, 72h, 65h, 73h, 74h, 61h, 72h, 74h, 0Dh, 0Ah, 0, 0, 0, 0, 0, 0, 0, 0ACh, 0CBh, 0D8h, 55h, 0AAh

code    ends
end     start
С уважением, push0ret!

Code: Select all

push 0
ret
User avatar
alsk
Матёрый писака
Posts: 295
Joined: Sun Jan 12, 2025 11:21 am
Has thanked: 22 times
Been thanked: 29 times

Re: Низкоуровневое форматирование дискет

Post by alsk »

Сейчас не все знают что такое дискета и кассета.

Помню что когда-то баловался ассемблером: "минировал" принтер, замораживал всю систему.
вот доказательство
Image

1 при отправке какого-то байта в порт принтера, он делал "пик", сделав loop получаем пикающий принтер.

2 у процессора есть cw0 cw1 cw2... - контрольные слова (или контрольные регистры). При отправке байта/слова можно было заблокировать ВСЕ прерывания. Только кнопка на сист блоке помогала.

Какие-никакие минимальные знания ассемблера мне очень пригодились. В районе только я знал и понимал почему файл 4+ гб не хочет записываться на пустую флешку объемом 8 гб.
User avatar
push0ret
Набирающий обороты
Posts: 44
Joined: Sun Dec 29, 2024 2:48 pm
Has thanked: 23 times
Been thanked: 33 times

Re: Низкоуровневое форматирование дискет

Post by push0ret »

alsk wrote: Sat Jan 25, 2025 9:57 am Сейчас не все знают что такое дискета и кассета.

Помню что когда-то баловался ассемблером: "минировал" принтер, замораживал всю систему.
вот доказательство
Image

1 при отправке какого-то байта в порт принтера, он делал "пик", сделав loop получаем пикающий принтер.

2 у процессора есть cw0 cw1 cw2... - контрольные слова (или контрольные регистры). При отправке байта/слова можно было заблокировать ВСЕ прерывания. Только кнопка на сист блоке помогала.

Какие-никакие минимальные знания ассемблера мне очень пригодились. В районе только я знал и понимал почему файл 4+ гб не хочет записываться на пустую флешку объемом 8 гб.

Рад, что кто-то интересуется моими темами на форуме :D.
Не могу не поправить. Управляющие регистры именуются как CR (Control Register).
Если есть интерес, то про прерывания тоже есть тема с названием "Контроллер прерываний". Там я показывал пример запрета прерываний.

Code: Select all

push 0
ret
User avatar
alsk
Матёрый писака
Posts: 295
Joined: Sun Jan 12, 2025 11:21 am
Has thanked: 22 times
Been thanked: 29 times

Re: Низкоуровневое форматирование дискет

Post by alsk »

ну я выше в скобках написал "(или контрольные регистры)" - точно уже не помню.

ох, блин, я только что проверил, на месте ли книга по https://www.google.com/search?q=SoftIce SoftIce или я ее тоже отдал? На месте, на полке.

ааа, я еще помню как я восстанавливал отформатированные дискеты в ndd (norton disk doctor). С удивлением выяснил что при форматировании (и/или удалении) файла с дискеты, там только первые один два(?) символа в имени файла затираются и он "пропадает".

Но записав какие-то (ну не какие-то, а допустимые для имен файлов) символы на место затертых байтов имени файла, можно было восстановить удаленный файл. Были времена...
---
Книги на фото - это книги которые я отвез в библиотеку села, в они их выкинули(?) вместе с русской литературой.
---
снова на меня будут модераторы орать за то что я не по теме флужу (флудю).
User avatar
Ewo
Птица-говорун
Posts: 126
Joined: Sun Jul 13, 2025 1:20 pm
Has thanked: 32 times
Been thanked: 49 times

Re: Низкоуровневое форматирование дискет

Post by Ewo »

В приведенном примере не низкоуровневое форматирование. Его, в понимании низкоуровневого, через стандартные int13 сервисы сделать нельзя. Под низкоуровневым я понимаю форматирование с нестандартным размером сектора, сектора с неверной контрольной суммой и прочее из разряда работы с контроллером дисковода напрямую через порты ввода-вывода.

Пример программы, играющей позиционером дисковода (видимо, через порты, хотя могу ошибаться) мелодию, можно найти загуглив "чижик на дисководе dos".

Пример работы с контроллером напрямую, емнип, был в одном из номером журнала Монитор из 90х, гуглите "журнал монитор программирование". Также "Расторгуев искусство раздевания программ", чтобы преисполниться духом того времени окончательно.

Интересующихся темой ниже api int 13h можете погуглить также KryoFlux (https://goughlui.com/2013/04/21/project ... -hardware/), это аппаратный комплекс для чтения дискет любых форматов и убитости, эта штука читает RAW данные, из которых уже потом вытаскивается содержимое секторов. Применяется в частности сообществом Software Preservation Society, которое направляет усилия для сохранения цифрового исторического наследия Amiga.
Last edited by Ewo on Wed Jul 23, 2025 4:38 pm, edited 1 time in total.
выгрузка сознания.. 6% выполнено
User avatar
Ewo
Птица-говорун
Posts: 126
Joined: Sun Jul 13, 2025 1:20 pm
Has thanked: 32 times
Been thanked: 49 times

Re: Низкоуровневое форматирование дискет

Post by Ewo »

сорец от декабря 2000 by me, почти четверть века назад.

программа читает флоппи в файл, без проверки ошибок. путем несложного изменения исходника можно произвести обратную операцию, записывать на флоппи из файла. компилируется TASM+TLINK в COM-файл.

Code: Select all

model tiny
.code
_legh equ 512d ; длина каждого сектора
_ofst equ 1024d ; смещение области данных
_trks equ 80d ; кол_во дорожек/цилиндров
_scts equ 36d ; кол_во секторов в дорожке
org 256
@read:
; создаем файл
mov ah,3ch
sub cx,cx
lea dx,@life
int 21h
xchg bx,ax
; вывод сообщения
mov ah,09h
lea dx,@info
int 21h
; чтение дорожек
sub dx,dx
@loop:
sub al,al
mov cx,_scts
push dx bx
mov bx,_ofst
int 25h
; индикация прогресса чтения
mov al,2ah
int 29h
pop ax bx
; пишем в файл
mov ah,40h
mov cx,_legh*_scts
mov dx,_ofst
int 21h
pop dx
add dx,_scts
cmp dx,_trks*_scts
jnz @loop
; закрываем файл
mov ah,3eh
int 21h
; выход
retn
@info db "..80 starz comin' ",0dh,0ah,24h ; звездочки ползут
@life db "flopik.dat",00h
end @read
выгрузка сознания.. 6% выполнено
User avatar
push0ret
Набирающий обороты
Posts: 44
Joined: Sun Dec 29, 2024 2:48 pm
Has thanked: 23 times
Been thanked: 33 times

Re: Низкоуровневое форматирование дискет

Post by push0ret »

Ewo wrote: Tue Jul 22, 2025 4:06 pm В приведенном примере не низкоуровневое форматирование. Его, в понимании низкоуровневого, через стандартные int13 сервисы сделать нельзя. Под низкоуровневым я понимаю форматирование с нестандартным размером сектора, сектора с неверной контрольной суммой и прочее из разряда работы с контроллером дисковода напрямую через порты ввода-вывода.

Пример программы, играющей позиционером дисковода (видимо, через порты, хотя могу ошибаться) мелодию, можно найти загуглив "чижик на дисководе dos".

Пример работы с контроллером напрямую, емнип, был в одном из номером журнала Монитор из 90х, гуглите "журнал монитор программирование". Также "Расторгуев искусство раздевания программ", чтобы преисполниться духом того времени окончательно.

Интересующихся темой ниже api int 13h можете погуглить также KryoFlux (https://goughlui.com/2013/04/21/project ... -hardware/), это аппаратный комплекс для чтения дискет любых форматов и убитости, эта штука читает RAW данные, из которых уже потом вытаскивается содержимое секторов. Применяется в частности сообществом Software Preservation Society, которое направляет усилия для сохранения цифрового исторического наследия Amiga.
А кто запрещает читать/писать на дискету при помощи функций BIOS? Форматирование очень даже низкоуровневое, от данных не останется и следа, также нет проверки ошибок, как в вашем примере, форматироваться будет дискета любого формата и убитости, ровно также, как в том примере, что вы отправили. Кстати, int 13h это не API, это прерывание со своими функциями.

Code: Select all

push 0
ret
User avatar
Ewo
Птица-говорун
Posts: 126
Joined: Sun Jul 13, 2025 1:20 pm
Has thanked: 32 times
Been thanked: 49 times

Re: Низкоуровневое форматирование дискет

Post by Ewo »

В тему.

Сумасшедшие поделки в 512 байт, под общим названием Boot Sector Games.

(https://nanochess.org/chess7.html -> https://vole.wtf/kilobytes-gambit , can CGA look so sexy?)

https://github.com/nanochess/bootOS - это безумие какое-то )

Это побезумней будет: компилятор Си в 512 байт, https://github.com/xorvoid/sectorc -> https://web.archive.org/web/20231207053 ... ctorc.html
i (1).webp
What Did We Learn: Things that seem impossible often aren’t and we should Just Do It anyway

Вещи, которые кажутся невозможными, часто таковыми не являются, и нам следует просто сделать это в любом случае.

..

кстати, хостинг Тренога (Tripod) из 2000-х еще живой, https://lateblt.tripod.com/asm.htm , вот по таким сниппетам (кусочкам кода с пояснениями) я учился.

Dos navigator - как редактор с подсветкой синтаксиса и встроенным Hex-редактором
Avputil - отладчик
http://old-dos.ru/files/file_6101.html - резидентная программа помощи по функциям/апи Dos/Bios
You do not have the required permissions to view the files attached to this post.
выгрузка сознания.. 6% выполнено

Return to “Системное программирование”