?

Log in

Чт, 6 сент, 2012, 20:41
UKNCBTL: оптимизация рендеринга экрана

было:
                    for (int s = 0; s < scale; s++)
                        *pBits++ = valueRGB;

стало:
                    switch (scale)
                    {
                    case 8:
                        *pBits++ = valueRGB;
                        *pBits++ = valueRGB;
                        *pBits++ = valueRGB;
                        *pBits++ = valueRGB;
                    case 4:
                        *pBits++ = valueRGB;
                        *pBits++ = valueRGB;
                    case 2:
                        *pBits++ = valueRGB;
                    case 1:
                        *pBits++ = valueRGB;
                    default:
                        break;
                    }

охеренный прирост производительности, процентов на 20-30
я-то думал 2-3% было бы классно здесь выжать

На моём ноуте с выключенным звуком эмулятор выдавал 500% от оригинала, теперь 700%.

Вт, 21 авг, 2012, 17:17
QtUkncBtl beta33 for Windows

Download: http://ukncbtl.googlecode.com/files/QtUkncBtl-beta33-Windows.zip

Ещё одна порция свистелок и перделок.
Собственно в этом релизе скриптовое API несколько доработано.

Напомню, было всего три метода:
emulator.reset(); -- сброс машины
emulator.run(100); -- работа эмулятора в течение 100 фреймов, каждый фрейм это 1/25 секунды
emulator.saveScreenshot("test.png"); -- сохранение скриншота в формате PNG

Дальше что добавилось:

emulator.attachCartridge(1, 'romctr_basic.bin'); -- подключение картриджа
emulator.detachCartridge(1); -- отключение картриджа
emulator.attachFloppy(0, 'sys1002.dsk'); -- подключение диска
emulator.detachFloppy(0); -- отключение диска
emulator.attachHard(1, 'WDC170inv.img'); -- подключение харда, работает только если уже подключена прошивка через emulator.attachCartridge
emulator.detachHard(1);

emulator.getUptime(); либо свойство emulator.uptime -- возвращает number количество секунд работы эмулируемой машины, по emulator.reset() сбрасывается в 0

emulator.keyScan(0153); -- нажимает клавишу (задаётся скан-код), прогон 3 фрейма, отпускает, прогон 3 фрейма
emulator.keyScan(0153, 6); -- то же но задаётся интервал (фреймов) от нажатия до отжатия
emulator.keyScanShift(0013); -- нажатие SHIFT, 2 фрейма, нажатие клавиши, 3 фрейма, отжатие клавиши, 2 фрейма, отжатие SHIFT, 3 фрейма -- т.е. комбинация для ввода символа в другом регистре
emulator.keyString('1\n'); -- ввод серии символов; для каждого ASCII-символа ищется скан-код, если нужно используется нажатие SHIFT

emulator.getCPU() либо emulator.cpu -- получение объекта для ЦП
emulator.getPPU() либо emulator.ppu -- получение объекта для ПП

Дальше описываю в примерах для ПП, для ЦП то же самое:
emulator.ppu.getName() либо emulator.ppu.name -- название процессора, "CPU" либо "PPU"
emulator.ppu.getReg(0) либо emulator.ppu.r(0) -- значение в регистре 0..7
emulator.ppu.getPC() либо emulator.ppu.pc -- значение в регистре 7
emulator.ppu.getSP() либо emulator.ppu.sp -- значение в регистре 6
emulator.ppu.getPSW() либо emulator.ppu.psw -- значение в PSW
emulator.ppu.isHalt() либо emulator.ppu.halt -- признак HALT/USER режима

emulator.ppu.readWord(0160304) -- прочитать слово из памяти процессора

emulator.ppu.disassemble(0160304) -- дизассемблирует одну инструкцию по заданному адресу, возвращает массив из четырёх элементов: { address, instruction, arguments, instruction length }

Актуальная версия скриптового API описана тут: http://code.google.com/p/ukncbtl/wiki/Scripting

Сб, 2 июн, 2012, 20:23
UKNCBTL TestBench

Постепенно пишу автотесты для эмулятора -- это по сути функциональные тесты для регрессионного тестирования. Под это сделан отдельный проект с тем же ядром эмуляции.

На сегодня написано 9 тестов.
Проверка всех тестов занимает 324 секунды -- 5,5 минут.
По времени эмулируемой машины это занимает 3098 секунд, т.е. почти 52 минуты.

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

Пн, 28 май, 2012, 01:10
Инженерная графика на УКНЦ

Был на УКНЦ такой пакет демонстрационной графики. Некоторые подробности здесь: http://zx.pk.ru/showthread.php?p=423278#post423278

Сегодня добавлял эти демки в свой TestBench. У меня там есть функция сохранения скриншота -- подумалось что можно же так и серии скриншотов записывать. В общем, собрал обе демки в одно видео. Скорость увеличена в 8 раз по сравнению с реалом, чтобы подинамичнее было.


http://youtu.be/XmflcGDBygY

Вс, 11 дек, 2011, 19:13
Valgrind

Сегодня гонял Qt-версию UKNCBTL под анализатором Valgrind.
Кто не знает -- это такое средство динамического анализа. Причём Valgrind как бы предоставляет базовые функции, а на основе этой базы уже строятся конкретные анализаторы, такие как memcheck.
Гонял под Mac OS X (разработчики Valgrind это такие гордые ежи, что Windows-версию не поддерживают в принципе). В Qt Creator сейчас есть поддержка Valgrind (меню Analyze), в целом довольно удобно.

Утечек памяти не нашёл, зато обнаружил пару неинициализированных переменных в ядре эмулятора.
Гонял также профайлер; в общем ничего удивительного не обнаружил, понятно что большая часть времени уходит на генерацию экрана.

http://ru.wikipedia.org/wiki/Valgrind

Сб, 19 ноя, 2011, 20:32
UKNCBTL под Убунтой и Барсом



http://ukncbtl.googlecode.com/files/QtUkncBtl-beta24-linux.tar.gz
Qt-версия UKNCBTL для линуксов.
Собрана на Qt Creator 2.2.1 (Qt 4.7.3) под Ubuntu 11.10.



http://ukncbtl.googlecode.com/files/QtUkncBtl-beta24-mac64.zip
Qt-версия UKNCBTL для Mac OS X 10.6.
Собрана на Qt Creator 2.3.1 (Qt 4.7.4) под Mac OS X 10.6.6.

Qt-версия по возможностям пока сильно отстаёт от основной Win32-версии, хотя и использует то же самое ядро эмуляции.
Но ситуация у меня сейчас такова что по-видимому Qt-версии сейчас получат приоритет в развитии.

Сб, 5 ноя, 2011, 18:49
УКНЦ: Загрузка SAV-файла через Стык С2

Написал утилитку для загрузки SAV-файла через Стык С2 (RS-232 по ихнему).
Однако грузит:

Пн, 25 июл, 2011, 00:43
Пять лет работы над UKNCBTL

Примерно 24 июля 2006 года я засел за написание эмулятора УКНЦ.
Таким образом, над этим проектом я работаю уже пять лет.

10 most recent