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