From fd809798ef7082a8d4a0c4fef68652dab43bece4 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Sun, 22 Jun 2025 20:05:16 +0100 Subject: [PATCH] Add pattern for Apple 2MG disk images. --- disk/2mg.hexpat | 93 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 disk/2mg.hexpat diff --git a/disk/2mg.hexpat b/disk/2mg.hexpat new file mode 100644 index 0000000..81a08b4 --- /dev/null +++ b/disk/2mg.hexpat @@ -0,0 +1,93 @@ +// /*************************************************************************** +// Aaru Data Preservation Suite +// ---------------------------------------------------------------------------- +// +// Filename : 2mg.hexpat +// Author(s) : Natalia Portillo +// +// Component : ImHex pattern for parsing Apple 2MG disk images. +// Version : 1.00 +// +// --[ Description ] ---------------------------------------------------------- +// +// Parses Apple 2MG disk images. +// +// --[ History ] -------------------------------------------------------------- +// +// 1.00: Initial release. +// +// --[ License ] -------------------------------------------------------------- +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// ---------------------------------------------------------------------------- +// Copyright © 2011-2025 Natalia Portillo +// ****************************************************************************/ + +#pragma author Nat Portillo +#pragma description Apple 2MG disk images parser (*.2mg) +#pragma endian little +#pragma magic [ "2IMG" ] @ 0x00 + +import type.magic; + +enum sector_order_t : u32 +{ + DOS = 0, + PRODOS = 1, + NIBBLES = 2 +}; + +struct header_t +{ + // Magic + type::Magic<"2IMG"> magic; + // Disk image creator ID + char creator[4]; + // Header size, constant 0x0040 + u16 header_size; + // Disk image version + u16 version; + // Disk image format + sector_order_t image_format; + // Flags and volume number + u32 flags; + // Blocks for ProDOS, 0 otherwise + u32 blocks; + // Offset to data + u32 data_off; + // Data size in bytes + u32 data_len; + // Offset to optional comment + u32 comment_off; + // Length of optional comment + u32 comment_len; + // Offset to creator specific chunk + u32 creator_specific_off; + // Creator specific chunk size + u32 creator_specific_len; + // Reserved, should be zero + u32 reserved1; + // Reserved, should be zero + u32 reserved2; + // Reserved, should be zero + u32 reserved3; + // Reserved, should be zero + u32 reserved4; +}; + +header_t header @ 0x00; +u8 data[header.data_len] @ header.data_off; +char comments[header.comment_len] @ header.comment_off; +u8 creator_specific[header.creator_specific_len] @ header.creator_specific_off; \ No newline at end of file