PDA

Просмотр полной версии : SD карта и SDOS для 8и битных ПК



PVV
24.12.2018, 14:49
У меня возникло желание упорядочить и собрать в одном месте всю информацию о системе SDOS.
Честно говоря, я не предполагал, что SDOS разрастется до текущих маштабов, и сейчас сам иногда испытываю сложность в поиске информации о том или ином варианте сборки.

Что же такое SDOS?
SDOS это компактная консольная оболочка позволяющая читать, запускать на исполнение файлы с SD карты, отформатированной в FAT16, и записывать обратно на карту данные из ОЗУ компьютера. Это позволяет очень просто переносить файлы с 'больших' ПК в наши ретрокомпьютеры и обратно.
В основе кода SDOS взят код уважаемого b2m, который я обрамил дополнительным функционалом и возможностями.
Код системы построен таким образом, что его очень просто можно адаптировать к любому ПК и к любому варианту аппаратного интерфейса и носителя (те, вообще говоря, это не обязательно должна быть SD карта, а может быть и HDD (https://zx-pk.ru/threads/29892-sd-karta-i-sdos-dlya-8i-bitnykh-pk.html?p=1050685&viewfull=1#post1050685)).

На данный момент SDOS:
код самой SDOS занимает от 2 до 2.5КБ (может размещаться как в ПЗУ так и в ОЗУ), плюс для работы с FAT16 нужно еще 2КБ ОЗУ.

собиралась и проверялась как минимум в эмуляторе emu, а в некоторых случаях и в реале на следующих ПК: Специалист std(реал) и MX2(реал), RK-86(реал), Апогей, Партнер-01, Galaksija(реал), Orion(реал), TRS-80(реал), ЮТ-88.

поддерживает три базовых аппаратных интерфейса SD: HWM_PVV, msx, n8vem, и их производные варианты.

поддерживает SD и SDHC карты, те карты с размером больше 4ГБ.

поддерживает следующие базовые директивы:
- CD ИМЯкаталога - перейти в каталог с указанным именем;
- DIR - вывести список файлов и каталогов;
- ИМЯфайла.RKX(RKS для std, RKR для RK-86, GTP для Галаксии, RKO - Орион, CAS - TRS-80 ) запустить файл, при этом расширение можно не набирать, будет произведена автоподстановка;
- 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 - перейти в монитор, из которого был запущен SDOS;
- I - запуск повторной инициализации карты;

только Galaksija:
- WB ИМЯфайла.РАСШИРЕНИЕ - запись BASIC программы в файл на SD в формате GTP;

только СпецециалистМХ:
- L ИМЯфайла.РАСШИРЕНИЕфайла - прочитать данные файла формата RKX с SD в RAM диск МХа; пример: L TEST.BIN - читает файл TEST.BIN в память начиная с адреса 0х0000 и до адреса его длины, создает в RAM диске файл TEST.BIN с стартовым адресом и размером взятыми из 4х первых байт файла на карте, при том, что имя файла в хеадере отсутствовало (в 5м байте 0хЕ6).
Или: L TEST.BIN - читает файл TEST.BIN в память начиная с адреса 0х0000 и до адреса его длины, создает в RAM диске файл TEST_MX.HEX, с стартовым адресом и размером считанные из 4х первых байт файла на карте, и именем файла в хеадере TEST_MX.HEX.
- S ИМЯфайлаНаRAMдиске.РАСШИРЕН ИЕ,ИМЯфайлаНаSD.РАСШИРЕНИЕ - записать данные файла из RAM диска МХа на SD в формате RKX; пример: S TEST.BIN - читает файл TEST.BIN из RAM диска в память начиная с адреса 0х0000 и до адреса его длины, после записывает его на SD карту в существующий файл с таким же именем TEST.BIN, размер не изменяется, формат RKX!
Или: S TEST.BIN,TEST_MX.HEX - читает файл TEST_MX.HEX в память начиная с адреса 0х0000 и до адреса его длины, после записывает его на SD карту в существующий файл с именем TEST.BIN.

только Orion:
- L ИМЯфайла.РАСШИРЕНИЕфайла - прочитать данные файла формата RKO с SD в RAM диск; пример: L TEST$.RKO - читает файл TEST$.RKO в память начиная с адреса 0х0000 и до адреса его длины, создает в RAM диске файл TEST$ с именем, стартовым адресом и размером взятыми из хеадера RKO файла на карте.

- S ИМЯфайлаНаRAMдиске,ИМЯфайла НаSD.РАСШИРЕНИЕ - записать данные файла из RAM диска на SD в формате RKO. пример: S TEST$,TEST1$.BIN -читает файл TEST$ из RAM диска в память начиная с адреса 0х0000 и до адреса его длины, после записывает его на SD карту в существующий файл с таким же именем TEST1$.BIN, размер не изменяется, формат RKO!.

При выводе каталога по DIR печатается имя, расширение файла и его размер(что бы можно было использовать директивы R и W), а на директории пишется DIR в поле размера файла.

При запуске файла пишется стартовый и конечный адреса куда будет считан файл с карты.

Нажатие любой клавиши (пробела) при выводе по DIR приостанавливает вывода списка файлов.

Для СпециалистМХ2 сделана возможность запускать не только файлы с расширением RKX, но и RKS, для чего в том же каталоге, где находится RKS файл нужно поместить файл монитора M2_C000.MON (https://zx-pk.ru/threads/27418-rabota-s-sd-kontrollerom-na-spetsialiste_mkh2.html?p=993336&viewfull=1#post993336) (взят из проекта Vinxru). Кроме того, есть возможность загружать произвольные мониторы (https://zx-pk.ru/threads/27418-rabota-s-sd-kontrollerom-na-spetsialiste_mkh2.html?p=955214&viewfull=1#post955214).

И теперь масса ссылок, с упоминанием SDOS и SD интерфейса.

Началось все с этой (http://www.nedopc.org/forum/viewtopic.php?f=90&t=11446) темы по Специалисту с интерфейсом HWM (http://www.spetsialist-mx.ru/index32.html), и тогда я думал, что на этом все закончится, да не тут то было.
Первая (http://www.nedopc.org/forum/viewtopic.php?f=90&t=17331) попытка упорядочить информацию по SDOS в рамках Специалиста.

Версия (http://www.nedopc.org/forum/viewtopic.php?f=93&t=16296#p132181) для РК-86 с интерфейсом HWM_PVV, и там же, дале с интерфейсом RK86_WW55_SD_HWM_PVV,
далее Апогей (http://www.nedopc.org/forum/viewtopic.php?f=93&t=16296&start=15#p145339) с оригинальным вариантом подключения карты, аналог интерфейса SD_n8vem. В этих вариантах SD карта подключена совместно с ROM диском, не исключая его!
Партнер-01 (https://zx-pk.ru/threads/29755-partner-01-01-modul-sd-karty.html?p=987692&viewfull=1#post987692) .

Версия для Галаксии (http://www.nedopc.org/forum/viewtopic.php?f=71&t=9407&start=225#p143285) с интерфейсом HWM_PVV и с интерфейсом SD_n8vem (http://www.nedopc.org/forum/viewtopic.php?f=71&t=9407&start=270#p145367) .
Практическая реализация в этой (https://zx-pk.ru/threads/29446-galaksiya-%28plyus%29-sborka-i-nastrojka.html) теме.

Ют-88 (https://zx-pk.ru/threads/24628-yut-88-vneshnie-nakopiteli.html?p=974013&viewfull=1#post974013) с интерфейсом SD_n8vem.

Орион (https://zx-pk.ru/threads/28704-sd-karty-i-kontrollery-realizatsii-fat.html?p=953635&viewfull=1#post953635) .

TRS-80 (http://www.nedopc.org/forum/viewtopic.php?f=71&t=17688#p143514) .


Схемы интерфейсов:

HWM_PVV на ИР8 и ИР9 (http://www.nedopc.org/forum/viewtopic.php?f=90&t=11446&start=75#p134316) или на портах ВВ55 (http://www.nedopc.org/forum/viewtopic.php?f=93&t=16296&start=15#p134110) .
HWM_PVV на ИР24 (http://www.nedopc.org/forum/viewtopic.php?f=90&t=11446&start=75#p134101) или здесь (http://zx-pk.ru/attachment.php?attachmentid=64558&d=1520701260) или здесь (https://zx-pk.ru/threads/29892-sd-karta-i-sdos-dlya-8i-bitnykh-pk.html?p=1020948&viewfull=1#post1020948)
HWM_PVV на ИР13 (http://www.nedopc.org/forum/viewtopic.php?f=71&t=9407&start=285#p148843)

SD_n8vem (http://www.nedopc.org/forum/viewtopic.php?f=93&t=16296&start=15#p145339) или здесь (http://www.nedopc.org/forum/viewtopic.php?f=71&t=9407&start=270#p145367) или здесь (https://zx-pk.ru/threads/28704-sd-karty-i-kontrollery-realizatsii-fat.html?p=946077&viewfull=1#post946077) или здесь (http://www.nedopc.org/forum/viewtopic.php?f=96&t=18820&start=45#p144089)

SD_msx (http://msx.hansotten.com/uploads/fyfiles/MMC_Drive.zip) я на реале не проверял, только в emu, но изначально код b2m был реализован для работы именно с этим интерфейсом и он использовался на реале в плис.

Хочу дополнить еще один момент. Согласно спецификации, при инициализации SD карты нужно использовать частоту тактирования SD_CLK не выше 400кГц, а по завершению инициализации переключаться на более высокую. Но как показала практика, современные карты спокойно инициализируются и работают на частоте 2-4МГц, что позволяет отказаться от переключателя скорости тактирования. Переключение скорости поддерживается только в интерфейсе на ПЛИС HWM и в первом варианте интерфейса HWM_PVV на дискретах.

zebest
24.12.2018, 15:51
TRS-80(реал)
ИстЕны ради - все же для реализации TRS-80 в ФПГА, не только лишь все это реАлом посчитают)) Но противопоказаний для реального реала быть особо не должно.

PVV
24.12.2018, 23:10
ИстЕны ради - все же для реализации TRS-80 в ФПГА, не только лишь все это реАлом посчитают)) Но противопоказаний для реального реала быть особо не должно.
Это гораздо более реал, чем проверки в эмуляторе :).

Немного продолжу...
Исходники SDOS открыты, и их можно скачать почти по каждой из ссылок выше.
SDOS написана в мнемониках ВМ80, и без проблем запускается на Z80.
Каждый раз при добавлении какого либо функционала и новых платформ (ПК) я увеличивал номера версий и подверсий. Актуальная на данный момент версия 8.9, но практически это 8.6 (http://www.nedopc.org/forum/viewtopic.php?f=71&t=9407&start=255#p144429), тк 8.7 - 8.9 это лишь сборки под разные платформы с подвариантами SD интерфейса, и на этом этапе я понял, что так быть не должно, конечный пользователь сам должен собирать SDOS под свои требования и это не должно влиять на версию системы.
Соответственно, я хочу объяснить, как собирается, конфигурируется или портируется на другую платформу SDOS.

Первое, нужно определиться с размещением в адресном пространстве целевой платформы. Нужно определить, где будет размещаться как код самой SDOS, в ОЗУ или ПЗУ, так и ее служебная область 2048-256=1792 байт и в каких адресах. Нужно выбрать такие адреса, которые для большей части программ не задействуются. Здесь нужно выбрать оптимальный компромисс. Если на целевой платформе существует внешний РОМдиск, то достаточно логично разместить SDOS там, и переписывать его в ОЗУ штатными средствами. (При портировании на новую платформу на первом этапе можно выбрать практически любые доступные адреса, и лишь на финишном этапе определить оптимальное размещение в памяти). Если на целевой платформе есть Свободное место в адресном пространстве, в котором можно разместить ПЗУ (пример Специалист и Галаксия), то SDOS размещается в таком участке, и работает сразу из ПЗУ и нужно лишь выбрать доступный участок под служебную область.
Второе, пересекается с первым, это выбор адресов для портов SD интерфейса. Нужно два адреса, это могут быть как адреса в пространстве памяти, так и адреса в IO портах. Для тех платформ, в которых существует внешний РОМдиск, проблема выбора может упроститься. По ссылкам выше есть два варианта такого подключения. Иначе нужно опять искать варианты и компромиссы.
Третье, выбрать вариант SD интерфейса. HWM_PVV - это самый быстрый и, в добавок, его программная поддержка самая компактная, что на общем фоне компактной SDOS(напомню ~2КБ всего!) весьма заметно. 7 корпусов 555 серии (https://zx-pk.ru/threads/29742-minimalnyj-kontroller-microsd-dlya-uknts-s-nebolshim-zagruzochnym-pzu.html?p=988979&viewfull=1#post988979) . msx - более медленный и программная поддержка +150 байт к коду, а по числу корпусов примерно как предыдущий вариант, по тому я его особо не рассматриваю. n8vem - самый медленный, +250 байт к коду, но очень прост в реализации, а по тому, вполне имеет право на рассмотрение. Для наших ретроПК даже скорость n8vem не столь плоха (http://www.nedopc.org/forum/viewtopic.php?f=71&t=9407&start=270#p145380) , тк в большей части файлы имеют не большой размер, что не критично и все лучше, чем просто магнитофон. Любые подварианты этих интерфейсов, к примеру, подключенные через ВВ5, будут соответственно чуть медленнее и будут чуть раздувать программный код.
На этом этапе, для уже существующих вариантов платформ, нужно лишь правильно определить в дефайнах нужные возможности и запустить сборку bat файлом.
Если же нужно портировать SDOS на новую платформу, то тут нужно провести определенные изыскания.
В файле defs.inc нужно сделать секцию с новой платформой, в которой нужно определить такие функции (пример от РК-86):
GETC EQU 0F803H <-ожидать символ с клавиатуры
PUTC EQU 0F809H <-вывести один символ на экран
PRINT EQU 0F818H <-вывести строку на экран
PRHEX EQU 0F815H <-вывести число в HEX формате
IfKeyPress EQU 0F81BH <- проверка ввода с клавиатуры, не зависающая в проверке
входные и выходные параметры этих функций можно посмотреть, к примеру, здесь (http://www.danbigras.ru/RK86/Programm/CPUTbl6.html)
из них основными являются первые две, тк PRINT делается из PUTC, PRHEX как опция, есть уже в коде самой SDOS и использует PUTC, а IfKeyPress можно за комментировать и не использовать (не будет функции приостановки вывода списка файлов по DIR по нажатию любой клавиши, забыл об этой возможности упомянуть в первом сообщении).
GETC и PUTC на целевой платформе так или иначе реализованы, значит нужно их формат вызова подстроить под требуемый SDOS (так было сделано при портировании на Галаксию и TRS-80).

Вот какие дефайны есть в файле defs.inc и что они означают (наличие точки с запятой ';' в начале строки означает исключение этого дефайна, а отсутствие, включение):
#define SDOS_VER "SDOS_V8.9N" - в v8.9 вынес строку с текстом приветствия SDOS в этот дефайн

#define SD_DBG_PRINT0 - тоже в v8.9 разделил один дефайн SD_DBG_PRINT на три, для
#define SD_DBG_PRINT1 - более гибкой подгонки размера SDOS, что очень актуально при сборке компактного кода
#define SD_DBG_PRINT2 - для размещения в ПЗУ на 2КБ (все эти печати 'съедают' до 100 байт кода).

;#define SD_HWM_PVV - это группа из 8 дефайнов определяет тип SD интерфейса для сборки, соотв. HWM_PVV
;#define SD_msx - msx
;#define SD_n8vem - n8vem
;#define RK86_WW55_SD_HWM_PVV - это вариант HWM_PVV подключенный на портах ВВ55, проверялся на реальном РК-86, по тому такое название
;#define RK86_WW55_SD_n8vem ; APOGEE and RK86 memmap - это вариант n8vem подключенный на портах ВВ55, где ВВ55 размещается в адресном пространстве, а не портах, собирался но еще не проверялся на реале, для РК86
#define STD_WW55_SD_n8vem ; Specialist - это полная копия(!?!) RK86_WW55_SD_n8vem варианта, собирался но не проверялся на реале, для Специалиста (Std) - в следующей версии сведу в один дефайн WW55_ADDR_SD_n8vem
;#define UT88_WW55_SD_n8vem ; ports IN - OUT - это вариант n8vem подключенный на портах ВВ55, где ВВ55 размещается в портах IO, собирался но не проверялся на реале, для ЮТ-88 - в следующей версии дефайн переименую в WW55_IO_SD_n8vem
;#define GAL_AY_SD_n8vem - это вариант n8vem подключенный на портах AY3-8910(YM2149F), где AY размещается в портах IO, проверялся на реальной Галаксии - в следующей версии дефайн переименую в AY_IO_SD_n8vem

;#define FAT12_ON - включение поддержки FAT12 на карте, актуально для карт или раздела на карте меньше 32МБ, для экономии размера кода обычно выключен
#define FAT16_ON - включение поддержки FAT16 на карте, является основным

#define RWR - включение поддержки записи на карту, занимает 200-300 байт

;#define UT88 - это группа из 8 дефайнов определяет тип платформы, для которой собирается SDOS. ЮТ-88
;#define APOGEE - Апогей
;#define RK86 - РК-86
#define STD - Специалист
;#define MX2 - СпециалистМХ2 - актуально для оригинального SD_HWM_PVV, там задействуется бит сигнализирующий 'занятость' SPI автомата BUSY (во всех 'моих' вариациях этого интерфейса я выбросил этот бит, тк зная скорость работы ЦП с SD интерфейсом можно NOP_ами, буквально от 1 до 3 штук, подобрать нужную задержку)
;#define GAL - Галаксия
;#define ORION - Орион
;#define TRS80 - TRS80

дальше идут секции включаемые дефайнами типа платформы, на примере от РК-86:
;================================================= =========
#ifdef RK86
GETC EQU 0F803H - ожидать символ с клавиатуры
PUTC EQU 0F809H - вывести один символ на экран
PRINT EQU 0F818H - вывести строку на экран
PRHEX EQU 0F815H - вывести число в HEX формате
IfKeyPress EQU 0F81BH - проверка ввода с клавиатуры, не зависающая в проверке
SD_DATA_PORT EQU 0d000H - адрес, по которому размещается SD интерфейс, его порт данных
SD_CONF_PORT EQU SD_DATA_PORT+1 - адрес, по которому размещается SD интерфейс, его порт конфигурации
SD_DATA_PORT_WW55 EQU 0a000H - адрес, по которому размещается SD интерфейс, его порт ВВ55 для вариантов SD с ВВ55
#define SD_ROM - актуально только в РК-86, если не выбран, то по адресу F000 стоит jmp F800h
#ifdef SD_ROM
START_ADDR EQU 06000H - стартовый адрес для размещения кода самой SDOS (который читается из ROMdisk РК)
#else
START_ADDR EQU 0f000H - стартовый адрес для размещения кода самой SDOS, если он записан в ПЗУ
#endif
BUF EQU 06900h - стартовый адрес для размещения служебной области (буфферов для работы с fat), занимает 2048-256=1792 байт
#endif
;================================================= =========

Исходные коды SDOS находятся в нескольких файлах:

defs.inc - здесь хранятся все дефайны описанные ранее
dos_rk.asm - основной файл, в нем реализация всего интерфейса взаимодействия SDOS и пользователя
это 6 файлов, для каждой из поддерживаемых платформ, в которых реализована функция чтения и запуска файла на выполнение, плюс специфичные возможности для определенной платформы (работа с РАМдиском в СпециалистМХ2 или Орион, запись basic файлов в Галаксии).
При сборке используется файл той платформы, дефайн которой определен в файле defs.inc. Подключение файла идет в файле dos_rk.asm.
При добавлении новой платформы нужно будет добавить такой файл.
dos_gal_RUNF.inc
dos_mx_RUNF.inc
dos_orion_RUNF.inc
dos_rk_RUNF.inc
dos_std_RUNF.inc
dos_trs_RUNF.inc

sd_proc.inc - здесь все функции для работы с самой SD картой
fs_proc.inc - здесь все функции для работы с файловой системой fat12 и fat16.
кроме вышеописанных файлов в архиве с SDOS еще есть:
asm_std.cmd - текстовый BAT файл, в котором описаны опции сборки SDOS, вот его и надо запускать для сборки после конфигурирования всех дефайнов.
ReadMe.txt - текстовый файл, с очень кратким описанием возможностей SDOS
TASM.EXE - это ассемблер, которым все и собирается
TASM85.TAB - это служебный файл ассемблера

Весь процесс сборки для пользователя заключается в конфигурировании дефайнов в файле defs.inc и запуска на выполнение asm_std.cmd. В результате получится требуемый файл SDOS.BIN.

Всегда возникает желание проверить, что же получилось. И в этом громадным подспорьем становится эмулятор emu (http://bashkiria-2m.narod.ru/). Этот эмулятор поддерживает все три типа SD интерфейсов, и их подвариантов. Нужно искать по каталогу config файлы с таким содержимым и делать по аналогии нужную кофигурацию:
для HWM_PVV:
mm2 : MemMap2 {
map[00]=sdcard.data8
map[01]=40
}

для msx:
mm2 : MemMap2 {
map[00]=sdcard.ss
map[01]=sdcard.data
}

для n8vem, на портах ВВ55:
miso : Register {
read[0]=sdcard.miso
read[1]=sdcard.miso
read[2]=sdcard.miso
read[3]=sdcard.miso
read[4]=sdcard.miso
read[5]=sdcard.miso
read[6]=sdcard.miso
read[7]=sdcard.miso
}

appmx : MemMap2 {
map[0]=romdisk.data
map[1]=miso
}

app : K580ww55 {
portA=appmx
portB=romdisk.lsb
portC=romdisk.msb
portC[0]=sdcard.mosi
portC[5]=sdcard.sclk
portC[E]=sdcard.ss
portC[7]=appmx.offset
}

MM
27.12.2018, 17:33
Не будет ли возможности опубликовать фрагменты текста подпрограмм для работы флеш-карточки с ВВ55А на Бейсике - "Чтение блока № хххх в адрес yyyy" и "Запись блока № хххх из адреса уууу" ?
Быстродействие М-ЭВМ - порядка 500 т. рег-рег.

Имеется ввиду блоки по 512 байт, начиная, например, с блока №000000.

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

И еще вопрос - применяются только классические карты микроSD ( например, 2 Гбайт ), или подойдут и microSDHC ( 2 Гбайт ) ?

PVV
27.12.2018, 22:10
Не будет ли возможности опубликовать фрагменты текста подпрограмм для работы флеш-карточки с ВВ55А на Бейсике - "Чтение блока № хххх в адрес yyyy" и "Запись блока № хххх из адреса уууу" ?
Быстродействие М-ЭВМ - порядка 500 т. рег-рег.

Имеется ввиду блоки по 512 байт, начиная, например, с блока №000000.

Это я не понял, и при чем здесь Бейсик? Все написано на asm от 580ВМ80.


И еще вопрос - применяются только классические карты микроSD ( например, 2 Гбайт ), или подойдут и microSDHC ( 2 Гбайт ) ?
Поддерживаются и классические карты SD и микроSD, которые до 2ГБ включительно и microSDHC, которые от 4ГБ и до 32ГБ. С оговорками.
В FAT16 можно отформатировать раздел не более 4ГБ, соответственно для карт больше 4ГБ нужно делать один первичный (http://www.nedopc.org/forum/viewtopic.php?f=71&t=9407&start=225#p143300) (обязательно именно первичный!) раздел на 4ГБ, а остальное сейчас не используется. (задел на будущее, можно доработать SDOS до 4х таких разделов)

MM
27.12.2018, 22:28
и при чем здесь Бейсик?
Для переноса на DEC-16 бит машинки типа ДВК, УКНЦ, БК, НЦ-8010 и моложе.

Или в блок-схемах из школьного учебника по информатике :
https://ru.wikipedia.org/wiki/%D0%91%D0%BB%D0%BE%D0%BA-%D1%81%D1%85%D0%B5%D0%BC%D0%B0

PVV
27.12.2018, 23:00
Для переноса на DEC-16 бит машинки типа ДВК, УКНЦ, БК, НЦ-8010 и моложе.
Или в блок-схемах...
Это весьма объемный труд, я на описание возможностей SDOS еле себя сподвиг :), а это...
Фактически, это означает взять asm код и откомментировать его так, что бы получилось словесное описание алгоритма. Что есть
"Чтение блока № хххх в адрес yyyy" и "Запись блока № хххх из адреса уууу" - А инициализация карты нужна? А FAT какой то на карте будет?
Как начало блок-схем, есть код на Си, дальше по ссылке (https://zx-pk.ru/threads/29742-minimalnyj-kontroller-microsd-dlya-uknts-s-nebolshim-zagruzochnym-pzu.html?p=989013&viewfull=1#post989013), его можно на Бейсик переложить. Непонятные моменты я подскажу. На ВВ55 какой тип SD интерфейса видится?

MM
27.12.2018, 23:33
А FAT какой то на карте будет?
Пока - никакой. Каталоги ОС RT-11 - пока 8 томов по 32 метра. Если раздобуду руководства ( на Русском языке с подписями ) по RT-11 V5.6 1992 г. ( что маловероятно ) - то ~20 томов по 32 метра ( 640 Мбайт ). Можно сделать драйвера-дублеры ( штук так ~пяток, с разными именами ) - каждый по ~640 Мбайт.

Нужен собственно железный алгоритм шевеления 3 шт. выводов ВВ55А - для чтения 512 байт, и записи 512 байт ( т.е. блоков данных ).
А софтовая мишура типа поддержки каталогов и т.п. - это есть в самой RT-11.

Насчет инициализации ( с завода-изгоовиеля карты ) - я думаю нагло её прописывать Нулями, заодно и к/с секторов придет в норму.

Тип интерфейса на ВВ55А - 2 проволоки на выход с ВВ55А, 1 проволока на вход.
Главное - по-проще, скорость вторична.

Насчет понимая "С" - я 30 лет назад в институте видал такую брошуру. И даже ,вероятно, прочел...

L Juriy
04.01.2019, 10:08
PVV, В версии 8.9N в модуле SD_proc.inc есть кусок кода в котором проверяется необьявленная переменная.
Похоже на ошибку,Этот кусок НИКОГДА не будет асемблирован.
;
#ifdef SD_RK86_WW55_SD_HWM_PVV
CALL SD_OFF
MVI B,10h
CALL SD_FIN
DCR B
JNZ $-4
#endif
или это так задумано.

PVV
04.01.2019, 10:37
Ни какого криминала не вижу, о чем речь? Какая необьявленная переменная? Если речь об этой строчке
JNZ $-4
то, это лишь переход на адрес на 4 меньше чем текущий.

HardWareMan
04.01.2019, 10:50
PVV, он скорее всего говорит за SD_RK86_WW55_SD_HWM_PVV.

PVV
04.01.2019, 11:27
PVV, он скорее всего говорит за SD_RK86_WW55_SD_HWM_PVV.
Точно! должно быть просто RK86_WW55_SD_HWM_PVV !

L Juriy
04.01.2019, 11:27
SD_RK86_WW55_SD_HWM_PVV
Вот эта.

Vital72
12.04.2019, 17:34
Автор! Никогда не сохраняй рисунки в формате JPG!

HardWareMan
12.04.2019, 20:25
Vital72, что не так с жыпегом?

Vital72
12.04.2019, 20:54
правда надо объяснять? jpg не предназначен для рисунков с резким цветовыми переходами, или вам приятно смотреть на размытые линии и шрифт с артефактами? мне нет.
используйте jpg только для фотографий, где градиентные переходы, а для рисунков и картинок с ограниченным количеством цветов -- png

68749

HardWareMan
13.04.2019, 15:23
Vital72, тем более не понятно, что не так с жыпегом для рисунков?
https://jpegshare.net/images/db/a5/dba540f80b78e8f5ac86fb3f398600c1.jpg

PVV
04.05.2019, 21:56
Проверил работу SD интерфейса на Апогее (http://www.nedopc.org/forum/viewtopic.php?f=93&t=16296&start=30#p150553). Включается в его стандартный разъем расширения, из ПЗУ вычитывается код SDOS, а, затем, используя эту ПЗУ идет работа с картой.
https://i.ibb.co/9n3jJkf/IMG-20190504-210216.jpg (https://ibb.co/Zd1C3pw)
https://i.ibb.co/0B9n5z7/IMG-20190504-210235.jpg (https://ibb.co/DGM1djJ)
чтение 25КБ около 15с, что для такой схемы очень даже и не плохо.

PVV
19.07.2019, 23:48
В добавок к перечисленным выше схемам SD интерфейсов хочу добавить еще один вариант схемы, подсмотренный здесь (http://s100computers.com/My%20System%20Pages/8080%20CPU%20Board/8080%20CPU%20Board.htm). Весь SD интерфейс получается на 5 корпусах. Программно полностью совместим с вариантом SD_HWM_PVV.
https://i.ibb.co/vvw0HPp/SDnew.png
как оказалось эту схему можно еще упростить без ущерба функционалу:
https://i.ibb.co/7VLY1CZ/SDnew1.png

Error404
01.08.2019, 11:49
Программно полностью совместим с вариантом SD_HWM_PVV.


Упоминалось что недавно пришлось доработать обработку CMD9 (и вроде CMD10 ?). Код SD-OS с этими правками тоже разместите пожалуйста.

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

Вот это:


исходники здесь - http://www.nedopc.org/forum/viewtopi...rt=240#p143547

ведёт на страницу где никаких вложений нет. Также, nedopc менее посещаемый и менее структурированный ресурс, например там нет правила "первого поста". Все что я размещал там, теперь не найти. :)
Предлагаю таки сделать репку на GitHub (gitlab). ИМХО давно пора.

PVV
01.08.2019, 13:49
Упоминалось что недавно пришлось доработать обработку CMD9 (и вроде CMD10 ?). Код SD-OS с этими правками тоже разместите пожалуйста.

Как я понимаю, речь об этом (http://www.nedopc.org/forum/viewtopic.php?f=96&t=18820&start=120#p151218). К SDOS это не применимо и не используется. Это актуально для msx применительно к прошивке NEXTOR, тк в ней встроена утилита fdisk для разметки и форматирования карточки. Исходник драйвера SD карты для NEXTOR я выложу там чуть позже, надо его 'облагородить'.

ведёт на страницу где никаких вложений нет.
действительно, странная ссылка, тем не менее, исходник актуальной версии SDOS выложен в этой ветке, в третьем сообщении.

Предлагаю таки сделать репку на GitHub (gitlab). ИМХО давно пора.
Да, Shaos (http://www.nedopc.org/forum/viewtopic.php?f=71&t=9407&start=135#p143799) уже пару раз мне на подобное намекал:), но я пока к этому не готов.

zx_
01.08.2019, 14:02
в sdos с записью вторая пзу почти пустая, может расширить возможности sdos ?
pipe как в rk-dos
к примеру-)

shapipovo
28.08.2019, 06:48
Получил от PVV плату, и вот какая у меня ерунда получается.
https://yadi.sk/i/UQSdfaw2zSWn-w
Грешу на ВГ75, хотя все тесты проходят.

PVV
28.08.2019, 08:16
Картинка больше похожа на проблемы с питанием, ВГ75 здесь ни при чем. Какое напряжение приходит на плату SD адаптера? В моменты работы с картой потребление возрастает. Можно попробовать добавить электролит по питанию прямо на плате адаптера 100-500мкф, или другой блок питания, лучше более мощный.

shapipovo
31.08.2019, 11:28
Кондер не помог, питание на ПЗУ 4,9982в. Фото с другого домашнего Апогея
69914

PVV
31.08.2019, 23:34
По последнему фото мало что понятно.
Это только графические артефакты или комп виснет?
Программы загружаются, хотя бы самые маленькие?
По картинке видно, что на карте много различных файлов, в том числе с длинными именами. Можно проверить работу с чистой картой, полностью отформатированной, на которой будет записано только несколько файлов (до десятка) в формате имени 8+3?

shapipovo
02.09.2019, 03:05
Мой глюк. Файлы брал из РОМа, а там есть файлы с именами больше 8 знаков. Хотя и такие иногда проходят. Выйду на работу, тогда более тщательно проверю.

PVV
28.11.2019, 22:20
Добавил здесь (https://zx-pk.ru/threads/29892-sd-karta-i-sdos-dlya-8i-bitnykh-pk.html?p=1020948&viewfull=1#post1020948) упрощенный вариант схемы SD интерфейса. Схема проверена в железе.

Кроме того, в протеусе проработан вариант схемы SD интерфейса, сдвиг данных в которой вызывается не только записью(все предыдущие схемы), но и чтением! Те это, практически, все варианты реализаций SD интерфейсов в больших плис(Zконтроллер,...), с которым z80 может работать своими командами циклического, блочного, чтения и записи, LDIR, INIR и тп.
https://i.ibb.co/M6PFgYG/SDnew2.png

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

Для подключения SD карты одно из необходимых требований, это выделение в адресном пространстве двух адресов для SD интерфейса. Недавно в голову пришла мысль, а что, если карту подключать на ножки, уже имеющиеся в ПК?
Для подключения SD карты нужно 4е ножки, один вход и три выхода. Все наши 'маленькие' ПК имеют магнитофонный интерфейс, те один вход и один выход уже есть. Дальше практически у всех есть выход звука, еще один выход, уже два. Остается найти еще выход, и, еще часто имеется выход для управления светодиодом раскладки клавиатуры (Рус\Лат), три, вот и все, что нам нужно!
Используя эти ножки я собрал SDOS для Специалиста используя клавиатурную ВВ55 с перечисленными выше сигналами. Проверка в emu показала работоспособность этой идеи. Да, скорость такого интерфейса низкая, но выше, чем магнитофон, и сам магнитофон и не отменяется, если использовать переключатель. Эта идея будет работать на РК подобных машинах, Орионе, ZX, msx... Остается найти место под 2КБ кода SDOS и 2 КБ ОЗУ.

PVV
11.03.2020, 23:15
На днях, совместно с Дмитрий2012, был проведен эксперимент по замене типа носителя в SDOS с SD карты на CF в режиме IDE. Эксперимент проводился на ОрионПро (https://zx-pk.ru/threads/24285-orion-pro-softvernye-dela.html?p=1049907&viewfull=1#post1049907) к которому подключен интерфейс NemoIDE. Кроме этого был доработан функционал SDOS для Ориона, что бы была возможность запускать не только RKO, но и ORD и BRU файлы.

Improver
17.02.2022, 16:13
Решил попробовать драйвер на FAT16 из SDOS для НЖМД на Векторе06ц, написал свою небольшую тестовую программку, подцепил библиотеки для IDE -- по каталогам ходит, файлы открывает, но, оказывается, записывать он умеет только в имеющиеся файлы, и в пределах их размеров. :(
PVV, подскажите, Вы не планируете сделать полноценную запись файлов? Т.е. хотелось бы иметь возможность создать новый файл и сбросить в него данные. Или вот ещё нужная функция -- удалить файл, занятые им кластеры пометить, как свободные. По сути, это всё умеет делать даже обычная ардуина с картридером...

PVV
17.02.2022, 20:24
Полноценную запись файлов интегрированную в SDOS делать не планирую. На текущий момент SDOS минимально самодостаточна.
Основная 'фишка' SDOS - её размер.
Вообще SDOS надо рассматривать не как ОС, а как загрузчик полноценной ОС с несколько расширенным функционалом.
Весь дополнительный функционал можно реализовать в виде 'внешних' команд. Как аналог реализация такого в linux. Создаем в корневом каталоге папку SYSBIN, и уже в этой папке размещаем исполняемые файлы del, copy, mkdir, create и тп. Писать же эти команды уже не обязательно на asm, а на любом высокоуровневом языке, по типу Си, можно. Место в ОЗУ наших 'маленьких' ПК для этих 'внешних' команд в данном случае легко организовать имеющимся в SDOS функционале. Для этого в каталоге SYSBIN держим файл TMP.DAT размером, допустим 32КБ. Перед загрузкой 'внешней' команды пишем в этот файл содержимое ОЗУ, в это место загружаем команду, а по завершению восстанавливаем ОЗУ из нашего темп файла. Конечно, даже для этого в код SDOS нужно будет внести правки, но они гораздо проще и не столь объемные по коду чем все эти del, copy, mkdir, create...
Начинать эту работу с нуля желания и времени нет, но подключиться в процессе вполне смогу.

Improver
18.02.2022, 12:16
Полноценную запись файлов интегрированную в SDOS делать не планирую. На текущий момент SDOS минимально самодостаточна.Ок, насчёт этого не возражаю. :)
У меня была идея добавить поддержку FAT16 в одну из Векторовских операционок, и только для жёсткого диска, возможно даже в виде внешнего модуля-драйвера, т.к. применяемое там разбиение НЖМД на кучу дискеток не очень удобно, но без функций создания и записи новых файлов это будет неполноценная замена... Как вариант, на первом этапе можно на FAT-диске насоздавать необходимое количество файлов "DISKETA001", "DISKETA002" и т.п., и использовать их, как дискеты, но, как я понял, программа записи в SDOS не умеет писать данные в произвольное место файла, только с его начала. Это ведь так? Значит понадобится как-то вычислять их расположение и писать данные на диск напрямую, мимо ФС... Да и такое решение усложнит ДОС, и не облегчит обмен файлами с большими ПК.


Для этого в каталоге SYSBIN держим файл TMP.DAT размером, допустим 32КБ. ...С этим на Векторе проблем нет -- все существующие для него ОС, кроме одной забытой, требуют наличия электронного квази-диска на 256кб, там можно и хранить дополнительные утилитки, и даже запускать их прямо на нем, подменяя ОЗУ.


Начинать эту работу с нуля желания и времени нет, но подключиться в процессе вполне смогу.За это спасибо, делать что-то за меня не обязательно, а подсказать и посоветовать -- ценное предложение. :)

Не знаю, насколько далеко у меня пойдёт энтузиазм в этом направлении, но могу поделиться исходниками собранной мной на скорую руку первой тестовой программки для проверки работы Вектора с FAT, вот архив с исходниками и откомпилированным бинарником: 77035

Все обращения к DOS заменены на стандартный вызов через "CALL 5", подпрограммы для обращения к НЖМД использовал из МДОС Т-72 (https://zx-pk.ru/threads/9488-vektor-06ts-operatsionnye-sistemy.html?p=1108343&viewfull=1#post1108343), немного их модифицировав. Для экспериментов использовал образ карты SD3.IMG, взятый тут (http://www.nedopc.org/forum/viewtopic.php?f=90&t=17331).

Тестовая программка подключает диск, выводит RKX-файлы корневой директории, переходит в директорию MX, возвращается в корень, читает и пишет в файл "TESTMX.RKX" -- в общем, тестирует работу всех имеющихся функций FAT16.

И, кстати, я немного поправил подпрограмму чтения файла с FAT -- теперь не надо указывать размер чтения, он выставляется по размеру файла из ФС.

Error404
18.02.2022, 17:23
но без функций создания и записи новых файлов это будет неполноценная замена...


Вот тут еще посмотрите:
https://github.com/lmaurits/lm512

Тоже мини-ОС с минимальной поддержкой FAT16. Запись и удаление там есть, нету seek разве что (а было бы нелишне).

Improver
01.03.2022, 13:44
Промежуточная версия FAT16, в архиве откомпилированная версия и исходники (с моими часто неуместными комментариями): 77083

Теперь она умеет корректировать размер файла при записи до нуля и в большую сторону в пределах последнего кластера. Т.е., например, при исходном значении размера файла "SHAHMMX.RKX" в 6382 байта в него можно записать данные размером от 0 до 8192 байт, при этом размер файла в файловой системе будет скорректирован по количеству записанного. Данная процедура добавила к общему размеру FAT16 всего 185 байт по отношению к предыдущей версии, и это без особой оптимизации кода. :)

Далее нужно научить её дописывать кластеры, как в lm512 по ссылке Error404, и создавать новые файлы -- это как бы план-минимум.
И ещё, синхронизации первой и второй таблиц FAT пока нет, надо будет добавить и это, скорее всего в функцию сброса ФС.

Improver
05.03.2022, 09:32
Доделал в FAT16 запись в файл любого (доступного для 8-бит ПК) объёма данных, с корректировкой размера файла в записи директории и таблице FAT. Архив с тестовой программкой и исходниками: 77106

На данный момент FAT16 умеет читать данные в соответствии с размером файла и записывать данные в существующий файл с корректировкой его размера. Далее остались мелочи -- сделать создание и удаление файлов.

Вопрос есть, немного офтоп, но как можно почекать образ диска? Примонтировать его в линуксе могу, считать/записать файлы, а вот проверку файловой системы не смог запустить -- не понимает его fsck...

Error404
05.03.2022, 10:36
В TODO: крайне полезной была бы дополнительная функция получения в массив всех кластеров файла. Думаю что кластеров хотя секторов было бы удобнее (но их слишком много - слишком большой массив в памяти). Для чего это нужно: очень частый способ применения мини-FAT - хранение на ней образов дисков (SCL, ODI, KDI и подобных) и "монтирование" этих дисков в локальной BIOS стародавних ОС с этих ОС минимальной правкой. А для этого надо последовательно и произвольно ходить direct к секторам "образа диска" лежащего на FAT, желательно быстро - по этому самому массиву секторов/кластеров (мимо распутывания структур FAT).

Improver
05.03.2022, 13:39
В TODO: крайне полезной была бы дополнительная функция получения в массив всех кластеров файла.
Ничего сложного, как пример:

LXI D,RFILE ; ссылка на строку с именем файла (оканчивается нулём)
CALL F_OPEN ; открываем этот файл
JC NOFILE ; не открылось...
LHLD BNEXT ; читаем номер текущего кластера файла
LOOP: PUSH H ; сохраняем в стек
CALL FAT_N16 ; найти следующий кластер
JNZ LOOP ; повторять до последнего кластера
... ; в стеке список кластеров, далее делаем с ними то, что необходимо
NOFILE: ... ; тут, например, вывод ошибки "файл не найден"
Можно это всё загнать в отдельную функцию, если надо... :)

HardWareMan
05.03.2022, 15:46
Единственный минус - это то, что в стек они попадают в обратном порядке и если их оттуда извлекать, то не понятно, где конец, ведь счётчика элементов массива то нет. Однако, можно перед вызовом переназначать стек и конец определять по адресу вершины. В общем, есть над чем подумать.

Error404
05.03.2022, 16:00
Ну так-то еще и прерывания надо стопить в такой функции, а то при прерывании есть вероятность пропила памяти (если стеком фигачить прямо в целевой запрошенный массив)
Но это не принципиально, сохранение HL в массиве можно и изменить

Improver
05.03.2022, 16:07
Однако, можно перед вызовом переназначать стек и конец определять по адресу вершины.Тут есть ещё, как минимум, два варианта: сохранять указатель стека ДО и ПОСЛЕ и вычислять разнице количество записанных туда номеров кластеров, или можно просто предварительно кинуть в стек 0000h (или FFFFh -- кластеров с таким номером быть не может) и читать из стека до получения этого числа. :) Ну или модифицировать приведённый выше фрагмент и сохранять значения сразу в некий буфер в нужном порядке и с подсчётом их количества. В общем, это просто пример, там возможны вариации.

Error404
31.05.2022, 17:03
остались мелочи -- сделать создание и удаление файлов.


Как прогресс с мелочами? Не бросайте! Полезная либа получится. А там глядишь и fat32...

Improver
01.06.2022, 11:34
Как прогресс с мелочами?Отвлёкся немного от FAT в сторону CP/M, в попытке определиться, как всё это туда прикрутить, но там, оказалось, всё сложнее... В свободное время доделаю эти мелочи, не оставлять же на полпути? :)

Error404
02.06.2022, 13:27
Отвлёкся немного от FAT в сторону CP/M, в попытке определиться, как всё это туда прикрутить, но там, оказалось, всё сложнее... В свободное время доделаю эти мелочи, не оставлять же на полпути? :)

Тоже думал на тему скрещивания CPM с FAT. Вариант MSX-DOS не нравится тем что несовместим на уровне BIOS (а точнее разметки файловой системы) и не все ПО поэтому заработает. Пришел к выводу, что удобнее всего на FAT как файлы хранить "сырые" образы дисков CP/M внутри которых CP/M распутает структуры сама, и в ee BIOS как раз и будет "конвертор секторов" для такого доступа:


В TODO: крайне полезной была бы дополнительная функция получения в массив всех кластеров файла. Думаю что кластеров хотя секторов было бы удобнее (но их слишком много - слишком большой массив в памяти). Для чего это нужно: очень частый способ применения мини-FAT - хранение на ней образов дисков (SCL, ODI, KDI и подобных) и "монтирование" этих дисков в локальной BIOS стародавних ОС с этих ОС минимальной правкой. А для этого надо последовательно и произвольно ходить direct к секторам "образа диска" лежащего на FAT, желательно быстро - по этому самому массиву секторов/кластеров (мимо распутывания структур FAT).

Конечно, в такой образ CPM-файлы надо импортировать, а не просто прямо читать с FAT. Но и образов можно иметь много, и кидать их на флешку "как есть" (многое распространяется прямо в виде образов дисков)

Improver
02.06.2022, 16:43
удобнее всего на FAT как файлы хранить "сырые" образы дисков CP/M внутри которых CP/M распутает структуры сама, и в ee BIOS как раз и будет "конвертор секторов" для такого доступаДа, тоже думаю, что такой вариант будет проще прикрутить к СР/М. Но тут может потребоваться ещё одна функция для драйвера FAT: произвольное чтение и запись в файл. Сейчас пока этого нет, файлы либо читаются, либо пишутся из памяти целиком.


Но и образов можно иметь много, и кидать их на флешку "как есть" (многое распространяется прямо в виде образов дисков)Достаточно сложная задача получится, если учесть, что для этого нужно будет адресацию СР/М вида "трек / сектор(128байт)" переводить в кластеры, потом в физические секторы диска и читать/писать их по 512 байт через буфер. Но можно её существенно упростить, если не кидать файлы "как есть", а обеспечить их расположение в непрерывных областях, т.е. полное отсутствие фрагментации этих файлов, а также фиксированный размер образов. В этом случае будет достаточно знать первый сектор файла-образа на диске и читать/писать туда имеющимися уже в BIOS средствами. По сути, существующая реализация FAT уже имеет все функции для этого.

ivagor
02.06.2022, 17:04
Но можно её существенно упростить, если не кидать файлы "как есть", а обеспечить их расположение в непрерывных областях, т.е. полное отсутствие фрагментации этих файлов, а также фиксированный размер образов. В этом случае будет достаточно знать первый сектор файла-образа на диске и читать/писать туда имеющимися уже в BIOS средствами. По сути, существующая реализация FAT уже имеет все функции для этого.
b2m (автор FAT16 для 8080) использовал такой вариант в реализации Башкирии-2М на плис, если мне не изменяет память.

sergey2b
06.06.2022, 00:31
SD_msx я на реале не проверял, только в emu, но изначально код b2m был реализован для работы именно с этим интерфейсом и он использовался на реале в плис.

архив не доступен,
если у кого нибудь есть поделитесь пожалуйста

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

SD_msx я на реале не проверял, только в emu, но изначально код b2m был реализован для работы именно с этим интерфейсом и он использовался на реале в плис.

архив не доступен,
если у кого нибудь есть поделитесь пожалуйста

Руслан
27.03.2023, 19:43
Есть может прошивка с файловым менеджером вшитым, что бы удобней было игры загружать? В крайнем случае под is dos ??

worker_vl
06.02.2024, 14:56
Добрый день, дорогие товарищи!

Скажите, пожалуйста, у вас работают, заявленные в первом сообщении, директивы L и S, для Специалиста? У меня, и на то, и на другое, "NO FILE(S)". Версия SDOS 8.9N.

PVV
06.02.2024, 22:10
Добрый день, дорогие товарищи!

Скажите, пожалуйста, у вас работают, заявленные в первом сообщении, директивы L и S, для Специалиста? У меня, и на то, и на другое, "NO FILE(S)". Версия SDOS 8.9N.

Это означает, что SDOS собрана для обычного Специалиста, а директивы L и S применимы только к СпециалистМХ(2) (или для Ориона). Все зависит от определений #define при компиляции SDOS, Версия же 8.9N, по сути, определяет как раз возможный набор #define.