Won't I be impudent if I would translate this shortly?
Я наберусь наглости и кратко переведу.
Отечественные ZX игры пишутся на клонах и поддерживают аппаратное(?) TURBO выкл. Русский клон ZS SCORPION использует программное переключение TURBO cpu режима - 3.5МГц / 7.0 МГц:
Чтение порта #7FFD = CPU турбо 7MHz (turbo on)
Чтение порта #1FFD = CPU работает на 3.5MHz (turbo off)
Т.е. запись для управления страницами, а чтение для переключения скорости.
На ZX Spectrum +2A / +3 порты #7FFD и #1FFD тоже используются для управления страницами. Чтение не поддерживается, а CPU читает данные с висящей шины ( значение #FF ). Программное переключение игнорируется (без последствий), программа всегда работает на обычной ZX скорости (3.5 MHz).
Проблема с отечественными программами - на оригинальных ZX Spectrum 128 / +2 (серый) моделях. В этих компьютерах прячется аппаратный баг - после чтения порта #7FFD программа теряет работоспособность (данные с висящей шины ЗАПИСЫВАЮТСЯ в порт страниц).
Чтение и #7FFD, и #1FFD дает этот результат из-за неполной адресации порта (достаточно того, что A15=0 + A1=0), адреса этих портов одинаковы. Если отечественная программа читает #7FFD или #1FFD, то настоящие ZX128/+2 упадут. Для исправления проблемы следует убирать IN ?,(C) если BC=#1FFD или #7FFD.
Это критические куски ("?" = любой рег. общего назначения):
LD BC,#1FFD
IN ?,(C)
LD BC,#7FFD
IN ?,(C)
LD A,#1F
IN A,(#FD)
LD A,#7F
IN A,(#FD)
Если убирать эти INы из русских игр/дем/утилит/ их можно будет использовать на ZX128/+2. И на всех других оригинальных моделях (+2A/+3 и русских клонах(?) )
(дальше ссылки на фиксы)




Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 







