---
Вид для печати
---
Если хочеш плату еще и на вырост - смотри в сторону Terrasic DE0 или более полноценная DE1. Если - просто на поиграться и на попробовать - смотри местную платку под названием Reverse. она в 2х вариантах существует. это все на Альтеровских чипах платы. для Xilinx - надо искать.
DE1 с академической скидкой по цене более чем привлекательна.
Единственное, как оценить емкость чипа? Там 20000 LE, а сколько нужно для Z80, например?
2500 вроде надо для зетника. вся остальная схема как правило не более 500 LE.
---------- Post added at 03:49 ---------- Previous post was at 03:47 ----------
еще гдето 2000 надо для звукового сопроцессора. короче - тут у народа спектрумы со всеми наворотами - вполне влазят в 5000 а в 12000 влазит уже амига. этих 20000 хватит ну ооооочень на долго.
Спасибо за консультацию! Эту плату и закажу. Там еще и портов ввода-вывода полно, можно будет подключить настоящую корветовскую клавиатуру :)
Года 2 или 3 назад я начинал делать корвет на VHDL.
Сделал только текстовый экран, клавиатуру, и все режимы работы с памятью.
Потом застрял на графике. В корвете очень интересно графика реализована.
По сути там для графики используется 24 микросхемы памяти, к которым идёт
доступ одновременно. Из за того что я сразу не совсем разобрался с работой
корвета я стал писать его эмулятор на си. За основу брал эмулятор Сергея
Ерохина. Только писал с использованием библиотеки SDL. Работал эмул под
виндой и под линуксом. Довёл до состояния рабочего и из за нехватки времени
отложил. Сейчас к сожалению нет времени добить вариант на плис.
Но когда нибудь (надеюсь) закончу.
---------- Post added at 15:49 ---------- Previous post was at 15:43 ----------
Я так не думаю. Корвет гораздо сложнее технически чем спектрум.
Надо писать: таймер вв53, контроллер прерываний, 3 штуки вв55,
контроллер памяти для графики (идея у меня уже есть как его
реализовать) и т.д.
+ для полноценного корвета ещё и контроллер сетки (порт
последовательный) и ещё мелочёвка.
Поэтому я бы сказал, что надо как минимум 5-6 тыщ LEшек альтеровских.
контроллер графики - очень похож на EGA режимы, а оно вроде есть готовое ?
Вчера запустил свой эмуль корвета и поигрался немного в Rally и Klad1.
Такая настальгия навалилась... :) Короче решил по возможности доделывать
потихоньку корвет на FPGA. Портирую то, что уже есть, на DE1 (чтобы
многие могли попробовать) и буду доводить его до состояния полноценной
замены реала. Кстати, реальный корвет я приобрёл. Только он при включении
постоянно пишет, что не найдена нулевая дорожка на дискете. С проблемой
пока не разобрался.
Видеовыхлоп буду делать на VGA в разрешении 1024x768 так как только этот
режим позволит вывод изображения корвета на полный экран. Правда пиксельклок
будет 65MHz и памяти придётся работать быстро. Идеи релизации уже есть. Буду по
возможности клепать проект.
Этот корвет я купил у Шканова Андрея. Он мне говорил, если я не ошибаюсь,
что это вроде один из "прототипов" корвета. Это полноценный аппарат ПК-8020,
но у него была только одна ПЗУ из трёх. Я прошил 3 ПЗУ вроде версией 2.0
с бейсиком но он не работал с ними. Чего не работало уже не помню.
Потом я прошил одну ПЗУ прошивкой от контура вроде. Вот с ней он заработал.
Но там нет бейсика. Только загрузка с диска. Так вот он и не может запуститься.
Пишет что нулевая дорожка (или сектор, не помню уже) не найдена.
Я пока долго с ним не возился. Может возьмусь да запущу (с Вашей помощью :) ).
---------- Post added at 19:16 ---------- Previous post was at 19:10 ----------
Кстати, когда-то я неплохо программировал на корветовском бейсике и написал
несколько прикольных игр. В играх использовал спрайты, которые выводились
на экран через ассемблер. Было достаточно динамично, не смотря на то, что на бейсике.
И часто в играх я пользовался ЛУТом. Можно было делать плавное появение текста и т.д.
Прошло уже больше 15 лет с тех пор и я конечно же всё давно забыл. Так вот, для тестов
контроллера графики мне нужно опять всё вспомнить. Может у кого нибудь есть подобная
информация по программированию на бейсике корвета?
---------- Post added at 19:38 ---------- Previous post was at 19:16 ----------
Если кому интересно, я выложил свой эмулятор корвета. Эмулятор написан
на Си с использованием SDL. Проект отличается от подобных тем, что в
нём не использовано никакой оптимизации :v2_dizzy_messed: Мне нужно было понять как и
что работает в корвете. Поэтому писал эмуль. Многое позаимствовал из
исходников Сергея Ерохина (отдельное спасибо за проект!) :v2_thumb:
Вывод на экран через OpenGL.
Кнопки:
F8 - переключение оконный режим/на весь экран
F9 - меню выбора образа диска (выход из меню так же по F9)
F10 - турбо режим
F11 - сброс
F12 - выход
Скачать:
http://www.speccyland.net/index.php?...5-48&Itemid=16
---------- Post added at 19:41 ---------- Previous post was at 19:38 ----------
Эмуль очень сырой. Много чего не работает. Таймер - только 1 канал.
Контроллер прерываний вообще слов нет, строк 20.
Но для начала пойдёт. Главное завёлся эмуль!
Лёд тронулся...
http://speccyland.net/index.php?opti...7-30&Itemid=19
Добавил АЦЗУ и ПЗУ знакогенератора. Теперь работает чтение из АЦЗУ и вывод на экран графики и символов (пока только 64 в строке). Цвета в игре "Rally" неправильные так как значения в LUT "от балды". Нужно было лишь проверить.
Скриншот тут:
http://speccyland.net/index.php?opti...7-30&Itemid=19
Дело двинулось дальше...
http://speccyland.net/index.php?opti...7-30&Itemid=19
Спасибо! ВВ55 я какраз оттуда и взял. И таймер теперь есть.
Даже контроллер прерываний 8259 нашел.
----------------------------------------------
Кстати, кто нибудь знает что означают символы в правом нижнем углу
при старте? Я вроде от когото слышал что это своего рода диагностика.
Тоесть судя по тому что там выводится можно понять если с корветом
чего не так.
;)
при старте ОПТС (ака BIOS) стек ставит в конец памяти ГЗУ
это просто стек
пока тесты не пройдут он там дергается
при наличии ошибок ОПТС кое что говорит (желательно ОПТС2)
На данный момент проект состоит из:
- ПЗУ
- ОЗУ
- АЦЗУ
- ЦПУ
- Видео, вывод ГЗУ и АЦЗУ, но так как
ГЗУ пока нет вообще, то и на экран ничего не выводится
- ППи1, Порты А и С, ППИ2 Порт А (без них корвет не заводился)
Вот пока и всё. Вообще нет таймера, контроллера прерываний, ГЗУ, ППИ3.
Интересно что тест проходит вроде как.
Никаких ошибок ОПТС не выводит (или я их не вижу :) )
Надо будет попробовать версию 2. Только там клава без
контроллера прерываний работать не будет.
Вечером попробую.
Прошел почти месяц. Совсем недавно наконец-то разобрался с кое
какими глюками и теперь дело пошло дальше.
Самое главное, я запустил ГЗУ. Реализовал все 4 страницы.
Работает ЛУТ.
ОПТС 2.0 теперь тоже проходит без ошибок. Надо было только дописать
третий i8055.
Теперь буду прикручивать контроллер прерываний!
Несколько вопросов по делу:
1. Как я понимаю, при рисовании и закрашивании в бейсике используется
цветовой режим. Рисование линий и окружностей работет. Тоесть запись
в норме. Закраска тоже работает, значит и чтение в норме.
Какие программы/игры используют послойный режим доступа к ГЗУ?
Нужно для тестов.
2. Использовались ли в корвете какие либо прерывания кроме video blank?
3. Какие режимы прерывания использовались в корвете?
привет,
1. послойный использует например рамдиск в cp/m
это диск e:
зайти на него era *.*
потом на него копировать и сравнивать
есть на дисках тест КТДП - он тестирует и видеопамять
2. да, в доке есть список всех
видел использование hbl
прерывание от fdd (правда только в ROM от контура но там оно есть)
и от сети конечно
3. хороший вопрос, но когда писал эмулятор сделал все, ибо нарывался на что-то неработающие
хотя извратные режимы - вряди конечно, но он не так сложен в общем то
ILoveSpeccy, есть ли прогресс? У меня-то нету никакого :-)
Вчера вечером вспомнил про свой проект корвета на DE1. Отрыл сырки, запустил, побаловался немного. Решил по-возможности продолжить работу над проектом. Новостей пока нет. Немного прибрал сырки, и по ходу появилась пара идей, как оптимировать работу с графикой. Пока займусь этим.
Если у кого нибудь есть плата Altera DE1 и желание "поиграться" с текущим проектом, могу выложить файлы для заливки в FPGA.
Вопрос Сергею,
палитра цветов Корвета в Вашем эмуляторе просто "на глаз" сделана?
Цвета у меня в эмуле и на DE1 не такие как у Вас.
Может кто подскажет как сделать красивую палитру 16 цветов в формате RGB по 8 бит на цвет?
так, а там жеж как бы нет палитры ...
там же просто RGBI
или Вы про оттенки цветов ??
в откуда взялитсь цифры в коде - не помню уже
но там 8битная палитра
вроде и у меня и у b2m цвета похожи ...
Да, я это имел в виду.
У меня цвета получаются, как бы это описать, очень яркие. Не приятно смотрится картинка.
В Вашем эмуляторе цвета "нежнее".
Тогда я просто "передеру" их у Вас один-в-один! :)
---------- Post added at 10:16 ---------- Previous post was at 10:12 ----------
Вчера отладил в симуляторе свой контроллер прерываний на VHDL. Вроде работает. Только доделать чтение из регистров осталось. Приоритетов нет. IRQ0 у меня первый, остальные после него по-очереди.
В корвете вообще приоритеты прерываниям важны???
В моём эмуляторе вообще только одно прерывание по VBLANK и из регистров всегда читается "0". Но софт, который я пробовал, вроде весь работал...
;)
можно попросить "электронщиков" посчитать цвета по схеме ;)
флаги, маски - нужны, вроде были глюки без них (на память приходит POPCORN)
приоритеты вроде не используются, вроде смысла нет использовать
у меня использовалось 2 (VBL+SERIAL (для мыши)
хотя правильно надо бы
обязательное
VBL
очень желательное
TIMER2 (для плат с ОПТС2)
очень желательное
SERIAL (мышка)
NET (для сети ;))
вот описание с коментарием (где видел использование)
>0 - запрос от дополнительных внешних устройств, подключенных к разъему РАСШИРЕНИЕ;
ПЗУ ОПТС для определения подключенного внешнего блока пзу
>1 - запрос от адаптера последовательного интерфейса (готовность приема);
>2 - запрос от адаптера последовательного интерфейса (готовность передачи);
1 - нужно для мышки
>3 - запрос от адаптера локальной сети;
нужно если реализовывать сеть
>4 - запрос сигналом кадрового гасящего импульса VBL с частотой 50 Гц;
обязательно, это основное прерывание
>5 - запрос от канала 2 программируемого таймера;
а с ним прикол, в оригинальных платах (ОПТС1), там на входе VBL, не очень полезно, и не видел использования
в новых платах ОПТС2 там на входе ~HBL, и можно получить прерывание когда лучь пройдет нужную строку
на сколько я знаю его использует АБРИС
и игры от GoldSoft (без него они тоже работали, но графика мигает)
>6 - запрос от интерфейса принтера;
разве что в теории можно использовать для фоновой печати.
>7 - запрос от контроллера НГМД.
последнее я так и не понял как можно использовать, оно происходит через когда гаснет лампа выбора дисковода (3 сек после последнего обращения), как это можно использовать - я не понял
С прерываниями пока вроде всё ясно. Теперь по таймеру есть вопрос.
Сергей, в Вашем эмуляторе не реализовано чтение у таймера ВВ53.
Это как либо повлияло на совместимость с каким либо корветовским софтом?
p.S. что с Вашим сайтом pk8020.narod.ru ???
p.p.S сегодня полностью переписал код ВВ55. Как приду домой, буду прикручивать доделанный контроллер прерываний. Осталось немного до работоспособного клона корвета на FPGA...
---------- Post added at 20:30 ---------- Previous post was at 20:24 ----------
Кстати, может ли реально пригодиться на FPGA-корвете реализация порта принтера, магнитофона, мыши, джойстика, сети, последовательного порта, порта расширения?
Просто работы много требует, а будет ли смысл?
Как допилю таймер и прерывания, останется только дисковод... Да и тот уже отлажен в си.
ух ты, а я и забыл :(
для правильной эмуляции я бы теперь делал чтение ...
тем более вроде есть готовые PIT для альтеры
переезд на ucoz ....
при переезде все HTML стали =0
хотя остальные файлы остались и качаются по прямым ссылкам
уже месяц пишу в поддержку.
они все сделаем, сделаем, в факе написано "не трогайте исходные файлы"
вот я и жду, вдруг починят
хотя похоже уже проще перезалить из бекапа
супер!
мое имхо
>порта принтера по идее он и есть (последовательного порт),
имхо нет смысла совсем, что печатать с корвета ???
>магнитофона,
почти нет, разве что есть желание с этим играться ;)
>мыши,
есть несколько граф редакторов в которых она работает
собственно эт обычный RS232
>джойстика,
имхо - нет, т.к. нет "сандартного" джойстика
тот что на плате - "Аналоговый" не видел чтоб разводили на школьных машинах
и тем более использовали
в нескольких игрушках есть упоминание джойстика, но эт скорее экзотика
тем более точно были и другие реализации
т.е. имхо - нет
>сети,
разве что для экспериментов, хотя забавно, но там же токовая петля ;)
>порта расширения?
опять же, если совсем много портов есть лишних, то было бы забавно
но там же целых 25 бит портов
вход прерываний
таймер
в реальной жизни есть мое описание внешнего ПЗУ
есть некий набор "расширителя портов" с джойстиком и мышой (без поддержки софтом
в общем. эт из серии "чтоб все было"
вот таймер точно было бы полезно иметь полный
и PIC тоже
Просидел до 4 утра, но PIC так и не удалось запустить. Смотрю логическим анализатором...
ОПТС2.0. При разрешении прерывания процом 3 раза генерируется INTA, процом читаются байты 0xCD, 0xF0, 0xF7. Текущий адрес сохраняется в стёке и прыгаем по адресу. Короче вроде всё как надо. Но нет. Примерно через секунду после обработки первого прерывания, так и не выйдя в бейсик, экран заполняется девятками и висим.
Пробовал также корку 8259 из исходников башкирии от b2m. Абсолютно такая же реакция.
Может существует возможность как нибудь быстро диагностировать проблему?
Пока я только один путь вижу, дампить по RS232 например всё, что пишет/читает проц и сравнивать с эмулятором на компе. Потом искать где расхождения и почему.
даже мысли нет,
а конец прерываний ты обрабатываеш ?
тот что EOI
Можно подробнее?
Если пишешь на верилоге, то можно запустить в Icarus Verilog и сравнить с эмулятором. Тестовый модуль верхнего уровня пишется за 15 минут. Вот такой, например:
Это я в своё время процессор тестировал, но в тест можно и других устройств напихать. Спецы с marsohod.org таким образом даже linux для ARM до промпта запускали. :)Код:module test;
reg[7:0] mem[0:127];
wire[15:0] addrbus;
wire[7:0] cpu_i = mem[addrbus];
wire[7:0] cpu_o;
wire cpu_ce = 1'b1;
wire cpu_sync;
wire cpu_rd;
wire cpu_wr_n;
reg reset;
reg clk;
k580wm80a cpu(.clk(clk), .ce(cpu_ce), .reset(reset),
.idata(cpu_i), .addr(addrbus), .sync(cpu_sync),
.rd(cpu_rd), .wr_n(cpu_wr_n), .odata(cpu_o));
always #5 clk = ~clk;
always @(posedge clk) if(~cpu_wr_n) mem[addrbus] <= cpu_o;
initial begin
$readmemh("k580test.hex", mem);
$dumpfile("k580test.vcd");
$dumpvars(2, test);
reset = 1; clk = 0;
#100
reset = 0;
#3000
$finish;
end
endmodule
Я на VHDL пишу, а отлаживаю в Active HDL.
В том то и дело, что в симуляторе прерывания работают как надо.
И прерывания обрабатываются несколько раз, только потом зависание.
Сейчас переписал top под Ваши корки ВМ80 и ВН59 из башкирии 2м.
Проблема один-в-один как с моими корками.
Я думаю мне от этого никуда не уйти, но без элементарных знаний ассемблера i8080 мне будет очень сложно довести проект до завершения. Поэтому я решил написать простое тестовое ПЗУ для корвета. Так как я абсолютно не знаю ассемблера i8080, то начинать буду действительно с нуля.
* Какой ассемблер использовать?
* Какую литературу мне посоветуете.
* очень был бы благодарен за простые примеры вывода текста на экран, инициализации контроллера прерываний и их обработки с последующим выводом на экран...
я пишу (грномко сказано) для 8080 в мнемонике Z80
только не используя комманды специфичные для z80
есть исходник ОПТС 1 ранних версий,
могу расшарить, могу еще базы для IDA с разными ромами (там можно переключать i8080,z80)
а какие примеры, код на чистом железе работать должен ?
Сергей, какими инструментами Вы пользуетесь. Я скачал книгу по ассемблеру 8080 инашел немного кода в инете. Но как мне сделать bin файл? Есть ли какой нибудь кросс-ассемблер для винды?
Пробовать буду в эмуляторе (подгружать бинарник вместо ПЗУ) и на FPGA.
---------- Post added at 21:03 ---------- Previous post was at 21:02 ----------
исходники ОПТС думаю тоже пригодятся.
а что в памяти по адресe f7f0?
должно быть c3 76 00 (jmp 0076)
есть идея, что эти байты не записались в RAM (они копируются из ром на этапе инициализации)
и еще вопрос, а работает ли CP/M после загрузки ?
и ОПТС1 должен работать, там клавиатура работает не по прерываниям, они запрещены
вот код обработчика из ОПТС2 в мнемонике i8080
а вот он-же в z80Код:RAM:0076 C3 94 0F jmp Int_Periodical
RAM:0F94 Int_Periodical: ; CODE XREF: RAM:0076j
RAM:0F94 F5 push psw
RAM:0F95 3A 6E F7 lda LutFlag
RAM:0F98 B7 ora a
RAM:0F99 C4 AF 0F cnz UpdateLUT
RAM:0F9C FB ei
RAM:0F9D 3A 19 F7 lda SYMNBUF
RAM:0FA0 B7 ora a
RAM:0FA1 C4 7C 00 cnz INT_routine
RAM:0FA4 F1 pop psw
RAM:0FA5
RAM:0FA5 _EOI: ; CODE XREF: RAM:loc_70j
RAM:0FA5 F3 di
RAM:0FA6 F5 push psw
RAM:0FA7 3E 20 mvi a, 20h ; ' '
RAM:0FA9 32 28 FB sta PIC_RUS
RAM:0FAC F1 pop psw
RAM:0FAD FB ei
RAM:0FAE C9 ret
Код:RAM:007C INT_routine: ; CODE XREF: RAM:0FA1p
RAM:0076 C3 94 0F jp Int_Periodical
RAM:0F94 Int_Periodical: ; CODE XREF: RAM:0076j
RAM:0F94 F5 push af
RAM:0F95 3A 6E F7 ld a, (LutFlag)
RAM:0F98 B7 or a
RAM:0F99 C4 AF 0F call nz, UpdateLUT
RAM:0F9C FB ei
RAM:0F9D 3A 19 F7 ld a, (SYMNBUF)
RAM:0FA0 B7 or a
RAM:0FA1 C4 7C 00 call nz, INT_routine
RAM:0FA4 F1 pop af
RAM:0FA5
RAM:0FA5 _EOI: ; CODE XREF: RAM:0070j
RAM:0FA5 F3 di
RAM:0FA6 F5 push af
RAM:0FA7 3E 20 ld a, 20h ; ' '
RAM:0FA9 32 28 FB ld (PIC_RUS), a
RAM:0FAC F1 pop af
RAM:0FAD FB ei
RAM:0FAE C9 ret
---------- Post added at 22:22 ---------- Previous post was at 22:16 ----------
чуть позже выложу
например http://home.comcast.net/~tasm/index.htm
доки можно посмотреть на сайте Вектора
http://vector06c.narod.ru/
и их архиве софта http://asdasd.rpg.fi/~svo/scalar/categories/41/
ОПТС1 работает прекрасно. Могу рисовать на бейсике и т.д.
Ассемблер попробую.
Ща я сделаю трассировку прерываний в Вашем эмуляторе и посмотрю куды прыгаем при прерываниях...
собственно идея в том что может не отрабатывает запись в RAM
у корвета любая запись в место куда нельзя писать приводит к записи в память по соответствующему адресу
например при записи в подключенный ROM пишем в рам
при записи в подключенные порты клавиатуры пишем в рам под ним
но это версия ....
В файле pic.c в обработчике прерываний int DoPIC (void)
добавил перед return строку printf("\nDoPIC CALL Addr: %04X", (picHIGH<<8) | Low);
Результат с ОПТС2 ниже
И в FPGA тоже самое.Код:Driver: Allegmix Lautsprecher (Realtek High Definition Audio)
DoPIC CALL Addr: F7F0
DoPIC CALL Addr: F7F0
DoPIC CALL Addr: F7F0
DoPIC CALL Addr: F7F0
DoPIC CALL Addr: F7F0
DoPIC CALL Addr: F7F0
DoPIC CALL Addr: F7F0
DoPIC CALL Addr: F7F0
DoPIC CALL Addr: F7F0
DoPIC CALL Addr: F7F0
DoPIC CALL Addr: F7F0
Мож я чегото путаю?
---------- Post added at 22:08 ---------- Previous post was at 22:06 ----------
я так и делаю
вот кусок кода:
Код:elsif CPU_WR = '0' then -- write
case MAPPER_DO is
when M_RAM | M_ROM0 | M_ROM1 | M_ROM2 | M_KEYBOARD =>
STATE <= SRAMWRITE;
http://john.ccac.rwth-aachen.de:8000/as/
make.bat
Код:set PROJNAME=my_prog
set ASMDIR=c:\prog\asw
%ASMDIR%\bin\asw.exe -cpu 8080 -L %PROJNAME%.asm
if exist %PROJNAME%.p %ASMDIR%\bin\p2bin.exe %PROJNAME%.p %PROJNAME%.bin -r $-$ -k