Вход

Просмотр полной версии : Эмулятор дисковода на Atmega с возможностью записи



rs_alexey
12.01.2024, 11:15
Долго изучал готовые решения в просторах интернета, но ничего подходящего для себя не нашёл. Разработанный мной ZX Spectrum включает в себя контроллер Nemo Ide и BDI, а поскольку у меня всё равно нет дискет для ZX, а основной источник контента - это образы, записанные на HDD, то эмулятор дисковода на картах SD не представляет для меня особого интереса. Ключевым фактором для выбора эмулятора для меня является возможность записи. В итоге пришлось обложиться документацией, измерительными приборами и делать всё самому.

Безусловно львиная доля информации, а также ряд технических решений были получены из ветки https://zx-pk.ru/threads/26328-planiruyu-sdelat-fdd-emulyator-na-atmega8.html (огромнейший респект EvgenRU).
На данный момент моё решение уже готово и я хотел бы поделиться некоторыми результатами, а также узнать у общественности о востребованности такого решения.

Описывать проект достаточно долго, поэтому буду публиковать информацию постепенно блоками, параллельно планирую участвовать в обсуждении.

Общая концепция:
В качестве платформы для конечного продукта был выбран чип Atmega88 в корпусе DIP-28, при этом сама разработка велась на Arduino Nano.
Хранителем информации выбран чип памяти SRAM SPI. Это чипы на 64MB (8 мегабайт) в корпусах SOP-8 с доступом в режиме SPI.
Это микросхемы LY68L6400SLIT, ESP-PSRAM64H и т.д. Для удобства использования приобрелись переходники SOP-8 - DIP-8.
Выбор SRAM против Flash обусловлен возможностью обращения к любому адресу памяти и запись без задержек.
Из недостатков можно ответить необходимость применения внешнего источника питания для сохранения информации (батарейка, АКБ и т.д.) и питание 3.3v, что требует согласования уровней.

Работающая модель на Arduino Nano выглядит следующим образом:
80092

Rio444
12.01.2024, 12:06
rs_alexey, интересно.
А как образы записываются?
На сколько времени хватает батарейки?
Почему карты SD не представляют интереса? Интерфейс тоже достаточно простой, последовательный. Зато для сохранения данных не нужна батарейка.

rs_alexey
12.01.2024, 14:16
rs_alexey, интересно.
А как образы записываются?
На сколько времени хватает батарейки?
Почему карты SD не представляют интереса? Интерфейс тоже достаточно простой, последовательный. Зато для сохранения данных не нужна батарейка.

На микросхему памяти вмещается 8 дискет. Переключение происходит по кнопке.
Для отображения текущего образа контроллер Atmega периодически передает номер выбранного образа и номер текущего трека по протоколу SPI.
Эти данные считывает другой контроллер (Attiny2313) и выводит эти данные на семисегментный индикатор.
Работаем как с обычными неформатированными дискетами. Т.е. форматируем их, а потом записываем на них что-либо. Я это делаю путём распаковки образа с HDD на FDD через WildCopier.

Батарейка используется CR2032. Собрал я это дело около месяца назад. Пока ни разу не подвела.
По даташиту ток потребления у памяти 200 микроампер. Этого должно хватить на года.

При работе к SD запись и чтение необходимо производить блоками по 4 килобайта (и больше), а размер сектора на дискете 256 байт.
Также при записи на SD контроллеру необходимо выделять время на завершение записи. Учитывая маленькое количество памяти в контроллере Atmega, то буферизацию сделать тоже не получается.
Таким образом мы упираемся в проблему синхронизации между поступающими данными и данными для записи. При записи контроллер Atmega работает на полную катушку, простоя практически нет.
Вся внутренняя программа написана на асемблере с жёсткой оптимизацией. В дебагере высчитывался каждый процессорный цикл.

8009380094

Serg6845
12.01.2024, 15:12
Батарейка используется CR2032. Собрал я это дело около месяца назад. Пока ни разу не подвела.
По даташиту ток потребления у памяти 200 микроампер. Этого должно хватить на года.


а посчитать?
гуглим по CR2032 capacity - говорят 210мАч. делим на 200мкА и на 24ч - получаем чуть меньше 44 суток...

Rio444
12.01.2024, 15:15
При работе к SD запись и чтение необходимо производить блоками по 4 килобайта (и больше), а размер сектора на дискете 256 байт.
Везде пишут, что можно писать на SD по 512 байт.


Учитывая маленькое количество памяти в контроллере Atmega, то буферизацию сделать тоже не получается.Если ограничиваться только атмегой, то да, будут сложности.

- - - Добавлено - - -


гуглим по CR2032 capacity - говорят 210мАч. делим на 200мкА и на 24ч - получаем чуть меньше 44 суток...
У меня тоже что-то близкое вышло.
Но можно например 2 батарейки АА.
У алкалиновых ёмкость раз в 5-10 больше.

Serg6845
12.01.2024, 16:07
У меня тоже что-то близкое вышло.
Но можно например 2 батарейки АА.
У алкалиновых ёмкость раз в 5-10 больше.

а можно рядом поставить ту же SD карту с тем же SPI интерфейсом и в свободное время переписывать новые данные из SRAM на нее. аппаратно - одна нога атмеги. софт да, придется перепахивать.

HardWareMan
12.01.2024, 16:18
Serg6845, write trough/write back кеш?

ALS
12.01.2024, 17:11
Батарейка используется CR2032Я бы поставил литиевый аккумулятор со схемой зарядки.

rs_alexey
12.01.2024, 18:35
Я бы поставил литиевый аккумулятор со схемой зарядки.

Я следующим этапом и планировал так сделать. Что-то типа такого: https://www.chipdip.ru/product/tp4056-charge-module-with-protection
У меня на плате уже была батарейка для подпитки памяти, чтобы сохранять содержимое рамдиска. Грех было к ней не подпаяться. Ну через месяцок я скажу что с зарядом батарейки.

Serg6845
12.01.2024, 18:53
Serg6845, write trough/write back кеш?

типа того...

- - - Добавлено - - -


Я бы поставил литиевый аккумулятор со схемой зарядки.

не нравится мне сама идея с ОЗУ с батарейкой. получается дисковод с неизвлекаемой дискетой (даже если их там 8). перенести что-то на другой комп - только дисковод в сборе перетыкать...

rs_alexey
12.01.2024, 20:03
Еще кстати не забываем, что при записи на SD (да и любую Flash) необходимо предварительно стереть блок перед записью. И это происходит не моментально. Поэтому запись на лету крайне проблематична. При получении сигнала записи с BDI сразу идëт поток MFM-кодированных данных. Между двумя импульсами минимум 4 микросекунды - это 64 такта работы Атмеги, при том, что не все команды выполняются за 1 такт. И в это надо уложить алгоритм декодирования, подсчëта контрольной суммы и сохранение байта в память Атмеги. После получения сектора, пробела после него едва хватает на переброску данных из памяти Атмеги в SRAM.

ALS
12.01.2024, 22:12
Опять же, как вариант, можно сделать копирование всех данных на SD по нажатию кнопки.

rs_alexey
12.01.2024, 23:46
Опять же, как вариант, можно сделать копирование всех данных на SD по нажатию кнопки.

Это можно рассмотреть как вариант к доработке. Хотя я считаю расточительством использовать SD даже минимального объема, которую можно найти в продаже для сохранения 1-8 образов. А для обеспечения удобной навигации нужен строковый дисплей и органы управления, если делать возможность выбора откуда загружать или куда сохранять. Это уже смахивает на другого уровня устройство.

Конкретно в моем случае это всë неактуально, поскольку я могу распаковать любой образ на один из восьми своих виртуальных дисков с HDD и также на HDD сохранить образ с виртуального диска. Также у меня выведен разъем для подключения дисковода снаружи, который подключается вместо виртуального. Таким образом я могу также образы с или на HDD перекидывать на реальный дисковод. И всë это средствами самого спектрума. Мне по большому счëту и батарейка то нужна только чтобы после отключения и включения питания заново виртуальную дискету не записывать.

CodeMaster
13.01.2024, 11:32
Хотя я считаю расточительством использовать SD даже минимального объема, которую можно найти в продаже для сохранения 1-8 образов.
Наверняка у многих валяется что-то ненужное.

izzx
13.01.2024, 15:10
Красивая коробочка. Но я не понял, чем обычный готек не подходит? И где вариант копировать образы по сети с домашнего сервера или с инета?

Rio444
13.01.2024, 16:24
чем обычный готек не подходит?
К готеку ещё нужен контроллер bdi, или подобный.
Лишнее звено.

izzx
13.01.2024, 17:34
К готеку ещё нужен контроллер bdi, или подобный.
Я так понял, тут он и есть. А если б не было, нужен свой софт. Мало инфы.

rs_alexey
13.01.2024, 19:49
Красивая коробочка. Но я не понял, чем обычный готек не подходит? И где вариант копировать образы по сети с домашнего сервера или с инета?

Готек не устраивает размерами и тем, что его надо покупать и допиливать. Мне хотелось сделать всë самому. А разве готек работает по сети или интернету или это уже идеи для дальнейших проектов?

- - - Добавлено - - -


К готеку ещё нужен контроллер bdi, или подобный.
Лишнее звено.

Не лишнее. Я свой эмулятор как раз и сделал потому, что не устраивал NemoIDE без BDI. Большой процент софьа и игр, которые работают нвпрямую с BDI.

izzx
13.01.2024, 20:58
Готек не устраивает размерами и тем, что его надо покупать и допиливать. Мне хотелось сделать всë самому. А разве готек работает по сети или интернету или это уже идеи для дальнейших проектов?
Готек ещё и не дешёвый. А про сеть - это отдельная тема. Я вот пользуюсь вариантом на ESP12. Как-то же новые образы надо загружать на диск.

backa
13.01.2024, 22:27
Я вот пользуюсь вариантом на ESP12. Как-то же новые образы надо загружать на диск
не подскажите где почитать про как собрать самому?

izzx
13.01.2024, 22:55
не подскажите где почитать про как собрать самому?
В самом простом варианте нужна ESP12 и два резистора, чтобы подключить к AY. Это дело было описано в журнале Downgrade, вроде бы 27 номер.
Но лучше подключать 4 провода, с контролем передачи.
А ещё лучше через порт Кондратьева.
Если что - пишите в темах или в личку.

Железка ZX WiFi:
https://zx-pk.ru/threads/33138-opros-wifi-dlya-zx-klonov-ne-na-fpga.html?
Тема программы AY232(K).
https://zx-pk.ru/threads/33584-snova-o-podklyuchenii-zx-pc.html

ZXPIRATE
30.03.2024, 22:51
Долго изучал готовые решения в просторах интернета, но ничего подходящего для себя не нашёл. Разработанный мной ZX Spectrum включает в себя контроллер Nemo Ide и BDI, а поскольку у меня всё равно нет дискет для ZX, а основной источник контента - это образы, записанные на HDD, то эмулятор дисковода на картах SD не представляет для меня особого интереса. Ключевым фактором для выбора эмулятора для меня является возможность записи. В итоге пришлось обложиться документацией, измерительными приборами и делать всё самому.

Безусловно львиная доля информации, а также ряд технических решений были получены из ветки https://zx-pk.ru/threads/26328-planiruyu-sdelat-fdd-emulyator-na-atmega8.html (огромнейший респект EvgenRU).
На данный момент моё решение уже готово и я хотел бы поделиться некоторыми результатами, а также узнать у общественности о востребованности такого решения.

Описывать проект достаточно долго, поэтому буду публиковать информацию постепенно блоками, параллельно планирую участвовать в обсуждении.

Общая концепция:
В качестве платформы для конечного продукта был выбран чип Atmega88 в корпусе DIP-28, при этом сама разработка велась на Arduino Nano.
Хранителем информации выбран чип памяти SRAM SPI. Это чипы на 64MB (8 мегабайт) в корпусах SOP-8 с доступом в режиме SPI.
Это микросхемы LY68L6400SLIT, ESP-PSRAM64H и т.д. Для удобства использования приобрелись переходники SOP-8 - DIP-8.
Выбор SRAM против Flash обусловлен возможностью обращения к любому адресу памяти и запись без задержек.
Из недостатков можно ответить необходимость применения внешнего источника питания для сохранения информации (батарейка, АКБ и т.д.) и питание 3.3v, что требует согласования уровней.

Работающая модель на Arduino Nano выглядит следующим образом:
80092

Добрый день.
Каким-то невероятным образом пропустил ваш проект, хоть и захожу ежедневно.
Очень интересуют подробности проекта. Из постов выше, я не понял это эмулятор дисковода или BDI и дисковода в одном?

rs_alexey
04.04.2024, 08:58
Добрый день.
Каким-то невероятным образом пропустил ваш проект, хоть и захожу ежедневно.
Очень интересуют подробности проекта. Из постов выше, я не понял это эмулятор дисковода или BDI и дисковода в одном?

Отвлёкся немного на другой проект, поэтому с публикацией материалов немного подзатянул. Это эмуляция именно дисковода.
Ниже скинул ссылку на схему и прошивку на основе Arduino Nano (как на фото из предыдущих постов).

https://drive.google.com/drive/folders/1Dtdf511Ar_vrZ_vDdDR6a6HggelmLr-X?usp=sharing