А какой эмулятор поддерживает лучше всевозможные тормоза и глюки?
Потестил свою поделку на EmuZWin - FPS на 128м, как и ожидалось, упал с 25 до 17(как он их считает кстати?), даже на скорпионе не падает, а тут - без шансов =(
в emuzwin contentended memory некорректно работает.
Для 128К и 48K early модели поддерживают хорошо ZXMAK2, Spectaculator, Fuse, SpecEmu.
А вот для 48К late модели сами тайминги в этих эмуляторах работают вроде везде корректно, но вот c эмуляцией таймингов INT есть разница - у каждого эмулятора по своему. Как правильно неизвестно - никто так и не смог проверить на реальном железе
Не исключено что во всех эмуляторах тайминги INT или сама эмуляция INT для 48K late неправильные
Чтобы код работал быстрее на contended памяти, нужно чтобы как минимум:
- код исполнялся в быстрой памяти;
- стек находился в быстрой памяти;
- не было обращений к медленной памяти
- не было обращений к медленным портам
- значение IR, SP или HL не попадало на медленную область памяти - это актуально при использовании некоторых инструкций, которые хотя явно и не обращаются к медленной памяти, но могут выставлять значение этих регистров на шину в сочетании сигналов управления, которые ULA детектит как обращение к медленной памяти
- все обращения к медленной памяти/портам производить пока луч находится за пределами экрана
Последний раз редактировалось ZXMAK; 22.05.2015 в 13:25.
ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
ULA - это не ПЛМ, это БМК. Полузаказная микросхема. А другие игровые компьютеры тех времен (Commodore-64, Atari 800) использовали полностью заказные БИС (всякие там CTIA/GTIA, Pokey, ANTIC и др). На полностью заказной БИС можно реализовать еще более сложные функции, поэтому эти компьютеры так и не были клонированы в СССР. Или слишком сложно было их реверсить, или потребовалось бы слишком много "рассыпухи", чтобы их повторить.
Ну, не всю. Были школьные компьютеры типа УК-НЦ, там были и ПЛМ, и заказные БИС. Всякие "средние" ЭВМ, типа клонов PDP/11 - СМ-4, или клонов VAX, тоже широко использовали ПЛМ (в первую очередь - 1556ХЛ8/ХП8).
Ну да, я тоже думаю, что скорее выводов не хватило. Вероятно, можно было поставить БМК с большим числом выводов, но это удорожало бы конструкцию. Но могло не хватить и места. БМК тех времен имели число базовых ячеек, измеряемое десятками. Не чета современным ПЛИС. Соответственно, 8 триггеров - это не такой ресурс, которым можно было разбрасываться.
ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
Насколько я понимаю, сама ULA во время выполнения этих команд кладет на шину IR для регенерации памяти.
Это из-за того, что ULA не все сигналы проверяет для определения операций, когда процессор приостановить нужно. А процессор на этих инструкциях выставляет некоторые промежуточные данные на адресную линию и набор сигналов, которые из-за не полной дешифрации распознаются как обращение к памяти
ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
IR с записью попадают на шину каждый цикл M1, ибо регенерация, отсюда берется снег. Мне интересно, когда на шину попадают HL и SP в командах, которые не читают/пишут память косвенной адресацией?
Вот эти команды не должны выкидывать на ША значения SP, HL, rr и прочего, это все внутри проца деется.
То есть, если я в быстрой памяти делаю ld sp,hl, sp и/или hl укзывают в медленную память, i указывает в быструю память, то тормозов быть не должно.
Если я делаю ld (#4000),hl или ld (hl),n при #40 <= h <= 7f, то тормоза могут наступить только в цикле записи в память (если i в быстрой памяти).
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)