Spconv is a utility to convert between various snapshot formats. Snapshot files are created by various spectrum emulators. SPCONV converts between .SNA, .SP, .Z80, .PRG, .ACH and .ZX files.
Wildcards for the infile or outfile parameters are not accepted, an error message is displayed if either * or ? is found in one or both the filenames. The outfile parameter is either a full filename or only the suffix .SNA, .SP, .Z80, .PRG, .ACH or .ZX. The prefix is taken from the first parameter in that case.
Normaly the <infile> and <outfile> are not of the same type. If they are you will get a error message. This is so unless both files are of the .SP or .Z80 type. In case of .SP format the converter will convert an old style .SP file to a new style .SP file or from a new style .SP file to an old style .SP file, depending on the input. The old style .SP file is used by VGASPEC, with seems to be an unauthorised version of the spanish "SPECTRUM" program. The "SPECTRUM" program will use the new style .SP files.
In case both files are of the .Z80 format spconv will read the .Z80 file and will output a .Z80 file in the version 1.45 .Z80 format. This enables conversion of normal 48K Spectrum files made by Z80 version 2.01 or 3.0 to the older format so they can be loaded in a version 1.45 Z80 or 2.01 Z80 emulator. Of course additional information that can only be stored in the version 2.01 and 3.0 files is lost. Therefore spconv will check if the .Z80 file is for a 48K Spectrum and check if the Interface-1 rom was not paged in. If the check fails an error message is given and the conversion is terminated - no output will be produced. Spconv will only output version 1.45 .Z80 files since these are compatible with old and new Z80-emulator versions. If Spconv encounters a .Z80 format file that seems to be newer than version 3.0, Spconv will attempt to convert it anyway in the hope that it is upwards compatible. A warning will ge given in that case.
[.SP files - Used by the Spanish "SPECTRUM" and "VGASPEC" programs.]
Conversion to/from .SP files may not always work. It is not clear to me how IFF, IFF2 and the interrupt mode are stored in the .SP file. Since version 1.02 I have made some improvements to this type of conversion however, it sould work now, but I have not enough .SP samples to fully test it. Note that crashing of a converted image may also be caused by bugs in the SPECTRUM emulator. Conversion to .SP will work if the image is converted from a RAW image (see later).
[.Z80 files - Used by the Dutch "Z80" programs. This format is also usable for 128K Spectrum images.]
[.SNA files - Used by the Norwegian "JPP" PC-program; the "Spectrum" program for the Amiga; the "XZX" X-Windows program and a lot more. This is the most supported format since it originated from the Mirage-Microdirver format.]
Conversion between .SNA and .Z80 and from .Z80 to .SNA should be no problem, both formats are sufficiently described in the documentation of JPP (the norwegian emulator) and Z80 (the dutch emulator).
[.PRG files are loaded by a PC-emulator from Ireland. This emulator can not save in this format.]
Conversion to/from .PRG files should work fine also. I don't have a description of that format, but I think I figured it all out by looking at some samples. I only don't know where the border colour is stored. The specem emulator (an Irish emulator) doesn't show the border, so I can't find out by trail and error.
[.ACH files are used on Archimeds computers by an emulator called "Speculator" or "!Speccy"]
Since version 1.07 Conversion should work without problems. The conversion is patterned after a program (also called Spconv) and a BBC-Basic program from John Veness (supplied to me by Mike Borcherds). I also got a .ACH file snapped just after startup which was most helpfull. Since the programs I got were written independently but had all registers at the same place (but one got her accent registers swapped with the normal registers), I think it is pritty save to assume that the format is correct now. The previous version of this converter got register 'I' from the wrong spot, and more important, I forgot to set the interrupt mode when converting to .ACH file format.
It is also tested now with a fair collection of snaps. The .ACH extension is my own invention to cope with the MS-DOS naming conventions. I named them this way because the samples I had ended in ".archimedes" and use of .ARC as extension didn't sound like a good idea. I don't have an archimedes computer to test it but somebody else (Adrian Jackson) did it for me. For proper conversion you need the spectrum rom because that is a part of the archimedes image (don't blame me). The ROM must be named 'spectrum.rom' and be located in the working directory or in the same directory as spconv.exe. If no ROM is found the converter will insert NULL bytes.
[.ZX files are used by the KGB emulator on a Commodore Amiga]
Conversion to/from .ZX files should work, Peter McGavin send me the definition of the format as used in the KGB emulator. I implemtented it that way but I don't have an Amiga with a KGB emulator so it is untested! I previously used the information about the format of the file from a VAX-Basic program supplied to me by Jason Brown and most information correlated so I'm hopefull that it works. Please send me feetback if it works so I can put it here in the documentation. Oh, before I forget, the .ZX format contains the last 132 bytes of the spectrum rom (don't ask me why) so spconv will look for "spectrum.rom" in the working directory or in the same directory as spconv.exe is located. If absent than the first 132 bytes will be NULL bytes.
[RAW files are created by saving the whole ram on a real spectrum to the RS232 port of Interface-1 from basic]
Spconv can also be used to convert a raw spectrum image to a snapshot file. The image has to be captured with via the RS232 connetion on Interface-1. Some tools to do this are in an archive called "SPEC232". A program called "SLOAD" will read from the RS232 link to a file on the MSDOS-PC. At the Spectrum side the the command SAVE *bCODE 16384,49152 HAS to be used. Spconv will convert the file is such way that it will continue in the basic interpreter after the snapshot is loaded. so SAVE *bCODE 16384,49152:PRINT Hello, World! will after conversion to a snapshot file and loading it in the emulator begin with printing "Hello, World!". A description how to wire the RS232 cable is also in the "SPEC232" package.
Converting a .SNA JPP file to the .Z80 Dutch emulator: spconv game.sna game.z80 or spconv game.sna .z80
0 - OK: The program finished without problems
1 - USAGE: The program was called incorrectly:
2 - READ_ERROR: There was a problem while reading the input file:
3 - WRITE_ERROR: There was a problem while creating the output file:
4 - FILE_ERROR: There was a problem with the input or output file format:
The program should be portable. Assumptions about endian-ness are avoided and
I ensured clean compilation with Turbo-C++ 1.0 (with all warnings enabled).
Chris Wells used this command line of GCC on this program (and gave feetback
until it gave a clean compile):
gcc -ansi -pedantic -Wall -Wwrite-strings -Wshadow -Wformat
-Wpointer-arith -Wconversion -Wstrict-prototypes
-Wmissing-prototypes -o spconv spconv.c
I also ensured that the identifiers used in the program are uniq in the first 8 characters. I don't expect much problems when compiling the program with other compilers. The code does make assumptions about path names. Using the program on a VAX will give problems with recognizing directories e.t.c. especially for finding "spectrum.rom", I leave a fix for this as an exercise...
Conversion to/from .SP files may not always work.