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

📄 关于boot sector标准约定ver0.0.1.txt

📁 自己以前写的 引导扇区代码。包括: fat12.asm fat16.asm fat32.asm
💻 TXT
字号:
1  结构
    FAT16与 FAT32均遵循此结构,FAT12仅一扇区,非该结构约束之内。
typedef struct
	{
		UBYTE		OtherBootCode[508];	//代码,508字节
		UDWORD		BootSectorFlags;	//标志,4字节,总为 0xaa556146
	}SECBYTE;

typedef struct
	{
		UBYTE		FirstSector[512];	//首扇区,与原FAT系列结构一致
		UBYTE		OherSectors;		//除首、次扇区外,剩余几个引导扇区
		UDWORD		OtherInfo[6];		//引导代码最多可以有8个扇区
		UBYTE		SecendCode[483];	//代码
		UDWORD		BootFlags;		//标志,4字节,总为 0xaa556146
		SECBYTE		OtherSect[6];		//剩余扇区
	}BOOTSECTs;
说明:
	BOOTSECTs.FirstSector	为首扇区,其数据结构与原 FAT16(FAT32) 一致,大小为 512字节,标
				志为 0xaa55。该扇区仅负责读出第2扇区内容,并检测扇区标志,然后
				并移交CPU控制权。

	BOOTSECTs.OherSectors	次扇首字节,用于说明该版本引导代码共占几个扇区,最多支持 8扇区
	BOOTSECTs.OtherInfo	剩余扇区信息,次处用于存放剩余扇区的绝对扇区号,24字节,每单元
				占用4字节,至多6个。
	BOOTSECTs.SecendCode	次扇区代码部分,该部分代码负责读出剩余扇区,并判断引导标志的有
				效性,然后转交控制权。
	BOOTSECTs.BootFlags	标志,长度:4字节,总为: 0xaa556146
	BOOTSECTs.OtherSect	剩余扇区,功能:
						1: 加载系统内核
							加载 KERNEL.SYS 到 1000:0000
							加载 FS.DRV 到 5000:0000
						2: 错误处理
							如若出错,将尾扇区的错误信息
						    字模打印到屏幕,更换字模即可支持
						    任何语种。
名词:
	首扇区:	引导代码的第一个扇区,BIOS今加载该扇区至内存0000:7C00
	次扇区:	引导代码的第二个扇区,负责加载剩余扇区
	尾扇区:	引导代码的最后一个扇区,无代码,仅为16点阵字模及文本信息
	剩余扇区:	除首、次扇区外的其他引导扇区(包括尾扇区),即:从第三扇区开始的所有扇区。

2  变量、常量及宏的约定名:
	常量或变量名	 取值		   说明
	Seg_CS_Boot	0x1000		;常量,KERNEL.SYS代码段地址
	Seg_FS_Boot	0x5000		;常量,FAT16.DRV代码段地址
	Reg_IP_Base	0x7C00		;常量,引导扇区代码在内存中的偏移地址
	Flag_Offset	0x1fc		;常量,引导扇区标志偏移地址
	Flag_BootSect	0xaa55		;常量,引导扇区标志字
	SomeBootSectors	?		;变量,引导程序共占几个扇区
	fNameSize	11		;常量,文件名长度为11字节
	COUNT_Retry	5		;常量,发生错误的重试次数
3  关于 language.inc
	注意,language.inc并不是一个 inc 文件,而是一组。其中包含各种语言信息的字
    模,和字符的特殊编码。这种编码非已有的任何一种方式,比如:BIG5、GB2312、UTF-8
    等等。它的编码规则如下:
		1: 字符分双字节编码和单字节编码,单字符编码与 ASCII 码相同
		2:每字符串单独编码,若为 ASCII 码则不计入编码表,若为单字
		   节编码则编码表增 1。
		3:字符串不出现重复字码,即使字模相同。
		4:至多支持128个字模。
	在 language.inc 中,每一个 INC文件必须有以下 2个宏:
		DISKERRMSGDOT	包含磁盘错误信息的字模和编码表
				字模的标号为:	disk_dot
				编码表标号为:	ERR_DSK,以 '!' 结束
		ERRORMESSAGEDOT	包含其他错误信息的字模和编码表
				字模的标号为:	Other_dot
				编码表标号为:	ERR_KNL(KERNEL.SYS出错)
						ERR_DRV(FS.DRV出错)
		
注:'?'为不确定值

4  内存格局
;		|-----------------------|0000:0000
;		|			|
;		|	中断向量表	|
;		|			|
;		|-----------------------|0000:0400
;		|	BIOS数据区	|
;		|-----------------------|0000:0500
;		|			|
;		|			|
;		|			|
;		|			|
;		|	 		|
;		|	 堆栈区域	|注:所有变量及引导文件的 FAT信息都将存放在
;		|			|    堆栈区域中。这些变量包括:
;		|			|		Startfat
;		|			|		StartRoot
;		|			|		StartData
;		|			|		RootSectors等等
;		|			|
;		|			|
;		|			|
;		|			|
;		|			|
;		|-----------------------|0000:7C00
;		|         首扇区	|
;		|-----------------------|0000:7E00
;		|         次扇区	|
;		|-----------------------|0000:8000
;		|        其他扇区	|
;		|-----------------------|0000:8400	;注:Beta 0.0.01版本为4扇区
;		|			|
;		|	空--未使用	|
;		|			|
;		|-----------------------|1000:0000
;		|			|该地址区域在装载文件之
;		|	OSLOADER.SYS	|前用于临时存放 FAT 表
;		|			|及根目录文件登记表等
;		|-----------------------|2000:0000
;		|	 FS.DRV		|
;		|-----------------------|
;		|			|
;		|			|



5  寄存器约定
	EAX		存放临时数据,如:文件FAT信息、磁盘扇区记数等。
	EBX		读磁盘时用于存放偏移地址
	ECX		用于计数,如未出错,通常为0
	BP		用于变量寻址,恒等于 0x7C00
	SS		始终等于 CS
	CF		发生错误为1,正确为0
6  出口:
	dl		等于驱动器号

⌨️ 快捷键说明

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