Опис головних Зміннних
_________________________________________________________________________
/* peek повертає слово в пам'яті місця, зазначеного як сегмент:offset*/
/*int peek (unsigned segment, unsigned);*/
/* змінює ціле значення в комірці пам'яті даного сегменту: */
//**Параметри****
/* 0 Перший тип флоппі диску
1 Другий тип флоппі диску
2 Третій тип флоппі диску
... і (etc.)
0x80 Перший тип диску
0x81 Другий тип диску
0x82 Третій тип диску */
/*head і biosdisk
track і biosdisk Це специфіки старту даного сектору
sector і biosdisk */
/*nsects і biosdisk Номери секторів для читання (запису))*/
/*buffer і biosdisk Адреса у памяті де сегмент даних може
бути зчитаний (записаний)*/
________________________________________________________________________
#include<stdio.h>
#include <conio.h>
#include <bios.h>
int main ()
{
textcolor(12);
textbackground(3);
clrscr();
int i,k,flag;
char buffer[512];
char buf [512];
int ntrk=83;
puts("************************ [Po4atok ] **********************\n");
for(i=0;i<512;i++) buffer[i] =0;
for(k=0;k<18;k++)
{
/*Nomer dorigki*/
buf[4*k]=ntrk;
/*Nomer golovki(robochoi poverhni)*/
buf[4*k+1]=0;
/*Nomer sektora vid 1 do 18*/
buf[4*k+2]=k+1;
/*Dovgna sektora 512 bayt*/
buf[4*k+3]=1;
}
flag=biosdisk(5,0,0, ntrk, 1, 18, buf);
if(flag!=0){
printf("< ERROR on drive A: Pomilka formatuvanya > \n");
getch();
return(0);
}
flag=biosdisk(3,0,0, ntrk, 1,18, buffer);
if(flag!=0)
{ printf("< ERROR on drive A: Pomlka zapsu na Disck >\n");
getch();
} puts("END"); getch(); }
Програма № 2. Нестандартне форматування 39-ї доріжки. (мова Сі)
#include <dos.h>
#include <stdio.h>
#include <bios.h>
#include <conio.h>
int main(void)
{
textcolor(12);
textbackground(4);
clrscr();
unsigned char tf[11]={0xDF, 2, 0x25,2,0x12, 0x2A, 0xFF, 0x13, 0xF6,25,4};
unsigned char buf[256],buffer[512];
int seg, ofs, k, l, ntrk, flag,i;
for(i=0;i<512;i++) buffer[i] =0;
printf("*********************** [ Start ] *******************\n");
seg=peek(0,122);
ofs=peek(0,120);
poke(0,122,_DS);
poke(0,120,(unsigned)tf);
_ES=_DS;
ntrk=79;
for(k=0;k<18;k++)
{
buf[4*k]=ntrk;
buf[4*k+l]=0;
buf[4*k+2]=k+l;
buf[4*k+3]=l;
}
flag=biosdisk(5,0, 0,ntrk,1,18, buf);
if(flag!=0)
{
printf(" < ERROR on drive A: Pomilka formatuvanya >\n");
poke(0,122, seg);
poke(0,120, ofs);
getch();
return(0);
}
flag=biosdisk(3,0,0,ntrk,1,1, buffer);
if(flag!=0)
{
printf(" < ERROR on drive A: Pomilka zapsu na Disk >\n");
poke(0,122, seg);
poke(0,120, ofs);
getch();
return(0);
}
poke(0,120, ofs);
printf(" ******************** END PROCESS *********************\n");
getch();
return 0;
}
Прогнама № 3. Програма читання (написана мовою Assembler )
.model small
.data
tf db 0DFh,002h,025h,002h,012h,02Ah,0FFh,013h,0F6h,25,4
bf db 513 dup ('$')
s_tf_ofs dw ?
s_tf_seg dw ?
.code
Start:
mov ax, seg bf
mov ds,ax
mov ax, offset tf
mov bx, 0
mov es, bx
mov bx, 120
mov cx, es:[bx]
mov s_tf_ofs, cx
mov es:[bx], ax
mov ax, seg tf
mov bx, 0
mov es, bx
mov bx, 122
mov cx, es:[bx]
mov s_tf_seg, cx
mov es:[bx], ax
mov ax, 00201h
mov bx, offset bf
mov cx, 02701h
mov dx, seg bf
mov es, dx
mov dx, 0
int 13h
mov bx, 0
mov es, bx
mov bx, 120
mov cx, s_tf_ofs
mov es:[bx], cx
mov bx, 0
mov es, bx
mov bx, 122
mov cx, s_tf_seg
mov es:[bx], cx
cmp ah, 0
je met0
mov ax, 04C00h
int 21h
met0:
mov ah,9
mov dx, offset bf
int 21h
mov ax, 04C00h
int 21h
end Start
Щоб перевірити 9-тий параметр бази диска, а саме Символ-заповнювач формату, змінюю 9-тий параметр програми №3 у рядку змінної [tf] на FFh.