Просмотр полной версии : хочу написать эмулятор
Уважаемые сектрумисты, давно мечтаю написать свой эмулятор, но чувствую , что знаний маловато, неплохо (как я считаю) знаю visual basic, на нем и собираюсь писать, но как это делать??? никогда не писал эмуляторы, подскажите, пожалуйста, с чего начинать, что для этого нужно знать, натолкните, какую нужно прочитать литературу
[bETA]mEN
16.03.2008, 14:32
Для начала нужно ознакомиться с набором команд центрального процессора системы, которую собрался эмулировать, затем разобраться с <картой памяти> этой системы, а именно по-каким адресам лежит оперативная память, как происходит доступ к портам ввода\вывода с помощью специальных команд аналогичных in\out у x86, или же порты <промэпированы> в общее адресное пространство, в таком случае доступ к ним производиться с помощью команд чтения\записи данных из\в память, далее необходимо разобраться с самими портами ввода\вывода т.е. как происходит взаимодействие центрального процессора с <обвязкой>. Вот когда разберешься хотя бы с этим, станет понятно, что и как дальше делать.
(c) Wind /DEMUL Team
прекрасно, спасибо
кстати, необходимой литературы под рукой нет (электронной:D) ?
спасибо за ответ, [bETA]mEN
[bETA]mEN
16.03.2008, 15:39
кстати, необходимой литературы под рукой нет (электронной:D) ?
http://fms.komkon.org/EMUL8/HOWTO.html
можно глянуть исходники vbSpec еще, много чего можно почерпнуть
vbSpec нашел, но так сразу и не разобраться
ILoveSpeccy
17.03.2008, 14:48
Интересная тема...
Хотя эмуль писать наверное небуду (реал как-то интереснее), но вопрос имеется:
как в принципе реальзован такт в эмулях???
Неужели стоит таймер, который 3.5 миллиона раз в секунду тактует эмуль Z80 и т.д. ???? :eek:
Как это на практике реализовывается???
Error404
17.03.2008, 15:43
Интересная тема...
Хотя эмуль писать наверное небуду (реал как-то интереснее), но вопрос имеется:
как в принципе реальзован такт в эмулях???
Неужели стоит таймер, который 3.5 миллиона раз в секунду тактует эмуль Z80 и т.д. ???? :eek:
Как это на практике реализовывается???
Количество тактов эмулируемой машины на N-ой частоте между перываниями принимаем константой "С". Прерывания эмулируются с той же частотой, что и на реале. С начала интервала прерывания эмулируем некоторое количество команд процессора, суммируя их длительность в тактах, пока не достигнем "С", остаток интервала до наступления следующего прерывания курим. Так по крайней мере делает упомянутый здесь vbSpec
CityAceE
17.03.2008, 16:03
никогда не писал эмуляторы, подскажите, пожалуйста, с чего начинать, что для этого нужно знать
Когда начал делать эмулятор под Палм не умел ни на Палме программировать, ни представления о том, как эмуляторы пишутся. Зато неплохо знал, как сам Спек работает. Для начала взял SNA и начал с вывода экарана. А потом потихоньку начал код оживлять. Дальше пошло и поехало само собой... В итоге, конечно, от первоначального варианта ничего не осталось, но зато я сам разобрался со всем без всякой литературы.
начинать надо с эмуля процессора, потом эмуль материнки и эмуль видеосистемы с клавиатурой, для тестов сэмулить читалку с магнитофона.. когда всё это пашет, то можно приступать к эмулю ВГ93 и всяких вещей типа мышки
Adramelek
18.03.2008, 01:16
Виктор, а в чём смысл? Я не к тому, что писать не надо, но если, например, не хватает какой-то конкретной функции в других эмулях, может быть, проще будет взять чужие исходники и модифицировать, чем писать своё с нуля?
CityAceE
А этот эмулятор работает? А то я у меня на Palm ни однин эмулятор спектрума не работает... (Palm на ARM процессоре с PalmOS 5)
Я тоже пытаюсь написать эмулятор... Правда для PC. Как вы считаете эмуляцию стоит производить в отдельном потоке от интерфейса?
[bETA]mEN
18.03.2008, 10:07
А этот эмулятор работает?
http://zxpilot.vladivostok.ru/
[bETA]mEN
не работает :( ну да ладно... это ведь не в тему.
киньте ссылку на доки по программингу для симбы....
спасибо за живое обсуждение темы,
сейчас нашел необходимую литературу и изучаю архитектуру платформы, дошел до регистров процессора,
а пока позвольте по-ходу еще такой вопрос
сэмулить читалку с магнитофона
вот тут у меня возникают трудности.
Когда-то поставил такой эксперимент - получил массив байтов bmp-картинки и записал их в wav файл - и получил звук, а точнее низкочастотный шум, а я то думал,
что получится что-то на подобие модемного звука (как на касете), но по - видимому,
все не так просто,
получается, что каждый байт кодируется своим звуком определенной частоты?
Частотная модуляция, 1-одной "нотой", 0-другой
но по - видимому,
все не так просто,получается, что каждый байт кодируется своим звуком определенной частоты?
делать полную имитацию читалки это отдельный очень сложный проект и стоимость его выполнения превышает прибыль от отдачи, поэтому всё делает гораздо проще.. лично я сделал следующим образом
1. в набор команд процессора вводится несколько TRAP команд
2. одна из них прописывается как первая команда известной всем подпрограммы чтения блока данных с магнитофона
3. перехватывается её выполнение и в заданные адреса заливается блок данных
4. выполняется возврат из подпрограммы с выставлением всех требуемых флагов и регистров
molodcov_alex
19.03.2008, 16:30
Для начала лучше делать поддержку SNA (образ памяти), этого более чем достаточно.
P.S. Сам делаю эмуль, за основу взята z80ex ;) У меня лично проблемы со звуком...
Побольше эмулей, хороших и разных!
(но лучше один, да зато распрекрасный ;) )
Частотная модуляция, 1-одной "нотой", 0-другой
однако, сегодня специально сидел и прислушивался к звукам эмуля: так явно слышится больше, чем два звука
особенно это отчетливо слышно, когда загружаются атрибуты цветов рисунка-застаки
у какой-либо игрушки
Рекомендую книгу "ZX Spectrum для пользователей и программистов" (авторы А. ЛАРЧЕНКО, Н. РОДИОНОВ). Издательство "ПИТЕР", 1993 год. Есть в инете (ссылку не помню) - отсканировано и распознано by Dehtyar Oleg. В книге есть описание архитектуры Спектрума и команд процессора Z80.
так явно слышится больше, чем два звука
особенно это отчетливо слышно
:)
Рекомендую книгу "ZX Spectrum для пользователей и программистов"
спасибо, уже скачал, очень подробная кника, огромное спасибо
ктонибудь дайте ссылку про программинг на ассемблере под симбу!!!!!
прислушивался к звукам эмуля: так явно слышится больше, чем два звука
особенно это отчетливо слышно, когда загружаются атрибуты цветов рисунка-застаки
сигнал записи на магнитофон кодируется в общих словах так: для единичного бита формируется колебание одной длительности, а для нулевого бита другой длительности. Получается так что для 1 формируется сигнал одной частоты, а для 0 другой частоты. плюс к этому перед блоком данных присутствует меандр заданной частоты для синхронизации читающей программы и короткий синхроимпульс, по которому читающая программа узнает что пора начать измерение длительности импульсов для считывания данных.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot