Просмотр полной версии : Партнер 01.01: модуль SD карты
hitomi2500
15.11.2018, 22:45
Здравствуйте.
В этой теме я долгими зимними вечерами буду неторопливо разрабатывать модуль SD карты для Партнёра. Это не закрытый лог разработки, здесь приветствуются дополнения, предложения, замечания, конструктивная и не очень критика, словом всё, что не противоречит правилам форума и хоть немного относится к теме. Статус разработки я буду выносить в первое сообщение по мере развития проекта.
--------------
Текущий статус:
Нарисована первая версия схемы в виде голого переходника на китайскую плату от ACELEX, почти разведена плата (осталось перерисовать разъём на 2.5 вместо 2.54 плюс мелкие проверки). Когда приедет китаец, проверю на распечатке и запущу в производство.
---------------
Общие положения, которых я собираюсь придерживаться:
0) Интерфейс а-ля им. Морозова для Апогея/РК/Специалиста с небольшими изменениями и дополнениями.
1) Входные и выходные данные (имена файлов и их содержимое) будут передаваться сразу через память, а не через регистры. Так проще, и быстрее (если где-то окажется не быстрее, будут дублирующие регистры).
2) Поддержка DMA-передач в ОЗУ по каналам 0 и 1 ВТ57 и в ВГ75 по каналу 2 ВТ57.
3) Режимы ланчера (копирование файла в память и запуск) и если хватит сил эмулятора ГМД (выбор образа и дальнейшая эмуляция модуля ГМД с приводом)
4) Готовая китайская плата с STM32F407VET6, устанавливаемая бутербродом на мою плату с СПН58. В теории для сокращения цены можно потом перейти на китайскую плату подешевле.
hitomi2500
19.11.2018, 10:56
Купил вот такую плату
https://preview.ibb.co/b0FNKf/HTB178-AGr-QOWBu-Nj-Ssppq6x-Pgp-Xae.jpg (https://ibb.co/gHcrC0)
На плате уже есть слот для карты, почти все ноги толерантны к 5 В , так что плата-переходник получается пока вообще пустой. Набросал схему переходника, начинаю потихоньку разводить.
Поступило предложение использовать SDOS от Ориона/Специалиста. Насколько я понимаю, она сама заведует FAT и работает напрямую с картой по SPI. И тут есть варианты - либо отдать ей всю карту, либо эмулировать SPI-интерфейс карты, и хранить её образ на настоящей карте. Есть ещё конечно извращения типа парсинга файловых операций SDOS и замены их на файловые операции на настоящей карте, но я пока не уверен что это будет просто реализовать. Начну с отдачи карты целиком, а там как пойдёт. В любом случае, режим SDOS не будет единственным, поскольку хочется FAT32 и DMA.
hitomi2500
21.11.2018, 07:11
Вот такая вот буква П :
https://thumb.ibb.co/fCkDeq/module-pcb-take1.png (https://ibb.co/fCkDeq)
Помню раньше из таких пластин сердечники трансформаторов делали.
Помню раньше из таких пластин сердечники трансформаторов делали.
Там не П, там Ш :)
hitomi2500
21.11.2018, 11:10
Там не П, там Ш :)
Ш конечно были мэйнстримом, но П, Г и О тоже встречались :)
https://thumb.ibb.co/dGNDeq/image-75.jpg (https://ibb.co/dGNDeq)
Вот вариант SDOS, собранный для Партнера, Новый конфиг я не создавал, а сделал правки в конфиге РК-86, в части добавки нужного спец заголовка в бинарнике для ПЗУ, замены расширения RKR на RKP в автоподстановщике расширения и правки под адресное пространство Партнера (8й конфиг), как я их понял. Эта версия без записи, для записи надо еще ~300 байт, пока не пойму как их подключить в 8й концигурации.
Не пойму с форматом спец заголовка, как убрать автозапуск ПЗУ? из-за этого, не работает директива 'Х' в SDOS - выход в монитор, происходит автозапуск, и опять попадаем в SDOS :).
Во вложении, конфигурационный файл для b2m, файл образа SD и исходники.
Не пойму с форматом спец заголовка, как убрать автозапуск ПЗУ?
Нет тот вектор используешь, там должна быть ссылка на обработчик функций (номер которой в регистре А передаётся). По сбросу все модули инициализируются (номер этой функции 0). А вот запуск основной программы модуля по директиве Е<номер модуля> происходит по адресу, который указывается двумя байтами ранее.
- - - Добавлено - - -
Эта версия без записи, для записи надо еще ~300 байт, пока не пойму как их подключить в 8й концигурации.
Судя по конфигу, чтобы отключить ПЗУ биоса, нужно включить карту номер 3 (или 4,5, но там ОЗУ меньше).
Все, что я знаю о Партнере, взято здесь (http://emuverse.ru/wiki/%D0%9F%D0%B0%D1%80%D1%82%D0%BD%D1%91%D1%80/%D0%A0%D0%B0%D0%B4%D0%B8%D0%BE%D0%BB%D1%8E%D0%B1%D 0%B8%D1%82%D0%B5%D0%BB%D1%8C_1994/%D0%91%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B5_%D0%B2% D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1 %82%D0%B8_%D0%9F%D0%9A_%C2%AB%D0%9F%D0%B0%D1%80%D1 %82%D0%BD%D1%91%D1%80%C2%BB), и у меня такое чувство, что на самом деле все далеко не так... Посмотрел в отладчике, в какой конфигурации идет инициализация в мониторе, и оказалось, что 2, а не 8, как по ссылке. :(, значит область mem3, что я ввел, вообще не задействуется. Однако, в целом, как будет себя вести SDOS в Партнере понятно.
hitomi2500
21.11.2018, 15:22
Там таблица в этой статье мягко говоря странная, как минимум ячейки не объединены. Я специально полез в журнал, там всё так же. Надо будет её перерисовать по-человечески.
Как вариант оставить в ПЗУ загрузчик и bios, а основную часть SDOS грузить в верхнюю часть ОЗУ. Можно даже с SD-карты.
- - - Добавлено - - -
В инструкции описан Монитор версии 2, в котором действительно по умолчанию была 8-я конфигурация. В Мониторе в.3 по умолчанию уже 2-я конфигурация.
Нормальная таблица в руководстве к Партнеру. Либо смотреть напрямую в ПЗУ D14.
Либо смотреть напрямую в ПЗУ D14.
А где можно посмотреть?
Хотя бы у меня в эмуляторе - d14.bin
Каждый байт соответствует блоку в 2 Кб. Всего 16 конфигураций по 32 блока (да, есть недокументированные конфигурации!)
Биты описаны в конфиге:
0 romWindow
2 ramWindow
3 rom2
4 rom1
5 ram1
6 ram2
7 slot
Тип блока определяется по 0 в соответствующем разряде.
Раскрасил, вот: http://bashkiria-2m.narod.ru/images/p0101mem.png
- - - Добавлено - - -
И включая недокументированные, считанные из d14:
http://bashkiria-2m.narod.ru/images/p0101mm.png
hitomi2500
21.11.2018, 22:33
Получается из 15-го маппера нельзя выйти, пространство портов недоступно, и ВТ57 недоступен, и вообще вся периферия недоступна. И если 11-13 это просто неиспользуемое место, то 15 выглядит по меньшей мере странно. Возможно результаты экспериментов разработчиков. Или например для отладки, настроил всю периферию, прыгнул в 15-й, и настройки уже не собьются как ни крути. Правда сидеть там без клавиатуры.
А WIN1 и WIN2 это области для слотов? Теперь понятно почему даже А15 заведён, в 10-м маппере он может быть равен 0.
А ещё можно делать аппаратную двойную буферизацию, меняя мапперы 2 и 7.
Нет тот вектор используешь, там должна быть ссылка на обработчик функций (номер которой в регистре А передаётся). По сбросу все модули инициализируются (номер этой функции 0). А вот запуск основной программы модуля по директиве Е<номер модуля> происходит по адресу, который указывается двумя байтами ранее.
Да, увидел, что на смещении 6 и 7 должен быть вектор некоего стартового кода, но что там должно делаться, и что должно возвращаться? и, похоже, там до смещения 16 это все некие вектора... а нет более подробного описания, что там должно быть?
===========
15й маппер меня, тоже, смутил, выстрел в ногу? туда попали и возврата нет?
hitomi2500
21.11.2018, 23:34
Кстати не нашёл в руководстве информации про блок устройств. Он делится ещё на 8 подблоков по 256 байт каждый, с такими адресами :
D800-D8FF ВГ75
D900-D9FF ВВ55 (клавиатура)
DA00-DAFF регистр маппера (хотя в моей версии схемы он через перемычку которая не установлена почему-то)
DB00-DBFF ВТ57
DС00-DСFF порты внешнего устройства
DD00-DDFF порты внешнего устройства
DE00-DEFF выбор активного слота
DF00-DFFF выбор активного источника прерываний
hitomi2500,
DС00-DСFF, DD00-DDFF - порты внешнего устройства
DE00-DFFF схема выбора модуля. 0 в битах 0-3 указывает но номер активного модуля, в зависимости от этого на адреса DC00-DDFF, а также на блоки WIN1 и WIN2 отображаются устройства и память соответствующего модуля
- - - Добавлено - - -
PVV, описания нет, память меня может подводить, но кажется обязательны к реализации только 2 функции - 0 (инициализация) и 1 (директива E). Остальные - пользовательские, назначение определяется конкретным модулем для вызова через единый интерфейс Монитора (можно повесить на них процедуры чтения/записи/открытия файла и т.п. при желании). То есть возврата из функции 1 может и не быть. Хотя просто Ret скорее всего вернет управление в Монитор.
Если что-то напутал, посмотрю дополнительно.
hitomi2500
22.11.2018, 07:10
Pyk, а последний кусок, который в DF00-DFFF, что выбирает? В схеме модуля КМД он замешивается с управляющими сигналами DMA, возможно это выбор модуля, который будет отвечать на DMA-запросы?
Вообщем, методом подбора получилось сделать правильный заголовок.
Если в начале файле dos_rk.asm из архива, дефайн сделать такой:
#ifdef RK86
#ifdef SD_ROM
.db 70h
.db 72h
.db 45h
.db 0h
.db 0Fh
.db 0E0h
.db 0Dh
.db 0E0h
.db 0FEh
.db 0FFh
.db 0FEh
.db 0FFh
.db 0FFh
xchg
ret
#else
jmp 0f800H
nop
#endif
#endif
то инициализация проходит, и SDOS вызывается из монитора по Е1, а обратно в монитор можно выйти по 'X'.
DF00-DFFF ?? (что-то связанное с DMA?)
На схеме это называется SEL INT L. По аналогии с выбором слота SEL SLOT L, можно предположить, что это должно было отвечать за выбор источника прерываний (т.е. разрешение прерываний от соответствующего биту модуля).
там до смещения 16 это все некие вектора... а нет более подробного описания, что там должно быть?
Описания нет, судя по монитору там такой расклад:
0-1 сигнатура pr
2 идентификатор модуля (43h - МЦПГ, 44h - КНГМД)
3 неизвестно, обычно ноль
4-5 адрес запуска по директиве Е
6-7 адрес обработчика функций модуля (номер функции в регистре А: ноль - инициализация модуля, вызывается после сброса)
8-9 ещё какой-то вектор
10-11 ещё какой-то вектор
12 - байт FF, если не используется (для чего используется, пока не выяснил)
Если вектор не используется, стоит адрес 0FFFEh, по этому адресу в мониторе стоит RET.
Функции модуля можно вызывать из монитора директивой Va,b,c:
a - первый параметр, передаётся в DE, но обычно первой же командой обработчика переносится в HL
b - номер функции (старший байт) и идентификатор модуля (младший байт). Модуль может стоять в любом слоте, выбор происходит по уникальному идентификатору модуля.
с - второй параметр, передаётся в BC
Кое-что о функциях есть в описании МЦПГ (http://arendatr.chat.ru/MODULES/r0161.htm#p7).
hitomi2500
22.11.2018, 12:23
На схеме это называется SEL INT L. По аналогии с выбором слота SEL SLOT L, можно предположить, что это должно было отвечать за выбор источника прерываний (т.е. разрешение прерываний от соответствующего биту модуля).
Я тоже так сначала подумал, но меня логика спутала, и зря. МКД прерывания не использует - сигнал INT REQ L в модуле не подключен. А в логику модуля SEL INT L уходит, чтобы выключить шинный формирователь и операции по этим адресам игнорировать.
А в логику модуля SEL INT L уходит, чтобы выключить шинный формирователь и операции по этим адресам игнорировать.
Можно ссылку на схему? Нет времени на поиски...
hitomi2500
22.11.2018, 13:09
https://zx-pk.ru/threads/24950-partner-01-01-kontroller-diskovoda.html
В первом посте прикреплена.
При таком включении, этот порт можно использовать лишь для того, чтобы тестировать шину данных на модуле. Ни один чип не будет "выбран", но буферный регистр будет активирован.
Однако, если ещё какой-то модуль будет так поступать, команда чтения из порта приведёт к конфликту на шине данных. Вобщем, какая-то шняга.
Да, память вчера меня немного подвела, а посмотреть было некогда. Спасибо b2m, поправил :)
А какой-нибудь модуль Партнера вообще использует прерывания?
hitomi2500
22.11.2018, 16:19
А какой-нибудь модуль Партнера вообще использует прерывания?
Последовательный порт судя по фотографиям нет, там только ВВ51, ВА86 и логика.
Программатору вроде бы незачем.
Параллельный порт скорее всего на ВВ55, она умеет генерить прерывания через порт C, но слишком уж сложно.
МЦПГ тоже незачем, он же синхронизируется с материнским ВГ75 и сам ничего не формирует и никого не прерывает. Но там есть ВИ53, она может.
Но там есть ВИ53, она может.
Вряд-ли, там все три канала на вывод звука.
А какой-нибудь модуль Партнера вообще использует прерывания?
Не видел, даже флоп через ПДП работал...
hitomi2500 совсем пропал со своей задумкой и даже на ЛС не отвечает, а модуль SD-карты для Партнера иметь хоть в каком-то виде хочется ;)
Напрямую подключить контроллер Алексея Морозова к Партнеру не получится, так как в нем нет второй ВВ55 с выведенными наружу портами.
Решил попробовать сделать гибрид из модуля параллельного интерфейса Партнера и SD-контроллера. Пока реализовал это чисто программно, сэмулировал подобный модуль в последней версии Emu80 (https://zx-pk.ru/threads/27488-emu80-v-4.html?p=1196433&viewfull=1#post1196433) (запуск модуля и оболочки - E1).
В самом модуле осталось одно ПЗУ из двух (в нем разместил загрузчик, нет необходимости в отсутствующей на Партнере директиве R), а вся принтерная составляющая на порта ВВ55 была заменена на SD-контроллер по стандартной схеме.
Также сделал минимально необходимые для работы на Партнере изменения в boot, sdbios и shell.
Есть у кого-нибудь интерес к этой теме? Сделать бы этот контроллер в железе, но я точно с этим не справлюсь.
А задача актуальная, даже в музеях Партнеры стоят обычно выключенными, так как никто не хочет связываться с загрузкой через магнитофонный порт.
cy6 предлагает такие изменения в схеме контроллера параллельного интерфейса (все, что справа от синей линии, заменить на SD-контроллер по стандартной схеме). Кто посмотрит еще свежим взглядом, может быть, идеи какие-то будут?
https://pic.maxiol.com/thumbs2/1712262705.1560140271.photo2024010114270.jpg (https://pic.maxiol.com/?v=1712262705.1560140271.photo2024010114270.jpg&dp=2)
Есть у кого-нибудь интерес к этой теме? Сделать бы этот контроллер в железе, но я точно с этим не справлюсь.
А задача актуальная, даже в музеях Партнеры стоят обычно выключенными, так как никто не хочет связываться с загрузкой через магнитофонный порт.
Интерес есть, но до конца мая нет возможности заниматься пайкой - по больницам мотаюсь, работа копится... :(
cy6 предлагает
Простейший адаптер параллельного порта, для любых целей, включает в себя: дешифратор, ПЗУ и ППА.
Что собственно и отображено на "схеме". Была взята схема подключения принтера к Партнеру и определены лишние узлы.
Расширенный вариант может включать еще и ОЗУ, для буферизации блочных операций. Вместо последовательной передачи через ППА.
Так как Партнер позволяет включать в свое адресное пространство "окно" произвольной памяти.
А также, полная замена ПЗУ на ОЗУ, с заливкой "прошивки" из карты памяти.
Но это немного за рамками стандартного подключения контроллера SD-карты.
Собственно, вот финальный вариант схемы, которую Виктор показал.
Всего 4 корпуса логики, убрали и оптимизировали все что можно. Всего 7 корпусов.
https://i.ibb.co/wZB2yTGK/photo-2025-06-22-16-01-59.jpg (https://ibb.co/wZB2yTGK)
Схема является модулем для МВЦ Партнер, которая создает дополнительный ППА.
К ППА можете подключать адаптер SD карты, по стандартной схеме. Или IDE (CF), или еще что то.
В ПЗУ зашивается прошивка модуля, с характерным для Партнера заголовком.
Далее, по директиве E1, E2, E3 или E4 (в зависимости от того, в какой слот подключили модуль) запускается.
Все это уже есть в эмуляторе emu80 (https://zx-pk.ru/threads/27488-emu80-v-4.html).
Также, Михаил развел и проверяет плату адаптера SD контроллера, после того как прототип заработал.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot