Zymosis — эмулятор Z80 под WTFPL

emulators

Postby ketmar » 01 Aug 2012, 11:08

кратко: поскольку я конкретно устал искать не-gplный, и при этом точный эмулятор Z80, пришлось таки побороть свою лень и напилить самому. фичи, кратенько:
* дебильное API;
* ужасный код;
* полная эмуляция Z80, включая недокументированые команды и MEMPTR;
* благодаря API для contention можно эмулировать различные схемы замедления;
* проходит тесты от FUSE (кроме нескольких тестов BIT — FUSE cannot into MEMPTR emulation) и тесты Z80Tests (в том числе тесты MEMPTR).

сделано с нуля (фактически, портирован мой старый движок на дельфи, который я ранее нигде не публиковал), потом допилено в процессе прогона разных и всяческих тестов. косяков пока что не замечено. в качестве тестового полигона используется мой же наколенный эмулятор, в котором (ЧУДО!) работает multicolor (и бордюрные эффекты) для 48k, 128k и pentagon.

ещё одно достоинство движка — малый размер: 59 килобайт в двух исходных файлах (один .c и один .h). можно и ещё урезать, но лень. движок не основан на прегенерации из таблиц (как большинство других), соответственно в скомпиленом виде занимает ещё меньше (400 килобайт бинаря в z80ex меня радуют мало, равно как и его время компиляции — примерно 20 секунд на моей коре2дуба).

лучше всего компилить gcc, но Shiru говорит, что BCB тоже без проблем справляется. другие компиляторы не проверялись.

а, йопт, чуть не забыл. брать тут. да, там git-репозиторий. впрочем, для гитоненавистников есть возможность скачать тарбол любой ревизии.

инжой и хэпи хакинг, как говорится.
User avatar
ketmar
 
Posts: 36
Joined: 06 Apr 2011, 06:08
Group: Registered users

Postby lvd » 01 Aug 2012, 15:04

А что у него со скоростью эмуляции сравнительно с другими?
Как к нему прикручиваются всякохитрые маппинги памяти (128к, атм, етц)?

upd: что делать, если нужно 2 независимых Z80 (например ГС/НГС)?
F̞͖̭̿̔ͯu̐̅cͬ̑ͩk̨̤̳͇̮̭̪̠̽̿̓̆ͭͩ ̷̩̰͎̩͓̘̾̀ͬ̊ͭ͛ͅda̝̺͙̬͎̝̾͟ ̰̜̝̯͉̯̖̓̎́ͨ̽ͫ͟f̟͇̭̀ͬͨͭ̐̚u̹̼̹̗̞͑̔͂͐̚cͭ̅̊̆̒̆ǩ̝̩̯́ͥ̔̍̑ḭ͓͍̳̬ͦ̽͂n͍͎͈̈̅ͩͬ ̊ͫ̂̾̑̈́f̲͚͉͓͗̋́ͧͦ̅ȗ͇̲̻͈̲̅̎͗͒ͭ͡c̬̟̠̹̯̈́ͩ͘ͅk̫̠̻̋͜a̲͒̾̇!͙͕̺͉̗̩̲̂̏̄̀
User avatar
lvd
 
Posts: 7196
Joined: 07 Apr 2007, 21:28
Group: Registered users

Postby TS-Labs » 02 Aug 2012, 01:20

... И как происходит эмуляция растровых эффектов (синхра луча с видеоконтроллером).
TS-Labs
 
Posts: 1150
Joined: 19 Apr 2010, 10:10
Location: Wildest West
Group: Registered users

Postby ketmar » 02 Aug 2012, 20:18

>lvd » 01 Aug 2012, 15:04
>А что у него со скоростью эмуляции сравнительно с другими?
хрен его знает. у меня на коре2дуба мой эмуль жрёт не сильно больше, чем FUSE. при том, что совершенно не оптимизировался. по-идее, всем должно быть достаточно. %-)
а учитывая, что в скомпиленом виде zymosis ЗНАЧИТЕЛЬНО меньше, чем z80ex, например, то он ещё и кэш процессора не так засирает.

>Как к нему прикручиваются всякохитрые маппинги памяти (128к, атм, етц)?
точно так же, как и ко всем другим. %-) ставим нужные колбэки — и вперёд. ZXEmuT (мой демо-эмуль, лежит в той же репе, но собрать его не выйдет %-) вполне эмулит пентагон512/1024 с TR-DOS, например, и скорпион, даже с сервисным монитором.

>что делать, если нужно 2 независимых Z80 (например ГС/НГС)?
без проблем: завести две структуры Z80Info. хоть сто процессоров, лишь бы реального хватило.

>TS-Labs » 02 Aug 2012, 01:20
>И как происходит эмуляция растровых эффектов (синхра луча с видеоконтроллером)
никак не происходит, это эмулятор процессора, а не цельной машины. %-)
видимо, подразумевалось, как у него с растактовкой. хорошо с растактовкой, демоэмуль спекки отлично справляется с бордюрными эффектами и мультиколорами в 48, 128 и pentagon (что обозначает и корректную эмуляцию contended memory). фактически, отличий от ядра FUSE в этом плане почти нет (у FUSE некорректно эмулируются обращения к памяти при срабатывании прерываний, но это пофигу, в принципе).

p.s. да, документации нет, увы. но есть тестер, который проходит тесты от FUSE, и эмулятор спекки, который собрать не выйдет, но попыриться в код и понять, как использовать zymosis вполне можно.

p.p.s. также в репе есть микробонус: urasmlib — либа ассемблера/дисассемблера. она же используется в моём меганавороченом и никому, кроме меня, не нужном z80-ассемблере urasm. только в урасме она под GPLv3, а тут под WTFPL.
User avatar
ketmar
 
Posts: 36
Joined: 06 Apr 2011, 06:08
Group: Registered users

Postby TS-Labs » 03 Aug 2012, 13:46

ketmar wrote:видимо, подразумевалось, как у него с растактовкой.

Растактовка - это корректное кол-во тактов на команду, а имелось в виду, как он эти такты увязывает с лучом монитора.
А как в плане добавления других видеорежимов? Рендеринг растра происходит сразу в буффер RGB или в формат графика+аттры (либо какой другой 6912-специфический), как в канонічном анрыле?
TS-Labs
 
Posts: 1150
Joined: 19 Apr 2010, 10:10
Location: Wildest West
Group: Registered users

Postby ketmar » 03 Aug 2012, 16:07

ещё раз: это эмулятор ПРОЦЕССОРА. и не современного интеля с интегрированой видеокартой, а Z80. какой графики, какой рендеринг? как автор эмулятора, использующего Zymosis, сделает — так и будет. я лично в ZXEmuT рендерю экран до текущего положения луча при записи в scr$, и до конца когда закончился фрейм. колбэк обращения к памяти вызывается в правильный момент, так что по количеству тактов с начала фрэйма определить положение луча не проблема. опять же лично я рендерю в обычный байтовый массив с поллитрой.

если вопрос про эмулятор, который прилагается как пример, то другие видеорежимы, равно как и эмуляция пентэв и прочих извратов меня не интересует: для этого анрыл есть. но, как я сказал, непосредственно к Zymosis сие отношения не имеет: это универсальный эмулятор Z80, как z80ex, например. ни больше, ни меньше.
User avatar
ketmar
 
Posts: 36
Joined: 06 Apr 2011, 06:08
Group: Registered users


Return to Эмуляторы

Who is online

Users browsing this forum: No registered users and 1 guest

cron