'Ноги' SD интерфейса растут из схемы реализованой на плис ХардвареМаном для 'СпециалистаМХ2'. На данный момент я сделал отработку этого интерфейса в Протеусе, собрал его в реале на макетной плате и подключил к 'Специалисту'. После всех доводок, последняя версия схемы выглядит так. Кроме того, я сделал модификацию этой схемы для RK-86, вот здесь, проверенная на реальной РКшке версия.
Однако железо без ПО будет лишь грудой металлолома, и по этому в сети был найден SD_DOS, написанный, как в последствии выяснилось, b2m_ом, для интерфейса реализованного по схеме 'msx'. Этот SD_DOS я, в начале, адаптировал под текущий SD интерфейс, а затем и доработал новыми 'фишками'. Отступление - вариант схемы для 'msx' существенно медленнее в работе(я не проверял, но думаю, что на порядок) и гораздо неудобнее при программировании чем новая схема.
Вот, что у меня получилось.
Дефайнами можно настроить размещение этого кода в памяти ПК и область для хранения переменных в процессе работы. Удалил поддержку FAT12, оставил только FAT16 - для экономии места.
Организовал пока 3 предустановленных конфигурации, это STD, MX2 и RK86. STD и MX2 - это для 'Специалиста' стандартного и варианта МХ2, а RK86 сотв для РК-86. Разделение сделано для удобства, тк некоторые используемые в коде подпрограммы 'мониторов' этих ПК имеют сходство, но разные точки входа.
Для РК-86 есть возможность выбрать поддержку интерфейса через дефайн RK86_WW55, но никто не запрещает сделать аналогично и в других конфигурациях. Отступление - вариант с подключением через ППА 580ВВ55 получается медленнее в 3-4 раза. Хотя все это быстрее-медленнее - при имеющихся размерах файлов речь идет о единицах секунд, что почти не соизмеримо с минутами загрузки с магнитофона.
Для STD варианта я сделал такое распределение памяти - с 0хС000-стандартный монитор, 4КБ, а с 0хD000 уже sddos, переход на sddos по команде монитора GD000. В моем 'железном' 'Специалисте' область с 0xE000 по 0xEFFF отдана под ОЗУ и я переменные, используемые для работы sddos_ом выделил с 0xE000, там надо 2КБ, но, опять же, никто не запрещает эту область выделить в 0х8000, например. Однако это уже наложит ограничение на загрузку в, и использование этой области стандартными программами.
Для MX2 я sddos в виде запускаемого файла записал в ROM диск, и его можно запустить из RAMFOS_а. sddos размещается с 0xD400, а переменные с 0хЕ000. Такое размещение не машает RAMFOS и позволяет из RAMFOS работать с SD картой.
Для RK-86 sddos с подключением интерфейса через ВВ55 размещается с 0х6000 и запускается директивами монитора R0,7FF,6000 затем G6000. Я уменьшал код, что бы уложиться в 2КБ, а переменные разместил с 0х6800. Если же sddos записать в ПЗУ, то можно его разместить с 0xF004, и запускать его по GF004, а переменные, так же, с 0х6800. Для варианта РК ограничение на размещение программ в области sddos и его переменных есть всегда(для стандартного RK-86 на 32КБ).
================================================================================
sddos поддерживает следующие директивы:
- CD ИМЯкаталога - перейти в каталог с указанным именем;
- DIR - вывести список файлов и каталогов;
- ИМЯфайла.RKX(RKS для std и RKR для RK-86) - запустить файл, при этом
расширение можно не набирать, будет произведена автоподстановка расширения;
- R ИМЯфайла.РАСШИРЕНИЕфайла,АДРЕСкуда,СКОЛЬКОбайт - прочитать в память не
запуская данные файла, начиная с указанного адреса и сколько байт
(пример: R TEST.BIN,0ACD,5FE0 - читает файл TEST.BIN в память
начиная с адреса 0х0ACD и до адреса 0х0ACD+0х5FE0=0х6AAD). Ограничение -
нет проверки на фактическую длину файла и запрошенную на чтение, те
можно запросить прочитать больше чем размер файла, поведение не
определено;
- W ИМЯфайла.РАСШИРЕНИЕфайла,АДРЕСоткуда,СКОЛЬКОбайт - записать в файл
данные из памяти, начиная с указанного адреса в памяти и сколько байт
(пример: W TEST.BIN,0ACD,5FE0 - пишет в файл TEST.BIN из памяти начиная
с адреса 0х0ACD и до адреса 0х0ACD+0х5FE0=0х6AAD). Ограничение - нет
проверки на фактическую длину файла и запрошенную на запись, те можно
запросить записать больше чем размер файла, поведение не определено.
Записать больше чем существующий размер файла нельзя. Если записать
данных меньше чем размер файла, то размер файла не меняется и остается
прежний;
- X - перейти в монитор, из которого был запущен sddos.
Для версии МХ2 добавил новые директивы:
- L ИМЯфайла.РАСШИРЕНИЕфайла,НАЧАЛЬНЫЙадрес_в_RAMдиске - прочитать данные файла с SD в RAM диск МХа
(пример: L TEST.BIN - читает файл TEST.BIN в память начиная с адреса 0х0000 и до адреса его длины,
создает в RAM диске файл TEST.BIN с стартовым адресом 0х0000 и размером как TEST.BIN на карте. Или:
L TEST.BIN,1FA0 - читает файл TEST.BIN в память начиная с адреса 0х0000(не 0х1FA0) и до адреса его длины,
создает в RAM диске файл TEST.BIN с стартовым адресом 0х1FA0 и размером как TEST.BIN).
- S ИМЯфайла.РАСШИРЕНИЕфайла - записать данные файла из RAM диска МХа на SD
(пример: S TEST.BIN - читает файл TEST.BIN из RAM диска в память начиная с адреса
0х0000(не зависит от стартового адреса!) и до адреса его длины, после записывает
его на SD карту в существующий файл с таким же именем TEST.BIN, размер не изменяется!).
================================================================================
При выводе каталога по DIR печатается имя, расширение файла и его
размер(что бы можно было использовать директивы R и W), а на директории
в поле размера файла пишется DIR.
При выводе списка файлов по DIR нажатие любой клавиши приостанавливает вывод на экран.
При запуске файла пишется стартовый и конечный адреса куда будет считан
файл с карты.
Для МХ2 сделал возможность запуска RKS файлов из RAMFOS, а не только RKX.
Загружается файл (автоподстановка расширения работает) и загружается монитор M2_C000.MON(имя жестко вбито в код),
который должен находиться в том же каталоге, что и запускаемый файл, и передается управление на монитор(jmp 0xC000).
Адрес запуска программы сохраняется в стеке. Монитор взят из файлов vinxru в его 'перекомпилированном' RAMFOS.
Этот монитор переключает режим МХ2 на STD и запускает файл по адресу из стека.
Один из приятных моментов этого SD интерфейса (как, впрочем, и 'msx' варианта), это поддержка этих интерфейсов в эмуляторе b2m,
что дает возможность отлаживать код и оперативно его проверять.
Во вложении файлы для эмулятора b2m, а так же исходники sddos_v7, с функционалом описанным выше.
После запуска активен Монитор-4, в нем:
- можно по Х попасть в РАМФОС, по F6 перейти на ROM диск и запустить SDDOSMX2.COM. Далее тонкость - мне 'лень' пересобирать ROM диск
каждый раз при изменении sddos, по тому текущий SDDOSMX2.COM на диске старый, новый же хранится на SD, нужно набрать и запустить DOS1, а затем DOS2,
вот DOS2.RKX это и есть последняя версия sddos. При желании его можно записать на ROM диск, но тк sddos еще в работе, то я его пока не записываю,
а на 'реале',при проверке, запускаю так же DOS1 -> DOS2... тк перешивать ПЗУ желания вообще нет

- можно по U запустить LoaderV5, который загрузит файл BIOS.BIN (это любой монитор для стандартного специалиста) из корня SD карты и передаст на него управление. Из монитора можно выполнить GD000, запустится файловый менеджер fifan_a для SD (так собран этот BIOS.BIN

Еще момент, для работы с образом SD3.IMG из linux образ в каталог sd монтировать так: sudo mount ./SD3.IMG ./sd -t vfat -o loop,offset=32256 .