|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|||||||||||||||||||||
Эмулятор CHIP-810.08.2010, 06:34. Показов 16942. Ответов 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 Реализовать эмулятор командной строки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
GitDOS: Когда я решил скрестить MS-DOS, GitHub и Claude
MaGz GoLd 08.07.2026
Привет, Киберфорум! Хочу поделиться своим проектом, который, надеюсь, вас заинтересует. GitDOS — это веб-приложение, которое позволяет запускать DOS в браузере с тремя крутыми фичами: диски живут в. . .
|
Учебный мини "цифровой двойник" = (Сервер = Java + Flask_питон )+(3D = Гугловскаая 4T nvideo + google colab) +( WMS = Odoo на Docker)
anaschu 07.07.2026
Увидел в требованиях к вакансии создателя имитационных моделей связку (REst + Api + WMS + Anylogic + питон + 3D Nvideo), и решил посмотреть, что это такое. Из этого всего я работал более менее. . .
|
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал.
Оно само - говорит.
Кто слышит тот слышит.
|
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было
ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась.
Первый вариант. . .
|
|
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2.
Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
|
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS
Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
|