>

Sep 26, 2015 - Описание устройства

Аппаратная часть

Устройство собрано на плате LCSOFT CY7C68013A mini board:

miniboard

Схема платы:

Схема

Из компьютера выводятся цифровые сигналы, содержащие информацию о цвете пикселей, совмещенный синхросигнал, а также сигнал тактирования пикселей, т.н. pixel clock. На плате МС0511 сигналы можно найти в следующих точках:

плата УКНЦ

Подключение сигналов к плате/микросхеме:

Вывод микросхемы Сигнал с компьютера описание
PB0 R* Красная составляющая цвета
PB1 G* Зеленая составляющая цвета
PB2 B* Синяя составляющая цвета
PB3 Y* Сигнал яркости
PB4 S* Совмещенный строчный и кадровый синхросигнал
IFCLK PXCLK Тактовый сигнал, не более 48МГц.
RDY0,RDY1 +5в Сигнал работы компьютера
GND Общий
  • - Все сигналы, подключаемые к порту PB0, могут быть подключены к любым выводам порта, а также могут быть инвертированы. Также нет ограничения на кол-во битов на цвет. Назначение каждого бита, и его "инвертированность" задается в файле конфигурации, в таблице приведено мое подключение.

При выведении дополнительных бит цветовой информации, например RL,GL,BL для УКНЦ, необходимо изменить файл конфигурации и прописать все 128 цветов.

Программное обеспечение.

Программа состоит из двух частей: прошивка для CY7C68013A, основанная на прошивке для логического анализатора из проекта sigrok, и программа показывающая изображение с компьютера. Изначально разрабатывалась под Linux, однако сейчас есть windows версия.

Программа использует SDL и OpenGL для масштабируемого отображения видеосигнала, параметры отображения задаются в конфигурационном файле. Режим отображения цвета переключается клавишей SCROLL-LOCK.

Программа поддерживает профили компьютеров, и позволяет хранить параметры отображения для нескольких компьютеров. При запуске без параметров, выбирается первый профиль.

Пример файла конфигурации:

#common parameters for all machine profiles
common:
{
    vid=0x04b4;                     #vid/pid
    pid=0x8613;
    framebuffer_size=1024;          #framebuffer size is 1024x1024
    clk_inverted=true;
    sync_bit_mask=0x10;     # which bit is sync
    inv_bits=0x00;          # will be xored with input data
    pixel_bits_mask=0x0f;   # which bits encode pexel color
# mask in colors can be binary string like "0101" or integer like 0x05 or 5
    colors=({ mask="0000"; color=0x000000; bw=0x00},
            { mask="0100"; color=0x0000B0; bw=0x2c},
            { mask="0001"; color=0xB00000; bw=0x42},
            { mask="0101"; color=0xB000B0; bw=0x58},
            { mask="0010"; color=0x00B000; bw=0x6e},
            { mask="0110"; color=0x00B0B0; bw=0x84},
            { mask="0011"; color=0xB0B000; bw=0x9a},
            { mask="0111"; color=0xB0B0B0; bw=0xb0},
            { mask="1000"; color=0x000000; bw=0x00},
            { mask="1100"; color=0x0000FF; bw=0x50},
            { mask="1001"; color=0xFF0000; bw=0x71},
            { mask="1101"; color=0xFF00FF; bw=0x8f},
            { mask="1010"; color=0x00FF00; bw=0x9f},
            { mask="1110"; color=0x00FFFF; bw=0xbf},
            { mask="1011"; color=0xFFFF00; bw=0xe3},
            { mask="1111"; color=0xFFFFFF; bw=0xff}
            );
    area={ x0=0.00; y0=0.00; x1=1.0; y1=1.0; }    # define rectangle area of raster that will be shown. Full framebuffer size is 1.0 x 1.0
}

# individual machine settings override common

machines:
(
    {
        name="MS-0511";
        inv_bits=0x0f;
        area={ x0=0.07; y0=0.01; x1=0.7; y1=0.3; }
    },
    {
        name="BK0010-01";           

        inv_bits=0x08;          # will be xored with input data
        colors=({ mask=0x00; color=0x000000; bw=0x00},
                { mask=0x04; color=0x0000FF; bw=0x00},
                { mask=0x01; color=0xFF0000; bw=0x00},
                { mask=0x05; color=0xFF00FF; bw=0x00},
                { mask=0x02; color=0x00FF00; bw=0x00},
                { mask=0x06; color=0x00FFFF; bw=0x00},
                { mask=0x03; color=0xFFFF00; bw=0x00},
                { mask=0x07; color=0xFFFFFF; bw=0x00},
                { mask=0x08; color=0x000000; bw=0xFF},
                { mask=0x0C; color=0x0000FF; bw=0xFF},
                { mask=0x09; color=0xFF0000; bw=0xFF},
                { mask=0x0D; color=0xFF00FF; bw=0xFF},
                { mask=0x0A; color=0x00FF00; bw=0xFF},
                { mask=0x0E; color=0x00FFFF; bw=0xFF},
                { mask=0x0B; color=0xFFFF00; bw=0xFF},
                { mask=0x0F; color=0xFFFFFF; bw=0xFF}
                );
        area={ x0=0.115; y0=0.035; x1=0.63; y1=0.29; }
    },
    {
        name="ZX-Spectrum";         

        clk_inverted=true;          
        inv_bits=0x00;          # will be xored with input data
        area={ x0=0.048; y0=0.035; x1=0.34; y1=0.245; }

    }
)

Инструкция по сборке для Linux

Необходимо поставить следующие пакеты:

git, buildessentials, freeglut3-dev, libsd1.2-dev, cmake, libconfig-dev

Названия пакетов могут отличатся для разных дистрибутивов.

Далее:

mkdir ~/build                                          # создаем рабочий каталог
cd ~/build
git clone https://github.com/y-salnikov/vcaptfx2.git   # клонируем в него репозиторий
cd vcaptfx2/host                                       # переходим в каталог с программой
cmake CMakeLists.txt                                   # cmake сформирует Makefile
make

В результате создастся исполняемый файл vcaptfx2 в текущем каталоге. Этот файл содержит прошивку и загрузит ее в устройство после запуска. Также после запуска будет создан файл конфигурации в ~/.config/vcaptfx2/ .

Скриншоты

screenshot screenshot screenshot screenshot screenshot screenshot