Теория это хорошо.
Подтвердить или опровергнуть логические выводы сможет только практическое логирование выводов ПУ при поиске и чтении картриджа.
Вид для печати
Судя по даташиту 27С801 бывает или одноразовая или с ультрафиолетовым стиранием. На сайте serge фото микросхемы с окошком, там ультафиолетовая, вероятно и в продаваемые картриджи такие ставит.
из того что я увидел в кода загрузчика в начале по любому проверяется адаптер локальной сети, далее модуля пзу:
M0084H: CALL M00D9H ; проверка локальной сети
JNZ M0148H ; переход на адаптер локальной сети
CALL M0138H ; проверка наличия дисковода
JNZ M02E7H ; переход на дискету
M0090H: CALL M00D9H
JNZ M044BH ; переход на кассету
CALL M0107H ; проверка наличия модуля ППЗУ
...
; проверка наличия модуля ППЗУ
M0107H: MVI A,82H ; код управления порта
OUT 04 ; записать в РУС
MVI B,0FFH ;
M010DH: MOV A,B ;
OUT 05 ;
MVI A,0FEH ;
OUT 07 ;
IN 06 ;
CPI 55H ; проверка ключевого кода 55
JNZ M012EH ; код не совпал
MVI A,0FFH ;
OUT 07 ;
IN 06 ;
CPI 0AAH ; проверка ключевого кода AA
JNZ M012EH ;
MOV A,B ;
ANI 7FH ;
INR A ;
MOV D,A ;
JMP M0136H ; МППЗУ подключен - на выход
..
; чтение программы из внешнего ППЗУ
M0274H: LXI H,M07DEH ; рисунок ПЗУ
MVI A,87H ; высота рисунка
PUSH D ; сохранить DE
CALL M06B2H ; вывод рисунка на экран
POP D ; восстановить DE
LXI B,0000 ;
LXI H,8000H ;
M0284H: MOV A,L ;
OUT 07 ;
MOV A,H ;
OUT 05 ;
IN 06 ;
это на этапе инициализации, далее я выделил фрагменты в коде, где в регистры портов пишутся значения, которые гарантировано перетрут результаты инициализации:
MVI B,0FFH ;
MOV A,B ;
OUT 05 ;
MVI A,0FEH ;
OUT 07 ;
и
LXI H,8000H ;
MOV A,L ;
OUT 07 ;
MOV A,H ;
OUT 05 ;
Или вы о другом?
P.S. схему так никто не срисовал?
Я правильно понял - картридж для "Вектора" сделан по тому же принципу, что и для "Апогея", с той разницей, что у 555ТМ9 использованы 5 разрядов для адресов ПЗУ А15-А19?
Пока что схему представляю так:
Порт А - адреса А0-А7 ПЗУ
Порт В - данные ПЗУ
Порт С - А0-А6 - адреса А8-А14 ПЗУ, А7 - тактирование (защёлкивание) 555ТМ9
Входы D0-D4 ТМ9 подключены к адресам А0-А4 ПЗУ, выходы Q0-Q4 подключены к адресам А15-А19 АЗУ
Из сообщения https://zx-pk.ru/threads/33511-rom-k...=1#post1125162 непонятно "при старшем бите адреса (порты 5 и 7)=1 задается адрес внутри 32 Кб блока, при старшем бите=0 задается номер 32 Кб блока.". - вот это не очень понял. Возможно, потому, что неправильно представляю схему картриджа. Поясните, пожалуйста.
И правильно ли я понял, что в картридже программы находятся в том же сжатом формате, что и в картридже "Апогея"? Т.е. можно использовать упаковщик от "Апогея"?
Картридж "Апогея":
Скрытый текст
Вложение 77432[свернуть]
Разряды портов А и С формируют шину адреса А0-А14 - это (условно) блок 32Кб.
При переключении старшего разряда порта С в "0" через ТМ9 на шину адреса ПЗУ попадают дополнительные разряды, которые условно "задают номер 32Кб блока" - т.е. эти дополнительные разряды указывают к какому из 32Кб блоков будет обращение при чтении из ПЗУ.
По другому, при помощи разрядов портов А и С можно прочитать только 32КБ, соответственно ПЗУ условно разбита на блоки по 32КБ, а записав в ТМ9 некое значение, можно указать, какой из этих условных блоков собираемся читать.
Могу только сказать, как это выглядит с программной стороны.
При задании номера блока (0-7F) он дублируется в порты 5 и 7, старший бит при этом=0.
При задании адреса внутри блока (8000-FFFF) порты 5 и 7 образуют как бы регистровую пару, порт 5 - старший байт, порт 7 - младший. Старший бит порта 5=1 (поэтому вместо 0000-7FFF получается 8000-FFFF).
Упаковщик MegaLZ, вряд ли его можно назвать апогеевским, он был разработан для спека. Возможно vinxru/alemorf еще выкладывал утилиту для сборки образа пзу, но я такой утилиты не видел.
Особенности сборки (по крайней мере для вектора). В каждом 32 Кб блоке первые 256 байт - загрузчик/распаковщик. Он грузит "оболочку" (блок 0, начальный адрес 8100h (если сбросить старший бит, то 100h) ). Последние 2 байта каждого 32 Кб блока - 55 AA, по ним начальный загрузчик (в пзу вектора) определяет границу внешнего пзу. Распаковщик обходит эти блоки из 256 и 2 байт в каждом блоке. В оболочке, насколько помню, для каждой программы из списка указаны блок и начальный адрес.
Что такое, в данном случае, порты 5 и 7? Портов, как я понимаю, три: А, В и С у 580ВВ55. Можно, наверное, ещё назвать портом регистр ТМ9. Но где порты 5 и 7 - не пойму...
Сейчас подумал - может, речь про адреса портов ВВ55? У меня под рукой сейчас нет описания архитектуры "Вектора", проверить себя не могу...
Именно. Это адреса портов ВВ55 в Векторе для С и А соответственно 05h и 07h.
Скрытый текст
Из описания Вектора:
04H РУС (регистр управляющего слова трехканального порта ВВ55)
05H порт PС параллельного интерфейса (разъем "ПУ")
06H порт PB параллельного интерфейса (разъем "ПУ")
07H порт PA параллельного интерфейса (разъем "ПУ")[свернуть]
Сейчас схема картриджа мне представляется так:
Вложение 77435
Правильно ли я понял - входы ТМ9 подключены к порту А (А0-А4)?
На фотографии картриджа резисторов (насколько я могу разглядеть - 10к) больше, чем на моей схеме. Пока что не представляю, где они ещё могут стоять. Один - в цепи начального сброса регистра, второй тянет вниз сигнал защёлки, чтобы случайно не захватила мусор до инициализации порта. наверное, и то и другое не нужно, но я старался придумать применение резисторам :) С конденсаторами, вроде бы, понятно. Один - в цепи сброса, два - по питанию ПЗУ и триггера...
Загрузчик от TimSoft (ПЗУ 2к, http://sensi.org/scalar/ware/540/) запускает этот картридж?
Обсуждали ведь по ходу дела, что этот картридж имеет стандартный протокол для загрузки с него модуля (загрузчика картриджа), который потом уже сам загружает с картриджа (выбранную в меню) программу.
Любой начальный загрузчик Вектора, имеющий функционал загрузки с обычного "внешнего ПЗУ", должен позволить пользоваться этим картриджем.
да
- - - Добавлено - - -
Строго говоря я не совсем корректно описал программирование картриджа, учитывая запись в ТМ9 по фронту, но думаю уже все разобрались.
Я, пока что, хочу просто собрать картридж и, желательно, чтобы он заработал :) Поэтому особенности его программирования, в данном случае, не очень важны. А вот схема - важна. Если картридж не заработает и правильность схемы будет под сомнением, то поиск проблемы будет сложнее - ошибка сборки, неисправность компьютера, компонентов картриджа или изначальная ошибка в схеме? Хотелось бы исключить, хотя бы, последнее...
Оффтоп про SD
Кто о чем, а я опять хочу упомянуть SD. Насколько понимаю, схема подключения SD (без микроконтроллера) была бы не намного сложнее, а пользоваться удобнее, если не смущает интерфейс с использованием командной строки (предполагается использовать слегка доработанный xsd b2ma). Закидываем на SD romы и вперед. Надо только определиться с конкретным интерфейсом подключения SD. Если выбранный интерфейс поддерживается в Emu то с отладкой никаких проблем. Правда я так и не удосужился написать компактный bios, но в качестве biosa можно использовать монитор-отладчик. Это приводит к ограничению размера загружаемого rom-файла в районе 40 Кб, что не очень приятно, но не смертельно и потом можно поработать над этим моментом.[свернуть]
Я думаю, оффтоп - классная штука! Не оффтоп, как таковой, конечно, а его содержание в данном случае :)
Скрытый текст
Сборка картриджа - первый шаг, просто побаловаться, поиграться и получить начальную площадку для экспериментов. Далее - подключение SD-карты. Варианты:
1. Контроллер. Без примеров - вариантов дофига, да и новый, очередной, сделать - не проблема. Подходящих для этого контроллеров хватает и, даже сейчас, они достаточно недороги. Лично мне нравится STM8 - без проблем работает на напряжении от 3 до 5 Вольт, весьма солидная, для 8-битных контроллеров, начинка.
2. SPI-интерфейс на рассыпухе. Лично от себя - не мой путь. Паять, как говорится, умею, но не люблю. Каждый припаянный кусок МГТФ - подвиг. Схема получается не очень крупная, но - всё же, как в анекдоте про жену Рабиновича. Наверное, самая популярная (или единственная?) используемая схема - от Erik van Son, разработавшего MSX MMC-drive
3. SPI-интерфейс на CPLD. Просто, компактно. И недорого, так как вполне хватит небольшой микрухи, типа 3032 или 3064. Начинка - какая угодно. Можно засунуть схему из пункта 2, можно использовать готовые, типа SPI65
Получается небольшая платка, на которой установлены коннектор, CPLD, слот карты и ПЗУ с начальным загрузчиком. И всё. Работа с картой и FAT выполняется софтово. Да, это медленнее, чем в пункте 1, но разве нужно куда-то спешить? Если уж есть терпение на загрузку с магнитофона... А здесь, не думаю, что скорость будет ниже, чем у дисковода. Тот же SPI65, подключенный к компьютеру на 6502 (1-2МГц) и работающий через порт 6522 (это такой очень продвинутый ВВ55), судя по разным видео в тырнете, гоняет весьма шустро.
Лично от себя я бы ещё добавил UART, правда, пользовать его через ВВ55 - удовольствие из средних, но ведь очень полезная штука!
Насчёт программной части - ещё особо об этом не думал. Я для Z80 пишу, заглядывая в словарик, а мнемоника 8080 для меня вообще, пока что, сплошная непонятка. Но разбираться, всё равно, придётся.
На этом оффтоп заканчиваю, если продолжать, то, наверное, в другой, или новой, теме :)
А, да, что за xsd от b2m?
Кстати, отлаживать можно и на vector06cc на DE1. Можно проект облегчить до обычного "Вектора", без наворотов. Если автор не против такого вандализма :)
[свернуть]
FAT16 для 8080
Собственно я и использовал доработанный xsd на девбордах и не только с v06cc но и с реализациями других компов на 8080.
Вариант с микроконтроллером мне совсем не близок, тут я пас.
- - - Добавлено - - -
Возможно я недопонял и микроконтроллер предлагается использовать только для интерфейса с sd-картой, без реализации в нем FAT. Тогда другое дело, если использовать интерфейс поддерживаемый Emu.
Было дело, использовал на девборде интерфейс Z-контроллера от спека, который не поддерживается в emu, но там сначала все отладил с другим интерфейсом и только потом заменил. В данном случае, когда вектора у меня нет, без отладки в Emu не получится.
Оффтопить - так оффтопить :)
А где можно познакомиться с xsd поближе? Ну, чтобы совсем близко :)
А контроллер - можно и с поддержкой FAT и просто в качестве преобразователя SPI в параллельные данные. Как нравится. Но, думаю, лучший вариант - SPI в CPLD. И компактно и железно.
Даже не буду пытаться сейчас найти архив xsd, это было где-то в теме связанной с РК86. Если b2m захочет, то подскажет. PVV развивает xsd под брендом SDOS (я у него позаимствовал работу с SDHC).
Загрузчик тут вообще ни при делах.
Сейчас пробовал этот картридж (имитацию на макетной плате) на штатном заводском загрузчике.
Всё на 02-ом работает нормально. Игры запускаются.
Не в картридже дело. Нужно проверять ВВ55, разъём "ПУ", дорожки от ВВ55 до разъёма, на крайний случай управление ВВ55-ой.
В данном случае, чудес не бывает.
Между простым Вектором и 02-ым нет разницы в схеме подключения разъёма "ПУ". Если на простом Векторе картридж работает, то и на 02-ом будет работать.
Если Картридж не работает, по идее, можно написать не большой тест (запускать его, загрузив через магнитофонный вход, при подключенном картридже), который читает из Картриджа 32КБ и кидает их в экранную область.
Если запрограммировать все цвета разными, то можно идентифицировать потенциальную проблему с шиной данных ил адреса Картриджа (портов разъёма "ПУ").
Так как полученную картинку можно сравнить с результатом на эмуляторе.
Если картинки будут отличаться, то анализировать проблему. Если картинки совпадут... ломать голову дальше...
Для более четкой идентификации стоит прикрепить к тесту эталонный фрагмент, который должен быть считан (можно выбрать например 8 Кб), считать его же с картриджа и вывести на экран xor этих значений. При исправном картридже и векторе экран очистится, при неисправностях на экране будет мусор.
На своём реале этот тест не проверял, так как успел разобрать макетку на которой был собран картридж.
На эмуляторе тест картриджа: https://disk.yandex.ru/d/SuyBFh0vB4VjwA
даёт вот такую картинку: https://disk.yandex.ru/i/o3H_Rf96VL41Lw
Думаю, что при наличии проблем с портами, будут видны полосы или повторяющиеся блоки.