Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.06.2011, 21:39   #1
Толяс
Новичок
Джуниор
 
Регистрация: 25.06.2011
Сообщений: 2
По умолчанию Драйвер Floppy-диска с функцией BPB

народ, есть код драйвера для флоппи с функцией ВРВ ( Блок параметров BIOS (BIOS Parameter Block - BPB) Это - подмножество данных, содержащихся в корневом секторе. Запрос к драйверу).
Ниже предоставляю листинг. Он вроде как правильный, вот только препод решил меня, по ходу, завалить, говорит, что видел этот код тыщу раз. Может кто-нибудь поможет его немного переделать, чтобы суть сохранилась. За комменты по листингу отдельное спасибо

Листинг:

#include <dos.h>
#include <conio.h>
#include <stdlib.h>
#include <iostream.h>
struct BPB
{
int sect_size; //размер сектора в байтах
char clust_sect; //кол-во секторов в кластере
int res_sects; //кол-во зарезервированных секторов
char fat_cnt; //кол-во копий FAT
int root_ent;
int tot_sects; //общее кол-во секторов на диске
char media;
int fat_sects; //кол-во секторов одной копии FAT
int sec_p_trk;
int heads; //кол-во магнитных головок
long hid_sect;
long big_tot_sect; //общее кол-во секторов на диске
char nils[487];

void bpb(int, char, int, char, int, int, char, int, int, int, long, long);
};
void BPB::bpb(int x1, char x2, int x3, char x4, int x5, int x6, char x7, int x8, int x9, int x10, long x11, long x12 ) // осуществляет инициализацию структуры BPB.
{
sect_size = x1;
clust_sect = x2;
res_sects = x3;
fat_cnt = x4;
root_ent = x5;
tot_sects = x6;
media = x7;
fat_sects = x8;
sec_p_trk = x9;
heads = x10;
hid_sect = x11;
big_tot_sect = x12;

for (int i = 0; i < 487; i++)
{
nils[i] = 0;
}
}


REGS r;
SREGS s;

int proverka_zapis ()
{
r.h.ah = 0x01;
r.h.dl = 0x0;
int86(0x13, &r, &r);
return r.h.ah;
}
int zapis_bpb (BPB *bpb)
{
r.h.ah = 0x03;
r.h.al = 0x01;
r.h.ch = 0x0;
r.h.cl = 0x01;
r.h.dl = 0x0;
r.h.dh = 0x0;
s.es = FP_SEG(bpb);
r.x.bx = FP_OFF(bpb);
int86x(0x13, &r, &r, &s);
return r.h.ah;
}

void print_errors(int i)
{
switch (i)
{
case 0:
cout << "Testing. No error on last operation" << endl;
getch();
break;
case 1:
{
cout << "Testing. Bad command:invalid request to controller" << endl;
getch();
}
break;
case 2:
{
cout << "Testing. Bad address mark" << endl;
getch();
}
break;
case 3:
{
cout << "Testing. Write protect: attempted to write on write-protected diskette" << endl;
getch();
}
break;
case 4:
{
cout << "Testing. Sector ID bad or not found" << endl;
getch();
}
break;
}
}

int main()
{
clrscr();
int i = 0;
i = proverka_zapis();
print_errors(i);

if (i != 0)
{
return 1;
}

BPB bpb;
bpb.bpb(512, 1, 0, 0x02, 64, 2880, 0xF0, 9, 18, 2, 0, 0);

i = zapis_bpb(&bpb);
print_errors(i);

return 0;
}


Описание функций:

void BPB::bpb(int x1, char x2, int x3, char x4, int x5, int x6, char x7, int x8, int x9, int x10, long x11, long x12 );
- осуществляет инициализацию структуры BPB.

int proverka_zapis();
- проверяет возможность записи на флоппи-диск (используется 0х01 функция прерывания 0х13).


int zapis_bpb (BPB *bpb);
- записывает на флоппи диск созданную структуру BPB (используется 0х03 функция прерывания 0х13).

void print_errors(int i);
- осуществляет печать ошибок (BIOS Disk Error Codes)

помогите, пожалуйста, я уже выбился из сил
Толяс вне форума Ответить с цитированием
Старый 26.06.2011, 18:39   #2
Толяс
Новичок
Джуниор
 
Регистрация: 25.06.2011
Сообщений: 2
По умолчанию

неужели никто не знает?
Толяс вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Драйвер Sting12 Помощь студентам 3 27.12.2009 18:16
Драйвер milancrash Фриланс 1 01.04.2009 08:22