通过现代手段将ZX Spectrum的程序改编为TR-DOS。 第二部分

在本文的第一部分中,我们对原始版本的引导程序进行了排序,并找出了游戏代码的加载位置以及启动方式。 现在您需要将文件传输到磁盘。


软盘5.25“


通常,只需复制文件即可完成此操作,但是存在一个问题。 事实是原始文件完整地包含了图片和游戏代码,因此覆盖了基本和系统变量的区域,它们位于屏幕区域的紧后面。 可以从磁带下载这样的文件,但是不能从软盘下载这样的文件。 TR-DOS为您的需求保留了一定的存储空间,如果您在其中加载数据,在下载过程中所有内容都会中断。


幸运的是,我们有足够的内存没有被游戏占用。 因此,可以将游戏下载到另一个位置,并在下载结束时移至所需的位置并运行。 在这种情况下,我想在下载结束之前显示图片-因为它也可以启动。 为此,我们将整体文件切成两部分-屏幕区域数据和游戏数据:


$ head -c 6912 headless.bin > screen.bin $ tail -c +6913 headless.bin > data.bin 

游戏数据文件将立即转换hobeta格式。 稍后我们将需要它来记录在最终图像中。 要转换格式,我们将使用zxspectrum-utilstrd2hob


 $ binto0 data.bin 3 $ 0tohob data.000 #   data.$C 

载入画面


至于启动屏幕,在这样一张简单的图片上花费6.75 kB-浪费。 可以使用屏幕压缩程序(例如Laser Compact 5.2)对其进行适当压缩。 为此,您首先需要将映像文件写入临时软盘映像:


 $ binto0 screen.bin 3 $ 0tohob screen.000 $ createtrd tmp.trd $ hobeta2trd screen.\$C tmp.trd 

之后,在仿真器中运行Laser Compact并将压缩的图像保存到同一张软盘(“打包”屏幕→“使用解包器保存”)。 保存时,指定screenz.C文件screenz.C 。 接下来,您需要将压缩后的映像从软盘映像复制回磁盘。 不幸的是,我在任何地方都找不到trd2hob的源代码,因此我必须在DosBox下运行dos二进制文件:


 $ dosbox -c "mount C $PWD" -c "C:" -c "trd2hob.exe screen.trd" -c exit 

结果,我们得到了带有压缩图片的,格式为screenz.$的hobeta文件。


除了用于屏幕压缩的本机Spectrum实用程序之外,还有一些PC实用程序,例如zx7bzxsc 。 尽管使用它们进行自动化操作更方便,但在Laser Compact之前,它们都有缺点:


  1. 两者都失去了压缩质量。
  2. 打开图片包装时,当Laser Compact几乎立即填充屏幕属性区域时,就会看到某些伪像。
  3. zx7b不支持创建自解压归档文件-您必须另外编译解压缩器。

最后,我们找出压缩文件的大小。 我们稍后将需要它来编写引导加载程序。


 $ lstrd tmp.trd 80 Tracks, Double Side, capacity 640kB Number of files/deleted: 2/0 Free sectors/bytes: 2509/642304 First free sector/track: 3/3 FILENAME TYPE SECTORS ADDRESS LENGTH TRACK SECTOR -------------------------------------------------------------- screen <C> CODE (BYTES) 27 16384 6912 1 0 screenz <C> CODE (BYTES) 8 40000 1812 2 11 

如您所见,该文件被压缩了三倍以上,并占用了磁盘上的8个扇区。


在下一部分中,我们将直接进入引导加载程序。


相关链接:


  1. Nikolai Rodionov “对TR-DOS系统进行程序调整”

Source: https://habr.com/ru/post/zh-CN452542/


All Articles