PDA

Просмотр полной версии : либа для эмуляции z80, v0.1



boo_boo
11.02.2006, 02:27
сделал вот...
фичи:
написана на чистом ANSI C. тайминги как для опкодов в целом, так и для элементарных операций ввода-вывода. все (док/недок) опкоды. можно создавать сколько угодно процессоров.

живет тут: http://sourceforge.net/projects/z80ex/

мейкфайлы пока только для GNU-make/GNU-C (unix,win32,dos -- не суть), но и в MSVC должно собираться без изменений в сорцах.

тестировал на игрульках -- бодренько так фурычит :)

ЗЫ: ЗАДОЛБАЛСЯ с этим соурсфорджем... в жизни такого невразумительного интерфейса не встречал :mad:

Titus
11.02.2006, 03:33
сделал вот...
фичи:
написана на чистом ANSI C. тайминги как для опкодов в целом, так и для элементарных операций ввода-вывода. все (док/недок) опкоды. можно создавать сколько угодно процессоров.

живет тут: http://sourceforge.net/projects/z80ex/

мейкфайлы пока только для GNU-make/GNU-C (unix,win32,dos -- не суть), но и в MSVC должно собираться без изменений в сорцах.

тестировал на игрульках -- бодренько так фурычит :)

ЗЫ: ЗАДОЛБАЛСЯ с этим соурсфорджем... в жизни такого невразумительного интерфейса не встречал :mad:

А как на счет поддержки нескольких процессоров, сидящих на одной шине? ;) Понятно, что для эмуляции спекки это не обязательно, но если все так универсально... ;)

boo_boo
11.02.2006, 03:46
А как на счет поддержки нескольких процессоров, сидящих на одной шине? ;) Понятно, что для эмуляции спекки это не обязательно, но если все так универсально... ;) а в чем заключается это заседание на одной шине? те где оно реализовано, и как используется?

Titus
11.02.2006, 04:05
а в чем заключается это заседание на одной шине? те где оно реализовано, и как используется?

Оно есть, если, например два проца (или более) делят одну шину данных. Это может быть в двухпроцессорном компьютере, либо в том же спектруме с какой-либо доработкой подобного плана.

boo_boo
11.02.2006, 04:20
Оно есть, если, например два проца (или более) делят одну шину данных. Это может быть в двухпроцессорном компьютере, либо в том же спектруме с какой-либо доработкой подобного плана. если в общем, то у мя обмен с шиной данных через callback'и сделан. то есть можно создать несколько контекстов CPU, задав эти самые коллбэки (хоть разные для каждого проца, хоть общие), а уж в них разруливать ситуацию.
вообще, хочу подробностей -- где такое реализовано в железе? :rolleyes:

Titus
11.02.2006, 04:36
если в общем, то у мя обмен с шиной данных через callback'и сделан. то есть можно создать несколько контекстов CPU, задав эти самые коллбэки (хоть разные для каждого проца, хоть общие), а уж в них разруливать ситуацию.
вообще, хочу подробностей -- где такое реализовано в железе? :rolleyes:

Да есть всякие машинки... Хоть та же самая УКНЦ. Там два 1801ВМ2 делят общую память. Вернее часть общей памяти, а часть своя. Хотя для спекки это может быть и неактуально...

И еще, поддержит твой эмуль разные экземпляры CPU, у каждого из которых своя частота?

boo_boo
11.02.2006, 06:35
И еще, поддержит твой эмуль разные экземпляры CPU, у каждого из которых своя частота? ага, частота задается снаружи -- эмуль знает только о тактах, а почем такт, ему пофиг...

Sinus
11.02.2006, 13:56
для этой либы надо будет "обёртку-эмуль" писать или она уже есть?
(лана, всё равно уже скачиваю, разберусь как-нить ;) )


ууу... какой-то глюк с сорсфорже (или у меня с инетом)- когда добираешься до выбора зеркала, говорит что мол "сходи покури, ибо недоступно всё".
вот я и думаю, может DOS атака на сорсфордж :rolleyes:

boo_boo залей мне плиз велдикодушно на [u]restorer_fct (sobaka) tut.by
или на restorer_fct (sobaka) mail.ru.

boo_boo
11.02.2006, 15:33
для этой либы надо будет "обёртку-эмуль" писать или она уже есть? в смысле "обертку"? сама по себе либа только чистый z80 эмулирует, остальное конечно писать придется :rolleyes:

ууу... какой-то глюк с сорсфорже (или у меня с инетом)- когда добираешься до выбора зеркала, говорит что мол "сходи покури, ибо недоступно всё".
вот я и думаю, может DOS атака на сорсфордж :rolleyes: ага, похоже -- колбасит его... не иначе империалистические собаки устроили травлю свободненькому ПО :o
...отослал тебе на tut.by

PS а ты для чего сабж собираешься юзать, если не секрет?

Sinus
11.02.2006, 16:35
как для чего? хочу эмуль под линукс.
вот подожду пока ты либу для AY и ULA напишешь (или ULA сам из Unreal-a возьму) и эмуль склепаю, который в отличие от всех остальных будет работать ;)

boo_boo
11.02.2006, 18:32
как для чего? хочу эмуль под линукс.
вот подожду пока ты либу для AY и ULA напишешь (или ULA сам из Unreal-a возьму) и эмуль склепаю, который в отличие от всех остальных будет работать ;)хе :) я того же хочу, однако...
может, скооперируемся? ;)
...либу для AY уже сделал SMT, осталась ULA и контроллер памяти (думаю сделать его так, чтоб любую модель памяти можно было задать из конфига, не залезая в сорцы)

Sinus
11.02.2006, 19:17
сейчас тайму очень мало. но можно ;)
за ULA возьмусь только если в анриле тайминги раскопаю, ибо сам слабо себе их представляю.
а вот за "контроллер" памяти взялся бы.

boo_boo
11.02.2006, 19:42
сейчас тайму очень мало. но можно ;)
за ULA возьмусь только если в анриле тайминги раскопаю, ибо сам слабо себе их представляю.
а вот за "контроллер" памяти взялся бы.обдумаю это все на днях, и открою тему -- типа api обсудить и тп... если сойдемся во взглядах, то круто :)

Sinus
13.02.2006, 00:46
Пока ты открываешь тему, у меня есть первые резалты: сделал тестовый эмуль пентагона (no ULA, no right timings, no multicolors, no AY) - однако демок уже больше работает чем под глюкалкой или фусе ;)
если SMT уже сделал либу для AY прикручу AY а затем начну мучить тайминги.

кста, добавь в либу z80ex функцию для определения состояния M1, ибо сейчас на включалку/выключалку дырдоса надо hack вешать:



bool m1hack;

byte ReadByte(z80 *cpu, int port)
{
if (m1hack)
{
....
m1hack = false;
}
}

void Process()
{
for (;;)
{
m1hack = true;
z80step();
}
}


зы. делаю под SDL

зыы. какие знаешь способы точного тайминга в *nix ? ибо в виндах и Sleep хватало, а в никсах фих

#define UnixSleep(x) WinSleep(x*1000)

зыыы. посмотрю что SDL на этот счёт предоставляет

Sinus
14.02.2006, 12:02
Итак, новые резалты.

ZEmu (+TRDOS +AY) (-ULA -multicolors).
гонял демки.
вроде все работают (кроме Unreal by KSA - симптомы такие же как и в ранних Unreal Speccy и Z80s - первая часть глюкавит, вторая нормально, а на третьей подзагрузке сбрасывается)

добью чутка звук, прооптимизирую код и наваяю ULA.
тогда можно будет дальше работать.

boo_boo
14.02.2006, 14:24
Пока ты открываешь тему, у меня есть первые резалты: сделал тестовый эмуль пентагона (no ULA, no right timings, no multicolors, no AY) - однако демок уже больше работает чем под глюкалкой или фусе ;)
если SMT уже сделал либу для AY прикручу AY а затем начну мучить тайминги.круто )
а SMT'шный движок смотри тут: http://zx.pk.ru/showthread.php?t=2365
в подкаталоге sndrender.
хватай мой архив с самого конца темы, он точно под линухом пашет.

кста, добавь в либу z80ex функцию для определения состояния M1, ибо сейчас на включалку/выключалку дырдоса надо hack вешатьага, я заметил уже :) сегодня/завтра выложу исправленную версию.

зы. делаю под SDLа я тут подумал... ИМХО allegro больше подходит -- тоже на С, работает тоже на куче платформ, зато есть куча полезностей, которые для SDL придется ставить отдельными библиотеками или велосипед изобретать -- к примеру, GUI, конфиг-файлы... зависимость только от одной библиотеки, это ж круто...

зыы. какие знаешь способы точного тайминга в *nix ? ибо в виндах и Sleep хватало, а в никсах фих clock_settime, clock_gettime, clock_getres() -- posix-фии для работы с таймерами высокого разрешения. в SDL - SDL_Delay и пр, миллисекунды. allegro -- такая же фигня.

boo_boo
14.02.2006, 14:27
добью чутка звук, прооптимизирую код и наваяю ULA.
тогда можно будет дальше работать. здорово, ваяй! а я все думаю над менеджером страниц -- чтоб и универсально было, и быстро, и всю инфу брало с конфигов %)

Sinus
14.02.2006, 16:01
круто )
а SMT'шный движок смотри тут: http://zx.pk.ru/showthread.php?t=2365
в подкаталоге sndrender.
хватай мой архив с самого конца темы, он точно под линухом пашет.

уже хватанул. всё даже работает ^_~


а я тут подумал... ИМХО allegro больше подходит -- тоже на С, работает тоже на куче платформ, зато есть куча полезностей, которые для SDL придется ставить отдельными библиотеками или велосипед изобретать -- к примеру, GUI, конфиг-файлы... зависимость только от одной библиотеки, это ж круто...

фз. с SDL у мну есть некислый опыт работы. нравиться она мне ^_~
конфиги у мну в xml (есть своя либа). а GUI... если только диски выбрать.
а это можно уже и сделать ручками.

Sinus
14.02.2006, 16:02
здорово, ваяй! а я все думаю над менеджером страниц -- чтоб и универсально было, и быстро, и всю инфу брало с конфигов %)
давай давай. потом сравним.

boo_boo
15.02.2006, 13:55
а GUI... если только диски выбрать.
а это можно уже и сделать ручками.ваа.. а как же многооконный супер-дебяккер? ,)

я, по правде сказать, слегка "обиделся" на SDL после того, как выяснилось, что все GUI-либы под нее -- на C++. не люблю с ООП связываться без крайней необходимости... а под аллегру штук пять гуев и все на С :rolleyes:

Sinus
15.02.2006, 14:01
не люблю многооконность. она меня пугает ^_~
самый нормальный дебугер в анриле и STS на самом спеке.
а там нифига нет тонны окошек ^_~

а C++ это хорошо.
правда есть некая линуксовая манера на этом C++ писать, что фиг разберёшся.

фз.
сегодня (или завтра) выложу ZEmu, портани на аллегру (посмотрю что получится).
заодно может чего подправишь и заоптимизишь.

boo_boo
15.02.2006, 19:20
либа готова -- теперь в коллбэк чтения памяти передается состояние M1. слегка поменялись названия парочки "второстепенных" ф-ий, ну и эмуляцию DAA сделал табличной (из анрила) -- теперь ZEXDOC-тест проходит полностью. надо бы еще ZEXALL прогнать, но это на полдня даже при максимальной скорости эмуляции :sleep:


сегодня (или завтра) выложу ZEmu, портани на аллегру (посмотрю что получится).
заодно может чего подправишь и заоптимизишь. давай-давай, посмотрим ;)

Sinus
16.02.2006, 03:29
эмуль в теме ZEmu. новый z80ex пока не вставлял (спать очень хочу).

mastermind
21.08.2010, 05:58
http://github.com/mkoloberdin/z80ex

- переделал под cmake
- компилится теперь в том числе и на MSVC (протестировано на VS 2010)

Потестируйте плз на всяких маках/BSD и т.п. (инструкции по сборке см. в README (http://github.com/mkoloberdin/z80ex/blob/master/README))

nzeemin
21.08.2010, 12:02
ЗЫ: ЗАДОЛБАЛСЯ с этим соурсфорджем... в жизни такого невразумительного интерфейса не встречал :mad:

Это да. Google Code на порядок более вменяемый.

boo_boo
24.08.2010, 20:41
http://github.com/mkoloberdin/z80ex
- переделал под cmake
- компилится теперь в том числе и на MSVC (протестировано на VS 2010)

это порт "билд-системы" на cmake, или в сорцах тоже что-то менялось?

mastermind
24.08.2010, 20:59
это порт "билд-системы" на cmake, или в сорцах тоже что-то менялось?

Фактически "порт билд-системы". В сорцах изменено только то, что необходимо было, чтоб оно стало компилиться на MSVC.
Вот тут выложил изменения одним патчем к версии 1.1.18: http://pastebin.com/3eppm15g

boo_boo
24.08.2010, 22:37
Фактически "порт билд-системы". В сорцах изменено
10x, утянул к себе :)