|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|||||||||||||||||||||
Эмулятор CHIP-810.08.2010, 06:34. Показов 18092. Ответов 90
Метки нет (Все метки)
Мы с fasked написали простенький эмулятор для платформы CHIP-8.
CHIP-8 Остались вопросы по графике и клавиатуре. Если кто знает как реализовать - помогите, пожалуйста. Так же приглашаем для участия в доработке этого проекта, а так же следующих проектах всех, кто желает учиться и трудиться. Кому интересна работа эмулятора все вопросы к fasked) Полный проект в прикрепленном архиве в сообщении ниже CHIP8
types.h
chip-8.h
chip8.cpp
main.cpp
0
|
|||||||||||||||||||||
| 10.08.2010, 06:34 | |
|
Ответы с готовыми решениями:
90
Эмулятор. На С, С++ Эмулятор телефона. С++ Эмулятор мышки |
| 11.08.2010, 12:04 | |
|
0
|
|
|
Мат в 32 хода
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
|
||
| 11.08.2010, 12:08 | ||
|
0
|
||
|
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
|
|
| 11.08.2010, 12:12 | |
|
Дак это, http://qt.nokia.com/downloads/
1
|
|
|
|
||
| 11.08.2010, 13:53 | ||
|
С потоками пока что не разбирался, запустил все просто так. Ужасно устал, поэтому с потоками разберусь чуть позже. Чтение файла пока тоже не сделал - так что опкоды опять забиты вручную. В общем набросал минимальный интерфейс так сказать ![]() С прорисовкой вроде бы разобрался. Выкладываю проект с исходниками и откомпилированной под Windows программой + необходимые для запуска библиотеки. За счет библиотек архив весит довольно много (QtGui4.dll, QtCore4.dll, mingwm10.dll, libgcc_s_dw2-1.dll). Однако они необходимы для запуска, если на машине они не установлены и не прописаны пути к ним. Теперь влегкую опишу интерфейс и планы на счет него. Меню File. Включает в себя стандартные пункты. открытие файла и выход из программы. Открытие файла не реализовано. Выводится только стандартный диалог. Но далее ничего не происходит - поставил заглушку. Меню Emulator. Пока что включает только пункт запуска. Меню View. Включает подменю для изменения размера одного пиксела. В идеале планирую сделать, чтобы размер пиксела вычислялся в зависимости от размера главного окна. В меню Help помещен простенький модальный диалог About. Для запуска теста вывода цифр надо выполнить команду Run из меню Emulator. Код на данный момент грязноватый, сейчас немного отдохну и почищу его. Хм. 5-мегабайтовый архив почему отказывается загружаться. Поэтому выложу только скриншот ![]() Позже залью файлы на какой-нибудь файлообменник или открою FTP-доступ к себе. Пойду отдыхать...
2
|
||
|
|
|
| 12.08.2010, 06:09 | |
|
Немного еще подработали прототип, опять нашли косяки с видеопамятью. Поправили.
Получили первый опыт работы с SVN - очень интересно надо сказать ![]() В общем вот ссылка на наш репозиторий http://svn2.xp-dev.com/svn/chip8/, а это конкретно на архив с последним exe'шником http://svn2.xp-dev.com/svn/chi... /chip8.ZIP. С потоками так и не начали разбираться. Не очень далеко-то мы продвинулись за эту ночь. Из того, что сделали: добавление открытие файлов из диалога. Теперь эмулятор работает с файлами. Убрали возможность изменения размера пиксела. Решили, что лучше сразу сделать автоматический расчет, но позже, чем сейчас подобными вещами засорять код. Эмулятор отрабатывает на бинарниках, которые не содержат опкодов для работы с клавиатурой (по нашему предположению). Так что он умеет сейчас только выводить картинки ![]() Например так как в прикрепленном скриншоте. Этот бинарник приложен в архиве с программой. Если пробовать запускать не-картинко-выводящие приложения, то эмулятор вешается. Опять же по предположению эмулятор ожидает какого-либо ввода с клавиатуры, например выбора пункта меню, а так как вывод на экран сейчас производится только после завершения программы, то эмулятор продолжает ждать вечно.
2
|
|
|
1080 / 1007 / 107
Регистрация: 28.02.2010
Сообщений: 2,889
|
||
| 12.08.2010, 06:47 | ||
Сообщение было отмечено как решение
Решение
Ого. Мне кажется есть недочеты.
1. Нажимаю на View ничего не появляется (Раз убрали возможность изменения размера точки думаю лучше убрать). 2. Запустил. File->Open->IBM Logo.c8. Далее лучше расширить экран, чтобы увидеть весь рисунок (см. вложение). 3. Думаю отступов между точками не должно быть.
Насчет расчета размера точки (первое что пришло в голову). Для начала. Ограничим изменение размера окна так, чтобы минимальная область, где все рисуется, имела параметры 64x32 (Если будет очень мелко можно повысить). Далее нужно сделать так, чтобы окно изменяла размер "только по диагонали". Насчет длины стороны квадратика (отвечающую за точку) думаю без меня ясно как вычислять - длина области / 64 либо длина высоты / 32 (целочисленное деление). Это немного смущает, но нужно попробовать на практике. Если действительно выглядит некрасиво то придумать че-нить другое. Кстати в том SVN библиотеки как отдельный архив может быть поставишь?
3
|
||
|
|
|||
| 12.08.2010, 06:59 | |||
![]() Почти обо всех перечисленных мы в курсе, но спасибо Вам за бдительность! ![]() По поводу того, что необходимо расширить экран, чтобы увидеть полноценное лого. Честно, говоря, я просто забыл уменьшить размер одного пиксела по умолчанию. Интерфейс-интерфейсом, однако сейчас считаю наиболее приоритетной задачей - это обеспечить правильность работы эмулятора, а не его внешнего вида. Еще раз спасибо Вам за внимание к этому топику. Я так распределил файлы из соображений, что кому библиотеки не нужны и из исходников соберет, а библиотеки в архив, потому что как-то нелогично саму программу и компоненты, обспечивающие работоспособность программы, ложить в разных местах.
1
|
|||
|
|
|
| 13.08.2010, 02:07 | |
|
Привертел миленькую виртуальную клавиатурку
![]() Она наполнена багами, неизвестного мне происхождения, но благодаря ей, наконец-то удалось проработать логику работы с клавиатурой вообще. Теперь можно расширять до любого абстрактного устройства с 16-ю кнопками. Для вызова виртуальной клавиатуры добавил в меню "Emulator" пункт "Virtual Keyboard".
2
|
|
|
|
|
| 13.08.2010, 07:53 | |
|
Очередное утреннее обновление
![]() Прикрепил два дополнительных независимых потока: - первый отвечает за сам эмулятор, то есть чтение опкодов и манипуляции с памятью лежат на его плечах; - второй же отвечает за отрисовку содержимого видеопамяти на дисплее утройства. Перерисовка экрана происходит 1 раз в секунду. Очевидная проблема в том, что такие потоки ужасно нагружают процессор, лично у меня хавает порядка 50%. Пока что не знаю, как это решать. Немного подправил работу с виртуальной клавиатурой. Однако же она все прячется при сворачивании главное окна, при восстановлении не появляется. Пока что сделал ее всегда поверх всех окон. Так во всяком случае ее хотя бы можно отключить. Наконец-то приучил эмулятор открывать файлы поочереди, правда для этого желательно после запуска первой программы нажать кнопочку "Stop" из меню "Emulator". Да. Из-за нагрузки на процессор программы опять же открывать не рекомендуется. Учитывая мой первый опыт я мог что-то накосячить с потоками, мало ли какие ошибки посыпятся, но у себя вроде не замечал. В общем все. Опять приведу ссылки на новые версии: Библиотеки, необходимые для запуска .EXE файл программы и пара примеров Исходники
1
|
|
|
1080 / 1007 / 107
Регистрация: 28.02.2010
Сообщений: 2,889
|
|
| 13.08.2010, 08:18 | |
|
Так у нас дела очень серьезные... См. вложение.
Все проблемы связаны с запуском Chip8 emulator Logo [Garstyciuks].c8 Если я скомпилирую исходники и запущу этот файл появляется bug1.gif. Если я возмьму скомпилированую прогу и запущу этот файл появляется bug2.gif. Нажимаю на OK появляется bug3.gif. С IBM Logo все нормально в обеих случаях. Исходники скопировал (svn выдал revision 9) попробую разобраться. Моя ОС: WinXP SP3 Original
1
|
|
|
|
||||||||||||
| 13.08.2010, 09:10 | ||||||||||||
|
Добавлено через 46 минут начал просматривать исходники, нашел глупую ошибку, но врядли она имеет отношение к тем багам, что вы показали. просто клавиатура оказывалась бесполезной. файл keyboard.cpp 66 строка: правильно сравнивать
0
|
||||||||||||
|
1080 / 1007 / 107
Регистрация: 28.02.2010
Сообщений: 2,889
|
|
| 13.08.2010, 12:36 | |
Сообщение было отмечено как решение
Решение
Те баги, которые у меня появлялись я так и не смог исправить
![]() Но мне кажется, что собака зарыта в функции ExecuteOpcodeD (chip8.cpp). Теперь предложу свою поправку (см. вложение). 1. Убрал интервал обновления экрана (на мой взгляд это логичнее); 2. Поправил функцию рисования точек. Теперь где нули - там будут рисоваться черные точки, где 1 - белые. На мой взгляд так правильнее. К примеру возьмем анимацию, где точка идет по траектории прямоугольника. Если эту часть кода оставить без изменений, то после 1 круга эту точку не будет видно. Будет виден сам прямоугольник. Теперь насчет оформление кода. 1. Функции процессора CHIP8 на мой взгляд должны находится в файле cpu.cpp; 2. Я посмотрел на некоторые исходники OpenSource программ и увидел, там табуляция либо с 4 пробелами либо как символ №9 из ASCII таблицы. В быту я использую символ №9, т.к. на мой взгляд этот символ для этого и предназначали. Может быть все поправим табуляцию в исходниках? Это можно сделать автоматически. Скачайте http://www.nodesoft.com/search... fault.aspx и замените 3 пробела на "символ №9" (ALT+009). 3. Может быть оформим видеопамять как двухмерный массив? Так удобнее и логичнее. Теперь насчет SVN. Думаю лучше создать каталог branches рядом с tags и trunc, чтобы пользователи могли оставлять свои ревизии исходников.
3
|
|
|
1080 / 1007 / 107
Регистрация: 28.02.2010
Сообщений: 2,889
|
|
| 13.08.2010, 13:03 | |
|
Кстати насчет вывода на экран. Может быть прямо из ExecuteOpcodeD вызывать процедуру рисования точки на экран?
0
|
|
|
1080 / 1007 / 107
Регистрация: 28.02.2010
Сообщений: 2,889
|
||||||
| 13.08.2010, 17:27 | ||||||
|
Думаю, что нашел источник багов у себя.
Смотрим, что я добавил в коде:
Результаты вложил.
2
|
||||||
|
|
|||||||||
| 13.08.2010, 20:48 | |||||||||
|
Просто добавил его только с утра. ![]() Добавлено через 2 часа 56 минут Почитав опкоды этого файла (заставки chip-8) обнаружил опкоды, которые отсутствуют в таблице, наверное эта программа для одной из модификаций приставки с увеличенным количеством памяти.
0
|
|||||||||
|
1080 / 1007 / 107
Регистрация: 28.02.2010
Сообщений: 2,889
|
||
| 13.08.2010, 21:12 | ||
|
Если эта таблице не из википедии и если не трудно, поделитесь ссылкой.
0
|
||
|
|
||
| 13.08.2010, 21:40 | ||
|
Если же открыть файл логотипа CHIP8 и просмотреть его в HEX виде, то там можно найти такие опкоды EA02, FA02... которые не попадают ни под один из таблиц.
0
|
||
|
1080 / 1007 / 107
Регистрация: 28.02.2010
Сообщений: 2,889
|
|
| 13.08.2010, 22:42 | |
|
Ну... На мой взгляд эти опкоды лучше просто игнорировать. Если в дальнейшем игрушки будут криво играться может быть вернемся к этому вопросу.
0
|
|
|
|
||
| 13.08.2010, 22:47 | ||
|
0
|
||
|
1080 / 1007 / 107
Регистрация: 28.02.2010
Сообщений: 2,889
|
|
| 13.08.2010, 22:51 | |
|
0
|
|
| 13.08.2010, 22:51 | |
|
Эмулятор клавиатуры Эмулятор трёхадресной машины. Эмулятор Вебки под Seven Реализовать эмулятор командной строки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version
1. 2003 - 06 - Designing Virtual Worlds (1st Edition)
Автор: Richard A. Bartle | Объем: 768 стр.
Ссылки: Amazon
. . .
|
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
|
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы.
Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
|
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version
Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
|
|
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров".
Задача:
Запрет инициалов.
Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
|
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . .
Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
|
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг.
Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует.
В процессе разработки. . .
|
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
|