今天说说给模拟器增加软驱。
首先我们要网上找软驱的资料。了解软驱的基本知识、原理、读写规则。学习机用的软驱是标准的电脑通用3.5寸软驱。接口、工作方式完全和电脑上是一样的。学习机读写软驱的方法与普通电脑并无二致。所以这个方面网上资料还是很多的。
再了解下软盘的原理。磁头、磁道、磁面、扇区这四个词必须准确理解其含义。一个扇区一般是512字节。
步步高学习机从bios启动完成后,要从软盘上读取第一个扇区512字节。这个扇区叫0扇区,又叫BOOT扇区,引导扇区。0扇区中规定了本软盘的特性并包含一段引导程序,比如多少扇区多少磁道多少磁面,有几个文件分配表,目录表项数等等。这时BIOS程序要要根据这些特性计算出磁盘的FAT区、目录区、数据区的开始位置、大小。然后把指挥权交给引导扇区中的一段引导程序。引导程序要检验目录表的第一个文件是不是bbgdos.sys,检验通过则把软盘上的DOS操作系统装入内存。最后把程序指挥权交给BBGDOS.sys以及command.cmd这两段程序。这两个文件从软盘装入内存后会常驻内驻。BIOS+BBGDOS+COMMAND构成一个完整的里中外三层控制系统,用户就可以通过键盘操作让学习机读写磁盘数据了。
读写磁盘文件,这是DOS的任务。对于程序员来说,读写文件其实就是读写若干个扇区。最小的文件比如5个字节,也要占据一个扇区。当然了,这里还有个簇的概念。一个簇可以等于一个扇区,也可以等于若干个扇区。读写簇是DOS自动进行的的工作,编写模拟器不用管。编写模拟器要完成的任务就是让软件能读写软盘的扇区。
嗯。给模拟器加一个数组就行了。这个数组的大小是1.44MB。1.44MB=1.44*1024*1024字节=1.44*1024*2*512,除以每扇区512字节,可知共2880个扇区。可以用一维数组(dim softdisk(1.44*1024*1024-1) as byte),不过用二维数据可能更方便。比如:DIM SOFTDISK(2879,511) AS BYTE.这样就定义了一个2880组,每组512字节,总共1.44MB的二维数组。它直接对应了软盘上的2880个扇区。读取扇区时直接把DOS传递给BIOS的扇区号对应的512字节传递给模拟器就行了。
但是这还不行。因为实际上电脑读取软驱是根据磁头磁道来读取扇区的,即CHS(柱面,磁道,扇区)的方式来定位。也就是说软驱不认识2880这么多扇区号。真实的软驱只接受读写第几个磁头第几个磁道第几个扇区。每个软盘一般是2个磁头(磁柱、磁面)、每磁头80个磁道,每磁道18个扇区。所以要在模拟器上加软驱,也要设置好根据磁头号、磁道号、扇区号的计算程序,才能把软盘数组中2880个扇区的数据准确地用模拟器读写到模拟器的内存数组中。
最后就是设置好模拟器的软盘读写端口了。每当模拟器中BIOS程序运行到读写软驱接口指令,模拟器根据BIOS指令要求读写的磁头号+磁道号+扇区号+扇区数,从软盘数组中取出对应的数组传递给内存数组就算完成任务了。所以这个软盘读写端口程序块是模拟器增加软驱的核心。FC模拟器是没有这个程序块的,必须由学习机模拟器程序员自己编写。对步步高多媒体学生电脑来说,软盘读写端口是如下7个:FF80、FF88、FF90、FF98、FFA0、FFA8、FFB8。对端口的操作方式正如它的名字一样,对照网上下载的标准软驱手册资料就可以写出对应的模拟器软盘控制程序块。
4FDCDMADackIO$ff80$FF80=65408
5FDCDMATcIO$ff88$FF88=65416
6FDCDRQPortI$ff90$FF90=65424
7FDCCtrlPortO$ff90$FF90=65424
8FDCIRQPortI$ff98$FF98=65432
9FDCResetPortO$ffa0$FFA0=65440
10FDCStatPortI$ffa0$FFA0=65440
11FDCDataPortIO$ffa8$FFA8=65448
12FDCChangePortI$ffb8$FFB8=65464
13FDCSpeedPortO$ffb8$FFB8=65464
这个程序块相当于模拟步步高多媒体学生电脑上的软驱控制芯片+ 数据线+软驱。而SOFTDISK数组就相当于软盘。程序块的任务就是实现模拟内存数组和模拟软盘数组的双向复制。读软盘,就是从SOFTDISK数组按扇区取出指定位置数据复制到内存数组指定位置。写软盘则是把内存中数据按扇区复制到指定的SOFTDISK数组指定位置。数据的位置由学习机的用户程序调用DOS功能和BIOS功能动态指定。
有兴趣的程序员欢迎到扣扣群(软驱一号)中与群友交流研究。
首先我们要网上找软驱的资料。了解软驱的基本知识、原理、读写规则。学习机用的软驱是标准的电脑通用3.5寸软驱。接口、工作方式完全和电脑上是一样的。学习机读写软驱的方法与普通电脑并无二致。所以这个方面网上资料还是很多的。
再了解下软盘的原理。磁头、磁道、磁面、扇区这四个词必须准确理解其含义。一个扇区一般是512字节。
步步高学习机从bios启动完成后,要从软盘上读取第一个扇区512字节。这个扇区叫0扇区,又叫BOOT扇区,引导扇区。0扇区中规定了本软盘的特性并包含一段引导程序,比如多少扇区多少磁道多少磁面,有几个文件分配表,目录表项数等等。这时BIOS程序要要根据这些特性计算出磁盘的FAT区、目录区、数据区的开始位置、大小。然后把指挥权交给引导扇区中的一段引导程序。引导程序要检验目录表的第一个文件是不是bbgdos.sys,检验通过则把软盘上的DOS操作系统装入内存。最后把程序指挥权交给BBGDOS.sys以及command.cmd这两段程序。这两个文件从软盘装入内存后会常驻内驻。BIOS+BBGDOS+COMMAND构成一个完整的里中外三层控制系统,用户就可以通过键盘操作让学习机读写磁盘数据了。
读写磁盘文件,这是DOS的任务。对于程序员来说,读写文件其实就是读写若干个扇区。最小的文件比如5个字节,也要占据一个扇区。当然了,这里还有个簇的概念。一个簇可以等于一个扇区,也可以等于若干个扇区。读写簇是DOS自动进行的的工作,编写模拟器不用管。编写模拟器要完成的任务就是让软件能读写软盘的扇区。
嗯。给模拟器加一个数组就行了。这个数组的大小是1.44MB。1.44MB=1.44*1024*1024字节=1.44*1024*2*512,除以每扇区512字节,可知共2880个扇区。可以用一维数组(dim softdisk(1.44*1024*1024-1) as byte),不过用二维数据可能更方便。比如:DIM SOFTDISK(2879,511) AS BYTE.这样就定义了一个2880组,每组512字节,总共1.44MB的二维数组。它直接对应了软盘上的2880个扇区。读取扇区时直接把DOS传递给BIOS的扇区号对应的512字节传递给模拟器就行了。
但是这还不行。因为实际上电脑读取软驱是根据磁头磁道来读取扇区的,即CHS(柱面,磁道,扇区)的方式来定位。也就是说软驱不认识2880这么多扇区号。真实的软驱只接受读写第几个磁头第几个磁道第几个扇区。每个软盘一般是2个磁头(磁柱、磁面)、每磁头80个磁道,每磁道18个扇区。所以要在模拟器上加软驱,也要设置好根据磁头号、磁道号、扇区号的计算程序,才能把软盘数组中2880个扇区的数据准确地用模拟器读写到模拟器的内存数组中。
最后就是设置好模拟器的软盘读写端口了。每当模拟器中BIOS程序运行到读写软驱接口指令,模拟器根据BIOS指令要求读写的磁头号+磁道号+扇区号+扇区数,从软盘数组中取出对应的数组传递给内存数组就算完成任务了。所以这个软盘读写端口程序块是模拟器增加软驱的核心。FC模拟器是没有这个程序块的,必须由学习机模拟器程序员自己编写。对步步高多媒体学生电脑来说,软盘读写端口是如下7个:FF80、FF88、FF90、FF98、FFA0、FFA8、FFB8。对端口的操作方式正如它的名字一样,对照网上下载的标准软驱手册资料就可以写出对应的模拟器软盘控制程序块。
4FDCDMADackIO$ff80$FF80=65408
5FDCDMATcIO$ff88$FF88=65416
6FDCDRQPortI$ff90$FF90=65424
7FDCCtrlPortO$ff90$FF90=65424
8FDCIRQPortI$ff98$FF98=65432
9FDCResetPortO$ffa0$FFA0=65440
10FDCStatPortI$ffa0$FFA0=65440
11FDCDataPortIO$ffa8$FFA8=65448
12FDCChangePortI$ffb8$FFB8=65464
13FDCSpeedPortO$ffb8$FFB8=65464
这个程序块相当于模拟步步高多媒体学生电脑上的软驱控制芯片+ 数据线+软驱。而SOFTDISK数组就相当于软盘。程序块的任务就是实现模拟内存数组和模拟软盘数组的双向复制。读软盘,就是从SOFTDISK数组按扇区取出指定位置数据复制到内存数组指定位置。写软盘则是把内存中数据按扇区复制到指定的SOFTDISK数组指定位置。数据的位置由学习机的用户程序调用DOS功能和BIOS功能动态指定。
有兴趣的程序员欢迎到扣扣群(软驱一号)中与群友交流研究。