|
本帖最后由 18912334956 于 2022-11-17 20:37 编辑
ISA 卡 + EPROM + GAL 芯片 模拟软盘或硬盘
30年前自己开发的产品, 硬件没有保留, 只留下图纸和代码, 还有说明书。 和大家共享。
1. 数据存贮先顺序填满0柱面0磁头的所有扇区,之后顺序填满0柱面的各个磁头,当0柱面填满后,再顺序以相同规则填满各个柱面。
由此可见,硬盘编址是以柱面、磁头及扇区为单位的三维编址,而固态盘的编址实际是一维的,因此,为仿真硬盘工作,必须提供一个地址转换子程序。
由于固态盘的容量并不象硬盘那样固定不变,对于固态盘参数的选择应当尽可能简单。
对于硬盘来说,在0柱面0磁头第一个扇区中保存主引导扇区,而此磁道的其他扇区均无法利用,因此,一个磁道中扇区数不宜太大。
此次固态盘容量为8M,我选择的参数是16个磁头,64个柱面,每磁道16个扇区。固态盘硬件最多可插16片芯片,只需根据芯片数修改磁头参数即可。
2. 在MS-DOS环境下,INTEL 80X86系列微处理器通常在实模式下运行。在此模式下,INTEL所有微处理器均保持兼容,由于只使用20根地址线,
处理器寻址范围为1MB。一九八零年,IBM的工程师在设计最早的IBM PC机时,对内存地址空间使用做了如下规划:
在处理器可寻址的1MB地址空间的头640KB(00000-9FFFF)用作程序运行使用,称为常规内存,
其后的128KB(A0000-BFFFF)作为显示内存区域,这就造成了MS-DOS众所周知的640K内存限制。
地址空间的最后64KB地址空间由系统BIOS使用;剩余192KB地址空间(C0000-EFFFF)则供各种插件BIOS使用。
计算机启动自检时,会扫描这个区域,并自动加载找到的BIOS代码,由于代码执行在操作系统加载之前,能够实现对操作系统的透明。
实际上,现代PC插卡大多就是使用这种方法扩展本身的功能的。固态盘BIOS地址也正在这个区域中。
PC机硬盘工作原理与软盘有很大不同,在底层,系统BIOS提供了一个中断服务程序INT 13H专门处理硬盘基本操作,可在程序中直接调用,
除此之外,系统BIOS还维护了硬盘参数表及其他若干参数。要想在底层实现固态盘的硬盘仿真,实际上要建立一个新的中断服务程序以代替系统BIOS的INT 13H,
同时以相同的方式维护各种硬盘参数。
利用INT 13H可进行多种功能调用,用户选择调用功能是通过给AH寄存器置相应的数值,同时发出13H中断来完成的。利用中断13H的功能调用如下:
AH 功能调用
00H 复位磁盘
01H 取磁盘状态
02H 读扇区
03H 写扇区
04H 监测扇区
05H 格式化磁道
08H 取当前驱动器参数
09H 初始化双驱动器参数
0AH 读长扇区
0BH 写长扇区
0CH 查找磁道
0DH 驱动器复位
10H 监测磁盘是否准备好
11H 复校驱动器
14H 控制器内部诊断
15H 取磁盘类型
其中最重要的功能调用是读写、校验扇区,格式化磁道及取当前驱动器参数,它们构成了磁盘工作的主体。为保持兼容性,对其他功能调用也必须提供相应的服务程序。
此外,中断向量41H、46H指向硬盘BIOS维护的硬盘参数表,参数定义了硬盘主要参数:
字节 说明
00H-01H 指定驱动器最大柱面数
02H 指定驱动器最大磁头数
03H-04H 00
05H-06H 开始写预补偿柱面号
07H ECC数据簇长度
08H 控制字符
09H-0DH 00
0EH 每磁道扇区数
0FH 00
实际上,INT 13H的08H取驱动器参数就是由此而来,如果二者不匹配,则DOS分区程序FDISK.EXE将认为硬盘不存在。由于系统实际上保持了两个参数表,就获得了支持两个不同硬盘驱动器的能力,
仿真盘同样需维护一个硬盘参数表,这就要求仿真盘必须与系统中可能存在的硬盘协同工作,互不影响。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
打赏
-
查看全部打赏
|