Просмотр полной версии : игровой автомат ZANAC-EX на базе MSX1.5
Привет, решил собрать себе "игровой автомат" https://flic.kr/p/2h8LArM с любимой игрушкой ZANAC-EX, что не говорите а COMPILE были просто богами в программировании вертикальных "стрелячек" (aleste, aleste2, zanac, zanac-ex... ну последний zanac neo уже мусор), сколько не видел всяких игр по качеству разве что sky shark на zx может приблизиться все другие увы "не тянут".
Но что-то не могу запустить, решил спросить тут кое какие вопросы:
1. вот в схемах msx есть кусок на 74ls74 где формируется сигнал ~WAIT' для процессора из ~CLK ~WAIT и ~M1, я пока что его не делал, просто подал сигнал ~WAIT из видеопроцессора, это критично? зачем эта задержка нужна в MSX?
2. в attache моя конфигурация для CPLD, но тестов на это дело писать не умею, может ктото подскажет правильная она или нет? или как тест написать
3. может есть какой нибудь test ROM чтоб можно было "потестировать"? Ато сейчас зашил ту прошивку что в attache.
блин приатачить ниче не дает, потому ссылки
https://sites.google.com/site/bigralsbay/home/unknown-rom-images/msx2_zanac_ex.rom.BIN?attredirects=0&d=1
https://sites.google.com/site/bigralsbay/home/unknown-rom-images/msx_eng.vhd?attredirects=0&d=1
Black Cat / Era CG
01.09.2019, 16:36
Версия для НЕС нравилась, но жестокая, блин!
Wierzbowsky
01.09.2019, 22:33
То, что я вижу в аттаче представляет собой набор из биоса, саброма, 64кб пустого места и ROM дампа игры в одном файле. Как это всё ложится в память? Игра должна стартовать с 0х4000 и для неё должен быть включен маппер.
То, что я вижу в аттаче представляет собой набор из биоса, саброма, 64кб пустого места и ROM дампа игры в одном файле. Как это всё ложится в память? Игра должна стартовать с 0х4000 и для неё должен быть включен маппер.
Ага.. Маппер там есть в CPLD ASCII 16
там же и адреса можно устаканить
а вот WAIT- сигнал надо бы сделать так что-бы было как в оригинале (увеличенный такт М1) Аркадные игры очень чувствительны к малейшему не соответствию временных характеристик железа или ошибок в эмуляции выполнения кода
и если "хватит места" в CPLD то WAIT пропустить через неё (+M1) что бы уж на рассыпухе не делать а выход WAITс видеопроца можно (1. не цеплять 2. цеплять по схеме ОК (общий коллектор) 3. пропустить через отдельный вход на CPLD и сложить там)
схемотехнику формирования можно подсмотреть скажем тут : https://zx-pk.ru/threads/27898-modulnyj-kompyuter-%E2%80%93-msx-ext.html
в файле модульCPU.pdf в верхнем левом углу
Версия для НЕС нравилась, но жестокая, блин!
на NES играть не пробовал, но по виду такая же крутая как и на MSX2 (ну ясное дело что не идеал так как мерцания спрайтов никто не отменял ни на MSX2 ни на NES, там уже тяжело понять какая из версий мерцает больше...)
- - - Добавлено - - -
а вот WAIT- сигнал надо бы сделать так что-бы было как в оригинале
это можно сделать и потом? или оно без этого вообще не заработает?
это можно сделать и потом? или оно без этого вообще не заработает?
Можно потом,
на MSX это вроде бы делалось для того что бы DRAM память тогдашняя успевала за операциями процессора
OrionExt
02.09.2019, 15:37
вот в схемах msx есть кусок на 74ls74 где формируется сигнал ~WAIT' для процессора из ~CLK ~WAIT и ~M1, я пока что его не делал Железо и БИОС жестко связаны между собой по таймингам. Если чего править одно, нужно править и другое. Если это не сделать, возможны всякие непонятки в самый неожиданный момент.
просто подал сигнал ~WAIT из видеопроцессора, это критично? Не стоит. Читайте выше.
зачем эта задержка нужна в MSX?
Тяжелое наследие прошлого (начало 80г.)
может есть какой нибудь test ROM чтоб можно было "потестировать"? Начал бы с простого. Минимальный тест (https://zx-pk.ru/threads/25517-msx-raznoe.html?p=919800&viewfull=1#post919800) на работоспособность всего этого безобразия. Зашивается за место main-bios. Это (https://zx-pk.ru/threads/25517-msx-raznoe.html?p=920199&viewfull=1#post920199) то, что должно показать.
- - - Добавлено - - -
О вайтах, добавлю. Может, у кого возникнут вопросы. А как же режим турбо? На самом деле не все так плохо. Да будет потглючивать. Для этого правят игры.
Основная трабла с VDP. ASCII включила режим "упороться " (хотим TMS, не простой, а золотой) в отношении VDP. Чем это закончилось всем известно.
Начал бы с простого. Минимальный тест (https://zx-pk.ru/threads/25517-msx-raznoe.html?p=919800&viewfull=1#post919800) на работоспособность всего этого безобразия. Зашивается за место main-bios. Это (https://zx-pk.ru/threads/25517-msx-raznoe.html?p=920199&viewfull=1#post920199) то, что должно показать.
Влепил это дело, видел ту заставку раза 4..5 из 50 запусков... добавил wait на железной 7474, менял DRAM микрухи ничего, нет стабильной инициализации VDP.
Странное дело, активность на шине данных DRAM почти всегда разная, на 1-й или чаще 2-х линиях одной и той же микрухи часто "пропадает" активность (ну т.е. она как бы есть но очень слабо по сравнению с другими линиями), и это не всегда на той же самой линии данных, то на одной линии "тишина" то на другой... что это такое?
update 16.09.2019: по моему я понял в чем затык, я подал oe_l сигнал от dram на землю! а это по идее создает конфликт как минимум когда we_l=0... не подскажите как правильно сформировать oe_l если заранее не известно что будет в цикле обращения к памяти we_l=0 или we_l=1
update 17.09.2019: посмотрел схемы с tms4464 таки oe_l сидит там жестко на земле, значит не обязательно им управлять если доступ и так разнесен по cas1_l cas0_l... опять не ясно куда копать, наверно надо делать железную схему выборки VDP и сравнивать ее работу с сигналом формируемым CPLD-шкой...
OrionExt
22.09.2019, 15:15
Влепил это дело, видел ту заставку раза 4..5 из 50 запусков...Тест до безобразия прост, озу не использует, обмен идет между цпу-пзу-vdp и зациклен на начало. Написан для TMS9918, так что с инициализацией V9958 не должно быть проблем.
Была заморочка со сбросом V99XX (крутой фронт сброса, как я понял). Не успевала инициализироваться палитра. Проявлялась как отсутствие или маленький размах амплитуды rgb. Вряд ли в этом проблема, но все же.
наверно надо делать железную схему выборки VDP и сравнивать ее работу с сигналом формируемым CPLD-шкой...Может все лишнее из CPLD выкинуть и оставить только необходимый минимум для запуска. Или запустить код CPLD на FPGA средней жирности и рассмотреть внимательно в симуляторе что там и как.
Была заморочка со сбросом V99XX (крутой фронт сброса, как я понял). Не успевала инициализироваться палитра. Проявлялась как отсутствие или маленький размах амплитуды rgb. Вряд ли в этом проблема, но все же.
я думал ранее что наоборот чем более "крутые фронты" тем лучше... а тут наоборот надо вешать кондер на землю? надо чтобы vdp быстрее z80 сбросился или медленее? как это "Не успевала инициализироваться палитра" оно ж "по кругу" пишет одни и те же данные в vdp
Может все лишнее из CPLD выкинуть и оставить только необходимый минимум для запуска. Или запустить код CPLD на FPGA средней жирности и рассмотреть внимательно в симуляторе что там и как.
хм... интересная мысль, типо сначала проверить работу каким-то микроконтроллером подключенным к какойто devboard... и написать через serial на терминал что там не так. Но тут наверно с fpga будет больше мороки, там же 3.3v уровни, надо контроллер брать 3.3v... stm? arduino не покатит, ну или надо еще преобразователи вешать для arduino. Наверно проще втыкнуть ардуину прямо в контакты панельки где z80 стоит и снять результат сразу с этой самой CPLD-хи... там она 5v tolerant
OrionExt
24.09.2019, 15:22
я думал ранее что наоборот чем более "крутые фронты" тем лучше... а тут Точнее дело было так. Схема сброса была сделана на двух логических элементах (триггер шмитта). Далее сброс поступал на LS244 и потом на VDU. Так вот пришлось уменьшить резистор в цепи обратной связи двух логических элементов. Иначе оно (V99ХХ) ни как стабильно не заводилось. Выводы делайте сами.
как это "Не успевала инициализироваться палитра" оно ж "по кругу" пишет одни и те же данные в vdp Тест не пишет палитру, он для TMS. А в силу совместимости работает на любом VDU MSX.
хм... интересная мысль Думалось запустить код на FPGA c софтовым T80, железка реальная не понадобится. И посмотреть в симуляторе работу основных узлов. Простые тестики для Z80 писать прямо во встроенное ОЗУ FPGA. Мне так ведется проще, не селен я в CPLD/FPGA.
Еще отдельно можно сделать ного-дрыг для VDU, убедится рабочий ли он. Что я и проделывал на ардуине, когда не мог понять, почему не работает MSX1 в минимальной конфигурации. В общем, вариантов множество.
ага, значит тогда такие дела:
1) можно ли подхачить тест чтоб он палитру тоже инициализировал, ну чтоб исключить вариант что все работает насамделе только не показывает;
2) про схему "триггер шмитта" с резистором обратной связи, не могу шото сообразить что оно такое и как работает? можно картинку? у меня сейчас обычная схема на конденсаторе (с диодом направленным в сторону шины питания) выдающая уровень 3.3v (cигнал reset_l);
3) собирать половину msx-a в fpga это конечно тоже прикольная идея... наверно можно и посмотреть как там в one_chip_msx все сделанно и оттуда код выборки vdu стянуть;
4) а скетч остался для ардуины? прикольная штука для проверки vdp на breadboard-e, я так проверял mb81c4256 (правда изза тормозов этих скетчей там скорость тормознутая, думаю если написать на асме то можно дойти до скорости при которой этот dram уже не будет успевать писать\читать и таким образом узнать реальные параметры конкретной dram микросхемы)
OrionExt
24.09.2019, 20:10
можно ли подхачить тест чтоб он палитру тоже инициализировал Можно. Теперь фон будет желтый (дефолтный белый изменен на желтый).
про схему "триггер шмитта" с резистором обратной связи, не могу шото сообразить Module CPU Z80 (https://zx-pk.ru/attachment.php?attachmentid=61778&d=1500878331). U3-3, U3-4, R9 изменен на 6к2.
а скетч остался для ардуины? Давно это было. Потерялся где-то. Припоминаю, что там была совсем примитивная фигня. Вроде бордюром (фоном) мигало.
Воо, это тест толковый сразу показал вот это https://flic.kr/p/2hkDSAb ну надо сказать что четко reset не работает таки, потому наверно надо такой же триггер шмидта запилить. Видеосигнал паршивый у меня смотрю, налепил по этой схеме https://flic.kr/p/2hkBgmZ, но видать шото тут не то, оно ж по RGB генерит сигнал от +0.5v до -0.8v а по CSYNC вообще от +0.2v до -3.0v, а как я себе представляю все эти RGB и SYNC должны быть в пределах +0.7v...+0.1v да?
OrionExt
25.09.2019, 17:43
четко reset не работает таки, потому наверно надо такой же триггер шмидта запилить. Думаю не стоит, дело в чем-то другом. Но если очень хочется, то можно собрать на подобной штуке DS1233-5. На нем у меня и был собран сброс и работал, пока я не локализовал проблему в модуле z80.
Видеосигнал паршивый у меня смотрю, налепил по этой схеме https://flic.kr/p/2hkBgmZ. У меня по такой же схеме видео выход сделан. Не сказать что идеально, но на твердую четверку показывает. Кстати вертикальные чередующие полосы тоже есть, если очень хорошо присматриваться. А вот с таким цветным шумом не сталкивался. Надо блок питания посмотреть, что он там по пульсациям выдает (у меня трансформаторный + кренк-а). И обратить внимание на ноги питания DAC у VDU - 20, 21. Питать их через RC-фильтр (низко-омный резистор и танталовый конденсатор, или чего то подобное).
RGB и SYNC должны быть в пределах +0.7v...+0.1v да? Ну да, но в своей схеме ничего не подбирал и не мерил что она по амплитуде выдает, все работает и так.
ok, видеопроцессор и ROM + Z80 как-то там работают, а как проверить все остальное? надо бы теперь тест на i8255 + RAM + ay8910
та ПЗУ что я сочинил не пашет, интересно изза чего:
1) будет ли работать ПЗУ MSX2 без подключенного ay8910?
2) сейчас к выводам i8255 подключенна токо slot-переключатель часть и ничего более, ну т.е. выводы клавиатуры и кассетные просто висят в воздухе, запустится ли MSX2 ПЗУ в таком виде?
по поводу часов, вроди бы я зашил ту ПЗУ в которой инициализации часов нету
OrionExt
28.09.2019, 19:47
На первых порах достаточно добиться устойчивой работы с конфигом MSX1 и все.
1) будет ли работать ПЗУ MSX2 без подключенного ay8910? Будет.
2) сейчас к выводам i8255 подключенна токо slot-переключатель часть и ничего более, ну т.е. выводы клавиатуры и кассетные просто висят в воздухе, запустится ли MSX2 ПЗУ в таком виде? Надо бы порт B i8255 подтянуть резисторами к питанию. А так должно запуститься.
И не плохо бы схему увидеть, чтобы не гадать на кофейной гуще.
И не плохо бы схему увидеть, чтобы не гадать на кофейной гуще.
Основная часть схемы в CPLD, её конфиг выложен в первом сообщении.
Ножки клавиатуры и slot переключателя подтянул через 10к на +5в, теперь висят в 1, ничего не поменялось.
Поставил тут процессор CMOS, фронты у него конечно намного четче чем у NMOS, и он в отличие от NMOS, с этим ROM что я сочинил, сразу впадает в "коматоз" - на шине данных либо единицы либо какая-то частота (иголки) с размахом менее 2-х вольт... странное дело, вроди как процессор должен работать всегда (это ж не pdp-11, который будет ждать подтверждения прерывания вечно если оно не прийдет)? После нажатия на сброс раз 20 можно таки добиться того что процессор начинает шото делать и на шине данных появляется активность. С NMOS процессором такого не происходит, тот что-то творит всевремя.
Эх нужны отдельные тесты для i8255, памяти и ay8910. Сначала тест слотового переключателя который бы поочередно подключал бы все слоты поочереди во второе, третье и четвертое окно (первое окно как я понимаю трогать нельзя потому как в нем этот тест и запущен будет). Установив такой тест можно осцилографом обнаружить частоту на выходах слотового переключателя (так же само наверно можно протестировать выводы i8255 на магнитофон и клавиатуру). Потом если i8255 рабочая то можно тест ОЗУ в slot3 пускать, там по идее надо во второе третье и четвертое окно включить slot3 и убедиться что в них ОЗУ работает (в первое окно тоже надо бы... но то сложнее надо код переносить в другое окно и запускать из него.. что муторно). Ну и последний тест наверно тест ay8910 который генерит звуки и частоту на его I/O выводах.
А есть исходники этого test_v2 с желтым экраном? Может на основе его создадим еще 3 прошивки которые помогут отдельно i8255, память и ay8910 "довести до ума" ? Раз MSX модульный комп то и тесты можно сочинить для каждого модуля...
OrionExt
30.09.2019, 16:01
Жаль, что нет схемы. Пока с определенной уверенностью можно сказать, что VDP исправен. Это хорошо. А вот все остальное плохо. О тестах пока говорить рано.
на шине данных либо единицы либо какая-то частота (иголки) с размахом менее 2-х вольт... Смахивает на конфликт на шине данных. Это надо устранять. По мне надо убрать все, что нам пока не нужно и возможно мешает. В CPLD интересна только обвязка ROM (32k), RAM (64k, без маппер-а), CPU, PPI (порт А и узел слотов).
Посмотрел еще раз код CPLD, что-то есть знакомое и понятное, что-то не понятно. Тут симулятор в помощь, но этим я заниматься не буду.
Вопрос на будущее. Как будете читать маппер RAM? Шина данных в CPLD, только на ввод.
Вопрос на будущее. Как будете читать маппер RAM? Шина данных в CPLD, только на ввод.
Так там нету никакого mapper-a для RAM, RAM там стоит 64кб в primary slot3 и все. mapper только для ROM (ascii16 стандарта) в slot2 (при условии что он не отключен перемычкой снаружи).
Я ж и название такое же дал - MSX 1.5+, подразумевая Ваши наработки по MSX EXT, где сначала тоже небыло расширителей primary slot-ов с mapper-ом для RAM внутри одного из расширенных slot-ов... Как я понимаю название это продиктованно тем что это уже не MSX-1, потому что VDP уже от MSX2+, но так как в MSX2 обычно был mapper RAM в одном из расширенных slot-ов (что конечно по спецификации не обязательно... но вроди бы не выпускали таких MSX2 компов без расширителя слотов) то это еще не полноценный MSX2.
Конфликт на шине данных наверно единственное правильное обьяснение данной ситуации, тесты бы очень помогли... кто может помочь с написанием тестов? Кто крутой хакер в MSX, отзовитесь!
Wierzbowsky
02.10.2019, 11:42
А шина данных подтянута к питалову? Вроде без этого никак.
А шина данных подтянута к питалову? Вроде без этого никак.
Конечно, через 10к резисторы. Тут как-раз в параллельной ветке народ обсуждает кр1806вм3 который CMOS 5v, и его согласование с TTL микрухами, конечно у Z80 все гораздо проще похоже, наверное CMOS версия Z80 проектировалась такой чтобы без переделки схем заменять NMOS версию.
OrionExt
02.10.2019, 14:49
А шина данных подтянута к питалову? Вроде без этого никак.
Конечно, через 10к резисторы.Вот таки нужна схема!
Ладно. Асинхронные триггеры в CPLD будет еще тот источник глюков. Ну, ладно. Раз все так плохо. Предлагаю сосредоточить внимание на тесте VDP (первоначальной версии). ОЗУ тесту не нужно. Достаточно дешифратора I/O (VDP), ПЗУ и CPU. И добиться, что бы работал, как часы.
Вот таки нужна схема!
гы, дык схема реально не существует :) я чего сделал:
1. поставил на плату z80, i8255, 27c1000, 62512, v9958+(4*81c4256 4464 не было :( ), ay8910, epm3064-atc100 (100pin);
2. соединил все шиной данных и шиной адреса, без всякого лукавства, ну т.е. a0->a0, d0->d0, wr_n->wr_n и т.д. (ну ясное дело что там a14, a15, a16, a17 для ROM завел с CPLD, ну там внутреннюю шину между vdp и dram тоже как положенно, всякие cs_wr, cs_rd для vdp и oe_n для ROM естественно формирует CPLD в самой прошивке vhdl все сигналы названны четко и понятно);
3. аналоговая часть не важна по сути, ну там содрал все с чужих схем, там где формирование reset, rgb out;
4. еще есть цепи питания, подтяжки неиспользуемых сигналов на 1, интерфейс программирования CPLD - по ним все по даташиту микрух подал;
Ладно. Асинхронные триггеры в CPLD будет еще тот источник глюков. Ну, ладно. Раз все так плохо. Предлагаю сосредоточить внимание на тесте VDP (первоначальной версии). ОЗУ тесту не нужно. Достаточно дешифратора I/O (VDP), ПЗУ и CPU. И добиться, что бы работал, как часы.
А шо по триггерам может быть не то? их там аж 3. 1-й держит slot_enable и еще 2 держат 3-bit регистры mapper-a ascii16 (которые пока что вообще не имеют сброса, хотя наверно надо их устанавливать по сбросу в 0 и 1? тут не уверен как этот картридж вообще работает, там в каждой странице есть стартовый код? или по сбросу надо включать страницы 0 и 1?);
test_V2 работает нормально, показует желтый экран и надпись hello world...
теперь как писал уже выше нужны еще пару тройку тестов...
OrionExt
02.10.2019, 16:21
гы, дык схема реально не существует :) Надо себя заставить. Мне очень помогает спустя более 3 лет старта проекта MSX-EXT или сколько там, склероз уже :)
А шо по триггерам может быть не то? Хз. Поддался общей панике. Шеф все пропало у клиента асинхронные триггеры :)
теперь как писал уже выше нужны еще пару тройку тестов... Дальше особо нечего тестировать. Необходим конфиг MSX1. ОЗУ у нас статика (могли быть траблы с ДОЗУ). Ставим биос MSX1. После рестарта начинается движуха (поиск и тестирование ОЗУ) на порте A PPI. Через несколько секунд движуха останавливается и порт A PPI фиксирует раскладку слотов барсика (предположу - слот 0, слот 0, слот 3 и слот 3). Все!
P/S. Справедливости ради. Когда тестил первые запуски. Подключал китайский аналалайзер за $4 (8 каналов) и смотрел на обрубке шины данных (6 бит) первые 10 команд Z80.
MSX удивительно толерантен к железу (бо сделан по уму), и брыкается только в случаях, когда совсем капец.
- - - Добавлено - - -
ЗЫ. Может вдруг, нужен целевой тест PPI. Но тут я уверен вы и сами справитесь ;)
Надо себя заставить. Мне очень помогает спустя более 3 лет старта проекта MSX-EXT или сколько там, склероз уже :)
та охота сначала чтоб оно взлетело, тогда можно будет потренироваться и сочинить в proteus вродибы как можно и схему и симуляцию и даже печатную плату... но то уже когда будет шото работать
Дальше особо нечего тестировать. Необходим конфиг MSX1. ОЗУ у нас статика (могли быть траблы с ДОЗУ). Ставим биос MSX1. После рестарта начинается движуха (поиск и тестирование ОЗУ) на порте A PPI. Через несколько секунд движуха останавливается и порт A PPI фиксирует раскладку слотов барсика (предположу - слот 0, слот 0, слот 3 и слот 3). Все!
гы... надо попробовать
ЗЫ. Может вдруг, нужен целевой тест PPI. Но тут я уверен вы и сами справитесь ;)
хм, ну дык вот я ранее и писал об этом:
Эх нужны отдельные тесты для i8255, памяти и ay8910. Сначала тест слотового переключателя который бы поочередно подключал бы все слоты поочереди во второе, третье и четвертое окно (первое окно как я понимаю трогать нельзя потому как в нем этот тест и запущен будет). Установив такой тест можно осцилографом обнаружить частоту на выходах слотового переключателя (так же само наверно можно протестировать выводы i8255 на магнитофон и клавиатуру). Потом если i8255 рабочая то можно тест ОЗУ в slot3 пускать, там по идее надо во второе третье и четвертое окно включить slot3 и убедиться что в них ОЗУ работает (в первое окно тоже надо бы... но то сложнее надо код переносить в другое окно и запускать из него.. что муторно). Ну и последний тест наверно тест ay8910 который генерит звуки и частоту на его I/O выводах.
Конечно можно покопаться с доками i8255 и попробовать самому сочинить, но там же надо режим вывода для порта А сначала установить, чтоб в него писать можно было потому не уверен что тест правильный напишу а тестировать неправильным тестом это конечно жесть.
OrionExt
02.10.2019, 18:33
PPI не VDP :D Всего 4-е ригистра. В MSX работает в режиме 0.
После сброса работает в mode 0, три порта на ввод. Стоит записать управляющее слово (порт А - вывод). Порт A сбрасывается в 0 (msx слоты довольны, 00.00.00.00) :D
- - - Добавлено - - -
Кстати это топорное использование PPI (порт А) можно (видимо) перенести в CPLD (- 8 входов). И clk добавить в CPLD. Красота.
короче у меня какойто затык с этим PPI, получается после сброса сразу срабатывает slot_enable и после этого дико запрашивает RAM а ROM вообще не опрашивает, что говорит о том что врубился железно slot3 во всех окнах... а PPI при этом как я понял не проинитился, потому что у него все выводы отведенные для slot управления в 1 (я ж их подтянул к 1), надо как то чтобы сначала вписалось значение в ppi и выставились все конфиги слотов а потом уже и slot_enable гнать, ато оно сходу лепит RAM во все 4 окна и не успевает в ppi вписать значение для slot-ов
или надо к 0 было притянуть выводы слотового конфигуратора?
OrionExt
06.10.2019, 18:39
Не знаю, прошивка CPLD самодельная или использовались источники. Буду отталкиваться от своего модуля PPI (https://zx-pk.ru/threads/27898-modulnyj-kompyuter-%E2%80%93-msx-ext.html?p=920838&viewfull=1#post920838) и исходников BIOS (https://zx-pk.ru/threads/27653-ocr-listing-msx-bios-the-complete-msx-basic-i-o-listing.html?p=910390&viewfull=1#post910390).
получается после сброса сразу срабатывает slot_enable Этого не должно быть. После сброса сигнал /SLTEN не активный. Порт A PPI игнорируется. И схема на U8 и U9-1 обеспечивает удержание слота 0 на всех страницах. После первой записи управляющего слова в PPI порт А конфигурируется на вывод и сбрасывается в ноль. А также активируется сигнал /SLTEN. Что разблокирует схему на U8, U9-1 и разрешает работу порта А PPI в качестве регистра слотов.
или надо к 0 было притянуть выводы слотового конфигуратора? В этом нет необходимости (рассказано выше).
Этого не должно быть. После сброса сигнал /SLTEN не активный. Порт A PPI игнорируется. И схема на U8 и U9-1 обеспечивает удержание слота 0 на всех страницах. После первой записи управляющего слова в PPI порт А конфигурируется на вывод и сбрасывается в ноль. А также активируется сигнал /SLTEN. Что разблокирует схему на U8, U9-1 и разрешает работу порта А PPI в качестве регистра слотов.
сначала /SLTEN не активный, но как токо выставляется /PPI сигнал (который еще и не учитывает A2) то сразу становится активным, что у меня и происходит (так как стоит прошивка msx-1), вот по листингу
0691 02D7 3E 82 LD A,82H ;Port A - output (mode 0)
0692 02D9 D3 AB OUT (PPI.CM),A ;Port B - input (mode 0)
0693 02DB AF XOR A ;Port C - output (mode 0)
0694 02DC D3 A8 OUT (PPI.AW),A ;Select slot 0 for all addresses
как токо сработал 1-й OUT то уже /SLTEN активный! ну и значит что код команды для XOR A уже будет выбираться с использованием схемы маппера (и тут важно чтобы по сбросу в i8255 регистр A содержал значение 0 в D0 и D1 битах), но у меня похоже что либо не отрабатывает запись в PPI.CM регистр, либо после сброса там в A регистре 0xFF :( и оно начинает в slot3 молотить бешенно в неинициализированный SRAM.
...либо после сброса там в A регистре 0xFF :( и оно начинает в slot3 молотить бешенно в неинициализированный SRAM.
у ВВ55 по сбросу в ее регистрах именно 00, а не FF. Как вариант в коде сделать вначале запись в портА 00, а затем уже записать конфигурацию, проверить этот узел и двигаться дальше.
XOR A
OUT (PPI.AW),A
LD A,82H
OUT (PPI.CM),A
OrionExt
08.10.2019, 13:23
Как вариант в коде сделать вначале запись в портА 00, а затем уже записать конфигурацию, проверить этот узел и двигаться дальше. Не не не. LD A,82H : OUT (PPI.CM),A – достаточно.
сначала /SLTEN не активный, но как токо выставляется /PPI сигнал (который еще и не учитывает A2) то сразу становится активным Во. Это оно :)
Но в этой стройной логике есть одна кака. PPI может не успеть инициализироваться. В варианте на расыпухе это решалось подтягиванием сигнала /SLTEN конденсатором на землю. Ход стандартный. А для CPLD нужен костыль.
надо к 0 было притянуть выводы слотового конфигуратора?Или делать задержку на логических элементах для /SLTEN. Где-то видел способ как эту белиберду растолковать компилятору. Но, мое мнение, надо делать синхронный дизайн, путем завода сигнала CLK CPU на CPLD. Бо видимо это первые цветочки, а ягодки будут впереди.
Отвлекусь. Я вот тоже подумываю утилизировать тройку не дорогих плат с Циклоном 2 с толком для MSX. Дожились :) Так там без синхронного дизайна ни как. Вот так эти CPLD/FPGA задуманы. Пока есть одна трабла. Не кушают циклоны 2 сигнал 3.5МГц в виде клока (pll точно не ест. с глобальным клоком надо пробовать).
Но в этой стройной логике есть одна кака. PPI может не успеть инициализироваться. В варианте на расыпухе это решалось подтягиванием сигнала /SLTEN конденсатором на землю. Ход стандартный. А для CPLD нужен костыль.
ГЫ! так нету на твоих схемах такого "Ход стандартный." Это другое дело конечно, потому что таким "ходом" можно добиться того что аж:
XOR A
OUT (PPI.AW),A
успеет отработать! хм, тогда наверно надо подтянуть таки выходы управления слотами через какойто жирный (50к ?) резистор на массу а этот самый /SLTEN сделать по posedge /PPI а не по negedge.
Или сам сигнал /RESET процессора должен приходить гораздо позжее чем сигналы /RESET для VDP PPI PSG ?
OrionExt
08.10.2019, 16:37
ГЫ! так нету на твоих схемах такого "Ход стандартный." Это другое дело конечно, потому что таким "ходом" можно добиться того что аж: Что сказать ГЫ! ГЫ! Это очевидно. Медленная логика, против CPLD. Проверь еще! Возможно, начнется дальше, что я не смогу объяснить.
успеет отработать! хм, тогда наверно надо подтянуть таки выходы управления слотами через какойто жирный (50к ?) резистор на массу а этот самый /SLTEN сделать по posedge /PPI а не по negedge. Раз 3 говорю, завязывайте с этой котовасией (цлк на вход цплд).
Или сам сигнал /RESET процессора должен приходить гораздо позжее чем сигналы /RESET для VDP PPI PSG ? Тут совсем не понятно.
add:
как токо выставляется /PPI сигнал (который еще и не учитывает A2) то сразу становится активнымВыделил жирным, о чем речь. В моей схеме А2 работает. Это уроки от BEER-IDE как надо делать схемы. Для нас (Вас) А2 не критично, фирменный дешифратор MSX перебирает через 8 байта I/O.
Не прошло и полгода как я решил таки разобраться сам как писать тесты, тем более что народ меня просветил в другой ветке что vhdl и verilog это вообщето изначально были языки созданные для симуляции и моделирования логических систем а не для синтеза прошивок! т.е. надо было сначала учиться тесты писать а потом уже прошивки.
Ну вот короче https://www.edaplayground.com/x/2rJP
По симуляции пока что не нашел проблем с прошивкой, вроди как пашет и vdp (что на практике так и есть, токо чегото надо было спец тест с желтым цветом чтобы это увидеть), так же показует что обращение к ppi тоже есть.
Напрашивается вариант с неправильной работой сигнала сброса, ну т.е. вероятная причина не работы в том что z80 сильно рано начинает работать и vdp и ppi еще не успели сброситься, потому команды от z80 просто игнорируются, а прошивка написанна так что она подразумевает что vdp и ppi готовы к работе при сбросе z80. Намутил тут кучку vhdl кода с внутренними счетчиками и внешним clk чтоб типо сначала происходил сброс vdp и ppi а z80 все это время висел в состоянии reset_n <= '0', но потом посчитал это за слишком дорогое решение, тратить еще ресурсы cpld на схему которую положенно лепить в аналоговом виде?! это все fpga-шный стиль неуместный для такой конструкции "на коленке" как этот аппарат. Потому прошу Ваших вариантов аналоговой схемы на кондерах ну или может одновибраторах которая надежно будет генерить сигнал сброса для ppi + vdp + slot_enable триггер внутри cpld, а гораздо позжее запускать z80!
И еще вопрос по мапперу ascii16, как он должен по сбросу быть установлен, никто не знает?
OrionExt
22.10.2019, 18:53
По симуляции пока что не нашел проблем с прошивкой, вроди как пашет и vdp (что на практике так и есть, токо чегото надо было спец тест с желтым цветом чтобы это увидеть) Не понятно. Тест что с палитрой, что без палитры работает одинаково, т.е. пишет в порты VDP.
Напрашивается вариант с неправильной работой сигнала сброса, ну т.е. вероятная причина не работы в том что z80 сильно рано начинает работать и vdp и ppi еще не успели сброситься, потому команды от z80 просто игнорируются, а прошивка написанна так что она подразумевает что vdp и ppi готовы к работе при сбросе z80. :v2_dizzy_aaaaa: Зачем так сложно? Достаточно одного источника сброса (супервизор, например. еще и за питанием следит).
Правда с FPGA (а может и c CPLD, тут не уверен) есть одна заморачка. После включения питания FPGA требуется некое время для переброса прошивки из конфигурационного ПЗУ в ОЗУ. Так вот выходит что компьютер уже стартанул, а FPGA еще не прогрузилась. По мне решается это схемой И (схема ОК). Т.е. надо как бы продлить сброс до готовности FPGA и потом уже отпустить сброс сигналом от FPGA.
И еще вопрос по мапперу ascii16, как он должен по сбросу быть установлен, никто не знает? Вот инфа (http://bifi.msxnet.org/msxnet/tech/megaroms) о мэпперах.
Вот инфа (http://bifi.msxnet.org/msxnet/tech/megaroms) о мэпперах.
только нашел этот адрес, здесь (http://www.nedopc.org/forum/viewtopic.php?f=96&t=18820&start=45#p144121), как OrionExt меня опередил :). Вообще по возможным конфигам msx машинок и вариантам схемных реализаций первую четверть этой (http://www.nedopc.org/forum/viewtopic.php?f=96&t=18820) темы можно почитать и, при необходимости, в Протеусе свои решения проверить.
Wierzbowsky
22.10.2019, 19:06
Держите сигнал WAIT пока не загрузится прошивка в FPGA. Многоуважаемый Ptero сделал такой мод для Карнивора. Отлично работает.
OrionExt
22.10.2019, 19:33
Держите сигнал WAIT пока не загрузится прошивка в FPGA. Многоуважаемый Ptero сделал такой мод для Карнивора. Отлично работает.Можно и вайт, но логичней все же использовать ресет. Предположу, почему использовали вайт. Как известно по спецификации сигнал вайт с открытым коллектором, а ресет нет. Так то оно так на бумаге, а в жизни не всегда так. По этому надо всегда ставить в разрез сигнала диод. И тогда можно и ресет использовать.
есть такая задумка: сигнал reset_n формировать как обычно в схемах типичного zx spectrum клона, подавать его на ppi, vdp и cpld (slot_enable + ascii16 mapper) а для z80 пропускать через одновибратор http://www.diagram.com.ua/info/rad_nach/q.gif
OrionExt
22.10.2019, 21:51
Кашу маслом не испортишь, если в нем не будет надобности, потом не долго и демонтировать.
блин сделал "заторможенный" сброс z80, понизил частоту проца в 2 раза на случай ВВ55 не успевает, запустил мини тест ВВ55 - все пофиг https://flic.kr/p/2hB6zwZ тут снял логическим анализатором основные сигналы, не пашет выдача в порт единиц и все тут, при этом такое впечатление что выходы вв55 в Z состоянии потому что если дотронуться щупом осциллографа и пальцем одновременно то видны "наводки" такие же как и просто пальцем до щупа дотронуться
вот этот тест пустил
1 0000 org 0
2 0000 F3 di
3 0001 3E 80 ld a,80h
4 0003 D3 AB out (0abh),a
5 0005 3E FC ld a,0fch
6 0007 D3 A8 out (0a8h),a
7 0009 76 halt
OrionExt
28.10.2019, 12:50
не пашет выдача в порт единиц и все тут, при этом такое впечатление что выходы вв55 в Z состоянии потому что если дотронуться щупом осциллографа и пальцем одновременно то видны "наводки" такие же как и просто пальцем до щупа дотронуться Ну, это смахивает на то, что порт А работает как вход (после сброса так и есть). Не пишется регистр управления PPI. А длительность cs_ppi_l и wr_l не слишком короткие?
Вроде нормальные. И было бы полезно на диаграмме увидеть A0, A1.
OrionExt
28.10.2019, 18:24
bigral, как бы на будущие. Раскопал тест (https://github.com/apoloval/artemisa/tree/master/rom/adt) для вас, не мой.
bigral, как бы на будущие. Раскопал тест (https://github.com/apoloval/artemisa/tree/master/rom/adt) для вас, не мой.
O_O !!! век живи и век учись, вот это чувак показал уровень!!! https://github.com/apoloval/artemisa/tree/master/simulation как я понял он сначала все в симуляторе запилил чтоб схему не пришлось перерисовывать
OrionExt
31.10.2019, 15:54
Нет там модели целой платы, так какие-то обрывки мыслей. Да и к чему это? Когда весь msx укладывается в голову ребенка (при условии что мать не бл.. и ребенок не питался с ашана).
Ну, это смахивает на то, что порт А работает как вход (после сброса так и есть). Не пишется регистр управления PPI. А длительность cs_ppi_l и wr_l не слишком короткие? Вроде нормальные. И было бы полезно на диаграмме увидеть A0, A1.
по скорости должно пахать, я на проц 1.7mhz подал
вот переснял фото поточнее, ато на предыдущем шото D5 показывал чето 1 в первом запросе (наверно отпал при "контрольном" снимке для flickr-a, а я и не заметил, точнее заметил но токо сегодня когда опять стал возиться с платой), вот "новые" данные:
https://flic.kr/p/2hE3AqF
https://flic.kr/p/2hDZNVP
https://flic.kr/p/2hE3AoM
OrionExt
02.11.2019, 21:29
Все красиво. Пишем в #AB, потом в #A8. Должно работать. Банально, может PPI кирдык (или PPI попался не той системы)?
Так то чудес хватает (правда, как правила, чудеса случаются от собственной невнимательности). Я вот тут VDP1 прикручивал в FPGA. Так не как не прикручивался (квартус игнорит код VDP1 и молчит).
Нашел в чем дело, лишний 0.
vdp_ce_n_s <= '0' when cpu_addr_s( 7 downto 3) = "100110" and (io_wr_n_s = '0' or io_rd_n_s = '0') else '1';
мрак, подумал проверить PPI, сочинил sketch для ардуины:
/*
test i8255
arduino pin -> i8255 pin
14->~RD 5
15->~CS 6
16->ADDR[1] 8
17->ADDR[0] 9
18->~WR 36
19->RESET 35
2->D0 34
3->D1 33
4->D2 32
5->D3 31
6->D4 30
7->D5 29
8->D6 28
9->D7 27
*/
// name = arduino PIN
const int DATA[8] = {2, 3, 4, 5, 6, 7, 8, 9}; // ARDUINO PINS
const int RD_L = 14; // ~RD
const int CS_L = 15; // ~CS
const int ADDR[2] = {17, 16}; // A0..A1
const int WR_L = 18; // ~WR
const int RESET = 19; // RESET
const int delay_val = 5000;
// *** setup ***
void setup() {
Serial.begin(115200);
noInterrupts();
pinMode(LED_BUILTIN, OUTPUT);
for(int n = 0; n < 8; n++) {
pinMode(DATA[n], OUTPUT); //set D0..D7 as out pins
digitalWrite(DATA[n], HIGH); //set default D0..D7 = 1
}
for(int k = 0; k < 2; k++) {
pinMode(ADDR[k], OUTPUT); //set A0..A1 as out pins
digitalWrite(ADDR[k], HIGH); //set default A0..A1 = 1
}
//set defaults for control pins
pinMode(RD_L, OUTPUT); digitalWrite(RD_L, HIGH);
pinMode(CS_L,OUTPUT); digitalWrite(CS_L, HIGH);
pinMode(WR_L, OUTPUT); digitalWrite(WR_L, HIGH);
pinMode(RESET, OUTPUT); digitalWrite(RESET, LOW);
interrupts();
Serial.println("resetting i8255");
noInterrupts();
digitalWrite(RESET, HIGH);
digitalWrite(RESET, LOW);
delay(delay_val);
interrupts();
Serial.println("setting i8255 to out in mode0 and write clk to PA0..PA7");
noInterrupts();
writeValue(0x3, 0x80);
} //**** setup ****
//**** loop ****
void loop() {
for (unsigned int clk = 0; clk < 256; clk++) {
digitalWrite(LED_BUILTIN,HIGH);
interrupts();
Serial.print("writting:");
Serial.println(clk);
Serial.flush();
noInterrupts();
writeValue(0x0, clk);
digitalWrite(LED_BUILTIN,LOW);
}
interrupts();
Serial.print("completed.");
Serial.flush();
noInterrupts();
}; //**** loop ****
void writeValue(unsigned int address, unsigned int value) {
// set address
for (unsigned int i = 0; i < 2; i++) digitalWrite(ADDR[i],((address >> i) & 1) ? HIGH : LOW);
// set data
for (unsigned int i = 0; i < 8; i++) digitalWrite(DATA[i],((value >> i) & 1) ? HIGH : LOW);
digitalWrite(CS_L, LOW);
digitalWrite(WR_L, LOW);
digitalWrite(WR_L, HIGH);
digitalWrite(CS_L, HIGH);
} // writeValue
все пашет нормально PPI (правда частота тут раза в 4 ниже...)
но блин!!! шо ж оно такое то? какой уровень на ноге RESET должен быть в рабочем состоянии PPI?
OrionExt
02.11.2019, 23:15
какой уровень на ноге RESET должен быть в рабочем состоянии PPI?Сброс логической единичкой. Значит нолик в рабочем состоянии.
Сброс логической единичкой. Значит нолик в рабочем состоянии.
скоко вольт 0.4? или 0.8 тоже прокатит? тоже самое про ~CS сигнал, может надо 0.4 для 0 и 3.0 для 1?
OrionExt
03.11.2019, 21:09
bigral, запустил я тут вечерком свою реализацию MSX на FPGA с успешным выходом в бейсик. Конфиг следующий – ПЗУ, ОЗУ, ЦПУ, ВДУ1 и все. ПЗУ и ОЗУ прибито гвоздями, внизу ПЗУ, вверху ОЗУ. ВВ55 нет, как нет и слотов. Оказывается и такой вариант на этапе отладки возможен.
скоко вольт 0.4? или 0.8 тоже прокатит? тоже самое про ~CS сигнал, может надо 0.4 для 0 и 3.0 для 1?Дык, ТТL - уровни. Что там у нас? Вроде ВВ55А используется.
А так чего тут сказать, мешать CMOS и TTL можно, но ни кто гарантий, что оно будет работать, не даст. Что бы работало надо конкретно на схему смотреть и замешивать туда CMOS совместимый с TTL.
- - - Добавлено - - -
Не знаю как у вас, а у меня в FPGA есть возможность настройки ножек CMOS/TTL, естественно речь о 3.3 В. Фиг его знает оно работает? Поставил ТТL.
bigral, запустил я тут вечерком свою реализацию MSX на FPGA с успешным выходом в бейсик. Конфиг следующий – ПЗУ, ОЗУ, ЦПУ, ВДУ1 и все. ПЗУ и ОЗУ прибито гвоздями, внизу ПЗУ, вверху ОЗУ. ВВ55 нет, как нет и слотов. Оказывается и такой вариант на этапе отладки возможен.
опа! вот это номер!
токо не понял, что там железного а что в fpga? вся схема в одной fpga? или снаружи есть ROM, RAM, CPU, VDU? ВДУ1 это tms9918?
значит минимальный конфиг для MSX1, это распределение памяти: 0x0 - 0x7fff ROM "MSX1", 0x8000...0xffff RAM + CPU + VDU? (клавиатура и джойстики конечно в пролете выходит)
OrionExt
04.11.2019, 18:27
токо не понял, что там железного а что в fpga? вся схема в одной fpga? или снаружи есть ROM, RAM, CPU, VDU? ВДУ1 это tms9918? Все внутри fpga. VDU1 – это TMS (модель vdp18). FPGA – 5 Циклон. Этот 5CEFA2F23 вышел достаточно ресурсоемким. Из минусов, очень долго fitter отрабатывает. Нужен современный много-ядренный комп.
значит минимальный конфиг для MSX1, это распределение памяти: 0x0 - 0x7fff ROM "MSX1", 0x8000...0xffff RAM + CPU + VDU? (клавиатура и джойстики конечно в пролете выходит) Видимо так (подманули bios), если оставаться в приделах бейсика. И памяти можно меньше 8Кбайт (0xE000...0xFFFF).
Просто мне стало интересно сделать вариант MSX на FPGA максимально приближенный к структуре моего модульного MSX. Посмотрим, что из этой затеи получится.
Wierzbowsky
04.11.2019, 19:40
Меньше 8кб никто никогда не делал ИМХО. Были Casio с 8кб на борту, я даже себе прикупил один такой, чтобы пощупать и заодно Карнивор на нём потестировать. Там даже Бейсик программы стартовали не с 0x8000, а с 0xE000. Не думаю, что комп запустится с количеством ОЗУ меньшим 8кб, так как выравнивание идёт по 8кб границе, а переменные биоса и Бейсика валяются выше 0xF000.
OrionExt
06.11.2019, 13:11
Меньше 8кб никто никогда не делал ИМХО. Были Casio с 8кб на борту, я даже себе прикупил один такой, чтобы пощупать и заодно Карнивор на нём потестировать.Где-то читал. Поэтому слово меньше 8кб и появилось в контексте. Практически меньше 8кб - это 4кб, что видимо, будет уже мало (не развернуться системные переменные). Но можно предположить и практический случай, допустим 8кб ОЗУ неисправно и доступно только верхние 6кб из 8кб, соответственно бейсик программа будет лежать выше $E000.
Раз пошло о минималках, можно еще покоцать видео-озу до 4кб :)
Wierzbowsky
06.11.2019, 13:45
Где-то читал. Поэтому слово меньше 8кб и появилось в контексте. Практически меньше 8кб - это 4кб, что видимо, будет уже мало (не развернуться системные переменные). Но можно предположить и практический случай, допустим 8кб ОЗУ неисправно и доступно только верхние 6кб из 8кб, соответственно бейсик программа будет лежать выше $E000.
Раз пошло о минималках, можно еще покоцать видео-озу до 4кб :)
Не факт, что интерпретатор Бейсика и биос найдут проблему. Скорее всего Бейсик просто не запустится, так как область 0xE000 будет недоступна. Или если она будет чудить (мусор), то бейсик программа будет произвольным набором операторов.
OrionExt
06.11.2019, 14:51
Не факт, что интерпретатор Бейсика и биос найдут проблему. Скорее всего Бейсик просто не запустится, так как область 0xC000 будет недоступна. Или если она будет чудить (мусор), то бейсик программа будет произвольным набором операторов.А чего с $C000? Ведь с $Е000 бейсик программа будет начинаться. Бейсик (или БИОС) подстраивается под размер ОЗУ.
Посмотрел в эмуляторе при 8кб ОЗУ бейсику доступно 4239 байта.
так а что с конфигом в котором нету i8255? это реально существовавший конфиг? похоже это просто стечение обстоятельств что msx bios запустился в этом режиме, как я представляю себе, нету и небыло никогда такого msx стандарта в котором бы ay8910 и i8255 считались бы опциональными (а клавиатура звук и джойстики это ж обязательная перифирия для msx по идее)
Wierzbowsky
06.11.2019, 16:32
А чего с $C000? Ведь с $Е000 бейсик программа будет начинаться. Бейсик (или БИОС) подстраивается под размер ОЗУ.
Посмотрел в эмуляторе при 8кб ОЗУ бейсику доступно 4239 байта.
Туплю. Действительно с 0xE000 при 8кб будет лежать программа на Бейсике.
OrionExt
06.11.2019, 18:14
похоже это просто стечение обстоятельств что msx bios запустился в этом режиме, как я представляю себе, нету и небыло никогда такого msx стандарта в котором бы ay8910 и i8255 считались бы опциональными (а клавиатура звук и джойстики это ж обязательная перифирия для msx по идее)Все так :)
нашел в чем проблема была, вот короче https://zx-pk.ru/threads/31035-rezhimy-dlya-i-o-pin-ov-u-max3000a.html?p=1033665&viewfull=1#post1033665
Теперь уже шото с прошивой... когда сигнал ~INT подключен от VDP к Z80 оно "затыкается" на вот этом моменте https://flic.kr/p/2hHrZcd если же этот сигнал не подавать то доходит до https://flic.kr/p/2hHrZ8v и обратно "по кругу" эта MSX "доска" начинает выезжать. В момент зацикливания сигнал ~INT падает в 0. На PPI при этом картина такая:pa0 - сидит в 1 потом "в момент начала цикла" ненадолго падает в 0, pa1,pa2,pa3 - сидят в 0, pa4,pa5,pa6,p7 - немного по другому чем pa0 но похоже, в момент зацикливания падают в 0 потом при выезжании все время висят в 1.
наверно шото с реализацией ascii16 мапера не то...
а может там IM2 и схема не может нормально вектор считать?
OrionExt
10.11.2019, 00:55
нашел в чем проблема была, вот короче https://zx-pk.ru/threads/31035-rezhimy-dlya-i-o-pin-ov-u-max3000a.html?p=1033665&viewfull=1#post1033665Вон оно что. Век живи, век учись.
а может там IM2 и схема не может нормально вектор считать?Так то im2 MSX не поддерживает, но по правилам хорошего тона шину данных подтянуть к +5В надобно через резисторы.
Int у VDP к +5В подтянут через резистор (ОК)? Я уже не помню. Нарисуйте наконец схему. Я не могу держать в голове вашу схему месяцами, которую еще и не видел.
И теперь что там MSX1 запустился? Потом уже можно идти дальше. Просто вот так на удачу MSX2 запустить можно, но там дофига нюансов (при видимой простоте). Пользуйтесь возможностями платформы, это реально облегчает отладку.
И я смотрю часов нет. Или есть? Если нет, откуда брали прошивку MSX2? Реально сталкивался с проблемами пропатченной прошивки на форуме zx.pk.ru. Правда там проблема была связана не с часами.
Вон оно что. Век живи, век учись.
Так то im2 MSX не поддерживает, но по правилам хорошего тона шину данных подтянуть к +5В надобно через резисторы.
Int у VDP к +5В подтянут через резистор (ОК)? Я уже не помню. Нарисуйте наконец схему. Я не могу держать в голове вашу схему месяцами, которую еще и не видел.
И теперь что там MSX1 запустился? Потом уже можно идти дальше. Просто вот так на удачу MSX2 запустить можно, но там дофига нюансов (при видимой простоте). Пользуйтесь возможностями платформы, это реально облегчает отладку.
И я смотрю часов нет. Или есть? Если нет, откуда брали прошивку MSX2? Реально сталкивался с проблемами пропатченной прошивки на форуме zx.pk.ru. Правда там проблема была связана не с часами.
шина данных подтянута на 5в через 10к,
int подтянут на 5в через 10к у процессора (ну и int с ножки vdp сразу идет на ножку процессора),
схемы попрежнему нету, ну т.е. вообще как я и говорил там все подключенно 1:1 а основная логика в cpld (прошивку обновил в первом посте и тут она https://sites.google.com/site/bigralsbay/home/unknown-rom-images/msx_eng.vhd?attredirects=0&d=1)
msx 1 запускается видимо https://flic.kr/p/2hHwUBM, проблема в том что ничего потом не видно на экране, потому это не точно, в момент когда врубаешь питалово то зелеными буквами видно еще шото а потом уже сплошной черный экран, наверно так же как с тем тестом было, он типо пашет но ничего не видно, и пока его не сделать желтым как test2
прошива msx2 с этого форума с патчем чтоб запускаться без часов, часов нету
msx2 rom https://sites.google.com/site/bigralsbay/home/unknown-rom-images/MSX2.rom?attredirects=0&d=1
msx2ext rom https://sites.google.com/site/bigralsbay/home/unknown-rom-images/MSX2EXnc.rom?attredirects=0&d=1
и мой слиток этих ромов + zanac https://sites.google.com/site/bigralsbay/home/unknown-rom-images/msx2_zanac_ex.rom.BIN?attredirects=0&d=1
OrionExt
10.11.2019, 04:08
msx 1 запускается видимо https://flic.kr/p/2hHwUBM, проблема в том что ничего потом не видно на экране, потому это не точно, в момент когда врубаешь питалово то зелеными буквами видно еще шото а потом уже сплошной черный экран, наверно так же как с тем тестом было, он типо пашет но ничего не видно, и пока его не сделать желтым как test2VDP должным образом не инициализировал по сбросу. Ладно если это коснулось только палитры. А если его регистров, а у него их дофига. Это не TMS. В момент вывода заставки не вижу причин словить зависон, только как по причине не верной работы VDP. В этот момент активно используются фичи VDP.
Если все же причина не в VDP. Ловить причину в разы проще на MSX1. Короче надо разбираться со сбросом. Все соображения по этому делу я изложил ранее.
VDP должным образом не инициализировал по сбросу. Ладно если это коснулось только палитры. А если его регистров, а у него их дофига. Это не TMS. В момент вывода заставки не вижу причин словить зависон, только как по причине не верной работы VDP. В этот момент активно используются фичи VDP.
Если все же причина не в VDP. Ловить причину в разы проще на MSX1. Короче надо разбираться со сбросом. Все соображения по этому делу я изложил ранее.
так я так до конца и не понял, этот v9958 должен таки по сбросу устанавливать себе паллитру совместимую с tms9918 или нет? интересно еще то что при нажатии кнопки сброс как бы должен себя вести так же как после включения питания, но это не так, при включении питания видно зеленые буквы на черном фоне (msx1 заставка) но вот потом когда все "потухло" можно reset скоко угодно раз нажимать всеравно экран уже полностью черный! аж до следующего включения\выключения питания.
может глючный vdp попался... :(
OrionExt
10.11.2019, 14:20
так я так до конца и не понял, этот v9958 должен таки по сбросу устанавливать себе паллитру совместимую с tms9918 или нет? Должен устанавливать палитру tms9918 (похожую вроде, с этими кривыми LCD уже забыл как цвета должны выглядеть).
интересно еще то что при нажатии кнопки сброс как бы должен себя вести так же как после включения питания, но это не так, при включении питания видно зеленые буквы на черном фоне (msx1 заставка) но вот потом когда все "потухло" можно reset скоко угодно раз нажимать всеравно экран уже полностью черный! аж до следующего включения\выключения питания. Я уже не помню всех подробностей. Проблема была схожая. Палитра устанавливалась не адекватная. Во основном преобладал черный цвет, потом зеленый цвет, и изредка получалось высечь сразу всю палитру. Была ли разница между подачей питания и кнопкой сброс, уже не помню (вроде поведение было одинаковое). Могу сказать точно, все это безобразие не тухло и работало в дальнейшем одинаково на msx1 (в бейсике). И почему тухнет? Вы уверены в своем дешифраторе адреса? Я в своем на ид7 был уверен на 200% да и во всем остальном – рабочее.
Как вариант можно потренироваться на кошках TMS, тогда их можно было купить с пяток за цену V9958. Только в силу допотопного интерфейса с DRAM у TMS (продвинутые версии TMS91XX сложно доставаемы), придется попыхтеть со схемой SRAM.
может глючный vdp попался... Все может быть. Страшилок о этой серии VDP хватает. У меня на минимальном обвесе (считай по ds) работают все – 9918, 9928, 9929, 9938, 9958.
Опыта работы с CPLD у меня нет, как особо и с FPGA. Даже при переносе заведомо рабочей прошивки c одного циклона на другой разных серий постоянно траблы возникают. И с GAL из одной серии та же фигня, все требует обработки напильником.
OrionExt
11.11.2019, 15:30
Я тут слегка потерялся, бо как-то не всегда выходит обратная связь.
Изложу еще мыслей.
По сбросу в добавок сказанного, можно попробовать синхронный сброс по clk vdp (лучше взять cpu clk c vdp). Сдается мне, что так оно и было сделано в asic движках. Бо такие проблемы (со стартом) проявляются только в немногочисленных компах msx2 на мелко схемах (видимо).
Да, был добавлен один вайт в m1? Это к тому, что часть биос-а msx2 по таймингам пересчитали для более скоростного vdp.
wait давно добавил на железном 7474 на проводах висит, проц изначально от vdp получает clk, но стартует не синхронно на reset стоит одновибратор на кондере с задержкой секунд 3...5
OrionExt
12.11.2019, 14:33
Ясно. И что решили? Закупаться новым VDP или дальше мучить сброс (или еще там чего)?
Кстати, автор Omega MSX2, тоже сталкивался с трудностями пуска VDP. Вроде зарешал проблему. Объяснил это как, ранний сброс (питание еще не набрало полной силы).
OrionExt
12.11.2019, 20:24
Пошучу. В тупую сделайте 4 платы по моим схемам. Займет 4 вечера. Пока платы идут сделайте кросс плату на проводках. Потом (как прийдут) за пару вечеров спаяйте. БИНГО!!!
- - - Добавлено - - -
И это с фулл тех поддержкой, пока я еще тут. Надеюсь.
- - - Добавлено - - -
МАПЕРА игры конечно там нет. Бо это уже дела asic. Тут и премините многострадальный cpld.
Ясно. И что решили? Закупаться новым VDP или дальше мучить сброс (или еще там чего)?
Кстати, автор Omega MSX2, тоже сталкивался с трудностями пуска VDP. Вроде зарешал проблему. Объяснил это как, ранний сброс (питание еще не набрало полной силы).
та ниче не решил, пинаю себе потихоньку наслаждаясь процессом, проц может и глючный но шото он таки показует пока не буду уверен что он дохлый буду пинать, странное обьяснение - ранний сброс... а чего потом кнопка ресет вообще не действует? может все так и должно быть? просто сам комп еще не пашет гдето и сбрасывается по ходу дела не зависимо от vdp, тут посоветовали дебаг порт сделать и в прошивке вставить out в него и смотреть на светодиоды... ну и так выяснить до какого момента оно доходит. звучит сложновато если б кто помог написать спец тест...
- - - Добавлено - - -
Пошучу. В тупую сделайте 4 платы по моим схемам. Займет 4 вечера. Пока платы идут сделайте кросс плату на проводках. Потом (как прийдут) за пару вечеров спаяйте. БИНГО!!!
- - - Добавлено - - -
И это с фулл тех поддержкой, пока я еще тут. Надеюсь.
- - - Добавлено - - -
МАПЕРА игры конечно там нет. Бо это уже дела asic. Тут и премините многострадальный cpld.
та если делать по схемам ext то без всяких cpld, и на одной плате, чтоб было как gr8bit все кошерно, видяху отдельно конечно, чтоб разные адаптеры лепить
OrionExt
13.11.2019, 15:28
странное обьяснение - ранний сброс... а чего потом кнопка ресет вообще не действует? может все так и должно быть? Вот и я не до конца понял.
тут посоветовали дебаг порт сделать и в прошивке вставить out в него и смотреть на светодиоды... По мне это как-то сложно.
Так то работают странные машинки YIS-503IIR с биос-ом MSX1 и VDP V9938. И ничего эти машинки не знают о V9938, и работают и проблем не испытывают.
та если делать по схемам ext то без всяких cpld, и на одной плате, чтоб было как gr8bit все кошерно, видяху отдельно конечно, чтоб разные адаптеры лепить Любой каприз за ваши деньги :)
Wierzbowsky
13.11.2019, 17:04
Кстати по поводу сброса. При эксплуатации Карнивора2 было замечено, что старт биоса MSX на некоторых машинках происходит до полной загрузки прошивки в Альтеру. То есть ранний старт машинки (в пределах до 150 наносекунд) не даёт запуститься Альтере в полной мере и в итоге мы имеем неполную конфигурацию Карнивора при старте. А что если это влияет и на инициализацию VDP (или некоторых партий VDP)? Если попробовать придержать запуск биоса на 200нс или больше, то возможно проблемы исчезнут?
OrionExt
13.11.2019, 19:26
Вот то интересно, когда у меня случилась та трабла, я кнопочку сброса и держал до посинения и пальчиком быстро бил. Нифига, трабла оставалась.
А когда начал играться с фронтом сигнала, VDP отпустило. Хотя я не могу до сих пор понять то действо. Игра с фронтом - это очень условно для триггера Шмитта. Крутизна фронтов зависит от типа применяемого логического элемента. А еще в схеме сигнал сброса проходит через LS244, а это еще один триггер Шмитта.
На тот момент у меня не было продвинутого ослика. Сейчас можно все вернуть в зад, и внимательно все обнюхать. Но честно мне лень. Установка супервизора DS1233-5 по ds на плату VDP решило проблему, а потом уже был доработан узел сброса на модуле CPU. В дальнейшем было проверено с несколькими V9938 и V9958, все работало без нареканий.
Еще мысля. Возможно, VDP критична величина логического 0 и 1, выраженная вольтах.
Кстати по поводу сброса. При эксплуатации Карнивора2 было замечено, что старт биоса MSX на некоторых машинках происходит до полной загрузки прошивки в Альтеру. То есть ранний старт машинки (в пределах до 150 наносекунд) не даёт запуститься Альтере в полной мере и в итоге мы имеем неполную конфигурацию Карнивора при старте. А что если это влияет и на инициализацию VDP (или некоторых партий VDP)? Если попробовать придержать запуск биоса на 200нс или больше, то возможно проблемы исчезнут?
так у меня z80 стартует теперь на целых 3..5 секунд позже чем reset который PPI, VDP и slot_enable сбрасывает
- - - Добавлено - - -
Еще мысля. Возможно, VDP критична величина логического 0 и 1, выраженная вольтах.
уже везде подтяжки 10k на +5v понавесил
может v9938 другой чем v9958? потому и синий экран у него при msx1 rom...
так а у Вас при msx1 ROM и v9958 синий экран при сбросе?
OrionExt
13.11.2019, 20:10
уже везде подтяжки 10k на +5v понавесил A логический ноль? У меня сброс на шине не подтянут к +5В. Вспомнил. С той траблой пробовал подтягивать к +5В. Не помогло.
может v9938 другой чем v9958? потому и синий экран у него при msx1 rom... В этом плане они одинаковые
так а у Вас при msx1 ROM и v9958 синий экран при сбросе? Конечно синий. То мониторы были зеленые :)
смотрю тут что сигнал ~int во время этого самого псевдо "ресет-а" падает в 0 надолго, что то не нормальным мне это кажется сильно длинный сигнал ~int, как там положенно v9958 в этом плане подключать? не положен ли какой нибудь ответный сигнал чтоли в сторону vdp о том что процессор получил этот ~int? ато мне кажется оно сваливается от сильно длинного ~int
посмотрел в эмуляторе это валится процедура на адресе #2a14 она как раз отвечает за выезд этого msx banner-а, как она работает для меня мрак... но понял что во время ее выполнения срабатывает rst#38 обработчик прерываний постоянно, возможно у меня в cpld есть какаято мутная проблема с циклом подтверждения прерывания, потому как вродибы до этой процедуры прерываний нету (смотрел по осциллографу) а именно на ней когда выезжает линия толщиной пиксела 2 (https://flic.kr/p/2hHrZcd) происходит зацикливание и эта линия продолжает выезжать постоянно...
OrionExt
17.11.2019, 20:37
О господи! Я же вам еще в начале темы написал после запуска теста. Что у вас проблемы с VDP. И пока это не решить, дальнейшие телодвижения не имеют смысла. Но вы продолжаете упорно терять свое время.
Ни каких схем для подтверждения прерываний не требуется. Прерывание подтверждается автоматически при вычитке регистра состояния VDP.
О господи! Я же вам еще в начале темы написал после запуска теста. Что у вас проблемы с VDP. И пока это не решить, дальнейшие телодвижения не имеют смысла. Но вы продолжаете упорно терять свое время.Ни каких схем для подтверждения прерываний не требуется. Прерывание подтверждается автоматически при вычитке регистра состояния VDP.
Ну так "проблемы с VDP" надо ж как-то подтвердить? пока что я вижу что этот VDP показует на экране хоть что-то, ну да в msx1 экране зеленые буквы на черном фоне вместо белых на синем, ну да при Вашем тесте черный экран (но при модифицированном желтый как и пологается), при msx2 rom начинает выезжать баннер таки (а если убрать прерывание товообще выезжает полностью), значит таки не совсем мертвый VDP... нужно както более детально понять суть этих проблем с VDP.
Т.е. в самой процедуре rst#38 есть какаято вычитка регистров VDP которая приводит к завершению подачи сигнала прерывания да? Когда я ставил ROM от msx1 то сигнал на прерывании был "нормальный" (короткий, через определенные промежутки времени, не мерял скоко но наверно по кадровой развертке)
Dolphin101546015
25.11.2019, 06:13
посмотрел в эмуляторе это валится процедура на адресе #2a14 она как раз отвечает за выезд этого msx banner-а, как она работает для меня мрак... но понял что во время ее выполнения срабатывает rst#38 обработчик прерываний постоянно, возможно у меня в cpld есть какаято мутная проблема с циклом подтверждения прерывания, потому как вродибы до этой процедуры прерываний нету (смотрел по осциллографу) а именно на ней когда выезжает линия толщиной пиксела 2 (https://flic.kr/p/2hHrZcd) происходит зацикливание и эта линия продолжает выезжать постоянно...
Это прерывание строчной развертки, проц ловит строку, с которой начинать рисовать новый кадр.
Это прерывание строчной развертки, проц ловит строку, с которой начинать рисовать новый кадр.
не очень в теме, можете обьяснить что там происходит "детальнее"?
как я понимаю z80 почти всевремя в DI-mode, потом как токо в одном месте срабатывает EI вызывается обработчик прерывания (в какой момент поступает сам сигнал ~int я не знаю, но явно раньше чем этот EI срабатывает), потом на скоко я понял z80 должен считать регистр vdp чтобы убрался этот самый сигнал ~int... как я понял этого не происходит и когда срабатывает ret i оно как то переходит обратно в обработчик прерывания и эта полоса все выезжает и выезжает на одном и том же этапе (счетчик "этапов" не может увеличиться изза постоянно висящего ~int) ну а если ~int отсоединить то banner выезжает полностью но зацикливается уже перед тем как высветить надписи ram:128k vram:128
даже не знаю как же тут можно выяснить ту точку в которой "все пошло не так" и таким образом иметь хоть малое представление об причине
Dolphin101546015
28.12.2019, 11:57
не очень в теме, можете обьяснить что там происходит "детальнее"?
даже не знаю как же тут можно выяснить ту точку в которой "все пошло не так" и таким образом иметь хоть малое представление об причине
Тут два варианта есть, в первом, строчное прерывание вызывается на конкретной строке, записанной в регистр строчного прерывания из счетчика, который убывает на каждом кадре. После чего прерывание происходит аппаратно, и в нем, скорей всего задается новая строка прерывания, и выполняется вертикальный скролл.
Второй: прерывание происходит кадровое, после чего начинают считаться строки, чередуясь с чтением горизонтальной перетрассировки. Как только счетчик достигает нужной строки, выполняется вертикальный скролл.
Я делаю подобное, вобще не разрешая прерывания, и весь контроль развертки выполняется полностью программно.
Тут два варианта есть, в первом, строчное прерывание вызывается на конкретной строке, записанной в регистр строчного прерывания из счетчика, который убывает на каждом кадре. После чего прерывание происходит аппаратно, и в нем, скорей всего задается новая строка прерывания, и выполняется вертикальный скролл.
Второй: прерывание происходит кадровое, после чего начинают считаться строки, чередуясь с чтением горизонтальной перетрассировки. Как только счетчик достигает нужной строки, выполняется вертикальный скролл.
Я делаю подобное, вобще не разрешая прерывания, и весь контроль развертки выполняется полностью программно.
как возникает вертикальный скрол я так и не понял (из Вашего описания), но понял что можно установить прерывание на конкретную строку, и что тут может "зацикливаться"? изза длинного сигнала прерывания чтоли? там должен стоять в схеме одновибратор укорачивающий сигнал прерывания ?
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot