|
Advanced MicroMachine (часть 3), Портирован эмулятор Nintendo GameBoy |
|
|
|
Nov 2 2008, 00:19
|
Участник

Группа: Участник
Сообщений: 47
Регистрация: 22-04-08
Пользователь №: 36 986

|
Приглашаю посетить ресурс: http://gamebox.uraldev.ru/forum/viewtopic....=5&p=13#p13кратко: на свой девайс (ARM9) портировал эмулятор популярной во всём мире карманной игровой приставки! Фотки, ссылки на видеоролики там же. Готов выслушать предложения, вопросы, критику, пожелания.
|
|
|
|
|
 |
Ответов
|
Nov 8 2008, 03:32
|
Участник

Группа: Участник
Сообщений: 47
Регистрация: 22-04-08
Пользователь №: 36 986

|
Код эмуляции Z80 взят из cingb029. Он чисто на Си. Не хочу обламывать, но имхо АРМ7 не хватит- у АРМ9 уже близко к пределу. Может потому что на асме не оптимизировано. х.з.
Дубль два по вопросу о быстром контроллере.
|
|
|
|
|
Nov 8 2008, 11:28
|
Гуру
     
Группа: Свой
Сообщений: 3 439
Регистрация: 29-12-04
Пользователь №: 1 741

|
Цитата(Glucik @ Nov 8 2008, 06:32)  Код эмуляции Z80 взят из cingb029. Он чисто на Си. Не хочу обламывать, но имхо АРМ7 не хватит- у АРМ9 уже близко к пределу. Может потому что на асме не оптимизировано. х.з. Спасибо, посмотрел эмулятор. Может ,как опытный в эмуляторостроении, подскажете- у меня есть задача модернизировать старинную систему, у которой процессор-z80. Система имеет кучу плат ввода-вывода и еще больше плат с памятью (на анлогах РФ1). Хочется вынуть родной Z80, вместо него вставить мелкую платку на LPC2148 (нужен быстрый интерфейс к компу и отладчик), в нем крутится эмулятор Z80 и в памяти хранится дамп прошивки прибора. Из-за этого внешняя шина освобождается только на операции обращения к портам. Такая система реализуема? Требуется сохранить тайминги как и на реальном Z80. По поводу быстрого эмулятора. В проекте gngeo есть модуль drz80 - эмулятор Z80 написнный на армовском ассемблере. Пока еще не разбирался с ним, но может инфа пригодиться.
|
|
|
|
|
Nov 11 2008, 18:52
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Команды z80 контроллер на LPC проэмулирует пожалуй быстрее чем они выполнялись на 8 МГц Z80. Но шинную активность ARM воспроизвести не сможет. Т.е. при эмуляции он безнадежно отстанет. И если в оригинальной проге есть зажержки включающие циклы на внешней шине, то здесь будет облом. Облом вообще будет поскольку сравнять скорость эмулятора и оригинала в проекте cingb нет никаких средств. Хотя поскольку тики Z80 там считаютcя, то можно было бы наверно по какому либо таймеру на промежутках по 10 мкс прецизионно тормозить эмулятор. Цитата(khach @ Nov 8 2008, 15:58)  Спасибо, посмотрел эмулятор. Может ,как опытный в эмуляторостроении, подскажете- у меня есть задача модернизировать старинную систему, у которой процессор-z80. Система имеет кучу плат ввода-вывода и еще больше плат с памятью (на анлогах РФ1). Хочется вынуть родной Z80, вместо него вставить мелкую платку на LPC2148 (нужен быстрый интерфейс к компу и отладчик), в нем крутится эмулятор Z80 и в памяти хранится дамп прошивки прибора. Из-за этого внешняя шина освобождается только на операции обращения к портам. Такая система реализуема? Требуется сохранить тайминги как и на реальном Z80. По поводу быстрого эмулятора. В проекте gngeo есть модуль drz80 - эмулятор Z80 написнный на армовском ассемблере. Пока еще не разбирался с ним, но может инфа пригодиться. Проектик да, впечатляет своей, так скажем, прямолинейной простотой. Портируется на ARM за час максимум. (По крайней мере у меня вышло так) Надо выкинуть пару DOS-овских функций прямого обращения к портам и еще кое какую лишнюю инициализацию. А правда в том, что на RTOS его портировать было бы гораздо проще и естественней. Поскольку этот эмулятор весь базируется на сервисах POSIX файловой системы, то скажем на той же ARTX прект даже не надо вычищать от файловых операций, как это пришлось скорее всего делать в вашем случае. Что касается LCD, то как видно в эмуляторе там просто делается периодический вывод в некий экранный буфер. Задача портирования была просто по прерываниям это буфер пересылать на LCD. Это работы еще на час. Итого цена портирования - 2 часа. Ну, спасибо. Обязательно применю этот проектик как демку в своих платформах. Остался только вопрос где сами игры достать. Не подскажете? Цитата(Glucik @ Nov 7 2008, 10:12)  Ога  И ОРТОДОКС вдобавок, млин... Ведь работает всё БЕЗ ОПЕРАЦИОННОЙ СИСТЕМЫ Напрямую с камешком... 
|
|
|
|
|
Nov 12 2008, 03:57
|
Участник

Группа: Участник
Сообщений: 47
Регистрация: 22-04-08
Пользователь №: 36 986

|
Цитата(AlexandrY @ Nov 11 2008, 21:52)  Ну, спасибо. Обязательно применю этот проектик как демку в своих платформах. Остался только вопрос где сами игры достать. Не подскажете? хттп://emu-russia.нет/ru/скачать/ромы/Nintendo-GameBoy-Color/0-Z/ хттп://emu-russia.нет/ru/скачать/ромы/Nintendo-GameBoy/0-Z/ В общем Google рулит  Цитата(AlexandrY @ Nov 11 2008, 21:52)  Что касается LCD, то как видно в эмуляторе там просто делается периодический вывод в некий экранный буфер. Задача портирования была просто по прерываниям это буфер пересылать на LCD. Можете, по-подробнее расписать, как вы видите портирование эмулятора cingb. Интересует в частности алгоритм всего эмулятора, а именно по части : 'Z80', железа и экранного буфера. Интересно услышать другие(не свои) мысли по данной теме! В gameboy.c есть такой фрагмент: Код /* video update */ lcdclks-=Z80_TICKS; if (LCDC & 0x80) { /* if lcd on */ if (lcdclks<0) { lcdphase++; if (lcdphase==3) { if ((LY>142)&&(LY<153)) { lcdclks=GB_VCLKS[3];lcdphase--; hdma_update(); if ((STAT&3)!=1) { /* v-blank */ STAT=(STAT&0xFC)|1;vblankoccured=1; vblankdelay=GB_VBLANKDELAYCLKS; } else { if (LY==148) drawscreen(); } } else { Интересует вот такое условие: if (LY==148) drawscreen();Тоесть если я прально понял, что как только счетчик координат по Y достиг значения 144 (т.е. весь буфер отрисован), то перекинуть буфер на экран. Вы же говорите, что можно на прерывание повешать. Вот интересно узнать - как можно? В самом эмуляторе используется только клавиатурное прерывание и всё. Весь цикл эмуляции в основной программе: Код Z80_HALTED=0; breakpoint=-1; lastbreakpoint=-1;skipover=0;db_trace=0; err=0; while (!err) { if (!Z80_HALTED) { err=ExecOpcode(); } /* update registers & interrupt processing */ gameboyspecifics(); } А синхронизация там достигается ожиданием обратного хода луча по кадру (60Гц), поэтому на быстрых ПК оно будет одинаково работать(если мониторы гонят кадр с 60 Гц, есть и 70 :/ ) На АРМ9 бОльшую часть времени именно съедает эмуляция 'Z80' и железа. Лишь только на втором месте стоИт перерисовка LCD.
Сообщение отредактировал Glucik - Nov 12 2008, 04:00
|
|
|
|
|
Nov 12 2008, 21:03
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Я сказал про прерывание просто потому чтоб вас не напрягать лишним упоминанием RTOS Но по жизни там где стоит drawscreen я посылаю ивент в RTOS и останавливаюсь на семафоре. Ивент вызывает в другой задаче процесс перекодировки экранного буфера и пересылку DMA непосредственно в LCD. В этой же задаче проверяется насколько опередил сигнал завершения формирования кадра в симуляторе реальное время для заданной частоты кадров. На разницу времени инициализируется таймер RTOS который потом и снимет семафор на продолжение работы симулятора. Это позволит добиться прецизионной покадровой синхронизации. Сделано так потому что, я этот симулятор планирую просто как одну из задач работающих на платформе. Т.е. при желании смогу запустить несколько симуляторов геймбоев одновременно. Одновременно экран геймбоя могу отдавать как картинку в вебстранице встроенного сервера любому клиенту через интернет. В идеале на локалке даже позволить играть с этим симулятором через WEB броузер используя видеострим в MPEG4. Плохо, что мужик там ничего не смог сделать со звуком и ему не удалось портировать свой движок под Windows. Но я тут думаю доделать это используя известный симулятор на PC для uC/GUI Цитата(Glucik @ Nov 12 2008, 08:27)  Можете, по-подробнее расписать, как вы видите портирование эмулятора cingb. Интересует в частности алгоритм всего эмулятора, а именно по части : 'Z80', железа и экранного буфера.
Интересно услышать другие(не свои) мысли по данной теме!
Тоесть если я прально понял, что как только счетчик координат по Y достиг значения 144 (т.е. весь буфер отрисован), то перекинуть буфер на экран.
Вы же говорите, что можно на прерывание повешать. Вот интересно узнать - как можно?
А синхронизация там достигается ожиданием обратного хода луча по кадру (60Гц), поэтому на быстрых ПК оно будет одинаково работать(если мониторы гонят кадр с 60 Гц, есть и 70 :/ )
На АРМ9 бОльшую часть времени именно съедает эмуляция 'Z80' и железа. Лишь только на втором месте стоИт перерисовка LCD.
|
|
|
|
|
Nov 13 2008, 02:06
|
Участник

Группа: Участник
Сообщений: 47
Регистрация: 22-04-08
Пользователь №: 36 986

|
Цитата(AlexandrY @ Nov 13 2008, 00:03)  Я сказал про прерывание просто потому чтоб вас не напрягать лишним упоминанием RTOS  Ничего страшного! Получилось, что я сам написал некое подобие ОСи. Только не real-time  Цитата(AlexandrY @ Nov 13 2008, 00:03)  Но по жизни там где стоит drawscreen я посылаю ивент в RTOS и... Спасибо за ответ! Цитата(AlexandrY @ Nov 13 2008, 00:03)  Плохо, что мужик там ничего не смог сделать со звуком и ему не удалось портировать свой движок под Windows. Но я тут думаю доделать это используя известный симулятор на PC для uC/GUI Звуковой движок брал из gnuboy 1.0.3 - отлично имплантируется в cingb  Кроме этого, сохр./восст. машины тоже самому нужно обдумать.
|
|
|
|
|
Nov 13 2008, 14:17
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Ну вот, портировал на Windows под движок симулятора uC/GUI в среде Visual Studio 2008 Но нет под рукой простенькой тестовой проги. То, что скачал на угад пытается выводить изображение за пределы видеобуфера симулируемого геймбоя. Не подкинете ли заведомо рабочую прогу для проекта cingb? Прект весть выложу когда заработает. Цитата(Glucik @ Nov 13 2008, 06:36)  Ничего страшного! Получилось, что я сам написал некое подобие ОСи. Только не real-time  Спасибо за ответ! Звуковой движок брал из gnuboy 1.0.3 - отлично имплантируется в cingb  Кроме этого, сохр./восст. машины тоже самому нужно обдумать.
|
|
|
|
Сообщений в этой теме
Glucik Advanced MicroMachine (часть 3) Nov 2 2008, 00:19 zksystem Цитата(Glucik @ Nov 2 2008, 03:19) Пригла... Nov 6 2008, 09:16 Glucik Цитата(zksystem @ Nov 6 2008, 12:16) Эмул... Nov 7 2008, 05:42  zksystem Цитата(Glucik @ Nov 7 2008, 08:42) Ога
И... Nov 7 2008, 14:53   Glucik Цитата(zksystem @ Nov 7 2008, 17:53) Game... Nov 7 2008, 21:16    vik0 Цитата(Glucik @ Nov 7 2008, 23:16) какие ... Nov 8 2008, 17:12 afad Силён! Почти как у китайцев: http://media.mabi... Nov 7 2008, 14:05 Glucik Цитата(afad @ Nov 7 2008, 17:05) Силён... Nov 8 2008, 23:48  AVR Цитата(Glucik @ Nov 9 2008, 03:48) так ка... Nov 11 2008, 07:58   haker_fox Цитата(AVR @ Nov 11 2008, 15:58) Конечно ... Nov 11 2008, 08:19   Glucik Цитата(AVR @ Nov 11 2008, 10:58) Вы испол... Nov 12 2008, 06:02    AVR Цитата(Glucik @ Nov 12 2008, 10:02) Никак... Nov 12 2008, 08:13 khach А можете поделится кодом эмулятора Z80 на АРМе? И ... Nov 7 2008, 23:47 MrYuran Цитата(khach @ Nov 8 2008, 02:47) А может... Nov 11 2008, 08:10  LordVader Цитата(khach @ Nov 8 2008, 14:28) Хочется... Nov 11 2008, 09:53   vik0 Цитата(LordVader @ Nov 11 2008, 11:53) Дл... Nov 11 2008, 10:09    LordVader Цитата(vik0 @ Nov 11 2008, 13:09) Тогда м... Nov 11 2008, 10:13   khach Цитата(LordVader @ Nov 11 2008, 12:53) Дл... Nov 11 2008, 12:21    LordVader Цитата(khach @ Nov 11 2008, 15:21) Так и ... Nov 11 2008, 16:17      AVR Цитата(Glucik @ Nov 13 2008, 05:06) Ничег... Nov 13 2008, 08:33       Glucik Цитата(AVR @ Nov 13 2008, 11:33) А можно ... Nov 14 2008, 02:45        AlexandrY Тут согласен.
Показатель уровня - это не юзанье RT... Nov 14 2008, 06:12        AlexandrY Ну что, не все так гладко.
Этот симулятор с больш... Nov 14 2008, 17:03 Glucik AlexandrY, напишите здесь хотя бы три названия ROM... Nov 14 2008, 22:24 AlexandrY 10-PIN BOWLVP
DA!DA!DA! TBDO
MIRACLE O... Nov 15 2008, 15:32 Glucik ну что я хочу сказать...
может оно и будет часть и... Nov 17 2008, 02:48 Glucik Портирован эмулятор NES !!!
Подробне... Dec 1 2008, 09:10
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|