pattern: Atari 8-bit binary format (XEX) (#453)

* add atari XEX format

* Update README.md

---------

Co-authored-by: Nik <werwolv98@gmail.com>
This commit is contained in:
adiee5
2025-12-05 22:01:41 +01:00
committed by GitHub
parent 2a9676238f
commit 285a2fc7d1
3 changed files with 35 additions and 0 deletions

View File

@@ -224,6 +224,7 @@ Everything will immediately show up in ImHex's Content Store and gets bundled wi
| ZSTD | `application/zstd` | [`patterns/zstd.hexpat`](patterns/zstd.hexpat) | Zstandard compressed data format |
| MOD | `3d-model/mod` | [`patterns/DMC3HD-Mod.hexpat`](patterns/dmc3_hd_mod.hexpat) | 3D Model files used in Devil May Cry 3 HD Collection |
| CBM BASIC | | [`commodore_basic.hexpat`](patterns/commodore_basic.hexpat) | Commodore BASIC |
| Atari XEX | | [`xex.hexpat`](patterns/xex.hexpat) | Atari 8-bit binary format |
| Terminfo | `application/x-terminfo` and `application/x-terminfo2` | [`patterns/terminfo.hexpat`](patterns/terminfo.hexpat) | Compiled *(legacy and extended)* term info entry |
### Scripts

34
patterns/xex.hexpat Normal file
View File

@@ -0,0 +1,34 @@
#pragma author Adiee5
#pragma description Atari 8-bit binary format (.xex)
#pragma endian little
#pragma magic [ FF FF ] @ 0
import std.mem;
import std.io;
u16 header @ 0;
if (header != 0xFFFF)
std::error("Not a valid XEX file");
fn hex_dec_addr(u16 num){
return std::format("0x{:04X} ({})", num, num);
};
struct block {
u16 start [[comment("Address of the first byte"), format("hex_dec_addr")]];
if (start == 0xFFFF) continue; //an unnecessary header to be ignored
u16 end [[comment("Address of the last byte"), format("hex_dec_addr")]];
// since 1 and 2 byte blocks sometimes have special meanings,
// we make them regural variables instead of byte arrays,
// so that reading their values from the GUI is easier
match (end-start){
(0): u8 data;
(1): u16 data [[format("hex_dec_addr")]];
(_): u8 data[end-start+1];
}
};
block data_blocks[while(!std::mem::eof())] @ 2 [[name("Data Blocks")]];

Binary file not shown.