Я выложил первую альфу.
http://jhiggins.narod.ru/
Для игр эта версия не подойдет, а для коллег может быть полезной.
Вид для печати
Я выложил первую альфу.
http://jhiggins.narod.ru/
Для игр эта версия не подойдет, а для коллег может быть полезной.
Win32 версия ожидается?
сорцы ожидаются? ,)
Что вообще ожидается ?
Может быть. И если будет, то будет даже не Win32, а Wine, поскольку бесконечно переключаться в Windows -- это не путь, а под виртуальной машиной по-настоящему можно потестировать только самые простые вещи (например, запускается ли вообще).
В этой связи есть проблема -- чем собирать под Wine в среде Linux. Есть мысль попробовать бесплатный BC 5.5. Если есть варианты лучше -- пишите, пожалуйста.
Тут ситация такая. Весь этот эмулятор изначально собирался только для того, чтобы оттестировать реализацию Z80. Эта реализация -- коммерческая, и разглашению не подлежит. По крайне мере пока. И эта часть эмулятора -- пожалуй, единственное, на что действительно стоило бы смотреть. (Чтобы было понятно: вся реализация -- это два аккуратно написанных файлика общим размером 35KB, включая все инструкции, тайминги, MEMPTR и даже немножко документации по M-циклам всех инструкций.)
А кроме того на что смотерть? На загрузку ROM-файла?
В конце концов, в этих исходниках нет абсолютно ничего кроме того, что есть в публично доступных материалах. Всем хорошо известных, к тому же.
А что вы вообще ожидаете?
На сегодня главная задача -- избавиться от всего, что отличает этот эмулятор от реальной машины. А далее буду смотреть а то, пользует ли кто-нибудь это эмулятор, и если пользует, то как и зачем. Отталкиваясь от этого и будем решать, что делать. А если у вас есть мысли на этот счет -- просто дайте знать.
Очень хочу порт под PSP готового эмулятора.
ага, интересно, что коммерческого можно сделать из z80? :)
Не знаю насчет коммерческого, но вот идея "эталонного эмулятора" весьма хороша. В частности, упоминавшееся в одной из веток журналирование процесса выполнения кода со всеми флагами и эффектами
Напомните мне, когда он будет готов на ваш взгляд. ;-)
Ну, деньги ведь платят не за лежание кода на видном месте.
А чем, в этом смысле, Z80 отличается от других ядер, на базе которых кругом и всюду что-нибудь производят?
Может быть это идея. Самое естественное в случае с Higgins -- использовать переменную окружения. Что-нибудь в таком духе:
HIGGINS_TRACE_LEVEL=1 ./higgins --quiet 2>trace
z80 в этом смысле отличается тем что у него ужасно большое энергопотребление и невысокая производительность (в сравнении с современными контроллерами) :v2_rolley
В качестве минусов Z80 можно еще добавить отсутствие поддержки внутрисхемной отладки (JTAG или как там)...
Ах, да... самое главное забыл :) Отсутствие у Z80 встроенной памяти и периферии ;)
Кстати, вспомнил, у меня гдето валяется эмулятор MSP430 с отладчиком, правда без эмуляции аппаратного умножителя, могу выложить сырцы :)
Ох не надо BC. Оптимизация там нивп....[цензура]. Можно кросскомпилить тем-же gcc, в сети есть куча материала на эту тему, или на крайняк взять openwatcom, там бубна для компиляции под другой таргет надо поменьше, но оптимизация под суперсовременные камни похуже. Хотя что там оптимизить, целочисленка да косвенные вызовы по таблице, он с этим прекрасно справляется, я на ассемблере в свое время хуже ваткома лабал.
Ну или в самом уж тяжком случае забабахать виртуальную машину в каком-нть xen или виртуалбокс, поставить туда винду и маяться там уже с чем хочется нативно.
Кстати, на мой взгляд эмулятор черезвычайно интересный. Очень, очень хочется исходников. И посмотреть, и поковыряться. Тем более лицензия к этому располагает :-)
Higgins 8.10 alpha 2 выложена:
http://jhiggins.narod.ru/higgins810a2.tgz
http://jhiggins.narod.ru/#changes
Эмуляция 128K и прочих -- это, по большому счету, задача на отдельный эмулятор. На сегодня это открытый вопрос, и я ничего не стал бы обещать на этот счет.
Во второй альфе добавлена пользовательская консоль. Это первый шаг к отладчику.
Это конечно, но при всех недостатках его продолжают использовать в новых дизайнах, и в этом плане от других ядер он не отличается.
Спасибо.
Спасибо.
как под Win запустить? :)
Higgins 8.10 alpha 3 выложена.
http://jhiggins.narod.ru/higgins810a3.tgz
http://jhiggins.narod.ru/#changes
Нашелся способ обойтись небольшими правками.
Если действительно нужно посмотреть, попробуйте использовать LiveCD любого дистрибутива Linux.
На opensuse 10.3 валится сразу после запуска.
X Error of failed request: BadMatch (invalid parameter attributes)
Major opcode of failed request: 72 (X_PutImage)
Serial number of failed request: 25
Current serial number in output stream: 31
Ты не поверишь, но мы тут ещё и софт пытаемся писать ;)
поэтому я бы с радостью воспринял отладчик которой позволил бы работать по шагам. Например, я в своей IDE останавливаю исполнение кода, делаю шаг или меняю значение регистров, а через специальный порт могу передать эти параметры в эмулятор, что-то типа удалённой отладки как в java.
Гм. В третьей альфе автоповтор должен быть выключен только если окно эмулятора активно. Плюс, автоповтор должен восстанавливаться по приходу SIGINT и SIGKILL. Неужели не работает?
Тогда вместо отладчика во встроенной консоли следовало бы реализовать GDB/MI и встроить эмулятор в Eclipse. Как на ваш азгляд?
Ну, как показала практика, таки не работает, по факту автоповтор отключался 1) после падения эмулятора и 2) после снятия его из консоли по ctrl+c. По ctrl+c задача насколько я помню снимается по sigterm, а по sigint не должна сниматься вовсе. Кстати sigkill трапнуть принципиально нельзя.
Он еще и падает? На чем он у вас упал?
Каким терминалом вы пользуетесь? На Ubuntu Hardy под Konsole ловится SIGINT, и автоповтор восстанавливается.
Теперь о веселом. В процессе ковыряния в ELITE повесил трап на процедуру рисования линии. Скриншот приложен.
А не оставить ли это как опцию? ;-)
Пользуюсь Debian Etch. Терминал Konsole. Мне все-таки кажется что sigint надо оставить в покое, или как минимум обработать еще и sigterm. Я плохо помню ман по сигналам но мне кажется что sigint дефолтно не вызывает снятие программы, только прерывает операцию ввода-вывода с errno==EINTR.
Добрый день!
Скажите, а Ваш эмулятор только для Фряхи и Линукса? Не хотите его собрать под Солярис х86? Я, так понимаю, что Вашу часть кода вы разглашать не хотите, но если Вы можете, соберите его под Солярис 10 х86. Я пользуюсь spectemu версии 0.99.3. Но под Соляркой кроме Глюкалки и XZX коммерческого с поддержкой переключения архитектуры ZX-машин нет. Глюкалка с Солярным звуком нормально не дружит. А spectemu слабоват... XZX - отключены многие важные опции и интереса не вызывает.
Gatsu, под солярку собирается FUSE. еще ZEMU может завестись, тк шпарит через SDL..
Планы такие:
- Переработать интерфейс с панели управления на пиктограммки;
- Добавить поддержку TAP-файлов;
- Добавить эмуляцию записи на ленту;
- Реализовать интерфейс GDB/MI для поддержки отладки;
- Открыть исходники;
- Собрать deb-пакет и, может быть, сделать репозиторий.
Я надеюсь, что четвертый пункт в конце концов приведет к появлению версии для Win32. Если будет подобный интерес к сборке для Solaris, то это просто замечательно.
Спасибо за совет.
Вы лично собирали FUSE под Соляркой? Если есть удачный опыт - поделитесь методикой.
Из всех вариантов собранных мной эмуляторов ZX меня устроили specemu и glukalka. Что в них не устраивает - постом раньше. Поэтому и спросил.
Тов.Higgins предложил мне выложить мой вопрос, который я задал ему в личку. Поэтому я ждал ответа от него.
Добавлено через 4 минуты
Спасибо за ответ.
Если будут открыты исходники и не будет завязки на линукс-ядро, то скорее всего проблем не будет со сборкой. spectemu собирается без какого-либо мудрежа, надеюсь, что Ваш эмуль тоже.
не собирал.. но встречал готовые сборки (типа http://reptonix.awardspace.co.uk/sin...aris/index.htm), сталбыть собираемо, ну и в доках сказано, что солярка поддерживается...
Здравствуйте!
Когда-то в теме Screen timings Вы дали ссылку, где описаны задержки Z80 при разделении им видеопамяти с ULA - http://www.worldofspectrum.org/faq/r...kreference.htm. Информация по этой ссылке грешит ошибками. Еще я сам выкладывал скорректированную схему задержек - http://zx.pk.ru/showthread.php?t=7637. Но это опять немного не то.
В итоге, я как-то здесь на форуме нашел чью-то ссылку полностью скорректированной схемы, однако потерял ее. Почему-то мне кажется, что Вы имеете к этому отношение, поэтому прошу Вас помочь мне в нахождении правильной скорректированной информации :).
Спасибо.
Не имею, честное слово.
Про ссылку такую я не помню, поэтому просто выпишу здесь то, что у меня получилось в итоге для фирменных машин:
Top border height: 48 lines
Bottom border height: 40 lines
Vertical retrace:
48K: 64 - top border height = 16 lines
128K: 63 - top border height = 15 lines
Hidden bottom lines: 56 - bottom border height = 16 lines
Border width: 48 pixels (given the pixel is 1/2 of a tick)
Field width: screen area width + border width * 2 = 352 pixels
Field height: top border height + screen area height + bottom border height = 280 lines
Horizontal retrace:
48K: 48 ticks
128K: 52 ticks
Ticks per line: field width / pixels per tick + horizontal retrace
48K: 224
128K: 228
ULA cycle length: 4 ticks
First visible tick: lines per vertical retrace * ticks per line - border width / pixels per tick + ULA cycle length
48K: 3612 (+ 1) = 3613
128K: 3400 (- 1) = 3399
Ticks per frame: (lines per vertical retrace + top border height + screen area height + bottom border height + hidden bottom lines) * ticks per line
48K: 69888
128K: 70908
ULA contention base:
48K: 14335th tick since last INT
128K: 14361st tick since last INT
How to compute ULA delay:
Floating bus base:Код:if(ticks_since_INT < contention_base) {
delay = 0;
} else if(ticks_since_INT >= contention_base + screen_area_height * ticks_per_line) {
delay = 0;
} else {
tick_on_line = (ticks_since_INT - contention_base) % ticks_per_line;
if(tick_on_line >= screen_area_width / pixels_per_tick) {
delay = 0;
} else {
tick_in_ULA_cycle = tick_on_line % 8;
delay = (tick_in_ULA_cycle == 7) ? 0 : (6 - tick_in_ULA_cycle);
}
}
48K: 14338th tick since last INT
128K: 14364th tick since last INT
Если нужна выверенная растактовка по циклам инструкций Z80, дайте знать, я выпишу сюда прямо из исходного текста.
Спасибо за детальное описание. Но, кажись, я наткнулся на то, о чем спрашивал:
http://scratchpad.wikia.com/wiki/Con...e-unprefixed-2
Однако, это еще не все мои вопросы. Собственно, схемы задержек или их отсутствия мне нужны для понимания работы машины в случае ее турбирования в 2, 3, 4 и более раз (в эмуляторе, естественно). Особенно интересует, как в турбо режиме ведет себя Scorpion и подобные.
Технически, выгоднее реализовать задержки в обработчиках обращений к памяти, которыми пользуются инструкции, нежели для каждой инструкции вычислять времена и адреса для соответствующих задержек, что кроме раздувания объема кода провоцирует ошибки от невнимательности и неточностей в документации. Поэтому я и предлагал дать информацию по циклам инструкций для решения задачи расчета задержек.
Может быть, еще лучше было бы найти время и сделать публичной хотя бы реализацию процессора, где будет видно, что все эти задачи легко решаются на регулярной основе, без детальных спецификаций для каждой отдельной инструкции.
Подозреваю, что модель задержек в этих машинах очень отличается от фирменных.
Разные клоны в турбе х2 ведут себя по разному, а при турбировании более чем в х2 и вовсе результат трудно прогнозируем, особенно на таких кривых несинхронных машинах как Скорпион. Т.е. сэмулировать Скорп в турбе более х2 ты конечно можешь, но это будет полная лажа взятая с потолка, и не имеющая никакого отношения к действительности. Наиболее предсказуемо поведение в турбе более x2 у KAY'я, см. статью Nemo в ZX Format #02 про турбирование.
Это само собой. Вероятно, я не совсем ясно выразился, но кроме ULA +2/3 есть еще и та, которая в принципе возбуждается на все, что плохо лежит на ША - и вот как раз из-за нее необходимо учитывать кое-какую дополнительную информацию (например, выставление адреса регенерации без фактического обращения к памяти).Цитата:
Сообщение от Higgins
Естественно не стоит гробить свое время на бесполезную работу, однако было бы неплохо иметь представление хотя бы о некоторых возможных ситуациях (например, турбирование оригинала, или, скажем, написание мультиколорного ПО для турбированных Scorpion/KAY) .Цитата:
все эти задачи легко решаются на регулярной основе, без детальных спецификаций для каждой отдельной инструкции
Дайте, пожалуйста, ссылку на статью или саму статью :)Цитата:
Сообщение от dec188
Можно поподробнее?Цитата:
Сообщение от dec188