Самодельный эмулятор дисковода для 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.
при следующей комманде считывания сектора другой дорожки — аналогично
…
так постепенно весь диск будет в памяти и минимальные задержки, только необходимые.Как мнение, не нужно сразу выплевывать данные при команде чтения сектора, в реальности же головка пока синхрометку найдет, пока спозиционируется→счет на миллисекунды. Поэтому можно не весь образ в память загонять, а только необходимую часть.