EvoTools (ROM)

ZX evolution software and hardware

Postby DimkaM » 08 Oct 2010, 16:59

чета я ни хера не уследил ход сообщений.
Получается в дескрипторе файла будет хранится адрес дескриптора раздела?!
ZX-Evo rev C, ZXNetUsb rev С
DimkaM
 
Posts: 1290
Joined: 24 Mar 2010, 13:42
Location: джунгли Амазонки
Group: Registered users

Postby breeze » 08 Oct 2010, 17:09

DimkaM wrote:чета я ни хера не уследил ход сообщений.


ну вот смотри:

+#0A 00 C0 - адрес под буфер для чтения
+#0C 01 00 - размер буфера

в выделяемой область памяти под буфер, будут хранится данные необходимые для работы системы. Здесь могут быть: a) временные переменные для внутреннего пользования; б) данные прочитанные с устройства (каталог, фат итд); ц) ещё какие-нибудь данные
User avatar
breeze
 
Posts: 761
Joined: 07 Feb 2009, 17:19
Location: Оттуда
Group: Registered users

Postby deathsoft » 08 Oct 2010, 17:37

Вот список функций которые нужно сделать для нормальной работы с дисками:
int opendev(DEV *dev, char *name); // Открытие утсройтсва
int closedev(DEV *dev); // Закрытие устройства

int open(FILE *file, DEV *dev, char *name); // Открытие файла на устройстве
int close(FILE *file); // Закрытие файла

int read(FILE *file, void *buf, int len); // Чтение файла
int write(FILE *file, void *buf, int len); // Запись файла
int seek(FILE *file, int type, int pos); // Сместить текущую позицию файла (относительно начала/текущей/конца)


int chdir(DEV *dev, char *name); // Смена текущего каталога на устройстве
int getcwd(DEV *dev, char *name); // Получение текущего каталога на устройстве

int opendir(FILE *dir, DEV *dev, char *name); // Открытие каталога
int readdir(FILE *dir, DIR *dir_entry); // Пеерчисление элементов каталога
int closedir(FILE *dir); // Закрытие каталога

Все функции возвращают статус.
DEV - описатель утсройства
FILE - описатель файла/каталога
DIR - публичная структура с элементами каталога (содержит 1 элемент каталога)

При запуске программы из командера в регистре HL (для примера) передается указатель на структуру DEV, чтобы можно было опреелить текущее устройство и каталог.

Устройства именовать например так:
SD0, SD1, ... - сд-карты
HD0, HD1, ... - винты
FD0, FD1, ... - дисководы
CD0, CD1, ... - сидюки

В именах файлов имя устройства не указывается!!!
Т.е. сначала открывается устройство и получается его описатель, а потом открывается файл на этом устройстве (файлы именуются от корня либо от текущего каталога):
"\mydir1\myfile" - абсолютный путь
"myfile" - путь относительно текущего каталога
Текущий каталог содержится в структуре DEV.
Last edited by deathsoft on 08 Oct 2010, 18:23, edited 3 times in total.
User avatar
deathsoft
 
Posts: 357
Joined: 07 Apr 2007, 01:58
Group: Registered users

Postby DimkaM » 08 Oct 2010, 17:39

сигнатура раздела это нифига не временные данные, че мбр читать при каждом обращении к диску?
ZX-Evo rev C, ZXNetUsb rev С
DimkaM
 
Posts: 1290
Joined: 24 Mar 2010, 13:42
Location: джунгли Амазонки
Group: Registered users

Postby savelij » 08 Oct 2010, 17:42

Хде скачать на посмотреть что вы тут понаписали? :crazy:
savelij
 
Posts: 520
Joined: 10 Jun 2008, 17:35
Group: Registered users

Postby breeze » 08 Oct 2010, 17:51

deathsoft wrote:Вот список функций которые нужно сделать для нормальной работы с дисками:


хм… однако…

DimkaM wrote:че мбр читать при каждом обращении к диску?


а чё с момента последнего обращения к диску никаких изменений произойти не могло ? ;)
User avatar
breeze
 
Posts: 761
Joined: 07 Feb 2009, 17:19
Location: Оттуда
Group: Registered users

Postby breeze » 08 Oct 2010, 17:57

savelij wrote:Хде скачать на посмотреть что вы тут понаписали? :crazy:


ага :) как вот напишем, так и сразу выложим :D
User avatar
breeze
 
Posts: 761
Joined: 07 Feb 2009, 17:19
Location: Оттуда
Group: Registered users

Postby deathsoft » 08 Oct 2010, 18:21

breeze wrote:хм… однако…

Большинство функций у Савелия и так готовы, все функции типа close... ничего не делают кроме установки флага в структуре что файл или диск закрыт, чтобы все последующие вызовы возвращали ошибку. Т.ч. реально там функций не так и много (собственно это набор файловых функций любой буханки).
User avatar
deathsoft
 
Posts: 357
Joined: 07 Apr 2007, 01:58
Group: Registered users

Postby DimkaM » 08 Oct 2010, 18:28

вот выдернул откудато инициализацию:
Code: Select all
unsigned char fatInit( unsigned char device)
{
   //struct partrecord *pr;
   struct bpb710 *bpb;

   // read partition table
   // TODO.... error checking
   ataReadSectors(DRIVE0, 0, 1, SectorBuffer);
   // map first partition record   
   // save partition information to global PartInfo
   PartInfo = *((struct partrecord *) ((struct partsector *) SectorBuffer)->psPart);
//   PartInfo = *pr;
   
   // Read the Partition BootSector
   // **first sector of partition in PartInfo.prStartLBA
   ataReadSectors( DRIVE0, PartInfo.prStartLBA, 1, SectorBuffer );
   bpb = (struct bpb710 *) ((struct bootsector710 *) SectorBuffer)->bsBPB;

   // setup global disk constants
   FirstDataSector   = PartInfo.prStartLBA;
   if(bpb->bpbFATsecs)
   {
      // bpbFATsecs is non-zero and is therefore valid
      FirstDataSector   += bpb->bpbResSectors + bpb->bpbFATs * bpb->bpbFATsecs;
   }
   else
   {
      // bpbFATsecs is zero, real value is in bpbBigFATsecs
      FirstDataSector   += bpb->bpbResSectors + bpb->bpbFATs * bpb->bpbBigFATsecs;
   }
   SectorsPerCluster   = bpb->bpbSecPerClust;
   BytesPerSector      = bpb->bpbBytesPerSec;
   FirstFATSector      = bpb->bpbResSectors + PartInfo.prStartLBA;
   RootDirStartCluster = bpb->bpbRootClust;
   // push data sector pointer to end of root directory area
   // need this? FirstDataSector += (bpb->bpbRootDirEnts)/DIRENTRIES_PER_SECTOR;
   // set current directory to root (\)
   CurrentDirStartCluster = RootDirStartCluster;
   
   return 0;   
}
ZX-Evo rev C, ZXNetUsb rev С
DimkaM
 
Posts: 1290
Joined: 24 Mar 2010, 13:42
Location: джунгли Амазонки
Group: Registered users

Postby DimkaM » 08 Oct 2010, 18:54

кто возьмется на асм переписать?
я на телефоне ща сижу, много не понапишешь, до компа только послезавтра доберусь.
ZX-Evo rev C, ZXNetUsb rev С
DimkaM
 
Posts: 1290
Joined: 24 Mar 2010, 13:42
Location: джунгли Амазонки
Group: Registered users

PreviousNext

Return to Пентева - софт и железо

Who is online

Users browsing this forum: No registered users and 5 guests

cron