|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
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
|
неужели никто не знает?
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Драйвер | Sting12 | Помощь студентам | 3 | 27.12.2009 18:16 |
Драйвер | milancrash | Фриланс | 1 | 01.04.2009 08:22 |