Я в процессе написания и отладки эмулятора процессора Hitachi SuperH-4. Насколько я знаю, процессор этой серии стоит в приставках Dreamcast. Он уже грузит Windows CE с имиджа ROM, переходит в виртуальный режим, запускает процессы. Собственно, насколько я понимаю, проблема уже в эмуляции устройств, хотя, конечно, могут быть еще и ошибки в реализации команд, виртуальной памяти, таймеров и т.п. - там достаточно места, чтобы спрятать любую ошибку . Эмулятор реализован как Windows приложение на Delphi6. Критические места написаны на ассемблере. Приложение имеет примитивный дисассемблер, просмотр дампа физической памяти, просмотр лога исполнения, эксплорер объектов Windows CE (пока только processes и threads). Скорость исполнения ~5MIPS на P4 3GHz HT. Можно добиться и большего, но как-то и так достаточно для моих целей. Так как время для процессора тоже эмулируется, то практически неважно, как он быстро исполняет инструкции. Собственно мне он нужен для изучения конкретных устройств и для отладки собственных дополнений и изменений для флеша. Теперь, собственно, вопросы: - Это кому-нибудь интересно настолько, чтобы поучаствовать в разработке/отладке? - Где тусуются люди, кому это было бы интересно?
Мне было бы интересно взглянуть - но времени катострафически нет... Да и дельфи я ненавижу. А интересно это наверно будет в первую очередь разработчикам эмулятора Dreamcast - войди с ними в контакт: http://www.ngemu.com/
Я занимабсь написанием эмулятора этого процессора, у меня отлажена большая часть опкодов. Код на С. Интерисует пиши на MIV19700@list.ru. Помогу чем смогу.
Ну, прямо скажем, реализация инструкций - самое простое, что там есть. У меня реализованы почти все инструкции кроме плавающей точки (лично мне они просто еще не нужны - не попадались еще). Пока для меня лично самое сложное было - это реализация MMU, т.е. управления памятью, в частности виртуальной памятью. Также не совсем просто было разобраться с прерываниями, в частности, релизовать эмуляцию таймеров, а без них WinCE просто не заработает. И еще сложности возникают из-за того, что мне этот эмулятор нужен для отладки, и потому там нужны механизмы отслеживания разных событий. При этом я хочу, чтобы он еще и работал с приемлемой скоростью, а с виртуальной переадресацией это непросто. То есть у меня уже стартует WinCE, стартуют три процесса и создаются штук шесть нитей. Пока все останавливается после исполнения где-то 30млн инструкций - процессор хочет выполнить SLEEP, что, естественно, подозрительно. Расследование показывает, что все нити заблокированы, каждая ждет чего-то. Одна точно ждет появления консоли. Одна из нитей перед уходом в ожидание общается с драйвером PCMCIA, пока у меня нет его эмуляции. Чего хотят другие - пытаюсь выяснить. Очевидно, что явно не хватает эмуляции каких-то устройств. Вот каких, и как их эмулировать - и есть проблема. Вообще занятно смотреть, как работает OS изнутри... Посмотрел я на сайт dreamcast'овцев (спасибо за ссылку, кстати). Жаль, что я раньше его не видел, но для моих целей их эмуляторы все равно не подходят. У меня другая задача.
Да я по бодьшому счету примерно на той же стадии. Тоже с таймерами помучился (Реализовал TMU, RTC не трогал, надобности особой нет). Ты только прерывание от TMU реализовал или еще от чего-то, если от каких-то еще просвяти как реализовал. MMU не трогал тоже пока не обходимости, но позже буду реализовывать. Кстати он там такой сложный, распиши. Я так и не понял ты какую конкретно систему эмулируешь Плавающие инструкции у меня реализованы, но не проверены. Кстати, а ты как без них совсем обошелся, особенно без FMOV_SAVE, FMOV_RESTORE они же стеком работают и соотвественно изменяют указатель на него. Не ужели ни разу не было пересылок 64бит Ты я так понимаю не брался за динамическую рекомпиляцию? Она скорости тебе прибавила бы. Впрочем я тоже еще не брался Кстати посети http://forum.romov.net/ я там кинул несколько статей посвященых эмуляции может чем поможет
Контролер TMU реализован, даже есть два режима: realtime и modeledtime(с задаваемой скоростью процессора и частотой переферии, время считается как функция от счетчика интсрукций). RTC тоже не реализовал - нет надобности. Но INTC реализован по-настоящему, так что теперь добавить какие-либо прерывания уже несложно. MMU там и впрямь неожиданно сложный, я долго разбирался (ну как долго - все относительно, я начал-то проект в начале октября). Там и физическая-то память нетривиально организована, а виртуальная - тем более. Я не стал эмулировать кеш - хотя ядро WinCE вначале активно с ним рабоьает, но простое игнорирование никак не влияет на конечный результат. ITLB и UTLB реализованы по-настоящему, точнее, с точки зрения системы все выглядит как на настоящем процессоре, но в реальности я там все очень серьезно оптимизирую, чтобы не терять скорость на переадресации. Более того, я реализовал опциональную "аппаратную" поддержку таблиц переадресации Windows CE (их адрес в TTB), так что TLB Miss Exception у меня возникает редко, большинство обрабатываются на лету, что значительно упрощает возню с delayed slot instructions, улучшает читабельность лога и увеличивает реальную скорость. Реально там все еще есть где пооптимизировать. У меня и физическая-то память реализована не одним куском - она выделяется по требованию сегментами по 64K. Мне показалось, что выделять сразу почти 512M (реально меньше, но все равно много) будет слишком расточительно. Тем более все равно нужно было реализовать маппинг i/o регистров на память. Представь, что получается, когда на это еще и виртуальная переадресация накладывается. Ядро Windows CE практически не содержит float point instructions. Я только где-то видел что она сохраняет/востанавливает float регистры при переключении контекстов, но до сих пор этот код ни разу не вызывался. Hotspot компилятор я не стал делать, я же сказал, у меня нет особой потребности в скорости, т.е. мне не нужно все это делать в realtime. И я с трудом представляю, как при этом еще и поддерживать виртуальную переадресацию. По сути, получатся те же самые сплошные вызовы функций. И еще усложняется обработка exception. Пока речь не идет о конкретной системе, хотя я и работаю с конкретной и мне нужно именно ее, но пока ничего нестандартного нет. Разве что он понимает Windows CE flash ROM *.bin файлы и умеет их грузить и есть некая дополнительная поддержка Windows CE. Кстати, у меня есть своя утилитка, которая умеет работать с этими файлами, в том числе и изменять их. А конкретная система - навигационная система машин Honda/Acura. Я хочу ее модифицировать, но хотелось бы тренироваться все-таки на кошках .
Вот, что я не понял из документации чему точно равно Pf в TMU. Так что я боюсь за точность своего TMU. Подскажи. С выделением памяти ты это красиво придумал. Впрочем я пытаюсь эмулировать DREAMCAST, а там всего 16м. На данный момент я стопорнулся в своиз начинаиях, он у меня пытается призвести запись по адресу 0x00000000, в этот физ. адрес запись не возможна, RomBios здесь находится. Так вот подскажи MMUCR же включает MMU. Если нет то кто, как. Собственно, я так понял тебе необходимо добавить эмуляцию внешних устройств. Если хочешь, чтоб я тебе помог назови эти устройства, если какая-нибудь на них документация, я лично абсолютно не знаком с системами Honda/Acura.
У меня Pf по умолчанию 33MHz, причем я ее угадал просто из соображений, что вроде как это обычная частота для периферии. А потом и получил подтверждение этому - WinCE программирует счетчик tickcounter таким образом, чтоб он выдавал прерывания каждую миллисекунду. Все сошлось как в аптеке. На самом деле эта частота задается значением в FRQCR (посмотри в документации Clock Oscillation Circuits -> CPG Register Configuration). Проблема в том, что Windows CE не трогает этот регистр и потому я не знаю, что же там записал BIOS. Это усугублется еще и тем, что я даже не знаю, какой именно процессор SH4 там стоит, т.е. я даже не знаю его тактовой частоты. Сам чип процессора подписан неким набором букв и цифр, которые мне ничего не говорят и в документации от Renesas я не нашел ничего похожего. Кстати, если кто-то может что-нибудь понять, прошу посмотреть фото чипа: http://www.sounddomain.com/member_pages/view_page.pl?page_id=389428&page=4 Переадресация включается битом в MMUCR. Обращение к адресу 00000000 очень подозрительно. Обычно к BIOS обращаются через адреса A0000000, т.е. с отключенным кешем, или 80000000. Старшие три бита адреса можно игнорировать, но они по сути обозначают режим доступа. Скорее всего, у тебя он где-то читает пустую память, где он предполагает некий адрес. То есть, у тебя где-то ошибка. Пока я в Windows CE видел обращение к BIOS только в одном месте и то, он туда уходит при обработке NMI, т.е. по сути когда reset нажали. Всякое, конечно, может быть, но слабо верится, что на Dreaamcast это сильно по-другому. Кстати, а где можно скачать имидж flash ROM для Dreamcast и какой у него формат? Я бы мог попытаться загрузить его у себя.
Из периферии мне точно будет нужен ATA контроллер (соответственно нужно будет реализовать DMA), PCMCIA и, самое главное, какой-то графический контроллер. Я понятия не имею, какой там видеоконтроллер и как с ним работать. Я вообще никогда напрямую с видеоконтролерами не работал, а тут еще и непонятно, какой он. Может, по неким косвенным признаком кто-то может предположить, что это: - touchscreen; - разрешение 480x234, скорее всего 256 цветов (по крайней мере на flash есть bmp файл с такими параметрами, цветов в палитре вроде 144 - не помню точно, и он отображается при загрузке). C ATA я скорее всего разберусь сам, я знаю, что документация по нему есть на www.t13.org, вот только я не знаю, по каким адресам его регистры расположены (или как еще к нему доступаются?). PCMCIA пока не нужен - навигация работает и так. Этот девайс еще и как-то звуки издает, он говорит и даже распознает речь. То есть, очевидно, там есть еще и звуковой контроллер какой-то. Ну а общение с GPS - это вообще труба, понятия не имею как с ним работать. Но для отладки своих програм он и не нужен.
Спасибо за TMU. У Dreamcast есть RomBios он содержит операционую ситсему весит 2мб и FlashBin 256кб, какой у него понятия не имею не мои заботы Bios к его адресам всего раза три обращается где-то в начале. Загляни сюда http://www.bioshouse.fr.st/ если они тебе нужны. На счет 0x00000000 я понимаю что где-то ошибка пробую анализировать но пока не решил проблемы. Насчет ATA поробуй адреса узнать методом простого анализа, записавыемых по неизвестным тебе адресам. Кстати dreamcast у меня зацикливался в ожиданиий прерываний от GD-ROM(CD-ROM), а потом ждет преравания от VSYNC и от звуковухи причем последние два подряд. В самом начале он тоже уходил на SLEEP, но там была какая то возня с pctra, pdtra достаточно было поставит HACK выдавать значение по требованию, позже по иследовал эмуль дрима более менее работающий оказалось они делают тоже самое. Авторы обещаю выложить сырцы, но они очень долго выполняют свои обещания. GPS мне не нежун совсем и не думаю что понадобится когда-нибудь так что я про него вообще забыл Кстати насколько я знаю WinCE существует и дрима но где ее взять не знаю. Sega хотела облегчить жизнь разработчикам и в портирование игр с PC.
Извиняюсь за долгое отсутствие - я пытался разобраться с девайсами. Сдвигов мало... Очень сложно понять то, о чем не имеешь никакого представления. Насколько я понял, в устройстве есть какие-то дополнительные контроллеры прерываний (помимо INTC), которые каскадируются. Я так и не понял, что это за контроллер(ы), но не 8259, так как там бывает более восьми прерываний на одном IL. Всего количество прерываний несколько десятков. Про некоторые ясно по косвенным признакам, что это работа с PCMCIA, про некоторые другие ясно, что это дополнительные SCI или SCIF. Про большинство вообще пока ничего не ясно. Вот теперь и думаю, как это все моделировать... То есть, реализовать не проблема, понять бы как это должно работать... Пока решил заняться тем, что более-менее ясно, хотя бы тем же PCMCIA. Было бы намного проще, если бы у меня были исходники pcmcia.dll для WinCE 3.0. У меня есть 4.2, но вот так и не смог найти 3.0. Может, у кого есть? Мне нужно содержимое директория PUBLIC\COMMON\OAK. Поможите?
О твоей системе как я уже писал мне ничего неизвестно, едигственое что могу сказать в DREAMCAST также помимо INTC есть контролер прерываний. Они генерируют в INTC 13,11,9 прерывания Расположены по адресам: irq 13 0xa05f6910 0xa05f6914 0xa05f6918 irq 11 0xa05f6920 0xa05f6924 0xa05f6928 irq 9 0xa05f6930 0xa05f6934 0xa05f6938 Истпользуется для включения соответсвующих прерывнаий. Каждое прерывание может генерироваться сразу по нескольким причинам. И три тегистра статуса 0xa05f6900 0xa05f6904 0xa05f6908 Запись приводит к сбросу уже находящихся в ожидании перываний Чиение соответственно какое прерывание в ожидании Каждый бит этих регистров отвечает за одно прерывание прерывание. Врядли чем-то тебе это поможет, но если надо могу не много подробней расписать. Собственно сам занимаюсь прерываниями и DMA с external адресами тут у меня есть кое-какие непонятки.
Вот это уже больше напоминает то, что у меня. Только генерятся прерывания 0-5. А что там за контроллер? Документация есть? Сейчас попробую выложить сам эмулятор. Там есть некие глюки в GUI, но я пока не обращаю на них внимания. Он расчитан на Windows CE 3.0 и возможно 4.x, то есть, и другие системы могут работать, но там не будет дополнительной поддержки. Он умеет грузить некий скрипт, который описывает систему и задает настройки, в поставке есть такой файл AcuraTSX.vsh, вот его и нужно грузить, но, естественно, он предполагает наличие соответствующего образа ROM. Вот каким образом выложить его (12M)? Могу расшарить его на eMule. Я выложил эмулятор: http://home.earthlink.net/~akonshin/files/VirtualSH4.zip Там внутри также присутствуют файлы для IDA 4.3 - результат исследования ядра Windows CE 3.0 из того самого ROM image. Там же лежит утилитка, которая, я думаю, будет очень полезна тем, кто имеет дело с Windows CE, и будет необходима для извлечения файлов и модулей из ROM image. http://home.earthlink.net/~akonshin/files/cebin.zip Еще раз просьба: нет ли у кого Platform Builder для Windows CE 3.0? Мне нужны некоторые файлы оттуда, весь он мне не нужен (по крайней мере пока).
Ну документация весьма закрыта, но к этому времени известно почти все, что нужно знать. Я выдрал из одной оськи написаной интузиастами для "Дрима" два файла отвечающие за этот контролер. Взгляни можеь чем поможет. 911662741__asic.rar
Посмотрю, спасибо. Это линк на ROM image, с которым я работаю ed2k://|file|BN2HN18B.BIN|13624431|9712DE326BCF588EA28889F3F096AA54|h= J54FJROTVCHCG5FSZ4SN72WHR2TVLTJ6|/ Я обычно подключен к Razorback 2.