Вопрос был - КАК?
ответ
1) Через ПЗУ, проверяются какие то ячейки, причём адрес ячейки как правило выбирается наобум, не очень понятно как такие программы реагируют на изменённые версии ПЗУ.
Типовой код проверки:
________LD A,(ADDR) ; ADDR - откуда то из ПЗУ
________CP #XX ; ячейка которая должна соответствовать якобы ПЗУ-48
________JR Z,ROM48
________CP #YY ; для ПЗУ-128
________JR Z,ROM128
________RET
может быть другой вариант:
________LD A,(ADDR) ; ADDR - откуда то из ПЗУ
________CP #XX ; ячейка которая должна соответствовать якобы ПЗУ-48
________JR (N)Z,ROM48 ; проверка на (не)совпадение
________JR ROM128
Причём, очевидно, что глюков и та и другая процедура имеет немерянно.
2) Проверять системные переменные
Это более предпочитительный (по сравнению с первым вариантом) способ. Тут его уже комментировали
3) Проверять реагирует ли хоть что-то при выводе разных значений в порт #7ffd. Опять же типовой код был приведён несколькими постами выше.
Я считаю этот способ самым правильным, однако необходимо в любом случае восстанавливать ячейки памяти, которые, возможно, были похерены. Работа программы-загрузчика может завершиться неудачно, а там могут оказаться какие-то данные, необходимые для SOS-48 или SOS-128.
И ещё, приведённые программы страдают недостатком - при переключении страничек рекомендуется либо ждать начала прерывания (команда HALT) либо на время работы процедуры определения отрубать прерывания. Это связано с тем, что SOS-128 восстаналивает страницы при каждом прерывании, кроме того, прерывание может криво отработаться, если была активна не та страничка, что прописана в системных переменных.




Ответить с цитированием