§ Код конвертера

<?php

$im   = imagecreatetruecolor(256, 192);
$data = @ file_get_contents($argv[1]);
$mem  = [];

if ($data) {

    for ($i = 0; $i < strlen($data); $i++) $mem[$i] = ord($data[$i]);
    for ($i = 0; $i < 6144; $i++) update_charline($im, $mem, $i);
    imagepng($im, "{$argv[1]}.png");
}

// Обновить определенную линию
function update_charline(& $im, $mem, $address) {

    $address &= 0x3FFF;

    $byte = $mem[$address];

    $Ya = ($address & 0x0700) >> 8;
    $Yb = ($address & 0x00E0) >> 5;
    $Yc = ($address & 0x1800) >> 11;

    $y = $Ya + $Yb*8 + $Yc*64;
    $x = $address & 0x1F;

    $attr    = $mem[$x + 0x1800 + (($address & 0x1800) >> 3) + ($address & 0xE0)];
    $bgcolor = get_color(($attr & 0x78) >> 3);
    $frcolor = get_color(($attr & 0x07) + (($attr & 0x40) >> 3));
    $flash   = ($attr & 0x80) ? 1 : 0;

    for ($j = 0; $j < 8; $j++) {

        $pix = ($byte & (0x80 >> $j)) ? 1 : 0;
        $clr = $pix ? $frcolor : $bgcolor;
        imagesetpixel($im, 8 * $x + $j, $y, $clr);
    }
};

function get_color($color) {

    switch ($color) {

        // Lo
        case 0: return 0x000000;
        case 1: return 0x0000c0;
        case 2: return 0xc00000;
        case 3: return 0xc000c0;
        case 4: return 0x00c000;
        case 5: return 0x00c0c0;
        case 6: return 0xc0c000;
        case 7: return 0xc0c0c0;
        // Hi
        case 8: return 0x000000;
        case 9: return 0x0000FF;
        case 10: return 0xFF0000;
        case 11: return 0xFF00FF;
        case 12: return 0x00FF00;
        case 13: return 0x00FFFF;
        case 14: return 0xFFFF00;
        case 15: return 0xFFFFFF;
    }

    return 0;
};
24 дек, 2020
© 2007-2022 Человек без автомобиля - то же самое, что и человек без прав