ILoveSpeccy, я пользуюсь Прекрасным ассемблером :) У меня есть оффлайновая версия тоже.
Вид для печати
ILoveSpeccy, я пользуюсь Прекрасным ассемблером :) У меня есть оффлайновая версия тоже.
ILoveSpeccy, отписал в личку.
Я вроде немного продвинулся дальше с проблемой с прерываниями.
Очень нужна помощь знатаков i8080. Попробую описать что к чему...
И так. Имеются: рабочий эмулятор корвета, основанный на исходниках эмулятора Сергея, и пока не рабочий дизайн корвета на FPGA.
В обоих случаях используется ОПТС2.0. При помощи простейшей трассировки программы выяснилось следующее:
Пока не приходит прерывание, результат сравнения один в один.
Но как только приходит прерывание происходит вот что...
Думаю так понятно будет.Код:Emulator FPGA
---------- ----------
RD 181B,13 RD 181B,13
RD 181C,2B RD 181C,2B
RD 181D,BC RD 181D,BC
RD 181E,C2 RD 181E,C2
RD 181F,1A RD 181F,1A
RD 1820,18 RD 1820,18
RD 181A,12 RD 181A,12
WR 6703,00 WR 6703,00
RD 181B,13 RD 181B,13
RD 181C,2B RD 181C,2B
interrupt
WR F499,18 WR F499,18
WR F498,1C WR F498,1F
RD F7F0,C3 RD F7F0,C3
RD F7F1,76 RD F7F1,76
RD F7F2,00 RD F7F2,00
RD 0076,C3 RD 0076,C3
RD 0077,94 RD 0077,94
RD 0078,0F RD 0078,0F
...
...
interrupt routine
...
...
RD 0FAD,FB RD 0FAD,FB
RD 0FAE,C9 RD 0FAE,C9
RD F498,1C RD F498,1F
RD F499,18 RD F499,18
RD 181C,2B RD 181F,1A
RD 181D,BC RD 6704,XX
RD 181E,C2 RD 1820,18
RD 181F,1A RD 1821,BD
...
...
...
Для объективности результата я вызываю прерывание в FPGA абсолютно в то же время что и в эмуляторе. Но! Эмулятор заносит в стёк адрес 0x181C, а FPGA 0x1F. Ну и как результат, при выходе из подрограммы обработки прерывания в FPGA всё валится.
Может у кого нибудь есть идеи на этот счёт?
---------- Post added at 21:30 ---------- Previous post was at 21:17 ----------
Да, совсем забыл написать, что использую корку T80 из проекта Вектора 06Ц на FPGA от Svofski.
---------- Post added at 22:24 ---------- Previous post was at 21:30 ----------
Интересно... только что поменял T80 на k580wm80a.v из проекта "Башкирии" на DE1 от b2m.... и теперь прерывания отрабатываются правильно.
Скорей всего с этой коркой заведётся... Если всё получится, перепишу её на VHDL потом, если b2m будет не против!
---------- Post added at 23:28 ---------- Previous post was at 22:24 ----------
Ну наконец-то! В симуляторе всё заработало!
перечитывал pk8020.lib
обратил внимание на цитату
т.е. получается что INT7 не используется и мало смысла имеет, зато чтением из PICЦитата:
; Одновибратор включения двигателя запускается на время 3 с
; при переходе сигнала (бита) MOTOR из 0 в 1. Для разгона
; двигателя требуется время около 0,5 с, после этого можно
; инициировать операции контроллера НГМД. Если двигатель
; уже был включен, время на разгон не требуется. Опрос
; состояния одновибратора включения двигателя производится
; через регистр запросов контроллера прерываний.
можно прочитать стостояние мотора ....
т.е. используют PIC как порт ввода/вывода
хотя не уверен что используется.
Постораюсь сегодня запутить контроллер прерываний в железе. И если заработает, то доделаю чтение из PIC. За ненадобностью приоритеты, наверное, делать не буду.
А! Вот ещё что. Я буду эмулировать дисковод микроконтроллером (пока точно не решил, внутренним или внешним), но всё же заинтерисован в реализации работы с SD-картой напрямую из CP/M. Сам я этого не осилю (мои познания ассемблера 8080 уникальны :D я уже как дня 3 его изучать начал :v2_dizzy_botan: ), но если бы кто нибудь "допилил" бы корветовскую ПЗУ или что там ещё надо, было бы классно!
пзу точно трогать нет смысла, оно только грузит с диска и передает ему управление
чтобы сделать универсально, можно сделать через порт расширения,
тем боле там 3 8битых доступны.
там через "загрузку внешнего ПЗУ" оно будет загрузчик грузить
а он уже читает и диск с SD
там можно для простоты "монтировать" стандартный KDI
блин, можно было бы и попробовать написать, заманчиво ;)
собственно если бы был контроллер которому мы даем "номер сектора в KDI" а он выдает нам его, со стороны CP/M bios это было бы достаточно просто
вон vinxru делает что-то в ту степь, как раз на мелком AVR работа с SD
неа :(
я несколько далек от железа ...
разве что реализовать в эмуляторе (можно даже мой реанимировать) ...
просто врядли это будет быстро, у меня мой даже не собирается
тогда его портировать на sdl,linux,macosx, да и для винды нормальный сделать
Я могу свой эмулятор допилить до нужного состояния. У меня на SDL/OPENGL. В win32 и в линуксе собирается без проблем.
Запущу контроллер прерываний и таймер, потом займусь эмулем. Надо только решить однозначно как это работать будет. Хорошо, ПЗУ как внешнее на третьем ВВ55, а вот доступ к выбору образа и доступа к секторам .KDI надо замапить на свободные порты (свободное место в PORTBASE кажеться есть, надо глянуть).
не, не надо,
просто во внешнем ПЗУ отключается ПЗУ от портов, и дальше они уже как порты для данных
там же не настоящее пзу, а скорее "внешний рамдиск" из которого умеет грузиться биос
и который может отключаться.
я думал, что можно вообще сделать на одном контроллере,
который бы битиком CS переключался между режимом ПЗУ и контроллера
в режиме ПЗУ
(при записи в один из порторв "младший байт адреса", выставлять на втором "значение")
там 256 байт на "загрузчик" хватит, он дальше снимает CS, а дальше порты используем уже как нам удобно
например 1 порт для "флагов" 1 для обмена данными, один для "адресса"
хотя можно и 2мя обойтись
"статус/cmd" и "данные"
прелесть этой штуки, что ее можно к любому корвету подключить и оно будет работать, и в схему вообще не лезть
Разве микроконтроллер обязательно нужен? У меня в проекте, откуда ты корку процессора брал, работа с SD-картой напрямую из CP/M. Правда там нехилое допущение, что файл образа диска нефрагментирован. При таком подходе биосу CP/M нужно лишь знать номер сектора начала файла (у меня загрузчик биоса из корневого каталога вытягивает данные и считает номер сектора).
---------- Post added at 23:12 ---------- Previous post was at 23:10 ----------
А отлаживал я в своём эмуляторе. При желании, можно состряпать конфиг и для Корвета с SD-картой. Контроллер SPI у меня реализован на сдвиговом регистре.
А не замахнуться ли на внешнее устройство, подключаемое к порту расширения и на этапе загрузки эмулирующее внешнее ПЗУ, а после загрузки - как диск. Концепция примерно как sdrive к 8бит атари ?
Т.е после хардсброса загружается оболочка, в которой можно выбрать файл для монтирования в виртуальный диск, после софтсброса (какая-то резидентная програма или просто команда оболочки) - грузимся с примотированного диска.
Как раз это и планируется. Только пока в FPGA, хотя ничего не мешает превратить эту "фукцию" в отдельную железку для порта расширения.
Заработал контроллер прерываний!
Теперь наконец-то работает клавиатура в бейсике 2.0
Приберу код немного, доделаю чтение из контроллера прерываний и буду прикручивать таймер!
Ещё хочу полностью переписать арбитр памяти. Так как всё ОЗУ и ГЗУ хранятся в одной микросхеме SRAM, пришлось немного поизвращаться. Есть идеи как упростить эту часть, хотя и сейчас память работает вроде без сбоев.
порылся в ПЗУ ОПТС2 и ОПТС1
они таки читают из контроллера прерываний состояние вращение мотора
и так определяют надо ли грузиться с дисковода
т.е. если не будет инта от motor on и не будет работать чтение из PIT
ОПТС не бедет пробовать грузиться автоматом
Я только что попробовал в своём эмуляторе.
У меня очень кастрированый PIC, который при чтении всегда возвращает 0x00 и дисковод работает без проблем. Пробовал на ОПТС1.1 и ОПТС2.0
---------- Post added at 19:54 ---------- Previous post was at 19:21 ----------
Появилась, или точнее выявилась небольшая проблема!
В бейсике 1.1 всё работает нормально, а в бейсике 2.0 при закраске (paint) всё виснет. Тоесть начинается закраска, и через пол секунды экран в девятках.
Чем отличается алгоритм PAINT у бейсика 2.0 от 1.1? Где искать проблему?
Оно должно грузится само
Без нажатой F1
При на датой f1 оно не проверяет железо а пробует сразу грузится
На живом корвете если вставлен диск, оно с него грузится сразу после теста
Про паинт - посмотрю
Интересно получается...
В обеих версиях бейсика используется только цветовой режим доступа к ГЗУ. А раз в бейсике 1.1 всё работает, значит запись и чтение ГЗУ в порядке.
Поэтому я решил попробовать отключить прерывания во время закраски. И на тебе, всё закрасилось как надо. Поэтому я решил вместо корки 8080 от b2m попробовать cpu8080 из OpenCores.org . С этим процессором всё работает!
Меня смущает тот факт, что корка от b2m работает правильно всё остальное время. В чём проблема я не понимаю.
Если у b2m есть интерес, я могу дать ему весь проект для установки причины. Я всётаки думаю что проблема в корке CPU (надеюсь что я ошибаюсь).
---------- Post added at 22:21 ---------- Previous post was at 22:19 ----------
Так теперь всё само и загружается. Все тесты проходит ОПТС (1.1 и 2.0) и в бейсик вываливаюсь.
Уже похоже на реальный корвет ;)
При подключенном диске должно загрузится с диска а не выпасть в бейсик
Я совсем забыл про расширенные символы, надо доделать!
Знакогенератор я урезал до одного. Не знаю, есть ли толк от альтернативного? Использовался ли реально?
---------- Post added at 22:26 ---------- Previous post was at 22:25 ----------
Так диска пока нет никакого, на вг93 заглушка.
Надо оба, использует например шахматы и ещё кое кто
Там досовская кодировка таблички
И широкий режим тоже используется
Сергей, повторю вопрос, уже как-то заданный.
У Вас в эмуляторе цвет 8 бит. Как можно его представить в 24 битах?
Тоесть мне нужна табличка для каждого из 16 цветов корвета в виде:
- 8 bit RED
- 8 bit GREEN
- 8 bit BLUE
---------- Post added at 22:30 ---------- Previous post was at 22:30 ----------
Тогда сделаю оба знакогенератора.
И широкие символы я часто встречал!
С цветами разобрался тоже. Теперь выглядит достаточно симпотично! Так же сделал черно--зеленую палитру. Смотрится классно! У нас в классе с корветами был один такой монитор. Ностальгия!!!
Круто !
Я все больше думаю что дефолтный должен быть чб
Т.к. в основном были чб мониторы
И по софту это видно
У нас в классе цвет подключали только на посмотреть
Не понравилось ... Да и монитор был маленький
Прикрутил аудиокодек к корвету, пока без таймера.
Но при включении "пищит" как надо, так как третий бит порта C второй вв55 дёргает спикер.
Завтра постараюсь доделать таймер (который тоже пока возьму у b2m).
Ну и конечно же хотелось бы попробовать какие нибудь игры на моём de1-корвете.
Поэтому есть 2 вопроса:
1. где взять игры (rally, помоему, была для плёнки)?
2. как мне сделать WAV для заливки через магнитофонный вход?
Почитал тему про загрузку с магнитофона, но ответов так и не нашел
(а может просто чего-то проглядел).
---------- Post added at 19:34 ---------- Previous post was at 19:28 ----------
Сделаю по умолчанию ч/б, а кнопрой F12 сделаю переключение между
ч/б, ч/зел., и цветным режимами. Также включение/выключение эффекта
телевизора. Я вроде уже писал о нём, когда отдельные строки пикселов
по-вертикали различить можно. Выглядит как на реале!
Надо взять bin файл, msxcas с этой странички
http://marinovsoft.narod.ru/pk8020.htm, обновить исполняемый файл до версии 2.1 с этой странички
http://zx-pk.ru/showpost.php?p=361528&postcount=62
Прочитать ридмишку и сделать как там написано.
Удачи!
Получилось сделать из файла GONKI файл WAV, который длиной 2 мин 21 сек.
В корвете ввожу LOAD"CAS:GONKI ",B,R и после пилотного тона выскакивает "ОШИБКА ЧТЕНИЯ"
Что интересно, если я на корвете делаю команду SAVE"CAS:ABC" то тональность пилотного
тона ниже, чем в полученном WAV-файле.
Сегодня вечером попробую на реале загрузить.
---------- Post added at 07:07 ---------- Previous post was at 07:04 ----------
@marinovsoft
На Вашем сайте я скачал 2 документа, про форматы Бейсик- и ASCII-файлов.
Не могли бы Вы поделиться форматом BIN-файлов?
В планах сделать "проигрыватель" прямо в DE1.
можно попробовать для быстро сделать некотороые игрушки вместо стандартной ром, эт не очень сложно,
но нужно ли ?
;)
Бейсик-файлы бывают трех видов - токенизированный, текстовый и двоичный (исполняемый). В статье "Формат кассетных файлов Бейсик-Корвет" описаны общие моменты для этих файлов. BIN файл (если смотреть на с IBM) это тоже самое что и COM файл, т.е. исполняемый код без заголовка. При конвертации в "музыкальный файл" в начало файла добавляется еще шесть байт: адрес загрузки, адрес конца загрузки и адрес запуска (по два байта на каждый).Цитата:
На Вашем сайте я скачал 2 документа, про форматы Бейсик- и ASCII-файлов.
Не могли бы Вы поделиться форматом BIN-файлов?
Есть!
Запустил первую игру на DE1-корвете!!! Это гонки!
Проблема была в том, что на ноутбуке, который я использовал как магнитофон,
в драйвере звука была включена функция якобы оптимизации звука.
Так оптимировало, что корвет не понимал что это.
Выяснил так: подрубил выход на магнитофон от реала ко входу DE1 и напрямую
"передал" программку из двух строчек. Получилось с первого раза.
Тут стало ясно, что магнитофонный вход работает, а причина в другом.
Игра работает очень даже не плохо. Только звука пока нет. Если будет время,
попозже попробую прикрутить таймер.
Заработал звук. Правдо пока не без проблем.
Не работает вообще при команде BEEP и в игре гонки. Только щёлкает.
Зато в treasure звук отличный. Пока не знаю в чём дело.
ВВ53 взял готовую, от b2m.
Больше игр для плёнки я не нашел. Так бы проверил!
---------- Post added at 22:11 ---------- Previous post was at 22:09 ----------
и ещё... почемуто в бейсике 2.0 загрузка с ленты работает прекрасно, а
в 1.1 постоянно после первого пилот-тона "ошибка чтения" выскакивает.
Может у кого будут идеи на этот счёт?
---------- Post added at 22:14 ---------- Previous post was at 22:11 ----------
Интересно... в бейсике 1.1 beep работает!
---------- Post added at 22:19 ---------- Previous post was at 22:14 ----------
Блин, в бейсике 1.1 после перезагрузки beep опять не работает. х.з. что такое
надо разбираться. скорее всего с таймером чтото
у корвета вроде как есть отдельный пин sound который разрешает/запрещает прохождение звука... Может быть надо сюда копать?
Не, я его первым делом сделал. Через него пищит оптс при включении.
---------- Post added at 23:08 ---------- Previous post was at 23:07 ----------
Со звуком тоже разобрался! Не правильно работало чтение из ВИ53. Теперь всё в норме!!!
Проблема с загрузкой с ленты в бейсике 1.1 так и осталась. Никак не могу понять в чем дело. Может у кого будут идеи? Чем отличается загрузка в бейсиках 1.1 и 2.0??
Все остальные пока найденные проблемы исправлены.
Я немного прибрал исходники, и теперь проект на такой стадии, что не стыдно показать людям.
По-возможности выложу сам проект с исходниками и описанием у себя на сайте.
Новости буду опубликовывать здесь.
Ну и на очереди теперь эмуляция дисковёрта!
Немного новостей.
У моего реального корвета вообще нет входново каскада читалки с ленты,
а на 4 пин вв55 (D119) сигнал заведён напрямую с разъёма.
Короче пришлось побыстрому склепать простенький вход на 74HC04.
Бейсик 2.0. Гружу с плёнки "rally". Игра успешно запускается. Немного
поиграл и нажимаю "СТОП". Выходим в бейсик, но кнопки не работают.
Я думал это только на DE1-корвете косяк такой. Оказалось что нет. После
сброса всё ок.
Вырубаю корвет, меняю всё 3 ПЗУшки на версию 1.1. Пытаюсь грузиться с
ленты.... а не тут то было! Один-в-один как на DE1, сразу "ошибка чтения"
Значит мой корвет на DE1 не парится! Но теперь задачка.
Кто нибудь успешно грузил проги с магнитофона в корвет с ПЗУ в.1.1???
Саму прошивку я брал из папки DATA в эмуляторе Сергея. Та, что
называется "korvet11.rom". Может есть альтернативная прошивка?
Или формат записи на ленту не совместим у версий 1.1 и 2.0????
Короче я в ступоре!
Одно радует, корвет на DE1 ведёт себя абсолютно также, как и реал! :v2_cool: