russian ROMhacking
[ Новые сообщения · Участники · Правила форума · Поиск ]
  • Страница 1 из 1
  • 1
Создаю эмулятор NES
xverizexДата: Суббота, 08.02.2025, 00:39 | Сообщение # 1
Рядовой
Группа: Проверенные
Сообщений: 9
Статус: Оффлайн


Видео на rutube

Реализовано обработка всех опкодов, но не уверен, что всё правильно работает. Хотя, игра играется, но вот спрайт рисуется не совсем корректно. Тестирую на игре Марио.
Прикрепления: 7036052.jpg (82.2 Kb)
 
TLTДата: Понедельник, 10.02.2025, 19:48 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 2389
Статус: Оффлайн
А за основу взят какой-то исходный код или прямо с нуля? Т.е. это форк?

Со спрайтом понятно что - проблемы с горизонтальным зеркалированием. Будь то адрес начала спрайта или построение персонажа из кусочков, отдельных спрайтов. Тут бы пригодился опыт разработчика игр на эту платформу.



Вот так.
 
xverizexДата: Суббота, 15.02.2025, 19:25 | Сообщение # 3
Рядовой
Группа: Проверенные
Сообщений: 9
Статус: Оффлайн
TLT, код с нуля. Недавно получилось справиться с коллизией. Вот теперь надо понять почему он рисует не так как надо. Я сравнивал с fceux, и там были другие координаты для второго марио, то-есть например у меня c4, а у него bc. Явно от чего-то зависит. Пока не решил проблему. Ещё не понял пока как правильно реализовать scanline, чтобы тайминги правильно ложились, лекарство не дает насладиться раздумыванием об этом, потом как лучше станет, подумаю. Например коллизия бралась из PPU, то-есть я об этом подумал, исправил кое-что и заработало.

Если реальный эмулятор работает исправно на моём нетбуке, то мой эмулятор выполняется медленно. Надо правильно расставить всю логику, ведь я хочу на arduino эту игру запустить, а там ещё меньше частота процессора.
 
xverizexДата: Суббота, 15.02.2025, 19:27 | Сообщение # 4
Рядовой
Группа: Проверенные
Сообщений: 9
Статус: Оффлайн
Вот видео как сейчас VkVideo
 
TLTДата: Суббота, 15.02.2025, 20:21 | Сообщение # 5
Генералиссимус
Группа: Администраторы
Сообщений: 2389
Статус: Оффлайн
xverizex, палитры лучше использовать готовые, типа как было от эмулятора Virtua NES 2 - он в опциях позволяет отредактировать и сохранить/загрузить файлы .pal - я к тому, что лучше не изобретать, а юзать общий принцип хранения палитр. Разберись с форматом, да и можно для игр в твой эмулятор импортировать. Не знаю по какому пути пойдешь - можно базу хранить даже.

Прикрепления: 5664636.png (108.6 Kb)



Вот так.
 
xverizexДата: Воскресенье, 16.02.2025, 09:01 | Сообщение # 6
Рядовой
Группа: Проверенные
Сообщений: 9
Статус: Оффлайн
TLT, палитры хранятся как надо. Я их взял из моего пиксельного редактора для рисования. Сам вручную с помощью пипетки каждый квадрат нажимал и узнавал цвет и переписывал в свою таблицу. Тут всё заработает, если я сделаю правильным отображения фона по палитре, но до этого не доходил, так как хотелось бы сначала с серьезными багами решить проблему.

Вот, если надо кому.
Код

static uint32_t colors_2c02[64] = {
  0x626262, // 00
  0xae2e00, // 01
  0xc32706, // 02
  0xae2447, // 03
  0x731d6b, // 04
  0x241679, // 05
  0x04186d, // 06
  0x052a4f, // 07
  0x09422b, // 08
  0x0e541f, // 09
  0x105921, // 0A
  0x28501c, // 0B
  0x743e07, // 0C
  0x000000, // 0D
  0x000000, // 0E
  0x000000, // 0F
  0xababab, // 10
  0xf96200, // 11
  0xf9473a, // 12
  0xf93e7c, // 13
  0xd13aaf, // 14
  0x6833c6, // 15
  0x0e3cbd, // 16
  0x125797, // 17
  0x1a7865, // 18
  0x219344, // 19
  0x249e41, // 1a
  0x49943b, // 1b
  0xb17d25, // 1c
  0x000000, // 1d
  0x000000, // 1e
  0x000000, // 1f
  0xffffff, // 20
  0xfbaf5e, // 21
  0xfa8c8a, // 22
  0xfa75c7, // 23
  0xfa6ef0, // 24
  0xcc6ff1, // 25
  0x5b7ff4, // 26
  0x28a0f2, // 27
  0x30c4c0, // 28
  0x38e192, // 29
  0x3fef76, // 2a
  0x86e967, // 2b
  0xf4d357, // 2c
  0x4e4e4e, // 2d
  0x000000, // 2e
  0x000000, // 2f
  0xffffff, // 30
  0xfde1bb, // 31
  0xfdd3cd, // 32
  0xfcc7e3, // 33
  0xfcc2f7, // 34
  0xf2c2f7, // 35
  0xc4c8f9, // 36
  0x9ed5fb, // 37
  0x89e4ea, // 38
  0x8af0d5, // 39
  0xa1f6c2, // 3a
  0xc6f6b7, // 3b
  0xf3eeb3, // 3c
  0xb8b8b8, // 3d
  0x000000, // 3e
  0x000000  // 3f
};
 
xverizexДата: Воскресенье, 16.02.2025, 09:02 | Сообщение # 7
Рядовой
Группа: Проверенные
Сообщений: 9
Статус: Оффлайн
У меня пока есть только палитра 2c02, но потом добавлю и все существующие.
 
xverizexДата: Четверг, 20.02.2025, 03:48 | Сообщение # 8
Рядовой
Группа: Проверенные
Сообщений: 9
Статус: Оффлайн
Удалось исправить баги. Теперь надо поработать над оптимизацией, ведь следующий этап запустить на arduino.

https://vkvideo.ru/playlist/583070625_4/video583070625_456239083
 
SegaMarkДата: Суббота, 15.03.2025, 09:49 | Сообщение # 9
Лейтенант
Группа: Проверенные
Сообщений: 45
Статус: Оффлайн
Скажи с чего ты начинал создание эмулятора, так как сам пытаюсь написать свой эмулятор, но не знаю с того ли я начал или нет
 
xverizexДата: Суббота, 15.03.2025, 10:31 | Сообщение # 10
Рядовой
Группа: Проверенные
Сообщений: 9
Статус: Оффлайн
SegaMark, я не спец в разработке эмуляторов, но выбрал то, что посчитал нужным, в первую очередь сделать эмуляцию опкодов. Да, первым делом я реализовал микропроцессор. Пришлось 4 дня работать над его написанием и отладкой, потом переписыванием и опять отладкой. В конце концов теперь процессор вроде работает как должен, хотя есть некоторые вопросы по кросс расчетам для циклов, я не везде их реализовал, это когда адрес назначения переходит границу байта 0x4 + 0xff, так называемые страницы.

Когда реализовал микропроцессор, то перешел к видео системе. Я взял самую простую игру, называется Марио, где всё происходит на одном экране, и начал делать видео систему. Пришлось изрядно повозиться, пока не заработало должным образом, параллельно исправляя баги микропроцессора. Когда реализовал видео систему для одного экрана и демо игра работала, то перешел к реализации обработки джойстика. Когда реализовал и эту работу, то перешел к другой игре Bomberman, над которой сейчас и работаю.
 
  • Страница 1 из 1
  • 1
Поиск: