User Tag List

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

Тема: SD карта и SDOS для 8и битных ПК

Комбинированный просмотр

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

    Регистрация
    11.01.2008
    Адрес
    Ладошкино
    Сообщений
    1,814
    Записей в дневнике
    4
    Спасибо Благодарностей отдано 
    390
    Спасибо Благодарностей получено 
    341
    Поблагодарили
    246 сообщений
    Mentioned
    14 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от PVV Посмотреть сообщение
    TRS-80(реал)
    ИстЕны ради - все же для реализации TRS-80 в ФПГА, не только лишь все это реАлом посчитают)) Но противопоказаний для реального реала быть особо не должно.
    Profi v3.2 -=- Speccy2010,r2

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

  3. #2

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

    По умолчанию

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

    Немного продолжу...
    Исходники SDOS открыты, и их можно скачать почти по каждой из ссылок выше.
    SDOS написана в мнемониках ВМ80, и без проблем запускается на Z80.
    Каждый раз при добавлении какого либо функционала и новых платформ (ПК) я увеличивал номера версий и подверсий. Актуальная на данный момент версия 8.9, но практически это 8.6, тк 8.7 - 8.9 это лишь сборки под разные платформы с подвариантами SD интерфейса, и на этом этапе я понял, что так быть не должно, конечный пользователь сам должен собирать SDOS под свои требования и это не должно влиять на версию системы.
    Соответственно, я хочу объяснить, как собирается, конфигурируется или портируется на другую платформу SDOS.

    Первое, нужно определиться с размещением в адресном пространстве целевой платформы. Нужно определить, где будет размещаться как код самой SDOS, в ОЗУ или ПЗУ, так и ее служебная область 2048-256=1792 байт и в каких адресах. Нужно выбрать такие адреса, которые для большей части программ не задействуются. Здесь нужно выбрать оптимальный компромисс. Если на целевой платформе существует внешний РОМдиск, то достаточно логично разместить SDOS там, и переписывать его в ОЗУ штатными средствами. (При портировании на новую платформу на первом этапе можно выбрать практически любые доступные адреса, и лишь на финишном этапе определить оптимальное размещение в памяти). Если на целевой платформе есть Свободное место в адресном пространстве, в котором можно разместить ПЗУ (пример Специалист и Галаксия), то SDOS размещается в таком участке, и работает сразу из ПЗУ и нужно лишь выбрать доступный участок под служебную область.
    Второе, пересекается с первым, это выбор адресов для портов SD интерфейса. Нужно два адреса, это могут быть как адреса в пространстве памяти, так и адреса в IO портах. Для тех платформ, в которых существует внешний РОМдиск, проблема выбора может упроститься. По ссылкам выше есть два варианта такого подключения. Иначе нужно опять искать варианты и компромиссы.
    Третье, выбрать вариант SD интерфейса. HWM_PVV - это самый быстрый и, в добавок, его программная поддержка самая компактная, что на общем фоне компактной SDOS(напомню ~2КБ всего!) весьма заметно. 7 корпусов 555 серии . msx - более медленный и программная поддержка +150 байт к коду, а по числу корпусов примерно как предыдущий вариант, по тому я его особо не рассматриваю. n8vem - самый медленный, +250 байт к коду, но очень прост в реализации, а по тому, вполне имеет право на рассмотрение. Для наших ретроПК даже скорость n8vem не столь плоха , тк в большей части файлы имеют не большой размер, что не критично и все лучше, чем просто магнитофон. Любые подварианты этих интерфейсов, к примеру, подключенные через ВВ5, будут соответственно чуть медленнее и будут чуть раздувать программный код.
    На этом этапе, для уже существующих вариантов платформ, нужно лишь правильно определить в дефайнах нужные возможности и запустить сборку bat файлом.
    Если же нужно портировать SDOS на новую платформу, то тут нужно провести определенные изыскания.
    В файле defs.inc нужно сделать секцию с новой платформой, в которой нужно определить такие функции (пример от РК-86):
    GETC EQU 0F803H <-ожидать символ с клавиатуры
    PUTC EQU 0F809H <-вывести один символ на экран
    PRINT EQU 0F818H <-вывести строку на экран
    PRHEX EQU 0F815H <-вывести число в HEX формате
    IfKeyPress EQU 0F81BH <- проверка ввода с клавиатуры, не зависающая в проверке
    входные и выходные параметры этих функций можно посмотреть, к примеру, здесь
    из них основными являются первые две, тк 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. Этот эмулятор поддерживает все три типа 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
    }
    Вложения Вложения
    Последний раз редактировалось PVV; 29.12.2018 в 19:32.

    Этот пользователь поблагодарил PVV за это полезное сообщение:

    cy6(26.03.2023)

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

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

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

Похожие темы

  1. SD карта для ZX-Spectrum
    от PVV в разделе Разный софт
    Ответов: 21
    Последнее: 25.11.2018, 23:48
  2. Ответов: 1
    Последнее: 14.09.2018, 20:59
  3. Видео карта для спека.
    от Руслан в разделе Изображение
    Ответов: 17
    Последнее: 30.08.2013, 01:29
  4. 2D видео-ускоритель для 8-битных компов, ценй 53$
    от Valen в разделе Зарубежные компьютеры
    Ответов: 4
    Последнее: 08.08.2012, 16:03
  5. Ответов: 3
    Последнее: 09.05.2011, 12:19

Ваши права

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