formats index
*** SFX (SelF-eXtracting LHA/LZH compressed files)
** Document revision 1.1
These files are actually LHA archives, except there they have a
decompressor program prepended to the file, capable of decompressing on
either a C64 or a C128, independant of the load address. The beginning of
the file is a BASIC program (with an unusual load address):
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
-----------------------------------------------
00000: 01 1C 28 1C C6 07 97 32 30 2C 30 3A 8B C2 28 32 <-Note load address
00010: 30 29 B2 30 A7 FE 02 30 3A 9E C2 28 34 36 29 AC
00020: 32 35 36 AA 36 36 3A 80 00 3C 1C D0 07 9E C2 28
00030: 34 34 29 AC 32 35 36 AA 36 36 3A 80 00 00 00 ..
which when decoded looks like this:
1990 POKE20,0:IFPEEK(20)=0THEN<254><2>0:SYSPEEK(46)*256+66:END
2000 SYSPEEK(44)*256+66:END
This was decoded on a C64... the two codes in line 1990, the <254> and
<2>0 are not decodable on the C64, but are on the C128. The first line
checks for whether it is running on a C64 or a 128. If it is a C64, it will
execute the SYS call line 2000, otherwise it executes the SYS on line 1990.
Later on in the header, we have the copyright message. Any SFX should
have this message.
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ASCII
----------------------------------------------- ----------------
00D20: .. .. .. .. .. .. .. .. .. .. .. 43 36 34 2F 43 ...........C64/C
00D30: 31 32 38 20 53 45 4C 46 20 45 58 54 52 41 43 54 128 SELF EXTRACT
00D40: 49 4E 47 20 4C 48 41 52 43 48 49 56 45 0D 43 4F ING LHARCHIVE.CO
00D50: 50 59 52 49 47 48 54 20 31 39 39 30 20 2D 20 43 PYRIGHT 1990 - C
00D60: 2E 53 4D 45 45 54 53 0D 54 4F 52 4F 4E 54 4F 2C .SMEETS.TORONTO,
00D70: 43 41 4E 41 44 41 .. .. .. .. .. .. .. .. .. .. CANADA..
At address $0E89 (3721 bytes into the file) you will find the beginning
of the LHA archive, denoted by two bytes and the signature '-LH1-'.
00E80: .. .. .. .. .. .. .. .. .. 1E B6 2D 6C 68 31 2D ...........-LH1-
*ALL* LHA/LZH archives have this type of signature string in them
('-lhx-', where x is the type of compression used, with C64 archives being
1, and most PC archives being 5). The actual archive starts 2 bytes before
this string is found, and goes to the end of the file. If you want to
convert them to LHA, you can chop the front end off the file (up to two
bytes before the -lhx- string), and rename it to an LHA. It will then be a
normal LHA file.
Another way to handle SFX's is to extract them with Star LHA. This
program handles both LHA and SFX formats, as they are basically the same.
Extract them as you would an LHA file (StarLHA -x xxxxxxxx.SFX). For more
information on the LHA/LZH layout, refer to the LHA topic.
ÿ