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