Загрузка Amiga без загрузочной дискеты

Загрузкаamigaбеззагрузочнойдискеты

Введение

Я только что выпустил инструмент для передачи дисков и файлов Amiga на основе последовательного порта, amigaXfer .

amigaXfer floppy tool

Это может читать / писать / сравнивать дискеты, устанавливать загрузочные блоки, отправлять / получать файлы и выгружать кикстарт-ром.

AmigaOS 1.x, 2.x и 3.x поддерживаются.

Путем отключения прерываний и прямого опроса последовательного порта скорость достигает 512 Кбит / с достигается даже на базовой Амиге 500 с тактовой частотой процессора 7 МГц. Целостность данных защищена CRC – 34 / ISO-HDLC.

В отличие от большинства инструментов передачи через последовательный порт, он не требует установки и запуска агента на стороне Amiga, так как он использует отладчик, чтобы получить контроль над Amiga.

Есть несколько способов войти в этот отладчик. Самый простой – через меню отладки Workbench, которое отображается, когда wb загружается с использованием loadwb -debug .

kick34 wb1.3 debug menu

Выбор пункт меню Debug, RomWack или SAD в Workbench 1.x / 2.x / 3.x затем войдет в отладчик и включит использование amigaXfer.

Другой способ входа отладчик выполняет небольшой аппаратный трюк. Этот метод позволяет выполнить начальную загрузку компьютера Amiga без необходимости наличия каких-либо загрузочных дискет с Amiga.

В этой статье описывается использование этого альтернативного метода начальной загрузки и то, как он работает с с технической точки зрения.


Требования

  • Amiga в хорошем состоянии.
  • Если Amiga – A 1000, сначала необходимо загрузить кикстарт.
  • Сам AmigaXfer действительно работает с AmigaOS 1.x / 2.x / 3.x, но этот последний альтернативный метод начальной загрузки имеет только был протестирован на 36. 5 (1.3 ).
  • Поддерживаемая платформа, работающая amigaXfer .
  • Нуль-модемный последовательный кабель или USB <-> RS – 470 адаптируется ter, соединив оба компьютера вместе. Будут использоваться только три провода: GND <> GND прямой и RX <> TX перекрещенный.
  • Несколько чистых дискет, проверенных на пригодность, например, путем проверенного форматирования, выполненного на другом компьютере. DD предпочтительнее HD.
  • ADF образы любых желаемых дискет для быть записанными (например, дискеты Workbench и Extras, соответствующие версии кикстарта).
  • Кусок проволоки или, при нажатии, скрепка.
  • Твердые руки, которые не будут подключаться где-либо еще, чем это необходимо.

Как это делается

Эти инструкции предоставляются как есть, без явной или подразумеваемой ответственности. Следуйте под свою ответственность и только после их полного понимания.

Если загрузочный Доступны дискеты Amiga, есть гораздо более простые методы входа в отладчик и использования amigaXfer, такие как тривиальный метод loadwb -debug.

Отключите ненужные внешние расширения (например, подключенные слева порт расширения на A 512).

Откройте Amiga и найдите GND и сигнал BERR.

A500 BERR

BERR, отмеченный оранжевым цветом, является булавкой на

, поэтому можно просто коснуться верхней части 68000 нога для этой цели.

На левом расширительном заголовке есть большой GND, отмеченный синим цветом, который можно использовать для удержания провода.

Для удобства скрепки, контакт GND, который находится близко в BERR также выделяется синим цветом.

Включите Амигу без вставленной дискеты. Дождитесь вывода видео, чтобы отобразить подсказку Workbench. Если дискеты нет, дисковод должен начать издавать щелкающие звуки.

kick34 wbprompt

Выберите CrashEntry на amigaXfer и нажмите «Подключиться». LogWindow рекомендуется оставить включенным, чтобы можно было легко следить за тем, что происходит.

amigaXfer setup dialog crashentry

На мгновение спокойно подключите BERR к GND. Если контакт длится слишком долго, может потребоваться перезагрузка (Control-Amiga-Amiga) и повторная попытка.

После того, как короткое соединение будет правильно выполнено, Amiga перезагрузится. белый экран, и окно журнала amigaxfer заполнится выводом. Если все пойдет хорошо, через несколько секунд появится главное меню amigaXfer.

Поскольку скорость последовательного порта заблокирована на 9600 для случая начальной загрузки рекомендуется теперь использовать Bootblock Tool для установки отладочного загрузочного блока на одну или несколько дискет. Установите флажок «Форматировать», поскольку дискеты не обязательно изначально отформатированы для Amiga. Защитите дискету от записи и выйдите. Амига перезагрузится нормально.

amigaXfer bootblock tool

Amiga должна иметь возможность загружать эту дискету, и при этом должно быть возможно нормальное (без CrashEntry) использование amigaXfer точка. Это означает, что доступны высокие скорости передачи, такие как 512 кбит / s на простом A 512, поэтому запись дискет из образы должны быть быстрыми.

После того, как дискета Workbench была записана, можно использовать метод loadwb -debug для ввода на нее amigaXfer, таким образом, это последнее средство начальной загрузки на основе BERR метод больше не потребуется.


Как это работает на самом деле

BERR используется в Amiga через 470 Ом резистор, так что он проседает примерно 10. 6 мА при подключении к GND, что безопасно. Этот ток исходит от печатной платы, а не от выхода нестандартной микросхемы. В A 512 он даже ни к чему не подключен кроме входа ЦП, левого заголовка расширения и подтягивающего резистора.

С точки зрения ЦП, BERR читает низкий уровень, вызывая исключение ошибки шины поднятый; ЦП считывает указатель из таблицы векторных исключений и выполняет туда ветвления.

В AmigaOS это установлено на процедуру, которая вызовет неустранимый сбой, тип которого мигает светодиод, перезагружается и показывает гуру.

ghidra non-recoverable alert

Пока светодиод мигает, кикстарт будет напрямую проверять оборудование последовательного порта (SERDATR) на предмет наличия входящий символ DEL (0x7f). Если он будет найден, он войдет во встроенный последовательный отладчик (например, RomWack) вместо перезагрузки.

К сожалению, DEL приведет к сбою RomWack, если он получен, из-за того, что отладчик использует основные функции последовательного ввода-вывода, которые запрограммированы на ввод RomWack при получении DEL. Таким образом, невозможно просто залить последовательный порт с помощью DEL. Вместо этого DEL отправляется по короткому таймеру после проверки отсутствия входящих символов от отладчика. Как только они появятся, отладчик будет запущен, поэтому у нас есть контроль.

На данный момент AmigaOS фактически непригодна для использования (вызовы exec завершатся ошибкой), поэтому вместо этого мы подготовимся к восстановить управление после перезагрузки, указав CoolCapture непосредственно на функцию Debug () exec.

ghidra chip check bug

Если версия кикстарта ниже, чем 232, есть ошибка кикстарта, которая считает, что базовая структура exec повреждена если в нем указано, что имеется более 1000 КБ ОЗУ ЧИПа доступен, таким образом отбрасывая его и создавая новый, теряя CoolCapture в процессе. К сожалению, многие Amiga, поддерживающие 1MB CHIP, поставляются с кикстартом 232, поэтому, если это так, нам нужно исправить эту ошибку, установив значение в 512 КБ. К счастью, такой объем памяти CHIP вполне достаточен для начальной загрузки.

Нам не нужно видеть дисплей GURU (для выхода из которого потребуется вмешательство пользователя), поэтому мы также очистите флаг guru, который представляет собой текст «HELP», записанный в первых четырех байтах памяти. Затем перезагружаемся.

ghidra CoolCapture WarmCapture

Когда система достигает CoolCapture, мы восстанавливаем контроль. На этом этапе загрузки exec.library полностью функционирует, но остальные модули в ПЗУ кикстарта не инициализированы. Следовательно, невозможно, например, использовать trackdisk.device для доступа к дисководу гибких дисков.

Мы хотим использовать дисковод гибких дисков, поэтому это далеко не идеально. Но если выполнение было возобновлено, AmigaOS инициализирует подмножество модулей в резидентной таблице, для которых установлен определенный флаг, включая trackdisk. Последний из этих модулей – strap, который показывает приглашение дискеты Workbench и чья функция инициализации не возвращается. Это неудобно, так как вернет нас туда, откуда мы начали.

Kick34 CrashEntry Resident List

Чтобы этого избежать, мы просто удаляем самый низкий приоритет запись из таблицы жителей т.е. планка. Следовательно, функция, которая обрабатывает инициализацию модулей, фактически достигнет конца таблицы (вместо того, чтобы быть захваченной лентой), и вернется.

Это вызывает код в ПЗУ, который обычно никогда не будет доступен для запуска. Этот код вызывает WarmCapture (), если он установлен, и после или в противном случае он вызывает Debug () в бесконечном цикле. Это удобно, так как избавляет нас от необходимости настраивать WarmCapture.

На этом этапе у нас снова есть контроль, и AmigaOS почти полностью инициализирована, за заметным исключением dos .library (не требуется для выполнения операций ввода-вывода на уровне блоков), который пропускается, поскольку LSB поля rt_Flags его структуры RomTag очищен.

Этого окружения достаточно для amigaXfer для нормальной работы.

Kick34 CrashEntry Resident List