User Tag List

Показано с 1 по 10 из 354

Тема: Корвет: ExtROM Open Source extender

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #11

    Регистрация
    17.04.2011
    Адрес
    Санкт-Петербург
    Сообщений
    328
    Спасибо Благодарностей отдано 
    32
    Спасибо Благодарностей получено 
    209
    Поблагодарили
    50 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Настало время отчитаться об очередном этапе разработки контроллера - расширении API для управления монтированием образов.

    Итак, в API у нас теперь добавилась группа команд 8x. Вот их описание:

    80 — получить имя образа

    Команда предназначена для получения имени KDI-файла, смонтированного в данный момент на логическом устройстве A или B. Номер устройства задается в поле DRV. Возвращается 14-байтовый буфер с именем файла, заканчивающийся 0.

    81 — смонтировать образ

    Команда монтирует один из имеющихся KDI-образов к логическому диску. Образы должны быть расположены на SD-карте в каталоге DISK/. Параметры команды:
    DRV — номер устройства
    TRK — режим доступа к диску: 0 — чтение/запись, 1 — только чтение.
    SEC — 0 - временное мотирование, 1 - постоянное

    Постоянное монтирование позволяет сохранить связь логического диска с конкретным KDI-образом после перезагрузки системы. Для этого в корне SD-карты создается файл MOUNT.CFG, содержащий в себе имена файлов, монтируемых к дискам А и В при загрузке системы. Если такого файла нет, то он создается, а в качестве имен файлов назначаются значения по умолчанию — DISKA.KDI и DISKB.KDI.
    После ввода команды контроллеру передается 14-байтовый буфер с именем назначаемого файла, окнчивающийся 0. Контроллер проверяет наличие файла и его информационный сектор, в случае ошибок монтирование не происходит, а флаг состояния устройства опускается.

    82 — проверка состояния устройства
    Команда возвращает ответ ОК, если устройство смонтировано, или Fail, если не смонтировано. Флаг состояния автоматически опускается в случае ошибок ввода-вывода на данном устройстве. С помощью этой команды можно проверить результат предыдущего вызова mount (81)

    83 — создать образ

    Команда создает на SD-карте пустой KDI-файл с указанным именем, формирует в нем инфосектор и пустой каталог. Команде надо передать 14-байтовый буфер с именем создаваемого файла. Если файл существует, то он будет полностью затерт с потерей всей информации. После создания файл автоматически монтируется на указанный в DRV диск.
    На данный момент создается стандартный KDI-файл размером 800К. В будущем планируется добавить параметры для создания файла произвольного размера.

    84 — получить каталог образов

    Команда предназначена для просмотра каталога всех KDI-файлов, имеющихся на карте. Она отдает цепочку строк размером 14 байт для каждого из имеющихся файлов. Признаком конца цепочи является байт 00 (строки имен файлов не могут начинаться с 00).


    Теперь у нас есть все инструменты для управления образами дисков прямо с корвета. Я написал для этого утилиту MOUNT под CP/M. Для этого пришлось приспособиться к убогому компилятору C80, но в конце концов я приспособился и получилась вполне приличная вещь.

    Код:
    Формат командной строки:
    
    MOUNT
      - без аргументов показывает текущие смонтированные образы
    
    MOUNT /L
      - Выводит список файлов-образов KDI в каталоге DISK/ карты
    
    MOUNT [ключи] DRV[:] FILE
      подключает образ FILE к логическому диску DRV
      FILE - образ KDI, лежит в каталоге DISK/  SD-карты контроллера
      DRV - буква монтируемого диска, A или B. Двоеточие в коце необязательно.
      /R - подключить образ в режиме только чтение.
      /P - сделать назначение диска постоянным
      /C - создать пустой образ диска и смонтировать его
    Вот пример работы с программой:

    Код:
    CP/M-80  vers. 2.2
    EXTROM disk emulation BIOS v1.02
    
    A>MOUNT /L
    HLP.KDI    | DISK_B.KDI | TDISK.KDI  | SYS.KDI    |
    DISK_A.KDI | OSCPM.KDI  | TD.KDI     | E.KDI      |
    
     -- Всего 8 файлов --
    
    A>MOUNT /R B OSCPM
    A>MOUNT
    A: => (R/W) DISKA.KDI
    B: => (R/O) OSCPM.KDI
    
    A>MOUNT /C B TEST11
    B: Создание файла...ok
    
    A>MOUNT
    A: => (R/W) DISKA.KDI
    B: => (R/W) TEST11.KDI
    Следует быть осторожным с постоянным монтированием диска А, пока мы не придумали интерфейс доступа к монтированию в аварийных ситуациях. Дело в том, что если на новом образе диска А не окажется программы MOUNT, то перемонтировать этот диск будет уже нечем. В этом случае следует просто удалить файл MOUNT.CFG из корня карты (или каталога extrom/ в эмуляторе). Тогда будут восстановлены образы DISKA и DISKB по умолчанию.
    Во вложении я кладу архив extrom_mount.7z, содержащий новую прошивку контроллера с поддержкой данного расширения API, а также образ MOUNT.KDI, содержащий исходники и готовую собранную программу MOUNТ. Кроме того, я вложил туда текстовый документ api_v2.odt, с полным описанием текущей версии API. Этот файл можно использовать как базовый при написании будущего пакета документации к нашей разработке.

    ESL, я позволил себе также внести все исправления в эмулятор. Сам понимаешь, для отладки мне жизненно необходим инструмент поудобнее реального корвета. Прикладываю архив kemu_newapi.7z, содержащий доработанный файл ext_rom.c. Мои изменения:

    - Полностью введена поддержка новых вызовов 80-84.
    - Поддержка флагов состояния устройства, и флагов R/O-R/W
    - Поддержка постоянного монтирования и файла списка монтирования MOUNT.CFG такого же формата как и в реальном контроллера.
    - Исправлена серьезная ошибка в приеме пакета (иногда получалась неправильная КС) и ошибка реализации команды NOP (00).
    - Полностью реализован режим подмены системных дорожек (у тебя был только прием команды A0 и установка флага). Образы дорожек берутся из файла SYSTEM.BIN (это переименованный exrsystem.cim), лежащего в корне extrom/.
    - Образы KDI теперь живут в каталоге DISK/ внутри extrom/, то есть как на реальном контроллере. Это нужно для того, чтобы образы дисков не мешались в кучу с другими служебными файлами и не лезли в список по команде DIR (84).
    - Теперь все имена образов, а также DISK/ и MOUNT.CFG записаны большими буквами. Дело в том, что FAT, в отличие от ext*, не отличает больших и маленьких букв, и по стандарту в каталоге должны использоваться только большие буквы. Отнако линуксовый драйвер VFAT на это забивает, что иногда приводит к неприятным последствиям в виде двух файлов с одинаковым именем. Мне уже задрало каждый раз переименовывать файл при копировании из extrom/disk/ на реальную карту. Поэтому предлагаю на будущее имена образов дисков писать только большими буквами.

    Что я не стал менять, так это различие в именовании дисков по умолчанию. В контроллере - DISKA и DISKB, у тебя в эмуляторе - DISK_A и DISK_B. Раз ты их так назвал - тебе и решать.
    Ну, надеюсь, мои наработки тебе пригодятся при доработке эмулятора.

    Теперь осталось придумать аварийный интерфейс для доступа к утилите mount, Мы тут начали это дело обсуждать, но как-то пока заглохло. И ждем универсальный загрузчик от ESL, он его уже отлаживает. Ну и на этом первый этап будет завершен - останется потестировать, исправить баги, и можно будет объъявлять первый релиз.
    Вложения Вложения
    Последний раз редактировалось forth32; 14.07.2014 в 11:21.

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

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

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

Похожие темы

  1. Open source firmware for the Spectrum
    от zx-kit в разделе Разный софт
    Ответов: 60
    Последнее: 29.05.2014, 13:53
  2. open-source эмуляторы под .NET
    от Sawyer в разделе Эмуляторы
    Ответов: 1
    Последнее: 04.01.2011, 17:47
  3. GP2X F100 Open Source Gaming Console
    от CodeMaster в разделе Зарубежные компьютеры
    Ответов: 3
    Последнее: 12.06.2010, 23:51
  4. Open Source эмуль...
    от rg_software в разделе Эмуляторы
    Ответов: 50
    Последнее: 06.12.2006, 11:57

Ваши права

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