Важная информация

User Tag List

Страница 2 из 12 ПерваяПервая 123456 ... ПоследняяПоследняя
Показано с 11 по 20 из 113

Тема: SD-карты и контроллеры, реализации FAT

  1. #11
    Activist
    Регистрация
    20.11.2017
    Адрес
    г. Ростов-на-Дону
    Сообщений
    351
    Спасибо Благодарностей отдано 
    30
    Спасибо Благодарностей получено 
    85
    Поблагодарили
    50 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Тк sdOS здесь упоминалась, вставлю свои пять копеек, хотя это здесь offtop.
    Мои доработки sd_dos от b2m шли по двум направлениям, не считая доработки под 'железную' реализацию sd интерфейса.
    Первое это доработка командного интерфейса - под нужный мне ПК (изначально из РК-86 в Специалист/МХ, сейчас и другие ПК), - а так как мне хотелось не только запускать программы, но и загружать данные по нужным адресам без запуска (например прошивку ПЗУ для программатора) то я ввел команду чтения файла (R файл,...) в виде данных с указанием по какому адресу и сколько их сложить. Здесь возникло желание таким же образом данные сохранить(прочитанную программатором ПЗУ), что и было сделано, и чтение (R) превратилось в запись (W файл,...) только сектор надо было теперь не читать, а писать, и здесь переход ко второму направлению.
    Второе направление - работа с файловой системой и носителем данных. Добавление функции записи сектора с выполнением всех предшествующих этой записи действий по поиску требуемого файла и кластеров\секторов, которые этот файл занимает. В последствии, в целях экономии около полу сотни байт я исключил из кода поддержку FAT12(можно вернуть через define), оставив только FAT16, посчитав, что в реале карты меньше 32МБ врядли кто будет использовать.
    А вот FAT32 изначально у b2m не реализована, и, как по мне, это правильно, найдется ли для наших 8 битных ПК ПО с сумарным объемом более 2ГБ? Что же до карт размером более 2ГБ, то кто мешает создать на них раздел не более 2ГБ и отформатировать его в FAT16?

    еще больший offtop:

    Скрытый текст

    у меня давно крутится идея навеянная этим http://www.nedopc.org/forum/viewtopic.php?f=90&t=11548 только не копировать образ диска в отдельную память, а работать с файлами образов на самой SD карте, выполняя 'монтирование' этих образов в виде или сохранения двухбайтового указателя в ОЗУ ПК на первый сектор данных образа(при условии непрерывности файла, те отсутствия его фрагментации, что вполне можно обеспечить) или, сложнее, если файл допускает фрагментацию, то сохранения всех занимаемых им кластеров( а цепочка кластеров для файла образа диска в 800КБ, при кластере в 16КБ займет 100 байт ОЗУ ПК). Ну и соответствующим образом нужно доработать процедуры работы с такой 'виртуальной' дискетой хоть CP/M, хоть любой другой ОС, работающей с реальным дисководом... работать с таким образом, естественно, можно в режиме R/W.
    Если у кого есть к этому интерес, то надо создать новый топик и это обсудить, только я не знаю в каком разделе...
    [свернуть]

  2. #12
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,806
    Спасибо Благодарностей отдано 
    642
    Спасибо Благодарностей получено 
    1,773
    Поблагодарили
    1,023 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от PVV Посмотреть сообщение
    Что же до карт размером более 2ГБ, то кто мешает создать на них раздел не более 2ГБ и отформатировать его в FAT16?
    Даже если отформатировать SDHC (а "старых" карт объемом >2 Гб, насколько я знаю, не бывает) в FAT16 на 2 или 1 Гб, xsd ведь все равно не сможет с ней работать. Давно не интересовался, продаются ли еще "старые" SD, наверно продаются, но задача поддержки SDHC все равно актуальна.

    Цитата Сообщение от PVV Посмотреть сообщение
    найдется ли для наших 8 битных ПК ПО с сумарным объемом более 2ГБ?
    Почему обязательно для наших? Карта может использоваться сразу для нескольких компьютеров.
    Или наоборот, если независимо от объема данных на каждый компьютер (или семейство) выделять свою карту, то в наличии может не оказаться достаточно карт "старого образца", и при наличии SDHC не очень бы хотелось докупать еще старые карты.

    Наверно это оффтоп, но перечислю пожелания к xsd в порядке убывания важности (для меня):
    1. Поддержка SDHC
    2. Поддержка FAT32
    3. Поддержка фрагментированных файлов
    Последний раз редактировалось ivagor; 11.01.2018 в 08:50.

  3. #13
    Activist
    Регистрация
    20.11.2017
    Адрес
    г. Ростов-на-Дону
    Сообщений
    351
    Спасибо Благодарностей отдано 
    30
    Спасибо Благодарностей получено 
    85
    Поблагодарили
    50 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    Даже если отформатировать SDHC (а "старых" карт объемом >2 Гб, насколько я знаю, не бывает) в FAT16 на 2 или 1 Гб, xsd ведь все равно не сможет с ней работать. Давно не интересовался, продаются ли еще "старые" SD, наверно продаются, но задача поддержки SDHC все равно актуальна.
    как так не сможет работать?На али продается SD на 4ГБ старого типа, я себе такую купил. Вопрос поддержки SDHC лишь вопрос доработки функции init при инициализации карты, Error404 провел эксперименты с несколькими картами разных производителей, и выложил наработки, интегрировать эти наработки в существующий код достаточно легко.
    Цитата Сообщение от ivagor Посмотреть сообщение
    Наверно это оффтоп, но перечислю пожелания к xsd в порядке убывания важности (для меня):
    1. Поддержка SDHC
    2. Поддержка FAT32
    3. Поддержка фрагментированных файлов
    1 - надо потратить 30 минут времени и будет, кто займется тестированием?
    2 - сделать можно, но не вижу смысла, а код из текущего в 2КБ вырастет до 4х, как минимум, заниматься не хочу.
    3 - а разве есть эта проблема? все поддерживается.

  4. #14
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,806
    Спасибо Благодарностей отдано 
    642
    Спасибо Благодарностей получено 
    1,773
    Поблагодарили
    1,023 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от PVV Посмотреть сообщение
    как так не сможет работать?На али продается SD на 4ГБ старого типа, я себе такую купил.
    Да, ошибся (у меня самого таких карт нет), SD 1.1 м.б. до 4 Гб. Сам я такие карты сейчас уже покупать не буду, но это мои проблемы.

    Цитата Сообщение от PVV Посмотреть сообщение
    Вопрос поддержки SDHC лишь вопрос доработки функции init при инициализации карты, Error404 провел эксперименты с несколькими картами разных производителей, и выложил наработки, интегрировать эти наработки в существующий код достаточно легко.
    Цитата Сообщение от ivagor Посмотреть сообщение
    Спасибо за ссылку. Может соберусь перетащить инициализацию в xsd.

  5. #15
    Moderator
    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    4,577
    Спасибо Благодарностей отдано 
    61
    Спасибо Благодарностей получено 
    106
    Поблагодарили
    92 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от PVV Посмотреть сообщение
    как так не сможет работать?На али продается SD на 4ГБ старого типа, я себе такую купил. Вопрос поддержки SDHC лишь вопрос доработки функции init при инициализации карты, Error404 провел эксперименты с несколькими картами разных производителей, и выложил наработки, интегрировать эти наработки в существующий код достаточно легко.
    Там два места: init и позиционирование (это уже проще поправить). В картах MMC и SDC позиционирование осуществляется с точностью до байта (и поэтому 32-битной адресации хватает только на 4Gb), а в картах SDHC - c точностью до сектора (который не менее 512 байт), поэтому того же 32-битного адреса хватает адресовать до 2Тб. В коде это выражается в том, что при ините карты надо определить и запомнить ее тип (SDC/SDHC), и позже при каждом позиционировании в случае SDC номер LBA умножать на 512 (т.е. адресоваться до байта), а в случае SDHC с ним ничего не делать т.е. после инита размер блока у SDHC равен 512 байт (это все есть в моем драйвере).

    Цитата Сообщение от PVV Посмотреть сообщение
    1 - надо потратить 30 минут времени и будет, кто займется тестированием?
    Я бы потестировал, карточек в ассортименте есть. Просьба:
    - аппаратнозависмые части (терминальный ввод/вывод, обращение к процедурам OC или ROMBIOS) вынести в одно место и/или ограничить IF <platform> {code1} ELSE {code2} <ENDIF> (ибо буду тестировать на Орионе и это придется адаптировать)
    - процедуры байтового обращения к SD(SPI)-контроллеру (SD_PUT, SD_GET, SD_WIGGLE, SD_FINI), которые правятся при использовании прочих схем контроллеров, тоже вынести в одно место и/или ограничить IF <controller> {code1} ELSE {code2} <ENDIF> (ибо буду тестировать скорее всего на простейшей схеме "N8VEM" - других так и не спаял пока)

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

    Цитата Сообщение от Error404 Посмотреть сообщение
    - процедуры байтового обращения к SD(SPI)-контроллеру (SD_PUT, SD_GET, SD_WIGGLE, SD_FINI), которые правятся при использовании прочих схем контроллеров, тоже вынести в одно место и/или ограничить IF <controller> {code1} ELSE {code2} <ENDIF>
    Или как вариант, вот тут мы помнится обсуждали как использовать разные схемы контроллеров, там это делалось методом добавления в код драйверов для всех схем и применения кернали вызовов, которая правилась на конкретную схему при инициализации (получался автодетект схемы). Но этот способ конечно более ресурсоемкий.

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

    как думаете, не надо ли отцепить сообщения по SD/FAT в отдельную тему?

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

    Цитата Сообщение от PVV Посмотреть сообщение
    у меня давно крутится идея навеянная этим http://www.nedopc.org/forum/viewtopic.php?f=90&t=11548 только не копировать образ диска в отдельную память, а работать с файлами образов на самой SD карте, выполняя 'монтирование' этих образов в виде или сохранения двухбайтового указателя в ОЗУ ПК на первый сектор данных образа(при условии непрерывности файла, те отсутствия его фрагментации, что вполне можно обеспечить) или, сложнее, если файл допускает фрагментацию, то сохранения всех занимаемых им кластеров( а цепочка кластеров для файла образа диска в 800КБ, при кластере в 16КБ займет 100 байт ОЗУ ПК). Ну и соответствующим образом нужно доработать процедуры работы с такой 'виртуальной' дискетой хоть CP/M, хоть любой другой ОС, работающей с реальным дисководом... работать с таким образом, естественно, можно в режиме R/W.
    Да, тоже такую идею давно обдумываю. В этом случае в файловой системе FAT можно хранить несколько образов ODI и их монтировать. Трудности реализации вижу такие: файлы могут быть фрагментированы, и в то же время позиционирование должно быть быстрым, а процедура "пробегания" по цепочке кластеров д отребуемого зная только начальный из них - медленная. Поэтому при монтировании образа надо в орионовской операционке сохранять все кластеры принадлежащие этому файлу. Тогда позиционирование на произвольный секотор орионовской ОС будет выполняться в 2 простых действия с массивами (для больших фалов образов {а ограничиваться размером в 800к совсем не хочется} разница по скорости будет на порядок). Но тут придется и разный размер кластеров FAT учесть (в разделах разного размера) и может чего то еще.
    Последний раз редактировалось Error404; 11.01.2018 в 12:25.
    Лучше сделать и жалеть, чем не сделать и жалеть.

    Некоторые из моих поделок тут: https://github.com/serge-404

  6. #16
    Guru
    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,846
    Спасибо Благодарностей отдано 
    83
    Спасибо Благодарностей получено 
    227
    Поблагодарили
    166 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Error404 Посмотреть сообщение
    надо в орионовской операционке сохранять все кластеры принадлежащие этому файлу
    ...
    для больших фалов образов {а ограничиваться размером в 800к совсем не хочется}
    А если кластер будет 4Кб то даже при минимальном файле 800к это 200 номеров, а в случае FAT32 аж по 4 байта (можно кстати заранее посчитать номер сектора и хранить его, а не номер кластера). Не жалко 800 байт драгоценной памяти ради поддержки фрагментированных файлов?

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

    Цитата Сообщение от Error404 Посмотреть сообщение
    тоже такую идею давно обдумываю
    Кстати, подобная идея (без поддержки фрагментированных файлов) используется у меня в проекте Башкирии-2м для DE1.

  7. #16
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  8. #17
    Moderator
    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    4,577
    Спасибо Благодарностей отдано 
    61
    Спасибо Благодарностей получено 
    106
    Поблагодарили
    92 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от b2m Посмотреть сообщение
    А если кластер будет 4Кб то даже при минимальном файле 800к это 200 номеров, а в случае FAT32 аж по 4 байта (можно кстати заранее посчитать номер сектора и хранить его, а не номер кластера). Не жалко 800 байт драгоценной памяти ради поддержки фрагментированных файлов?
    Жалко, но не так чтобы очень. А на большие диски этот массив будет еще больше. С другой стороны, на Орионе памяти на это достаточно (в доп. страницах). Было бы куда жальче, если бы это надо было отрезать от TPA (у меня там буфера ALV как раз под 800 байт, больше опускать уровень BIOS жаба душила) - вот от этого никуда не деться, а служебные буфера BIOS (в т.ч. и этот список кластеров) можно и унести куда-то в доп. страницы.

    Цитата Сообщение от b2m Посмотреть сообщение
    Кстати, подобная идея (без поддержки фрагментированных файлов) используется у меня в проекте Башкирии-2м для DE1.
    Без поддержки фрагментирования вообще неинтересно, хотя делается это, конечно, просто (все готово уже: сейчас у меня в CP/M при адресации секторов добавляется смещение к началу смонтированной партиции, а в случае нефрагментированного файла это будет смещение к началу файла). Потому что цель такая: на любую карточку с уже имеющимся содержимым (допустим, я ее еще где-то использую, в телефоне например, и содержимое мне дорого как память ) скинуть образ диска, сунуть ее в Орион, поработать с ней на Орионе, затем унести на РС (или в телефон) и поработать с ней еще и там. А работа с нефрагментированными файлами ODI со всеми их ограничениями по сути ничуть не удобнее чем записывать образ целых партиций/HDD из файлов OHI c той разницей, что в OHI файловые системы уже большие (что дико удобно).
    Лучше сделать и жалеть, чем не сделать и жалеть.

    Некоторые из моих поделок тут: https://github.com/serge-404

  9. #18
    Activist
    Регистрация
    20.11.2017
    Адрес
    г. Ростов-на-Дону
    Сообщений
    351
    Спасибо Благодарностей отдано 
    30
    Спасибо Благодарностей получено 
    85
    Поблагодарили
    50 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вариант работы с не фрагментированным файлом образа гораздо привлекательней и в скорости работы (простая математика) и в требовании к занимаемой памяти (только номер начального сектора ) и в размере кода ( нет обработки фрагментации), а тк сам файл образа будет готовиться на 'большом' ПК, то кто мешает нам этот образ создать так, как нам надо, те без фрагментации? Можно сделать программу дефрагментатор файла образа, или программу для создания такого не фрагментированного образа...написать такую программу легче, чем реализовывать работу с фрагментированным образом, а вообще-то, можно и функцию 'монтирования' образа заставить заниматься этой дефрагментацией (сложнее, но не невозможно, а тк операция дефрагментации разовая, то вполне можно и так сделать).

    По поводу адаптации sdOS к Ориону. Думаю, что для Ориона есть уже устоявшиеся адреса для размещения системных программ, соответственно нужно определиться с вот такими вопросами, прежде чем начинать:
    1. для работы с FAT нужен буфер ~2КБ ОЗУ, в каких адресах разместить этот буфер?
    2. для размещения кода самой sdOS нужно ~3КБ (с запасом на все доработки по SDHC) в каких адресах её размещать?
    3. где будет храниться бинарник этой ОС, на РОМдиске? как будет выглядеть её запуск? - просто я с Орионом совсем не знаком в программной части.
    4. адрес для порта данных и порта конфигурации, те два адреса - какие?
    5. еще нужна информация по адресам и параметрам вызовов стандартных функций, печать символа на экран, ввод с клавиатуры и тп. Подозреваю, что они совпадают с РК-86, но уточниться нужно.
    6. Для СпециалистаМХ с его ОС RAMFOS я добавлял к sdOS функционал по копированию файлов с SD в РАМдиск RAMFOS_а и обратно, нужно ли что то подобное для Ориона? опять же, РАМдиск у Ориона есть?

    И еще, на фоне того, что я о программах и ОС для Ориона не знаю ничего (но по форуму вижу, что существует несколько ОС), у меня возникает вопрос, а нужна ли эта sdOS Ориону, может нужны только процедуры работы с SDHC картами? В этом случае я отлажусь на Специалисте с SDHC и все?

  10. #19
    Moderator
    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    4,577
    Спасибо Благодарностей отдано 
    61
    Спасибо Благодарностей получено 
    106
    Поблагодарили
    92 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    С дефрагментированными файлами получится фигня сразу же, как только встанет вопрос использования нескольких файлов разных размеров (а это именно то чего я хочу). И удаление файла одного размера чтобы записать файл другого размера в 99% случаев будет приводить к фрагментации, а значит нужно будет натравливать утилиту дефрагментации после каждого копирования на карту. Костыли ТАКОГО размера заложенные в проект уже при планировании мне как инженеру-системотехнику не дадут спокойного сна, отчего появятся круги под глазами и т.п. Если жалко памяти (хотя чего там жалеть, я вот уверен что большие файлы нужны только мне для программирования, остальные только игрушки будут запускать с 800к образов), то проще карточку переформатировать на максимальный размер блока (таких блоков будет меньше). Хотя я за буфер в доп. странице.

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

    Но в качестве времянки для проверки идеи годится и способ с дефрагментированным файлом. Главное сделать для начала хоть что-то.
    Лучше сделать и жалеть, чем не сделать и жалеть.

    Некоторые из моих поделок тут: https://github.com/serge-404

  11. #20
    Activist
    Регистрация
    20.11.2017
    Адрес
    г. Ростов-на-Дону
    Сообщений
    351
    Спасибо Благодарностей отдано 
    30
    Спасибо Благодарностей получено 
    85
    Поблагодарили
    50 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Может я не понимаю что-то, если файлы образов разных размеров, то тогда надо хранить не только номер первого сектора, но и номер последнего сектора этого образа и все, разве нет?
    Хотя я согласен, что можно начать с не дефрагментированного варианта, а дальше, при необходимости, можно и доработать по полной.

Страница 2 из 12 ПерваяПервая 123456 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Altair8800 идеи, решения и реализации
    от L Juriy в разделе Зарубежные компьютеры
    Ответов: 13
    Последнее: 14.09.2017, 11:56
  2. помогите загрузить c FAT ZX-EVO
    от mbojenov в разделе ZXEvo
    Ответов: 11
    Последнее: 11.08.2012, 16:29
  3. Ответов: 218
    Последнее: 12.04.2011, 18:55
  4. Нужен софт под FAT
    от KingOfEvil в разделе Софт
    Ответов: 5
    Последнее: 06.06.2007, 00:19

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •