|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|||||||||||||||||||||
Эмулятор CHIP-810.08.2010, 06:34. Показов 17113. Ответов 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 Реализовать эмулятор командной строки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|