ZX SPectrum SD Card project

Оригінальний ZX Spectrum, його версії та клони

Модератор: alvis

Відповісти
Аватар користувача
Mak7ym
Повідомлень: 44
З нами з: 23 червня 2023, 20:06
Дякував (ла): 23 рази
Подякували: 21 раз

ZX SPectrum SD Card project

Повідомлення Mak7ym »

Привіт Спільното!

Вирішив зафіксувати свої думки і прогрес по сабжу.

Все почалося з 2 роки тому, коли я задумався над можливістю обміну інформацією з спеком нормальним способом.
Водночас, передивився різні приблуди, які вже були доступні. Найбільш привабливим став divIDE, але...

Але повторювати його складно і не кошерно, як для мене.

За весь час проб і помилок, вдалося викристалізувати основні умови до проєкту:
1. Повторюваність - хардова частина зроблена на розсипусі або, на крйній випадок, на доступному мікроконтроллері, який легко запрограмувати;
2. Витримати баланс між софтовою і хардовою частиною, щоб було не забагато коду і не за сильно складний хард;
3. По можливості, мінімально змінювати існуючий ром-роми;
4. Зробити прозорю роботу з даними/файлами через стандартний ввід-вивід;
3. Використати можливості спєка по-максимуму;
4. Fun, fun, fun...

І так, що ж можна використати для розширення можливостей спєка:
1. Слот розширення, який в спєку, як і в більшості клонів надає доступ до практично всих сигналів процесора;
2. Можливість підміни стокового рома
3. Використання практики з педжинга ром частини (як в 128)

Перше, що я перевірив, це як можна передавати інформацію через слот розширення.
Була розроблена проста схема, яка писала в тригер і читала з нього. Для цього був потрібен дешифратор порту ввода-вивода, тригери і тристейтовий буфер.

У мене навіть зберігся робочий прототип :)
EBBA98F6-8583-469B-ACEC-0D0FD58C607D_1_105_c.jpeg
Запис відбувався за допомогою OUT (0x77), A і читання IN A, (0x77).
Тестування відбувалося через бейсік: OUT 119, 123 i PRINT IN 119.

Схема приблизно така, я тоді тільки вчився працювати з кадом, тож малював чим було
hw-port-0x77-0x75.jpg
Виглядає ужос, але працює.
А радості було... як воно завелося, не передать.

Ну, ок, перевірив - працює, ідемо далі.

Наступним кроком було організувати передачу байта кудись... А от куди його передавати, це вже був інший челендж.
Перше, що спало на думку, це прикрутити ардуіну, як такого собі медіатора.
Впринципі, така ідея має право на життя і розкриває просто фантастичні можливості. Ардуіна підключаєтся до сучасного компа і комунікує через ком-порт - вже є можливість пересилити дані. Для автономності, можна підключити сд карту і дані писати на неї.
Тобто, варіантів - безліч, треба було тільки продумати протокол комунікації.

Основною проблемою є синхронізація роботи ардуіни і нашого порта. В асінхронному режимі, ардуіна може не встигати за потоком байтів з порта.
Більше того, передачу треба організувати у 2 сторони і тут вилазіть ще більша проблема.
Сінхронізацю вирішив робити через біти іншого порта - після завершення запису в порт, на іншому тригері піднімається флаг і спрацьовує переривання на ардуіні з наступним вичитуванням байта, по завершенню - біт скидається, що сигналізує прийнятий байт.
В зворотньому напрямку, ситуація була подібною.
Нажаль, правильна синхронізація роздувала схему досить сильно, крім того залишалися деякі пролеми не вирішенними.
Тому, ідея була відкладена до найкращіх часів...

To be continued...
У вас недостатньо прав для перегляду приєднаних до цього повідомлення файлів.
Аватар користувача
Mak7ym
Повідомлень: 44
З нами з: 23 червня 2023, 20:06
Дякував (ла): 23 рази
Подякували: 21 раз

Re: ZX SPectrum SD Card project

Повідомлення Mak7ym »

Друга спроба була більш вдалою і в девелоперському варіанті, навіть зробив передачу файлів з/на спєк.
Ідея була геніально-простою, прийшла вночі, тому я ніфіга не виспався, а оскільки ну дуже хотілося її зробити - навіть взяв вихідний.

Покуривши схему арлекіна і повивчавши документацію на Z80 - вирішив скористатися, по-суті DMA - у проца є сигнали на запрос доступа до шини, чим я і скористався.
Концепція була така: ардуіна запрашувала доступ до шини і проц тристейтив лінії адреса і даних, щоб можна було читати память. Працювало ідеально, можна було досить швидко переливати великі :) об'єми даних, ну тобто хоч всю память... практично, але був один нюанс.
Нормально працювати можна було тільки з uncontended memory 32768+. Справа у тому, що підсистема відеовиводу відключає цю частину памяті від шини і щось записати або прочитати з неї не є можливим. Я витратив досить багато часу на всілякі хітрощі і сінхронізацію, але без втручання в схему спєка нормально зробити роботу було неможливо.

Другим сайд ефектом було те, що щоб спєк міг прочитати байт, треба було чекати, поки ардуіна на всіх виводах виставить біти, це займало якийсь час і тому треба було прикрутити очикування порта у Z80. Це було нескладно, але достатньо гальмувало роботу процесора на IN операціях.

І останній, так би мовити, цвях в кришку гроба - такий підхід норм би працював з новітніми клонами, де не треба робити рефреш памяті. При використанні шини, вся відповідальність за рефреш лягає на мастера шини...

З програмної сторони питання, буфер треба було розміщувати в 32768+ адресах, що конфликтує з великою кількістю програм і тоді прийшлося б якось в коді ці конфлікти вирішувати.
B3F9C32F-B6D0-4084-8BF3-D63A3A70D919_1_105_c.jpeg
Тому цей варіант теж був відкладений в довгий ящик...

To be continued...
У вас недостатньо прав для перегляду приєднаних до цього повідомлення файлів.
Аватар користувача
Mak7ym
Повідомлень: 44
З нами з: 23 червня 2023, 20:06
Дякував (ла): 23 рази
Подякували: 21 раз

Re: ZX SPectrum SD Card project

Повідомлення Mak7ym »

Поки був у відпустці, трохи часу витратив на рефакторінг кода для свого ZX SDCard проєкта. Переробив повністю модель файла, щоб мінімізувати обчислення і підвищити швідкість читання. Після прогону на реальному залізі відкривання файлу в каталозі, в якому 700 файлів, займає тепер ~30секунд. До оптимізації було коло хвилини. Скажу так, не призначений спєк для ЕксФата. Занадто складні обчислення потрібні з 32 і 64 бітними числами, що для нього важкувато. Проте, якщо в каталозі до 50ти файлів, навіть з довгими іменами - працює досить швидко 2-3 секунди на відкривання файла - було коло 10-15 секунд. Крім того змінив модель, щоб зберігати інформацію з директорії і одразу записувати зміни в довжині файла при запису з розширенням. Зараз починаю, нарешті, імплементувати запис файлу.
Аватар користувача
Mak7ym
Повідомлень: 44
З нами з: 23 червня 2023, 20:06
Дякував (ла): 23 рази
Подякували: 21 раз

Re: ZX SPectrum SD Card project

Повідомлення Mak7ym »

Більш того, знайшов цікаву мікруху у китайців CH376. Вона може СД карти і Юсб драйви. Має вже на борту драйвера для фат 12 16 і 32. Має 8080 інтерфейс - те що треба для спєка. Замовив, як прийдуть спробую макет спаяти і написати драйвер під мою імплементацію ЕксФата. Тоді можна буде не тільки СД карти а ще й звичайні Юсб флешки використовувати :)
Аватар користувача
Mak7ym
Повідомлень: 44
З нами з: 23 червня 2023, 20:06
Дякував (ла): 23 рази
Подякували: 21 раз

Re: ZX SPectrum SD Card project

Повідомлення Mak7ym »

File manage and control chip CH376

CH376 is used as file manage control chip, used to MCU system read/write file in USB Flash Drive or SD card.
CH376 supports USB-Device Mode and USB-HOST Mode. Set the basic firmware of USB communication protocol in the inner. It is also set firmware of special communication protocol to deal with Mass-Storage devices, communication interface firmware of SD card, FAT16, FAT32 and FAT12 file system manage firmware in the inner. It supports common USB storage devices (contains USB Flash Drive/USB hard disk/USB Flash memory/USB read card) and SD cards (contain SD card with standard capacity and HC-SD card with high capacity, MMC card and TF card compatible with protocol).
CH376 supports three communication interfaces: 8-bit parallel, SPI interface or asynchronism serial interface. DSP/MCU/MPU etc. controller via the any interface of them to control CH376 chip, storage and get file in USB Flash Drive or SD card, or communication with computer.
The USB-DEVICE Mode of CH376 is totally compatible with CH372, the USB-HOST Mode of CH375 is basically compatible with CH375.
У вас недостатньо прав для перегляду приєднаних до цього повідомлення файлів.
Відповісти

Повернутись до “ZX Spectrum”