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

Запускать требуется так:
php bin2mif.php 32 in.bin out.mif
Где 32 — объем, 32Кб; in.bin — входящий файл; out.mif — исходящий. Можно опустить последний аргумент и будет выдано в stdout.
<?php

/*
 * Конвертирование из Bin -> MIF файл
 * Аргумент 1: Размер памяти (256k = 262144)
 * Аргумент 2: bin-файл
 * Аргумент 3: Куда выгрузить
 */

$size = (int) $argv[1];
$data = file_get_contents($argv[2]);
$len  = strlen($data);
if ($size < 1024) $size *= 1024;

if (empty($size)) { echo "size required\n"; exit(1); }

$out = [
    "WIDTH=8;",
    "DEPTH=$size;",
    "ADDRESS_RADIX=HEX;",
    "DATA_RADIX=HEX;",
    "CONTENT BEGIN",
];

$a = 0;

// RLE-кодирование
while ($a < $len) {

    // Поиск однотонных блоков
    for ($b = $a + 1; $b < $len && $data[$a] == $data[$b]; $b++);

    // Если найденный блок длиной до 0 до 2 одинаковых символов
    if ($b - $a < 3) {
        for ($i = $a; $i < $b; $i++) $out[] = sprintf("  %X: %02X;", $a++, ord($data[$i]));
    } else {
        $out[] = sprintf("  [%X..%X]: %02X;", $a, $b - 1, ord($data[$a]));
        $a = $b;
    }
}

if ($len < $size) $out[] = sprintf("  [%X..%X]: 00;", $len, $size-1);
$out[] = "END;";
$pb = join("\n", $out);

// Сохранить информацию
if (isset($argv[3])) file_put_contents($argv[3], $pb); else echo $pb;