In the first part of the article, we disassembled the original version downloader and found out where the game code is loaded and how it starts. Now you need to transfer files to disk.
This is usually done by simply copying files, but there is one problem. The fact is that the original file contains a picture and a game code in a whole piece and, therefore, overwrites the area of basic and system variables that are immediately behind the screen area. Such a file can be loaded from a tape, but cannot be loaded from a floppy. TR-DOS reserves a certain area of memory for your needs, and if you load data there, during the boot process, everything will break.
Fortunately, we have enough memory, not busy playing. Therefore, the game can be downloaded to another location, and after the download is complete, move it to where it should be and run it. In this case, I would like to show the picture before the end of the download - for that it is bootable. To do this, we cut a monolithic file into two - data from the screen area and game data:
$ head -c 6912 headless.bin & gt; screen.bin $ tail -c +6913 headless.bin & gt; data.bin
$ binto0 data.bin 3 $ 0tohob data.000 # will create a data file. $ C
As for the boot screen, spend 6.75 kb on such a simple picture - waste. You can compress it with a screen compressor, for example, Laser Compact 5.2 . To do this, you first need to write the picture file to a temporary floppy image:
$ binto0 screen.bin 3 $ 0tohob screen.000 $ createtrd tmp.trd $ hobeta2trd screen. \ $ C tmp.trd
After that, run the Laser Compact in the emulator and save the compressed image on the same diskette (Pack screen → Save with depacker). When saving, specify the file name
screenz.C . Next, you need to copy the compressed image from the floppy image back to the disk. Unfortunately, the source code
trd2hob I could not find anywhere, so I have to run the DOS binary from under DosBox:
$ dosbox -c "mount C $ PWD" -c "C:" -c "trd2hob.exe screen.trd" -c exit
As a result, we get a
screenz. $ C hobeta file with a compressed image.
In addition to native Spectrum utilities for compressing screens, there are utilities for PCs, for example,
zx7b and < code> zxsc . Although it is more convenient to automate work with them, both of them have laser drawbacks:
zx7bdoes not support creating self-extracting archives - you have to additionally compile the decompressor.
Finally, find out the size of the compressed file. We will need it later to write the bootloader.
$ 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 & lt; C & gt; CODE (BYTES) 27 16384 6912 1 0 screenz & lt; C & gt; CODE (BYTES) 8 40000 1812 2 11
As you can see, the file has shrunk more than tripled and takes 8 sectors on the disk.
In the next section, let's go directly to the bootloader.