§ Исходный код

Запускать требуется так:
php bin2mif.php 32 in.bin out.mif
Где 32 — объем, 32Кб; in.bin — входящий файл; out.mif — исходящий. Можно опустить последний аргумент и будет выдано в stdout.
1<?php
2
3/*
4 * Конвертирование из Bin -> MIF файл
5 * Аргумент 1: Размер памяти (256k = 262144)
6 * Аргумент 2: bin-файл
7 * Аргумент 3: Куда выгрузить
8 */
9
10$size = (int) $argv[1];
11$data = file_get_contents($argv[2]);
12$len  = strlen($data);
13if ($size < 1024) $size *= 1024;
14
15if (empty($size)) { echo "size required\n"; exit(1); }
16
17$out = [
18    "WIDTH=8;",
19    "DEPTH=$size;",
20    "ADDRESS_RADIX=HEX;",
21    "DATA_RADIX=HEX;",
22    "CONTENT BEGIN",
23];
24
25$a = 0;
26
27// RLE-кодирование
28while ($a < $len) {
29
30    // Поиск однотонных блоков
31    for ($b = $a + 1; $b < $len && $data[$a] == $data[$b]; $b++);
32
33    // Если найденный блок длиной до 0 до 2 одинаковых символов
34    if ($b - $a < 3) {
35        for ($i = $a; $i < $b; $i++) $out[] = sprintf("  %X: %02X;", $a++, ord($data[$i]));
36    } else {
37        $out[] = sprintf("  [%X..%X]: %02X;", $a, $b - 1, ord($data[$a]));
38        $a = $b;
39    }
40}
41
42if ($len < $size) $out[] = sprintf("  [%X..%X]: 00;", $len, $size-1);
43$out[] = "END;";
44$pb = join("\n", $out);
45
46// Сохранить информацию
47if (isset($argv[3])) file_put_contents($argv[3], $pb); else echo $pb;