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

User Tag List

Страница 5 из 36 ПерваяПервая 123456789 ... ПоследняяПоследняя
Показано с 41 по 50 из 354

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

  1. #41
    Activist
    Регистрация
    17.04.2011
    Адрес
    Санкт-Петербург
    Сообщений
    324
    Спасибо Благодарностей отдано 
    32
    Спасибо Благодарностей получено 
    200
    Поблагодарили
    48 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от esl Посмотреть сообщение
    кстати, в свое врем попалось, вроде в ОПТС от квана,
    он тестируют ВВ с принтером
    т.к. о них не распаян ext port
    Ну ведь логично тестировать через принтерный порт. Там ничего не бывает кроме принтера - это тебе не писюк c ковоксами , а принтер без строба печатать не будет. А вообще-то тест, по сути, идиотский. Что он вообще может выявить? Только замыкание на шине данных периферии. Я так сходу даже не могу представить, что может выйти из строя так, чтобы тест не прошел, но при этом ОПТС вообще хотя-бы доехал до этого теста... Вреда от него гораздо больше, чем пользы.

    и была вроде грабля, что установка стандартного пзу - вылетало с ошибкой шины.
    Однозначно должно было вылетать. Вот и я пару часов жизни убил об эти грабли...
    пачтиком поделись ! ??!?!
    плизззз
    Да пожалуйста, если надо, мне не жалко. Только пользы от него тебе будет не очень много. Ибо это патч не к последней версии из репозитория, а к моей, которая с сетью. Ты ту доработку в основную ветку не принял, а я потом уже и не следил за изменениями - меня пока и так устраивает.
    Кстати. РОМ-КТДП под эмулятором загрузился и запустился. И оказался полнее той дисковой версии, что есть у меня. Теперь вот думаю, как бы его в реальный корвет залить. Уж больно он большой - 16к, в nvram меги не влезет. Если только его в основную флеш прошить.
    Ну или наконец собраться и приделать SD-карту.

    Держи файлы эмулятора.
    Вложения Вложения

  2. #42
    R.I.P.
    Регистрация
    16.09.2009
    Адрес
    г. Харьков
    Сообщений
    1,466
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от forth32 Посмотреть сообщение
    4. Ну и, наконец, придумать и реализовать протокол взаимодействия между сетевым биосом и программой в AVR. Это самая интересная, но при этом громоздкая часть работы. За основу можно взять исходные тексты стандартного биоса корвета, добавив туда перехват запросов READ и WRITE при обращении к эмулируемым дискам, и какой-нибудь командный протокол для монтирования образов KDI.
    уже описал выше
    кстати весь обмен можно свести к обмену блоками по 128 байт

    ---------- Post added at 17:58 ---------- Previous post was at 17:57 ----------

    Цитата Сообщение от forth32 Посмотреть сообщение
    Ну ведь логично тестировать через принтерный порт. Там ничего не бывает кроме принтера - это тебе не писюк c ковоксами , а принтер без строба печатать не будет. А вообще-то тест, по сути, идиотский. Что он вообще может выявить? Только замыкание на шине данных периферии. Я так сходу даже не могу представить, что может выйти из строя так, чтобы тест не прошел, но при этом ОПТС вообще хотя-бы доехал до этого теста... Вреда от него гораздо больше, чем пользы.
    на РМУ нет принтерного порта

    ---------- Post added at 18:00 ---------- Previous post was at 17:58 ----------

    Цитата Сообщение от forth32 Посмотреть сообщение
    Теперь вот думаю, как бы его в реальный корвет залить. Уж больно он большой - 16к, в nvram меги не влезет. Если только его в основную флеш прошить.
    я кстати и думал его в основном роме держать, места то там - вагон.

    а меняться он после разработке не будет

    ---------- Post added at 18:01 ---------- Previous post was at 18:00 ----------

    в список "АПИ" забыл первое и основное
    "ЗАГРУЗИ STAGE2 BOOT LOADER"

    и он уже спокойно отдает файл с флешки или там из рама если на флешке нет ...

    ---------- Post added at 18:03 ---------- Previous post was at 18:01 ----------

    Цитата Сообщение от forth32 Посмотреть сообщение
    Ты ту доработку в основную ветку не принял, а я потом уже и не следил за изменениями - меня пока и так устраивает.
    сорри, не успел пока, shame to me.

  3. #43
    Activist
    Регистрация
    17.04.2011
    Адрес
    Санкт-Петербург
    Сообщений
    324
    Спасибо Благодарностей отдано 
    32
    Спасибо Благодарностей получено 
    200
    Поблагодарили
    48 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ну что ж, тема вроде как народ заинтересовала. Это радует.
    Теперь я попробую изложить свои соображения по организации системы - я тоже этот вопрос долго обдумывал, особенно после изучения работы CP/N-90. Итак, выношу на обсуждение свою концепцию.

    Загрузка системы. Вначале в корвет стандартным протоколом отсылается загрузчик 2 ступени. Это, собственно, уже реализовано на практике. Осталось написать сам загрузчик, так, чтобы он влез в 256 байт.
    Потом загрузчик 2 ступени включает карту памяти 1С, переводит ВВ55 канал А в режим 2, и ждет. AVR берет файл образа системы с SD, отсылает загрузчику 2 байта размера файла, потом побайтово перекидывает сам файл и 1 байт контрольной суммы, на всякий случай. Загрузчик проверяет КС, отправляет в AVR байт подтверждения, и передает управление на точку входа BOOT. На этом загрузка окончена.

    Взаимодействие BIOS с AVR. Нам потребуется встроить свой код в 3 системных вызова - READ, WRITE и SELDSK. Насчет первых двух - понятно. SELDSK - это функция выбора диска, с которым далее будут выполняться операции чтения-записи. Вроде бы фигня, но дело в том, что при первом обращении к диску с него считывается информационный сектор, и на его основании запоняется блок DPB. Причем считывается он прямым обращением к портам FDC. В начале образа KDI этот сектор, естественно, есть, его нужно прочитать и отдать биосу на разбор. Делать параметры диска фиксированными, как в CP/N90, нельзя - перестанут читаться диски МИКРОДОС.
    Итак, все сводится к 2 запросам к AVR - чтение сектора и запись сектора. Многосекторные операции биос не поддерживает, ну и не надо. Получается, все взаимодействие с контроллером на уровне биоса сводится к 2 последовательностям:
    Код:
                  R                               W
    отсылка команды чтения               отсылка команды записи
    прием буфера с сектором         передача буфера с сектором
    Сам командный сектор получается совсем коротким:

    Код:
    cmd:    DS   1    ; код команды, 1 - чтение,  2 - запись
    drv:    DS   1    ; # устройства, 0 - A,  1 - B
    track:  DS   1    ; дорожка
    sector: DS   1    ;  сектор
    Всего 4 байта. Сектор данных - всегда 128 байт. Таким образом, стандартными средствами BIOS мы можем поддерживать образы дисков до 8М, что не так уж и мало.

    Теперь командный протокол. Как выше обсуждалось, нам как минимум потребуются команда "монтировать KDI к устройству A или B". Остальные операции опциональны. ESL привел такой список:

    дай мне список образов на диске
    дай список того что смонтировано
    загрузи бут с диска
    прочитай конфиг
    запиши конфиг

    Первый и второй запрос - чисто информационные, чтобы знать, что у нас есть на карте и не монтировать вслепую. Насчет программной перезагрузки - я не знаю, насколько оно полезно. Перезагрузка легко делается кнопкой Reset, что проще, чем вводить команду reboot с консоли. А уж если система повисла намертво - никакое API уже не поможет ее оживить. Хотя реализовать-то это дело не особо сложно. Ну и конфиг - я так понимаю, предлагаешь хранить на карте список монтирования по умолчанию? Логично. Посмотрим, что в конце у нас получится, но идея хорошая. Для обращения к этому API из программ можно было бы сделать дополнительные точки входа в биос, но, я думаю, не стоит - достаточно сделать стандартную библиотеку и работать через нее. Само обращение к AVR будет реализовано через тот же 4-байтовый командный пакет, с кодом команды в поле CMD, за которым будет следовать блок с параметрами (имя файла образа итд).

    Теперь о реализации BIOS. Мы будем поддерживать 4 диска. A, B - эмулируемые образы, C, D - реальные дисководы, если есть. Рамдиск E можно вообще из биоса выкинуть для освобождения места. Пользы от него в 21 веке уже никакой.
    Есть 2 варианта реализации. Первый предложил выше ESL - взять готовый двоичный биос, напихать наш код в свободные дырки в коде, и поставить ссылки на него в точках вызова API. Так было сделано в CP/N-90, правда, за счет кастрации многих подсистем BIOS. Путь очевидный, но не слишком удобный - распихивать код по дырам - это как-то немного унизительно
    ESL, ты привел впечатляющий список дыр одного из биосов. Можешь показать, в каком из файлов твоих баз лежит этот биос? Я бы сам хотел глянуть. Дело в том, что в том биосе, который ковырял я, что-то не видно таких шикарных промежутков. Есть только щели в несколько десятков байт на месте зарезервированных таблиц. Естественно, дыры должны быть именно в BIOS - выше DA00. BDOS и CCP перезагружаются с диска при каждом рестарте системы, и код туда помещать, понятно, нельзя. А килобайтная дырка - это уже немало, пожалуй, в килобайт можно запихать почти все.
    Или я тебя неправильно понял, и это не список дыр одного биоса, а список размеров дыр в каждом из известных тебе биосов? А дыра в биосе всего одна. Хотелось бы только посмотреть, где она находится.

    Второй путь. Собрать BIOS с нуля из исходных текстов. К сожалению, исходников нормального биоса от CP/M я не нашел. Есть только огрызки от МИКРОДОС, лежащие у ESL в архиве с IDA базами. Исходники настолько странные, что мне проще разобрать работу кода по IDA-базе, чем по ним. Но есть еще один вариант - экспортировать ASM-файл из IDA-базы. И потом найти ассемблер, который сумеет сожрать эти исходники. Если все получится - это будет то, что надо. Тогда наш код можно встраивать напрямую в функции BIOS без всяких патчей. Только для этого нужно докопать код - чтобы везде, где нужно, стояли ссылки на метки вместо абсолютные адресов. К сожалению, разработчики вовсю пользовались грязнейшими хаками типа самомодифицирующегося кода и даже передачи управления в середину машинной команды! Уроды блин. Хотя это больше относится к ОПТС, биос вроде почище. В любом случае, я в выходные попробую заняться чисткой кода в базе. Если уж не получится - пойду по пути, прделоженному ESL, с патчем биоса в двоичном виде.

    На выходных съезжу на дачу, там у меня валяется несколько дохлых кардридеров. Надо выдрать SD-гнездо, и поключить наконец к меге. ESL привел пример схемы. Она, собственно, совершенно тривиальна - карта подключена к порту SPI, через делители из сопротивлений для согласования уровней. Вот этих делителей я и хотел избежать. Во-первых, 6 лишних резисторов на плате. Во-вторых, эти самые делители искажают фронты сигнала, что иногда приводит к странным вещам. Но более простых путей, похоже, нет. Понизить питание меги до 3v нельзя - для нее станут опасными 5v TTL-уровни от корвета.

    То, что мне очень не хотелось делать - драйвер vfat. Я посмотрел на предложенную PetitFS - вроде бы неплохая реализация. Держит 2 открытых файла параллельно - то что надо. Но придется ее разбирать детально - я стараюсь не использовать у себя чужой код втемную, всегда хочу понять как он работает. Может быть, окажется, что проще свое написать.

    ---------- Post added at 09:06 ---------- Previous post was at 08:59 ----------

    Да, кстати.

    Цитата Сообщение от esl Посмотреть сообщение
    на РМУ нет принтерного порта
    Разъема для принтера нет. А сам порт - это же канал А ППИ2. Он есть на всех корветах, куда он денется... Вот его вполне можно использовать для теста шины.

    Я смотрю, ты extrom уже приделал к эмулятору. Только ты как минимум файл ext_rom.h забыл в дерево положить

  4. #44
    R.I.P.
    Регистрация
    16.09.2009
    Адрес
    г. Харьков
    Сообщений
    1,466
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от forth32 Посмотреть сообщение
    Я смотрю, ты extrom уже приделал к эмулятору. Только ты как минимум файл ext_rom.h забыл в дерево положить
    вчера сначала забыл сделать gh add
    и запушил
    потом вспомнил, добавил файлы, зачекнинл,
    а запушить забыл

    ---------- Post added at 10:48 ---------- Previous post was at 10:47 ----------

    Цитата Сообщение от forth32 Посмотреть сообщение
    Разъема для принтера нет. А сам порт - это же канал А ППИ2. Он есть на всех корветах, куда он денется... Вот его вполне можно использовать для теста шины.
    торможу, точно.

  5. #45
    R.I.P.
    Регистрация
    16.09.2009
    Адрес
    г. Харьков
    Сообщений
    1,466
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от forth32 Посмотреть сообщение
    Второй путь. Собрать BIOS с нуля из исходных текстов. К сожалению, исходников нормального биоса от CP/M я не нашел
    я вроде выкладывал уже,
    смотри в архиве
    там очнь похоже что там есть именно исходник биос 1.2
    и на вид пару приличных дизасмов 2.x
    korvet-src.7z

  6. #46
    R.I.P.
    Регистрация
    16.09.2009
    Адрес
    г. Харьков
    Сообщений
    1,466
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от forth32 Посмотреть сообщение
    ESL, ты привел впечатляющий список дыр одного из биосов. Можешь показать, в каком из файлов твоих баз лежит этот биос? Я бы сам хотел глянуть. Дело в том, что в том биосе, который ковырял я, что-то не видно таких шикарных промежутков. Есть только щели в несколько десятков байт на месте зарезервированных таблиц.
    дырка одна, это просто размер дырок в разных биосах
    смотри в аттаче
    там есть ods с табличкой, сами биосы и куски дизасмов

    DOS_LAYOUTS.7z
    Код:
                        START   END     HOLE SIZE
    12_87_11_niijaf     EA06    EDFF    1018
    12_88_3_alternativa E771    EBA6    1077
    12_88_3_niijaf      E771    EBA6    1077
    12_90_5_kontur      E7F9    EBA6     941
    20_88___miks        E782    EBA6    1060
    21_89_2_niijaf2     E86D    EBA6     825
    21_89_2_niijaf      E874    EBA6     818
    21_89___wiza        E885    EBA6     801
    21_91___LAP         E7ED    EBA6     953
    21m_____Shkanov     E8AC    EBA6     762
    
    mdos1_861011
    mdos1_861115
    mdos1_870430
    
    mdos2_880630
    mdos2_900105
    это я тут на досуге разбирал дисковые системы
    выдрал со всех дисков загрузчики
    определил где изменяемые области, замаскировал из
    (таблички FKEYS, PRINTER, приветствие) их патчили все кому не лень
    это список уникальных известных на сегодня
    X.Y_YY_M_NAME
    X.Y - версия биос
    YY_M - дата внутри
    ну и имя по мотивам имени на диски

    там есть текстовый файлик, я туда вписывал отличия
    в неочень упорядоченной форме

    получается у всех cp/m есть дырка в 700 байт,
    в них ЛЕГКО помещается любой наш драйвер
    главное чтобы я не ошибся и это были дыкри а не буфера.
    Последний раз редактировалось esl; 26.06.2014 в 19:06.

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

  8. #47
    R.I.P.
    Регистрация
    16.09.2009
    Адрес
    г. Харьков
    Сообщений
    1,466
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от forth32 Посмотреть сообщение
    Загрузка системы. Вначале в корвет стандартным протоколом отсылается загрузчик 2 ступени. Это, собственно, уже реализовано на практике. Осталось написать сам загрузчик, так, чтобы он влез в 256 байт.
    Потом загрузчик 2 ступени включает карту памяти 1С, переводит ВВ55 канал А в режим 2, и ждет. AVR берет файл образа системы с SD, отсылает загрузчику 2 байта размера файла, потом побайтово перекидывает сам файл и 1 байт контрольной суммы, на всякий случай. Загрузчик проверяет КС, отправляет в AVR байт подтверждения, и передает управление на точку входа BOOT. На этом загрузка окончена.
    не, имхо не так
    мы загрузили 256, (назовем их Stage1 BOOT)
    ExtRom переключился в command mode
    далее Stage1 BOOT через обращение к апи (загрузи Stage2 BOOT)
    получает образ файла в котором Stage2 BOOT
    он уже радостно рисует менюшку на экране
    считывает конфиг
    показывет кто куда примонтирован
    монтирует нужное
    дальше грузит загрузочную запись (как ром с дискеты)
    патчит её, и передает управление.

    таким образом мы не привязываем конкретный биос, а грузим любой образ KDI

    т.к. все CP/M BIOS из одного корня - структура их близка
    и патчить там - легко

    кстати, в Stage2 BOOT можно еще реализовать загрузку РОМ с SD
    и еще например загрузку .BIN игрушек (для тех кому лень систему грузить)
    ну это уже мысли далеко в будующее.

    а, ну и сам Stage2 должен для начала читаться с SD
    (легко пилить и отлаживать)
    а вдруг его нет - грузить минимальный из ROM

    p.s. надеюсь мы об одном говорим
    Последний раз редактировалось esl; 26.06.2014 в 15:02.

  9. #48
    R.I.P.
    Регистрация
    16.09.2009
    Адрес
    г. Харьков
    Сообщений
    1,466
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от forth32 Посмотреть сообщение
    загрузи бут с диска
    Насчет программной перезагрузки - я не знаю, насколько оно полезно. Перезагрузка легко делается кнопкой Reset, что проще, чем вводить команду reboot с консоли.
    это имелся в виду загрузить Stage2 loader

    ---------- Post added at 13:38 ---------- Previous post was at 13:36 ----------

    Цитата Сообщение от forth32 Посмотреть сообщение
    Для обращения к этому API из программ можно было бы сделать дополнительные точки входа в биос, но, я думаю, не стоит - достаточно сделать стандартную библиотеку и работать через нее. Само обращение к AVR будет реализовано через
    имхо апи в биос - смысла нет, апи и так уже есть в "EROSe"
    делать прослойку - смысла нет.

    ---------- Post added at 13:38 ---------- Previous post was at 13:38 ----------

    Цитата Сообщение от forth32 Посмотреть сообщение
    Взаимодействие BIOS с AVR. Нам потребуется встроить свой код в 3 системных вызова - READ, WRITE и SELDSK. Насчет первых двух - понятно. SELDSK - это функция выбора диска, с которым далее будут выполняться операции чтения-записи.

    я думал патчить уровнем ниже
    патчим DiskToMemory и MemoryToDisk (DTOM,MTOD)
    переменные в которых имя диска, номер сектора и трека - известны,
    больше нам и не надо
    таким образом покрываем сразу ВСЕ вызовы, без сложного диспатчинга
    мало того, это дает ЛЕГКО реализовать выборочный маппинг дисков
    т.е. смотрим если это зампленый диск - наши функции, если нет - родные как и были

    ---------- Post added at 13:39 ---------- Previous post was at 13:38 ----------

    Цитата Сообщение от forth32 Посмотреть сообщение
    Теперь о реализации BIOS. Мы будем поддерживать 4 диска. A, B - эмулируемые образы, C, D - реальные дисководы, если есть. Рамдиск E можно вообще из биоса выкинуть для освобождения места. Пользы от него в 21 веке уже никакой.
    при том варианте реализации что выше - маппинг получам динамичесский
    потом можно еще будет усложнить и сделать более сложные маппинг
    например KDIA -> A, Physical A -> B:, Physycal B: -> D

    кстатит забавно, CP/M поддерживает физичесски 4 диска
    а микродос всегда только 2

    это всё ради того чтобы можно было в теории при наличии физ дисководов слить на них информацию с образа.

    ну и диск E - пусть будет, он не мешает

    ---------- Post added at 13:43 ---------- Previous post was at 13:39 ----------

    Цитата Сообщение от forth32 Посмотреть сообщение
    И потом найти ассемблер, который сумеет сожрать эти исходники. Если все получится - это будет то, что надо.
    есть же обычный M80
    есть даже его "исходники"
    есть еще xm80 by leo sandy, под msdos
    правда не факт что удобно будет, но зато точно работает.

    ---------- Post added at 13:57 ---------- Previous post was at 13:43 ----------

    Цитата Сообщение от forth32 Посмотреть сообщение
    К сожалению, разработчики вовсю пользовались грязнейшими хаками типа самомодифицирующегося кода и даже передачи управления в середину машинной команды! Уроды блин. Хотя это больше относится к ОПТС, биос вроде почище.
    если ты про
    Код:
    2EC1 Zero_division_exit:           
    2EC1                 ld      e, 0Bh
    2EC3                 db    1
    2EC4 Netxt_w_for_exit:             
    2EC4                 ld      e, 1  
    2EC6                 db    1
    2EC7 Array_redef_exit:             
    2EC7                 ld      e, 0Ah
    2EC9                 db    1
    2ECA unkn_usr_exit:                
    2ECA                 ld      e, 12h
    2ECC                 db    1
    и подобных
    то это микрософт
    экономия на байтиках
    а чего, прикольно

    Цитата Сообщение от forth32 Посмотреть сообщение
    В любом случае, я в выходные попробую заняться чисткой кода в базе. Если уж не получится - пойду по пути, прделоженному ESL, с патчем биоса в двоичном виде.
    я готов этим занятся как будет моя железка готова
    сейчас жду usb tvtuner,
    ардуина уже доехала
    остается запинать брата чтоб спаял всё это
    правда сроков пока нет, разве что на эмуляторе.

    самое сложное для меня ты уже сделал, проверил идею !!!
    было бы не плохо кстати померять такт скорость в этом MODE2 transfer

    Цитата Сообщение от forth32 Посмотреть сообщение
    То, что мне очень не хотелось делать - драйвер vfat. Я посмотрел на предложенную PetitFS - вроде бы неплохая реализация. Держит 2 открытых файла параллельно - то что надо. Но придется ее разбирать детально - я стараюсь не использовать у себя чужой код втемную, всегда хочу понять как он работает. Может быть, окажется, что проще свое написать.
    там же есть еще VinxFS, он так тоже говорил
    это пиленая чья-то либа
    есть еще https://code.google.com/p/sdfatlib/

    а про PetitFS - она сильно тестированная, очень распространненая либа.

    ---------- Post added at 15:31 ---------- Previous post was at 13:57 ----------

    проверил по быстрому дырку
    взял 21_89___wiza E885 EBA6 801
    забил константой
    загрузился
    покопировал, позаписывал, пооптимизировал
    сдампил память
    константа осталась
    понятно что не всё потестилось, но чтение/запись и разные диски были

  10. #49
    R.I.P.
    Регистрация
    16.09.2009
    Адрес
    г. Харьков
    Сообщений
    1,466
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    а про Микродос для ОПТС2, прятать драйвер под экран (типа как DED делает)
    в микродосе который поддерживает RAMDISK и работает и под ОПТС1 (mdos2_900105) там как раз живёт его драйвер
    с патчем для работы
    т.е. мы легко его правим

    для микродос ОПТС1 - будем думать, он работает в конфигурации без ацзу ...
    или забить, там вообще глюк на глюке
    даже автопределения размера диска нет, жестко забито кол-во системных секторов
    во времена оны - не могли даже cp/m прочитать
    про комманду O не знали...
    Последний раз редактировалось esl; 26.06.2014 в 19:08.

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

    По умолчанию

    Наконец-то я добрался до компьютера - а тут уже столько информации... Даже темы разделились, что меня поначалу сбило с толку.

    После некоторго, может быть не до конца вдумчивого, ознакомления с твоими, ESL, рассуждениями, я понял твою идею до конца. Итак. Я предлагал написать собственный универсальный биос, и использовать для работы только его. Ты же предлагаешь пойти более сложным путем - загружать тот биос, что есть на текущем образе диска А, и модифицировать его на ходу, встроив код эмулируемых дисков в дырку перед буфером каталога.
    Преимущество твоего метода - мы действительно можем использовать любой биос с любой дискеты. В том числе и микродос, что в моем случае практически невозможно. Недостатки, как я вижу, тут такие.

    1. Тебе придется втиснуть весь код в щель размером 762 байта, судя по твоей таблице. Это не так уж и много как может показаться. Но тут будет видно, когда станем писать драйвер эмулируемых дисков.

    2. Тебе придется держать во вторичном загрузчике базу всех известных биосов, и идентифицировать загруженный биос по каким-либо признакам - сигнатуре, контрольной сумме, ну или что ты там уже придумал. С учетом того, что если биоса в базе не найдется, придется подставлять резервный, если я правильно понял твою мысль. А если биос идентифицируется неправильно - получим крах системы в самый непредсказуемый момент.

    Пока в голову приходит только это, может к утру еще чего придумается. Вроде бы не так уж и много, но вот оно того стоит? Я не ною, и согласен вести разработку по любому пути, если это действительно даст какие-либо преимущества.
    Впрочем, наши с тобой методы можно и скомбинировать - и свои биос сделать, и встраивалку в чужие. Тем более что ты уже берешься за этот этап работы. Единственная тонкость - это убедиться, что в биосе там действительно дыра. Уж больно странная она. Беглый взгляд показал, что внутри лежат огрызки кода, в молодости бывшие куском явно какого-то отладчика. По крайней мере, все ссылки из этого кода ведут в младшие юзерские адреса типа E00. Твой эксперимент с заполнением области константой меня почти убедил, но я завтра попробую и сам, ты уж не обижайся. В идеале - попробую доработать отладчик эмулятора, чтобы срабатывал точкой останова на обращение к данным на указанном участке памяти.

    Далее. Ты предлагаешь перехватывать вызовы только 2 подпрограмм - чтения сектора и записи сектора. Сразу говорю, что этого мало. Как минимум SELDSK работает с дискетой напрямую, да и еще кое-где я видел обращение и к флопу, и к регистру выбора устройства. Или мне так только показалось? Вообщем, тут путь один - раскопать дисковую подсистему одного биоса полностью, до последнего байта. Я биос особо плотно не копал, меня больше BDOS интересовал. Теперь, похоже, пора заняться. Вот на выходных, на даче, и займусь.

    Ладно, это дело не самого близкого будущего. Нам до биоса пока далеко как пешком до китая. Я для себя наметил такой план.

    1. Добываю SD-гнездо и на следующей неделе подключаю к меге SD-карту. Разбираюсь с ее протоколом, с драйвером vfat, учусь читать файлы.

    2. Пишу для корвета загрузчик 1 уровня (тот который 256 байт) и поддержку в меге для него. Допаиваю от бокового порта к меге проводки порта С (там их потребуется штук 6, как я прикинул). Разбираюсь с двунаправленным режимом ВВ55 - я раньше с ним никогда не сталкивался, придется разбираться с нуля. В конце должна получиться система, умеющая загружать в корвет произвольный код с SD-карты, тот же КТДП к примеру, и запускать его.

    3. Делаю в AVR обработчик запросов, поступающих из корвета через боковой порт. То самое API, про которое мы говорили ранее. Пока хотя бы функции чтения и записи секторов. Всякие там монтирование и прочее можно отложить на самый конец.

    Вот после этих трех шагов уже можно будет готовить различные варианты загрузчиков 2 уровня, биосов итд. Я думаю, что это займет пару недель, не меньше, мне же не только корветом заниматься приходится Надеюсь на активную помощь от сообщества и в первую очередь ESL как основного генератора идей.

    Задача осложняется тем, что все драйвера vfat написаны на С. Мне бы очень не хотелось писать на С задачи реального времени типа начального загрузчика. Можно скомбинировать код на С и ассемблере, но для AVR я такого не делал никогда. Даже не представляю, какие там соглашения о связях, сохранении регистров, стеке итд. Придется разбираться, ну или все писать на С с риском не влезть по времени между стробом адреса и посылкой данных в порт.

Страница 5 из 36 ПерваяПервая 123456789 ... ПоследняяПоследняя

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

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

Эту тему просматривают: 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

Ваши права

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