Сообщение от
Spectre
И что? В #10-ой странице все равно 1 ячейку испортил. Это не критично /.../
Разумеется, ячейки не нужно восстанавливать, если, скажем, в них будет загружен код.
Для программ, завершающих свою работу возвратом в систему ZX Spectrum (не кнопкой Reset, естественно) подойдет процедура очищающая электронный диск попутно с проверкой памяти.
Код:
;Проверка наличия памяти 128K и очистка
;электронного диска BASIC 128.
;(C) GRAND, 12.11.2006.
LD BC,#7FFD
LD DE,#1017
OUT (C),D
LD HL,#EBEC
LD (HL),D
OUT (C),E
LD E,19
LD (HL),0
INC HL
DEC E
JR NZ,$-4
LD L,#F7
LD (HL),#C0
OUT (C),D
LD L,#EC
LD A,(HL)
OR A
LD (23388),A;BANKM
LD (23427),HL;SFNEXT
LD H,#2B
LD A,1
LD (23429),HL;SFSPACE
LD (23431),A;
;на выходе флаг Z=0 - означает наличие 128K.
;При работе процедуры прерывания должны быть
;запрещены, а ее код НЕ должен распологаться
;в диапазоне, где устанавливаются банки
;памяти, т.е. #C000...#FFFF. Процедура оперирует
:только с системными переменными BASIC 128,
:расположенными как в бывшем буфере принтера,
;так и в банке 7, поэтому никакое изменение
;ячеек, установленных после ее работы, недопустимо!
Что касается вопроса о якобы некорректной работе порта #7FFD на всех остальных компьютерах, кроме Pentagon'а, при обращении к нему, скажем, LD A,#10 \ OUT (#FD),A, то после того, как кодеры правильных компьютеров стали исправлять этот бред на LD A,%01010000 \ OUT (#FD),A, проблема бумерангом вернулась на тот клон (Pentagon), где она была порождена, и это вполне справедливо.