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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.10.2014, 11:42   #1
VladKomosh
Новичок
Джуниор
 
Регистрация: 15.10.2014
Сообщений: 6
По умолчанию Программа для вынесения метки за пределы поля копирования флешки

Был дан пример программы для дискеты с параметрами:
  • 360 Кб
  • 40 дорожек
  • по 9 секторов в каждой;
  • нумерация дорожек от 0 до 39.

Код C
Код:
#include<stdio.h>
#include <conio.h>
#include <bios.h>
int main (void)
{
 textcolor(14);
 textbackground(1);
 clrscr();
 int i,k,flag;
 char buffer[512];
 char buf [512];
 ntrk=41; // nomer dorojki za predelom
 
for(i=0;i<512;i++) buffer[i] =0; // zapolnijem buffer
 
for(k=0;k<9;k++){ //zapolnaem identyfykatory formatu
 
buf[4*k]=ntrk; // nomer dorojki
 
 
buf[4*k+l]=0; //nomer golovki
 
buf[4*k+2]=k+l; // nomer sectora ot 1 k 9
 
buf[4*k+3]=2; // 512 bite sector
} 
 
flag=biosdisk(5,0,0, ntrk, l, 9, buf); // formatirovanie 41 dorojki
 if(flag!=0){
printf ( "Oshybka formatirovanie:");
return(0);
           }
 
flag=biosdisk(3,0,0, ntrk, 1,1, buffer); // zapys pervogo sectora na otformatirovanuu dorojku
if(flag!=0){
printf ( "Oshybka zapisi");
return(0); 
  }

Пробовал переделывать под параметры флешки:
  • 121 цилиндра
  • 1950720 секторов
  • 255 головки
  • 63 секторов на дорожку
  • 512 байт на головку
  • * Вычислил количество дорожек:
  • 1950720/63 = 30963.8

Мой код:
Код C
Код:
#include <stdio.h>
#include <conio.h>
#include <bios.h>
int main (void)
{
 textcolor(14);
 textbackground(1);
 clrscr();
 int i,k,flag;
 char buffer[512];
 char buf [512];
 int ntrk=30965;
   puts("************************ [ Start ] **********************\n");
   for(i=0;i<512;i++) buffer[i] =0;
   for(k=0;k<63;k++)
   {
 
        /*Nomer dorojki*/
        buf[4*k]=ntrk;
        /*Nomer golovki*/
        buf[4*k+1]=0;
        /*Nomer sektora ot 1 k 63*/
        buf[4*k+2]=k+1;
        /* sektor 512 bayt*/
        buf[4*k+3]=1;
 
 
   }
 
 flag=biosdisk(5,0x81,0, ntrk, 1, 63, buf);
 if(flag!=0){
   printf("< ERROR on drive A: oshybka formatyrovanya > \n");
   getch();
   return(0);
 }
 flag=biosdisk(3,0x81,0, ntrk, 1,63, buffer);
 if(flag!=0){
  printf("< ERROR on drive A: oshybka zapisi na Disck  >\n");
  getch();
  return(0);
 }
 puts("END");
 getch();
 }
Программа не работает.

Вопросы:
  • Вообще функция биосдиск рассчитана на работу с флешкой? (В описании написано хард дриве и флоппи)
  • Если да, то является правильным обращение к флешке через 0х81 (0х80 первый винчестер и тд.)?
  • Не понятен данный фрагмент вообще
Код C
Код:
/*Nomer dorojki*/
        buf[4*k]=ntrk;
        /*Nomer golovki*/
        buf[4*k+1]=0;
        /*Nomer sektora ot 1 k 63*/
        buf[4*k+2]=k+1;
        /* sektor 512 bayt*/
        buf[4*k+3]=1;
Спасибо.

Последний раз редактировалось Stilet; 15.10.2014 в 12:14.
VladKomosh вне форума Ответить с цитированием
Старый 15.10.2014, 12:28   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

biosdisk() - это ж низкоуровневая функция, работающая через прерывания! Ты под какой ОС прогу запускать-то собрался?
Что она, хоть, у тебя возвращает в переменную flag?
Код:
                   0x00   успешная операция.
                   0x01   неверная команда.
                   0x02   адресный маркер не найден.
                   0x03   попытка записи на диск, защищенный от записи.
                   0x04   сектор не найден.
                   0x05   неудачный сброс (для жесткого диска).
                   0x06   диск изменился после последней операции.
                   0x07   сбой параметра активности дисковода.
                   0x08   конфликт при работе DMA.
                   0x09   попытка обращения к DMA за границей 64К.
                   0x0A   обнаружен дефектный сектор.
                   0x0B   обнаружена дефектная дорожка.
                   0x0C   неподдерживаемая дорожка.
                   0x10   ошибка CRC/ECC при чтении диска.
                   0x11   ошибка CRC/ECC при корректировке данных.
                   0x20   сбой при работе контроллера.
                   0x40   сбой при операции поиска.
                   0x80   узел подсоединения не отвечает.
                   0xAA   устройство не готово (только для жесткого диска).
                   0xBB   произошла нераспознаваемая ошибка (только для жесткого диска).
                   0xCC   произошел сбой при записи.
                   0xE0   ошибка статуса.
                   0xFF   сбой операции распознавания.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 15.10.2014, 13:46   #3
VladKomosh
Новичок
Джуниор
 
Регистрация: 15.10.2014
Сообщений: 6
По умолчанию

1. Запускал под windows 7 borland 3.1, но получал ошибку:
16 bit ms dos subsystem.
An application has attempted to directly access the hard disk , which cannot be supported. This may cause the application to function incorrectly. Choose close to terminate the application.
2. Flag через дебагер не смог достать результат, ибо 1.
VladKomosh вне форума Ответить с цитированием
Старый 15.10.2014, 13:59   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
1. Запускал под windows 7 borland 3.1, но получал ошибку:
16 bit ms dos subsystem.
An application has attempted to directly access the hard disk , which cannot be supported. This may cause the application to function incorrectly. Choose close to terminate the application.
Очень даже правильное сообщение от системы. Между строк там написано: "если хочешь низкоуровневого секса с носителями, установи виндовс 98."
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 15.10.2014, 16:22   #5
VladKomosh
Новичок
Джуниор
 
Регистрация: 15.10.2014
Сообщений: 6
По умолчанию

Т.е. установление 98 виндовс может способствовать решению проблемы?
VladKomosh вне форума Ответить с цитированием
Старый 15.10.2014, 16:26   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Т.е. установление 98 виндовс может способствовать решению проблемы?
Про решение не обещаю, но сеанс низкоуровневого секса с носителями гарантирую.

Объясни лучше, откуда растут ноги твоей задачи?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 15.10.2014, 16:50   #7
VladKomosh
Новичок
Джуниор
 
Регистрация: 15.10.2014
Сообщений: 6
По умолчанию

Дело в том, что изучение языка с только в процессе, а уже задали такую ​​задачу. Тема работы - защита носителя от копирования.
Рассматривают метод вынесения метки за пределы поля копирования. Идея метода заключается в том, чтобы, используя функцию 05h прерывания int 13h, форматировать дорожки с номерами от 40 и более - так писало в описании задачи
VladKomosh вне форума Ответить с цитированием
Старый 15.10.2014, 17:00   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Дело в том, что изучение языка с только в процессе, а уже задали такую ​​задачу. Тема работы - защита носителя от копирования.
А как предмет-то называется? Надеюсь, не "программирование"?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 15.10.2014, 17:08   #9
VladKomosh
Новичок
Джуниор
 
Регистрация: 15.10.2014
Сообщений: 6
По умолчанию

Системное программирование)
Параллельно идет курс информатики
VladKomosh вне форума Ответить с цитированием
Старый 15.10.2014, 17:46   #10
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Тема работы - защита носителя от копирования.
Носителя или именно флешки?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа для резервного копирования в Windows Lime Софт 8 11.03.2012 04:42
программа для защиты флешки turbooj55 Безопасность, Шифрование 2 01.06.2011 09:57
Макрос для копирования значений из нескольких файлов в один общий с определенным условием копирования zenner Microsoft Office Excel 0 21.03.2011 14:48
Программа для копирования заданного раздела. С++ x007 Общие вопросы C/C++ 5 23.04.2009 23:52