Самодельный эмулятор дисковода для Amiga

Комментарии (5)

  • 10 июня 2017 в 21:59

    0

    Крутотень!
    • 10 июня 2017 в 22:02

      0

      Настоящая крутотень у tnt23. :) У него всё на одном контроллере — мне такое недостижимо (шаг ножек у таких контроллеров мал, нужно у китайцев платы заказывать, но я до этого ещё не дошёл).
  • 10 июня 2017 в 22:02

    0

    Как я понял, память используется для хранения всех данных дискеты. Не совсем понятно, зачем это сделано. В дисководах же применяется механика, а значит есть приличные задержки при переходах между дорожками, и можно подгружать данные напрямую с карты в эти моменты.
    • 10 июня 2017 в 22:04

      0

      Да вот есть и такие устройства. Непонятно, только, как работающие:

      1) SD-карта пишет и читает блоками по 512 байт. После выдачи ей 512 байт на запись происходит пауза, пока контроллер карты запишет данные и ответит.
      2) Импульсы перемагничивания имеют длительность 0.1–1.1 мкс. На частоте 40 МГц это будет от 4 до 40 тактов. Внешнее прерывание такое отловит, но всё равно, время мало…
      3) Между импульсами перемагничивания 2 мкс.

      Выходит следующее. Запускаем SD-карту на выдачу блока 512 байт, считываем его побайтно и выдаём данные. Одновременно ловим прерывание перемагничивание и заполняем буфер на 512 байт. По окончании (если была запись) забрасываем этот блок на SD-карту. При этом нужно постоянно анализировать смену дорожек и поверхности диска (если смена будет когда SD-карта ещё не дочитала блок, нам придётся завершать чтение и дозаписывать карту). Запись блока на SD-карту займёт 512 байт*8 бит в байте/20 000 000 бит в секунду по spi *1000000 микросекунд в секунде= 205 мкс без учёта задержки на ответ контроллера. Это значит, что мы гарантированно пропустим импульс перемагничивания на стыках блоков.

  • 11 июня 2017 в 00:59

    0

    А если взять такой алгоритм:
    при команде считать сектор по определенной дорожке — считывать всю дорожку в определенное место в DRAM.
    при следующей комманде считывания сектора другой дорожки — аналогично

    так постепенно весь диск будет в памяти и минимальные задержки, только необходимые.

    Как мнение, не нужно сразу выплевывать данные при команде чтения сектора, в реальности же головка пока синхрометку найдет, пока спозиционируется→счет на миллисекунды. Поэтому можно не весь образ в память загонять, а только необходимую часть.

© Habrahabr.ru