|
|
  |
Эмуляция ARM на другом ARM - насколько проблематично?, О портировании GBA на мобильник... |
|
|
|
Feb 13 2009, 15:27
|
Группа: Новичок
Сообщений: 8
Регистрация: 13-02-09
Пользователь №: 44 813

|
Много уж у нас эмуляторов на Siemens сделано(NES, Sega GameGear/MasterSystem/Megadrive, Gameboy(color) и даже SNES), но вот больше всего интерисует консолька GameBoy Advanced. Игр много, да еще и каких! И самое главное - процессор той же архитектуры, но в 12 раз слабее чем на телефоне! Только вот попытка портирования VisualBoyAdvanced(не моя) не дала желаемого результата - эмулятор беспощадно пожирая больше 7 мегабайт опреративы выдавал с трудом около 1 fps  В итоге проект умер только появившись... Посмотрев исходники увидел кучу ненужного кода, т.к. оригинал эмулятора написан для x86 и процессор эмулируется целиком и полностью => есть возможности оптимизации переписав команды процессора и SWI-функции биоса на ассемблер(процессор-то и там, и там ARM => инструкции одинаковые), но те же графические режимы, клавиатуруру(про звук уж молчу) придется эмулировать, т.к. у нас дисплей работает только в графическом режиме 16бит(5-6-5), клавиатура опрашивается совсем по-другому... Еще предлагали ремапить память и дописать нужные функции в саму прошивку и запускать ромы уже без эмуляции, но тут тоже как минимум две сложности: найти инициализацию MMU в ~32mb бинарнике дизассемблером и добавить адресацию как в gba+дописать хуки на запуск SWI, но курить сотни мегабайт кода в дизассемблере - жуткая перспектива. Ну и непонятно как можно будет тогда тормозить выполнение кода... Так вот, вопрос собственно в том, возможно ли получить приемлемую скорость эмуляции в каким-нибудь образом? Может кто чего посоветует? Рассмотрю любые за и против, не откажусь от исходников эмуляторов сего девайса под арм, если таковые имеются. Код Железо GBA: CPU: ARM7TDMI 32bit RISC CPU, 16.78MHz BIOS ROM 16 KBytes Work RAM 288 KBytes (32K in-chip + 256K on-board) VRAM 96 KBytes OAM 1 KByte (128 OBJs 3x16bit, 32 OBJ-Rotation/Scalings 4x16bit) Palette RAM 1 KByte (256 BG colors, 256 OBJ colors) Display 240x160 pixels (2.9 inch TFT color LCD display) Gamepad 4 Direction Keys, 6 Buttons Код Телефон(BenQ-Siemens E71): CPU: SGOLD2(ARM926EJ-S) 208MHz RAM: можно очистить до ~9mb Display: 240x320 262 тысячи цветов, напрямую со ScreenBuffer можно работать только в 16bit 5-6-5 Gamepad: вся клавиатура телефона +возможность загружать бинарники напрямую процессором(elf скомпилированный IAR)
Сообщение отредактировал Ganster - Feb 13 2009, 15:31
|
|
|
|
|
Feb 13 2009, 16:36
|

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

|
Чет вы темните. Ни в какой мобиле код не занимает 32 метра. Там ресурсы в основном место занимают. IDA находит обращение к определенным регистам, а тем более к сопроцессору для инициализации MMU на раз-два. А всякие NES-ы, Gameboy-и тут какой-то любитель тож щелкает как семечки. Может вы плохо знаете набортную периферию SGOLD-а (таймера, PLL-ы, распределение клоков ) и пытаетесь симулировать без ее использования? Цитата(Ganster @ Feb 13 2009, 17:27)  Много уж у нас эмуляторов на Siemens сделано(NES, Sega Так вот, вопрос собственно в том, возможно ли получить приемлемую скорость эмуляции в каким-нибудь образом? Может кто чего посоветует? Рассмотрю любые за и против, не откажусь от исходников эмуляторов сего девайса под арм, если таковые имеются.
|
|
|
|
|
Feb 13 2009, 16:57
|
Группа: Новичок
Сообщений: 8
Регистрация: 13-02-09
Пользователь №: 44 813

|
Ну если точнее, то 20мб чистого кода, это без файловой системы, графики, ленгпака, и т.п. Сопроцессора кстати насколько я знаю в SGOLD нет. Насчет периферии - я написал что подход со стороны запуска рома напрямую мне как раз нравится меньше всего, т.к. заморочек там правда не огребешься. Я представляю себе эмулятор как некий интерпретатор, т.е. грузим из рома команду, вместо регистров подсовываем заранее подготовленные ячейки в памяти(не есть хорошо, но в данном случае лучше не сделать), меняем вызовы из адресного пространства железок на самописные функции-эмуляторы, и т.д. Вопрос как раз в том, будет ли эффективен такой подход? Хватит ли ресурсов процессора хоть в теории? Впринципе достаточно 15 кадров в секунду с правильным пропуском промежуточных кадров, т.к.дисплей у нас обновляется примерно с такой скоростью.
|
|
|
|
|
Feb 13 2009, 20:00
|
Местный
  
Группа: Свой
Сообщений: 443
Регистрация: 22-07-06
Из: Украина, г. Харьков
Пользователь №: 19 006

|
Есть готовый симулятор GBA для смартфонов на базе 9 симбиана. Там, вроде, все нормально работает. По крайней мере, когда я только купил свой смарт, и искал для него софт, мне попался сайт, где среди новостей софта для S60 смартов больше половины были образы игрух от GBA. Естественн там же был симулятор, и большая инструкция чего-куда. Судя по отзывам люди себе ставили, и у многих нормально работало. Однако себе не ставил, и адреса, естественно не помню. Так что можно поискать исходники того эмулятора, либо, если более интересен не процесс, а результат, купить себе смарт с 9-й симбой вместо сименса, и играться до упаду.
|
|
|
|
|
Feb 13 2009, 23:10
|
Группа: Новичок
Сообщений: 8
Регистрация: 13-02-09
Пользователь №: 44 813

|
Ну...менять телефон ради эмулятора практически равносильно тому, что менять linux на windows, потому что "там все уже настроено". Это не наши методы  А вот исходник эмулятора под symbian конечно правда был бы интересен, т.к.он говорят даже на обычных s60, которые послабее сименса будут, вполне играбелен. Но чудес не бывает - найти исходники софтины под симбу равносильно тому, что попросить у Microsoft сделать windows опенсорс...нету их, и не будет.  В данный момент меня интерисует профессиональная оценка "на глаз" возможно ли получить приемлимую скорость эмуляции одного на другом. Ну и насколько сумасшедшая идея с прямым запуском рома. Хотя на такие подвиги врятли меня хватит, на такое способен разве что Rst7 написавший elfloader на наши девайсы, да только врятли его игрушки заинтерисуют.
|
|
|
|
|
Feb 14 2009, 11:31
|
Местный
  
Группа: Свой
Сообщений: 443
Регистрация: 22-07-06
Из: Украина, г. Харьков
Пользователь №: 19 006

|
Цитата(Ganster @ Feb 14 2009, 01:10)  Ну...менять телефон ради эмулятора практически равносильно тому, что менять linux на windows, потому что "там все уже настроено". Это не наши методы  Прекрасно вас понимаю, сам таким был  . Сейчас однако смотрю на вещи иначе. Поменять телефон намного дешевле, чем потратить несколько месяцев на написание своего эмулятора. Результат работы вы врядли продадите, а телефон через пару лет и так придется менять. Будущее сименсов весьма туманно, неизвестно бдут ли их через несколько лкт вообщк производить. Хотя в виде хобби - конечно вполне... И опыта даст много. Если времени не жалко. Что касается принципиальной возможности - раз на симбе сделали, значит и семен потянет. Идея с прямым запуском рома вовсе не сумашедшая. По этому поводу стоит посмотреть принцип построения виртуальной машины на PC (vmware или другой). Здесь смысл вобщем-то тот же.
|
|
|
|
|
Feb 15 2009, 05:57
|
Группа: Новичок
Сообщений: 8
Регистрация: 13-02-09
Пользователь №: 44 813

|
Именно! Важен не результат, а сам процесс  Все-таки решено попытаться порыть в направлении прямого запуска... Но теперь возник вопрос как раз по части программирования, а не теоретических размышлений. Как все-таки переадресовать память(ну т.е. добавить свои виртуальные странички)? Знаю что можно делать это на лету, т.к. тот же armdebuger может "виртуально" патчить работающий телефон используя замещение страниц флеш. Только вот ковыряние кучи огромных доков по арм ничего не дало, везде пишут для чего эта адресация нужна, и как это круто, а вот как это дело на практике организовать не могу найти. Вот если кто-нибудь поделится примерчиком такой операции, или доками, где это точно будет описано - буду премного благодарен.
|
|
|
|
|
Feb 15 2009, 18:56
|
Местный
  
Группа: Свой
Сообщений: 443
Регистрация: 22-07-06
Из: Украина, г. Харьков
Пользователь №: 19 006

|
Цитата(Ganster @ Feb 15 2009, 07:57)  Как все-таки переадресовать память(ну т.е. добавить свои виртуальные странички)? Знаю что можно делать это на лету, т.к. тот же armdebuger может "виртуально" патчить работающий телефон используя замещение страниц флеш. Только вот ковыряние кучи огромных доков по арм ничего не дало, везде пишут для чего эта адресация нужна, и как это круто, а вот как это дело на практике организовать не могу найти. Вот если кто-нибудь поделится примерчиком такой операции, или доками, где это точно будет описано - буду премного благодарен.  Тут надо грызть доки по MMU. К сожалению я с 9-ми армами еще не работал, поэтому ничего толком подсказать не смогу. По идее MMU во всех ARM926EJ-S должны быть одинаковые, и, возможно, поможет документация и примеры к более распространенным процессорам данной архитектуры, от Atmel например. Впрочем я могу ошибаться. Надеюсь вам помогут "гуру" по 9-м армам, коих есть на этом форуме.
|
|
|
|
|
Feb 17 2009, 14:09
|
Группа: Новичок
Сообщений: 8
Регистрация: 13-02-09
Пользователь №: 44 813

|
Да нет, это как раз проще всего будет. Все что можно написать без использования всяких хитромудрых инструкций процессора, это сколько угодно Блин, какие же ужасные доки по арм'ам пишут, без 100грамм вобще ничего не понять %)
|
|
|
|
|
Feb 17 2009, 16:54
|

embedder
  
Группа: Свой
Сообщений: 264
Регистрация: 11-05-05
Из: Казань
Пользователь №: 4 911

|
Цитата(Ganster @ Feb 17 2009, 17:09)  Да нет, это как раз проще всего будет. Все что можно написать без использования всяких хитромудрых инструкций процессора, это сколько угодно Блин, какие же ужасные доки по арм'ам пишут, без 100грамм вобще ничего не понять %) а вы писали что-нибудь для GBA? Работали с его экраном, видеопроцессором? насколько мне известно, самая большая проблема всех эмуляторов - именно видео и звук. сходите на для начала на http://gbadev.org/docs.php , ознакомьтесь, GBA это игровая консоль, а не просто АРМ с экраном.
--------------------
Мечты стареют куда быстрее мечтателей… Стивен Кинг. "Ловец снов"
|
|
|
|
|
Feb 17 2009, 17:20
|
Группа: Новичок
Сообщений: 8
Регистрация: 13-02-09
Пользователь №: 44 813

|
Да читал я спецификации его! Ничего сложного нет, а звук мне не нужен. Тормоза как раз из-за сложности арм-процессора. В тех же исходниках VisualBoyAdvanced код эмуляции дисплея довольно мелкий и простой, а вот в самой эмуляции процессора идет огромный файл, где например банальная инструкция ldr расписана на пару страниц. Тем более вывод изображения у меня будет сделан довольно хитро...есть вобщем идеи в этом направлении, да и ресурсов остается вполне достаточно Главный вопрос стоит все-таки в том как ремапить память на лету(резервировать громадный кусок оперативы при включении не кошерно  ), в доке по процессору написано что можно заставить сопроцессор обновить таблицу релокаций без софт ресета, но вот описано оно там все жутко, я не уверен даже что она бы на русском была понятной)
|
|
|
|
|
Feb 17 2009, 17:51
|

embedder
  
Группа: Свой
Сообщений: 264
Регистрация: 11-05-05
Из: Казань
Пользователь №: 4 911

|
Цитата(Ganster @ Feb 17 2009, 20:20)  Да читал я спецификации его! Ничего сложного нет, а звук мне не нужен. Тормоза как раз из-за сложности арм-процессора. В тех же исходниках VisualBoyAdvanced код эмуляции дисплея довольно мелкий и простой, а вот в самой эмуляции процессора идет огромный файл, где например банальная инструкция ldr расписана на пару страниц. Тем более вывод изображения у меня будет сделан довольно хитро...есть вобщем идеи в этом направлении, да и ресурсов остается вполне достаточно Главный вопрос стоит все-таки в том как ремапить память на лету(резервировать громадный кусок оперативы при включении не кошерно  ), в доке по процессору написано что можно заставить сопроцессор обновить таблицу релокаций без софт ресета, но вот описано оно там все жутко, я не уверен даже что она бы на русском была понятной) Еще вопрос, эмулятор коммерческий? Там у GBA на ROM-BIOS бальшой копирайт стоит  p.s. Звук вам не нужен... а кому нафиг такой эмуль нужен? p.p.s. Может вам для начала сделать эмуль GameBoy Color? эмулятор Z80 вроде как проще будет сделать... p.p.p.s. По командам ARM - это к rst7, он гуру в этом  (и в z80 тоже)
--------------------
Мечты стареют куда быстрее мечтателей… Стивен Кинг. "Ловец снов"
|
|
|
|
|
Feb 18 2009, 11:31
|
Группа: Новичок
Сообщений: 8
Регистрация: 13-02-09
Пользователь №: 44 813

|
Цитата Еще вопрос, эмулятор коммерческий? Там у GBA на ROM-BIOS бальшой копирайт стоит  Да какая может быть коммерция на самодельной платформе? Тем более что сам же Rst7 как автор эльфлоадера наложил табу на коммерческие проекты  Цитата p.s. Звук вам не нужен... а кому нафиг такой эмуль нужен? Большинство эмуляторов консолей на мобильные устройства без звука из-за сложностей реализации и вообще отсутствии в нем необходимости как в таковом. Не вижу смысла в таких выражениях, к примеру марио без фоновой пищалки бегает так же :D Цитата p.p.s. Может вам для начала сделать эмуль GameBoy Color? эмулятор Z80 вроде как проще будет сделать... GameboyColor давно уже есть, шапку читаем, да и то что я делаю это не совсем эмулятор-то, в этом и сложность. Цитата p.p.p.s. По командам ARM - это к rst7, он гуру в этом (и в z80 тоже) Сам знаю, и с удовольствием бы обратился, но: 1) Как я уже сказал игрушки ему врятли интересны; 2) Он вообще не любитель отвечать на вопросы, похоже из-за активности "недопонимающих" после появления эльфлоадера
|
|
|
|
|
Sep 24 2009, 06:58
|
Частый гость
 
Группа: Участник
Сообщений: 118
Регистрация: 13-09-09
Пользователь №: 52 331

|
а что если... взять тотже AT91RM9200, настроить MMU так, чтобы адреса памяти и периферии транслировались на ARM'овские и через небольшой дешифратор адресов - а далее на памяти ROM, RAM и периферийники собственно (которые могут эмулироваться на FPGA или навороченном DSP)??? ну чем не идея?  перед этим небольшой бутлодер будет инициализировать сам ARM9 и заливать образ игры(ROM) в память ARMа? правда под сомнением два вопроса: прерывание внешних устройств и DMA-передачи из памяти в видеоконтроллер (или то что его эмулирует) GBA думается что DMA-запросы прийдется софтово эмулировать как внешнее прерывание ARM'а гуру, что скажете?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|