Magic (кнопка)

Материал из SpeccyWiki
(перенаправлено с «Magic button»)
Перейти к: навигация, поиск

Magic button — кнопка на некоторых интерфейсах (в особенности Beta Disk Interface), позволяющая сохранить состояние компьютера на внешний носитель для последующего восстановления. Может использоваться для организации отгрузок в тех случаях, когда они не предусмотрены прерываемой программой.

Принцип действия

Кнопка генерирует импульс на сигнале NMI, при его захвате включается ПЗУ TR-DOS. Процессор реагирует на NMI сохранением текущего адреса программного счётчика в стеке и переходом на адрес #0066. Программа ПЗУ сохраняет регистры и состояние прерываний (включены или выключены) и переходит на сохранение. Создаётся файл "@" с длиной 49152 (для 48K режима) и какое-то число файлов с длиной 16384 (для каждой страницы памяти в 128K режиме).

Недостатки

  • При использовании стека как источника данных (приём данных через POP) Magic затирает важные данные.
  • Оригинальная процедура TR-DOS не сохраняет на диск, если в системный регистр контроллера (порт #FF) был предварительно записан 0. Это исправлено в TR-DOS 6.05E и последующих версиях.
  • При расположении стека ниже #4020 (точное значение - ?) Magic не может сохранить все регистры в стеке.
  • Невозможно программно определить режим IM 1/2. Он вручную указывается в названии Magic-файла (файл, начинающийся с "$", запускается с IM 2).
  • Если программа рассчитана на то, что в течение определённого количества тактов прерывание не произойдёт, то Magic может нарушить её работоспособность (т.к. выход из Magic может произойти в любой момент). Исправить это затруднительно, т.к. принудительный HALT может вызвать процедуру обработки прерываний тогда, когда данные для неё ещё не подготовлены.
  • Память выше 128K не сохраняется.

Другие применения

В некоторых прошивках TR-DOS кнопка Magic выдаёт меню или ждёт нажатия кнопки, выбирающей режим работы. Это может быть, например, пауза или вызов отладчика. В некоторых вариантах схемы подключения кэша Magic включает кэш вместо ПЗУ.