|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Author |
Message |
Vic3Dexe
Doomed
Joined: 16 Dec 2014 11:58 Posts: 370 Location: Киев
|
Мда
Не знаю, чем китайцы паяли эту плату, но 6 ног коротят на землю с разным сопротивлением от 30 Ом до 2 кОм. А та нога, что я считал битой, была попросту соплей замкнута на соседнюю с питанием. Собственно, только ее и удалось починить. Отмывка спиртобензином и другие манипуляции ничего не дали.
2 ноги кое-как работают в таком виде, одна у меня каким-то чудом оказалась незадействована, остальные 3 приходятся как раз на видеочасть (R,B,VSYNC). Заменить их нечем - свободная нога аж одна.
По-видимому, придется отдельно отлаживать CGA на рабочих ногах, и совмещать все это только на финальной конструкции.
|
25 Feb 2015 06:40 |
|
|
newold86
Devil
Joined: 30 Nov 2013 11:08 Posts: 709 Location: WWW
|
Случайно ни у кого нет доступа к реальной PC или PC XT (обязательно с процессором 8088) проверить, работает ли одна игрушка ? Буду очень благодарен !
upd - вопрос снялся... Блин, я злой - похоже, старая игрушка была упакована более современным самораспаковщиком, в котором использовалась команда, отсутствующая в 8086/88, а я столько времени угробил, пытаясь понять, почему у меня не работает, а вот в Dosbox - пожалуйста...
|
27 Feb 2015 10:05 |
|
|
newold86
Devil
Joined: 30 Nov 2013 11:08 Posts: 709 Location: WWW
|
На этих выходных наконец-то закончил (о чем говорил ранее) приведение в минимальный порядок проекта и полный перевод его со схемного дизайна в VHDL. Сначала шло туговато - тяжело было перестроить мозг со схем в странный код, но к концу я понял тех, кто советовал изначально не заморачиваться со схемным дизайном.
Итак, что есть - более-менее совместимая с PC XT машина, на которой выполняются все имеющиеся у меня программы, работающие на оригинальной XT. В качестве BIOS используется практически оригинальный BIOS от XT, за исключением Int 13 (естественно - работаю с SD картой вместо диска).
Чего нет, или что работает не до конца:
- некоторые регистры CGA, не нужные для обычной работы. Кроме того, не совсем правильно работает атрибут в последнем знакоместе строки, нет мигания символов и нет режима 40х25 (не видел ни одной программы, использующей его)
- DMA - реализованы только несколько регистров, которые странные программы используют для тайминга, самого DMA нет в принципе
- 8259 в самом минимальном варианте, но вроде написанного хватает для всего
- 8253 сам не делал, взял из других проектов. Во множественном числе, потому что попробовал (и добавил в архив) два варианта. Оба они имеют плюсы и минусы, при этом работают не очень... Если дойдут руки, то нормальный 8253 первый кандидат на написание.
- естественно, нету куска BIOS'а, который тестирует систему и определяет конфигурацию - необходимый минимум вписан вручную.
В BIOS'е также оставил разные отладочные процедуры - не удивляйтесь подпрограммам, на которые нет ссылок.
В целом совместимость получилась даже лучше, чем надеялся - как уже сказал, перестал находить неработающие программы.
Хотя подавляющее большинство частей сделал сам, есть тянутые куски. Довольно большой кусок алфавитно-цифровой части видеоадаптера был взят из чужого проекта, о 8253 уже говорил, еще что-то по мелочам. Некоторые вещи, хотя напрямую не заимствовал, подсматривал в других проектах. Пробую написать нормальный readme, там хочу указать конкретные ссылки на использованные проекты.
BIOS по работе с SD картой рассчитан на старые не-HD карты (как правило, 2 и меньше GB), переделать на новые довольно просто, но пока лень. И еще - все рассчитано на работу с конкретным образом диска, который можно найти здесь - http://zet.aluzina.org/index.php/Altera ... tion_guide У меня слегка голова пошла кругом от пересчета головок/цилиндров и прочих LBA вкупе с обработкой MBR, поэтому я поступил проще и использовал жестко заданные значения, которые просто посмотрел для этого образа.
Если в проекте что-то покажется странным - не ищите глубокого смысла. Это мой первый реальный проект на VHDL, и многие вещи, особенно в начале, я просто не знал, поэтому применял очень странные решения. Даже ассемблер после 20 с лишним лет не-использования потребовал некоторое время, чтобы вспомнить. Именно поэтому говорил и говорю - лучше спрашивайте, если есть конкретные вопросы.
Проект сделан для платы Terasic DE2-115, использует SRAM в качестве основной памяти, и некоторое количество внутренней памяти FPGA для буферов видео и SPI, а также BIOS.
Моя платка (так как делал подобное первый раз) оказалась совсем неправильной с точки зрения согласования сигналов. Чтобы привести некоторые сигналы (идущие от моей платки к плате FPGA по длинному шлейфу) в норму, пришлось резать дорожки и впаивать небольшие резисторы.
Возможно (по настроению и наличию времени) попробую вместо своей платки подключить один из доступных "софтовых" 8086/88, хотя все они рассчитаны на слегка другую идеологию системы.
http://www.nedopc.org/nedopc/upload/XT.pdf - схема моей платки с процессором и обрамлением
http://www.nedopc.org/nedopc/upload/BIOS.zip - исходники BIOS
http://www.nedopc.org/nedopc/upload/cpu8288.zip - собственно, проект для Quartus
Last edited by newold86 on 02 Mar 2015 11:56, edited 1 time in total.
|
02 Mar 2015 09:38 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22821 Location: Silicon Valley
|
Убрал лирические отступления в мусорку...
|
02 Mar 2015 09:47 |
|
|
Vic3Dexe
Doomed
Joined: 16 Dec 2014 11:58 Posts: 370 Location: Киев
|
По схеме - а где второй 373 латч на AD8-AD15?
Последовательных резисторов согласования там тоже нет, я так понял? Касаемо них - это вы, как и я, AN447 начитались? Я тоже паниковал, потом перекрестился и врубил напрямую (4 шлейфа 10-20 см). Никто не умер (пока).
По биосу - код пока не смотрел, но не понял фразы "за исключением int13". Если его нет, непонятно как у вас работает ДОС, да и любые дисковые утилиты.
Что касается 8259, не видел ни одного кода, который бы использовал его возможности кроме IMR/ISR. Т.е. все эти auto-EOI, сдвиг приоритетов и пр., имхо, можно смело игнорировать.
А вот DMA я бы сделал полностью. Скорость циклона (точно) и SRAM на вашей плате (скорее всего) позволят реализовать такие скорости обмена память-память, которые строковым инструкциям 8086 и не снились. Учитывая, что регенерации нет, 0 канал вполне для этого подходит.
Впрочем, с другой стороны, эта оптимизация, вероятнее всего, будет не востребована, ибо приложениям ее не подсунешь, а в биосе я что-то мест для такого кода навскидку не вижу.
Черт его знает короче. Диск-память тоже неплохо должно смотреться. UDMA какое-нибудь... Но тут от памяти все зависит, UDMA-4 вроде 66 МГц надо.
Для таймера наибольшую сложность вижу в получении базовой частоты (1.193_или_сколько_там МГц).
А смысл? Тогда, имхо, проще NIOS поднять, да эмулятор x86 под него написать. Даже с блекджеком и протмодой.
О реализации EGA/VGA не думали? У вас на плате RAMDAC недеЦкий с 10-битным цветом. Так что самое сложное, имхо, уже есть.
|
02 Mar 2015 18:34 |
|
|
jdigreze
God
Joined: 02 Jan 2006 02:28 Posts: 1388 Location: Abakan
|
А я понял, что BIOS не оригинален в части int13, так как используется работа с SD/MMC.
|
02 Mar 2015 21:25 |
|
|
newold86
Devil
Joined: 30 Nov 2013 11:08 Posts: 709 Location: WWW
|
Все остальное - в VHDL. Первая защелка в таком виде появилась только по причине того, что я не смог придумать нормального способа рулить двухнаправленным согласователем уровня на шине AD. Все очевидные и сразу же приходящие в голову способы при внимательном рассмотрении временных диаграмм оказываются неверными. Впрочем, я это уже обсуждал и в этой теме, и в другом месте - все со мной согласились. Кстати, потом я понял, что, хотя согласователей на AD придется оставить, как сейчас, два (один - в сторону от процессора - для адреса, второй - двухнаправленный, для данных), даже первую защелку можно тоже убрать в VHDL. Как уже писал, пришлось резать дорожки. Причем не от теории, а от того, что долго боролся со странными сбоями, и обнаружил, в частности, что звон от одного из сигналов по уровню такой, что ИНОГДА хватает для лишнего переключения логики внутри FPGA. Причем к этому моменту я уже научил свою конструкцию работать даже в таких условиях Vic3Dexe уже выше правильно заметил, что именно Int 13 у меня не родное от XT, а написанное мною, так как вместо диска используется SD карта. Именно это я и обнаружил А зачем ? Мне хотелось сделать упор на совместимость, а не на новые возможности/характеристики, отсутствующие у оригинальной XT. Даже без DMA и совершенно неоптимизированным Int 13 скорость работы с диском сейчас выше, чем у оригинальной XT (сравниваю именно с HDD), а внешних устройств, требующих DMA, пока не подключаю. Если дойдет до Sound Blaster, тогда придется подумать. Эээ... А в чем сложность-то ??? У меня базовая частота соответствует "родной" (сделано через PLL), поделил ее, как в XT сделано, и вот она (что и сделано). Проблема именно в правильной эмуляции режимов. Например, в самой полной эмуляции 8254, которую я нашел, все хорошо, за исключением того, что делитель 0 воспринимается как отсутствие делителя, а не как максимальный делитель. Поэтому и хочу, если руки дойдут, сделать "правильный" 8253 Это тоже не понял... Зачем такой двухступенчатый проект, когда есть несколько готовых реализаций 8086 в VHDL/Verilog ? Вопрос только, как всегда, в мотивации и наличии времени.
Уже несколько раз смотрел на убогую CGA-шную графику и брал в руки описание EGA. Потом смотрел на количество регистров, реально нужных для нормальной эмуляции, и откладывал описание обратно. Проблема в том, что работа большая, но не особо интересная - описывать один за одним работу нескольких десятков регистров, поэтому заниматься этим пока лень.
|
02 Mar 2015 22:39 |
|
|
Vic3Dexe
Doomed
Joined: 16 Dec 2014 11:58 Posts: 370 Location: Киев
|
| | | | newold86 wrote: Все остальное - в VHDL. Первая защелка в таком виде появилась только по причине того, что я не смог придумать нормального способа рулить двухнаправленным согласователем уровня на шине AD. Все очевидные и сразу же приходящие в голову способы при внимательном рассмотрении временных диаграмм оказываются неверными. Впрочем, я это уже обсуждал и в этой теме, и в другом месте - все со мной согласились. Кстати, потом я понял, что, хотя согласователей на AD придется оставить, как сейчас, два (один - в сторону от процессора - для адреса, второй - двухнаправленный, для данных), даже первую защелку можно тоже убрать в VHDL.
| | | | |
Тогда совсем непонятно Т.е. по ALE фиксируются старшие 4 бита в AAi, дальше все 20 бит еще раз фиксируются по ALE в AAl, а кроме того, младшие 8 бит фиксируются в 373. Не многовато? | | | | newold86 wrote: Эээ... А в чем сложность-то ??? У меня базовая частота соответствует "родной" (сделано через PLL), поделил ее, как в XT сделано, и вот она (что и сделано). Проблема именно в правильной эмуляции режимов. Например, в самой полной эмуляции 8254, которую я нашел, все хорошо, за исключением того, что делитель 0 воспринимается как отсутствие делителя, а не как максимальный делитель. Поэтому и хочу, если руки дойдут, сделать "правильный" 8253
| | | | |
Эээ... ну например в этом: У меня такие коэффициенты не проходят, говорит, мол, за пределами допустимых значений, да и мегагерц для PLL маловато, у меня даже 25 на 3 делить не захотел. Может, у BGA-циклонов другие возможности в этом плане? Почитаю. Ну, например, затем, что "готовую" реализацию наверняка придется дорабатывать напильником до действительно готовой. А ковыряться в чужом коде - сами понимаете. NIOS же вылизан альтерой (ну я надеюсь), а софтовый эмулятор отлаживать попроще будет. Впрочем, главной мыслью было - эмулировать неинтересно
Ну регистры не самая большая беда. Памяти много надо (EGA - 256k, VGA - 512k). И если в случае с 16k CGA она вполне влазит в циклон в двухпортовом варианте, то EGA/VGA уже не помещаются.
Двухпортовая внешняя во-1 дорогая, во-2 требует кучу ног. Не считал, но не уверен, что влезет в FBGA256.
С однопортовой надо как-то делить доступ между процом и "видеочипом". Пока идея в том, чтобы запустить память на частоте поболее, чем у проца. Такая частота будет 100% больше, чем выборка из памяти при формировании растра (пиксельклок 25М, выбираем байт или даже целое слово - итого 25/8 или 25/16 МГц). Тогда можно успеть и данные для видео выбрать и проц к памяти допустить.
Но это пока просто размышления.
|
03 Mar 2015 07:14 |
|
|
newold86
Devil
Joined: 30 Nov 2013 11:08 Posts: 709 Location: WWW
|
Ха ! Это еще не заметили SRAM_ADDR - еще одна защелка поверх всего остального Частично здесь то, о чем я сразу предупредил - не нужно искать глубокий смысл в непонятных вещах, просто издержки процесса обучения и отладки. Но именно со SRAM у меня были большие разборки, в ходе которых проблему я решил, но причину пока еще не понял. Сами разборки - http://electronix.ru/forum/index.php?sh ... 24966&st=0А я вообще не парился с ручным подсчетом делителей - мегафункции сказал, какая частота нужна, она мне и сгенерила все...
На моей плате DE2-115 можно под 400К внутренней памяти сотворить, так что должно хватить. Кстати, минимальный вариант EGA - 64K, в его сторону я пока иногда смотрю...
|
03 Mar 2015 07:29 |
|
|
newold86
Devil
Joined: 30 Nov 2013 11:08 Posts: 709 Location: WWW
|
На свежую голову еще раз подумал - вроде есть потенциальная причина такого поведения. Вполне вероятно, что ALE тоже звенит, нужно будет проверить.
Хотя правильнее всего было бы новую платку с более правильной разводкой сделать, но рука никак не поднимается - не мое это...
|
03 Mar 2015 10:45 |
|
|
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
С интересом слежу за проектом. У меня вопрос - а оно может 8086 процессор? Или только 8088?
|
03 Mar 2015 14:32 |
|
|
newold86
Devil
Joined: 30 Nov 2013 11:08 Posts: 709 Location: WWW
|
На мой взгляд, вопрос не очень корректный, односложно ответить невозможно. С одной стороны, просто поменять процессор на 8088, естественно, невозможно - все рассчитано на 8-битную шину данных, сигнала BHE вообще нет. С другой стороны, переделать, естественно, можно. Только с таким же успехом можно переделать и на 486, да и вообще на все, что угодно. Все зависит от того, что считать небольшой доделкой, а что - проще с нуля сделать...
|
03 Mar 2015 22:45 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22821 Location: Silicon Valley
|
Каким-то чудом на старый сервер пролезло сообщение от Vic3Dexe: Для начала, я бы почистил VHDL от излишков. Без обид, там каша, которая вполне может давать вам такие эффекты. Например, тройная (ну или сколько там) фиксация адреса. Смотрите, есть первый D-триггер, т.е. защелка, его выход соединен со входом следующего. Оба тактируются одним сигналом (ALE). Первый триггер фиксирует адрес. А что фиксирует второй? А это зависит от того, когда на него приходит тактовый перепад по сравнению с первым триггером. Если одновременно - то предыдущее состояние первого триггера. А если с задержкой - то уже новое. А если задержка "на грани", то вообще непонятно что. И это тоже, 8284 засуньте в циклон, чтобы 15 МГц не гонять по шлейфу, вот моя вполне рабочая реализация (верилог, но, я думаю, разберетесь):
|
04 Mar 2015 22:03 |
|
|
newold86
Devil
Joined: 30 Nov 2013 11:08 Posts: 709 Location: WWW
|
Помнится, я сам несколько раз говорил о диком месиве в проекте. Причем, должен заметить, по сравнению с тем, что было пару недель назад - это образец изящности, правильности и документированности проекта Не нужно забывать, что еще пару месяцев назад все мои знания VHDL заканчивались на конструкции типа "A <= B and C" , да и знания в области цифровой электроники были, в основном, теоретически идеализированными... Ровно наоборот - именно данная каша как раз родилась, в основном (но, естественно, не только), в борьбе с этим эффектом. LatchXX - не D-триггер, а прозрачная защелка. Все время, пока есть сигнал разрешения (а не только по фронту этого сигнала) выход равен входу, поэтому такая конструкция больших проблем не вызывает. Хотя, естественно, некоторые части этих защелок излишни, если дойдут руки - вообще хочу верхний уровень написать заново с нуля - думаю, сейчас уже могу сделать намного красивее и правильнее.
|
05 Mar 2015 01:33 |
|
|
newold86
Devil
Joined: 30 Nov 2013 11:08 Posts: 709 Location: WWW
|
Можно сказать, в целом проект в данном виде завершен. Любое ощутимое улучшение возможно только при появлении у меня принципиально нового уровня знаний схемотехники/VHDL, на что пока особо времени нет. В настоящее время есть некоторые недоделки, о которых я уже сказал, во всем остальном я проблем уже не обнаруживаю. В качестве небольшого финального аккорда добавил еще одну мелочь - expanded memory LIM 4.0. Идею и драйвер стащил отсюда - http://www.lo-tech.co.uk/wiki/Lo-tech_2MB_EMS_Board , сама реализация заняла целых 5 минут - все-таки VHDL/FPGA прикольные штуки
|
10 Mar 2015 11:03 |
|
|
Who is online |
Users browsing this forum: No registered users and 6 guests |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|