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

📄 fileblockdevice.java

📁 JPC: x86 PC Hardware Emulator. 牛津大学开发的一个纯JAVA的x86系统结构硬件模拟器。
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
        header[pos++] = (byte) 0x00;//this and following 3 bytes are irrelevant for FAT32 (N/A)        header[pos++] = (byte) 0x00;        header[pos++] = (byte) 0x00;        header[pos++] = (byte) 0x00;        header[pos++] = (byte) 0xF8;//do not change        header[pos++] = (byte) 0x00;//N/A        header[pos++] = (byte) 0x00;//N/A                System.arraycopy(toByteArray(sectorsPerTrack,1),0,header,pos++,1);        header[pos++] = (byte) 0x00;//                       byte offset 0x19	System.arraycopy(toByteArray(heads,1),0,header,pos++,1);	header[pos++] = (byte) 0x00;//                         byte offset 0x1B	System.arraycopy(toByteArray(hiddenSectors,4),0,header,pos++,4);//number of hidden sectors (63 on non partitioned media)  byte offset 0x1C	pos=pos+3;        	//byte offset 0x20  = total number of sectors in partition	System.arraycopy(toByteArray(totalSectors,4),0,header,pos++,4);	pos=pos+3;    	//byte offset 0x24  --  number of sectors per FAT = 520 for 520MB drive (4 bytes)	System.arraycopy(toByteArray(sectorsPerFAT,4),0,header,pos++,4);	pos=pos+3;	header[pos++] = (byte) 0x00;//byte offset 0x28  --  *****this could be wrong, tells which FAT is active (http://home.teleport.com/~brainy/fat32.htm)        header[pos++] = (byte) 0x00;//byte offset 0x29        header[pos++] = (byte) 0x00;//byte offset 0x2A  -- this and the next seem irrelevant (FAT32 version) (possibly set to 0)        header[pos++] = (byte) 0x00;//byte offset 0x2B	//byte offset 0x2C  -- cluster number of the start of the root directory (4 bytes)	System.arraycopy(toByteArray(rootStartCluster,4),0,header,pos++,4);	pos=pos+3;	//byte offset 0x30  -- sector number of FSINFO sector (is this 1 or two bytes??? although it doesn't matter)	System.arraycopy(toByteArray(fsinfoSector,1),0,header,pos++,1);        header[pos++] = (byte) 0x00;//byte offset 0x31	//byte offset 0x32  -- sector number of backup boot sector	System.arraycopy(toByteArray(backupBootSector,1),0,header,pos++,1);        header[pos++] = (byte) 0x00;//byte offset 0x33        header[pos++] = (byte) 0x00;//byte offset 0x34  -- 12 bytes of N/A        header[pos++] = (byte) 0x00;//byte offset 0x35        header[pos++] = (byte) 0x00;        header[pos++] = (byte) 0x00;        header[pos++] = (byte) 0x00;        header[pos++] = (byte) 0x00;        header[pos++] = (byte) 0x00;        header[pos++] = (byte) 0x00;        header[pos++] = (byte) 0x00;        header[pos++] = (byte) 0x00;        header[pos++] = (byte) 0x00;        header[pos++] = (byte) 0x00;        header[pos++] = (byte) 0x80;//byte offset 0x40        header[pos++] = (byte) 0x00;        header[pos++] = (byte) 0x29;//do not change (extended signature)        header[pos++] = (byte) 0x26;//these four are the serial number of the partition        header[pos++] = (byte) 0x59;        header[pos++] = (byte) 0x41;        header[pos++] = (byte) 0x31;        header[pos++] = (byte) 0x49;        header[pos++] = (byte) 0x41;        header[pos++] = (byte) 0x4E;        header[pos++] = (byte) 0x52;        header[pos++] = (byte) 0x4F;        header[pos++] = (byte) 0x43;        header[pos++] = (byte) 0x4B;        header[pos++] = (byte) 0x53;        header[pos++] = (byte) 0x46;        header[pos++] = (byte) 0x33;        header[pos++] = (byte) 0x32;        header[pos++] = (byte) 0x46;//byte offset 0x52  F        header[pos++] = (byte) 0x41;//byte offset 0x37  A        header[pos++] = (byte) 0x54;//byte offset 0x38  T        header[pos++] = (byte) 0x33;//byte offset 0x39  3        header[pos++] = (byte) 0x32;//byte offset 0x3A  2        header[pos++] = (byte) 0x20;//byte offset 0x3B        header[pos++] = (byte) 0x20;//byte offset 0x3C        header[pos++] = (byte) 0x20;//byte offset 0x3D        //Need to copy in the bootstrap code (420 bytes)        byte[] bootstrap = {	    (byte)0x33, (byte)0xC9, (byte)0x8E, (byte)0xD1, (byte)0xBC, (byte)0xF4, (byte)0x7B, (byte)0x8E,	    (byte)0xC1, (byte)0x8E, (byte)0xD9, (byte)0xBD, (byte)0x00, (byte)0x7C, (byte)0x88, (byte)0x4E,	    (byte)0x02, (byte)0x8A, (byte)0x56, (byte)0x40, (byte)0xB4, (byte)0x08, (byte)0xCD, (byte)0x13,	    (byte)0x73, (byte)0x05, (byte)0xB9, (byte)0xFF, (byte)0xFF, (byte)0x8A, (byte)0xF1, (byte)0x66,	    (byte)0x0F, (byte)0xB6, (byte)0xC6, (byte)0x40, (byte)0x66, (byte)0x0F, (byte)0xB6, (byte)0xD1,	    (byte)0x80, (byte)0xE2, (byte)0x3F, (byte)0xF7, (byte)0xE2, (byte)0x86, (byte)0xCD, (byte)0xC0,	    (byte)0xED, (byte)0x06, (byte)0x41, (byte)0x66, (byte)0x0F, (byte)0xB7, (byte)0xC9, (byte)0x66,	    (byte)0xF7, (byte)0xE1, (byte)0x66, (byte)0x89, (byte)0x46, (byte)0xF8, (byte)0x83, (byte)0x7E,	    (byte)0x16, (byte)0x00, (byte)0x75, (byte)0x38, (byte)0x83, (byte)0x7E, (byte)0x2A, (byte)0x00,	    (byte)0x77, (byte)0x32, (byte)0x66, (byte)0x8B, (byte)0x46, (byte)0x1C, (byte)0x66, (byte)0x83,	    (byte)0xC0, (byte)0x0C, (byte)0xBB, (byte)0x00, (byte)0x80, (byte)0xB9, (byte)0x01, (byte)0x00,	    (byte)0xE8, (byte)0x2B, (byte)0x00, (byte)0xE9, (byte)0x48, (byte)0x03, (byte)0xA0, (byte)0xFA,	    (byte)0x7D, (byte)0xB4, (byte)0x7D, (byte)0x8B, (byte)0xF0, (byte)0xAC, (byte)0x84, (byte)0xC0,	    (byte)0x74, (byte)0x17, (byte)0x3C, (byte)0xFF, (byte)0x74, (byte)0x09, (byte)0xB4, (byte)0x0E,	    (byte)0xBB, (byte)0x07, (byte)0x00, (byte)0xCD, (byte)0x10, (byte)0xEB, (byte)0xEE, (byte)0xA0,	    (byte)0xFB, (byte)0x7D, (byte)0xEB, (byte)0xE5, (byte)0xA0, (byte)0xF9, (byte)0x7D, (byte)0xEB,	    (byte)0xE0, (byte)0x98, (byte)0xCD, (byte)0x16, (byte)0xCD, (byte)0x19, (byte)0x66, (byte)0x60,	    (byte)0x66, (byte)0x3B, (byte)0x46, (byte)0xF8, (byte)0x0F, (byte)0x82, (byte)0x4A, (byte)0x00,	    (byte)0x66, (byte)0x6A, (byte)0x00, (byte)0x66, (byte)0x50, (byte)0x06, (byte)0x53, (byte)0x66,	    (byte)0x68, (byte)0x10, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x80, (byte)0x7E, (byte)0x02,	    (byte)0x00, (byte)0x0F, (byte)0x85, (byte)0x20, (byte)0x00, (byte)0xB4, (byte)0x41, (byte)0xBB,	    (byte)0xAA, (byte)0x55, (byte)0x8A, (byte)0x56, (byte)0x40, (byte)0xCD, (byte)0x13, (byte)0x0F,	    (byte)0x82, (byte)0x1C, (byte)0x00, (byte)0x81, (byte)0xFB, (byte)0x55, (byte)0xAA, (byte)0x0F,	    (byte)0x85, (byte)0x14, (byte)0x00, (byte)0xF6, (byte)0xC1, (byte)0x01, (byte)0x0F, (byte)0x84,	    (byte)0x0D, (byte)0x00, (byte)0xFE, (byte)0x46, (byte)0x02, (byte)0xB4, (byte)0x42, (byte)0x8A,	    (byte)0x56, (byte)0x40, (byte)0x8B, (byte)0xF4, (byte)0xCD, (byte)0x13, (byte)0xB0, (byte)0xF9,	    (byte)0x66, (byte)0x58, (byte)0x66, (byte)0x58, (byte)0x66, (byte)0x58, (byte)0x66, (byte)0x58,	    (byte)0xEB, (byte)0x2A, (byte)0x66, (byte)0x33, (byte)0xD2, (byte)0x66, (byte)0x0F, (byte)0xB7,	    (byte)0x4E, (byte)0x18, (byte)0x66, (byte)0xF7, (byte)0xF1, (byte)0xFE, (byte)0xC2, (byte)0x8A,	    (byte)0xCA, (byte)0x66, (byte)0x8B, (byte)0xD0, (byte)0x66, (byte)0xC1, (byte)0xEA, (byte)0x10,	    (byte)0xF7, (byte)0x76, (byte)0x1A, (byte)0x86, (byte)0xD6, (byte)0x8A, (byte)0x56, (byte)0x40,	    (byte)0x8A, (byte)0xE8, (byte)0xC0, (byte)0xE4, (byte)0x06, (byte)0x0A, (byte)0xCC, (byte)0xB8,	    (byte)0x01, (byte)0x02, (byte)0xCD, (byte)0x13, (byte)0x66, (byte)0x61, (byte)0x0F, (byte)0x82,	    (byte)0x54, (byte)0xFF, (byte)0x81, (byte)0xC3, (byte)0x00, (byte)0x02, (byte)0x66, (byte)0x40,	    (byte)0x49, (byte)0x0F, (byte)0x85, (byte)0x71, (byte)0xFF, (byte)0xC3, (byte)0x4E, (byte)0x54,	    (byte)0x4C, (byte)0x44, (byte)0x52, (byte)0x20, (byte)0x20, (byte)0x20, (byte)0x20, (byte)0x20,	    (byte)0x20, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,	    (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,	    (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,	    (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,	    (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,	    (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,	    (byte)0x00, (byte)0x00, (byte)0x0D, (byte)0x0A, (byte)0x52, (byte)0x65, (byte)0x6D, (byte)0x6F,	    (byte)0x76, (byte)0x65, (byte)0x20, (byte)0x64, (byte)0x69, (byte)0x73, (byte)0x6B, (byte)0x73,	    (byte)0x20, (byte)0x6F, (byte)0x72, (byte)0x20, (byte)0x6F, (byte)0x74, (byte)0x68, (byte)0x65,	    (byte)0x72, (byte)0x20, (byte)0x6D, (byte)0x65, (byte)0x64, (byte)0x69, (byte)0x61, (byte)0x2E,	    (byte)0xFF, (byte)0x0D, (byte)0x0A, (byte)0x44, (byte)0x69, (byte)0x73, (byte)0x6B, (byte)0x20,	    (byte)0x65, (byte)0x72, (byte)0x72, (byte)0x6F, (byte)0x72, (byte)0xFF, (byte)0x0D, (byte)0x0A,	    (byte)0x50, (byte)0x72, (byte)0x65, (byte)0x73, (byte)0x73, (byte)0x20, (byte)0x61, (byte)0x6E,	    (byte)0x79, (byte)0x20, (byte)0x6B, (byte)0x65, (byte)0x79, (byte)0x20, (byte)0x74, (byte)0x6F,	    (byte)0x20, (byte)0x72, (byte)0x65, (byte)0x73, (byte)0x74, (byte)0x61, (byte)0x72, (byte)0x74,	    (byte)0x0D, (byte)0x0A, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xAC,	    (byte)0xCB, (byte)0xD8, (byte)0x00, (byte)0x00	};        for(int i=0;i<bootstrap.length;i++)            header[pos++] = bootstrap[i];                header[0x1FE] = (byte) 0x55;        header[0x1FE + 1] = (byte) 0xAA;                //Now do the second sector, the FSINFO sector        header2 = new byte[512];        pos=0;        header2[pos++] = (byte) 0x52;        header2[pos++] = (byte) 0x52;        header2[pos++] = (byte) 0x61;        header2[pos++] = (byte) 0x41;        for(int i=0;i<480;i++)            header2[pos++] = (byte) 0x00;        header2[pos++] = (byte) 0x72;        header2[pos++] = (byte) 0x72;        header2[pos++] = (byte) 0x41;        header2[pos++] = (byte) 0x61;        //number of free clusters (4 bytes) set to FFFFFFFF if unknown        header2[pos++] = (byte) 0xFF;        header2[pos++] = (byte) 0xFF;        header2[pos++] = (byte) 0xFF;        header2[pos++] = (byte) 0xFF;        //cluster number of most recently allocated cluster (4 bytes)        System.arraycopy(toByteArray(lastAllocatedCluster,4),0,header,pos++,4);	pos=pos+3;        for(int i=0;i<14;i++)            header2[pos++] = (byte) 0x00;        header2[0x1FE] = (byte) 0x55;        header2[0x1FE + 1] = (byte) 0xAA;	//**************************************************************************************        //FAT1  at sector 32	// set up first 8 bytes of FAT	byte[] initialbuffer = {(byte) 0xF8,(byte) 0xFF,(byte) 0xFF,(byte) 0x0F,(byte) 0xFF,(byte) 0xFF,(byte) 0xFF,(byte) 0x0F};	byte[] endmark = {(byte) 0xFF,(byte) 0xFF,(byte) 0xFF,(byte) 0xFF};	System.arraycopy(initialbuffer, 0,FAT,0, 8);	rootSizeClusters = (int) (rootSize-1)/sectorsPerCluster + 1;	// put in root directory	for(int i = 0;i < rootSizeClusters-1 ;i++)            System.arraycopy(toByteArray((long) 3+i,(int) 4),0,FAT,4*(i+2),4);	// put in end of root directory	System.arraycopy(endmark,0,FAT, rootSizeClusters + 1 , 4);	// put in file	fileSizeClusters = (int) (fileSizeSectors-1)/sectorsPerCluster+1;	for(int i = rootSizeClusters + 2 ; i < rootSizeClusters + 1 + fileSizeClusters ; i++)            System.arraycopy(toByteArray((long) 1+i ,(int) 4), 0, FAT, 4*i, 4);	//put in end of file	System.arraycopy(endmark,0,FAT, rootSizeClusters + 1 + fileSizeClusters , 4);	//**************************************************************************************	//make root directory	rootdir=new byte[rootSizeClusters * sectorsPerCluster * bytesPerSector];	for (int i=0; i<rootdir.length;i++){	    rootdir[i]=(byte) 0x00;	}	//first file entry - points to nothing. this is the volume label	String volumelabel = "IANROCKSF32";	System.arraycopy(volumelabel.getBytes(),0,rootdir,0,11);	rootdir[11]=(byte) 0x08;	//first real file entry	int startByte = 32;	String filename = source.getName();	pattern = Pattern.compile("(\\w*).(\\w*)");        matcher = pattern.matcher(filename);	matcher.find();	String name = matcher.group(1);	String ext = matcher.group(2);//	System.out.println(name +"." + ext + ". length is " + name.length());	//put filename into file entry	System.arraycopy(name.getBytes(),0,rootdir,startByte,name.length());	//	\w{0,8}.\w{1,3}	//put in blank space after filename if it is less than 8 characters	for (int i =name.length(); i< 8;i++){	    rootdir[startByte+i]=(byte) 0x20;	}	System.arraycopy(ext.getBytes(),0,rootdir,startByte + 8,ext.length());	rootdir[startByte+11]=(byte) 0x20;  //Attrib Byte	//put in starting cluster (high 2 bytes)	System.arraycopy(toByteArray((rootSizeClusters+2)>>>16,2),0,rootdir,startByte + 20,2);	//put in starting cluster (low 2 bytes)	System.arraycopy(toByteArray((rootSizeClusters+2) & 0xFFFF,2),0,rootdir,startByte + 26,2);	//put in file size in bytes 	System.arraycopy(toByteArray(raf.length(),4),0,rootdir,startByte + 28,4);	//*************************************************************************************        //Pad out the first 32 sectors and include copy of bootsector and FSINFO sector	empty = new byte[512];	for(int i=0;i<512;i++){

⌨️ 快捷键说明

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