为了便于之后博文的行文方便,我把代码放在了下载区:[download id=”9″]。
编译器使用的是Borland C++3.1,C编译器和汇编编译器都在其中。代码中包含三个汇编文件:Loaser.asm、iMath.asm、iTimeInt.asm,必须用Tasm编译。微软的masm语法要求稍微有些不同,因此foxdisk3.01的代码没有办法直接用微软早期的DOS下编译器编译。
编译步骤很简单:
1) 安装BorlandC++3.1;
2) 进入代码文件主目录,设置Path目录;(参考我的bcccmd.bat)
3) etrhz.exe hztable.h Global.c Setup.c iSetup.c;
4) ehz24.exe /k hzk24k.h _HZ24STR.c;
5) 运行make;
上述步骤执行后,会自动生成foxdisk.exe。在dos下安装的时候,需要调用资源文件ifox.bmp,包含在\Rleease文件夹中。
注意步骤4和步骤5,主要作用是自动分析指定的文件,生成汉字库。大部分汉字是用16×16字库的,可以使用etrhz.exe来提取;有些汉字是24×24的,使用ehz24.exe来提取。当时开发的时候,为了减少程序文件大小,特意做了这两个小工具来实现自动提取功能。
实际上还能做得更智能些,但是因为主要是自用,就不用考虑那么多了。
Foxdisk的开发中,对汉字、图像的分析是必要的,我在开发过程中做了几个实现类似功能的工具,对这些工具的解析,在后面会专门辟出一个章节来说明。
如上图,我把所有代码文件的列表截图进行说明。三个.asm的汇编文件分别为:
iMath.asm: 长整型数的乘、除及移位计算(此处的长整型是32位);
iTimeInt.asm: 时间调度中断(非常粗糙,定时显示光标、倒计时以及日期时间。我近期一直在看FreeRTOS的代码,再回头看这个,真的….非常粗糙);
Loader.asm:MBR扇区的替代代码,用来加载Foxdisk执行代码,并跳转执行;
要注意的是,Borland C++3.1的编译器是针对DOS环境的,其sizeof(int)=2。也就是说,字长为2,这是比较古老的一款编译器了。代码中的long int是32位的,Tasm编译的时候,很多现在的x86汇编指令是不能使用的,比如32位操作数的乘除法、移位等。当然,如果非要使用也是可以的,用机器码来实现,但是…太丑了,可读性比较差,所以我自己编写了要用的32位数的乘除法。
HZK24K.H,HZTABLE.H:使用小工具自动生成的汉字库;
其他*.c,*.h:程序文件;
HZK16,HZK24K,HZK24T:采自金山wps古老版本的汉字库(不会涉及到版权问题吧?我主要用来学习使用,求伯君大神应该不会介意^^);
*.bat:编译使用的自动批处理;
其他文件一看即知,就不一一解释了。下一篇我将用一些篇幅介绍Foxdisk编写的起源和过程。
—知更鸟的小屋
1,727 total views, 2 views today