7-Zip for AmigaOS 3.x (m68k)
============================
This is a native port of 7zz, the full command line version of 7-Zip
26.04 by Igor Pavlov, to classic AmigaOS. All archive formats of 7-Zip
are built in. The program is linked against libnix, so no additional
library (no ixemul, no clib2) is needed.
Two versions are included:
7zz_020 for 68020 and 68030 (runs on any 68020 or better)
7zz_040 for 68040, 68060 and 68080 (Vampire); also runs on the
68LC040/68LC060 without FPU
and the module for self-extracting archives:
7zSFX the 7-Zip SFX (7z only, unpacking only), see below
Features
--------
Packing: 7z, zip, tar, gzip, bzip2, xz, wim
Unpacking: all formats of 7-Zip, among them 7z, zip, rar, rar5, tar,
gzip, bzip2, xz, zstd, lzh/lha, arj, cab, iso, udf, wim,
cpio, rpm, deb, dmg, hfs, ntfs, fat, squashfs, vhd, vmdk
Methods: LZMA, LZMA2, PPMd, BZip2, Deflate, Deflate64, BCJ/BCJ2,
Delta and more
Encryption: AES-256 for 7z (also encrypted headers) and zip
Hashes: CRC32, CRC64, SHA1, SHA256, SHA512, SHA3, BLAKE2sp,
MD5, XXH64 (command "h")
Also: multi volume archives (switch -v), update/delete/rename
in archives, benchmark (command "b"), self-extracting
7z archives (module 7zSFX, see below)
Installation
------------
Double-click "Install" in the drawer 7zip. The installer preselects
the version for your CPU, copies it as C:7zz and, if you like, 7zSFX
as C:7zSFX. If a file is already there, it asks with both versions.
By hand: copy the version for your CPU to C: and rename it to 7zz:
Copy 7zip/7zz_040 C:7zz
For self-extracting archives also copy the SFX module:
Copy 7zip/7zSFX C:7zSFX
Usage
-----
7zz a archive.7z drawer pack a drawer into archive.7z
7zz x archive.7z unpack with full paths
7zz x -oWork:out archive.7z unpack into Work:out
7zz x -pSecret archive.7z unpack an encrypted archive
7zz l archive.7z list the contents
7zz t archive.7z test the archive
7zz a -tzip archive.zip files create a zip archive
7zz h -scrcSHA256 file show the SHA256 of a file
7zz b benchmark
7zz show all commands and switches
The full 7-Zip documentation for the command line version applies.
Self-extracting archives
------------------------
7zSFX is the console SFX of 7-Zip for AmigaOS. A self-extracting archive
is this module with a 7z archive inside: a program that unpacks itself,
from the Shell or by double-click on its icon. Nobody needs 7-Zip for
it.
prog unpack into the current directory
prog x -oWork:out unpack into Work:out
prog l list the contents
prog t test
prog x -pSecret unpack an encrypted archive
Started from the Workbench it opens a console window, unpacks into its
own drawer and keeps the window open until you close it.
On AmigaOS "7zz a -sfx7zSFX ..." does NOT give a working program: it
just appends the archive to the module, and AmigaDOS refuses to load a
program with data behind its last hunk ("file is not executable").
The archive has to go into a debug hunk of the module instead. LumiZip
(a MUI front end for 7zz) does this with its option "Self-extracting".
7zSFX always has the same version as 7zz; use the two from one package.
AmigaOS notes
-------------
- Amiga paths work as usual: "Work:data", "RAM:test.7z", assigns.
A volume or assign name is never stored inside an archive.
- Use quotes for names with spaces: 7zz a test.7z "Work:My Files"
- 7-Zip uses its own wildcards: '*' and '?', not the AmigaDOS
pattern '#?'.
- ':' is not allowed in AmigaOS file names. If an archive contains
such a name, it is replaced by '_' while unpacking. So an archive
can't write to other volumes.
- File names are converted to ISO-8859-1, the character set of
AmigaOS 3.x. Characters outside of it are replaced by '_'.
- The protection bits R, W, E and D are kept (as POSIX permissions).
H, S, P, A and file comments are not stored. When unpacking zip
archives made on the Amiga (Info-ZIP, host "Amiga"), all
protection bits and the file comments are restored.
- zip only, switch -mamiga: store all protection bits and the file
comments like Info-ZIP on the Amiga (host "Amiga"), e.g.
7zz a -tzip -mamiga archive.zip drawer
Other systems then unpack the files without Unix permissions.
- When overwriting, a file without the D or W bit is replaced as well
(like a read-only file on Windows).
- Ctrl-C (Break) stops 7zz within about a second, also in long steps
without any output.
- Self-extracting archives (7zSFX) of 2.5 MB and more open as 7z
archives. Before, 7zz took an Amiga program for a Windows object
file (COFF) and reported "Headers Error".
- A file without the R bit can't be read. When packing, 7zz skips it
with a warning and ends with return code 1, like on other systems.
- Only the modification date is kept: AmigaOS has no creation or
access date. Time stamps are stored in UTC like on other systems,
so set your time zone in the Locale preferences.
- Temporary files are written to T:.
- The port is single threaded: switch -mmt has no effect.
Memory
------
With the default settings 7zz packs 7z archives with LZMA2 and a 32 MB
dictionary. For big files this needs about 380 MB of RAM. For small
files 7-Zip lowers the dictionary automatically. With less RAM use:
7zz a -mx1 archive.7z drawer (about 12 MB)
7zz a -m0=LZMA2:d1m archive.7z drawer (about 20 MB)
7zz a -tzip archive.zip drawer (about 12 MB)
Unpacking needs a bit more than the dictionary size of the archive:
about 85 MB for big archives packed with the default settings, and
about 12 MB for small ones. (Values measured with 7-Zip 26.03.)
Speed
-----
Benchmark "7zz b 1 -md18" on a Vampire V4 Standalone (68080, ~77 MHz):
Packing Unpacking Rating
7zz_020 61 KB/s 782 KB/s 59 MIPS
7zz_040 68 KB/s 799 KB/s 63 MIPS
Tests
-----
Both versions were tested under emulation (Amiberry, 68020 and 68040)
and on real hardware (Vampire V4 Standalone, AmigaOS 3.2). Archives
created by the Linux version of 7-Zip were unpacked on the Amiga and
checked with SHA256; archives created on the Amiga were tested and
unpacked with the Linux version. Covered: all formats listed above
for packing, many formats for unpacking, AES encryption, wrong
passwords, unpacking of multi volume archives, Amiga paths, names with
spaces and umlauts, update/delete/rename, time stamps and protection
bits.
Notes on the port
-----------------
The port is built with the GCC 6.5 cross compiler by Stefan "Bebbo"
Franke. Five problems of this toolchain were found and worked around,
so the results are correct also on real hardware:
- SHA256 was wrong (and different on each run) with -O2, because
uninitialized memory was read. Emulators don't show this, as
their memory is zeroed.
- The BZip2 encoder wrote a wrong block CRC with -O1/-O2.
- With -m68040 the compiler creates soft float code, but the linker
specs add hard float libraries, so all floating point results
were 0.
- The exception tables of about every second object file were
misaligned, so some C++ exceptions (e.g. Ctrl-C) ended in abort()
instead of a clean exit.
- The register renaming of Bebbo's optimizer (-fbbb, part "r")
ignores exception edges. A small archive with encrypted headers
and a wrong password could hang the machine (Guru 81000005).
The port is built without this part.
Also libnix needed some help: its wide character functions don't work
with the 32-bit wchar_t of GCC (wmemcpy() copies bytes), lseek() can't
move beyond the end of a file, and some POSIX functions are missing.
History
-------
26.04 (2026-10-08) update to 7-Zip 26.04 of 2026-10-05 (bug and
security fixes by Igor Pavlov)
26.03 (2026-09-17) first release of the AmigaOS port, based on
7-Zip 26.03 of 2026-09-03: 7zz for 68020 and for
68040/060/080, and 7zSFX, the module for
self-extracting 7z archives (shell and Workbench)
Licence
-------
7-Zip is free software under the GNU LGPL, some parts under the BSD
3-clause licence. The code for RAR is under the unRAR licence ("You may
not use the code to develop a RAR (WinRAR) compatible archiver").
See License.txt, copying.txt and unRarLicense.txt in the archive.
The source code of 7-Zip is available at https://www.7-zip.org/.
|