Последние темы
» Вити больше нет!автор bug19 Пн Фев 20 2023, 19:54
» Собираем оригинальный Орион 128
автор bug19 Пн Фев 20 2023, 19:47
» Проблема плющеного экрана ОРИОНА
автор kanzler Пн Ноя 28 2022, 12:05
» Орион 128 и его клоны возрождение 2019-2022 год
автор kanzler Пн Ноя 28 2022, 12:03
» Электроника КР-04. Информация, документы, фото.
автор kanzler Пн Ноя 28 2022, 12:02
» Новости форума
автор kanzler Пн Ноя 28 2022, 11:52
» Орион-128 НГМД запуск 2021 года
автор matrixplus Сб Сен 10 2022, 17:36
» ПЗУ F800 для РК86
автор ведущий_специалист Сб Сен 10 2022, 10:37
» Микропроцессорная лаборатория "Микролаб К580ИК80", УМК-80, УМПК-80 и др.
автор Электротехник Вт Июл 26 2022, 19:33
» Орион-128 SD карта в Орионе
автор matrixplus Чт Июн 02 2022, 09:00
» 7 Мая. День Радио!
автор Viktor2312 Чт Май 12 2022, 10:58
» Серия: Массовая радио библиотека. МРБ
автор Viktor2312 Ср Май 11 2022, 12:17
» Полезные книги
автор Viktor2312 Пн Май 09 2022, 15:07
» Орион 128 Стандарты портов и системной шины Х2
автор matrixplus Вс Май 08 2022, 23:08
» Орион-128 и Орион ПРО еще раз про блоки питания
автор matrixplus Вс Май 08 2022, 19:09
» Орион-128 Программаторы
автор matrixplus Вс Май 08 2022, 19:02
» Орион ПРО история сборки 2021 до 2022
автор matrixplus Вс Май 08 2022, 18:47
» Анонсы монет (New coin).
автор Viktor2312 Сб Май 07 2022, 23:11
» Хочу свой усилок для квартиры собрать не спеша
автор Viktor2312 Сб Май 07 2022, 19:33
» Амфитон 25у-002С
автор Viktor2312 Сб Май 07 2022, 09:38
» Майнер: T-Rex
автор Viktor2312 Вс Май 01 2022, 09:12
» GoWin. Изучение документации. SUG100-2.6E_Gowin Software User Guide. Среда разработки EDA.
автор Viktor2312 Пн Апр 25 2022, 01:01
» GoWin. Изучение документации. UG286-1.9.1E Gowin Clock User Guide.
автор Viktor2312 Сб Апр 23 2022, 18:22
» GoWin. Documentation Database. Device. GW2A.
автор Viktor2312 Ср Апр 20 2022, 14:08
» GOWIN AEC IP
автор Viktor2312 Ср Апр 20 2022, 12:08
Самые активные пользователи за месяц
Нет пользователей |
Поиск
Специалист: Подключение SD карты
Страница 1 из 1 • Поделиться
Специалист: Подключение SD карты
1
Этот контроллер позволяет подключить SD или SDHC карту к компьютеру Специалист. Контроллер позволяет быстро запускать программы с SD карты. Программы специально разработанные или доработанные для этого контроллера могут сохранять файлы на SD карту. В контроллере используется микроконтроллер ATMega8.
Лицензионное соглашение. AS IS. Вы имеете право использовать эти разработки в любых целях, если принимаете ниже написанное условие. В случае какого-либо ущерба, возникшего по причине использования моих разработок, я не несу никакой ответственности. Вы можете даже удалить копирайт и выдавать их за свои. Но мне было бы приятнее, если копирайт остался на месте.
Все материалы находятся в репозитории https://github.com/alemorf/retro/tree/master/specialist-sd_controller:
• Прошивка specsd.hex для ATMega8 в формате Intel HEX, который должен поддерживать любой программатор.
• Схема и печатная плата для микроконтроллера в TQFP корпусе для ЛУТ в формате программы Proteus в формате PNG и формате DOCX (Microsoft Word).
• Схема и печатная плата для микроконтроллера в DIP корпусе для ЛУТ в формате программы Proteus.
• Печатная плата от Mifody для микроконтроллера в DIP корпусе для ЛУТ в формате Sprint Layout.
• Исходники прошивки. Что бы их скомпилировать без лишних усилий, вам потребуется среда разработки Code Vision AVR.
• Файлы для записи на SD карту: boot.rks, sdbios.rks, shell.rks.
• Исходные коды файлов boot.rks, sdbios.rks, shell.rks и компилятор c8080 для них.
• Оригинальная прошивка ПЗУ Специалиста.
• Прошивка ПЗУ Специалиста со встроенным драйвером SD карты. Нужно, если вы не хотите загружаться через порт магнитофона.
При прошивке микроконтроллера во фьюзах выбираете: внутренний тактовый генератор 8 МГц. Пример для Code Vision AVR:
Принцип работы
Контроллер содержит драйвер файловой системы FAT16 / FAT32. Контроллер соединен со Специалистом через параллельный порт (вторая КР580ВВ55А по адресу F000h) и вход магнитофона. Выходы контроллера D0..D7 подключаются к ножкам ВВ55 PA0..PA7, выход PULSE подключается к PC7. Контроллер подключается к компьютеру без изменения ПЗУ и схемы компьютера.
Контроллер всегда перезагружается вместе с компьютером. После перезагрузки Специалист готов загружать программу с магнитной ленты. После перезагрузки контроллера, контроллер читает с SD карты файл boot/boot.rks и загружает этот файл в Специалист через вход магнитофона. Контроллер выполняет модуляцию данных так как нужно Специалисту: фазовая модуляция, 1400 бит в секунду, 32 байта 0x00, стартовый байт 0xE6. У контроллера есть ограничение, файл boot.rks должен быть меньше 513 байт. Моя версия этого файла занимает 98 байт и загружается за (32+1+98)*8/1400 = 0,75 секунды.
Программа из файла boot.rks через параллельный порт отправляет контроллеру команду на загрузку файла boot/sdbios.rks. И через параллельный порт с очень большой скоростью загружает этот файл в память и запускает. Размер этого файла может быть хоть во весь размер оперативной памяти, главное, чтобы он не затирал стек и файл boot.rks.
ПЗУ со встроенным драйвером SD карты (находится в репозитории) не требует соединения контроллера и компьютера через вход магнитофона. Загрузка начинается сразу с файла boot/sdbios.rks через параллельный порт.
Файл sdbios содержит набор команд для взаимодействия с SD контроллером. Код из этого файла загружается в область памяти 8AE7h - 8EFFh. При желании этот код можно разместить в любом месте памяти и даже в ПЗУ.
Программа из файла sdbios.rks через параллельный порт отправляет контроллеру команду на загрузку файла boot/shell.rks.
shell.rks это программа похожая на Norton Commander. Она позволяет запускать программы, копировать, удалять, переименовывать, перемещать файлы и каталоги. Эта программа обращается к sdbios для взаимодействия с SD контроллером.
Можно любую программу и игру в формате RKS переименовать в boot/sdbios.rks или boot/shell.rks и она будет запускаться.
Описание SD BIOS
SD BIOS может быть загружен в любое место памяти, поэтому нельзя общаться к нему по фиксированному адресу.
После запуска вашей программы регистровая пара BC будет содержать точку входа в SD BIOS.
Регистр A будет содержать версию набора команд (сейчас 1).
Регистровая пара HL будет содержать адрес строки - командную строку.
Регистровая пара DE будут содержать адрес строки - имя загруженного файла, т.е. собственное имя программы.
Для вызова функции SD BIOS в регистр A надо поместить код функции (см ниже) и вызвать подпрограмму по адресу, который был в BC при выполнении первой команды вашей программы.
Функции SD BIOS:
После запуска SD BIOS карта памяти выглядит так:
Схема
Устройство подключается к компьютеру разъемом J8 в порт принтера компьютера. Т.е. ко второй КР580ВВ55.
Выходы устройства D0..D7 подключаются к ножкам ВВ55 PA0..PA7, выход PULSE подключается к PC7
Готовое устройство
Лицензионное соглашение. AS IS. Вы имеете право использовать эти разработки в любых целях, если принимаете ниже написанное условие. В случае какого-либо ущерба, возникшего по причине использования моих разработок, я не несу никакой ответственности. Вы можете даже удалить копирайт и выдавать их за свои. Но мне было бы приятнее, если копирайт остался на месте.
Все материалы находятся в репозитории https://github.com/alemorf/retro/tree/master/specialist-sd_controller:
• Прошивка specsd.hex для ATMega8 в формате Intel HEX, который должен поддерживать любой программатор.
• Схема и печатная плата для микроконтроллера в TQFP корпусе для ЛУТ в формате программы Proteus в формате PNG и формате DOCX (Microsoft Word).
• Схема и печатная плата для микроконтроллера в DIP корпусе для ЛУТ в формате программы Proteus.
• Печатная плата от Mifody для микроконтроллера в DIP корпусе для ЛУТ в формате Sprint Layout.
• Исходники прошивки. Что бы их скомпилировать без лишних усилий, вам потребуется среда разработки Code Vision AVR.
• Файлы для записи на SD карту: boot.rks, sdbios.rks, shell.rks.
• Исходные коды файлов boot.rks, sdbios.rks, shell.rks и компилятор c8080 для них.
• Оригинальная прошивка ПЗУ Специалиста.
• Прошивка ПЗУ Специалиста со встроенным драйвером SD карты. Нужно, если вы не хотите загружаться через порт магнитофона.
При прошивке микроконтроллера во фьюзах выбираете: внутренний тактовый генератор 8 МГц. Пример для Code Vision AVR:
Принцип работы
Контроллер содержит драйвер файловой системы FAT16 / FAT32. Контроллер соединен со Специалистом через параллельный порт (вторая КР580ВВ55А по адресу F000h) и вход магнитофона. Выходы контроллера D0..D7 подключаются к ножкам ВВ55 PA0..PA7, выход PULSE подключается к PC7. Контроллер подключается к компьютеру без изменения ПЗУ и схемы компьютера.
Контроллер всегда перезагружается вместе с компьютером. После перезагрузки Специалист готов загружать программу с магнитной ленты. После перезагрузки контроллера, контроллер читает с SD карты файл boot/boot.rks и загружает этот файл в Специалист через вход магнитофона. Контроллер выполняет модуляцию данных так как нужно Специалисту: фазовая модуляция, 1400 бит в секунду, 32 байта 0x00, стартовый байт 0xE6. У контроллера есть ограничение, файл boot.rks должен быть меньше 513 байт. Моя версия этого файла занимает 98 байт и загружается за (32+1+98)*8/1400 = 0,75 секунды.
Программа из файла boot.rks через параллельный порт отправляет контроллеру команду на загрузку файла boot/sdbios.rks. И через параллельный порт с очень большой скоростью загружает этот файл в память и запускает. Размер этого файла может быть хоть во весь размер оперативной памяти, главное, чтобы он не затирал стек и файл boot.rks.
ПЗУ со встроенным драйвером SD карты (находится в репозитории) не требует соединения контроллера и компьютера через вход магнитофона. Загрузка начинается сразу с файла boot/sdbios.rks через параллельный порт.
Файл sdbios содержит набор команд для взаимодействия с SD контроллером. Код из этого файла загружается в область памяти 8AE7h - 8EFFh. При желании этот код можно разместить в любом месте памяти и даже в ПЗУ.
Программа из файла sdbios.rks через параллельный порт отправляет контроллеру команду на загрузку файла boot/shell.rks.
shell.rks это программа похожая на Norton Commander. Она позволяет запускать программы, копировать, удалять, переименовывать, перемещать файлы и каталоги. Эта программа обращается к sdbios для взаимодействия с SD контроллером.
Можно любую программу и игру в формате RKS переименовать в boot/sdbios.rks или boot/shell.rks и она будет запускаться.
Описание SD BIOS
SD BIOS может быть загружен в любое место памяти, поэтому нельзя общаться к нему по фиксированному адресу.
После запуска вашей программы регистровая пара BC будет содержать точку входа в SD BIOS.
Регистр A будет содержать версию набора команд (сейчас 1).
Регистровая пара HL будет содержать адрес строки - командную строку.
Регистровая пара DE будут содержать адрес строки - имя загруженного файла, т.е. собственное имя программы.
Для вызова функции SD BIOS в регистр A надо поместить код функции (см ниже) и вызвать подпрограмму по адресу, который был в BC при выполнении первой команды вашей программы.
Функции SD BIOS:
Имя | Описание (регистры перед вызовом / регистры после вызова) |
Reboot | Теплая перезагрузка (A=0, HL="", DE="" / A=код ошибки) "" значит адрес по которому записано число 0. |
Exec | Запустить программу (A=0, HL=имя файла, DE=командная строка / A=код ошибки) HL, DE содержат адрес по которому записаны символы и в конце число 0. |
FindFirst | Начать получение списка файлов (A=1, HL=путь, DE=максимум файлов для загрузки, BC=адрес / HL=сколько загрузили, A=код ошибки) |
FindNext | Продолжить получение списка файлов (A=1, HL=":", DE=максимум файлов для загрузки, BC=адрес / HL=сколько загрузили, A=код ошибки) |
Open | Открыть файл (A=2, D=0, HL=имя файла / A=код ошибки) |
Create | Создать файл (A=2, D=1, HL=имя файла / A=код ошибки) |
MkDir | Создать папку (A=2, D=2, HL=имя файла / A=код ошибки) |
Delete | Удалить файл/папку (A=2, D=100, HL=имя файла / A=код ошибки) |
Seek | Установить позицию чтения записи файла (A=3, B=режим, DE:HL=позиция / A=код ошибки, DE:HL=позиция) (С начала B=0, с текущего положения B=1, с конца B=2) |
GetFileSize | Получить размер файла (A=3, B=100 / A=код ошибки, DE:HL= размер файла) |
GetDiskSize | Получить размер диска в Мб (A=3, B=101 / A=код ошибки, DE:HL= размер диска) |
GetDiskFree | Получить свободное место на диске в Мб (A=3, B=102 / A=код ошибки, DE:HL= размер файла) |
SwapFiles | Работа с двумя открытыми файлами (A=3, B=200 / A=код ошибки) |
Read | Прочитать из файла (A=4, HL=размер, DE=адрес / A=код ошибки, HL=сколько загрузили) |
Write | Записать в файл (A=5, HL=размер, DE=адрес / A=код ошибки) |
WriteEOF | Конец файла (A=5, HL=0 / A=код ошибки) |
Move | Переместить файл/папку (A=6, HL=из, DE=в / A=код ошибки) |
Адрес | Имя | Описание |
8AE7h | SELF_NAME | Собственное имя файла 256 байт (этот адрес содержится в DE после запуска) |
8BE7h | CMD_LINE | Командная строка 256 байт (этот адрес содержится в HL после запуска) |
8CE7h | SD_BIOS_CODE | Код SD BIOS 537 байт (возможно будет расти в начало сдвигая SELF_NAME и CMD_LINE) |
8F00h | - | Не используется ~233 байта (возможно тут есть переменные монитора) |
8FDFh | MONITOR_VARS | Переменные монитора |
9000h | VIDEO_MEM | Видеопамять |
Устройство подключается к компьютеру разъемом J8 в порт принтера компьютера. Т.е. ко второй КР580ВВ55.
Выходы устройства D0..D7 подключаются к ножкам ВВ55 PA0..PA7, выход PULSE подключается к PC7
Готовое устройство
Последний раз редактировалось: alemorf (Пн Фев 11 2019, 18:18), всего редактировалось 6 раз(а)
.
2
Извиняюсь за свою тупость, но для меня это непонятное описание и схема.alemorf пишет:Этот контроллер позволяет подключить SD или SDHC карту к компьютеру Специалист
Не написано о том как устройство подключается. Т.е непонятно именно как подключить. В описании или схеме нет слов - "это подключается к компьютеру к таким-то цепям шины, аппаратно-программно обращение к контроллеру происходит так-то". Т.е не объяснён физический принцип интерфейса между устройством и компьютером. Наиболее похожим на цепи подключения к компьютеру выглядит шильдик J8 (хотя на схеме у J8 12 контактов, а на фото видно 13 штырьков).
А приведённая схема контроллера начерчена непонятно по какому ГОСТ-у. Стрелка означает - уход из платы наружу (к другим платам или разъёму). А здесь все цепи со стрелками и непонятно обозначенные одним именем цепи со стрелками соединяются или нет (конечно по рисунку печатной платы можно восстановить схему, но лучше иметь понятную схему). Можно думать, что изображены какие-то отдельные модули, т.к все они со стрелками.
Судя по сигналам D0...D7, похоже, речь о включении в шину процессора, а не как в подобных контроллерах для других бытовых ЭВМ через ППА. Но не указан адрес по которому устройство включается и адресуется, т.е откуда брать чип-селект и каким буквенным обозначением он обозначен в приведённой схеме. Если по словам TAPE и RESET можно догадаться, что это МГ-вход в компьютере и сброс, то что такое PULSE догадаться невозможно. Но если устройство включается в шину, то озадачивает отсутствие основных сигналов шины управления - /RD и /WR от процессора.
Те, кто серъёзно занимаются Специалистом используют собственные существенно улучшенные ROM-BIOS-ы и мониторы, потому полезнее был бы исходник холодного загрузчика (тот который отдельно был 98 байт и для более быстрой загрузки помещён в ПЗУ какого-то ROM-BIOS, возможно вместо МГ-драйвера) или даже просто отдельный дамп, т.к крошечную программу дизассемблировать не проблема и пользователь сам знает куда ему удобно поместить этот загрузчик (можно пунктом в стартовое меню по типу ИРИШИ, можно файлом в ROM-диск, можно прошить в одно из 7 имеющихся в Специалисте ПЗУ РФ2, ведь не обязательно делать автостартовость, могут быть и другие ОС).alemorf пишет:• Прошивка ПЗУ Специалиста со встроенным драйвером SD карты. Нужно, если вы не хотите загружаться через порт магнитофона.
Эта фраза полностью не ясна. При запуске какой программы? Программы пользователя (например игры) хранимой на флэш-карте? Или какой-то системной программы пакета, типа shell.rks? Или это надо делать лишь при первом обращении для инициализации системы. Полная неясность.alemorf пишет:При запуске программы с помощью SD BIOS регистр A содержит версию набора команд (сейчас 1). BС содержит адрес входа в SD BIOS. HL командную строку. DE собственное имя.
Можно подумать, что SD BIOS (я бы назвал это блок интерфейса с контроллером) можно загрузить в любое место ОЗУ и чтобы сообщить этому SD BIOS по какому адресу он загружен мы передаём ему этот адрес в BC (это одновременно и адрес загрузки кода SD BIOS и точка входа). Непонятно, для запуска программы надо передавать адрес в BC, а для вызова других функций SD BIOS не надо?
Как это понять? В регистре всегда какое-то число, пустоту нельзя передать.alemorf пишет:HL="", DE=""
Идея подключения внешнего интеллектуального контроллера, который бы сам управлял дисковым приводом не нова. Это сделали ещё в конце 70-тых. Например к VIC-20, Commodore-64 и другим дисковод подключается, вроде бы даже по последовательному интерфейсу (оттого он такой тормозной, не намного быстрее магнитофона). В контроллере стоит свой CPU 6502 и своя ОС. Это освобождает от необходимости в самом компьютере тратить 10 кб ОЗУ на хранение DOS, достаточно только модуля связи с контроллером размером в 200 байт. Скорости Специалиста 2 МГЦ с учётом его без-WAIT-овости хватает на программный обмен со скоростью 8 кб в секунду. Это кое-как приемлемо, если сам дисковод быстрый (т.к складывается время загрузки с носителя и время пересылки)
Потому можно сделать подобный контроллер подключаемый к любой бытовой ЭВМ имеющей только МГ-вход и МГ-выход. Скорость будет намного ниже, но зато никаких вторжений. А нам важно, что при этом обходится проблема ИРИШИ, РК и Львова с нехваткой скорости для дискетного формата двойной плотности. Во Львове кстати, несмотря на высокий клок 2.2 МГЦ, из-за WAIT-ов скорости с трудом хватило только на SD, тогда как в Специалисте с его жалким тактом в 2 МГЦ все контроллеры используют формат DD. А в ИРИШЕ в режимах 2 и 3 скорости не хватает и на SD. Потому для ИРИШИ выход - это применение DMA, что и сделали в промышленности, или вот такой-же внешний быстродействующий контроллер. Но подключать его надо по параллельному интерфейсу, тем более, что он в ИРИШЕ уже есть, последовательный интерефейс на ВВ51 в ИРИШЕ медленный (до 9.6 кбод).
PS. Выложенное на Github-е скачать не могу. Это единственный из всех сайтов мира сайт, куда мой браузер просто не заходит, всегда ошибка 404. Но даже браузер, который заходит не помогает, там замучишься разобраться, что и как скачать. Полно файлообменников без всяких проблем. Сейчас в этом хобби так мало квалифицированных разработчиков, что исходники для программ контроллеров вряд-ли кому-то нужны. Да и обычно проще и удобнее написать своё, чем разбираться в чужом. А нужно лишь то, что требуется для тупого повторения конструкции. Так что у меня нет даже возможности дизассемблировать холодный загрузчик и посмотреть как он работает.
Последний раз редактировалось: barsik (Сб Фев 09 2019, 15:37), всего редактировалось 1 раз(а)
barsik- Ветеран
- Сообщения : 1032
Дата регистрации : 2016-11-10
Откуда : Россия, СПб
Re: Специалист: Подключение SD карты
3
barsik пишет:Ни слова не написано о том как устройство подключается. Т.е непонятно именно как подключить. В описании или схеме нет слов - "это подключается к компьютеру к таким-то цепям шины, аппаратно-программно обращение к контроллеру происходит так-то". Т.е не объяснён физический принцип интерфейса между устройством и компьютером. Наиболее похожим на цепи подключения к компьютеру выглядит шильдик J8 (хотя на схеме у J8 12 контактов, а на фото видно 13 штырьков).alemorf пишет:Этот контроллер позволяет подключить SD или SDHC карту к компьютеру Специалист
А приведённая схема контроллера начерчена непонятно по какому ГОСТ-у. Стрелка означает - уход из платы наружу (к другим платам или разъёму). А здесь все цепи со стрелками и непонятно обозначенные одним именем цепи со стрелками соединяются или нет (конечно по рисунку печатной платы можно восстановить схему, но лучше иметь понятную схему). Можно думать, что изображены какие-то отдельные модули, т.к все они со стрелками.
Судя по сигналам D0...D7, похоже, речь о включении в шину процессора, а не как в подобных контроллерах для других бытовых ЭВМ через ППА. Но не указан адрес по которому устройство включается и адресуется, т.е откуда брать чип-селект и каким буквенным обозначением он обозначен в приведённой схеме. Если по словам TAPE и RESET можно догадаться, что это МГ-вход в компьютере и сброс, то что такое PULSE догадаться невозможно. Но если устройство включается в шину, то озадачивает отсутствие основных сигналов шины управления - /RD и /WR от процессора.
Приводя в порядок старые файлы, я куда то потерял этот абзац и картинки. Добавлю чуть позже.
Устройство подключается к компьютеру разъемом J8 в порт принтера компьютера. Т.е. ко второй КР580ВВ55.
Выходы устройства D0..D7 подключаются к ножкам ВВ55 PA0..PA7, выход PULSE подключается к PC7.
barsik пишет:Те, кто серъёзно занимаются Специалистом используют собственные существенно улучшенные ROM-BIOS-ы и мониторы, потому полезнее был бы исходник холодного загрузчика (тот который отдельно был 98 байт и для более быстрой загрузки помещён в ПЗУ какого-то ROM-BIOS, возможно вместо МГ-драйвера) или даже просто отдельный дамп, т.к крошечную программу дизассемблировать не проблема и пользователь сам знает куда ему удобно поместить этот загрузчик (можно пунктом в стартовое меню по типу ИРИШИ, можно файлом в ROM-диск, ведь не обязательно делать автостартовость, могут быть и другие ОС).alemorf пишет:• Прошивка ПЗУ Специалиста со встроенным драйвером SD карты. Нужно, если вы не хотите загружаться через порт магнитофона.
Код этой программы прилагается. Он тут:
https://github.com/alemorf/retro/blob/master/specialist-sd_controller/%D0%A4%D0%B0%D0%B9%D0%BB_boot_rks/boot.asm
Или тут:
https://pastebin.com/6DmGJLm1
barsik пишет:Эта фраза полностью не ясна. При запуске какой программы? Программы пользователя (например игры) хранимой на флэш-карте? Или какой-то системной программы пакета, типа shell.rks? Или это надо делать лишь при первом обращении для инициализации системы. Полная неясность.alemorf пишет:При запуске программы с помощью SD BIOS регистр A содержит версию набора команд (сейчас 1). BС содержит адрес входа в SD BIOS. HL командную строку. DE собственное имя.
Программы пользователя (например игры) хранимой на флэш-карте.
barsik пишет:Можно подумать, что SD BIOS (я бы назвал это блок интерфейса с контроллером) можно загрузить в любое место ОЗУ и чтобы сообщить этому SD BIOS по какому адресу он загружен мы передаём ему этот адрес в BC (это одновременно и адрес загрузки кода SD BIOS и точка входа). Непонятно, для запуска программы надо передавать адрес в BC, а для вызова других функций SD BIOS не надо?
BC передается программе пользователя, что бы только что запущенная программа пользователя могла обратится к SDBIOS. Ведь SDBIOS может быть загружен куда угодно.
barsik пишет:Как это понять? В регистре всегда какое-то число, пустоту нельзя передать.alemorf пишет:HL="", DE=""
Это адрес в памяти, где находится число 0.
mvi a, 0
lxi h, emptyString
lxi d, emptyString
call sdbios
...
emptyString: db 0
Аналогично, если требуется запустить игру в папке GAMES/LODERNR.RKS, то указывааем его имя
mvi a, 0
lxi h, fileName
lxi d, emptyString
call sdbios
...
fileName: db "GAMES/LODERNR.RKS", 0
emptyString: db 0
Re: Специалист: Подключение SD карты
4
barsik пишет:PS. Выложенное на Github-е скачать не могу. Это единственный из всех сайтов мира сайт, куда мой браузер просто не заходит, всегда ошибка 404. Но даже браузер, который заходит не помогает, там замучишься разобраться, что и как скачать. Полно файлообменников без всяких проблем. Сейчас в этом хобби так мало квалифицированных разработчиков, что исходники для программ контроллеров вряд-ли кому-то нужны. Да и обычно проще и удобнее написать своё, чем разбираться в чужом. А нужно лишь то, что требуется для тупого повторения конструкции. Так что у меня нет даже возможности дизассемблировать холодный загрузчик и посмотреть как он работает.
http://www.spetsialist-mx.ru/Soft/Specialist_SD.rar
.
5
Спасибо за выкладку архива не в Github-е.
Хотелось бы узнать подробности о компиляторе C8080. Печально, что нет никакой документации. Без документации получается продукт только для его автора. Интересна сравнительная эффективность компилятора C8080 в сравнении с BDS_C и Aztec_C (остальные приличные СP/M-компиляторы Си для Z80). В чём выигрыш, по скорости прогона или по объёму кода? Или пришлось делать свой компилятор ради того, чтобы это был компилятор не на родном процессоре, а именно кросс-компилятор в коды КР580 для PC и чтобы возникла возможность его оперативно модифицировать под конкретные задачи.
До вас написать компилятор Си в нашей стране пытался в 1988-89 один автор-любитель из Саратова. Он написал Best-Си для РК86. И на нём даже написали пяток игр для ОРИОНА. Написать собственный полноценный компилятор Си очень трудоёмко. Даже, если использовать чужие заготовки и писать на самом Си. Читал, что на каком-то отечественном форуме несколько людей уже годами пишут свои компиляторы Паскаля и Си.
Леор Золман автор BDC C в интервью сказал, что на написание на ассемблере самой первой версии, что смогла выполнить компиляцию у него ушло 3.5 месяца упорного труда и после этого он ещё несколько лет "доводил его до ума".
Вообще, у меня сложилось мнение, что с наличием кросс-компиляторов Паскаля и СИ работающими на PC и выдающими код для КР580 плохо. По Си возможно это иначе, но я пытался найти такой кросс-компилятор Паскаля и обломился. Для Z80 такие компиляторы есть, и даже c IDE, но и то, это или платное, или полуфабрикат (типа студенческих работ), брошенный недоделанным. Для Си, в связи с его намного большей популяностью, вероятно, кросс-средства даже под КР580 есть. Или нет?
Для инициализации программы обслуживания контроллера, которую можно загрузить по любому случайному адресу, следует сделать CALL на начальный адрес загрузки. Тогда программа возвращает в регистрах BC адрес входа в программный интерфейс, а в регистре A возвращает номер версии набора команд (сейчас 1).
Это логично. Т.е запустив стартовый блочок в 98 байт мы по возвращаемым параметрам узнаём где в ОЗУ в данной конкретной версии расположен вход в программный интерфейс контроллера. Видимо это удобнее, чем конкретный адрес в вершине ОЗУ, ниже 8FC0, где стоял бы JMP на вход в BIOS по типу стандартного входа на адресе 0005 в CP/M.
Но содержимое DE и HL снова запутывают понимание ещё больше. Зачем при инициализации программы в HL передавать командную строку? И какое-то собственное имя передаём в DE. Теперь непонятно и кто-кому это передаёт. Ведь речь же вроде о том, что возвращает программа контроллера, а не о том, что мы передаём программе при её инициализации или использовании.
Хотелось бы узнать подробности о компиляторе C8080. Печально, что нет никакой документации. Без документации получается продукт только для его автора. Интересна сравнительная эффективность компилятора C8080 в сравнении с BDS_C и Aztec_C (остальные приличные СP/M-компиляторы Си для Z80). В чём выигрыш, по скорости прогона или по объёму кода? Или пришлось делать свой компилятор ради того, чтобы это был компилятор не на родном процессоре, а именно кросс-компилятор в коды КР580 для PC и чтобы возникла возможность его оперативно модифицировать под конкретные задачи.
До вас написать компилятор Си в нашей стране пытался в 1988-89 один автор-любитель из Саратова. Он написал Best-Си для РК86. И на нём даже написали пяток игр для ОРИОНА. Написать собственный полноценный компилятор Си очень трудоёмко. Даже, если использовать чужие заготовки и писать на самом Си. Читал, что на каком-то отечественном форуме несколько людей уже годами пишут свои компиляторы Паскаля и Си.
Леор Золман автор BDC C в интервью сказал, что на написание на ассемблере самой первой версии, что смогла выполнить компиляцию у него ушло 3.5 месяца упорного труда и после этого он ещё несколько лет "доводил его до ума".
Вообще, у меня сложилось мнение, что с наличием кросс-компиляторов Паскаля и СИ работающими на PC и выдающими код для КР580 плохо. По Си возможно это иначе, но я пытался найти такой кросс-компилятор Паскаля и обломился. Для Z80 такие компиляторы есть, и даже c IDE, но и то, это или платное, или полуфабрикат (типа студенческих работ), брошенный недоделанным. Для Си, в связи с его намного большей популяностью, вероятно, кросс-средства даже под КР580 есть. Или нет?
Не особо прояснилось. Если правильно понял уточнения, то теперь эту фразу надо понимать так:alemorf пишет:При запуске программы с помощью SD BIOS регистр A содержит версию набора команд (сейчас 1). BС содержит адрес входа в SD BIOS. HL командную строку. DE собственное имя.
Для инициализации программы обслуживания контроллера, которую можно загрузить по любому случайному адресу, следует сделать CALL на начальный адрес загрузки. Тогда программа возвращает в регистрах BC адрес входа в программный интерфейс, а в регистре A возвращает номер версии набора команд (сейчас 1).
Это логично. Т.е запустив стартовый блочок в 98 байт мы по возвращаемым параметрам узнаём где в ОЗУ в данной конкретной версии расположен вход в программный интерфейс контроллера. Видимо это удобнее, чем конкретный адрес в вершине ОЗУ, ниже 8FC0, где стоял бы JMP на вход в BIOS по типу стандартного входа на адресе 0005 в CP/M.
Но содержимое DE и HL снова запутывают понимание ещё больше. Зачем при инициализации программы в HL передавать командную строку? И какое-то собственное имя передаём в DE. Теперь непонятно и кто-кому это передаёт. Ведь речь же вроде о том, что возвращает программа контроллера, а не о том, что мы передаём программе при её инициализации или использовании.
barsik- Ветеран
- Сообщения : 1032
Дата регистрации : 2016-11-10
Откуда : Россия, СПб
Re: Специалист: Подключение SD карты
6
barsik пишет:Хотелось бы узнать подробности о компиляторе C8080.
Проект закрыт и забыт. Этот компилятор создавал самый быстрый код. Использовались эволюционные алгоритмы... или что то похожее. Одновременно компилировалось около миллиона разных вариантов кода. У всех вариантов измерялось время выполнения. Худшие варианты отбрасывались, лучшие дублировались и мутировали. Мутировали - значит части кода менялись местами (A+B на B+A), переменные переносились в другие регистры (mvi c, 6 add c на mvi d, 6 add d) и т.п.
barsik пишет:Даже, если использовать чужие заготовки и писать на самом Си. Читал, что на каком-то отечественном форуме несколько людей уже годами пишут свои компиляторы Паскаля и Си.
Если не стоит задача в результате компиляции получить быструю программу, то создание компилятора задача не сложная. Программа на Си преобразуется в промежуточный код состоящий из ~20 команд. Каждой из них можно жестко задать машинный код.
barsik пишет:Не особо прояснилось. Если правильно понял уточнения, то теперь эту фразу надо понимать так:
Для инициализации программы обслуживания контроллера, которую можно загрузить по любому случайному адресу, следует сделать CALL на начальный адрес загрузки. Тогда программа возвращает в регистрах BC адрес входа в программный интерфейс, а в регистре A возвращает номер версии набора команд (сейчас 1).
Это логично. Т.е запустив стартовый блочок в 98 байт мы по возвращаемым параметрам узнаём где в ОЗУ в данной конкретной версии расположен вход в программный интерфейс контроллера. Видимо это удобнее, чем конкретный адрес в вершине ОЗУ, ниже 8FC0, где стоял бы JMP на вход в BIOS по типу стандартного входа на адресе 0005 в CP/M.
Но содержимое DE и HL снова запутывают понимание ещё больше. Зачем при инициализации программы в HL передавать командную строку? И какое-то собственное имя передаём в DE. Теперь непонятно и кто-кому это передаёт. Ведь речь же вроде о том, что возвращает программа контроллера, а не о том, что мы передаём программе при её инициализации или использовании.
Нет, всё не так. Никакой инициализации тут нет. Это наоборот, последняя команда вашей программы. Ваша программа уже никогда не получит управления назад.
Код ниже удалит вашу программу из оперативной памяти, загрузит в оперативную память файл "GAMES/LODERNR.RKS" и запустит его.
mvi a, 0
lxi h, fileName
lxi d, emptyString
call sdbios
...
fileName: db "GAMES/LODERNR.RKS", 0
emptyString: db 0
barsik пишет:Для инициализации программы обслуживания контроллера...
Для инициализации программы обслуживания контроллера ничего делать не надо. Это набор простых глупых функций, которые в порт принтера байты отправляют.
.
7
Вы в своём описании, где привели описание функций не указали главного, не привели описания интерфейса, куда на какие адреса надо делать CALL для вызова функций и инициализации. Из-за это и возникла непонятность. По приведённому описанию надо обо многом догадываться.alemorf пишет:Нет, всё не так. Никакой инициализации тут нет. Это наоборот, последняя команда вашей программы. Ваша программа уже никогда не получит управления назад. Код ниже удалит вашу программу из оперативной памяти, загрузит в оперативную память файл "GAMES/LODERNR.RKS" и запустит его.
Всё запутала вот эта странная фраза.
По логике единственное объяснение этому то, что тут делается инициализация контроллера, для чего делается CALL 8CE7 (это адрес SD BIOS в ОЗУ). И тогда в BC нам возвращают информацию по какому адресу расположен вход в SD BIOS, а в рег.А возвращается информация о поддерживаемой в данной версии контроллера системе команд.При запуске программы с помощью SD BIOS... рег.BС содержит адрес входа в SD BIOS, рег.A содержит версию набора команд
Но теперь Вы утверждаете, что всё не так, и это мы сообщаем контроллеру в регистре BC его адрес входа в его же интерфейс и сообщаем контроллеру какой набор команд у него есть. И после чего все последующие вызовы функций делаем с помощью CALL на этот адрес. Непонятно зачем это надо, если уже есть вход 8CE7. Или этот SD BIOS сам себя перемещает на другой адрес полученный от пользователя?
Зачем мне при запуске игры с флэш-памяти передавать программе контроллера адрес входа в её же интерфейс в регистрах BC. И откуда я, как пользователь, знаю этот адрес. И зачем контроллер удаляет мою программу из памяти?
Давайте по порядку. Вот я нажал на сброс, - на Специалисте началась процедура загрузки блока по сбросу. Ваш контроллер выдаёт на МГ-вход блок с полезным размером в 98 байт и адресом загрузки 0, Специалист его грузит и стартует. Этот холодный загрузчик после получения управления через дополнительный ППА считывает куда-то программу интерфейса с контроллером, которую Вы называете SD BIOS. По исходнику холодного загрузчика видно, что в случае успешной загрузки этот загруженный из ППА вторичный блок запускается.
При этом этот SD BIOS инициализируется, проверяет наличие файла SHELL.RKS и стартует его, если он есть. Тогда по сбросу автоматически вылетаем в оболочку. Как работает Ваша нортоноподобная оболочка нас сейчас не волнует. Речь идет о программе пользователя. Т.е когда SD BIOS инициализировался и произошёл переход (возврат) в монитор Специалиста или я запустил свою программу с флэш-диска этим нортоном SHELL.RKS.
После запуска моя программа, которой надо работать с диском, допустим мой нортон, как Вы утверждаете, должна вызвать SD BIOS и предать ей в регистрах A,BC,HL,DE приведённые ранее параметры. Но откуда мне (в своей программе) узнать, что поместить в A и BC и не ясно на какой адрес сделать CALL, т.е не знаю адрес входа в интерфейс контроллера. Кстати, Вы забыли указать, что адрес размещения SD BIOS 8CE7 это одновременно и вход инициализации интерфейса контроллера.
Потому я вначале и предположил, что Вы перепутали слова и вместо непонятного "регистр содержит" (непонятно откуда) должны были написать "программа контроллера возвращает в регистрах", т.е контроллер сообщает программе адрес входа в свой интерфейс. Но Вы и это отвергли ничего не объяснив взамен.
Вы описали функции интерфейса с контроллером и привели там какие параметры в каких регистрах должны передаваться. Но на какой адрес делать CALL и откуда узнавать версию набора команд и адрес входа в интерфейс контроллера не указали.
barsik- Ветеран
- Сообщения : 1032
Дата регистрации : 2016-11-10
Откуда : Россия, СПб
Re: Специалист: Подключение SD карты
8
barsik пишет:После запуска моя программа, которой надо работать с диском, допустим мой нортон, как Вы утверждаете, должна вызвать SD BIOS и предать ей в регистрах A,BC,HL,DE приведённые ранее параметры.
"должна вызвать SD BIOS и предать ей в регистрах A,BC,HL,DE приведённые ранее параметры." нет, это не правильно.
A,BC,HL,DE должны содержать то, что описано в табличке.
A - номер команды
BC,DE,HL - зависят от команды.
это описано в табличке.
barsik пишет:Но откуда мне (в своей программе) узнать, что поместить в A и BC.
A - номер команды
BC,DE,HL - зависят от команды.
это описано в табличке.
barsik пишет:и не ясно на какой адрес сделать CALL, т.е не знаю адрес входа в интерфейс контроллера.
Я выше написал: При запуске программы с помощью SD BIOS регистр A содержит версию набора команд (сейчас 1). BС содержит адрес входа в SD BIOS. HL командную строку. DE собственное имя.
Когда ваша программа запустится (получит управление), то регистр BC будет содержать точку входа в SD BIOS. Остальные регистры так же будут содержать осмысленную информацию, но вам они не нужны.
barsik пишет:Кстати, Вы забыли указать, что адрес размещения SD BIOS 8CE7 это одновременно и вход инициализации интерфейса контроллера.
Адрес загрузчи может изменяться. Ни в коем случае нельзя обращаться напрямую по адресу 8CE7. Когда ваша программа запустится (получит управление), регистр BC будет содержать точку входа.
barsik пишет:Вы описали функции интерфейса с контроллером и привели там какие параметры в каких регистрах должны передаваться. Но на какой адрес делать CALL и откуда узнавать версию набора команд и адрес входа в интерфейс контроллера не указали.
При запуске программы с помощью SD BIOS регистр A содержит версию набора команд (сейчас 1). BС содержит адрес входа в SD BIOS. HL командную строку. DE собственное имя.
Я как нибудь перепишу это предложение, что бы было понятнее.
Re: Специалист: Подключение SD карты
9
barsik пишет:Вы в своём описании, где привели описание функций не указали главного
Перефразировал.
SD BIOS может быть загружен в любое место памяти, поэтому нельзя общаться к нему по фиксированному адресу.
После запуска вашей программы регистровая пара BC будет содержать точку входа в SD BIOS.
Регистр A будет содержать версию набора команд (сейчас 1).
Регистровая пара HL будет содержать адрес строки - командную строку.
Регистровая пара DE будут содержать адрес строки - имя загруженного файла, т.е. собственное имя программы.
Для вызова функции SD BIOS в регистр A надо поместить код функции (см ниже) и вызвать подпрограмму по адресу, который был в BC при выполнении первой команды вашей программы.
Похожие темы
» Орион 128. Подключение SD карты.
» РК86: подключение винчестера IDE (или CF-карты)
» Специалист: Подключение PS/2 клавиатуры
» Подключение 3.5" дисковода к Ориону
» Орион-128: Подключение RTC 512ВИ1
» РК86: подключение винчестера IDE (или CF-карты)
» Специалист: Подключение PS/2 клавиатуры
» Подключение 3.5" дисковода к Ориону
» Орион-128: Подключение RTC 512ВИ1
Страница 1 из 1
Права доступа к этому форуму:
Вы не можете отвечать на сообщения