Просмотр полной версии : DivMMC
Всем привет! Собрал по исходникам MVV для своей Орельки подобие этого интерфейса. Работает. И работает очень не плохо. ESXDOS удобная штука, но на сайте разработчиков esxdos.org говорится о том, что имеется некое API работающее через RST8. Прерыл весь интернет, информации о нем нет!
Может у кого нибуть есть больше информации?
solegstar
09.07.2015, 10:41
kasper, на чем собирал?
имеется некое API работающее через RST8. Прерыл весь интернет, информации о нем нет!
Может у кого нибуть есть больше информации?
глянул мельком.
после RST#08 идёт код команды. от #80 и больше.
дальше из таблицы берётся адрес подпрограммы
а что там дальше - тёмный лес.
Solegstar, собрал на основе платы расширения Робика от Solegstar :))) (Z-CONTROLLER mouse и контролер дисковода))) + еще одна CPLD, на которой собрано расширение Орели до мегабайта на статике. Платка в гнездо процессора вставляется. DIVMMC использует верхних 512 кБ для себя ну и одну страничку флешки. В прошивке платы расширения просто добавил дешифрацию портов как надо DIVMMC. Так что у меня 2 в одном, DIVMMC и ZCONTROLLER.
solegstar
09.07.2015, 13:29
собрал на основе платы расширения Робика от Solegstar
и Lisica.:) Я примерно так и предполагал. :) Орель копаная получается. :( мне вот интересно сделать такую приблуду под Орель, не копая её, чтоб все пломбы сохранились и под её разъем. получится, не? или в любом случае надо копать орельку на блокировку внутренних портов?
У меня копаная по минимуму), по крайней мере мне так кажется) я даже 2 дисковода туда вставил, все поместилось. Приблуда возможна 100%, если отключить проц на плате по BUSRQ, включить свой на приблуде, а дальше дело техники, я думал над этим. У Орели много чего не выведено на разъем, кажется нельзя отключить ОЗУ, ПЗУ от шины данных, IORQ заблокировать не получится без разборки. Хотя я и ошибаться могу, можно проконсультироваться у barmaley_m. Он по Орелям спец, до такта ее разобрал.
---------- Post added at 15:29 ---------- Previous post was at 15:22 ----------
И если внешний процессор не гнать, вообще будет все автоматом, если разгонять - синхронизация нужна с видеопамятью. Я эту проблему кстати решил. Так что если интересно скину исходники.
---------- Post added at 15:32 ---------- Previous post was at 15:29 ----------
а что там дальше - тёмный лес.
Есть желающие этот темный лес разобрать? Уверен что игра стоит свеч))). У меня врятли получится, или буду очень долго делать (.
solegstar
09.07.2015, 15:33
да, я как раз читаю его инструкцию. к сожалению похоже не заблокируешь iorq не разбирая. впринципе вставить еще один проц будет не проблема, только вот частоту процессору надо будет откуда-то брать, можно попробовать удвоить AC0 (он судя по всему половина клока проца) на системном разъеме, смешав AC0 и задержанный через два инвертора АС0 по xor как это сделано в вга-конверторе zst, но это конечно только теория. куча манипуляций ради сохранения пломбы. :)
По идее машинка получится с двумя полями памяти, как у меня сейчас. Только я тактируюсь от ГФ24, и получается более - менее синхронно при записи видеопамять.Проц тактировать без проблем можно по СLK, он есть на системном разъеме. И SPI тоже можно CLK тактировать, 8 тактов на заполнение сдвигового регистра должно хватить, но надо проверить.
solegstar
09.07.2015, 16:52
Проц тактировать без проблем можно по СLK, он есть на системном разъеме.
ну точно, как я его проглядел. :) надо подумать над реализацией...
---------- Post added at 15:52 ---------- Previous post was at 14:51 ----------
И если внешний процессор не гнать, вообще будет все автоматом, если разгонять - синхронизация нужна с видеопамятью. Я эту проблему кстати решил. Так что если интересно скину исходники.
гнать пока не планировалось. планировалось сделать модуль расширения, наподобии как для робика, но с минимумом необходимого железа. ессно без вскрытия самой орельки.
Что должно быть на модуле:
- музыкальный проц (возможно TS, но тут надо подумать);
- доп. память, хотя бы 128кб. (если использовать DNA OS, то этого будет достаточно для запуска образов, как писал JV-Soft. и я пока смутно понимаю, как её можно организовать не вскрывая комп. :));
- Pseudo-TRDOS + NEMO IDE + DNA_OS или DIVMMC + ESXDOS для комфортной работы с образами.
- ps/2 мышь? надо подумать - нать, не нать, т.к. будет фактически отдельный контроллер, как в модуле для робика.
- z-controller? тоже самое, хотя 4 провода и разъем, что тут думать. :) кстати, зачем на divmmc две карты памяти?
Вобщем сейчас меня интересует возможность расширить память по одному из стандартов без разрезания компа, ну, а там чем больше объем, тем лучше. :) как-то так.
Все можно сделать через контроль mreq, iorq, a14,a15 и т.д. пропуская через CPLD. Я вижу только одну неразрешимую проблему - если делать 128к и больше - второй экран (((. В принципе - это один проводок к КП11. Но как заставить видеоконтроллер выводить изображение с другого адреса без этого проводка ???
---------- Post added at 17:19 ---------- Previous post was at 17:16 ----------
Да, походу второй экран портит всю картину(((
AndrejChoo
13.04.2019, 20:55
Здравствуйте. У вас не сохранились исходники?
Собрал свою плату divmmc. Есть только прошивка без исходников. Не могу запустить. Выдаёт синий матрац. Не могу понять в чём дело.
Freiwind
17.02.2020, 16:04
Подскажите или киньте ссыль на последовательность подготовки платы divMMC к работе.
Плата от Павла Рябцова. Все уже распаяно.
Для CPLD есть jed-файл с этой (http://aticatac.altervista.org/portale/?q=node/13) страницы и проект с этой (https://github.com/mprato/DivMMC).
Как залить прошивку в распаянную 28С64 и какую выбрать?
Плата от Павла Рябцова.
С одним слотом микро SD и с ошибкой в его разводке или более новая с исправлениями?
Freiwind
17.02.2020, 18:32
С двумя слотами и 74HC123.
Freiwind, для прошивки я использую "полусамодельный программатор" подключенный к LPT и программу XILINX iMPACT v14.4. Процесс программирования: подключить плату DivMMC к программатору (при этом программатор будет питаться напряжением 3.3В от платы DivMMC). Подать питание 5В на плату DivMMC. Запустить XILINX iMPACT:
• При запуске откроется окно с вопросом "Do you want iMPACT to automatically load the last saved project for you?" на который отвечаем YES;
• Нажать на иконку Initialize Chain и на вопрос "Do you want to continue and assign configuration file? " отвечаем Yes;
• В открывшемся окне "Assign New Configuration File" выбираем файл прошивки divmmc-1.0-1.jed;
• В следующем окне "Device Programming Properties" нажимаем OK;
• В зависимости от того что нужно сделать жмем - Program, Verify или Erase.
Покупал вот такой программатор
https://www.ebay.com/itm/JTAG-Download-Cable-Xilinx-LPT-Parallel-programmer-CPLD-FPGA-XC2C64-XC9572-DB25/202022683374?ssPageName=STRK%3AMEBIDX%3AIT&_trksid=p2057872.m2749.l2649
Он естественно не заработал, и я его немного переделал.
Freiwind
18.02.2020, 19:39
Спасибо.
У меня китайский клон Platform Cable USB II (https://aliexpress.ru/item/32810890902.html?spm=a2g0s.9042311.0.0.4a3c33edRA5 IPW) Прошивку в CPLD-шку залил.
Теперь надо запрограммировать 28С64. Со впаянной в плату это возможно или надо сдувать ее с платы и программировать отдельно?
nihirash
18.02.2020, 20:11
По поводу программирования - я плавно пишу статьи на хайп, там есть базовая статья "считать"/"записать" конкретный файл.
Чуть позже заберу свой divMMC у друга и продолжу пилить это дело.
Теперь надо запрограммировать 28С64.
Спросите у Павла может быть он ее прошил, даже скорее всего прошил.
Freiwind
18.02.2020, 22:34
Не думаю. Я не конструктором брал.
nihirash
19.02.2020, 00:21
Вроде можно и с самого divMMC это сделать.
В дистрибьютиве есть тапка для этого.
В дистрибьютиве есть тапка для этого.тапка - это ESXMMC.TAP? Но обновление-то производится копированием информации в 28С64 из файла ESXMMC.BIN, который должен находиться на SD карте, т.е. DivMMC должен быть уже рабочим. И вот не совсем понятно, прошив XC9572XL, но с пустой или окирпиченной 28C64, будет ли читаться SD карта.
nihirash
19.02.2020, 02:10
Отключаешь перехват ПЗУ, грузишь тап, включаешь, шьешь. Вроде так.
В тап лежит весь образ пзу. есхДос для этого не нужен
Перехват ПЗУ на моем выведен джампером - с отключённой прошивкой работает ещё и в +3е с соответствующей прошивкой в спектруме.
В тап лежит весь образ пзуДа, скорее всего так оно и есть.
есхДос для этого не нуженЭто-то понятно.
Честно говоря, я не знаю логику работы DivMMC, т.е. что происходит после включения питания, куда что копируется и с какой целью. Просто иногда можно увидеть такую фразу – не забудьте залочить 28C64 иначе устройство может превратиться в кирпич (имею в виду не джампер, а divmmc_eprotector.tap). Но если так просто можно прошить 28C64, то к чему эти предупреждения? Вот они-то меня и смутили.
nihirash
19.02.2020, 05:27
Одна утилита посылает магическую последовательность, чтобы можно было писать в мозгу - дальше дело техники - просил пишем байты по этим адресам. Во избежание проблем нужно лочить - вдруг какая программа начнет писать по этим адресам.
Собственно раскирпичивается оно так же, как и окирпичилось. Только что время теряется
Freiwind
19.02.2020, 13:57
Насколько я понял, нужно снять перемычку J1 на DivMMC, воткнуть в спек и загрузить в него ESXMMC.TAP.
По идее эта софтина должна прошить 28С64.
Похоже на принцип прошивки IF1bis.
Freiwind
19.02.2020, 20:42
Прошивку залил. Поставил обратно перемычку на флеше.
Залил на SD карту содержимое архива ESXDOS. Воткнул карту в первый слот.
После перезагрузки начинает стартовать ESXDOS, но не может загрузить систему и вываливается в 48 Бейсик.
Что может быть не так?
71583
nihirash
19.02.2020, 20:45
Вываливаться он и будет в 48к бейсик(это норм поведение).
Попробуй флэшку форматнуть(поддерживает и FAT16 и FAT32). папки BIN/SYS должны быть на флэшке, еще пустую TMP сделай на всякий.
Очень важно, чтобы версия esxDOS была ровно той же, что и в прошивке.
Freiwind
19.02.2020, 21:00
Карту форматировал и в FAT16 и в FAT32.
На нее разворачивал архив с этой (https://www.esxdos.org/index.html) страницы. Там все папки на месте.
esxmmc.tap заливал, соответственно, оттуда же.
Карта любая должна подходить? Я подсовывал обычную SD на 1 гиг, не SDHC.
Платка divMMC вот эта (https://chipkin.ru/product/pechatnaya-plata-divmmc/).
ОЗУ на 512К. R7 и R9 установлены. По R8 непонятно. Должен быть или нет? По умолчанию на плате они все уже закорочены печатными проводниками. Оставил как есть.
ОЗУ на 512К. R7 и R9 установлены. По R8 непонятно. Должен быть или нет?
У меня ОЗУ 128К - R7, R8 нет, R9 установлен.
После перезагрузки начинает стартовать ESXDOS, но не может загрузить систему
Проверьте, есть ли clock на выводе 16 XC9572XL.
nihirash
22.02.2020, 23:14
Вроде на такой плате была ошибка на один провод.
Случаем вспомнил, что на такой у меня был провод-перемычка.
Сейчас плата не у меня точно сказать не могу
nihirash, подключить бы этот DivMMC к нашим клонам, например к тому же Ленинграду или Пентагону 128.
Не пробовали?
- - - Добавлено - - -
Вроде на такой плате была ошибка
Не знаю, как на этой, а на плате NanoSD с одним микро SD разъемом ошибка была. Нужно было кинуть проводок от SD разъема, если не ошибаюсь к 45 выводу XC9572XL.
nihirash
23.02.2020, 02:07
nihirash, подключить бы этот DivMMC к нашим клонам, например к тому же Ленинграду или Пентагону 128.
Не пробовали?
К Ленину должно быть ок. С пентагоном - нужно будет бетадиск отрубить - они вместе не дружат.
Если собрать Пентагон без бетадиска - работать должно.
После перезагрузки начинает стартовать ESXDOS, но не может загрузить систему и вываливается в 48 Бейсик.
Для начала, к какому Спектруму Вы подключаете DivMMC? Часом не к какому-нибудь клону? Мне пока не удалось запустить DivMMC с клоном Москва-48К. Правда, пока особо не возился. Ситуация такая же как на Вашем фото, только карта через раз монтируется, но все равно esxdos не грузится.
И у Вас SD карта-то не монтируется. После строки: Mounting drives…
Должна быть строка типа
hd0: ESXDOS, FAT32, 1874M
все что после hd0:, это данные SD карточки: название тома, тип FAT и размер карты.
nihirash
23.02.2020, 13:35
Возможно, клок с шины слабый. Попробуйте транзистор хотя бы поставить, чтобы сделать сигнал увереннее.
Freiwind
24.02.2020, 19:33
В общем, в итоге девайс заработал.
Подключал к ZX-MAX 128, Harlequin 128 и Karabas 128.
Оказалось, что не со всеми Z80 происходит нормально инициализация SD-карты.
Не знаю, с чем связано.
В итоге подобрал для всех клонов варианты камней с нормальным стартом.
Оказалось, что не со всеми Z80 происходит нормально инициализация SD-карты.
По мне так ненормально все это. Это из серии, встречал здесь на форуме, когда жаловались что Спектрум работает только от 4,75В от другого напряжения – нет. Т.е. нужно подбирать точно напряжение, при котором Спектрум работает устойчиво. Нонсенс все это. Вот теперь еще одно устройство, которое работает только с определенным CPU! :)
Во всех Ваших клонах, какой резистор подтяжки к +5В с вывода 6 CPU (clock) стоит?
Freiwind
24.02.2020, 20:25
В Арлекине нет подтяжки.
В ZX-Max - 4,7кОм.
В Карабасе вроде бы тоже нет подтяжки.
Freiwind, a должно быть 330 Ом по спецификации Z80-CPU.
Freiwind
24.02.2020, 20:47
Я ничего не менял. Собрано в соответствии со схемами и спецификациями.
Там же вроде есть еще разница, по какой технологии изготовлен процессор. CMOS или nMOS. Не?
По спецификации резистор подтяжки должен быть 330 Ом (ставят 470-680).
Кто-то один поставил "кОм-ы", не читая спецификацию, остальные у него перерисовали.
Freiwind
24.02.2020, 21:50
А при чем здесь вообще подтяжка на CLK?
Компы сами по себе работают стабильно.
На системный разъем тактовый сигнал через инвертор идет.
Не вижу где, например в Max 128 CLK на разъем идет через какой-то инвертор.
Freiwind
27.02.2020, 12:43
В МАХе нет. Там напрямую с ПЛИСины.
А при чем тут это? Разговор вроде про подтяжку CLK на тактовом входе процессора шел.
valerium
26.06.2020, 16:59
Divmmc и nanoSD - это версии одного и того же устройства, прошивки для 9572 у них одинаковы?
Я нашел только jed-файл версии 1.0-1, но у меня с ним nanosd не стартует: после включения и сброса с убирающимися полосками - матрас.
То есть высокий уровень на /romcs выставляется после сброса исправно, но на этом все. Пока не пойму, где накосячил, решил вот узнать, а то ли вообще я в нее заливал ?
ПЗУ прошито esxdos 0.8.8, jedec-файл в xilinx заливал вот этот:
http://aticatac.altervista.org/portale/?q=node/13 , прошилось все без вопросов.
С чего начинать дебаг ? Тактовую посмотрю (осциллографа пока нет), ПЗУшка вроде должна быть прошита (пытался вместо нее засунуть РФ2 с тестом памяти, чтоб увидеть разницу - но ее нет, /romoe с ПЛИСки неактивный). Что еще, есть идеи?
Divmmc и nanoSD - это версии одного и того же устройства, прошивки для 9572 у них одинаковы?
одинаковые
XC9572XL где брали, в какую цену?
На разъеме прозванивали контакты на КЗ по принципу брутфорс, т.е. первый контакт со всеми остальными, потом второй контакт со всеми остальными и т.д.?
valerium
26.06.2020, 18:11
Уже хорошо, что хоть не ошибся устройством )
Покупал у Павла все кучкой вместе с платой. Точнее, с двумя платами - там их две на листе. Отдельно покупал только мелочевку - транзисторы, конденсаторы, светодиоды, панельку - однорядный цанговый сокет - резал его по 14 пин и запаивал под 28c64 в DIP - это чтоб 7592 была вся в доступе, а она наполовину под ПЗУшкой находится.
Разъем брутфорсить не пытался, вроде смысле на было, а вот пайку на ногах плиски уже всю прозванивал, в т ч попарно соседние ноги. Впрочем, там плата с белой маской и все шикарно смотрится на просвет лампочкой или телефоном. И с пайкой-то все хорошо...
Еще один тупой вопрос: а esxdos без вставленной карты sd вообще себя как-то проявляет ? Например, ругается ли, что носителя нет ? Или может он в этом случае ПЗУ и вырубает ?
Разъем брутфорсить не пытался, вроде смысле на было
Смысл в том что, прозвонив можно удостовериться, что адресные линии и линии шины данных не замкнуты. Здесь имелось в виду, чтобы прозвонить ША и ШД на КЗ, просто на разъеме их легче прозванивать, чем на выводах микросхем.
Еще один тупой вопрос: а esxdos без вставленной карты sd вообще себя как-то проявляет
Во время загрузки Вы увидите, что SD карта не примонтировалась, и соответственно не загрузятся файлы ESXDOS.SYS, NMI.SYS и BETADISK.SYS. Кстати если будет проблема с клоком, то и тут, просто, SD карта не примонтируется. Однако после всего этого Спектрум просто вывалится в SOS 48 ну и естественно не будут выполняться команды ESXDOS.
https://pic.maxiol.com/thumbs2/1593186449.3108238753.esxdosload01.jpg (https://pic.maxiol.com/?v=1593186449.3108238753.esxdosload01.jpg&dp=2)
valerium
26.06.2020, 19:14
Если при включении выполняется кусок штатного ПЗУ (черный экран, полоски убираются), то вероятность залепона на шинах крайне мала, разве что старшие адресные линии. Но проверю, спасибо за мысль.
А для чего в цепи CLK стоит триггер шмидта, да еще и после АГ3 - какую проблему он решает ?
А для чего в цепи CLK стоит триггер шмидта, да еще и после АГ3 - какую проблему он решает ?
Ну это нужно спросить у того кто это прилепил :) Вроде как для того чтобы привести к нужному виду сигнал CLK у фирменного Спектрума.
valerium
06.09.2020, 15:31
Периодически возвращаюсь к своей плате nanoSD - пока результата нету.
Уже и спек другой (тоже Ленин1, уже с корректировкой дешифрации клавиатуры и зарубленным кемпстоном), на разъеме а-ля ZXBUS вытащено все, что требуется divmmc - /NMI, подтянутый к единице, /ROMCS в ПЗУ выведен через диодное "ИЛИ" на ZXBUS 25B (подача единицы отрубает внутреннее ПЗУ). Но итог - "все те же на манеже".
При запуске или сброс в бейсик48 с мигающим курсором сразу после Ltd (и не реагирует ни на клавиатуру, ни на NMI), или меняющийся мусор. А reset выполняется с моментальной перерисовкой белого экрана и заставки бейсика48, НО без очистки экрана и убирающихся полосок ! Через некоторое время это все может перейти в состояние с цветным мусором на экране и уже не сбрасываться в бейсик до выключения. Индикатор выбранной SD-карты может гореть, может не гореть - зависит от какой-то случайности.
ПЗУ считывал и оно живое, в нем ESXDOS 0.8.8. Пайку ПЛИС и всех компонентов, насколько можно, проверил.
Если вынуть ПЗУ из nanoSD (у меня в панельке) - должен ли отображаться матрас ? У меня вместо него мусор.
Существует ли где-то описание логики работы divmmc ? С указанием портов, адресных окон, логики переключения страниц ОЗУ и перехвата обращений по точкам входа в обработчики ? (адреса последних я увидел в исходниках прошивки, но что там должно быть и как оно работает - не понял).
Надо отлаживать как-то по частям, пока не пойму, как.
nihirash
на плате NanoSD с одним микро SD разъемом
Пожалуйста ! Дайте ссылку где почитать-посмотреть на этот девайс!!! (ни гугл ни поиск по форуму результата не дает!!! )
Пожалуйста ! Дайте ссылку где почитать-посмотреть на этот девайс!!! (ни гугл ни поиск по форуму результата не дает!!! )
В теме на барахолке довольно много инфы
https://zx-pk.com/forum/viewtopic.php?f=7&t=10557
valerium
06.09.2020, 21:35
В теме на барахолке довольно много инфы
https://zx-pk.com/forum/viewtopic.php?f=7&t=10557
Да, там есть схемы и инфа по сборке, в т ч по ошибкам разводки сокета sd в первых версиях платы. Ну и собственно процесс допиливания платы до тиражной версии.
А вот бы еще найти что-то по логике работы самого устройства - с точки зрения софтового управления узлами. Ну чтоб проверить адекватность реакции ПЛИС в отлаживаемом экземпляре. Существует такое ?
А вот бы еще найти что-то по логике работы самого устройства - с точки зрения софтового управления узлами. Ну чтоб проверить адекватность реакции ПЛИС в отлаживаемом экземпляре. Существует такое ?
Я не особо знаком с дивммц, но если б у меня была такая проблема, я б пошел читать исходники Fuse. Он там довольно неплохо сэмулирован, как я понимаю.
Да, там есть схемы и инфа по сборке, в т ч по ошибкам разводки сокета sd в первых версиях платы. Ну и собственно процесс допиливания платы до тиражной версии.
А вот бы еще найти что-то по логике работы самого устройства - с точки зрения софтового управления узлами. Ну чтоб проверить адекватность реакции ПЛИС в отлаживаемом экземпляре. Существует такое ?
Тут исходники для CPLD от автора https://github.com/mprato/DivMMC/blob/master/divmmc/divmmc.vhd
Тут что-то по проблеме тактирования данного устройства http://blog.tynemouthsoftware.co.uk/2018/01/designing-divmmc-future.html
P.S. На Ленинграде-2 у меня не заработало.
valerium
09.09.2020, 16:54
За вторую ссылку спасибо, буду вникать - видимо там внятно расписано, зачем был применен триггер шмидта на сигнале clk и прочие хитрости с тактовым сигналом (в nanosd применен еще одновибратор с вариацией выбора прямого/инверсного выхода - тоже пока не разобрался, зачем).
А на ленинграде он как не заработал ? Спек стартовал ? esxdos или какая там была прошитая ось - инициализировался ? Или показывал матрас при включении ? И заработал ли он на чем-то другом, кроме ленинграда ?
Исходники вчера тоже смотрел, хочу попробовать собрать на чем-то более знакомом (альтера уже стала почти родной, а xilinx со мной чего-то не дружит). Жду альтеру 7128s, может быть получится всю эту схему в 5 вольтах пересоздать и чего-нибудь с ней добиться.
видимо там внятно расписано, зачем был применен триггер шмидтра на сигнале clk
Для того чтобы "хиленький" меандр фирменного Спектрума привести к "нормальному" виду. У наших клонов сигналы clock имеют сразу нормальный вид и для наших клонов этого не нужно.
valerium
09.09.2020, 20:49
Для того чтобы "хиленький" меандр фирменного Спектрума привести к "нормальному" виду. У наших клонов сигналы clock имеют сразу нормальный вид и для наших клонов этого не нужно.
Забавно, у них там действительно непонятно что было от модели к модели. У некоторых 'хиленький меандр' больше похож на полупериоды синусоиды.
Тут что-то по проблеме тактирования данного устройства http://blog.tynemouthsoftware.co.uk/2018/01/designing-divmmc-future.html
.
Просмотрел. Ребята воевали за универсальность устройства и совместимость со всеми старыми и новыми машинами, в которых бывает как одинарный, так и двойной rom, а также теми, у кого вообще нет clock на коннекторе.
Главный вывод у них из всего этого - можно использовать автономный генератор и вообще не привязываться к качеству CLK и его наличию. У них работало стабильно в частотах от 3,9 до 4,2 мгц, в серию оно пошло с кристаллом на 4 мгц, а нужно оно только для тактирования spi на картах памяти и совершенно не требует синхронности со спеком (раздел Breakthrough).
Однако, прозрение )
Из этого следует, что все эти танцы с бубном для наших клонов действительно нужно выкинуть. Максимум - скорректировать уровень для 3-вольтовой логики.
За вторую ссылку спасибо, буду вникать - видимо там внятно расписано, зачем был применен триггер шмидта на сигнале clk и прочие хитрости с тактовым сигналом (в nanosd применен еще одновибратор с вариацией выбора прямого/инверсного выхода - тоже пока не разобрался, зачем).
А на ленинграде он как не заработал ? Спек стартовал ? esxdos или какая там была прошитая ось - инициализировался ? Или показывал матрас при включении ? И заработал ли он на чем-то другом, кроме ленинграда ?
Исходники вчера тоже смотрел, хочу попробовать собрать на чем-то более знакомом (альтера уже стала почти родной, а xilinx со мной чего-то не дружит). Жду альтеру 7128s, может быть получится всю эту схему в 5 вольтах пересоздать и чего-нибудь с ней добиться.
Матрас при включении, один раз появилась заставка esxdos наполовину. На других не пробовал. На альтеру перенести думаю , без проблем (сам, ради интереса компилировал исходник под EPM7128 в квартусе, ошибок не было).
andykarpov
10.09.2020, 12:08
а нужно оно только для тактирования spi на картах памяти
Ну такое, так, да не совсем :)
Я пробовал когда-то такой финт ушами, у меня не заработало :)
Возможно что-то недоговаривают...
Иначе все б давно уже перешли на автономные генераторы в DivMMC...
Периодически возвращаюсь к своей плате nanoSD - пока результата нету.
Уже и спек другой (тоже Ленин1, уже с корректировкой дешифрации клавиатуры и зарубленным кемпстоном), на разъеме а-ля ZXBUS вытащено все, что требуется divmmc - /NMI, подтянутый к единице, /ROMCS в ПЗУ выведен через диодное "ИЛИ" на ZXBUS 25B (подача единицы отрубает внутреннее ПЗУ). Но итог - "все те же на манеже".
При запуске или сброс в бейсик48 с мигающим курсором сразу после Ltd (и не реагирует ни на клавиатуру, ни на NMI), или меняющийся мусор. А reset выполняется с моментальной перерисовкой белого экрана и заставки бейсика48, НО без очистки экрана и убирающихся полосок ! Через некоторое время это все может перейти в состояние с цветным мусором на экране и уже не сбрасываться в бейсик до выключения. Индикатор выбранной SD-карты может гореть, может не гореть - зависит от какой-то случайности.
ПЗУ считывал и оно живое, в нем ESXDOS 0.8.8. Пайку ПЛИС и всех компонентов, насколько можно, проверил.
Если вынуть ПЗУ из nanoSD (у меня в панельке) - должен ли отображаться матрас ? У меня вместо него мусор.
Существует ли где-то описание логики работы divmmc ? С указанием портов, адресных окон, логики переключения страниц ОЗУ и перехвата обращений по точкам входа в обработчики ? (адреса последних я увидел в исходниках прошивки, но что там должно быть и как оно работает - не понял).
Надо отлаживать как-то по частям, пока не пойму, как.
Вот
https://zx-pk.ru/threads/22237-voprosy-po-divide-5-7c.html?p=995850&viewfull=1#post995850
valerium
10.09.2020, 21:05
Ну такое, так, да не совсем :)
Я пробовал когда-то такой финт ушами, у меня не заработало :)
Возможно что-то недоговаривают...
Иначе все б давно уже перешли на автономные генераторы в DivMMC...
Мне это тоже не совсем ясно, но вот кусок исходника CPLD.
И это единственное место, где обрабатывается состояние clock. Здесь по спаду clock происходит либо смена состояния передачи (idle -> sample), либо чтение шины данных в регистр для передачи (состояне меняется sample -> transmit), либо выполняется один цикл из 16 обмена по SPI, в каждом нечетном из которых формируется один импульс spi_clock - чтение и запись бита. Больше clock ни к чему не привязан и синхронность с циклами CPU вроде как и не нужна.
-- spi transmission/reception
-- Update transmission state
process(clock, reset)
begin
if reset = '0' then
transState <= IDLE;
TState <= (others => '0');
fromSDByte <= (others => '1');
toSDByte <= (others => '1');
toCPUByte <= (others => '1');
elsif falling_edge(clock) then
case transState is
when IDLE => -- Intercept a new transmission request (port 0x3F)
if address = zxmmc_spi_port and iorq='0' and m1='1' then -- If there is a transmission request, prepare to SAMPLE the databus
transState <= SAMPLE;
end if;
when SAMPLE =>
if wr = '0' then -- If it is a SEND request, sample the CPU data bus
toSDByte <= D;
end if;
transState <= TRANSMIT; -- then start the transmission
when TRANSMIT =>
TState <= TState + 1;
if TState < 15 then
if TState(0) = '1' then
toSDByte <= toSDByte(6 downto 0)&'1';
fromSDByte <= fromSDByte(6 downto 0)& spi_datain;
end if;
else
if TState = 15 then -- transmission is completed; intercept if there is a new transmission request
if address = zxmmc_spi_port and iorq='0' and m1='1'and wr='0' then
toSDByte <= D;
transState <= TRANSMIT;
else -- else we'll go in IDLE state.
transState <= IDLE;
-- TState <= "0000";
end if;
toCPUByte <= fromSDByte(6 downto 0)& spi_datain;
end if;
end if;
when OTHERS =>
null;
end case;
end if;
-- SPI SD Card pins
SPI_clock <= TState(0);
spi_dataout <= toSDByte(7);
end process;
Данные на шине данных тоже формируются только на основе /iorq, /rd и /m1 и тоже не зависят от тактовых импульсов проца:
D <= toCPUByte when (address = zxmmc_spi_port) and (iorq = '0') and (rd = '0') and m1='1' else "ZZZZZZZZ";
Вот и вопрос: а зачем тут нужна синхронность с циклами CPU ?
Не знаю как со стороны софта выполняется ожидание передачи байта по spi, но могу предположить, что там просто цепочка nop-ов в сумме на 16 тактов процессора. Тогда становится логичным, почему упомянутая частота генератора должна быть равна или НЕМНОГО выше процессорной - чтобы обмен прошел за это число тактов. И при автономном генераторе лучше, чтоб была выше (рассинхронизация обмена в пределах одного такта CPU не вызовет задержки обмена по spi).
Поправьте меня, если несу пургу, но хочется хоть что-то в этом понять.
- - - Updated - - -
Вот
https://zx-pk.ru/threads/22237-voprosy-po-divide-5-7c.html?p=995850&viewfull=1#post995850
Аха, клево, значит конфигурация памяти в DivIDE рулится в основном через порт управления #E3. В нижних таблицах показаны значения маппирования ROM (0000-1FFF) и банков RAM (#0000-1FFF и #2000-3FFF) и показаны точки входа маппирования RAM для перехвата ряда адресов (reset, nmi, int im2, trdos и неких процедур load и save).
И наверное в DivMMC оно все так же, коли все работает с одним и тем же esxdos.
Эт чо получается, там из огромной озухи используется всего четыре страницы по 8К ?? Я думал, что bank(3 downto 0) - это четырехразрядный номер банка, а оказывается работают только bank0-bank3 и это просто прямые сигналы выбора одного из 4 банков ?
В DivMMC номер банка 6-разрядный и вроде как в него пишется действительно номер страницы, но еще надо искать, сколько этих страниц адресуется реальным ПО
elsif rising_edge(divideio) then
bank(5 downto 0) <= D(5 downto 0);
mapram <= D(6) or mapram;
conmem <= D(7);
end if;
А вот то, что вверху таблицы, относится только к управлению ATA-устройством и для SD неприменимо.
valerium
11.09.2020, 23:52
Собственно, вот тут (https://spectrumforeveryone.com/features/history-esxdos-divmmc-divmmc-enjoy/) немного подробностей по divmmc в разделе "Some techtalk". Возможно не скажу ничего нового, но для меня это было находкой: DivMMC - это гибрид из 1) DivIDE в части маппирования 8К-страниц памяти ROM+RAM и управления ей через регистр конфигурации (порт #E3) и из 2) ZXMMC в части обмена с картой памяти по SPI. Только здесь для SPI используются порты #E7 (zxmmc_control_port) и #EB (zxmmc_spi_port) вместо #1F и #3F соответственно.
В итоге мы имеем два почти независимых устройства и первое всего слегка сложнее порта конфигурации #7FFD, причем ему не нужен clock. ПЗУ должно мапиться в нижние 8К сразу после reset-а.
Но на Ленине этого не происходит ((
Конфликтовать divmmc на ленинграде может разве что с портом кемпстон-джойстика - все три адреса портов divmmc имеют A0=1 и в исходном Ленине при чтении любого из портов #E3, #E7, #EB отзовется кемпстон. У меня кемпстон зарублен (/CS мультиплексоров выбирается только при A0=0) и соот-но конфликта нет. Но и не в этом причина.
У меня есть DivIDE 5.7C, который точно работал на Арлекине. При подключении его к Ленину я тоже вижу МАТРАС. То есть при сбросе у него /ROMCS правильно встает в единицу, отключает штатное ПЗУ, но он не включает свое. Есть идеи, почему ?
Есть идеи, почему ?
а что с дешифрацией портов ?
в оригинале (на плате ленина) всего два порта - все чётные и нечётные
valerium
12.09.2020, 00:32
а что с дешифрацией портов ?
в оригинале (на плате ленина) всего два порта - все чётные и нечётные
Во всем Ленине из читаемых портов - только клавиатура, кемпстон и tape in.
Из записываемых - только #FE (бордюр, спикер, tape out).
Записываемые у меня поправлены для неконфликта с AY по A0=0 и они нам сейчас неинтересны, т.к. у divmmc все три порта имеют A0=1 и в #FE никак не попадут.
В читаемых портах клавиатура и tape in - это все #xxFE (A0=0), с divmmc не пересекаются.
А вот кемпстон при A0=1 мог пересекаться, но это тоже исправлено - мультиплексоры клавы/кемспстона сейчас отзываются только на клаву (A0=0).
Вот схема проделанного безобразия:
https://yadi.sk/i/qwYbOS9jkC15Og
Пытаюсь понять как работает 'маппер' в DivIDE/DivMMC. Эскпериментирую в emu, а там, глядишь и в реале, на рассыпухе, есть желание его сделать.
Если представить карту памяти, то получается 8 вариантов.
Два бита из регистра управления Е3h, CONMEM-бит_7 и MAPRAM-бит_6 и бит, назову его trap - активация пеключения при попадании в определенные адреса.
если судить из этого описания DivIDE:
--------------------------------------------------------------------------------------------------------------------
So, when CONMEM is set, there is:
0000-1fffh - EEPROM/EPROM/NOTHING(if empty socket), and this area is flash-writable if EPROM jumper is open.
2000-3fffh - 8k bank, selected by BANK 0..1 bits, always writable.
When MAPRAM is set, but CONMEM is zero, and entrypoint was reached:
0000-1fffh - Bank No.3, read-only
2000-3fffh - 8k bank, selected by BANK 0..1. If it's different from Bank No.3, it's writable.
When MAPRAM is zero, CONMEM is zero, EPROM jumper is closed and entrypoint was reached:
0000-1fffh - EEPROM/EPROM/NOTHING(if empty socket, so open jumper in this case), read-only.
2000-3fffh - 8k bank, selected by BANK 0..1, always writable.
Otherwise, there's normal speccy memory layout. No modified ROM, no shit.
--------------------------------------------------------------------------------------------------------------------
вариант 1) получается, что при CONMEM==1 не имеет значение состояние бит MAPRAM и trap, всегда будет 'DivROM' и некая страница 'DivRAM'
при CONMEM==0 получаем:
вариант 2) MAPRAM==1, trap==1, когда первые 8КБ, это третья страница 'DivRAM' только чтение, а вторые 8КБ, это некая страница 'DivRAM'
вариант 3) MAPRAM==0, trap==1, повторяем вариант 1)
вариант 4-8) все остальные варианты, это обычное ПЗУ ZX48.
итого:
если CONMEM==0, MAPRAM==0, trap==0 карта=0, вариант 4)
0000-3fffh 16k normal speccy EEPROM memory layout
если CONMEM==0, MAPRAM==0, trap==1 карта=1, вариант 3)
0000-1fffh - EEPROM/EPROM/NOTHING(if empty socket, so open jumper in this case), read-only.
2000-3fffh - 8k bank, selected by BANK 0..1, always writable.
если CONMEM==0, MAPRAM==1, trap==0 карта=2, вариант 4)
0000-3fffh 16k normal speccy EEPROM memory layout
если CONMEM==0, MAPRAM==1, trap==1 карта=3, вариант 2)
0000-1fffh - Bank No.3, read-only
2000-3fffh - 8k bank, selected by BANK 0..1. If it's different from Bank No.3, it's writable.
если CONMEM==1, MAPRAM==0, trap==0 карта=4, вариант 1)
если CONMEM==1, MAPRAM==0, trap==1 карта=5
если CONMEM==1, MAPRAM==1, trap==0 карта=6
если CONMEM==1, MAPRAM==1, trap==1 карта=7
0000-1fffh - EEPROM/EPROM/NOTHING(if empty socket), and this area is flash-writable if EPROM jumper is open.
2000-3fffh - 8k bank, selected by BANK 0..1 bits, always writable.
--------------------------------------------------------------------------------------------------------------------
вот так я дополняю конфигурацию в emu ZX_Spectrum_48:
cpu : z80 {
debug=cas
debug=trap
mem=mm
int[FF]=vid.irq
port[a3]=hdd.data8[0]
port[a7]=hdd.data8[1]
port[ab]=hdd.data8[2]
port[af]=hdd.data8[3]
port[b3]=hdd.data8[4]
port[b7]=hdd.data8[5]
port[bb]=hdd.data8[6]
port[bf]=hdd.data8[7]
port[E3]=portE3
port[E7]=sdcard.ss
port[EB]=sdcard.data8
port[FD]=portFD
port[FE]=sys.data[0]
}
biosESX : Memory {
rom="ZX\esxmmc.bin"
}
mem2 : Memory {
size=20000
frame[0].size=2000
frame[0].page=portE3.portA[0-3]
}
mem2p : MemMap {
page[3]=portE3.portA[3]
page[2]=portE3.portA[2]
page[1]=portE3.portA[1]
page[0]=portE3.portA[0]
map[15][0000-1FFF]=mem2[1e000]
map[14][0000-1FFF]=mem2[1c000]
map[13][0000-1FFF]=mem2[1a000]
map[12][0000-1FFF]=mem2[18000]
map[11][0000-1FFF]=mem2[16000]
map[10][0000-1FFF]=mem2[14000]
map[9][0000-1FFF]=mem2[12000]
map[8][0000-1FFF]=mem2[10000]
map[7][0000-1FFF]=mem2[e000]
map[6][0000-1FFF]=mem2[c000]
map[5][0000-1FFF]=mem2[a000]
map[4][0000-1FFF]=mem2[8000]
map[3][0000-1FFF].ro=mem2[6000]
map[2][0000-1FFF]=mem2[4000]
map[1][0000-1FFF]=mem2[2000]
map[0][0000-1FFF]=mem2[0000]
}
mm : MemMap {
page[2]=portE3.portA[7]
page[1]=portE3.portA[6]
page[0]=trap.output
map[0][0000-3FFF]=bios[0000]
map[0][4000-FFFF]=mem1[0000]
map[1][0000-1FFF]=biosESX[0000]
map[1][2000-3FFF]=mem2.frame[0]
map[1][4000-FFFF]=mem1[0000]
map[2][0000-3FFF]=bios[0000]
map[2][4000-FFFF]=mem1[0000]
map[4][0000-1FFF]=biosESX[0000]
map[4][2000-3FFF]=mem2.frame[0]
map[4][4000-FFFF]=mem1[0000]
map[5][0000-1FFF]=biosESX[0000]
map[5][2000-3FFF]=mem2.frame[0]
map[5][4000-FFFF]=mem1[0000]
map[3][0000-1FFF].ro=mem2[6000]
map[3][2000-3FFF]=mem2p
map[3][4000-FFFF]=mem1[0000]
map[6][0000-1FFF]=biosESX[0000]
map[6][2000-3FFF]=mem2.frame[0]
map[6][4000-FFFF]=mem1[0000]
map[7][0000-1FFF]=biosESX[0000]
map[7][2000-3FFF]=mem2.frame[0]
map[7][4000-FFFF]=mem1[0000]
initpage=0
}
portE3 : K580ww55 {
}
trap : exec-sensor {
range[0000-0001]=1
range[0008-0009]=1
range[0038-0039]=1
range[0066-0067]=1
range[04c6-04c7]=1
range[0562-0563]=1
range[3D00-3DFF]=1
range[1FF8-1FFF]=0
}
sdcard : sd-mmc {
image="zx\SanF2.raw"
}
hdd : cf-ide {
drive[0].image="zx\SanF2.raw"
drive[0].geometry=1024C16H63S
; ca a (cat a)
}
но ничего не работает.
Переключение DivROM и страниц DivRAM в отладчике видно, но при попытке из DivROM вывести текст приглашения, идет вызов функции ПЗУ ZX48, там далее, вызов на rst 8, его перехват(trap) на DivROM, а вот обратно возврат происходит в пустую страницу DivRAM 0х2246...
Получается, что то не так с распределением страниц, где ошибка, может кто подсказать?
Нашел пару ошибок в конфигурации, исправил сообщение выше, теперь fatware и tbios (https://velesoft.speccy.cz/zx/divide/divide-soft.htm) находят мастер ide диск, а вот ESXdos никаких признаков жизни не подает.
Смущает в описании DivIDE, что записав один раз бит MAPRAM, можно его уже не указывать при установке страниц, а карта памяти будет как при установленном бите. В конфигурации выше это не учитывается, так ли это обязательно, и, вообще, правильно ли я это понимаю?
Не пойму способ переключения к основной ПЗУ ZX:
The one-instruction delay can be used to distinguish between nested calls to
the same place. To do this you should place different instructions at the
entry point address than is in the original ROM. The first call will execute
the original instruction, but any subsequent call will execute the
instruction in the paged-in memory.
Задержка в одну инструкцию может использоваться, чтобы различать вложенные вызовы
в одно и то же место. Для этого вы должны разместить другие инструкции на
адрес в основном ПЗУ. Первым вызовом будет выполнена
исходная инструкция, но любой последующий вызов выполнит
инструкцию в DivRAM странице памяти.
This is particularly useful for avoiding nested NMI calls, which can not be
easily implemented using hardware. It also allows the divIDE to use INTs for
timing. When divIDE code is excuted, external calls will map divIDE out and
continue at the original code at 0038h, but nested INTs can jump to
different code.
Это особенно полезно для обработки вложенных вызовов NMI, которые не могут быть
легко реализуемы аппаратно. Это также позволяет divIDE использовать прерывания INT для
учета времени. Когда выполняется код divIDE, внешние вызовы отключат divIDE и
продолжат исполнение исходного кода с 0038h, но вложенные прерывания INT перейдут к выполнению
другого кода.
что это значит, может кто это прояснить?
существует некая задержка в одну инструкцию на переключение? эта задержка актуальна только на возврат к основной ПЗУ? сама возможность такой задержки на одну инструкцию триггерная?
как то я совсем запутался...
valerium
08.10.2020, 05:44
Несколько раз прочитал и тоже не пойму, почему это one instruction delay. Может это плохой перевод с испанского/польского/еще какого-то неведомого языка ? Задержка-то не на одну инструкцию, а на один вход в адрес - скорее, 'one call delay'. Исключает вложенные вызовы nmi-обработчика из самого же себя. Первый вызов, например, на 0038h выполняет код оригинального ПЗУ, второй вызов по этому же адресу мапит какую-то из страниц divide и выполняет переход на код, который находится в ней.
Также позволяет использовать INT для тайминга в divIDE- первый вызов по INT-у отключит пзу divIDE и выполнит оригинальный обработчик основного пзу, второй же вызов к этому адресу уже будет выполнять код из пзу divIDE (вот тут я не пониамаю, что будет с третьим и последующими).
А где можно почитать сей доблестный документ ? Я одно время очень искал, но так и не нашел описания логики для divIDE/mmc.
Сам документ найти не проблема, на этой (https://divide.speccy.cz/) страничке в разделе technical documentation - divIDE programming model, это будет версия 1.03, а в архиве, в разделе download - FATware 0.14a, версия 1.04 (сравнил их построчно, отличий, по сути, нет).
есть у меня еще, вероятно одно из первых описаний:
DivIDE programming model
------------------------
DivIDE interacts with ZX Spectrum using I/O accesses or automatically by
replacing original ZX-ROM with its own memory, when CPU fetch from an
entry-point is detected (and such behavior is somehow allowed).
DivIDE contains 8 kB ROM (could be not present, EPROM or EEPROM, in the third
case it's in-system reprogrammable) and 32-512 kB RAM. DivIDE can use system
from 3rd 8k bank of its RAM, this is suitable especially for safe system
development. Accidental EEPROM damage (due to unlucky out from crashed code)
is fused by the on-board jumper.
All ports are decoded using A0..A7 address-wires only. So you can access all
eight IDE-registers from so caled command block (rrr=0..7) at addresses
xxxx xxxx 101r rr11. Other divIDE features are controlled using dedicated
port at address xxxx xxxx 1110 0011, which belongs to divIDE CONTROL REGISTER.
IDE command block registers
---------------------------
[ DATA REGISTER (R/W) ]
xxxx xxxx 1010 0011, 0a3h, 163
This register serves for reading or writing sectors. It's 16-bit wide, so
divIDE is joining write-pairs into words and splitting readed words into bytes.
When reading from this register, each ODD access will return low byte of
readed word (while high byte is stored into latch and buffer pointer is shifted
to next word). Each EVEN access will return that high byte, stored in previous
read access to DATA REGISTER.
When writing to DATA REGISTER, each ODD access will store the byte into latch.
Each EVEN access will join the previously stored low portion with actual byte
(considered to be high portion), and this word is written into harddrive (and
next word in harddrive buffer is pointed).
After any access to non-data command block registers (rrr=1..7) or to divIDE
control register, following DATA REGISTER access is considered to be ODD.
Accesses outside divIDE ports cannot change the EVEN/ODD state. After reset or
power-on, this state is unknown.
[ ERROR REGISTER (R) / FEATURES REGISTER (W) ]
xxxx xxxx 1010 0111, 0a7h, 167
[ SECTOR COUNT REGISTER (R/W) ]
xxxx xxxx 1010 1011, 0abh, 171
[ SECTOR NUMBER REGISTER (R/W) (too LBA bits 0..7) ]
xxxx xxxx 1010 1111, 0afh, 175
[ CYLINDER LOW REGISTER (R/W) (too LBA bits 8..15) ]
xxxx xxxx 1011 0011, 0b3h, 179
[ CYLINDER HIGH REGISTER (R/W) (too LBA bits 16..23) ]
xxxx xxxx 1011 0111, 0b7h, 183
[ DRIVE/HEAD REGISTER (R/W) (too LBA bits 24..28) ]
xxxx xxxx 1011 1011, 0bbh, 187
[ STATUS REGISTER (R) / COMMAND REGISTER (W) ]
xxxx xxxx 1011 1111, 0bfh, 191
For detailed desription of mentioned registers have a look at
http://www.t13.org .
DivIDE control register
-----------------------
[ CONTROL REGISTER (Write Only) ]
xxxx xxxx 1110 0011, 0e3h, 227
This register is write-only (readed data will be unknown). All bits are reset to
'0' after each power-on. Unimplemented bits, marked 'X', should be zeroed for
future compatibility issues with more than 32kB RAM DivIDEs.
7 6 5 4 3 2 1 0
[ CONMEM , MAPRAM, X, X, X, X, BANK1, BANK0 ]
Bits BANK1 and BANK0 select the 8k bank, which normally appears in area
2000-3fffh, when divide memory is mapped.
Bit MAPRAM can be set to '1' only (when it's '1', only power-on can return it
to '0'). This bit allows 8k bank No.3 to act as EPROM/EEPROM, and write-protects
it. Set it when system image is loaded into bank No.3 and you want to safe probe
it till the next power-on. Set it also when you haven't EPROM/EEPROM, and you
want to use system. (Because u will possibly re-install it from MAPRAM mode, you
will need CONMEM to override writeprotect. Because after returning to BASIC you
rely on original ROM, you must reset automapper, which could be left in
undesired state by previous bus transactions. Because it could be done only by
fetching code from off-area, u must set DI, then call 1ffbh ('RET'), ten CONMEM, loading image,
releasing CONMEM and setting MAPRAM, then EI. Then the return is safe.)
Bit CONMEM forces EPROM/EEPROM to 0000-1fffh and by BANK 1..0 selected bank to
area 2000-3fffh, regardless to the actual divIDE state or to physical presence
of EPROM/EEPROM. Bank in area 2000-3fffh is always writable, and in 0000-1fffh
always appears EEPROM/EPROM, which is writable when EPROM jumper is open. Use
it in third-party utilities for loading system or modules, or in system's
auto-upgrade process.
Memory mapping
--------------
Memory mapping could be invoked manually (by setting CONMEM), or automatically
(CPU has fetched opcode form an entry-point). Automatic mapping is active
only if EPROM/EEPROM is present (jumper EPROM is closed) or bit MAPRAM is set.
Automatic mapping occurs at the begining of refresh cycle after fetching
opcodes (M1 cycle) from 0000h, 0008h, 0038h, 0066h, 04c6h and 0562h. It's
also mapped instantly (100ns after /MREQ of that fetch is falling down) after
executing opcode from area 3d00..3dffh. Memory is automatically disconnected in
refresh cycle of the instruction fetch from so called off-area, which is
1ff8-1fffh.
The one-instruction delay could be used to distinguish between nested calls to
the same place. For such trick you will place different instruction at the
entrypoint address, than is in original ZX ROM. So the first call wil execute
original instruction, but subsequent one will jump to another code, because
divIDE memory was already mapped, with its changed opcode. It's great for 100%
avoidance of nested NMI, which cannot be implemented using pure combinatorial
hardware workaround. It allows divIDE to use INT for timing, when divIDE code is
performed (external calls will map later divIDE off and continue in #38h
original service, but nested INTs can jump to another work, and mapping off is
of course undesirable there).
In automatic mapping, when MAPRAM is set, in location 0000h-1fffh appears
write-protected Bank No.3, instead of EEPROM/EPROM. The meaning-priority is
(from lowest to highest) EPROM jumper -> MAPRAM -> CONMEM. So because that
jumper is no more significant when MAPRAM or even CONMEM is set, it's used
to distinguish between fused or unfused EEPROM state for CONMEM mode.
So, when CONMEM is set, there is:
0000-1fffh - EEPROM/EPROM/NOTHING(if empty socket), and this area is
flash-writable if EPROM jumper is open.
2000-3fffh - 8k bank, selected by BANK 0..1 bits, always writable.
When MAPRAM is set, but CONMEM is zero, and entrypoint was reached:
0000-1fffh - Bank No.3, read-only
2000-3fffh - 8k bank, selected by BANK 0..1. If it's different from Bank No.3,
it's writable.
When MAPRAM is zero, CONMEM is zero, EPROM jumper is closed and entrypoint was
reached:
0000-1fffh - EEPROM/EPROM/NOTHING(if empty socket, so open jumper in this case),
read-only.
2000-3fffh - 8k bank, selected by BANK 0..1, always writable.
Otherwise, there's normal speccy memory layout. No modified ROM, no shit.
And, that's all, Folks! Do you think, it's too complex? Read it once again.
Do you still think, it's not sane? Feel free to ask me (Zilog), my email is
xcimbal@quick.cz. I hope you will enjoy this piece of hardware, i have spent
months for optimising this marvelous piece of shit.
With regards
Zilog
опять же, это сути текущего вопроса не раскрывает.
Казательно вызовов, на мой взгляд, тут именно речь идет об одной инструкции, а не всем обработчике.
Возможно, если мы находимся в DivROM, и вызываем код самой же DivROM, то вызов идет без задержки, а если же код исполняется в основной ROM и идет вызов на адрес, где должен сработать trap, то первая инструкция выбирается из основной ROM, а вторая из подмененой страницы DivROM/RAM.
Смотрю исходники fuse-1.5.7, как там организовано переключение, но не вижу ни каких 'хитростей'.
valerium
08.10.2020, 10:09
Инструкция может быть разной длины и выполняться за разное количество тактов. В железе такого умного контродя точно не реализовано (заглядывая в прошивку cpld), так что вряд ли речь про одну инструкцию. Если б речь была про однотактовую инструкцию или обязательный nop в начале обработчика, об этом бы написали отдельно.
Если я правильно понимаю этот абзац:
Automatic mapping occurs at the begining of refresh cycle after fetching
opcodes (M1 cycle) from 0000h, 0008h, 0038h, 0066h, 04c6h and 0562h. It's
also mapped instantly (100ns after /MREQ of that fetch is falling down) after
executing opcode from area 3d00..3dffh. Memory is automatically disconnected in
refresh cycle of the instruction fetch from so called off-area, which is
1ff8-1fffh.
то получается, что есть разница в логике автомаппера при обработке областей 0000h, 0008h, 0038h, 0066h, 04c6h and 0562h и 3d00..3dffh. Для первой группы выполнится опкод основной ROM, и только после произойдет переключение на DivROM, а для второй группы (это наш TrDos) подмена произойдет сразу же. Отключение же произойдет с задержкой...
Залез я в исходники эмулятора spediv, который поддерживает DivIDE, и вот что увидел в функции обработчика шага опкода:
#ifdef HAVE_DIVIDE
divide_premap(PC);
#endif
nextop = *PCP;
#ifdef HAVE_DIVIDE
divide_postmap(PC);
#endif
PC++;
переключение карт памяти может быть как перед извлечением опкода, так и после извлечения опкода.
Соответственно вот так выглядят обработчики попадания в адреса:
void divide_premap(int addr) {
// "fetch state"
// mapper logic, see divIDE documentation for more info
// check for divide memory connecting betadisk entry points
if ((addr & 0xff00) == 0x3d00)
divide_automap = 1;
divide_mapper();
}
void divide_postmap(int addr) {
// "M1 state"
// mapper logic, see divIDE documentation for more info
// check for divide memory connecting entry points
if ((addr == 0x0000) ||
(addr == 0x0008) ||
(addr == 0x0038) ||
(addr == 0x0066) ||
(addr == 0x04C6) ||
(addr == 0x0562)) divide_automap = 1;
// check for original memory connecting entry points
if ((addr & 0xfff8) == 0x1ff8) {
divide_automap = 0;
}
divide_mapper();
}
и здесь же видно, что автомаппер снимается только после извлечения опкода.
а это уже остальная обработка распределения памяти, в соответствии с битами CONMEM и MAPRAM (текста много):
void divide_mapper() {
// if CONMEM is set, connect EEPROM (read only if JP2 is closed) and selected RAM bank (read/write)
if (DIVIDE_CONMEM(divide_int_port)) { // map eeprom+ram
if ((divide_memstate != 1) || divide_bank_changed) {
memcpy(PRNM(proc).mem, divide_eeprom, 0x2000);
memcpy(PRNM(proc).mem + 0x2000, divide_ram[DIVIDE_BANK(divide_int_port)], 0x2000);
}
divide_memstate = 1;
divide_bank_changed = 0;
return;
}
// if CONMEM isn't set and MAPRAM is set and:
// 1) if we reached "connecting" entry point, connect RAM #3 bank (read only) and selected RAM bank (if it is 3 it is too read only, else it is writable)
// 2) if we reached "disconnecting" entry point, connect original ZX Speccy ROM
if (DIVIDE_MAPRAM(divide_int_port)) {
// check for mb02 layout
if (!divide_jp2 && (DIVIDE_BANK(divide_int_port) > 1 || divide_memstate == 3)) {
if ((divide_memstate != 3) || divide_bank_changed) {
memcpy(PRNM(proc).mem, divide_ram[DIVIDE_MB02_BANK(divide_int_port)*2], 0x2000);
memcpy(PRNM(proc).mem + 0x2000, divide_ram[DIVIDE_MB02_BANK(divide_int_port)*2+1], 0x2000);
}
divide_memstate = 3;
divide_bank_changed = 0;
return;
}
if (divide_automap) { // map ram3+ram
if ((divide_memstate != 2) || divide_bank_changed) {
memcpy(PRNM(proc).mem, divide_ram[3], 0x2000);
memcpy(PRNM(proc).mem + 0x2000, divide_ram[DIVIDE_BANK(divide_int_port)], 0x2000);
}
divide_memstate = 2;
divide_bank_changed = 0;
} else { // map original_rom
if (divide_memstate) {
memcpy(PRNM(proc).mem, orig_rom, 0x4000);
}
divide_memstate = 0;
divide_bank_changed = 0;
}
return;
}
// if JP2 is closed and:
// 1) if we reached "connecting" entry point, connect EEPROM (read only) and selected RAM bank (read/write)
// 2) if we reached "disconnecting" entry point, connect original ZX Speccy ROM
if (divide_jp2) {
if (divide_automap) { // map eeprom+ram
if ((divide_memstate != 1) || divide_bank_changed) {
memcpy(PRNM(proc).mem, divide_eeprom, 0x2000);
memcpy(PRNM(proc).mem + 0x2000, divide_ram[DIVIDE_BANK(divide_int_port)], 0x2000);
}
divide_memstate = 1;
divide_bank_changed = 0;
} else { // map original_rom
if (divide_memstate) {
memcpy(PRNM(proc).mem, orig_rom, 0x4000);
}
divide_memstate = 0;
divide_bank_changed = 0;
}
return;
}
// else connect original ZX Speccy ROM
if (divide_memstate) { // map original_rom
memcpy(PRNM(proc).mem, orig_rom, 0x4000);
}
divide_memstate = 0;
divide_bank_changed = 0;
}
void divide_put_mem(int addr, byte *ptr, byte val) {
switch (divide_memstate) {
case 0:
// original ZX Speccy ROM - no update memory
break;
case 1:
// EEPROM + selected RAM bank
if (addr<0x2000) {
// is EEPROM writable?
if (divide_jp2) break;
*ptr=val;
// we have to make this change in divide memory too (not really mapped, only copied)
divide_eeprom[addr]=val;
divide_image_changed=1;
break;
}
*ptr=val;
// we have to make this change in divide memory too (not really mapped, only copied)
divide_ram[DIVIDE_BANK(divide_int_port)][addr-0x2000]=val;
break;
case 2:
// RAM #3 bank + selected RAM bank
// if it is 0k-8k page, write is disabled
// if it is 8k-16k page, write is disabled if is selected RAM #3 bank
if (addr<0x2000 || DIVIDE_BANK(divide_int_port)==3) break;
*ptr=val;
// we have to make this change in divide memory too (not really mapped, only copied)
divide_ram[DIVIDE_BANK(divide_int_port)][addr-0x2000]=val;
break;
case 3:
if (!divide_mb02_write_enable) break;
*ptr=val;
if (addr<0x2000)
divide_ram[DIVIDE_MB02_BANK(divide_int_port)*2][addr]=val;
else
divide_ram[DIVIDE_MB02_BANK(divide_int_port)*2+1][addr-0x2000]=val;
break;
default:
// printf("unknown divide state %d\n", divide_memstate);
;
}
}
Залез я в исходники эмулятора spediv
Залезь еще в исходники эмулятора Тцезаря. Там по идее еще и UnoDOS3 должен быть как бы.
Залезь еще в исходники эмулятора Тцезаря. Там по идее еще и UnoDOS3 должен быть как бы.
Не знаю что такое ни первое, ни второе. Но идея с переключением уже понятна. Не понятно другое, а для чего использовать вариант с 'пост' переключением? при наличии варианта 'пред' переключения сразу же при попадании на адрес? ну ловить не 0008, а 0009, не 0038, а 0039 и тд. Вариант 'пост' в аппаратной реализации требует поймать попадания в адрес, защелкнуть признак попадания и в момент рефреша этот признак активировать, после чего все сбросить. К чему эти движения?
https://zx-pk.ru/threads/32145-zesarux-9-0.html
Первое.
А второе - это альтернатива DivMMC, но в отличие от сабжа - с исходниками. Но если разобрался - то конечно не нужно.
valerium
08.11.2020, 03:29
Делаю очередной подход с целью прикрутить divmmc к русским клонам, в частности, к Ленину.
Неудобно дебажить плату на xc9572xl при неясной ее работоспособности. Поэтому все воссоздал в теплых 5 вольтах на альтере epm7128slc84, ОЗУ
KM681000BLP-7L (128к*8), ПЗУ SST39SF020 (256к*8, но разумеется, из нее работает только нижних 8К) - у нее вход /WR кинул на +5в и к CPLD не подключал, т.к это не то ПЗУ, которое можно прошивать внутри платы.
Плюс ардуиновский модуль microSD-карты с 5-вольтовым питанием и буферами на *hc125 - но его пока даже не подключил, т к не могу разобраться со страницами памяти и запуском esxdos.
Исходники от Mario Prato пересобрались под мою CPLD без вопросов, распределил ноги в соответствии с монтажом и прошил.
В Ленине линия /RDROM, идущая к /OE штатного ПЗУ разорвана резистором 680 ом, вход /OE микросхемы вынесен на ZXBUS для подключения сигнала /romoe1 с divmmc (отключает внутреннее ПЗУ). /NMI отделен от всех прочих неиспользуемых, подтянут к +5в и выведен на разъем ZXBUS. Остальные линии вроде как не требуют внимания.
Прошил esxdos 0.8.5, включил. Но не тут-то было - стартуем с красивыми цветными узорами и на этом все.
Ожидалось увидеть хотя бы старт esxdos и ошибку поиска карт памяти, а дальше бы я занимался уже дебагом чтения SD. Но не тут-то было.
Вот варианты цветных узоров при старте - а вдруг будет информативным ? )
738637386273864
Пытался прошить Fatware - тоже при старте не увидел ничего здравого.
Если прошиваю в ПЗУ тест памяти (например Хахонова) - он стартует и прекрасно отрабатывает весь. То есть ПЗУ мапится при включении правильно.
Без ПЗУ в DivMMC отображается матрас - тоже все правильно.
Если снять перемычку EPROM на DIVMMC (режим перепрошивки для обновления), то стартует бейсик48 (или меню128 - у меня управление страницей ПЗУ128 отключаемое), откуда можно запустить загрузку с ленты и загрузить тестер ОЗУ DIVRAMKA.TAP (взял у VELESOFTа). Так вот тест 16 страниц ОЗУ (в сумме 128К) проходит успешно. То есть ОЗУ тоже мапится правильно.
73865
Вопрос к тем, кто встраивал DivMMC в свои проекты на CPLD/FPGA - были ли какие-то особенности с запуском ESXDOS ? Что-то приходилось допиливать относительно версии 1.0 у Prato ?
Дешифрация портов и возможные конфликты на ленине уже обсуждались выше, у меня все подозреваемые (вроде бы) были устранены.
Что еще может мешать запуску ESXDOS ?
valerium
09.11.2020, 17:47
Залезь еще в исходники эмулятора Тцезаря. Там по идее еще и UnoDOS3 должен быть как бы.
Покопался я тут в дизассмеблированном esxdos 0.8.5 и 0.8.8 с целью изучить набор используемых там портов, чтоб понять, где в русской железке может быть конфликт.
Потом скачал исходники этого самого "UnoDosTres". И первое время пытался найти отличия... А ощущения такие, что сорсы UnoDOS3 - это и есть дизассемблированный ESXDOS с автонумерованными метками, расписанными константами [системные вызовы, порты в/в] и вяло расписанными комментариями по тем кускам кода, которые оказались понятны - то есть комменты не от авторов кода.
https://github.com/cheveron/unodos-wolf
Сборка UNODOS3 выполняется кусками в разные бинарники, головной из которых длиной 8192 шьется в ПЗУ, а хвосты с адресов $2000 и $3000 склеиваются в один файл .SYS, который потом кладется на карту и грузится при старте системы в какую-то из страниц ОЗУ.
И поэтому вопрос про ESXDOS (да, я до сих пор его живьем не видел !) - может и он грузится так же ?
Если да, то у него не утилиты на карте лежат, а часть его тела ? Он вообще что-либо без карты отображать должен ?
И известно ли кому-нибудь, что было сделано с пентагоном, чтобы заставить вот это работать ?
https://www.youtube.com/watch?v=wyw-HhmTMOc
Он вообще что-либо без карты отображать должен ?
да, без карты есть вывод какой-то информации.
что было сделано с пентагоном, чтобы заставить вот это работать ?
кажется демонтирован один диод (для отключения перехвата trdos BetaDisck`ом)
valerium
09.11.2020, 20:23
кажется демонтирован один диод (для отключения перехвата trdos BetaDisck`ом)
Ну то есть просто отключена дешифрация адресного диапазона и триггер трдоса не работает.
В остальном у пентагона2014 выбор всех устройств ввода-вывода аналогичен все русским спекам (т е ни о какой дешифрации по всей шине адреса речи не идет).
В чем тогда заключается сложность запустить это на наших клонах вроде ленина ? Чего им не хватает ?
да, без карты есть вывод какой-то информации.
кажется демонтирован один диод (для отключения перехвата trdos BetaDisck`ом)
Да https://zx-pk.ru/threads/22237-voprosy-po-divide-5-7c.html?p=995859&viewfull=1#post995859
Он вообще что-либо без карты отображать должен ?
Без SD карт отображается Splash, затем попытка найти и примонтировать SD карты и ошибка загрузки файла ESXDOS.SYS. Т.е. как на картинке ниже, которую я "нарисовал" взяв за основу нормальную загрузку DivMMC (лень доставать фотоаппарат, легче нарисовать).
https://pic.maxiol.com/thumbs2/1604946314.3108238545.esxdosload02s.jpg (https://pic.maxiol.com/?v=1604946314.3108238545.esxdosload02s.jpg&dp=2)
- - - Добавлено - - -
кажется демонтирован один диод
На форуме есть один человек, который все это проделывал, но DivMMC так и не заработал. Не знаю как сейчас но, во всяком случае, в момент нашей последней беседы не заработал.
Картинку "нарисовал" на основе нормальной загрузки DivMMC.
https://pic.maxiol.com/thumbs2/1604946314.3108238545.esxdosload02s.jpg (https://pic.maxiol.com/?v=1604946314.3108238545.esxdosload02s.jpg&dp=2)
- - - Добавлено - - -
На форуме есть один человек, который все это проделывал, но DivMMC так и не заработал. Не знаю как сейчас но, во всяком случае, в момент нашей последней беседы не заработал.
Да, такую картинку получил, один раз...
И всё опять виснет:( Много читал, и Z80 надо хороший
И ПЗУ фирменное... Куча неСовместимостей:((
valerium
10.11.2020, 07:18
Да, такую картинку получил, один раз...
И всё опять виснет:( Много читал, и Z80 надо хороший
И ПЗУ фирменное... Куча неСовместимостей:((
Под "хорошим Z80" подразумевается наличие действующего /M1 и нормальный запуск с перегруженной другими входами линией CLK ?
Запускаемся на штатной частоте 3,5мгц - тут все без бубна должно быть..
А на фотографиях того, что реально работает, вижу китайские перешлифованные "Zilog-и", которых уже и я несколько штук пробовал. Впрочем, у них у всех был живой /M1 и если запускались, то по остальному их поведению никаких отличий от NEC и русского 1858вм1 найти не сумел...
Чем отличается фирменное ПЗУ - имеется в виду прошивка или микросхема по быстродействию там другая ?
Пока из подтверждений работы divmmc на русских машинах я видел только этот пентагон в ролике выше - и речь, конечно, не про то, как в нем выключить BDI.
Накачал сейчас схемы разных испанских клонов на мелкоте, где есть divmmc, надо будет на досуге в них поглазеть, поискать отличия.
Неглубоко подумав могу только предположить элементную базу - например то, что наша 555/1533-я серия имеет какие-то резко иные задержки распространения и из-за этого фронты каких-нибудь сигналов выборки приходят "невовремя" для divmmc. Например, второе ПЗУ уже выбрано, а первое еще не успело отключиться (сам понимаю, что этот пример плохой, т к внутреннее ПЗУ отключается без участия внутренних цепей выборки).
Может еще какие идеи есть ?
Под "хорошим Z80" подразумевается наличие действующего /M1 и нормальный запуск с перегруженной другими входами линией CLK ?
Запускаемся на штатной частоте 3,5мгц - тут все без бубна должно быть..
А на фотографиях того, что реально работает, вижу китайские перешлифованные "Zilog-и", которых уже и я несколько штук пробовал. Впрочем, у них у всех был живой /M1 и если запускались, то по остальному их поведению никаких отличий от NEC и русского 1858вм1 найти не сумел...
Чем отличается фирменное ПЗУ - имеется в виду прошивка или микросхема по быстродействию там другая ?
Пока из подтверждений работы divmmc на русских машинах я видел только этот пентагон в ролике выше - и речь, конечно, не про то, как в нем выключить BDI.
В телеграмму нашёл людей: Пишут, что U880 как
у меня, работать не будет... А в ПЗУ точки входа могут
быть изменены:( Надо пересчитывать коды...
valerium
12.11.2020, 10:18
В телеграмму нашёл людей: Пишут, что U880 как
у меня, работать не будет... А в ПЗУ точки входа могут
быть изменены:( Надо пересчитывать коды...
Про процессор - это странно, т к проблема коснулась бы всех клонов, ныне собираемых - плохие процессоры бы все были упомянуты в faq-ах и за столько лет divide/mmc мы бы про это услышали.
Про ПЗУ.. ну точек входа там всего несколько, некоторые неизменяемые (reset, im1, и т п), остальные можно проверить. Меня больше интересует 'зона выхода' - это адреса 1ffa-1fff, там должны быть nop-ы и ret, переход туда используется для возврата из пзушного кода esxdos в родное пзу. Их посмотрю на своих прошивках вечером.
Но ведь штатное ПЗУ 1982 года и не особо патчили, разве его сильно много версий ? А еще проще найти то пзу 48к, с которым это работает там, где работает, и прошить именно его.
Но есть одно маленькое НО: все новые арлекины и прочие клоны с divmmc ведь не имеют требований прошивать строго фирменное ПЗУ, на них работает все подряд. Или про это не так ?
Вот тема (https://spectrumcomputing.co.uk/forums/viewtopic.php?t=1152) про недосовместимость 128го ПЗУ с div* и его особенности. Но про 48к там ничего нет.
valerium
12.11.2020, 22:32
А вот то, что выложено как "исходники ESXDOS 0.8.5", правда не авторские, а те же самые дизассемблированные, которые именуются "UnoDOS3" здесь (https://github.com/cheveron/unodos-wolf), только без правок в названиях и копирайтах. И с теми же самыми комментариями.
Выложено камрадом Antonio Villena, однако внутри он упоминает, что авторство не его и автор-дизассемблер желает оставаться в тени.
https://sourceforge.net/p/emuscriptoria/code/HEAD/tree/esxdos
Что касается хороших и плохих процессоров
В том же (https://spectrumcomputing.co.uk/forums/viewtopic.php?t=1152) форуме упоминается то, что divmmc+esxdos работает нормально на всех CMOS, и то, что оригинальные машины имели в основном (или все) процессоры NMOS. Только какие выводы делать - непонятно, ибо на оригиналах с NMOS, как мы знаем, все работает.
Не удержался и тестом, взятым из вышеупомянутого (https://spectrumcomputing.co.uk/forums/viewtopic.php?p=16649#p16649) форума протестил имеющиеся дома процессоры на предмет CMOS/NMOS.
Это были: 1858ВМ1 в черном пластике, NEC (не запомнил всю маркировку) и 4 шт китайских "бритых" Zilog-а Z84С0020PEC (шлифованных) с алика.
Тест выглядит вот так,
di
L001 ld bc,00feh
out (c),f
in a,(c)
jr L001
Суть мне его непонятна - читаем "нечто" в аккумулятор из порта бордюра/магнитофона и пишем в тот же порт регистр флагов (в следующей итерации). Содержимое флагов почему-то будет разным в зависимости от считанного (?) на NMOS и CMOS процессорах.
Во всех случах кроме одного тест показал черный бордюр (NMOS), один китаец показал белый бордюр (CMOS) - внешне его корпус ничем не отличался от собратьев.
/M1 посмотрел просто тестером - при работе ни у одного из них не болтается в статичном состоянии и взлетает в единицу, близкую в +5в, если удерживать reset (осциллографом лезть поленился).
Ложка дегтя: кроме разного бордюра больше никакой разницы я не узрел, esxdos не работает совершенно одинаково на всем, что у меня есть, в т.ч на этом "как бы CMOS".
Что касается хороших и плохих процессоров
В том же форуме упоминается то, что divmmc+esxdos работает нормально на всех CMOS...
Хорошие и плохие, скорее всего, имеется ввиду нагрузочная способность. И, по-моему, она выше именно у CMOS.
оригинальные машины имели в основном (или все) процессоры NMOS. Только какие выводы делать - непонятно, ибо на оригиналах с NMOS, как мы знаем, все работает.
Потому что у фирменных шины не такие разветвленные как у наших клонов соответственно и нагрузка на шины CPU меньше.
P.S. У меня на Harlequin один или даже пара CPU, уже не помню, работают менее устойчиво и я предположил, что это именно из-за нагрузки на шины CPU (как известно Harlequin как и наши клоны сделан на рассыпухе). И эта неустойчивость в работе чаще переходящая в полную неработоспособность, причем уже на всех у меня имеющихся CPU, проявляется еще больше при использовании расширителя ZX шины (ZX Backplane).
Тест выглядит вот так,
...
out (c),f
...
Суть мне его непонятна - читаем "нечто" в аккумулятор из порта бордюра/магнитофона и пишем в тот же порт регистр флагов (в следующей итерации). Содержимое флагов почему-то будет разным в зависимости от считанного (?) на NMOS и CMOS процессорах.
у тебя дизасм неправильный,
#ED71 ; это недокументированная команда out (c),0 !!!
на `новых` процах она пишет в порт #FF
...............
в коде divIDE/MMC именно эта команда не используется.
valerium
14.11.2020, 22:34
Эксперимент номер N (фиг его упомнит, какой). Все тот же Ленин и ремейк DivMMC на EPM7128.
Скачал на https://velesoft.speccy.cz/zx/divide/divide-soft.htm тестовую прошивку TESTROM3 (https://velesoft.speccy.cz/zx/divide/software/testrom3.zip) в исполнении для ПЗУ DivIDE, размер 8К (живого кода там много меньше, конечно). Она прошивается в ПЗУ платы (в моем случае DivMMC, но я шил программатором) и позволяет по выбранной клавише запускать тесты памяти, а также tape tester (wtf? по факту он просто экран циклически красит-стирает), но самое ценное - по клавише 1 он должен переходить в штатное ПЗУ, коим я пока сделал basic48k - это живой пример map/unmap ROM, который я хотел понять и протеститить.
Ценность заключается в том, что возврат выполняется через перехватываемую логикой DivMMC "exit area" в адресах 1ff8-1fff, ниже опишу, как именно, но у меня этого НЕ ПРОИСХОДИТ. Сигнал ROMCS остается в единице, все снова возвращается тестовое ПЗУ в ожидание клавиши. Хотя вроде бы все условия выполняются.
Теперь для тех, кто любит головоломки, кусок этого самого теста:
(остальных прошу извинить, писанины много)
;опрос клавиатуры
05b8 dbfe in a,(0feh)
05ba 2f cpl
05bb e61f and 1fh
05bd b3 or e
05be cb67 bit 4,a
05c0 c2ec05 jp nz,05ech
05c3 cb5f bit 3,a
05c5 c22006 jp nz,0620h
05c8 cb57 bit 2,a
05ca c25f06 jp nz,065fh
05cd cb4f bit 1,a
05cf c2a906 jp nz,06a9h
05d2 cb47 bit 0,a ;бит D0
05d4 c22f07 jp nz,072fh ;если он не 0, то нажата клавиша 1 (или Q,A,CS,0,P,Enter,Space) - переходим на возврат в штатное ПЗУ
...
072f 210040 ld hl,4000h ;готовим параметры дл LDIR, чтоб затереть память (зачем ее затирать ?)
0732 110140 ld de,4001h
0735 3e04 ld a,04h
0737 01fd1f ld bc,1ffdh ;пишем в порт конфигурации +3 страницу ПЗУ=1
073a ed79 out (c),a
073c 3e10 ld a,10h
073e 01fd7f ld bc,7ffdh ; и порт конфигурации 128к страницу ОЗУ=0, экран 0, ПЗУ=1
0741 ed79 out (c),a
0743 01ffbf ld bc,0bfffh
0746 75 ld (hl),l
0747 edb0 ldir ;выполняем-таки зачистку всех 48к ОЗУ
0749 f3 di ;запрещаем прерывания, чтоб не было перехода по IM1
074a 210100 ld hl,0001h ;подготавливаем в HL адрес перехода = 0001h
074d c3f91f jp 1ff9h ;переходим в exit area
...
1ff8 c9 ret
1ff9 e9 jp (hl) ;вот сюда мы переходим, отсюда читается 1-байтный опкод и сразу должен отключиться маппинг ПЗУ DivMMC
1ffa c7 rst 00h ;а поскольку переход выполняется не в адрес автоматического маппирования 0000, а в 0001, то это не ловится DivMMC
1ffb c7 rst 00h ;и должен выполняться штатный ROM48k
1ffc c7 rst 00h
1ffd c7 rst 00h
1ffe c7 rst 00h
1fff c7 rst 00h
Теперь смотрим, что должно произойти с ROMCS (исходник CPLD Mario Prato, на котором все и основано)
Только в причинно-следственном порядке, а не так, как положено в VHDL:
process(divideio,poweron)
begin
if poweron ='0' then -- по включению
bank <= "000000";
mapram <= '0'; -- сбрасываются в 0 conmem и mapram
conmem <= '0';
elsif rising_edge(divideio) then
bank(5 downto 0) <= D(5 downto 0);
mapram <= D(6) or mapram;
conmem <= D(7);
end if;
end process;
-- условие входа в exit area
map1F00 <= '0' when A(15 downto 3) = "0001111111111" else '1'; -- 1ff8 - 1fff
-- линия ROMCS формируется по выражению ниже, я подписал значения подусловий для ситуации, если перемычка EPROM установлена (штатный режим, eprom=0)
romcs <= '1' when ((automap and not eprom) or (automap and mapram) or conmem )='1' else '0' ;
-- ? =1 =0 =0
-- после сброса ничего не менялось в регистре конфигурации DivMMC:
-- conmem=0, mapram=0 и перемычка стоит (not eprom)=0, в итоге все зависит от automap
-- а automap формируется вот тут:
process(mreq)
begin
if falling_edge(mreq) then
if m1='0' then -- *****
-- условие маппирования памяти mapcond складывается из условий
-- входа в адрес перехвата mapterm (0000h, 0008h, 0038h и т д) в нашем случаен =0 и когда идем в exit area, и когда переходим в 0001h
-- входа в зону адресов триггера TRDOS (в нашем случае =0)
-- входа в exit area 1fxx и своего прошлого состояние
-- у нас при входе в exit area mapcond сбросится, т к в этой зоне map1F00 будет =0
mapcond <= mapterm or map3DXX or (mapcond and map1F00);
-- вместе с ним должен сброситься в 0 и automap, т.е. условие зоны TRDOS =0
automap <= mapcond or map3DXX;
-- а вместе с ним должен обнулиться и ROMCS (смю выше), т к automap был единственным меняющимся условием
end if;
end if;
end process;
То есть все условия для сброса romcs в 0 вроде бы есть, а он не сбрасывается.
А меняться составляющий его automap должен по спаду mreq и m1=0 (выше отмечено *****)
То, что /MREQ работает корректно, я не сомневаюсь.
Тогда что, все пакостит /M1 ?????
Сигнал на линии /M1 процессора вроде есть. Тестил на NEC D780C, 1858ВМ1 и китайских Zilog-ах.
У меня есть только аналоговый осциллограф и нет анализатора, поэтому для проверки запустил вечный цикл вида
L0001 JR L0001
и посмотрел 27-ю ногу процессора
7392873929
Амплитуда около 3в, период где-то 3,5 мкс, длительность 0,6 мкс. Это 1858ВМ1.
Может ли это быть недостаточно живым поведением /M1 ?
И если кто-то дочитал это до конца (или может разбирал работу DivMMC/DivIDE раньше) - респект уже за это ))) - ткните носом, куда копать дальше?
USERHOME
14.11.2020, 23:45
тестовую прошивку TESTROM3 в исполнении для ПЗУ DivIDE, размер 8К
Файл testrom3_8kb_for_divide.rom
Я только только изучаю, но пришла мысль
заменить в прошивке второй (00 01 02 .. или 1,2,3 третий) байт с #F9 на #FA
00.C3.F9.1F.FF.FF
00.C3.FA.1F.FF.FF.....
Возможно я вообще ничего не понимаю, но мысль пришла такая (возможно я дико ошибаюсь)
- - - Добавлено - - -
0743 01ffbf ld bc,0bfffh
0746 75 ld (hl),l
0747 edb0 ldir ;выполняем-таки зачистку всех 48к ОЗУ
Вот этот момент не очень понятен
где же храниться , на какой адрес он указывает рег. SP ?
* ну это просто мысли вслух
valerium
14.11.2020, 23:48
Файл testrom3_8kb_for_divide.rom
байт с #F9 на #FA
В смысле сменить точку перехода в exit area на 1FFA, про это речь ?
074a 210100 ld hl,0001h ;подготавливаем в HL адрес перехода = 0001h
074d c3f91f jp 1ff9h ;переходим в exit area
...
1ff8 c9 ret
1ff9 e9 jp (hl) ;вот сюда мы переходим, отсюда читается 1-байтный опкод и сразу должен отключиться маппинг ПЗУ DivMMC
>> 1ffa c7 rst 00h ;а поскольку переход выполняется не в адрес автоматического маппирования 0000, а в 0001, то это не ловится DivMMC
1ffb c7 rst 00h ;и должен выполняться штатный ROM48k
1ffc c7 rst 00h
1ffd c7 rst 00h
1ffe c7 rst 00h
1fff c7 rst 00h
Тогда при переходе по этому адресу по идее отключится ПЗУ DivMMC, но там выполнится RST 0 и это приведет к переходу по адресу 0000, на который опять сработает ловушка для automap и внешнее ПЗУ тут же включится обратно.
Суть хитрости, сделанной здесь - в том, чтоб зайти в штатное ПЗУ не с 0000, а с 0001.
Собственно, переход-то в этой тестовой прошивке написан правильно (иначе б не был выпущен релиз), вопрос в том, где у меня железо не соответствует ))
Вот этот момент не очень понятен
где же храниться , на какой адрес он указывает рег. SP ?
0743 01ffbf ld bc,0bfffh
0746 75 ld (hl),l
0747 edb0 ldir ;выполняем-таки зачистку всех 48к ОЗУ
А здесь нам SP уже не важен. К этому моменту нет ни одного незавершенного вызова, из которого надо RET-ом вернуться по адресу в стеке. Дальше выполняется LDIR (и ему не нужен стек), а потом просто JP. Поэтому ни стек, ни указатель стека уже не будут использоваться до инициализации штатного ROM.
USERHOME
15.11.2020, 00:14
но там выполнится RST 0
Попробуйте туда записать
NOP
JP 0001 (вместо RST)
- - - Добавлено - - -
074a 210100 ld hl,0001h ;подготавливаем в HL адрес перехода = 0001h
074d c3f91f jp 1ff9h ;переходим в exit area
...
1ff8 c9 ret
Либо PUSH HL
и RET (но это испортит ячейки памяти, но для теста можно)
- - - Добавлено - - -
где у меня железо не соответствует
Какой нибудь сигнал WAIT для Z80 ....
valerium
15.11.2020, 00:15
Попробуйте туда записать
NOP
JP 0001 (вместо RST)
Это не пройдет. Суть этого перехода в выполнении однобайтной команды из области выхода (exit area).
jp (hl) - однобайтный, операндов у опкода нету, поэтому как только он считывается, ПЗУ переключается и процессор независимо от содержимого памяти отрабатывает jp - ставит IP равным HL, где у нас заготовлен адрес перехода 0001.
Если так сделать, то как только будет из памяти по адресу 1ffa выбран NOP, должна смениться страница ПЗУ и следующая команда будет выбираться по адресу 1ffb уже из штатного ПЗУ. Да, интересно проверить, произойдет ли это, но мы это вряд ли успеем увидеть, т к непонтно, куда нас там в штатном ROM48 занесет
Какой нибудь сигнал WAIT для Z80 ....
В Ленине WAIT-ом удлиняются обращения к ОЗУ выше адреса 4000h, а при работе с памятью DivMMC в нижних адресах и всеми адресами перехвата триггер D9.1 не будет защелкиваться (A14=A15=0). Так что по идее тоже не должно никак влиять.
Но вот тоже подозреваю, что мешает побочный эффект в схемотехнических решениях Ленина (задержка распространения какого-то промежуточного сигнала, например). Периодически и возвращаюсь к этому поиску.
USERHOME
15.11.2020, 01:05
В Ленине WAIT-ом удлиняются обращения к ОЗУ выше адреса 4000h
Попробуйте установить принудительно SP меньше #4000 и проверить
valerium
15.11.2020, 12:44
Попробуйте установить принудительно SP меньше #4000 и проверить
Не доходит до меня никак.
Перенести стек ниже 4000h (и выше 1fff, там в это время страница озу DivMMC), засунуть на вершину стека адрес возврата 0001, потом выполнить переход на 1ff8, где у нас ret ? Так сразу после выборки из памяти этого ret должна переключиться страница ОЗУ divmmc на штатное ПЗУ. И если все отработает правильно, то sp будет смотреть куда-то в ПЗУ rom48, а что вынется из стека, как адрес перехода - неизвестно (какие-то 2 байта штатного ПЗУ). Ну только если оно зависнет или сбросится с другими спецэффектами.. допустим, а какой из этого вывод?
Несколько раз прочитал и тоже не пойму, почему это one instruction delay. Может это плохой перевод с испанского/польского/еще какого-то неведомого языка ?
действительно похоже на перевод.
вот ещё один вариант
"Memory mapping could be invoked manually (by setting CONMEM), or automatically
(CPU has fetched opcode form an entry-point). Automatic mapping is active
only if EPROM/EEPROM is present (jumper EPROM is closed) or bit MAPRAM is set.
Automatic mapping occurs at the begining of refresh cycle after fetching
opcodes (M1 cycle) from 0000h, 0008h, 0038h, 0066h, 04c6h and 0562h. It's
also mapped instantly (100ns after /MREQ of that fetch is falling down) after
executing opcode from area 3d00..3dffh. Memory is automatically disconnected in
refresh cycle of the instruction fetch from so called off-area, which is
1ff8-1fffh.
The one-instruction delay could be used to distinguish between nested calls to
the same place. For such trick you will place different instruction at the
entrypoint address, than is in original ZX ROM. So the first call wil execute
original instruction, but subsequent one will jump to another code, because
divIDE memory was already mapped, with its changed opcode. It's great for 100%
avoidance of nested NMI, which cannot be implemented using pure combinatorial
hardware workaround. It allows divIDE to use INT for timing, when divIDE code is
performed (external calls will map later divIDE off and continue in #38h
original service, but nested INTs can jump to another work, and mapping off is
of course undesirable there)."
небольшие отличия от текста в посту№68 есть
USERHOME
15.11.2020, 20:14
то sp будет смотреть куда-то в ПЗУ rom48
ROM48 установит стек в нужное положение, если запретить прерывание (как раз DI в 0000 адресе) и переход будет на адрес 0001
valerium
15.11.2020, 22:40
ROM48 установит стек в нужное положение, если запретить прерывание (как раз DI в 0000 адресе) и переход будет на адрес 0001
DI никакого отношения к стеку не имеет.
ROM48 заведет стек в нужном ему положении ПОСЛЕ того, как начнет исполняться с адреса 0001. А чтобы он вообще начал это делать, надо ДО этого осуществить переход по этому адресу, если это делать через стек в адресах 2000-4000, то в том месте, куда мы записали адрес перехода 0001 сразу после выборки из памяти опкода ret (но еще до собственно перехода) окажется совсем другая память, это будет само ПЗУ48. И вместо адреса 0001 у нас ддя перехода из стека вынется какой-то мусор и по нему произойдет переход вместо 0001. Короче, сломается все.
USERHOME
16.11.2020, 02:02
DI никакого отношения к стеку не имеет.
Я про это не говорил
Есть DI , есть HL,1, есть переход на 0001
(DI находится по 0000 в ROM48, 2 раза DI не надо конечно же)
Если Вы сделали ранее (а в ROM IDE есть) DI то смело можно переходить на 0001, вот о чём речь
и попробовать изменить пару байт в ROM IDE тоже никто не мешает, а заодно и проверить результат
1. SP (где-то вместо LDIR)
2. NOP (дополнительный холостой цикл) и JP (HL)
3. SP на RAM и PUSH HL (без зануления памяти LDIR) и RET
4. censored Я бы ещё и LD A,1 и OUT (254), A (Шину адреса "пошевелить" для теста, перед JP (HL) ...)
valerium
17.11.2020, 23:13
... а заодно и проверить результат
1. SP (где-то вместо LDIR)
2. NOP (дополнительный холостой цикл) и JP (HL)
3. SP на RAM и PUSH HL (без зануления памяти LDIR) и RET
4. censored Я бы ещё и LD A,1 и OUT (254), A (Шину адреса "пошевелить" для теста, перед JP (HL) ...)
Что-то не сумел я понять, что при этом должно получиться ((
Сам тест не использует ОЗУ и не использует стек для своей работы. Для его работы менять указатель стека бессмысленно, а при переходе в ROM48 он все равно будет установлен туда, куда его инитит ROM48. Для перехода к адресу 0001 использовать стек тоже нет смысла, т к для адресов ниже 4000h надо исхитряться с подстановкой в адреса импровизированного стека в ROM48 нужной константы, а адрес перехода можно передать в регистре HL и переход выполнить однобайтной операцией jp (HL).
Я пока добился следующего: раз прерывания запрещены, то я HALTом попробовал сделать импровизированные брейкпойнты - ставил HALT по адресу 0001 в ROM48 при неизменном тесте testrom3 (ничего не изменилось - страница ROM48 не включалась и проц на эту инструкцию не попадал), а также в exit area в ПЗУ divmmc по адресу 1FFA, куда мы попадаем по нажатию клавиши 1 - по идее после чтения этого опкода должно измениться значение automap на 0 и должен переключиться romcs из 1 в 0 для включения штатного ПЗУ. Эта точка останова работала, но romcs остается единичным.
Либо все-таки /M1 не работает как надо, либо криво отрабатывает условие формирования romcs. Пока копаюсь дальше.
valerium
19.11.2020, 23:07
Добился.
Был досадный косяк в (недо)пайке линии A11 на ПЛИС, при том, что всей на памяти она была заведена и каким-то чудом даже тесты ОЗУ проходили.
Но из-за нее не отрабатывало условие для exit area:
map1F00 <= '0' when A(15 downto 3) = "0001111111111" else '1';
-- ^
А все остальные идеи с /M1 оказались глупостями.
Ну зато научился и опробовал способ все это дебажить при помощи доп.индикации и тестовой кнопки, добавляя описание обработки нужных линий (vhdl).
Сейчас управление страницами памяти работает нормально - входы в ПЗУ divmmc через зоны automap и выходы через exit area, причем даже на Ленине.
Помимо этого мне удалось добыть вторую 7128 и запустить одновременно Sizif-128 - припаял zxbus и подключался в т.ч. к нему, теперь будет, на чем сравнить.
Разумеется, нижний ПЗУшный кусок esxdos при старте после сплэша не находит карту с хвостом esxdos (файл esxdos.sys), т.к. карта еще пока не подключена - это вопрос грядущих выходных.
valerium
20.11.2020, 23:38
Запустил, однако.
На Ленине. Причем только на Ленине, а на Sizif128, где вчера я видел сплэш ESXDOS, почему-то нет даже его - возможно из-за того, что версию 0.8.5 сменил на 0.8.8.
Тактовую подавал напрямую с 6 ноги процессора прямо на вход ПЛИС без триггеров шмидта и других формирователей, прошивка ПЛИС сейчас от Mario Prato без каких-либо изменений, только пересобранная под EPM7128.
739897398773988
Попробую потом еще поиграть с автономным генератором, вроде как такое возможно.
Схемы толком нету, надо будет ее отрисовать по-человечьи - если вдруг кто заинтересуется или захочет довести до ума.
valerium
22.11.2020, 03:42
... Причем только на Ленине, а на Sizif128, где вчера я видел сплэш ESXDOS, почему-то нет даже его - возможно из-за того, что версию 0.8.5 сменил на 0.8.8.
Все было совсем не так. Версия ESXDOS не имела значения, а повлияло то, что кроме него я свою дебаговую прошивку CPLD сменил на "некопанную" первоначальную.
Сейчас нормально пускается и на ленине, и на sizif128, и даже на втором ленине (который Веста).
Поэтому пришлось в первоначальную прошивку CPLD внести одну незначительную, как я вначале думал, правку.
Это проверка уровня сброса (/RESET) и при его активности - обнуление конфигурационного регистра divmmc.
...
process(divideio,poweron)
begin
-- if poweron ='0' then -- исходно было вот так
if poweron ='0' or reset = '0' then -- тут добавил условие проверки уровня reset
bank <= "000000";
mapram <= '0';
conmem <= '0';
elsif rising_edge(divideio) then
bank(5 downto 0) <= D(5 downto 0);
mapram <= D(6) or mapram;
conmem <= D(7);
end if;
end process;
...
Что это и зачем это.
У DivIDE, а значит и у DivMMC есть бит mapram в конфигурационном регистре (порт E3h), он отвечает за маппирование третьей страницы ОЗУ DivMMC в качестве подмены его ПЗУ. При включении питания, пока poweron активен (кондер заряжается), все биты конфигурации обнуляются и включается страница ПЗУ, где у нас esxdos, например. Но можно в третью страницу ОЗУ загрузить нечто альтернативное и использовать это вместо ПЗУ - но эту настройку (mapram=1) изменить нельзя до выключения, т.к. сброс mapram в 0 возможен только по активности poweron. Сделано видимо для того, чтобы подмена ПЗУ (друга версия esxdos, например), давала стартовать себя при нажатии сброса и не слетала обратно на ПЗУ.
Теперь пытаюсь разобраться, почему в некоторых случаях это криво работает.
По какой-то причине не отрабатывает условие сброса по poweron=0, а когда стартует процессор, у нас в регистре конфигурации находится мусор и включена непонятна какая страница ПЗУ/ОЗУ. Спек рисует зюки и не стартует.
Импульс /RESET в спеке заметно длиннее poweron в DivMMC (формируются RC-цепочками) - при примерно одинаковом R у нас C отличается на 3 порядка (10 нф в DivMMC и ~10мкф в обычных схемах сброса спека). Возможно, что нужно было удлинить poweron.
В исправленном варианте прошивки CPLD сброс регистра конфигурации DivMMC сбрасывается при активном /RESET и к старту DivMMC включается нужная страница ПЗУ. Теперь при этом нельзя залить ОЗУ DivMMC подмененным кодом и поставить его вместо ПЗУ на сброс - но я не могу придумать, зачем мне такое было бы нужно применить. Поэтому пока потестирую этот костыль.
Не исключено что причина распространенного незапуска divmmc на русских клонах именно в этом.
Я потом попробую поправить прошивку в xilinx-версии платы, которую раньше так и не смог запустить, не исключено, что и она заработает.
Еще один эксперимент - вместо процессорного CLK на CPLD подавал 4МГц с отдельного генератора. DivMMC работает, карта читается. Так что в той статье на Tynemouth (этот (https://zx-pk.ru/threads/25361-divmmc.html?p=1080229&viewfull=1#post1080229) пост, правда ссылка там, кажется, уже неактуальна) была правда - можно использовать отдельный генератор на 3,9-4,2Мгц.
Так что для работы divmmc вместо всех доделок по коррекции штатного CLK можно просто собрать генератор на трех TTL-инверторах. На 4,0Мгц проверил.
valerium
24.11.2020, 00:08
Дошли руки до схемы, подсобрал все в архив с исходниками.
74047
Добрый день. Рад, что у вас все получилось. Я тоже решил вернуться к запуску DivMMC (nanoSD от Павла на Xilinx) на своем ленине-2. Подправил код, как вы рекомендовали (добавил условие по reset и добавил этот сигнал в процесс в список чувствительности вместе с сигналами divideio,poweron). Ну и .... никаких изменений, как был матрас или мусор, так и остался. У меня вопрос, будет ли работать DivMMC без сигнала CLK? И можно ли вместо ПЗУ с Exdos поставить, к примеру тест 128 Ханонова? Мне как то нужно проверить, что DivMMC стартует. И если нет, на что нужно обратить внимание.
valerium
27.11.2020, 14:07
Добрый день. Рад, что у вас все получилось. Я тоже решил вернуться к запуску DivMMC (nanoSD от Павла на Xilinx) на своем ленине-2. Подправил код, как вы рекомендовали (добавил условие по reset и добавил этот сигнал в процесс в список чувствительности вместе с сигналами divideio,poweron). Ну и .... никаких изменений, как был матрас или мусор, так и остался. У меня вопрос, будет ли работать DivMMC без сигнала CLK? И можно ли вместо ПЗУ с Exdos поставить, к примеру тест 128 Ханонова?
Я тоже пытался это проделать на той плате sdnano, но тоже мимо. Собственно, у меня там явно какой-то косяк с cpld, т к при снятой перемычке eprom никакая память divmmc не должна мапиться и должно включаться родное пзу, чего не происходит. Сама cpld видится и шьется, пайку уже всю перепроверил, вплоть до того, что прозванивал все линии от ног cpld до разъема и памяти Буду пытаться снять cpld, если сильно пострадает плата (а белую маску, плавно переходящую в горело-коричневую от нагрева феном я видеть не хотел бы), то может попробую собрать еще экземпляр.
Тест Хахонова прошить можно и я это делал (где-то выше в переписке мелькало). Но если там матрас, то это значит, что просто не выбрано никакое пзу и хоть с каким его содержимым будет матрас.
Сигнал clk нужен для тактирования чтения карты памяти. А маппинг озу и пзу в нем не нуждается никак. Над этой частью схемы можно пока голову не ломать.
У тебя тоже плата с двойным вариантом установки пзу - dip и sop ? может в ней какая ошибка есть - перемычка между переходными отверстиями или еще что ? Просто то, что люди собирали и работало, это было на более ранней ревизии платы (где был перекрест входа и выхода sd-карты)
Я тоже пытался это проделать на той плате sdnano, но тоже мимо. Собственно, у меня там явно какой-то косяк с cpld, т к при снятой перемычке eprom никакая память divmmc не должна мапиться и должно включаться родное пзу, чего не происходит. Сама cpld видится и шьется, пайку уже всю перепроверил, вплоть до того, что прозванивал все линии от ног cpld до разъема и памяти Буду пытаться снять cpld, если сильно пострадает плата (а белую маску, плавно переходящую в горело-коричневую от нагрева феном я видеть не хотел бы), то может попробую собрать еще экземпляр.
Тест Хахонова прошить можно и я это делал (где-то выше в переписке мелькало). Но если там матрас, то это значит, что просто не выбрано никакое пзу и хоть с каким его содержимым будет матрас.
Сигнал clk нужен для тактирования чтения карты памяти. А маппинг озу и пзу в нем не нуждается никак. Над этой частью схемы можно пока голову не ломать.
У тебя тоже плата с двойным вариантом установки пзу - dip и sop ? может в ней какая ошибка есть - перемычка между переходными отверстиями или еще что ? Просто то, что люди собирали и работало, это было на более ранней ревизии платы (где был перекрест входа и выхода sd-карты)
Да, плата с белой маской на два варианта ПЗУ. Я на ней менял CPLD ничего не изменилось. При включении загорается ненадолго светодиод слева (который рядом с кнопкой reset), потом тухнет, причем это нестабильно раз от раза. За все время тестов, один раз загрузился наполовину экран Exsdos и все зависло. Она там ни с чем не может конфликтовать? У меня ленинград-2 с расширением до 128к. Буду проверять на непропай-замыкания. Будет время попробую ваш 5 вольтовый вариант повторить, детали все есть. Других мыслей нет.
valerium
27.11.2020, 17:09
У меня ленинград-2 с расширением до 128к. Буду проверять на непропай-замыкания. Будет время попробую ваш 5 вольтовый вариант повторить, детали все есть. Других мыслей нет.
Нестабильно оно включается в esxdos потому, что весьма редко регистр конфигурации divmmc оказывается в том состоянии, когда с нулевых адресов включено его пзу (это случайно происходит). И почему-то не сбрасывается, как должен. Но хотя бы иногда это было - это плюс.
А мусор на экране бывает тогда, когда перед стартом процессора вместо пзу в нижние адреса мапятся случайные страницы озу divmmc, они могут оказываться в весьма пестром состоянии.
Конфликтовать в пустом ленине эта плата ни с чем не должна, это тоже где-то страницами выше уже проверяли. Регистр конфигурации 7ffdh в esxdos первым делом настраивается на основное пзу 48к, нулевой экран (основной) и нулевую страницу озу - это тоже продумано.
Насколько я увидел из экспериментов, у меня было дело в кривом состоянии регистра конфигурации divmmc e3h после включения, когда активность сигнала /poweron короткая, а /reset у z80 значительно более длинный. Почему его надо сбрасывать по активному /reset и почему мало сброса по /poweron -я сам не могу понять.
Есть возможность прошить пзу вне платы ? Прошей в него testrom3 (см. сообщения на пару страниц выше) и посмотри, стартует или нет. В нем тесты памяти разные и тест выхода из пзу divmmc по кнопке 1.
А вообще вместо патча прошивки можно просто подать /reset на оба входа cpld - и reset, и poweron, тогда все должно корректно сбрасываться просто по кнопке сброса ленина - это если все остальное работает правильно, проверь, если есть возможность.
Н
А вообще вместо патча прошивки можно просто подать /reset на оба входа cpld - и reset, и poweron, тогда все должно корректно сбрасываться просто по кнопке сброса ленина - это если все остальное работает правильно, проверь, если есть возможность.
Попробовал, ситуация не изменилась. Впрочем сама плата nanosd уже в таком состоянии (несколько раз перепаивал компоненты), что вполне возможно уже сама неработоспособна. В общем буду на монтажке делать 5в версию, в DIPe, чтобы можно было поэкспериментировать. Если получиться, попробую еще одну nanosd собрать (я две штуки покупал).
Прошей в него testrom3 (см. сообщения на пару страниц выше) и посмотри, стартует или нет. В нем тесты памяти разные и тест выхода из пзу divmmc по кнопке 1.
Забавный тест. я тут сегодня весь вечер хожу кругами, zx128 не стартует. Или вообще чОрный экран, или с 20-го раза полосатый экран и бордюр какой нить). Думал уж вообще не работает ничего (но растр есть). Залил этот тест, так он работает, на всех кнопках цифрах, но по "1" в бейсик не вываливается, возвращается обратно на полосатый экран. Ну хоть что-то осмысленное.
valerium
29.11.2020, 04:30
Попробовал, ситуация не изменилась. Впрочем сама плата nanosd уже в таком состоянии (несколько раз перепаивал компоненты), что вполне возможно уже сама неработоспособна. В общем буду на монтажке делать 5в версию, в DIPe, чтобы можно было поэкспериментировать. Если получиться, попробую еще одну nanosd собрать (я две штуки покупал).
Я достал свою плату на Xilinx, еще раз протыкал всю пайку, промазал ноги ПЛИСки пастой и прогрел.
Что имеем сейчас: спек стартует, но всегда сбрасывается в свое ПЗУ. Если при этом с "ленты" загрузить divramka, то он бодро и успешно тестирует все 512к ОЗУ.
Потом я сдуру решил перепрошить ПЗУшку с прошивочной тапки esxdos... В общем, прошивка как бы выполнилась, но в ПЗУ какая-то хрень, с ней ничего не заработало, в плате на Альтере она тоже не работает.
Взял другую ПЗУху, прошил testrom3 - не стартует. Все так же падает в бейсик, видимо не отрабатывает ловушка для перехвата адреса 0000h. Адресные линии на ПЛИС все проверил на два раза. Прошивку ПЛИС оригинальную заливал - без толку. Значит буду ковырять неоригинальную.
Посмотрел осциллографом тактовые импульсы, которые мы получаем после одновибратора и триггера Шмидта... страх и ужас, шум, какие-то длиннющие иголки, вылезающие далеко за 5в после переключений. Потом подам тактовую с Z80 напрямую. Ну в общем... квест продолжается =)
valerium
29.11.2020, 12:33
Залил этот тест, так он работает, на всех кнопках цифрах, но по "1" в бейсик не вываливается, возвращается обратно на полосатый экран. Ну хоть что-то осмысленное.
Зона выхода не срабатывает, не отключает automap. Как дело обстоит с /m1 на процессоре ? Ну и адресные ноги проверять надо, особенно старшие (a9 и выше - раз тест запускается и работает, значит нижние полкилобайта ПЗУ попали на свое место)
Тааа))) тут вообще интересно все))Это проект цельно в ксайлинке. Автор оного сделал две версии. zx48 работает идеально, особенно тайминги zx48 экрана, всяким следующим далеко до этого. Ну и дивММС прекрасно работает. Претензий ноль. Ну и его же проект zx128. Модулей много измененных, в т.ч. и маппер, и SPI и другие модули. Ну захотелось емуу, чО. При запуске и экран черный , и бордюр, синхра есть. И все. х.з. работало оно у него, но раз выложил - то видимо да?? Вот и пришлось тест этот подкидывать, причем в 48-м он работает несколько иначе, но по "1" точно в ОС вываливается.
а в 128-м тест работает, но несколько иначе, а по "1" вижу типа сброс, красные вертикальные пунктирные линии, как положено, и а5 в этот тест.
тесты на кнопках от 1 до 0 все как бы работают, но иначе, чем в 48м варианте. Поэтомуу чешу репу второй день. Занятно., но и занимательно.
upd/ Придумал/ Сейчас диззи-тест вместо 128й ROM подкину, посмотрю, куда вывалиЦЦа.
upd2: ну да, вываливается во вторую четверть, Spellbound:v2_confu:, что наверняка правильно, ибо 48й бейсик во второй половине 128го. Все чудесатее и чудесатее.
valerium
29.11.2020, 15:35
так это целиком отдельная fpga-шная реализация спека ? тогда надо в ее исходники divmmc смотреть, иначе только запутаем друг друга.
esxdos в 48м режиме-то работает ?
Eraserstp
06.01.2021, 17:26
Кто-нибудь знает, какие подводные камни могут быть при втыкании DivMMC в разъем Скорпиона 256?
Очередная попытка прикрутить DivMMC к Ленинграду-1 и Sizif-128. Пока имеем старт Exsdos и сброс в бейсик 48.
При тесте Divramka почему то, каждый второй блок памяти - сбой.
На SD карте все нужные папки есть, память точно исправна. Никто с похожим не сталкивался?
75285
75284
Serg6845
22.04.2021, 23:29
Очередная попытка прикрутить DivMMC к Ленинграду-1 и Sizif-128. Пока имеем старт Exsdos и сброс в бейсик 48.
а разве он не так должен себя вести? сброс в 48 бейсик, в нем после этого сброса становятся доступны команды DIVMMC. или можно дернуть за NMI - откроется список файлов на флешке.
При тесте Divramka почему то, каждый второй блок памяти - сбой.
На SD карте все нужные папки есть, память точно исправна. Никто с похожим не сталкивался?
у меня было что-то подобное - когда в плиске налажал, но у меня совсем другой расклад, память используется основная на плате ленинграда (верхние 128к).
сигналы выбора банков памяти с плис до микросхему ОЗУ доходят? на 0/1 никто не залип?
valerium
23.04.2021, 06:16
На SD карте все нужные папки есть, память точно исправна. Никто с похожим не сталкивался?
75284
Карта не детектится. Причем не файловая система на ней, а даже само устройство. Она как подключена, вход/выход данных не перепутаны ? (тут были такие платы).
Тактовая частота откуда подается на плиску и какая ?
У меня чтение работало нестабильно при 3,5 мгц с процессора (badapple.tap, которым я тестирую стабильность, часто сбоил в случайном месте), я попробовал поиграть с внешним генератором. И перепробовал кучу кварцев, в общем в частотах от 3,6864мгц и до 20мгц (выше свободного кварца не было, но думаю, что предел бы не был достигнут) карта читалась прекрасно и сбоев чтения не было. Так что тактировать чтение SD лучше частотой, _выше_ процессорной (видимо потому что на 16 битовых сдвигов по spi в esxdos выделена "пауза" в 16 NOP-ов, правда по какой причине их иногда может не хватать, я не разобрался).
По поводу полосатого теста - очень похоже на проблему в младших линиях адреса банка, как тут правильно сказали. Я бы начал с проверки bank0 и bank1.
Serg6845
23.04.2021, 09:01
Карта не детектится. Причем не файловая система на ней, а даже само устройство.
да, эт я протупил что там еррор выдается...
У меня чтение работало нестабильно при 3,5 мгц с процессора (badapple.tap, которым я тестирую стабильность, часто сбоил в случайном месте), я попробовал поиграть с внешним генератором. И перепробовал кучу кварцев, в общем в частотах от 3,6864мгц и до 20мгц (выше свободного кварца не было, но думаю, что предел бы не был достигнут) карта читалась прекрасно и сбоев чтения не было. Так что тактировать чтение SD лучше частотой, _выше_ процессорной (видимо потому что на 16 битовых сдвигов по spi в esxdos выделена "пауза" в 16 NOP-ов, правда по какой причине их иногда может не хватать, я не разобрался).
16 NOPов - это 64 такта 3.5МГц. даже с учетом тормознутости SPI порта в оригинальном DIVMMC - это 32 битовых сдвига. тут скорее дело в другом - для чтения секторов используется команда INIR, и вот там следующий байт должен успеть задвинуться в регистр до следующего сигнала /RD. думаю узкое место здесь, но такты считать лениво. я просто подал туда 14МГц.
и кстати еще момент - карты MMC эта железяка несмотря на название - не поддерживает. просто не видит. вряд ли кому актуально, но все же...
и кстати еще момент - карты MMC эта железяка несмотря на название - не поддерживает. просто не видит.
Давно с ними дела на низком уровне не имел, но ЕМНИМС у настоящих MMC и SD card в режиме совместимости с MMC немного отличается процедура инициализации. То есть, надо патчить софт.
Плата от Павла с белой маской. Прозванивал все линии до microSD карты, сегодня еще раз попробую прозвонить. Насчет проверки bank0 (он вроде отвечает за четные), A13 и D0 на плис приходят, выбор банков вроде работает (проблема походу только с bank0), перекидывал этот сигнал на другой выход ПЛИС и менял адреса на RAM, ничего не меняется. Но прозвоню еще раз все сигналы на ПЛИС. Насчет тактирования SD читал, что может работать от внешнего такта, сегодня вечером попробую. Спасибо всем за информацию.
Карта не детектится.
Карта детектится иначе не было бы второй строки – Mounting drivers
Карта монтируется иначе не было бы третьей строки – Loading ESXDOS.SYS
Но esxDOS (все файлы DOS-a) не грузится, ибо ему не хватает места для загрузки, esxDOS видит только 8кб.
valerium
23.04.2021, 10:30
Плата от Павла с белой маской.
Их было несколько и вроде все белые. Но в ранней версии была ошибка с перехлестом spi_datain/spi_dataout и где-то здесь есть фото с патчем этой ошибки и термоскотчем.
Впрочем, надо с памятью разобраться в первую очередь. Но судя по всему, главная проблема-то сейчас уже решена, память он мапит и диапазоны адресов перехватывает. И сбрасывается корректно.
Впрочем, надо с памятью разобраться в первую очередь.
Вот тут и проблема, как с ней разобраться. Физически я уже переназначал выход bank0 на другую ногу ПЛИС перекомпилировал и прошивал и подавал этот сигнал на A18 RAM. Результаты теста такие же, четные банки не работают, ну и естественно верхние 256к не видно. В коде плис, запись текущих банков:
-- ram banks
bankout(0) <= bank(0) or not A(13);
bankout(1) <= bank(1) or not A(13);
bankout(2) <= bank(2) and A(13);
bankout(3) <= bank(3) and A(13);
bankout(4) <= bank(4) and A(13);
bankout(5) <= bank(5) and A(13);
A13 c компа приходит, прозвонил от Z80 до 12 ноги плис.
Запись в bank(0)-bank(5) происходит по спаду divideio.
Сам divideio формируется так:
divideio <='0' when iorq='0' and wr='0' and M1='1' and address = divide_control_port else '1';
т.е. банки должны или все работать или не работать вообще, но divramka показывает, что не работает только 0- банк.
valerium
23.04.2021, 13:41
т.е. банки должны или все работать или не работать вообще, но divramka показывает, что не работает только 0- банк.
Между двумя этими линиями нет кз ? Где-нибудь под микросхемой озу. Такое впечатление, что значение bank0 в каждом втором случае искажает значение bank1. А тест памяти, скорее всего, выполняется с маркировкой банка памяти номером банка и в половине случаев считанный номер не совпадает именно по причине искажения bank0.
Попробую прозвонить, спасибо. Но мало вероятно, что с плис, что с ram сигналы bank0, bank1 приходятся на не соседние ножки.
прозвонил
А осциллограф что показывает, сигналы-то на этих bank идут?
А осциллограф что показывает, сигналы-то на этих bank идут?
Не смотрел, тут процесс асинхронный скорее всего. Правда можно сигнал divideio "вытянуть" на ногу Плис и по нему синхронизироваться. Попробую если совсем будет безнадежно.
Serg6845
23.04.2021, 17:41
Не смотрел, тут процесс асинхронный скорее всего. Правда можно сигнал divideio "вытянуть" на ногу Плис и по нему синхронизироваться. Попробую если совсем будет безнадежно.
для начала можно не синхронизироваться. во время теста посмотреть все сигналы bank* на предмет меняются ли они (должны меняться все) и нормальные ли уровни 0 и 1.
еще - не может быть вариант с битой ОЗУшкой?
не может быть вариант с битой ОЗУшкой?
Скорее Xilinx.
Врятли, физически я уже переназначал выход bank0 на другую ногу ПЛИС перекомпилировал и прошивал и подавал этот сигнал на A18 RAM. Результаты теста такие же, четные банки не работают, ну и естественно верхние 256к не видно.
valerium
23.04.2021, 18:36
Карта детектится иначе не было бы второй строки – Mounting drivers
Карта монтируется иначе не было бы третьей строки – Loading ESXDOS.SYS
Но esxDOS (все файлы DOS-a) не грузится, ибо ему не хватает места для загрузки, esxDOS видит только 8кб.
Ок, про 0.8.9 не знаю, еще не пробовал ее шить, но в 0.8.8 если устройства детектятся, то он их называет по имени. Если есть разделы, пригодные для монтирования, он по ним дает развернутую инфу:
75286
Скорее всего видится "что-то" (судя по исходнику 0.8.5 делается 50*255 попыток считывания чего-то, отличного от FF из порта SPI и если это случилось, то он думает, что карта есть и что-то пытается читать).
- - - Добавлено - - -
Врятли, физически я уже переназначал выход bank0 на другую ногу ПЛИС перекомпилировал и прошивал и подавал этот сигнал на A18 RAM. Результаты теста такие же, четные банки не работают, ну и естественно верхние 256к не видно.
А чот мы мимо прошли - какая именно память стоит ? Может у нее нога А18 совсем не А18 ?
У меня макетный вариант собран с 128к-памятью и используются только 4 младших разряда выбора банка с плис, они поданы на A13-A16 у микросхемы ОЗУ. Может здесь есть возможность задействовать не всю память ? Подав bank0 вместо bank5 на озу, а ту ногу, которая вроде бы A18, завернуть в стабильный уровень (ноль, например) ? Это можно сделать, переназначив ноги bank* у плиски в прошивке
про 0.8.9 не знаю
как и в 0.8.8
если устройства детектятся, то он их называет по имени
Мне попадались две SD, которым имена не назначались.
если устройства детектятся
А если нет, то до попытки загрузки файлов SYS дело не должно было дойти.
- - - Добавлено - - -
julbu, на выводе ROMCS активность есть?
valerium
23.04.2021, 19:13
Мне попадались две SD, которым имена не назначались.
имя устройства sda: им тоже не присваивалось ?
на выводе ROMCS активность есть?
а вот тут нет повода сомневаться - хотя бы потому, что корректно мапится пзу с esxdos вместо штатного и выводится текст стандартными процедурами из пзу48, т.е.
переключение между ними происходит нормально.
а вот тут нет повода сомневаться
Да, что-то я затормозил.
Прозвонил все цепи, обрывов - замыканий нет. Bank0 - 28 нога ОЗУ не с чем не звонится, кроме 38 ноги ПЛИС. Перепаял ОЗУ, ничего не поменялось. При подаче внешнего такта на ПЛИС (8 мгц) ничего не изменилось. При тесте Divramka на bank0 28 нога ОЗУ - постоянно лог "1", на bank1 - "шевеление" с периодичностью тестирования блоков. Продублировал выход Bank0 на другой свободный вывод плис - тоже постоянно в "1". Бред какой то.
julbu, Xilinx повторно прошивается, верифицируется, стирается?
Да, все ок. Стирается, пишется, проверяется.
Перепрошил версию 8.8 через загрузку tap файла, все прошилось отлично. Но ничего не изменилось. Вообще не понимаю в чем дело.
- - - Добавлено - - -
Заработало. Вход ПЛИС D0 был не рабочий. Переназначил на другой свободный вход и сделал перемычку на плате. Всем большое спасибо за участие и советы.
Вход ПЛИС D0 был не рабочий
Обычное дело, процентов 70 Xilinx-ов купленных мною в Китае "за доллар" были битыми.
valerium
24.04.2021, 03:30
Заработало. Вход ПЛИС D0 был не рабочий. Переназначил на другой свободный вход и сделал перемычку на плате. Всем большое спасибо за участие и советы.
Магия. Сейчас объясню, в чем именно.
Я тоже сейчас запустил свою белую плату. После кучи пропаек был обнаружен дефект платы - не было D0 на ПЗУшке (что ? дежа вю ? тоже D0 ?). Кинул перемычку с разъема на 11-й вывод ПЗУ - оно стало мапиться и стартовать. Причем на второй пустой плате дефекта нет, там D0 не оборван. Значит либо это дефект экземпляра, либо я что-то испортил, но не приложу ума, где.
Штатная 28c64 в устройстве у меня прошивалась крайне плохо (один раз флешером удалось это сделать, но все равно она не заработала), поэтому взял 39sf020 и прошил туда версию 0.8.9. Все определяется, карту читает.
Однако ! BadApple.tap валится регулярно в случайном месте.
Взял снова макетный DivMMC, который на альтере. Засунул туда ПЗУ с 0.8.9 и эту же карту. BadApple валится.
Вернул обратно 0.8.8 и файлы на карту от нее же. BadApple не валится !
Вывод: остаюсь я на версии 0.8.8. Пока все новые плюшки не причесаны.
А, забыл. Поздравляю с победой )
Спасибо! На моей плате все норм по разводке. ПЛИС покупал на Али, но они внешне новые, выводы не паянные (как часто бывает). Пока завел на Sizif-128, на Ленине виснет на инициализации. Прошивка ПЛИС оригинальная. Valerium, читал у вас и на Ленине работало, что нибудь исправляли? Вообще EsxDos классная вещь!
valerium
24.04.2021, 12:12
Valerium, читал у вас и на Ленине работало, что нибудь исправляли? Вообще EsxDos классная вещь!
У меня все работает на ленине. Я делал только одну правку в части сброса, когда отлаживал версию на альтере, тут я про это писал. Но вот я совсем не помню, исправленная ли версия у меня сейчас прошита в xilinx, это давно было, а плиску вчера не перешивал (неудобно было доставать старый комп с LPT). Проверю при случае.
С этой правкой не будет работать абсолютная замена пзу на readonly-страницу озу (вернее, работает, но после reset-а выключается, а не должна)
Ссылка на тот пост с правкой и моей версией происходящего: https://zx-pk.ru/threads/25361-divmmc.html?p=1090421&viewfull=1#post1090421
Посоветуйте реально рабочую схему этого девайса, с прошивками и т.п.
Вариантов уже дюжина, и не ясно что работает, а что нет.
valerium
29.09.2021, 10:10
Видимо рабочие они все, но не на всем.
Есть ли такой вариант, к которому купил плату- и она работает на всем, неизвестно. Потому и плат много, что делал каждый со своими доработками.
Прошивка тоже одна и та же, пересобранная под разные cpld (у меня на ленинграде не хотела работать без мелкой корректировки сброса).
На фирменных спеках у заграничных товарищей были проблемы с формированием тактовых импульсов из CpuClk для работы SD, как выяснилось, легко решается установкой отдельного кварцевого генератора на 4 и более мгц, это работает стабильнее.
К какому аппарату подключать планируется ?
К какому аппарату подключать планируется ?
Феникс и КАЙ
Феникс и КАЙ
тут ещё надо думать про отключение БетаДиска.
На фениксе да, кай без него по умолчанию, в приоритете КАЙ, Феня не обязательно.
valerium
02.10.2021, 12:23
При всем богатстве выбора варианта, который бы втыкался прямо в слот Кая, нету. Поэтому предлагаю его разработать, точнее переработать. Конструктивно - плата в слот с выносом на коннектор модуля SD, кнопки NMI и светодиода активности.
Без излишеств, то есть плиска (на мой взгляд 3128 самое то), озу hy628400 (5-вольтовое, шд 8 бит, 512 килобайт), выносной модуль SD/uSD -можно прям готовый ардуинский. Тактовую 3.5мгц на ттл5-плате можно легко брать с шины. Можно для разнообразия предусмотреть вариант генератора прямо на плате.
С ПЗУ вопрос, у меня ранее опробованные флеши 28c64 никак не хотели шиться из программы-флешера, загружаемой из тапки. Со всеми процедурами программного анлока (для микросхемы с буквой b) и прочими танцами. Поэтому я бы поставил более распространенное пзу, которое легко суется в программатор и потом в плату, лучше в 32-ногом корпусе (да, из-за 8 килобайт такую махину, но сейчас это проще). Вопрос только, в DIP или в PLCC.
Со стороны Кая, как я понимаю, ничего экзотического не надо, сигнал отключения внутреннего ROMа на шине есть.
По фениксу - вникать надо, чем там отключать бетадиск, возможно с шины это и не получится, тут уже нужна хирургия.
valerium, если схемку подкинешь, я отрисую в ДипТрейс и плату разведу.
По Фениксу думаю заморачиваться пока не стоит.
valerium
05.10.2021, 21:45
valerium, если схемку подкинешь, я отрисую в ДипТрейс и плату разведу.
Почти готово.
76185
Подсобрал свои наброски с 3128, кое-что поменял в паттернах - сделал паттерн с длинными падами под ОЗУ, подходит и для HY628400ALLT2-55 (узкие), и для K6X4008C1F-GF55 (широкие), и как раз в Дипе. Перепинил и пересобрал прошивку под эту схему.
Сейчас в схеме используется разъем под слот ZXBUS, надо будет его заменить на то, что актуально для Кая.
По CPLD - там же в архиве пример компоновки элементов (без трассировки), чтоб было понятно, почему так пестро расположил линии на CPLD - там масса удобных связей, если память расположить параллельно первому краю (1-25) CPLD. Собственно, можно перепинивать и перестраивать прошивку как угодно.
У CPLD куча неиспользованных ног, я бы к ним на плате подвел какие-нибудь пады, чтоб можно было как-то задействовать. Это если место на плате не будет поджимать.
Для карты памяти в схеме есть слот J2 (мой любимый, без защелки, карта в нем топится только наполовину; картинка microsd10pin.jpg там же в архиве, паттерн в компоненте актуальный) и хедер для подключения ардуиновского модуля "на вынос" (такого как на Micro-SD-Card_reader.jpg).
Два варианта тактирования - прямо с шины спека (обычно работает без вопросов, если спек на ТТЛ-микросхемах) и отдельный генератор. Можно заменить на монолитный генератор 4..16мгц.
Upd: забыл упомянуть, что в ПЗУ в этом случае записывается ESXDOS в самые верхние 8 килобайт. Ну или чтоб не задумываться, что куда должно попасть, можно просто задублировать 8К-блоки на всю емкость ПЗУ (64 раза для 39sf040, соответственно).
Программно перешиваться в плате данное ПЗУ не сможет, сигнал /ROMWR оставлен просто из преемственности, можно его не подключать к ПЗУ, а соотв. вход ПЗУ кинуть на единичку.
Еще момент: подтяжки на JTAG. Здесь их нет и у меня все, что шьется (3032, 3064, 7128SLC, 7064, 3256, 7512), как раз шьется без подтяжек. Проблемы были только с 7128SLC в плате Sizif128 как раз из-за подтяжек, те же микросхемы на макетке без подтяжек у меня шьются тем же бластером.
Однако это может быть особенностью моего бластера (или наличием подтяжек внутри него). Поэтому на плате бы лучше места для резисторов предусмотреть, а запаивать или нет - уже решать при сборке.
И открытый вопрос, куда их подтягивать для MAX3000, в даташите не находил, в других схемах было сделано по всякому (например, TCK, TMS к питанию, TDI к земле, TDO не подтягивать). Скажу честно - я этот вопрос бросил, когда у меня все работало полностью без них.
Freiwind
23.10.2021, 16:19
Если поставить 28C64 на плату под EPM3128 шиться будет?
У меня вроде бы не было проблем с их шитьем на оригинальной под Xilinx. Не хочется ставить огромный корпус в DIP, тем более на 32 ноги.
valerium
23.10.2021, 21:26
Если поставить 28C64 на плату под EPM3128 шиться будет?
У меня вроде бы не было проблем с их шитьем на оригинальной под Xilinx. Не хочется ставить огромный корпус в DIP, тем более на 32 ноги.
Логика в CPLD вся сохранена. Должна шиться.
Только у меня в плате на xilinx 28c64b не шилась ни в какую. На ленине. Не знаю, кто виноват. Поэтому забросил эту тему, тем более, что мне программатором это сделать быстрее и удобнее, чем сидеть ждать загрузку тапки с флэшером (которая далеко не всегда хорошо завершается).
Да и что 28c64, что большая ПЗУха в 32 ноги - в китае стоит примерно одинаково.
Freiwind
25.10.2021, 10:26
28C64 интересует в плане возможности внутрисхемного программирования и размеров SMD.
Я смотрю много что выкинуто из оригинальной схемы. Инвертер на клок, кнопка сброса, а также часть с ROMCS1,2.
valerium
25.10.2021, 19:22
28C64 интересует в плане возможности внутрисхемного программирования и размеров SMD.
Я смотрю много что выкинуто из оригинальной схемы. Инвертер на клок, кнопка сброса, а также часть с ROMCS1,2.
Ну можно прямо внутри той же dip32 влепить паттерн под sop28 и паять ее, коли душе угодно.
Что касается выкинутого - это росло из макетки, на которой я собирал минимально достаточный вариант. Инверсия клока там нужна была разве что для того, чтоб сформировать его с выхода с большей нагрузочной способностью. На фирменных машинах с дохлыми кмоп-выходами на слоте клок весьма слабый и народ лепит всякие триггеры Шмитта, дополнительные одновибраторы и т п.
Никакой связи этого сигнала с тактами проца там нет. Гораздо круче работает там генератор на ттл-инверторах или просто близко к плис расположенный монолитный осциллятор. Частота - от 3,5 мгц и до 16 у меня работали без вопросов. Это влияет на скорость SPI у карты памяти и больше ни на что. Если карта потянет требуемую частоту, то оно работает.
Что касается блокировки сигналов выбора пзу, то для наших машин их два и не надо. Адаптировалось именно под наши клоны, а не под дваплюс/триплюс.
Прицепив несколько транзисторов по аналогичной схеме их можно сделать хоть десять.
Freiwind
26.10.2021, 20:58
Вот, накидал схемку предварительно.
Вот, накидал схемку предварительно.
А ее работу проверяли, как эта схема будет работать с двумя SD картами? Интересует вопрос при работе с двумя картами большого объема.
Freiwind
26.10.2021, 22:40
Вот и проверим.
valerium
27.10.2021, 04:54
А ее работу проверяли, как эта схема будет работать с двумя SD картами? Интересует вопрос при работе с двумя картами большого объема.
А уже есть идеи, для чего нужны одновременно _две_ карты большого объема ? Я сколько ни придумывал- не смог найти ответ, чем это лучше одной карты большого объема.
valerium, идеи банально просты. Большого – это не значит 1 Тб. Например, я не смог найти карты объемом 2-4 Гб, ибо их просто нет в продаже.
Freiwind
27.10.2021, 09:41
Есть. Буквально на прошлой неделе видел в Глобусе, например.
Да и в том же DNS есть и 2 и 4 гига
Freiwind
27.10.2021, 10:19
Доставку никто не отменял.
Freiwind
27.10.2021, 10:44
Если нужна помощь, достаточно просто попросить.
На мой взгляд, тут хамством и не пахнет, но если обидел, извините. Просто достало уже слышать в подобных случаях – в "dns" есть.
P.S. Просто наблюдение. Если у ленинградца спросить дорогу, он объяснит, а затем проследит, туда ли ты пошел или вовсе проводит, даже если он шёл в другую сторону.
Shadow Maker
27.10.2021, 11:11
На мой взгляд, тут хамством и не пахнет, но если обидел, извините. Просто достало уже слышать в подобных случаях – в "dns" есть.
Ты хочешь сказать, что в Луховицах закрыли DNS или что в нем нет карт на 2-4 gb? Я думаю ты банально не проверял. Я вот проверил и есть:
https://www.dns-shop.ru/catalog/17a89edf16404e77/karty-pamyati/?f[r8]=7o2-7o4
Добрее надо быть к людям, которые пытаются тебе помочь.
Freiwind
27.10.2021, 11:25
По поводу "ленинградцев". На заре отношений с женой поехали мы в этот славный город отдохнуть. Идём с вокзала с чемоданами. Нужно перейти небольшую дорогу в 4 полосы. Горит красный для пешеходов. Раннее утро, машин не видно ни одной. Решили не ждать зеленый и по быстрому перейти. Дошли уже до конца почти. И тут стартует припаркованное такси и на всех газах на нас несётся, резко тормозя перед нами. Потом высовывается оттуда местный персонаж и материть еще начинает.
Так что не надо судить о людях по месту их жительства.
valerium
27.10.2021, 11:36
Вангую, следующий вопрос в треде будет - зачем вообще нужно две дискеты одновременно?
Нет. Стоп. Две дискеты в понимании спека как раз могут прекрасно жить в разных файлах одной SD-карты. Скорость доступа в тормознейшем режиме spi (а не sd) что к одной карте, что к двум попеременно, будет одинакова. Карты среднестатистического на данный момент объема имхо достаточно, чтоб иметь на ней одной все нужное для спека (в качестве bootable-носителя а не storage). Вот поэтому имхо два слота просто никогда не будут использоваться, второй просто не нужен. Набирать команды для монтирования трд или тапок с разных карт в esxdos тоже всем будет лень. Я бы сделал выбор в пользу компактности и упрошения, но это просто мое мнение.
Freiwind
27.10.2021, 11:41
Я сделаю второй слот. Пусть будет. Запаивать его не обязательно же. А платка и так маленькая получится.
Как вариант, можно для второго слота добавить футпринт полноразмерной SD-карты.
Например, я не смог найти карты объемом 2-4 Гб, ибо их просто нет в продаже.
я тоже столкнулся с этим моментом летом. хорошие карты (типа от Kingston) в нормальных магазинах исчезли.
денег на фуфло не жалко, но уже пара таких карт перестала определяться (фотки пропали)
Freiwind
27.10.2021, 13:50
Да. Хороших нет. Но такие много сливают на Авито. Можно найти хорошие варианты по цене и количеству.
ну у меня старейшая фирма nix.ru относительно рядом.
всё компьютерное покупаю у них. были случаи возврата, но по-гарантии всё меняли/чинили
Freiwind
30.10.2021, 14:42
Закончил разводку.
Возможна установка двух микро SD, либо одной SD в укороченный слот.
Перекинул несколько линий на другие порты CPLD. Нужно будет переназначать и пересобирать прошивку.
valerium, если не трудно, проверьте схему на корректность.
76285
76283
76284
valerium
30.10.2021, 20:23
Закончил разводку.
valerium, если не трудно, проверьте схему на корректность.
Просмотрел, по схеме вроде все нормально, с перепиновкой ПЛИСки проблем быть не должно, тут то, что подано на "только входы", оно там и осталось, а все остальные IO перепрограммируются как угодно, это все пластично.
У меня только вот к чему есть вопросы:
1. Кнопки. Удобно ли то, что они смотрят в сторону корпуса спека или или может лучше все-таки сделать угловые, чтоб нажимать сверху ? SMD или thru-hole, без разницы, они все не так много места занимают.
2. Генератор - не 5070, а что-то меньше (на глаз не опознал). Не слишком ли экзотика, реально будет найти ? Питание у него только 3,3в ?
3. Футпринт под ОЗУшку SOP или TSOP-2 ? Лучше сделать вытянутые пады, чтобы и то, и другое встало.
В том числе и все samsung-и c hynix-ами тоже хорошо встанут.
4. Плат сколько планируется к заказу ? Я б тоже вошел в долю на 1-2 штучки )
Freiwind
30.10.2021, 21:37
Верхняя часть платы будет возвышаться над корпусом, если брать корпус "резинки" и кнопки будет видно.
В принципе, можно сделать и вариант с толкателями вверх. Пока это не принципиально.
В дальнейшем планирую смоделировать и "натянуть" на плату корпус, тогда можно будет прикинуть варианты.
Генератор в корпусе 5032. Они все-таки сейчас более распространены.
Футпринт под ОЗУ в корпусе SOP с шириной 525 mil, но пады я растянул внутрь, чтобы и для корпуса 450 mil было нормально.
Платок планирую сделать по минимуму пока. 5 штук. Надо же сначала проверить, что все хорошо. :) Потом уже можно побольше сделать.
Проект потом выложу в свободный доступ, желающие смогут переделать его под себя.
valerium
31.10.2021, 00:15
Генератор в корпусе 5032. Они все-таки сейчас более распространены.
Футпринт под ОЗУ в корпусе SOP с шириной 525 mil, но пады я растянул внутрь, чтобы и для корпуса 450 mil было нормально.
Ну значит все отлично )
Платок планирую сделать по минимуму пока. 5 штук. Надо же сначала проверить, что все хорошо. :) Потом уже можно побольше сделать.
Проект потом выложу в свободный доступ, желающие смогут переделать его под себя.
При текущем размере (где-то 74х36, если глазомер не сильно врет) легко получается по две в листе до 100x100, то есть 10шт в минимальном заказе. Это, конечно, если не сверлить и не прорезать, иначе тот же jlcpcb накинет цену за "additional design detected". Прорезать можно и это тоже обходят, но что-то там китайцы совершенствуют, и все пунктиры/прорези сейчас уже не аппрувятся сразу автоматом, а уходят, видимо, на ручной разбор, что потом влияет на цену.
У кого дешевле заказать минимальную конфигурацию? (достаточно SD читалки) не побрезгую Б/У, лишь бы пахало.
Реально ли через МГТФ подружить с моим Лёней-1, прокачаным до 128кб?
Если да, то по пинам подпаиваться непосредственно к процу, или же нужны ещё какие-то специфические сигналы? Какая там вообще распиновка?
достаточно SD читалки
Может для этого попроще вариант?
https://zx-pk.ru/threads/30269-emulyator-kontrollera-diskovoda-beta-disk-na-avr/page19.html
К ленину его прикручивали в ветке даже вроде фото есть (если мне склероз не изменяет). Правда с совместимостью средне....
Может для этого попроще вариант?
https://zx-pk.ru/threads/30269-emulyator-kontrollera-diskovoda-beta-disk-na-avr/page19.html
К ленину его прикручивали в ветке даже вроде фото есть (если мне склероз не изменяет). Правда с совместимостью средне....
Больше колхоза. Ещё меньше шансов, что взлетит с криво подключёнными сигналами/запоротой прошивкой.
Кстать, у меня там оператива расширена до 256ти, вроде как. Это тоже надо учитывать при дешифрации адреса, скорее всего.
valerium
09.11.2021, 19:45
Больше колхоза. Ещё меньше шансов, что взлетит с криво подключёнными сигналами/запоротой прошивкой.
Кстать, у меня там оператива расширена до 256ти, вроде как. Это тоже надо учитывать при дешифрации адреса, скорее всего.
У меня все из этих устройств обкатывались именно на ленине. Просто потому что только в нем одном был слот, в который удобно было пихать все, что угодно )
Расширенная хоть до какого объема память никому ничем не помешает - все доп страницы мапятся в верхние 16к, а все зоны входа/выхода в trdos и esxdos находятся в адресах ПЗУ - это нижние 16к. Оно просто никогда не пересечется. Адресация портов ввода-вывода для порта конфигурации тоже не мешает.
В divMMC дешифрация адреса выполняется по всей 16-разрядной шине адреса (как для памяти, так и для портов в/в), поэтому ни на что лишнее он не выстреливает. Даже в минималистичном Ленинграде.
Ну а в упомянутом эмуле ВГфлопа дешифрация портов работает как во всех классических схемах контроллера BDI, что тоже совершенно жизнеспособно на ленине.
Помимо шин адреса, данных и части процессорных управляющих сигналов для divMMC надо вывести /ROMCS (как в фирменной схеме - врезкой в эту линию перед ПЗУ резистора на 470-560 ом и подключения выхода /ROMCS(1 или 2) напрямую к вхооду ПЗУ. Кстати, в Ленине выборка ПЗУ может быть сделана и по /CS, и по /OE - в зависимости от того, в какую кровать 8К-микросхемы (левую или правую) засунута большая ПЗУ.
А схема ВГфлопа подключается ровно ТАК ЖЕ как ВСЕ BDI-контроллеры (ША/ШД/ШУ, кроме них /DOSEN - для выбора половинки ПЗУ, а также /IORQ подключается в паре с /IORQGE для блокировки прочего ввода/вывода во время работы с флопом. Ну и нужен корректно поданный /WAIT, который в ленине от самого ленина можно вообще отключить при хорошей памяти - я почему-то уверен, что 256к собраны именно на ней, а не на глючном наборе разношерстных РУ5). Собственно, все разрисовано в соответствующих схемах, сложного там ничего нету.
я почему-то уверен, что 256к собраны именно на ней, а не на глючном наборе разношерстных РУ5)
Да, там современная микруха. Не то на 512кб, не то на мегабайт. Не помню, надо вскрывать.
Итак, по порядку, для самых ламеров, чей уровень скилла в пайке - это мультивибратор на к155ла3...
Алгоритм действий следующий
Покупаю ардуину-нано и её обвязку согласно этой схеме
https://image.easyeda.com/histories/eb8c0779b8d04e8fb7dc4206131a2cee.png
(WD-socket - это шина спектрума (aka ноги Z80), так ведь?)
Закидую в ардуину эти исходники https://bitbucket.org/rudolff/fdcduino/src/master/
А через какой софт, кстати? Ни разу дуинами не баловался.
в начале 00-ых AVR ещё через LPT шил, но там препод заранее всё приготовил, и фьюзы прописаны, шоб не угробить.
И на этом всё? SD-карты каких объёмов оно читает? 2гига распознает? Как подготовить SD-карту ?(хотя до этого этапа ещё очень далеко)
- - - Добавлено - - -
/INEN эт что за сигнал ? Где он на плате ленина расположен?
valerium
09.11.2021, 23:23
Покупаю ардуину-нано и её обвязку согласно этой схеме
Эта штука совсем не divMMC, поэтому чтоб не лезть еще глубже в оффтопик (здесь тема все-таки о другом) ответил сюда (https://zx-pk.ru/threads/30269-emulyator-kontrollera-diskovoda-beta-disk-na-avr.html?p=1135936&viewfull=1#post1135936).
Так кто-нибудь белую плату NanoSD вообще запустил?
valerium
19.11.2021, 09:20
Так кто-нибудь белую плату NanoSD вообще запустил?
Я запустил. julbu запустил.
https://zx-pk.ru/threads/25361-divmmc.html?p=1114430&viewfull=1#post1114430
В обоих случаях косяки с линией D0, но в разных местах.
Поскольку я пока запускал, уже наделал аналогов на альтере, то плату на xilinx, которая работала глючновато и с внешним генератором, и со всеми внутренними фишками, я подразобрал. Имхо пора версию на какой-нибудь альтере пустить в массы, ее и шить удобнее
Freiwind
19.11.2021, 12:44
Мой прототип все еще едет с фабрики.
А по поводу что удобнее шить, разницы не заметил. Тот же JTAG. Разве что USB-программер, конечно, подороже.
valerium
19.11.2021, 13:06
А по поводу что удобнее шить, разницы не заметил. Тот же JTAG. Разве что USB-программер, конечно, подороже.
а софт ?
Альтеры я шью китайским усб-бластером через веб-квартус на современном ноуте, который всегда под рукой. Для ксилинксов надо доставать и собирать старый комп с лпт-портом, чтоб шить через программатор "пять проводков" в штатном программаторе из xilinx ise.
И вот этот "отдельный путь" меня все больше отдаляет от xilinx, а вот кабы он шился тем же usb-бластером да в современном софте, то цены б ему не было.
Freiwind
19.11.2021, 13:20
В смысле, софт? iMPACT прекрасно шьет в десятке с помощью USB-шного программера.
valerium
19.11.2021, 14:07
В смысле, софт? iMPACT прекрасно шьет в десятке с помощью USB-шного программера.
какого именно ? какого-то открытого и распространенного ? или специального для Xilinx, который стоит в 5-10 раз дороже любого из наших проектов ?
Freiwind
19.11.2021, 14:22
Например, этого (https://aliexpress.ru/item/32691266814.html?_evo_buckets=165609%2C165598%2C18 8871%2C194276%2C224409%2C224367%2C176818&_t=gps-id%3ApcDetailBottomMoreOtherSeller%2Cscm-url%3A1007.34525.250596.0%2Cpvid%3Ae1572434-d636-4938-844d-1dbf36afaa31%2Ctpp_buckets%3A24525%230%23250596%23 40_21387%230%23233228%232_4452%230%23226710%230_44 52%233474%2315675%2332_4452%234862%2324463%23164_4 452%233098%239599%23578_4452%235105%2323438%23158_ 4452%233564%2316062%23270&gps-id=pcDetailBottomMoreOtherSeller&pvid=e1572434-d636-4938-844d-1dbf36afaa31&scenario=pcDetailBottomMoreOtherSeller&scm=1007.34525.250596.0&scm-url=1007.34525.250596.0&scm_id=1007.34525.250596.0&sku_id=60587568015&spm=a2g2w.detail.1000014.2.36c6810eklQOO3&tpp_rcmd_bucket_id=250596).
Например, этого.
Софт на прилагаемом к программатору диске пиратский. Но дело не в этом...
valerium, извините, провокационный вопрос, а сколько на Вашем компьютере лицензионного софта?
polikarpov76
19.11.2021, 14:54
какого именно ? какого-то открытого и распространенного ? или специального для Xilinx, который стоит в 5-10 раз дороже любого из наших проектов ?
с помощью любого usb-blaster-а из командной строки:
https://zx-pk.ru/threads/31005-zxdos.html
Freiwind, сейчас от valerium последует еще один убийственный аргумент - цена USB бластера против цены Xilinx программатора :)
valerium, извините, но весь этот спор из разряда другого извечного спора - что лучше ПК или игровая приставка.
Freiwind
19.11.2021, 15:05
Софт на прилагаемом к программатору диске пиратский. Но дело не в этом...
Про тамошний софт не знаю. Я с диска, по-моему, не ставил ничего. :)
В сети и так все есть.
valerium
19.11.2021, 15:33
valerium, извините, но весь этот спор из разряда другого извечного спора - что лучше ПК или игровая приставка.
Не, я совершенно не хочу холиварить на тему "чей вкус лучше", как раз наоборот - если есть способ сделать просто то, что я делаю кривым и сложным путем, буду только рад такому решению.
polikarpov76, спасибо, изучу тот вариант с usb-бластером.
"чей вкус лучше"
Да здесь скорее дело не во вкусе, а в толщине кошелька и в том, сколько человек готов потратить на свое хобби.
Не спорю, что "работать" с Altera, да еще с учетом покупки где-нибудь на Али, будет дешевле, чем с Xilinx.
valerium
19.11.2021, 19:18
с помощью любого usb-blaster-а из командной строки:
https://zx-pk.ru/threads/31005-zxdos.html
Я правильно понимаю, из urJTAG прошивка CPLD Xilinx выполняется только в режиме svf-плеера ? То есть надо генерить в Xilinx ISE файл svf, затем его грузить ?
Или собранный jed тоже как-то можно залить ?
С SVF на UrJTAGничего ни у кого не получается, все найденные действующие решения используют XSVF.
Попалась библа для ардуино и пример XSVF-плеера для прошивки XC9572XL: https://github.com/sowbug/JTAGWhisperer
Vasily_A
19.11.2021, 22:16
вариант без дорогих решений:
pci или pci-e карточка c lpt (рублей от 300 примерно начинается) и шнурок с родной схемой от ксайлинкса на одной простейшей микросхеме... у меня на айсе 14.7 под вин10 64 все работает с cpld, которые дигилентом 2-м не поддерживаются.
valerium
19.11.2021, 22:57
вариант без дорогих решений:
pci или pci-e карточка c lpt (рублей от 300 примерно начинается) и шнурок с родной схемой от ксайлинкса на одной простейшей микросхеме...
Безусловно это самый простой вариант, тем более, что микросхема с буферами, стоящая в кабеле из даташита ксилинкса, в прямом смысле заменяется на "пять проводков" для толерантных к 5в CLPD.
Но это если есть, куда вставить эту плату, а я мечтал найти usb-решение для ноута. Впрочем, китайские USB-программаторы, упомянутые чуть выше, стОят уже приемлемо.
valerium
21.11.2021, 02:15
С SVF на UrJTAGничего ни у кого не получается, все найденные действующие решения используют XSVF.
Попалась библа для ардуино и пример XSVF-плеера для прошивки XC9572XL:
Откопал стюардессу белую плату nanoSD на XC9572XL чтобы поэкспериментировать с прошивкой. Есть немного интересного, правда не совсем по теме DivMMC, но может кому будет полезно, чтоб по одним граблям не ходить.
Цель была найти способ прошить CPLD через USB-бластер или еще что-то удобное. И на win-платформе.
(букв много, запрятал все под спойлер, чтоб не загромождать).
Собрал прошивку в Xilinx ISE 12.4 в .jed, iMPACT-ом из него записал файлы .svf и .xsvf, в надежде залить их в CPLD каким-нибудь соответствующим "плеером".
Подключал плату по JTAG к альтеровскому USB-бластеру, запитал плату, запитал бластер от 3,3в на плате.
В Квартус Программере цепь JTAG проверяется, ID устройства считывается, я обрадовался и подкинул JTAG-chain-дебаггеру .svf, полученный из прошивки для DivMMC. Прошивка, конечно, тут же сломалась и все выпало в ошибку. Пытался строить короткие "сценарии" в .svf (делая в импакте отдельно команды erase, blankcheck) - тоже валились с ошибкой или даже глухо повисал Квартус Программер (не анализировал). Ну на это особой надежды не было, тем более, что даже импакт предупреждает, что xc95**xl - не та серия, которая позволяет работать с .svf вне него самого.
Далее идет UrJTAG. Только не из ссылки чуть выше про прошивку Спартанов (там с него много обрезано), а с офф.сайта и с большим списком поддерживаемых устройств. В нем CPLD через бластер определяется, правильный ID с нее читается, однако по этому ID UrJTAG определяет ее как xc9572xl_vq44 (а не 64) и тоже ничего не дает сделать.
Удалил описание этой xc9572xl_vq44, взял из импакта родной ее bsdl-файл (xc9572xl_vq64.bsd), добавил его в папку, на которую указал UrJTAG-у, команда detect стала отрабатывать правильно
jtag> detect
IR length: 8
Chain length: 1
Device Id: 01011001011000000100000010010011 (0x0000000059604093)
Filename: d:\#\/xc9572xl_vq64.bsd
но все .svf со сценариями для program, verify, blankcheck и даже для erase падали в ошибку подобного вида:
jtag> svf d:\#\erase.svf
Warning: USB-Blaster frequency is fixed to 12000000 Hz
Error svf: mismatch at position 17 for TDO
in input file between line 41 col 1 and line 41 col 49
Поскольку .xsvf я так и не смог ничем "проиграть", то эксперименты на этом пришлось бросить, а чтоб понять, жива ли еще микросхема, не поленился и опять собрал комп с LPT-портом + LPT программатором, на нем в Импактом запустил blankcheck - и что удивительно, успешно. То есть тот сценарий erase, который сам по себе в UrJTAG сломался, стирание все-таки выполнил.
Перепроверил файлы .svf и .xsvf - из импакта они отрабатывают нормально оба. То есть если шить из Импакта ими, а потом открывать .jed и делать по нему верификацию, то все завершается successful. Магия.
Осталось проверить, получится ли что-то с .xsvf вне Импакта, из простых решений пока только JTAGWhisperer на ардуине с некой прогой на python. Проверю, если лень не наступит раньше и если тот код на питоне удастся переточить под win.
Вывод: бюджетно Xilinx шьется только через LPT.
Причем нужен полноценный LPT, а не конвертеры USB-LPT, которые применимы только для автономных принтеров.
А пока моя любовь к xilinx ничуть не возросла... Хоть и надеялся )
Butylkin
14.12.2021, 00:06
Мой прототип все еще едет с фабрики.
А по поводу что удобнее шить, разницы не заметил. Тот же JTAG. Разве что USB-программер, конечно, подороже.
Привет! Есть какие подвижки по проекту?
Безусловно это самый простой вариант, тем более, что микросхема с буферами, стоящая в кабеле из даташита ксилинкса, в прямом смысле заменяется на "пять проводков" для толерантных к 5в CLPD.
Но это если есть, куда вставить эту плату, а я мечтал найти usb-решение для ноута. Впрочем, китайские USB-программаторы, упомянутые чуть выше, стОят уже приемлемо.
Я прошивал XC9572XL-VQ64 этим: http://dangerousprototypes.com/blog/2011/11/01/openschemes-homebrew-svf-player/
Медленно и не всегда с первой попытки, но дёшево и из подручных средств.
Freiwind
14.12.2021, 14:59
Привет! Есть какие подвижки по проекту?
Пока нет.
Платки все еще едут. Сейчас в Екатеринбурге на сортировке.
Немного позже сделал еще вариант на EPM7128. Эти может даже быстрее доедут, так как уже во Внуково.
Но почта сейчас перед НГ тормозит конкретно.
Butylkin
14.12.2021, 20:22
Я прошивал XC9572XL-VQ64 этим....
Ох, витиеватый это путь на сегодняшний день :)
Вывод: бюджетно Xilinx шьется только через LPT.
Обе мои zxuno+zxdos+ прекрасно шьюЦЦа копеечным usb-blaster-ом. Когда-то стОил 200р - бюджетнее не бывает.
Заливать надо файл .bit без всяких извратов.
кЕтайский LPT вроде так и не осилил, возможно я его даже довел до ума, но проверять еще раз не хочу.
valerium
15.12.2021, 11:21
Обе мои zxuno+zxdos+ прекрасно шьюЦЦа копеечным usb-blaster-ом. Когда-то стОил 200р - бюджетнее не бывает.
Заливать надо файл .bit без всяких извратов.
В .bit-файлах я видел прошивки FPGA, здесь речь про мелкие cpld, к ним это применимо ? Что за файл и чем он формируется ?
Мда. Попробовал покомпилить в ISE. Выгружает только в формате .jed
Ну тогда выше Ваше утверждение верно. Хотя в списке поддержки UrJTAG есть и ксайлинковские CPLD. Как то же они их прошивают?!
(значит возможно когда-нибудь и LPT-проггер мне пригодится)
Всем привет! Собрал DivMMC, подключил к "Ленинград-2". Использовал архив из сообщения (https://zx-pk.ru/threads/25361-divmmc.html?p=1090684&viewfull=1#post1090684), только изменил распиновку и подправил код, "заглушив" возможность прошивки флэша - я его, всё равно, прошиваю на программаторе. После исправления собственного огреха, DivMMC заработал. Большое спасибо valerium за помощь при сборке и запуске девайса!
После того, как были исправлены "железные" ошибки, оказалось, что карта, которую я скормил, девайсу не по вкусу. Сперва появляется заставка, т.е. карта определяется (без карты сразу запускается Бейсик), но потом появляется сообщение об ошибке первого же загружаемого файла. Карта нонейм, на 8 гигабайт, HC, FAT32. После того, как я заменил её на старенькую карту SanDisk 128 мегабайт, всё заработало нормально. Это я на всякий случай - вдруг кто-то повторит девайс и увидит то, что увидел я - может подумать, что ничего вообще не работает. А дело в карте...
Тоже собрал девайс по схеме и проекту valerium, подправил пины под себя. Все стабильно работает с HC карточкой на 8гб. Подключил к карабасу 128.
А можно это дело подключить к скорпиону?
А можно это дело подключить к скорпиону?
теоретически да, только надо BetaDisc отключать (divMMC его эмулирует)
Ясно, а что еще? Там же ПРОФ ПЗУ, по NMI вызывается свое меню.
Здравствуйте! Прошиваю программатором DLC9LP Xilinx-IC. Почему при сравнении выдаёт ошибку?Считываю и сравниваю в notepad++ всё нормально.
valerium
08.03.2022, 19:21
Здравствуйте! Прошиваю программатором DLC9LP Xilinx-IC. Почему при сравнении выдаёт ошибку?Считываю и сравниваю в notepad++ всё нормально.
Нет самых важных деталей - в каком софте, во время какой именно операции и какая именно ошибка ?
DivMMC https://ibb.co/zngDGyh https://ibb.co/zngDGyh
Хотел поинтересоваться: а собственно на что влияет объем памяти в divmmc? Чем меньше объем, тем чаще подгружается с карты?
valerium
15.03.2022, 16:30
Хотел поинтересоваться: а собственно на что влияет объем памяти в divmmc? Чем меньше объем, тем чаще подгружается с карты?
Нет. Это не кэш чтения. Карта - не механика и не так уж медленнее ОЗУ, чтоб создавать такой кэш.
Это странички ОЗУ, которые могут мапиться в адреса ПЗУ ( нижние два диапазона по 8к), в них грузится часть *dos (например, все sys-файлы esxdos, если говорить конкретно про него) и какие-то его расширения. Ими же можно заместить ПЗУ, например залив альтернативный дос, который будет заменять ПЗУ вплоть до выключения питания. Вся конфигурация этой памяти переехала с предшественника - divIDE, где самой памяти было значительно меньше распространенных divmmc.
Используется ли это богатство или объем с большим запасом был выдуман в противовес известной фразе про "640к будет достаточно каждому" - вопрос открытый )
ab052san
07.10.2022, 21:02
Вот и я стал счастливым обладателем DIVMMC. За что спасибо огромное товарищу valerium. Вот пост где он выложил свой вариант DIVMMC на Altera EPM3128,https://zx-pk.ru/threads/25361-divmmc.html?p=1132231&viewfull=1#post1132231
как раз у меня имелась одна в запасе после сборки VGA конвертера и опыта работы с Xilinx у меня тоже нет. Мной бала разведена плата под разъем Дельты-С на ресурсе EASY EDA. В связи с большим количеством переходных отверстий плату решил заказать, а не возиться с ее изготовлением. https://disk.yandex.ru/i/ZLanGYGRthsu8g . После сборки и наладки изменил выводы Altera EPM3128 49 и 50 так как перепутал на схеме, и увеличил резисторы R4, R5 до 2кОм для стабильного запуска генератора. И ура заработало! https://disk.yandex.ru/i/SD7-W5h3ozMZ3g https://disk.yandex.ru/i/HnHCESRbQlOBjw Изготовил корпус из обрезков ABS и склеил ацетоном. https://disk.yandex.ru/i/iXWRRYvdjdSLJA https://disk.yandex.ru/i/a7V5b12jlMBsCA
Но в корпусе DIVMMC перестал стабильно читать SD карту а файлы постоянно терял. Перепроверил все в норме, но не работает. И потом вспомнил про шнур от магнитофона при первом удачном запуске он был подключен, вставил шнур и чудо, все заработало. У меня были запараллелены 3 и 5 ножка разъема (у моей дельты-с 5 нога разъема магнитофона выход звука, а не 4ая как на схеме). При отключенном шнуре на выходе 9 нога компаратора 1.9 вольта при замыкании 3 ножки разъема на землю напряжение поднимается до 5 вольт и DIVMMC стабильно работает. https://disk.yandex.ru/i/cDpj9_0NhX8Fug Зашунтировал 3 ногу разъема магнитофон на землю резистором на 1 кОм. (на Ленинграде с доработками до256К DIVMMC заработал сразу без проблем. Зашита ESXDOS 0.8.9)
Схема с прошивкой под эту плату и gerber. (Перевернуты spi datain и spi dataout).77911
valerium
07.10.2022, 21:53
Вот и я стал счастливым обладателем DIVMMC
Респект ! Круто, что поборол и довел до конца )
разъема (у моей дельты-с 5 нога разъема магнитофона выход звука, а не 4ая как на схеме). При отключенном шнуре на выходе 9 нога компаратора 1.9 вольта при замыкании 3 ножки разъема на землю напряжение поднимается до 5 вольт и DIVMMC стабильно работает. Зашунтировал 3 ногу разъема магнитофон на землю резистором на 1 кОм.
Упс... Что за магический компаратор - на магнитофонном входе Дельты ? Как он влияет на какие-то напряжения в divmmc ????
Или магнитофонный вход в Дельте из-за кривой дешифрации пересекается с divmmc и без замыкания 3-й ножки об землю гадит на ШД ?
ab052san
08.10.2022, 15:35
Упс... Что за магический компаратор - на магнитофонном входе Дельты ? Как он влияет на какие-то напряжения в divmmc ????
Или магнитофонный вход в Дельте из-за кривой дешифрации пересекается с divmmc и без замыкания 3-й ножки об землю гадит на ШД ? У меня Дельта-С 52имс, в ней узел чтения выполнен на К554СА3.
Как он пересекается с DIVMMC непонятно, но то что он гадил на ШД это точно. Я больше недели понять не мог что не так, думал может статикой хлопнул Альтерку, пока с корпусом возился. А оказалась что читалка гадит. В моем Ленинграде читалка собрана тоже по этой схеме, только есть различие в номиналах резисторов и на выходе компаратора 5 вольт соответственно при отсутствии сигнала на входе. Но Дельту-С я не стал ковырять и переделывать просто допаял резистор 1кОм прямо на разъем между вх.магн (3) и общий (2).
valerium
13.10.2022, 16:53
У меня Дельта-С 52имс, в ней узел чтения выполнен на К554СА3.
Как он пересекается с DIVMMC непонятно, но то что он гадил на ШД это точно.
Видимо дело в мультиплексорах DD15 и DD16 после компаратора (схема (https://pic.maxiol.com/images2/1613753449.2956684702..jpg)), их выход открывается на ШД совершенно безадресным сигналом /RDKL (на /CS у КП11), в том числе и при обращении к портам divmmc.
Поэтому и при обращении к портам divmmc эти выходы тоже выходят из z-состояния... Дальше, видимо, схватка решается тем уровнем, который с компаратора придет на D5, предположу, что если 1, то это не особо мешает, а если 0 (или шум с компаратора), то это искажает данные на D5 от divmmc. Отсюда "магическое" влияние кабеля, который просто компаратор удерживает в стабильном (предположительно единичном) выходном состоянии.
У меня все ленинграды копаные-перекопаные, дешифрация везде правленая, поэтому на такие грабли никогда не натыкался, хотя тут и предполагали.
Короче, или дешифрацию править, или divmmc не поедет )
Всем привет. Как-то, кажется, в этой теме, понимался вопрос о том, какого объёма ОЗУ достаточно DivMMC для работы. Точнее - после какого объёма не будет улучшения в работе. Насколько я помню, на этот вопрос никто не смог ответить. Если у кого-нибудь появилась информация по этому вопросу - поделитесь, пожалуйста. У меня выбор - ставить 128 или 512 килобайт.
какого объёма ОЗУ достаточно DivMMC для работы.
оно всё разбито на страницы по 8к, ESXdos использует 5шт.
остальное для нужд пользователя
оно всё разбито на страницы по 8к, ESXdos использует 5шт.
остальное для нужд пользователя
Нужды пользователя - пользовательские плагины для ESXDOS? Если так, то, получается, что, если поставить 128 килобайт, то ESXDOS займёт 40 килобайт и, порядка 80 килобайт останется на эти самые нужды. Да, думаю, 128 килобайт будет вполне достаточно...
пользовательские плагины для ESXDOS?
под них отводится одна страница (которая уже входит в эти 40к)
строго говоря для esxdos нужно 32к (если памяти больше, то 8к резервируется под буфер экрана)
возможно объём памяти диктуется не нуждами пользователей, а доступностью/ценой м/с памяти.
В любом случае, получается, что 128 килобайт ОЗУ хватит, да ещё с немалым запасом. Что, собственно, и хотел узнать. Спасибо!
+ тест памяти https://velesoft.speccy.cz/zx/divide/software/divramka.zip
+ тест памяти https://velesoft.speccy.cz/zx/divide/software/divramka.zip
А, да, эту штуку знаю, загружал, когда запускал макет DivMMC на "Ленинград-2", спасибо за помощь valerium.
https://i.ibb.co/qywdgY9/IMG-20230129-113624.jpg (https://ibb.co/5MV6jhv)
https://i.ibb.co/pvHbsLQ/IMG-20230129-113640.jpg (https://ibb.co/gM0mXRd)
Приобрёл плату ZX 128 Spider, которая уже имеет на борту DivMMC, может кто подскажет какую версию DivMMC туда прошивать?
какую версию DivMMC туда прошивать?
у устройства нет собственной прошивки.
сейчас наиболее продвинутая esxdos
https://esxdos.org/index.html
у устройства нет собственной прошивки
DivMMC прошивается в U14, 28С64
Неверно сформулировал вопрос, что прошивать в Xilinx?
"Автор ZX Spider 128 поляк, все актуальные прошивки похоже где-то заныканы, после ссоры с продажами плат на основе выложенных герберов (не для коммерческого использования). Ситуация, конечно, не очень красивая, но тут ещё наложился «бизнес» на «любовь» поляков к русским. Так что я сейчас не знаю, что именно прошивают в чипы Altera и Xilinx российские сборщики этой платы. Ну и самостоятельно туда что-то прошить и обновить тоже не представляется возможным за неимением прошивок. Хорошо хоть этого делать не надо, ибо то что есть работает более-менее нормально. И схемы последней тоже нет, всё что есть — картинка PCB, фото собранной платы и спецификации компонент для сборки платы."
Для Altera прошивка есть у меня, и схему я набросал, а вот с Xilinx выходит проблема но она решаема, нужно просто считать с рабочей платы.
NiKa, https://github.com/mprato/DivMMC/blob/master/cpld_jedecs/divmmc-original.jed
Альтеровский вариант хотелось бы
Shofer, https://disk.yandex.ru/d/MzTK84sfVHGHzQ
Тоже вот наконец-то повторил схему DivMMC на 7128 от Valerium-а. Подключал к Композит-128. Схема действительно проще некуда и заработала можно сказать при первом включении (попалась ПЗУшка кривоватая сначала а после замены всё взлетело). Штука прикольная. Сейчас разбираюсь подробней с ESXDOS. Конструкция получилась малобюджетная (картон+любимый МГТФ (https://pic.maxiol.com/?v=1680464540.1437516476.2.jpg&dp=2)).
Valerium, большое спасибо за такую замечательную схемку!
картон+любимый МГТФ
а вид `платы` снизу ?
valerium
02.04.2023, 23:47
Конструкция получилась малобюджетная (картон+любимый МГТФ (https://pic.maxiol.com/?v=1680464540.1437516476.2.jpg&dp=2)).
Valerium, большое спасибо за такую замечательную схемку!
Красивое ! Обалденно выглядит, даже не сразу ясно, как это вообще возможно из картона.
А за схему спасибо Mario Prato, это его прошивка. Я просто тогда реализовал ее "из добра и палок" )
Осваивал DivMMC и нарвался на уже известную проблему с BASIC-128. Это уже ранее обсуждалось (https://zx-pk.ru/threads/31756-basic128-i-divmmc-esxdos.html) на форуме но решил написать ещё в этой теме.
И кстати такой же эффект с контроллером Эмулятор контроллера дисковода beta disk на AVR (https://zx-pk.ru/threads/30269-emulyator-kontrollera-diskovoda-beta-disk-na-avr.html).
В архиве всё необходимое для исправления этой ошибки.
Безусловно это самый простой вариант, тем более, что микросхема с буферами, стоящая в кабеле из даташита ксилинкса, в прямом смысле заменяется на "пять проводков" для толерантных к 5в CLPD.
Но это если есть, куда вставить эту плату, а я мечтал найти usb-решение для ноута. Впрочем, китайские USB-программаторы, упомянутые чуть выше, стОят уже приемлемо.
прочитав диспуты чем "шить" бинарники в CPLD - решил оставить тут "наводку" OpenOCD (https://openocd.org/pages/getting-openocd.html) - шьет все что угодно и чем угодно по любому интерфейсу!!!! нужен только BSDL файл для CPLD (производитель не имеет значения)
Я работал с этим замечательным софтом через FTDI4232 - "ногодрыгом" через boundary scan JTAG и из под Linux и из под Windows а даже из под Raspberry Pi4 достаточно комфортно работать
Вопрос к форумчанам с опытом сборки сего замечательно девайса.
Насколько проблемно будет подключить его к Балтику. Никаких шин внешних там нет - память не расширена. Было бы круто плтату развести, которая вставляеться в панель Z80 а остальные сигналы дособрать на макетном поле и тоже кабелем передать на плату.
Врядли кто-то такое делал - может кто подскажет куда копать в этом случае))?
Я когда-то давно пытался подключить IDE диск через Nemo но так и не взлетело ... Но зато подключил SIMM36 вместо РУ-шек без расширения
valerium
06.04.2023, 19:52
Насколько проблемно будет подключить его к Балтику. Никаких шин внешних там нет - память не расширена. Было бы круто плтату развести, которая вставляеться в панель Z80 а остальные сигналы дособрать на макетном поле и тоже кабелем передать на плату.
На панели CPU есть все, нужные нам сигналы, кроме /ROMCS, по которому блокируется внутреннее ПЗУ и подменяется на ПЗУ DivMMC. Его придется выводить на какой-то разъем/пятак на плате divmmc и врезаться в сигнал выборки штатного ПЗУ, что в целом несложно.
Так что в целом можно сделать, вопрос в расположении платы - как расположить все остальные элементы вокруг процессора (куда сместить, чтоб в этот самый балтик влезло), в какую сторону направить слот карты и т п.
Если слот карты не ставить на плату, а использовать выносной ардуиновский модуль (с преобразованием уровней заодно), то на плате будет достаточно 6-пинового хедера для такого модуля.
вопрос в расположении платы - как расположить все остальные элементы вокруг процессора (куда сместить, чтоб в этот самый балтик влезло)
вот с этим как раз и нет проблем - у меня плата собиралась и до корпуса "не доросла"
на плату DivMMC можно VGA конвертер на CPLD заодно,звуковой процессор и Raspberry Pi picoW(занимательная игрушка - бейсик наших дней "microPython" позволяет писать программы прям сходу, как рождаеться нужда что-то куда-то передать/принять - жалко никто не довел HDMI выход для отображения видеопамяти в выход HDMI ) - тогда будет полностью доделал до "современного" уровня)))
- - - Добавлено - - -
/ROMCS, по которому блокируется внутреннее ПЗУ и подменяется на ПЗУ DivMMC
я так понимаю что для этого любой CS или OE на корпусе FLASH ROM можно задействовать - отрезав его от земли (по-памяти не помню, как у меня подключена 29C040)
Serg6845
06.04.2023, 20:56
На панели CPU есть все, нужные нам сигналы, кроме /ROMCS, по которому блокируется внутреннее ПЗУ и подменяется на ПЗУ DivMMC. Его придется выводить на какой-то разъем/пятак на плате divmmc и врезаться в сигнал выборки штатного ПЗУ, что в целом несложно.
или например пропустить через ПЛИС /MREQ и /RD и при обращении к адресам ПЗУ их наружу не выпускать, а направлять на ПЗУ DIVMMC (которое на этой же плате). но прошивку ПЛИС надо будет допиливать...
пропустить через ПЛИС /MREQ и /RD и при обращении к адресам ПЗУ их наружу не выпускать, а направлять на ПЗУ DIVMMC
я мало знаком с этим девайсом, но я так понимаю , что при подключенни его, стандартная ПЗУ блокируеттся навсегда и она там не нужна. Версия подправленная будет в DivMMC. Как насчет RAM на борту основной платы? Она тоже не нужна?
Спрашиваю, чтобы понимать суть этого потому что параллельно делаю-развожу под себя вариант "Karabas-Nano" - там он лежит в основе всего компа! Но там задействована RAM огромного размера 2Мбайта (по меркам Синклера) и не является ли это излишкой. Память у меня такая и еще большая имееться - японцы исправно высылают образцы в нужном количестве ))) за что им спасибо!
valerium
06.04.2023, 21:24
я мало знаком с этим девайсом, но я так понимаю , что при подключенни его, стандартная ПЗУ блокируеттся навсегда и она там не нужна. Версия подправленная будет в DivMMC. Как насчет RAM на борту основной платы? Она тоже не нужна?
Нужно и то, и другое. ПЗУ в divmmc - только стартовые 8кб для инициализации (esxdos, например), штатное ПЗУ запрещается при включении дополнительного и включается в противофазе с ним.
ОЗУ divmmc дает доп.странички памяти по 8к в нижних двух адресных диапазонах (т е в адресах штатного пзу), но совершенно не заменяет основное озу.
- - - Добавлено - - -
или например пропустить через ПЛИС /MREQ и /RD и при обращении к адресам ПЗУ их наружу не выпускать, а направлять на ПЗУ DIVMMC (которое на этой же плате). но прошивку ПЛИС надо будет допиливать...
Вариант интересный, даже хочется попробовать это сделать для самообучения, так сказать, но он не универсален и рано или поздно какая-то еще добавленная периферия встанет колом из-за того, что до нее эти сигналы не дойдут. Плюс добавятся задержки этих сигналов из-за дополнитнльных вентилей, хоть и в быстрой ПЛИС.. ну, в общем, риски есть.
Upd: я понял, что напрягает в таком решении: вентили, пропускающие на основную плату /rd и /mreq будут запираться сигналами, формируемыми из них же самих с некоторой задержкой, в результате получим гонки, "иголки" активности на их выходах до их запирания, а к чему это приведет, надо разбираться, но не к стабильности- это точно.
Продолжаю мучить свою конструкцию. Сколько ни запускал яблочную демку но она у меня ни разу без глюков не проходила (Valerium ранее тоже упоминал про краши на последней версии esxDOS). Пробовал прошивать разные версии но без разницы. Я делал свой генератор для DivMMC и изначально поставил кварц на 4МГц. Решил попробовать поменять на 8МГц и сразу всё заработало как положено (прогонял много раз на версии esxDOS 0.8.9). Видимо 4МГц это уже на грани нормальной работы.
А вообще DivMMC мне очень понравилась своим функционалом и максимально простым подключением.
Вот как-то так.
serg_svd
14.09.2023, 16:43
Разъясните, пожалуйста, в чем различие версий прошивок ПЛИС? https://github.com/mprato/DivMMC/tree/master/cpld_jedecs
Что значит allram mode и mapram reset
Думаю обновить прошивку на своей плате, но которую из прошивок следует использовать?
valerium
14.09.2023, 18:33
Разъясните, пожалуйста, в чем различие версий прошивок ПЛИС? https://github.com/mprato/DivMMC/tree/master/cpld_jedecs
Что значит allram mode и mapram reset
Думаю обновить прошивку на своей плате, но которую из прошивок следует использовать?
Исходников на спецверсии нет, но попрообую предположить.
MapRAM-режим есть штатно со времен divide и позвоняет мапить две странички озу divmmc в ПЗУшные адреса спека (два нижние блока по 8кб), включается старшим битом d7 в порт 0xf3.
AllRAM позволяет все странички озу divmmc мапить в адреса пзу, судя по описанию там же (не нашел, чем выбирается страница). Суть та же, свободы больше )
Этот режим в обычном divmmc исходно сброшен с включением питания, а затем если будет включен, то его уже невозможно выключить, не убирая питание, reset Спека всегда выполняет сброс с подменой пзу на то, что загружено в эти странички озу.
И вот в последних обновлениях Марио сказано, что "added jed file with allram mode and mapram reset via out 223,11xxxxxx" -видимо означает, что в этой версии программно можно сбрасывать mapram единицами в два старших бита в порт 223.
Нужно ли это нам? Точно не всем ) Специфические плюшки.
serg_svd
15.09.2023, 09:51
Нужно ли это нам? Точно не всем ) Специфические плюшки.
Думаю мне это не надо. Значит обновлю прошивкой divmmc-original.jed
Спасибо за пояснение!
Z80trdos
15.09.2023, 15:34
DivMMC + Ленинград-1
Приветствую, дорогие любители Speccy!:v2_yahoo:
Нужен совет.
Купил месяца три назад ShamaZX divMMC.
Вчера наконец-то дошли руки, приделал ZXBUS к своему Ленинграду-1.
Воткнул DivMMC, но пока не смог запустить.
Поведение:
1. При включении запускается начальный экран esxDOS, определяется microSD карта, загружаются SYS файлы,
потом немного “задумывается” и перезагружается в режим 48k.
2. Странно, что при нажатии кнопки RESET на модуле DivMMC, компьютер просто перезагружается в режим 48k.
При этом даже не запускается начальный экран esxDOS. То есть поведение, будто бы DivMMC даже не вствалена.
3. Только после выключения-включения можно опять увидеть начальный экран esxDOS.
Как я подключил ZXBUS шину:
1. CLOCK – (A08) 3.5MHz взят с триггера D2 pin8, это инверсный сигнал по отношению к pin6 Z80.
Пробовал также 3.5MHz брать с pin8 D11 (RAS), затем пробовал 7MHz c 5pin или 6pin D2.
2. CSROM – (A25) заведён напрямую на OE (pin22) ROM 27C512. В разрыв старой цепи поставлен резистор 620 Ohm.
3. Все остальные сигналы взяты с процессора:
RESET, INT, NMI, MREQ, IORQ, RD, WR, M1, A0…A15, D0…D7.
4. Ножка 50 DivMMC – (A04) подано +5V.
5. ROM2OE – (A15) 8 ножка DivMMC остаётся не подключена
Правильно? У меня один чип 27C512.
Мой Ленинград-1 сейчас содержит 1MB памяти на SIMM модуле.
В обычном режиме, когда не вставлен DivMMC, компьютер стартует в стандартном меню 128k.
Дешифрация различных портов улучшена, в частности Кемпстон джойстика.
Отключил на всякий случай вход TapeIN и повесил вход мультиплексора на землю.
7948279483
В какую сторону копать? Прошу помочь.
1. При включении запускается начальный экран esxDOS, определяется microSD карта, загружаются SYS файлы, потом немного “задумывается” и перезагружается в режим 48k.Всё хорошо.
2. Странно, что при нажатии кнопки RESET на модуле DivMMC, компьютер просто перезагружается в режим 48k. При этом даже не запускается начальный экран esxDOS. То есть поведение, будто бы DivMMC даже не вствалена.Всё хорошо. Если, удерживая ПРОБЕЛ, нажать RESET, то произойдет инициализаация esxDOS, как при включении.
3. Только после выключения-включения можно опять увидеть начальный экран esxDOS.Всё хорошо.
Что не так-то?
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot