⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 disk_io.h

📁 Unix操作系统minix 2.0源码
💻 H
字号:
/*

	FIPS - the First nondestructive Interactive Partition Splitting program



	Module disk_io.h



	RCS - Header:

	$Header: c:/daten/fips/source/main/RCS/disk_io.h 1.4 1995/01/19 00:01:25 schaefer Exp schaefer $



	Copyright (C) 1993 Arno Schaefer



	This program is free software; you can redistribute it and/or modify

	it under the terms of the GNU General Public License as published by

	the Free Software Foundation; either version 2 of the License, or

	(at your option) any later version.



	This program is distributed in the hope that it will be useful,

	but WITHOUT ANY WARRANTY; without even the implied warranty of

	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

	GNU General Public License for more details.



	You should have received a copy of the GNU General Public License

	along with this program; if not, write to the Free Software

	Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.





	Report problems and direct all questions to:



	schaefer@rbg.informatik.th-darmstadt.de

*/



#ifndef DISK_IO_H

#define DISK_IO_H



#include "types.h"





/* ----------------------------------------------------------------------- */

/* Structure to hold information about the drive geometry                  */

/* ----------------------------------------------------------------------- */



struct drive_geometry

{

	dword heads;

	dword cylinders;

	dword sectors;

};





/* ----------------------------------------------------------------------- */

/* Low level structure physical_drive, contains drive number and geometry, */

/* as well as low level sector read and write routines                     */

/* Geometry is determined on initialization, errorcode contains error      */

/* number after call to get_geometry() and reset().                        */

/* Initialization requires number (e.g. physical_drive drive1 (0x80);).    */

/*                                                                         */

/* Read and write are called max. 3 times in case of failure, return code  */

/* contains 0 if successful. Sector CRC is verified after write.           */

/* sector_number is absolute logical sector number (0 = master boot record)*/

/* ----------------------------------------------------------------------- */



class physical_drive

{

protected:

	virtual void get_geometry (void);



public:

// constructors & operators



	physical_drive (int number);

	physical_drive (physical_drive &pd);

	void operator= (physical_drive &pd);



// public data



	int number;

	int errorcode;

	drive_geometry geometry;



// functions



	virtual void reset (void);



	int read_sector (struct sector* sector, dword sector_number);

	int write_sector (struct sector* sector, dword sector_number);

};





/* ----------------------------------------------------------------------- */

/* Physical_sector_no holds and calculates physical sector number (Head,   */

/* Cylinder, Sector). Number is calculated on initialization. Log_sector   */

/* is absolute logical sector number (0 = master boot record). Usage:      */

/* physical_sector_no mbr (0,geometry);                                    */

/* physical_sector_no mbr (0,0,1);                                         */

/* ----------------------------------------------------------------------- */



struct physical_sector_no

{

// public data



	dword head;

	dword cylinder;

	dword sector;



// constructors



	physical_sector_no (dword logical_sector, const drive_geometry &geometry);

	physical_sector_no (dword head, dword cylinder, dword sector)

	{

		physical_sector_no::head = head;

		physical_sector_no::cylinder = cylinder;

		physical_sector_no::sector = sector;

	}

};





/* ----------------------------------------------------------------------- */

/* Structure sector - contains only sector data                            */

/* ----------------------------------------------------------------------- */



struct sector

{

	byte data[512];

};





/* ----------------------------------------------------------------------- */

/* Prototype for bios call get_disk_type - returns 0 if drive not present. */

/* Valid drive numbers: 0 - 255, result: 1 - floppy without disk change    */

/* detection, 2 - floppy with disk change detection, 3 - harddisk          */

/* ----------------------------------------------------------------------- */



int get_disk_type (int drive_number);



/* Bios call get_no_of_drives */



int get_no_of_drives (void);



#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -