Сборка Apple IIe 6502 с доступом к диску
В настоящее время я пишу программу для Apple IIe, которая требует чтения / записи файлов с диска. Читая найденные в архиве книги о языке ассемблера для Apple II, я наткнулся на
$C060
подпрограмма, которая предназначена для доступа к порту кассеты, но я не могу найти подпрограмму, которая будет обращаться к дисководу. Есть такая команда монитора? Если нет, что бы я сделал, чтобы прочитать / записать файл на / с диска во время работы программы?
1 ответ
Можно читать и писать на дискету без загрузки в DOS. DOS полезен, если вы хотите читать / записывать диски, которые могут использоваться другими программами, и обеспечить надежную работу с помощью DOS, как правило, проще, чем использование необработанного ввода-вывода, но необработанный ввод-вывод может быть быстрее, чем DOS, и позволяет больше информация, которая будет храниться на диске, особенно если вам никогда не нужно читать или записывать меньше трека за раз.
При использовании последовательного ввода-вывода запись и чтение диска концептуально просто:
Чтобы записать дорожку на диск, создайте буфер, содержащий около 6 КБ данных в подходящем формате, включите двигатель, переместите головку на нужную дорожку, включите сигнал записи, запишите образец 0x92 $A4 примерно 500 раз, а затем - 9 долларов. Затем F выведите содержимое буфера и отключите сигнал записи. Байты должны отправляться на контроллер привода точно один раз за 32 такта. Проскальзывание даже на один цикл приведет к тому, что контроллер будет выводить мусор.
Чтобы прочитать дисковую дорожку, включите двигатель, переместите головку на желаемую дорожку и прочитайте байты данных с диска, пока не увидите байтовую последовательность $92 $A4 $9F, а затем прочтите остальные данные. Данные будут поступать со скоростью около 32 циклов на байт, и каждый байт должен быть прочитан в пределах окна из 7 циклов.
Считанные данные должны точно соответствовать записанным данным, при условии, что каждый байт в буфере поддерживает три ограничения:
В каждом байте должен быть установлен самый старший бит.
Ни один байт не может содержать более двух последовательных 0 битов.
Каждый байт должен содержать как минимум одну пару последовательных 1 битов.
Этим критериям соответствуют 64 возможных байтовых значения. Кодирование произвольных данных в соответствии с этим ограничением перед их сохранением и декодирование информации, записанной таким образом, могут быть неприятными, но это часть «удовольствия» от написания собственных дисковых процедур. Многие дисковые подпрограммы считывают данные в буфер без их декодирования, а затем декодируют их позже, но если выбрать подходящую кодировку, можно декодировать информацию в реальном времени по мере того, как она получена с диска.