Next Previous Contents

4. TCP/IP Bootprom 相关工具程序

这一段将把我们为 TCP/IP BootPROM 所写的程序作一些说明.

4.1 MENUEDIT

这是在 DOS 下执行的程序, 用来编辑给 TCP/IP Bootprom 的开机选单叙述档. 它很简单, 不过比原厂 所提供的开机选单叙述档来的方便. 您可以按 F1 看到一些在线说明. 如果您想要加强他的功能 ( 比 如加入剪贴功能), 我会很乐意发表您的新版本.

原始程序为 Pascal 语法可在 取得.

4.2 BPHDBOOT

此 boot image 将载入硬盘的 master boot record 并执行它.

这个 boot image 对于那些需要重新开机才能完成所有设定的操作系统是相当方便的. 它也可以用在 当您要强迫清理硬盘的时候.

原始程序为 Assembler 语法可在 取得.

4.3 BPCLEAN

此 boot image 将重新写入硬盘的 master boot record, 包含硬盘的分割表. 此外, 它可以快速格式化 DOS (FAT16) 数据分割区 (但无法使它可开机). 因为版权的关系, 我们必须重新规划我们的 master boot record 与 FAT16 开机磁区, 除了一些远端开机的讯息外, 它们与标准的分割区大致上是一样的. 为了 使这个程序能工作, 您或许需要关掉 BIOS 对 master boot record 的保护 (因为每次开机都更新一遍).

这个程序下载与这个程序同样主文件名的分割表叙述档其副文件名为 .tab. 这个文件可以包含空行, 注解 由记号开始但不得超过 512 个字符.

前四个不含空白及注解的几行应该包含四个硬盘分割区的叙述. 第五个不含空白及注解的那一行应 包含下一个要载入的开机影像文件名称.

分割区的叙述行由由空格或 tab 键来分割, 必须如下这三种格式:


type  boot?  1st-cyl  1st-head  1st-sect  last-cyl  last-head  last-sect
type  boot?  1st-cyl  1st-head  1st-sect  relative-size
type  boot?  relative-size

所有的数字都假设十进制, 除非字首有出现钱字号, 这样才会被设定为十六进制.

当一个标签附加在一个分割区叙述句之后, 相对应的分割区会被格式化成 DOS FAT16 的分割区,无 论原本是哪种格式. 分割区形式 4 跟 6 是兼容的, 而且它在清理学生所使用的电脑时相当有用的. 这 种快速格式化只要花几十秒.

预设值, bpclean 是编译成支持 LBA (不超过 1024 个磁柱, 但可达 256 个磁头). 某些奇怪的 BIOS 及某 些奇怪的操作系统较喜欢另一种 NORMAL 模式 (可达 4096 个磁柱, 但不能超过 64 个磁头); 如果您 需要这种模式, 那么把 LBA 的定义从原始程序里改成注解然后重新编译一遍.

Assembler 语法的原始程序代码在 .

4.4 MRZIP, MRUNZIP and BPUNZIP

MrZip 是一个在 DOS 下执行的程序, 用来建立压缩的 DOS FAT 16分割区. 第一步, 先分析磁盘机的使 用状况, 它然后只对有使用到的数据做压缩, 接著用相当快的 (并不是最有效率的) 统计的压缩演算 法则来压缩数据. 已经支持 Windows 95 的长文件名, 但是副文件名为 .SWP 的文件并不会储存. 在各式不 同的文件类型中,已经包含许多 magic numbers, 且已跟原始数据做过检查的 处理. 当文件容量的高位 序号数字增大时, 这个检查码储存在文件的容量的低位序号数字中 . 如果您在建立压缩影像档前把 您硬盘的序号归零, 则您可以使用这个数字来 追踪您影像档的更新次数.

因为 MrZip 会使用直接磁盘存取, 建议您在执行前先把磁盘机快取区的数据回存. Windows 95 似乎是 对做一制性的管理直接磁盘存取□

MrUnzip 是一个在 DOS 下执行的程序,用来解压缩磁盘影像档到硬盘驱动器中, 使用直接磁盘存取. 不要 跟任何具有快取功能的程序一起使用, 因为光是这个程序就已经快把 DOS 给折磨死了... 不管怎样, 如果您要恢复一个无法开机的机器那么它会是将很有用的.

BpUnzip 是一个开机影像用来管理压缩硬盘的影像档. 粗略的来说, 它将由硬盘驱动器的影像来开机并用 同样的名称, 副文件名为 .imz.

首先, 它会先读取分割区表并检查

接著它会读取第一个未用到的磁柱的第一个磁区并检查是否已经有一个影像表. 如果不是这样, 或 者影像表内容有点矛盾, 或者两个 shift 键都被按下时 (一种特别的 general-cleaning 信号), 这个影像表 将会被清除.

如果影像表还没有包含所需的影像, 它会通过 TFTP 通讯协议载入并加在影像表内. 如果在前面所载 入的影像之后, 没有足够的空间来存放旧的影像数据时, 则旧的影像档会被砍掉. 如果影像档已经存 在影像表中, 最新的开机影像磁区 (包含检查码) 将会通过 TFTP 通讯协议载入并且与目前得影像档 做比较. 如果它们不完全一致, 则压缩影像会再重新载入一次.

这个影像接著会被解压缩, 所有的 magic numbers 都再确认, 并检查解压缩後的数据. 如果解压缩失 败, 或者检查结果与最新的开机磁区不吻合, 则影像档将会重新载入并修正一次. 否则, 程序会把控 制权交给开机磁区, 操作系统就会启动.

如果 bpunzip 通过副文件名 .P 载入 (如 win95.P), 则它会假设 TFTP 服务器在 port 59 有加强型的界面 (在正 规的 port 69 之外所附加的). BpUnzip 将通过它以较大的封包格式载入影像档, 通常是以 1408 bytes 来 取代每个封包 512 bytes (这种转换使用大封包的技巧有点像TCP/IP Bootprom所使用的).

同理, 如果 bpunzip 是通过副文件名 .G 载入 (如 win95.GP), 则它将会先下载一个以同样主文件名的 GIF 图档 (如 win95.gif) 并在开机时把它秀在营幕上. 这个程序只能在 800x600, 256 色的模式下工作 (即使 GIF 图档 可以更小或者使用更少的颜色). 如果您想要看看开机的流程记录, 则这个标题可以按 ESC 键移除. 如果您的显示卡不是 VESA 兼容型, 则这个功能您不能使用. 另外,还要注意的是这个标记的执行完 成棒是使用调色盘的 最后十六色来显示. 如果不想使用这个功能, 或者希望修正它. 顺便一提, 如果 您不喜欢我们标记的执行完成棒, 您可以自由的改变它 (在 GIFDATA.ASM), 但请保留我们的名字 在可以看得到的地方.

目地分割区不需要完全跟原始的大小相同 ; 它只要有足够的空间来存放分割区中,所有使用到的磁 柱. 如果目地分割区小於原始的分割区, 则 文件对硬表 FAT 将会因此而萎缩 (但磁柱大小则不变). 如果目地分割区大小大於原始分割区, 则 文件对应表 FAT 将会尽可能的扩大. 然而, 如果目地分割 区比原始分割区大更多, 可能 65518 个磁柱就不够覆盖所有的空间 (因为磁柱大小是无法改变的). 像 这种状况, bpunzip 将会产生警告,告诉使用者有一些空间流失掉了.

预设值, bpunzip 是编译成支持 LBA (不超过 1024 个磁柱, 但可达 256 个磁头). 某些奇怪的 BIOS 及某 些奇怪的操作系统较喜欢另一种 NORMAL 模式 (可达 4096 个磁柱, 但不能超过 64 个磁头); 如果您 需要这种模式, 那么把 LBA 的定义从原始程序里改成注解然后重新编译一遍.

Assembler 语法的原始程序代码在 .

如果使用 Solaris 2.5 当 TFTP server. 在处理超过 16 Megabytes 时, 会有问题. 这是因为它无法处理超过 32768 packets per file 这是一个已知的臭虫, 但直到目前 SUN 仍未提供修正. 我们建议您使用更有效 率的加强型 extended TFTP server (它也支持其他操作系统, 就在 TCP/IP Bootprom 工具磁片中).

4.5 NOBREAK

Nobreak.sys 相当小 (大概只有 350 bytes ) 的驱动程序, 它将加在您 config.sys 中的开始处. 它的目的是保 护开机程序, 直到使用者登入. DOS 为这提供一种设定 (名为 BREAK=OFF), 但它不够暴力, 并且在 autoexec.bat 没舍用. 我们的驱动程序工作原理是当中断要求产生时修改键盘的扫描码, 直接在 BIOS 层工作. 以这方法, 所有的程序在中断未致能前都收不道中断讯息.

这个驱动程序必须放在 config.sys 档中(或者使用 Undocumented DOSdevlod 程序). 接著, 可以通过传 送 YesNOBRK 这个虚拟装置, 并且传送 No 而禁能 (事实上, 只需要第一个字符, YN 才是最重要 的).

因为这个驱动程序依靠 BIOS, 所以它只能在 DOS 跟 Windows 3.1.下工作 Windows 95 则有它自己的 低级键盘处理机制.

Assembler 语法的原始程序代码在 .


Next Previous Contents