Небольшой поток сознания, на тему: "Как я вижу идеальный снапшот на реале"

Как я вижу идеальный снапшот на реале


Нажатие кнопки "Магик" переводит устройство в состояние MAGIK_WAIT_II. (ждём маскируемое прерывания для "магика")
В этом состоянии, когда приходит время для маскируемого прерывания, вместо него происходит переход в состояние IN_MAGIK, и одновременно немаскируемое прерывание.
В состоянии IN_MAGIK Первые 8Кбайт адресного пространства заняты "Магик-ПЗУ" остальные 40Кбайт "Магик-ОЗУ". Маскированное прерывание приходит раньше на определённое число тактов. Открываются специальные МАГИК-порты:
1. управления банками памяти (какую банку памяти (и "Магик" и "НЕмагик") ОЗУ включаем в адресное пространство (#C000..#FFFF))

2. Чтение состояния. (Какой был бордер, Какие банки памяти куда включены, какой регистр муз. сопроцессора выбран и как давно запущена "одиночная волна", какой режим прерывания (IM 2, IM1 ?, DI или EI), и прочее в том-же духе, что можно только писать, но нельзя прочитать штатными средствами. Получается, факты записи(обычной программы) должны фиксироваться устройством в своей памяти. Возможно это не порт, а просто пишется в МАГИК-память, скажем начиная с адреса #2000.

3. Запись перехода в состояние MAGIC_WAIT_RET

Обработчик маскируемого прерывания сохраняет в стеке(который с большой долей вероятности указывает в ОЗУ, а не в ПЗУ )
регистры (первым PC, само собой), при этом не портится ни один байт простого ОЗУ.

Всё сохраняет на диск в виде файла. Возможно показывает меню, возможно читает клавиатуру, и в зависимости от нажатой клавиши записывает в определённый файл, читает из определённого файла, читает пользовательскую "Магик"-программу, из определённого файла, в ОЗУ по адресу #2100. Выполняет пользовательскую "Магик"-программу.

Затем инициируется выход записью в спец-порт. Переходим в состояние MAGIC_WAIT_RET. Восстанавливаем значение регистров, SP, на вершину стека не забываем поставить адрес возврата. В момент, когда началось нормальное маскированное прерывание выполняем RET. (расчитать по тактам)
Сразу после RET, когда в PC запишется (SP) из Магик памяти, переходим в обычный режим, следующий код команды будет читаться из простой памяти. Произойдёт прерывание (если оно включено ), и все пойдёт как по маслу.
[свернуть]