ZX SPectrum SD Card project
Додано: 29 вересня 2023, 16:27
Привіт Спільното!
Вирішив зафіксувати свої думки і прогрес по сабжу.
Все почалося з 2 роки тому, коли я задумався над можливістю обміну інформацією з спеком нормальним способом.
Водночас, передивився різні приблуди, які вже були доступні. Найбільш привабливим став divIDE, але...
Але повторювати його складно і не кошерно, як для мене.
За весь час проб і помилок, вдалося викристалізувати основні умови до проєкту:
1. Повторюваність - хардова частина зроблена на розсипусі або, на крйній випадок, на доступному мікроконтроллері, який легко запрограмувати;
2. Витримати баланс між софтовою і хардовою частиною, щоб було не забагато коду і не за сильно складний хард;
3. По можливості, мінімально змінювати існуючий ром-роми;
4. Зробити прозорю роботу з даними/файлами через стандартний ввід-вивід;
3. Використати можливості спєка по-максимуму;
4. Fun, fun, fun...
І так, що ж можна використати для розширення можливостей спєка:
1. Слот розширення, який в спєку, як і в більшості клонів надає доступ до практично всих сигналів процесора;
2. Можливість підміни стокового рома
3. Використання практики з педжинга ром частини (як в 128)
Перше, що я перевірив, це як можна передавати інформацію через слот розширення.
Була розроблена проста схема, яка писала в тригер і читала з нього. Для цього був потрібен дешифратор порту ввода-вивода, тригери і тристейтовий буфер.
У мене навіть зберігся робочий прототип Запис відбувався за допомогою OUT (0x77), A і читання IN A, (0x77).
Тестування відбувалося через бейсік: OUT 119, 123 i PRINT IN 119.
Схема приблизно така, я тоді тільки вчився працювати з кадом, тож малював чим було Виглядає ужос, але працює.
А радості було... як воно завелося, не передать.
Ну, ок, перевірив - працює, ідемо далі.
Наступним кроком було організувати передачу байта кудись... А от куди його передавати, це вже був інший челендж.
Перше, що спало на думку, це прикрутити ардуіну, як такого собі медіатора.
Впринципі, така ідея має право на життя і розкриває просто фантастичні можливості. Ардуіна підключаєтся до сучасного компа і комунікує через ком-порт - вже є можливість пересилити дані. Для автономності, можна підключити сд карту і дані писати на неї.
Тобто, варіантів - безліч, треба було тільки продумати протокол комунікації.
Основною проблемою є синхронізація роботи ардуіни і нашого порта. В асінхронному режимі, ардуіна може не встигати за потоком байтів з порта.
Більше того, передачу треба організувати у 2 сторони і тут вилазіть ще більша проблема.
Сінхронізацю вирішив робити через біти іншого порта - після завершення запису в порт, на іншому тригері піднімається флаг і спрацьовує переривання на ардуіні з наступним вичитуванням байта, по завершенню - біт скидається, що сигналізує прийнятий байт.
В зворотньому напрямку, ситуація була подібною.
Нажаль, правильна синхронізація роздувала схему досить сильно, крім того залишалися деякі пролеми не вирішенними.
Тому, ідея була відкладена до найкращіх часів...
To be continued...
Вирішив зафіксувати свої думки і прогрес по сабжу.
Все почалося з 2 роки тому, коли я задумався над можливістю обміну інформацією з спеком нормальним способом.
Водночас, передивився різні приблуди, які вже були доступні. Найбільш привабливим став divIDE, але...
Але повторювати його складно і не кошерно, як для мене.
За весь час проб і помилок, вдалося викристалізувати основні умови до проєкту:
1. Повторюваність - хардова частина зроблена на розсипусі або, на крйній випадок, на доступному мікроконтроллері, який легко запрограмувати;
2. Витримати баланс між софтовою і хардовою частиною, щоб було не забагато коду і не за сильно складний хард;
3. По можливості, мінімально змінювати існуючий ром-роми;
4. Зробити прозорю роботу з даними/файлами через стандартний ввід-вивід;
3. Використати можливості спєка по-максимуму;
4. Fun, fun, fun...
І так, що ж можна використати для розширення можливостей спєка:
1. Слот розширення, який в спєку, як і в більшості клонів надає доступ до практично всих сигналів процесора;
2. Можливість підміни стокового рома
3. Використання практики з педжинга ром частини (як в 128)
Перше, що я перевірив, це як можна передавати інформацію через слот розширення.
Була розроблена проста схема, яка писала в тригер і читала з нього. Для цього був потрібен дешифратор порту ввода-вивода, тригери і тристейтовий буфер.
У мене навіть зберігся робочий прототип Запис відбувався за допомогою OUT (0x77), A і читання IN A, (0x77).
Тестування відбувалося через бейсік: OUT 119, 123 i PRINT IN 119.
Схема приблизно така, я тоді тільки вчився працювати з кадом, тож малював чим було Виглядає ужос, але працює.
А радості було... як воно завелося, не передать.
Ну, ок, перевірив - працює, ідемо далі.
Наступним кроком було організувати передачу байта кудись... А от куди його передавати, це вже був інший челендж.
Перше, що спало на думку, це прикрутити ардуіну, як такого собі медіатора.
Впринципі, така ідея має право на життя і розкриває просто фантастичні можливості. Ардуіна підключаєтся до сучасного компа і комунікує через ком-порт - вже є можливість пересилити дані. Для автономності, можна підключити сд карту і дані писати на неї.
Тобто, варіантів - безліч, треба було тільки продумати протокол комунікації.
Основною проблемою є синхронізація роботи ардуіни і нашого порта. В асінхронному режимі, ардуіна може не встигати за потоком байтів з порта.
Більше того, передачу треба організувати у 2 сторони і тут вилазіть ще більша проблема.
Сінхронізацю вирішив робити через біти іншого порта - після завершення запису в порт, на іншому тригері піднімається флаг і спрацьовує переривання на ардуіні з наступним вичитуванням байта, по завершенню - біт скидається, що сигналізує прийнятий байт.
В зворотньому напрямку, ситуація була подібною.
Нажаль, правильна синхронізація роздувала схему досить сильно, крім того залишалися деякі пролеми не вирішенними.
Тому, ідея була відкладена до найкращіх часів...
To be continued...