Board.KolibriOS.org

Official KolibriOS board
It is currently Mon May 25, 2020 6:17 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 12 posts ] 
Author Message
PostPosted: Wed Sep 23, 2009 4:47 pm 
Offline

Joined: Wed Jun 25, 2008 9:45 am
Posts: 35
сабж


Top
   
PostPosted: Wed Sep 23, 2009 4:55 pm 
Microsoft Extensible Firmware Initiative FAT32 File System Specification
/kernel/trunk/fs/fat12.inc Diamond'а в заголовок забыли написать...


Top
   
PostPosted: Wed Sep 23, 2009 7:43 pm 
Offline

Joined: Wed Jun 25, 2008 9:45 am
Posts: 35
пасиб конечно, но первый документ у меня уже есть, а второй - я повешусь разбирать 2700 строк, а тем более когда Tasm там показывает кучу ошибок


Top
   
PostPosted: Wed Sep 23, 2009 8:07 pm 
Тогда ищи где-нибудь книгу Кулаков В. "Программирование дисковых подсистем", хотя я заказал по почте в свое время.


Top
   
PostPosted: Fri Sep 25, 2009 12:43 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Mar 20, 2006 10:44 am
Posts: 558
вечером если не забуду - вышлю, курсовик такой по управлению ресурсов делали.


Top
   
PostPosted: Fri Oct 02, 2009 7:42 pm 
Offline

Joined: Wed Jun 25, 2008 9:45 am
Posts: 35
Подскажите плиз, что не так в программе. Fat считывается, но если записать на чистый диск файл, то видны лишние FF вначале, а в дальнейшем вообще неправильные числа отображает

Code:
#include <stdio.h>
#include <conio.h>
#include <malloc.h>
#include <dos.h>
//#include "sysp.h"

char *buf, *fat;

int getN(char *buf, unsigned byte1, unsigned size)
{
  int r = 0;
  for(int i = byte1 + size - 1; i >= byte1; i--)
  {
    r *=256;
    r += buf[i];
  }
  return r;
}

void readSect(char *buf, unsigned sect1, unsigned num)
{
  REGS rs;
  SREGS ss;
  rs.x.dx = sect1;
  rs.x.cx = num;
  rs.x.bx = FP_OFF(buf);
  rs.x.ax &= 0;//Number of drive
  ss.ds = FP_SEG(buf);
  int86x(0x25, &rs, &rs, &ss);
}

  unsigned int wSectSize, wResSects, fatSect, wFatSects, bFatCnt, RootSect,
  wRootEntries, bClustSects, DataSect;

unsigned int nextCluster(int k)
{
  unsigned int start = k * 3 / 2, r = 0;
  r = fat[start];
  start++;
  r += (unsigned int)fat[start] * 256;
  if(k % 2 == 0)
    return (r & 0xFFF);
  else
    return (r >> 4);
}

int main()
{
  char c;
  clrscr();
  buf = (char *)calloc(512, 1);
  readSect(buf, 0, 1);

  wSectSize = getN(buf, 0xB, 2);
  fatSect = wResSects = getN(buf, 0xE, 2);
  wFatSects = getN(buf, 0x16, 2);
  bFatCnt = getN(buf, 0x10, 1);
  RootSect = fatSect + wFatSects * bFatCnt;
  wRootEntries = getN(buf, 0x11, 2);
  bClustSects = getN(buf, 0xD, 1);
  DataSect = RootSect + wRootEntries * 32 / wSectSize;

  printf("wFatSects = %d\n", wFatSects);
  printf("Reserved = %d\nFAT begin = %d\nFATSize = %d\nFATCount = %d\n",
  wResSects, fatSect, wFatSects, bFatCnt);
  printf("RootSector = %d\nRootSize = %d\nSector Size = %d\n",
  RootSect, wRootEntries, wSectSize);
  free(buf);
  fat = (char *)calloc(sizeof(char), wFatSects * wSectSize);
  readSect(fat, fatSect, wFatSects * bClustSects);

  for(unsigned int i = 0; i < wFatSects * wSectSize * 2 / 3; i++)
  {
    unsigned int r = nextCluster(i);
    if(i % 20 == 0)
    {
      clrscr();
      printf("Cluster   | Value \n");
    }
    printf("%-9X        %-9X\n", i, r);
    if(i % 20 == 19)
    {
      c = getch();
      if(c == 'q')
        return 0;
    }
  }/**/
  free(fat);
  scanf("%c", c);
  return 0;
}


Top
   
PostPosted: Fri Oct 02, 2009 7:54 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Nov 28, 2005 8:00 pm
Posts: 1601
В FAT кластеры нумеруются, начиная с 2.

_________________
Ушёл к умным, знающим и культурным людям.


Top
   
PostPosted: Sat Oct 03, 2009 12:42 pm 
Offline

Joined: Wed Jun 25, 2008 9:45 am
Posts: 35
не догоняю, может дело в железе, потому что одна и та же программа на домашнем пк выдает нормальные цифры, на ноутах глюки... И там и там использую Vfdwin, т.к. привода нету.
выводит таблицу FAT: EF0, FEF, 3, 4, 5, 6, 7, FF8, 9, FFA, B, FFC, D, FFE, F, 10, 11, 12, 13, 14, 15, 16, 17, 8, 19, A, 1B, C, 1D, E, 1F


Top
   
PostPosted: Sat Oct 03, 2009 9:18 pm 
Gargo wrote:
И там и там использую Vfdwin, т.к. привода нету.

Если я правильно понял, то ты пытаешся осуществить низкоуровневый доступ. Причем используя не совсем надежные методы. Может стоит попробовать такой вариант - работаем с файлом образа (например kolibri.img) загруженный в память, чтобы исключить всякие технически накладки. А уже затем можно прикручивать работу с железом. Т.е. поделить код на драйвер железки и драйвер файловой системы, и сначала отладить драйвер файловой системы.


Top
   
PostPosted: Sun Oct 04, 2009 10:35 am 
Offline

Joined: Wed Jun 25, 2008 9:45 am
Posts: 35
Вообще, это касается не только колибри и выбирать можно только язык программирования. Работать с образом дискеты - уже не то, попробую еще тогда написать на чистом асме


Top
   
PostPosted: Sun Oct 04, 2009 12:09 pm 
Mario wrote:
например kolibri.img

Gargo wrote:
Вообще, это касается не только колибри

Слово например написал не просто так. Я понял что к Колибри отношения не имеет (еще со второго поста в теме), однако если так принципиально, то возьми образ загрузочной дискеты MS-DOS, спасательной дискеты Win98. В общем не принципиально какой образ.
Gargo wrote:
Работать с образом дискеты - уже не то

Почему? ИМХО логично отладить код обрабатывающие данные, а потом уже отлаживать ту часть, которая отвечает за работу с оборудованием. Все же отладить две вещи последовательно проще, чем отладить две вещи параллельно.


Top
   
PostPosted: Sun Oct 04, 2009 2:08 pm 
Offline

Joined: Wed Jun 25, 2008 9:45 am
Posts: 35
Mario wrote:
Gargo wrote:
Работать с образом дискеты - уже не то

Почему? ИМХО логично отладить код обрабатывающие данные, а потом уже отлаживать ту часть, которая отвечает за работу с оборудованием. Все же отладить две вещи последовательно проще, чем отладить две вещи параллельно.

это ты скажи тому, кто выдавал задание


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 12 posts ] 

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited