예제 #1
0
파일: main.c 프로젝트: freecores/eco32
void main(void) {
  unsigned long numSectors;

  /* init interrupts */
  initInterrupts();
  /* check disk ready */
  if (!checkDiskReady()) {
    error("disk not ready");
  }
  /* determine disk size */
  numSectors = getDiskSize();
  printf("Disk has %lu (0x%lX) sectors.\n",
         numSectors, numSectors);
  if (numSectors < 32) {
    error("disk is too small");
  }
  /* copy boot block to write buffer */
  copyBootBlock();
  /* write boot block to disk */
  printf("Writing boot block to disk...\n");
  if (!writeDisk(0, 32, wrBuf)) {
    error("cannot write boot block to disk");
  }
  /* done */
  printf("Halting...\n");
}
예제 #2
0
void writeDiskSector(char *data, FILE *f) {
	int pos;
	printf("Track:%d, Sector:%d Pos:%06x written\n", track*2+(sectrk > 15), (sectrk > 15 ? sectrk - 16 : sectrk)+1, pos = getSectorLocation(track, sectrk*2));
	writeDisk(data, pos, 256, f);
	if (++sectrk >= 32) {
		sectrk = 0; track++;
	}
}
예제 #3
0
int mkDir(MyDisk * disk,DirBlock * curBlock,short curBlockp,char * dirName)
{
	short pi,pb,i=0;
	DirBlock *newDirBlock;
	pi=getAvailableInode(disk);
	pb=getAvailabeBlock(disk);

	if(!pi||!pb)//创建目录失败
		return 0;


	//在curDirBlock中加入新的inode指针,指向inodeTable中的位置
	while(curBlock->inodeID[i])  
	{
		if(!strcmp(dirName,curBlock->fileName[i]))//已存在同名文件
		{	
			printf("已存在同名文件,无法新建!\n");
			return 0;
		}
		i++;
	}
	curBlock->inodeID[i]=pi;
	strcpy(curBlock->fileName[i],dirName);
	writeDisk(curBlock,BLOCK_SIZE,1,sizeof(MyDisk)+curBlockp*BLOCK_SIZE);

	//为新的目录分配一个inode和DirBlock
	disk->superB.freeBlocks--;
	disk->superB.freeInodes--;

	disk->inodeUsedMap[pi]=1;
	disk->inodeTable[pi].blockPoint[0]=pb;
	disk->inodeTable[pi].fileType=2;

	disk->blockUsedMap[pb]=1;
	newDirBlock=(DirBlock *)malloc(sizeof(DirBlock));
	memset(newDirBlock,0,sizeof(DirBlock));
	writeDisk(newDirBlock,BLOCK_SIZE,1,sizeof(MyDisk)+pb*BLOCK_SIZE);
	return 1;
}