Кому интересно запустить Вектор-06Ц в Altera DE1? Всё, кроме дисковода и АЫ, уже в принципе готово.
Вид для печати
Кому интересно запустить Вектор-06Ц в Altera DE1? Всё, кроме дисковода и АЫ, уже в принципе готово.
Ну, раз такой живой интерес возник.. :biggrin:
Вот архив с сегодняшним слепком проекта:
см.Обновление
Должен открываться и собираться, относительно быстро, в Quartus II Web Edition. У меня версия 7.1, с другими не проверял.
Никакой доки пока нет, есть только немного комментариев в коде. Расскажу вкратце об особенностях.
1. Видео. Наиболее стремная часть проекта, не судите строго.. На моем мониторе получается увидеть режим 720x576 @ 50Hz, хоть монитор и поругивается на его "неоптимальность". В принципе, можно пересобрать все для режима 800x600@60, но тогда это будет уже как бы другой компьютер. См. define-ы в файле vector06cc.v.
2. Память. Поскольку на DE1 есть 512Кб статического раму, я воспользовался именно им, ибо халява. Распределяется он следующим образом: первые 64Кб, с адреса 0 -- основная память Вектора; следующие за ними (с адреса 0x8000) 256Кб -- квазидиск. В перспективе, конечно же, надо перейти на DRAM. Это сразу облегчит перенос проекта на другие платы.
3. ПЗУ загрузчика, 2Кб, лежит прямо в проекте и собирается в M4K блоках. Инициализируется из zagr512.hex, но это на самом деле какой-то из двухкилобайтных загрузчиков, который я немножко подправил для удобства. В частности, он никогда не чистит основную память.
4. Переключатели и кнопки. Это описано подробно в комментарии к топлевелу. Главное, чтобы SW8 и SW9 были в верхнем положении, остальное в принципе используется только для отладки и мощного мигания лампочками. KEY[0] -- RESET а-ля БЛК+ВВОД, KEY[3], как и F12 на клавиатуре -- БЛК+СБР. В особых случаях можно нажимать KEY[3] и KEY[0] одновременно -- тогда загрузчика вообще не будет.
Про компиляцию.
Тут сказать нечего, все должно собраться сразу, порядка 400 предупреждений будет. В главном файле, vector06cc, есть несколько define-ов. x800x600 даст левый, но более монитороугоднический видеорежим. Остальные направлены на ускорение компиляции при отладке. Можно собрать, например, Вектор без процессора.
Теперь о том, как его загружать.
Сделать JTAG интерфейс как в примерах я пока так и не удосужился. Поэтому для загрузки я пользуюсь примером API из комплекта софта к DE1. Загружатем API-шный модуль, присоединяемся его программой к плате, открываем страничку SRAM и закачиваем. Обычные программы из файлов .rom надо заливать по адресу 0x80 (0x100 в байтах, но память там по 16 бит в слове). После этого отсоединяемся программой, переходим обратно в Квартус, закачиваем vector06cc.sof. Любовно подправленный загрузчик не затрет память, нажимаем F12 и voila.
Вариант загрузки номер два. Все так же, как и в первом случае, но берем образ квазидиска и заливаем его в SRAM начиная с адреса 8000. Теперь загрузчик будет видеть, что на диске что-то есть и будет грузиться с него.
Вариант загрузки номер три, кассетный магнитофон или айпод, никто не отменял. Загрузка с кассеты работает. Да и выгрузка тоже.
Немножко павлина-мавлина: все сорцы открытые. Лицензия на то, что моё собственное -- Modified BSD, переводится на русский приблизительно как "можно делать совершенно всё, что угодно, пенять при этом на себя, автора помнить добрым словом". Кроме того в проекте использован код процессора T80 с opencores.org, 82c55 c fpgaarcade и i2c протокол для конфигурации кодека из примеров от DE1, лицензии на них см. в исходниках.
Да, а о том что находится в ПЗУ на видео выхлопе я понятия не имею. В полноценном Векторе там было ОЗУ, в котором хранилась палитра. Свою реализацию я считаю полноценной, поэтому у меня там тоже ОЗУ =)
Внешние ссылки:
ZIP-архив с проектом и всеми исходниками: см. Обновление
Образ квазидиска для примера: http://www.sensi.org/~svo/vector06c/ramdisk.zip
Обновление: проект теперь живет на http://code.google.com/p/vector06cc/. Там можно и взять самые последние сорцы, и выкачать последний слепок и-или скомпилирвоанные битстрим файлы. Квазидиски по-прежнему лежат тут: кваз1 и тут: кваз2.
так это что, эмулятор вектора?
под виндовс?
а можете выложить откомпилированную версию?
Это аппаратный эмулятор Вектора, реализованный на языке описания аппаратуры.Цитата:
Сообщение от ZEman
Результат компиляции заливается в отладочную плату, в данном случае в Altera DE1.Цитата:
Сообщение от ZEman
Выкладывать его здесь не имеет смысла.
Не утерпел, решил не ждать до завтра и загнал Вектор в DE1. :)
В Кактусе 6.1 все откомпилилось нормально, залилось, появился стартовый экран. Файл RAMDISK.img заливал в SRAM с адреса 8000, ставил галочку на "длине файла", явно длину файла не указывал, после установки галочки она установилась автоматически.
После этого сделал сброс. Снова заставка Вектора, ждущего загрузку с магнитофона. Перезалил образ в SRAM и после этого залил результат компиляции. Результат тот же. :(
Может, что сделал неправильно, завтра буду разбираться...
Погоди, я может быть недостаточно понятно изъяснился. Чтобы залить образ памяти/квазидиска в SRAM, нужно в плату залить CII_Starter_USB_API.sof. Писишная программа не умеет знать какая в плате прошивка, поэтому она не ругается если там Вектор, но ничего на самом деле не может сделать. А уже после заливки образа надо залить Вектор. Сорри за неудобство =)
Или ты все так и делал? Тогда да, надо разбираться.
Знаешь, все-таки мне не стоило этим заниматься в полусонном состоянии :)
Конечно, мне стоило бы подумать, что кто-то должен на другой стороне файлик принимать и аккуратно укладывать его в SRAM :)
В общем, залил образ диска, запустил основную прошивку, нажал F12 и вот результат:
http://tenroom.ru/pub/V06.jpg
Вообще-то, фон, который виден на снимке (извиняюсь за качество) как бы движется на заднем плане, я уж видео снимать не стал :)
Такой эффект, как у видеопроцессора, когда он двигает фоновый рисунок позяди всех спрайтов или монитор подключен страшно длинными неэкранированными проводами и идут сильнейшие наводки, за которыми еле видно изображение.
Если удобнее разговаривать по ICQ или емейл, то вот:
ICQ UIN: 320365827
E-mail: [email protected]
To Caro: Камиль, а ты пробовал Вектор запускать у себя?
Нет еще не пробовал.Цитата:
Сообщение от AlexBel
У меня монитор не держит 50 Гц, так что пока нет смысла смотреть.
А он принципиально 50Гц не держит? У моего тоже обещано не было, он на грани, но держит стабильно. Если что, можно попробовать раскомментировать `define x800x600, будет странный режим 800x600@50; на него мой монитор даже не ругается, показывает как будто бы так и надо. К сожалению, в этом режиме частота строк другая и не работают всякие чудеса программирования 90-х с текстом на бордюре и проч..
Прилагаю еще маленькую затычку для видеоконтроллера: убрал один асинхронный блок, должно стать более переносимым (в данном случае, между версиями компиляторов).
Понятно, беда. Ну.. может быть как-нибудь сделаю режим 60Гц. Надо всего-то посидеть с калькулятором. Получится такой специальный NTSC Вектор :)
К сожалению схемы Вектора у меня так и нет. Но, на самом деле, не так уж много осталось тайн. То есть я на самом деле даже и не знаю, а какие тайны остались? Схема от Mick совсем неплоха, по ней можно догадаться о многом. Содержимое ПЗУ-х в принципе можно дедуцировать медитируя над схемой, как это делал я, а можно просто не полениться и пролистать архив Вектор-Юзер, где они все приведены =) Если только не пытаться собрать Вектор на исторической элементной базе, информации должно быть достаточно.
Вот здесь Вектор-Юзеры, на странице 4-3 дамп главной тактораздающей ПЗУ-шки:
http://www.emulator3000.emuita.it/rus-vector06c.htm
Добавлено через 4 часа 5 минут
Мы сегодня плодотворно пообщались с AlexBel и пришли к выводу о том, что Quartus 6.1 собирает мой код совсем не так, Quartus II WE 7.1. Судя по симптомам, проблемы в мелочах, но так просто парой галочек в настройках оптимизатора их не устранить. Пока я думаю, вывод для любопытствующих таков -- нужен QII WE 7.1.
Ну, или вот есть бинарник:
http://code.google.com/p/vector06cc/ -- правлено 26.12.2007, svofski
caro -- 50Гц 50Гц рознь, попробуй может на досуге? =)
2ALL
Пара вопросов по сабжу .
Ктонить устанавливал Z80 в сабж ? Эмулятор спека ктонить юзал ?
Есть ли в природе виртуальный патефон под дос/виндузы для сабжа ?
Обновление Вектора-цц:
1. Немного исправлен код видеоадаптера (правда, насколько мне известно проблеме с квартусом 6.1 это не помогло, но все же..)
2. Добавлен JTAG интерфейс для программы CII Starter Kit Control Panel. Теперь не нужно грузить никакие другие .sof-ы, можно прямо из Control Panel заливать содержимое памяти и квазидиска в Вектор. Можно и сливать обратно.
Последняя версия (16 декабря 2007):
http://code.google.com/p/vector06cc/сорцы, откомпилированный проект, .sof и .pof (правка 26.12.2007, svofski)
http://www.sensi.org/~svo/vector06c/ramdisk.zip образ кваза
http://www.sensi.org/~svo/vector06c/ramdisk2.zip еще один образ кваза
Vector06cc -- это копия компьютера Вектор-06Ц в FPGA, реализованная в отладочной плате Altera DE1.
@fan: что такое виртуальный патефон? Есть много эмуляторов Вектора, для виндус годятся только Emulator 3000 и Башкирия-2М. E3000 заброшен (в тяжком состоянии) уж много лет как, а Башкирия-2М развивается и автор рад обратной связи.
http://bashkiria-2m.narod.ru/
http://www.emulator3000.emuita.it/rus-e3.htm
У меня кроме 7.1 стоит 6.0, который выругался на ошибки установок в файле qsf и не захотел загружать проект.Цитата:
Сообщение от svofski
7.1 без проблем все откомпилировал и я посмотрел наконец на экран Вектора :)
Я только не понял, а что в MicroDOS нет команды DIR?
Загружаю оба приложенных образа диска и ничего не могу с ними поделать :)
А так все нормально, поздравляю, хорошее начинание - эмуляция в железе отечественных компов.
Спасибо! =D А как монитор, потянул 50Гц?
В MicroDOS все команды однобуквенные: D == DIR, E == ERASE... Я прицеплю лучше описание.
Странно, но при тех параметрах, которые ты поставил по умолчанию показывает без проблем.Цитата:
Сообщение от svofski
А в OCM DE1, при переходе на 50 Гц. сразу все плывет.
Надо будет поигратся с константами.
Спасибо, надо почитать.Цитата:
Сообщение от svofski
PS. У меня по команде D, оба образа дают NO FILES :)
PPS. Довольно часто залипают клавиши при нажатии с Shift (например при вводе ":" ), остановить можно только нажав SW0, затем SW3.
У меня аналогичные проблемы с клавиатурой, нужно помедленнее нажимать и все будет ОК. А образы работают у меня нормально, и каталог выводится и игры запускаются. Но нормально работает только если использую готовый SOF. После компиляции Квартусом 6.1, когда заливаю полученный SOF, то на экране мусор и отсутствуют некоторые цвета.
Кстати, ты команду D вводишь для какого диска? Квазидиск, кажется, C:, а после загрузки текущим стоит A:
Все, что я написал, относится к той версии, которую svofski выкладывал ранее. Новую я скачал, но пока не пробовал.
Про клавиатуру -- есть такое. Все можно, но плавно =) Проблема в том, что я пытаюсь отобразить PS/2 клаву на Векторовскую и это влечет за собой утонченное жонглирование скенкодами и нажатием-отпусканием shift-а. Где-то я чего-то не разрулил, поэтому пока нужно нажимать строго так: SHIFT, ":", отпускаем ":", отпускаем SHIFT. Если залипло, не надо сбрасываться, достаточно второй раз нажать то же самое в правильной последовательности. То же относится к некоторым другим клавишам с шифтом, @ ( ) навскидку.. Вообще, реализация клавиатурной матрицы -- это чуть ли не самая мрачная часть этого проекта. В далеких планах есть перевод ее на RAM, но это low priority.
AlexBel дело сказал про диск C: -- диска А нет, надо переходить на C:
Что до режима 720x576@50, ох. Я начинал его с докой, калькулятором и тетрадкой, а закончилось все как всегда -- +/- единичка с осциллографом =) Но раз уже по крайней мере на двух мониторах кроме моего работает, значит должно быть все нормально.
Я перекинул проект на google code, теперь его хомяк тут:
http://code.google.com/p/vector06cc/
Сорцы оттуда доступны через svn. Не разобрался пока, можно ли там делать автоматические слепки для скачивания.. Там же есть трекер запросов и вики.
Опа, а про это нигде не написано :)Цитата:
Сообщение от AlexBel
Попробовал с диском C:, работает и довольно не плохо выглядит.
По поводу клавиш с Shift, у меня похожая проблема была в контроллере клавиатуры.
При одновременном нажатии клавиши с Shift, надо запоминать код признака Shift и сбрасывать только после отпускания второй клавиши.
Ах вот оно что =)
Я это делал при помощи Emulator3000, плагина к фару для чтения-записи образов дисков и программы saverom.com (прилагается). Алгоритм примерно такой:
0. Ставим плагин для Фара mi_v004.zip из эмулятора ve27a (прилагается)
1. Берем какой попало загрузочный образ дискеты.
2. Пишем на него нужные .ром-ы и программу saverom.com
3. Грузимся всем этим дискетом в E3000, открываем там виртуальный магнитофон.
4. Пишем в командной строке5. Жмем в виртуальном магнитофоне на записьКод:saverom gamez.rom 100
6. В конце делаем Save As в магнитофоне и пишем в какой-нибудь wav.
Я эту процедуру упрощал дописывая в дискету initial.sub с кучей saverom команд, а потом пилил большой wav-файл в Audacity. Можно записывать в mp3 на 96кбит/с -- по крайней мере в мой Вектор это грузится.
Способа проще я, к сожалению, не нашел. Да в общем и ладно: для отладки это было полезно, а так вообще не очень.
svofski, проверь почту и аську :)
Обновления:
- пофикшены залипающие скобки-двоеточия и проч на клавиатуре
- появилась клавиша ПС (Alt)
- доступ к SRAM через JTAG больше не конфликтует с процессором; в связи с этим в T80 поправлены HOLD/HLDA (почему-то HOLD был отрублен, не знаю).
- БЛК+ВВОД (сброс с подключением ПЗУ загрузчика) сделан клавишей F11, работают комбинации (F1+F11 запрещает загрузку с кваза)
- ScrollLock или SW7 переключает HOLD, такая супер-пауза -- останавливает и отключает проц от шины
Слепок сорцов, бинарник и репозиторий svn - http://code.google.com/p/vector06cc/
http://img142.imageshack_.us/img142/9927/sneeqo3.th.jpg
Такая ведь картинка, да? И перед глазами все плывееет..
Я скорее думаю, что что-то изменилось с версии 7.1, поскольку пробовали уже во многих версиях без специальных настроек. Пока статистика такова:
- 6.1, 7.0 -- снег,
- 7.1, 7.2 -- красота
Cyclone II Errata говорит о том, что проблемы с M4K блоками во втором Циклоне есть. Но утверждает, что они обойдены в Quartus-ах начиная с 5.0SP2, что было довольно давно. Но было бы интересно, если б кто-нибудь с версией 6.1 или 7.0 попробовал выставить параметр CYCLONEII_SAFE_WRITE, как об этом говорит документ всеми своими скришшотами. Это, конечно, только версия. Очень похоже на проблему с доступом к строчному буферу который, разумеется, сделан в M4K.
Добавлено через 2 минуты
Да, совсем забыл в угаре поблагодарить за обратную связь, спасибо alexfreed! :) Если картинка как в моем скриншоте, это не процессор дерется, он так быстро драться не умеет.
Это лишний повод заказать-таки уже себе DE1!:v2_clap2:
Господа, проект живет на http://code.google.com/p/vector06cc -- ссылки на слепки сорцов на sensi.org устарели. Это я пишу, потому что заметил что кто-то скачал старые сорцы, которые я по недосмотру не убрал вовремя.
Добавлено через 12 минут
NB: Я поправил ссылки в старых сообщениях, кроме цитат. Это здравый вариант ревизионизма -- если проект переезжает, ни к чему держать старый хлам где попало и провоцировать путаницу. В SVN есть история всех-всех файлов и кто угодно может забрать их в состоянии на любой момент времени.
Обновка!
Значительные изменения:
- Появился дисковод, пока весьма деревянный и только для чтения
- Появился AY-3
- soundcodec.v теперь имеет дополнительный вход для 8-битного PCM звука
Как пользоваться дисководом
Надо взять SD или MMC карточку. Она должна быть отформатирована в FAT16, совсем необязательно только что, можно вчера или год назад. На ней надо создать каталог под названием VECTOR06 (без суффикса C!) и в этот каталог положить только один файл с расширением .fdd. Поскольку никакого механизма выбора пока не предусмотрено, если там будет два файла, то загрузится первый попавшийся. Если диск загружаемый, то система его увидит и через короткий промежуток времени радостно замигает индикатором РУС/ЛАТ (LEDR9) в ожидании БЛК+СБР (F12). Если нет, можно посмотреть в консоль на RS-232:115200-8-N-1. Правда, вряд ли там просто понять что не так.
Образы дискет годятся традиционные .fdd 1024x5x2xNN, .mst вроде бы то же самое. Если диск не загрузочный, можно загрузить образ квазидиска -- тамошний МикроДОС будет видеть и дискету.
Для загрузки с дискеты при загруженном квазидиске нужно крепко удерживать F1+F2 при сбросе через F11 или KEY0.
Один образ диска для примера прилег ненадолго тут: http://sensi.org/~svo/vector06c/stuffsies.zip
Где взять
http://code.google.com/p/vector06cc/downloads/list - svn snapshot сорцов и последний битстрим файл для загрузки в DE1
Как это
http://code.google.com/p/vector06cc/w/list - смесь док, путевых заметок, диаграмм; попытка не утратить Знание.
В двух словах: контроллер флопа состоит из хардверного как-бы ВГ93, который делегирует сложные запросы маленькому компьютеру на 65C02. Маленький компьютер общается с файловой системой и заполняет буфер в памяти данными из образа диска. Из этого буфера ВГ93 потом выплевывает байты почти как настоящий. Фирмварь теснится в M4K блоках, поэтому ничего дополнительного загружать в плату или на SD не надо.
Использованы разработки замечательных людей
(в дополнение к предыдущим)
Peter Wendrich (65C02)- http://www.syntiac.com/
Elm-Chan (MMC + FAT) http://elm-chan.org/
MikeJ (YM2149) http://home.freeuk.com/fpgaarcade/index.htm
Tobias Gubener (UART) tobiflex(@)opencores.org
John R. Dunning (cc65 compiler) http://www.cc65.org/
Известные проблемы
- Демка SkyNet зависает после каких-то там по счету титров
- В демке Black Ice (b-ice) не видно мультиколора (при этом в m@color все отлично)
- Дисковод работает только на чтение, контроллер не может отличить А от B
- Нету селектора образов дискет
Уфффффсе! Напоминаю, что обязательно тумблеры SW9, SW8 - вверх, SW7 - вниз; остальные управляют только световыми эффектами.
Добавлено через 38 минут
Вот еще любопытная вещь, электронный выпуск журнала Сканер #5. Есть на что посмотреть =)
http://sensi.org/~svo/vector06c/scaner5.zip
я не понимаю для чего вы делаете такой проект?
не проще ли написать нормальный эмулятор вектора под виндовс?
ведь не у каждого есть эта Altera DE1.
Следующий вопрос из этой серии -- для чего вы делаете нормальный эмулятор Вектора под виндовс, ведь не у каждого есть эта ОС. Не проще ли написать нормальный эмулятор Вектора под Линукс?
Это хобби, и это железный проект, интересный людям увлекающимся железом и программируемой логикой. А кто хочет перенести его, например, на Spartan 3E Starter Kit, или сделать из него 86РК или ЮТ-88, использовать в своем проекте ВИ53 или прикрутить мой дисковод к аналогичному FPGA-синклеру -- добро пожаловать, все-все-все открыто и доступно. Лицензии практически на все части даже позволяют не показывать после этого исходные коды, лишь бы упоминания авторских прав сохранялись.
P.S. Эмулятор Вектора под виндовс есть, хоть и не опенсорс, но полноценный. Посмотрите на http://bashkiria-2m.narod.ru/ Его автор, Дмитрий Целиков, активно помогает мне в моей разработке, делится опытом.
Обновка vector06cc!
Ревизия 234:
- Исправлен таймер: граничные значения, защелка, чтение из таймераОсновные эффекты от вышеперечисленных изменений:
- Исправлены параметры развертки: 624 строки как в оригинальном Векторе, 16-строчные бордюры
- Много исправлений в процессоре T80: биты регистра признаков, количество стейтов на цикл во многих инструкциях
- Более устойчивый к насилию контроллер флопа
- Появилось экранное меню, можно выбирать образ дискеты по нажатию на ScrollLock.
Более подробный журнал изменений здесь.
- Не нужно больше перетыкать СД-карту каждый раз (подробнее)
- Демка SkyNet проходит до конца
- Работает Exolon
Билд и снепшот последних сорцов лежат тут:
http://code.google.com/p/vector06cc/downloads/list
Образы дискет: листаем эту тему.