| Разработка и ромхакинг > Ромхакинг и программирование |
| Запуск и инициализация в эмуляторе Nintendo 64 |
| (1/2) > >> |
| smalcom:
Пытаюсь эмулировать N64. Застрял на одном месте - инициализация. Как делаю: бут-код картриджа(4032байта) копирую в SP_DMEM и начинаю оттуда выполнять, через несколько успешных команд появляется LW, результатом которой становится TLB refill exception тк процессор только запущен и TLB пустые. Копал mupen64, смотрю в доке по r4300 и r4000... непонятно. Подскажите как верно запускать код на N64 тс от включения питания - стартовый PC, значения регистров, есть ли нет стартовый загрузчик на самой приставке и тп |
| angrylion:
--- Цитата: smalcom от 15 Май 2009, 19:29:13 ---есть ли нет стартовый загрузчик на самой приставке --- Конец цитаты --- Pifrom он называется. Вот NTSC-U версия: http://www.crazynation.org/N64/files/pifdata.bin Стартовый PC - 0xBFC00000. Советую почитать исходники MAME/MESS. И вот это (впрочем это ты, может быть, читал): http://www.yntproject.net/docs/R4400_Uman_book_Ed2.pdf |
| smalcom:
спасибо, пробую. --- Цитата ---R4400 --- Конец цитаты --- да, это одна из двух книг, которыми пользуюсь. |
| angrylion:
Ты планируешь поддерживать систему плагинов по Zilmar's spec или будешь писать собственную эмуляцию RSP и RDP? |
| smalcom:
планирую делать без видео плагинов тк ориентируюсь только на OpenGL, но это не окончательный вердикт - время покажет. А вот звук и ввод скорей всего надо делать с плагинами. Но первую реализацию RSP, RDP все равно буду сам писать. ЗЫ. сейчас еще поищу, что из себя представляет эта система плагинов. ЗЗЫ. пишу на D - помимо эмуляции еще и новый язык приходится изучать. |
| angrylion:
--- Цитата: smalcom от 16 Май 2009, 01:24:15 ---Но первую реализацию RSP, RDP все равно буду сам писать. --- Конец цитаты --- Успехов. Сам работал немного над реализацией RDP. А у тебя будет HLE или LLE? |
| smalcom:
--- Цитата ---А у тебя будет HLE или LLE? --- Конец цитаты --- RDP будет HLE... RSP наверное будет дитем компромиссов. В любом случае буду стараться все возможные вычисления отдать OpenGL. Спасибки. Добавлено позже: посмотрел pifrom - команд TLBx не обнаружил. получается если я получил исключение то иду по адресу 0x800... или 0xbfc0..., но что там за код находится, если кроме бута картриджа ничего еще не отображено в память... чтото я упустил |
| smalcom:
смотрел исходники MAME... создается по умолчанию два элемента в TLB. пробую копировать 1-й мегабайт картриджа(0x001000 - 0x101000) в RDRAM начиная с адреса 0x200000, потом прыгаю туда. и все равно находятся интересные такие адреса которые дают TLB refill исключение. |
| angrylion:
--- Цитата: smalcom от 18 Май 2009, 02:09:08 ---смотрел исходники MAME... создается по умолчанию два элемента в TLB --- Конец цитаты --- Не могу найти... Не ткнёшь ли носом в это место в исходниках? Жалко в дебаггере MESS не посмотришь элементы tlb (по крайней мере, я не знаю, как)... |
| smalcom:
--- Код: --- /* load the fixed TLB range */ vtlb_load(mips->vtlb, 2 * MIPS3_TLB_ENTRIES + 0, (0xa0000000 - 0x80000000) >> MIPS3_MIN_PAGE_SHIFT, 0x80000000, 0x00000000 | VTLB_READ_ALLOWED | VTLB_WRITE_ALLOWED | VTLB_FETCH_ALLOWED | VTLB_FLAG_VALID); vtlb_load(mips->vtlb, 2 * MIPS3_TLB_ENTRIES + 1, (0xc0000000 - 0xa0000000) >> MIPS3_MIN_PAGE_SHIFT, 0xa0000000, 0x00000000 | VTLB_READ_ALLOWED | VTLB_WRITE_ALLOWED | VTLB_FETCH_ALLOWED | VTLB_FLAG_VALID); --- Конец кода --- вотб mips3com.c:160. |
| angrylion:
Разве это не (мелкий) хак в MAME? Во-первых, не нашёл нигде сведений про preset tlb entries. Во-вторых, в r4300 32 элемента, а не 48. В-третьих, There are virtual-to-physical address translations that occur outside of the TLB. For example, addresses in the kseg0 and kseg1 spaces are unmapped translations. In these spaces the physical address is derived by subtracting the base address of the space from the virtual address. С каким виртуальным адресом у тебя происходит tlb refill исключение? |
| smalcom:
--- Цитата ---Во-вторых, в r4300 32 элемента, а не 48 --- Конец цитаты --- ага, 48 в R3000, а нековский 4300i который в нинтендо порезан. --- Цитата ---Разве это не (мелкий) хак в MAME? Во-первых, не нашёл нигде сведений про preset tlb entries. --- Конец цитаты --- вот-вот. и я смотрю исходники эмулей и наблюдаю что для запуска всех ромов используются мелкие и нет хаки. вот собственно у меня и встала с этим проблема - хотелось все сделать без хаков. --- Цитата ---В-третьих, --- Конец цитаты --- да-да, часть режимами проца я реализовал и адреса конвертяца верно. сам TLB я упростил - без even,odd(в том же mupen можно наблюдать старый код с правильной работой железа TLB и более поздний оптимизированый алгоритм в котором выборка из TLB происходит следующим образом pfn = tlb[VPN], если pfn != 0, то страница верная) --- Цитата ---С каким виртуальным адресом у тебя происходит tlb refill исключение? --- Конец цитаты --- обычно когда в 0 обращается - RDRAM. я вот подумываю, а не добавить ли еще одну страницу в TLB... но это теоретически не верно. Раз оно лезет к 0 значит там чтото должно быть. Возможно я просто неверно точку входа выбираю, тк один из ромов обратился 0xA46... : видимо пошел запрос к ДМА на копировани части картриджа в RDRAM. Хочу еще mupen пересобрать в VS6(потому что в студии хотябы дебагер нормальный есть) |
| angrylion:
--- Цитата: smalcom от 18 Май 2009, 13:57:55 ---вот собственно у меня и встала с этим проблема - хотелось все сделать без хаков. --- Конец цитаты --- Однако ж, HLE один сплошной хак, по-моему. --- Цитата ---обычно когда в 0 обращается - RDRAM. я вот подумываю, а не добавить ли еще одну страницу в TLB... но это теоретически не верно. --- Конец цитаты --- Извини, если туплю, но что насчёт этого: When ERL = 1 in the Status register, the user address region becomes a 2^31-byte unmapped (that is, mapped directly to physical addresses) uncached address space. <...> The contents of this register are undefined after a reset, except for TS, which is zero; ERL and BEV, which are one... --- Цитата ---Возможно я просто неверно точку входа выбираю, тк один из ромов обратился 0xA46... : видимо пошел запрос к ДМА на копировани части картриджа в RDRAM. --- Конец цитаты --- А первоначальный DMA transfer и передачу управления на код не pifrom осуществляет (согласно п. 6.10 N64 Programming manual)? |
| smalcom:
--- Цитата ---А первоначальный DMA transfer и передачу управления на код не pifrom осуществляет --- Конец цитаты --- честно, по этой части не глянул. просто просмотрел не инициализирует ли он TLB. Сегодня разберу его подробней. --- Цитата ---When ERL = 1 in the Status register --- Конец цитаты --- хм. у меня со старта Kernel mode с чистыми ERL и BEV, и получается, что первые 2Гб мапятся через TLB. --- Цитата ---Однако ж, HLE один сплошной хак, по-моему. --- Конец цитаты --- согласен, но всеже интересно почему так, а не по другому, разобраться хочется. Добавлено позже: --- Цитата ---N64 Programming manual --- Конец цитаты --- опаньки, а как это я мимо него пролетел - листаю |
| angrylion:
--- Цитата ---согласен, но всеже интересно почему так, а не по другому, разобраться хочется. --- Конец цитаты --- Хм, поясни. Хочется разобраться, почему большинство эмуляторов используют HLE? Потому что быстрей на порядок. --- Цитата ---у меня со старта Kernel mode с чистыми ERL и BEV --- Конец цитаты --- В MAME/MESS ERL=1 на старте (SR=0x00400004) И в доках написано, что он 1 после ресета Почему тогда 0 на старте? |
| smalcom:
--- Цитата ---Хочется разобраться, почему большинство эмуляторов используют HLE? --- Конец цитаты --- не, это я понимаю. параллельно с реализацией HLE хочется разобраться как на самом деле работает консоль. --- Цитата ---Почему тогда 0 на старте? --- Конец цитаты --- очевидно, что я ошибся. |
| angrylion:
Вот тут кое-какие доки перечислены насчёт того как всё на самом деле :) http://forum.emu-russia.net/viewtopic.php?f=13&t=83#p4846 |
| smalcom:
ОФФ: я сейчас немного на работе, а вечером все обсуждение изолью в код |
| sergi:
dextrose.com всем поможет - там и демки и коды и сорсы и доки - все есть ;) собственно сам тоже хочу для N64 код писать ^_^ Вроде там типа OpenGL используется поэтому вроде несложно все это дело а так вообще интересен вопрос - можно ли портировать игры с DS на N64 ну без тач скрина разумеется, но векторную графику В частности кстати интересует эмуляция редких кансолей на N64, собственно она есть, но ограниченная Пример - эмулятор MSX от Марата Файзулина, сам он правда отказался это делать |
| angrylion:
Никакой OpenGL там не используется |
| Навигация |
| Главная страница сообщений |
| Следующая страница |