На этих выходных наконец-то закончил (о чем говорил ранее) приведение в минимальный порядок проекта и полный перевод его со схемного дизайна в 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