User Tag List

Показано с 51 по 60 из 354

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

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

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

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

    По умолчанию Первый этап завершен.

    После некоторого перерыва, возвращаюсь к разработке. Даю отчет о проделанной работе.
    Итак, что сделано.

    1. Полностью собрал схему контроллера. Она получилась на удивление простой - Мега32, 9 резисторов, 1 конденсатор, 1 светодиод, регулятор напряжения LM317, ну и разъемы. От корвета к плате идут 16 проводков, из них 2 - питание и земля.

    2. Написал программу для контроллера. Она умеет заливать в корвет загрузчики 1 и 2 фазы, разбирается с файловой системой FAT на карте SD, ну и рудиментарно эмулирует пресловутое API, которое мы тут так долго обсуждали. Пока реализовано только 2 операции - чтение и запись логических секторов, и только для одного образа диска. Доделывать API дальше я не вижу смысла без реализации клиентской части.

    3. Написал загрузчик 1 фазы, тот, который 256 байт. Он заливается в nvram и оттуда грузится в корвет при старте. Его единственная задача - получить и запустить загрузчик 2 фазы. Для расширения функциональности я добавил туда возможность выбора файла для загрузки. Работает это так. По умолчанию грузится с карты файл loader.bin - это загрузчик CP/M, как мы тут ранее и обсуждали. Если же во время тестов ОПТС нажать и удерживать одну из кнопок 0-7 на клавиатуре, то вместо loader.bin будет загруже файл ROMn.BIN, n-нажатая кнопка. Это позволяет, например, загрузить КТДП, если положить его на карту, обозвать ROM0.BIN, и при старте удерживать кнопку 0.

    4. Написал загрузчик 2 фазы. Его цель - получить из смонтированного образа диска А системные дорожки, разместить их в памяти, и передать управление на точку входа биоса BOOT. Этот загрузчик уже взаимодействует с контроллером через дисковое API. Адрес точки входа, адрес загрузки, размер системной области и прочие параметры загрузчик берет из инфосектора диска.

    В результате, после муторной отладки получилась вполне достойная вещь. Система уже функционирует полностью и грузит CP/M с образа KDI, записанного на карту. Но на этом и все. Сама CP/M, естественно, функционировать нормально не может, так как биос ничего не знает о дисковом API Если подключен дисковод - начинает работать с реальным дисководом как с диском А. Если не подключен - просто виснет.

    Итак, железо готово, и программная поддержка API в контроллере имеется и более-менее отлажена. Теперь, для полного функционирования системы, надо написать BIOS, который имел бы в себе драйвер эмулируемых дисков.

    Я тут, пока писал загрузчики, попрограммировал немного на ассемблере 8080. Блин, это АД и П#$%ец. Регистров всего 7, большинство операций требует аккумулятор, обрабатывается всего 8 бит за раз... Простейшая операция 16-разрядного деления превращается в монстра на полэкрана. Видимо, я уже зажрался современными процессорами. А ведь в конце 80-х, собрав свой первый РК-86, я много писал на этом ассемблере.
    Вообщем, надо браться за биос. Не очень прятная работа, но хорошее упражнение для мозгов. Только с силами соберусь. Проблема еще и в том, что отлаживать его придется почти вслепую - поди пойми, что там, внутри корвета, виснет... Я предполагаю делать это так:

    1. Выбрать из имющихся исходных текстов тот, который можно собрать ассемблером на PC.

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

    3. Потихонечку добавить в исходники биоса свой драйвер эмулируемых дисков.

    4. Собрать новый образ системных дорожек, уже с моим биосом, и начать муторную отладку.

    Кстати, непоянтно еще, чем эти исходники собирать. Для Z80 есть отличный кроссасемблер Z80asm. Но все исходники биосов идут в нотации Intel (которую я терпеть не могу), а вот чем транслировать такой код (под линуксом, естественно) я пока толком не нашел. Только всякие странные полуживые проекты.

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

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

    Ну, ладно. Прилагаю архив с исходниками. Туда же положил принципиальную схему моего варианта устройства. Понятно, что реализовать схему можно как угодно, необязательно точно так, как у меня. Например, регулятор напряжения LM317 (делающий 3.3v для СД-карты) некоторые заменяют просто парой диодов. Ну и так далее.
    Надеюсь, кого-нибудь это все же заинтересует и я не зря старался.
    Вложения Вложения
    Последний раз редактировалось forth32; 03.07.2014 в 13:48.

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

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

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

Ваши права

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