|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|||||||||||||||||||||
Эмулятор CHIP-810.08.2010, 06:34. Показов 18128. Ответов 90
Метки нет (Все метки)
Мы с fasked написали простенький эмулятор для платформы CHIP-8.
CHIP-8 Остались вопросы по графике и клавиатуре. Если кто знает как реализовать - помогите, пожалуйста. Так же приглашаем для участия в доработке этого проекта, а так же следующих проектах всех, кто желает учиться и трудиться. Кому интересна работа эмулятора все вопросы к fasked) Полный проект в прикрепленном архиве в сообщении ниже CHIP8
types.h
chip-8.h
chip8.cpp
main.cpp
0
|
|||||||||||||||||||||
| 10.08.2010, 06:34 | |
|
Ответы с готовыми решениями:
90
Эмулятор. На С, С++ Эмулятор телефона. С++ Эмулятор мышки |
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 13.08.2010, 22:52 [ТС] | |
|
1
|
|
|
1080 / 1007 / 107
Регистрация: 28.02.2010
Сообщений: 2,889
|
|
| 13.08.2010, 22:53 | |
|
Понял.
0
|
|
|
|
|
| 20.08.2010, 12:32 | |
|
У нас был очень большой перерыв
![]() Сейчас появилось небольшое обновление, которое, я надеюсь, все таки поможет отыскать все ошибки в логике работы. SVN пока что не обновляю, ибо это дополнение не прикручено целиком к коду. Также расставил по всему коду операторы контроля. Может быть это спасет от таких глупых поисков ошибок, как случилось с опкодом отрисовки спрайта в видеопамять. Ошибка, конечно, так и не была решена, но найти причину того, что программа падала получилось не сразу, а это явный минус.
0
|
|
|
1080 / 1007 / 107
Регистрация: 28.02.2010
Сообщений: 2,889
|
||
| 20.08.2010, 12:47 | ||
|
Ого... Отладчик... Отличная идея. Насчет интерфейса хотел бы предложите свою идею (См. вложение). Но не в точности как на рисунке (т.к. как реализовать без понятия), а близко. Надо бы еще реализовать брейкпоинты и все такое, что есть в обычном отладчике. Кстати правильнее писать Debugger (с двумя g).
1
|
||
|
|
||||||||||||||||||
| 20.08.2010, 13:38 | ||||||||||||||||||
Правда я пока тоже без понятия как можно реализовать, но подумать надо. Спасибо, поправил.Добавлено через 45 минут Ну вот уже и первый результат присутствия отладчика появился А ведь прошло совсем ничего.Немного сейчас упаду в принцип работы самой приставки, чтобы объяснить баг. Для примера взял тот самый проблемный файл с логотипом приставки (Chip8 emulator Logo [Garstyciuks].c8). Разрешение экрана у приставки 64х32. Обработка опкода с маской DXYN отвечает за отрисовку спрайта в видеопамять. Координаты спрайта хранятся в регистрах V. Номера регистров берутся из опкода: VX - горизонтальная, VY соответственно вертикальная координата. В младших 4 битах передается высота спрайта. Ширина всегда 8 пикселов. Соответственно, чтобы отрисовка происходила нормально значения в регистрах не должны превышать разрешение экрана. То есть 0x40 и 0x20. У нас же получалось так, что значения приходили намного большие. Проблема, как оказалось, крылась в немного неверной обработки опкодов 1NNN (переход по адресу NNN) и 2NNN (вызов процедуры по адресу NNN). Раньше переход на соответствующий адрес осуществлялся следующим образом:
Мы не смогли заподозрить очевидного. После каждой обработки опкода счетчик PC увеличивается на два значения и полученный адрес просто напросто пропускался. В программе "логотипа" по этому адресу как раз находилась операция обнуления регистров VX. То есть на языке Си этот участок программы можно было бы записать следующим образом:
![]() Проблема решилась очень просто. Во всяком случае ассерты контролирующие вылет за пределы видеопамяти у меня больше не вылетают на этой программке.
![]() Очень оригинальное завершение у этой программы Автор просто сделал вечный цикл. Опкод "прыжка" на адрес переходит на самого же себя.
2
|
||||||||||||||||||
|
1080 / 1007 / 107
Регистрация: 28.02.2010
Сообщений: 2,889
|
|
| 20.08.2010, 14:17 | |
|
Только что поправил функции ExecuteOpcode1 и ExecuteOpcode2 (ревизия №10). Вот как выглядит наш результат:
2
|
|
| 20.08.2010, 15:15 | |
|
Не по теме: Фига себе...новички...
0
|
|
|
638 / 499 / 77
Регистрация: 28.07.2010
Сообщений: 895
|
|
| 21.08.2010, 11:46 | |
|
Есть небольшая идея по поводу проекта. Вы говорили что Вам приходиться опкоды вручную забивать, может стоит написать ассемблер для этих целей.
0
|
|
|
|
|
| 21.08.2010, 14:44 | |
|
Обновились до 0.0.4dev (Revision 12).
Код интерфейса перевел в соответствующие файлы *.ui. Подумал, что так будет проще вносить изменения в интерфейс. А "рабочий" код легче просматривается, когда не загроможден элементами интерфейса. Это я понял, когда пытался вручную создать форму отладчика ![]() В архив с приложением добавил еще одну программку. Судя по названию это игра про НЛО. Программка также падает при попытке отрисовать спрайты за пределами экрана. Но запускается и заметна какая-то анимация. Весь код претерпел некоторые изменения. Когда просматривал код в поисках ошибок решил без копипаста переписать некоторые моменты, поэтому названия функций отличаются, расположены по файлам теперь иначе. Запущенные потоки приостанавливаются при работе. Потому что они занимают ЦП настолько, что основная форма неполностью отрисовывается. И эмулятор иногда от этого падает. Пара скриншотов прилагается. На первом крестики-нолики, на втором UFO + debugger.
1
|
|
|
638 / 499 / 77
Регистрация: 28.07.2010
Сообщений: 895
|
||
| 21.08.2010, 17:31 | ||
|
0
|
||
| 21.08.2010, 19:08 [ТС] | |
|
Не по теме: fasked, Ты молодец, Саш. Красота!
1
|
|
|
1080 / 1007 / 107
Регистрация: 28.02.2010
Сообщений: 2,889
|
||||||||||||
| 21.08.2010, 19:57 | ||||||||||||
|
Только что заново прочитал о графике из справочника от Девида Винтера. И нашел то, что не учли:
Предлагаю на 265 и 266 вместо ассертов вставить это:
2
|
||||||||||||
|
638 / 499 / 77
Регистрация: 28.07.2010
Сообщений: 895
|
||
| 21.08.2010, 19:59 | ||
|
Уже есть вопрос по поводу ассемблера. Итак, что делают эти инструкции(на вики не очень доходчиво написано, и а англ. у меня не очень):
0
|
||
|
1080 / 1007 / 107
Регистрация: 28.02.2010
Сообщений: 2,889
|
||||||||||||
| 21.08.2010, 20:55 | ||||||||||||
|
Теперь насчет обработки опкода FX29.
Судя по этому из 339 строки cpu.cpp (ревизия 12):
Я поправил вот так:
0
|
||||||||||||
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 21.08.2010, 21:08 [ТС] | |
|
Alex Sabaka,
8XY4 Adds VY to VX. VF is set to 1 when there's a carry, and to 0 when there isn't. - Прибавляем значение регистра Y к значению регистра X. Если переполнение, то есть сумма больше 0xFF - в регистр F записывается 1, иначе 0. 8XY5 VY is subtracted from VX. VF is set to 0 when there's a borrow, and 1 when there isn't. - Вычитаем значение регистра Y из значение регистра X, если разность больше 0xFF - в регистр записывается 1, иначе 0. 8XY6 Shifts VX right by one. VF is set to the value of the least significant bit of VX before the shift. - Сдвигаем значение регистра X вправо на один. VF - наименьший значащий бит регистра X ДО сдвига. 8XY7 Sets VX to VY minus VX. VF is set to 0 when there's a borrow, and 1 when there isn't. - Значение регистра X становится равным значение регистра Y минус значение регистра X. Если переполнение VF - один, иначе 0. 8XYE Shifts VX left by one. VF is set to the value of the most significant bit of VX before the shift. - Сдвигаем значение регистра X влево на один. VF - наибольший значащий бит из регистра X ДО сдвига. 0NNN Calls RCA 1802 program at address NNN. - Вызывает какую-то программу. Насколько я понимаю самого процессора или чипа этого компьютера. Вроде как не реализовано. ANNN Sets I to the address NNN. - I становится равным адресу NNN. FX07 Sets VX to the value of the delay timer. - Таймер задержки равен значению регистра X.(?) FX0A A key press is awaited, and then stored in VX. - Ждем нажатия клавиши после чего записываем значение в регистр X. FX15 Sets the delay timer to VX. - Значение регистра X=значение таймера задержки. FX18 Sets the sound timer to VX. - Значение регистра X=значение таймера звука. FX1E Adds VX to I. VF is set to 1 when range overflow (I+VX>0xFFF), and 0 when there isn't. Прибавляем значение регистра X к I. VF - 1 при переполнении, 1+VX>0xFFF, иначе 0. Далее - затрудняюсь. Да и это не совсем уверен. Что вспомнил - то написал
0
|
|
|
1080 / 1007 / 107
Регистрация: 28.02.2010
Сообщений: 2,889
|
|
| 22.08.2010, 16:17 | |
|
Tronix, так не интересно. Интереснее свою написать.
0
|
|
| 22.08.2010, 16:17 | |
|
Эмулятор клавиатуры Эмулятор трёхадресной машины. Эмулятор Вебки под Seven Реализовать эмулятор командной строки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы.
Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
|
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
|
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
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. А теперь человек произносит «мастдай» с усмешкой - и. . .
|