Пожалуйста пишите в email (chunin{гаф}mail{тчк}ru), личка отключена!!!
NedoPC group. ZX-Evolution, ATM Turbo 2+, Pentagon1024SL.
[Предлагаю: ZXEvo, PAL coder, NeoGS, TS-FM, YM2149, Z80 и прочее]
Все здесь: http://www.nedopc.com.
Новости/поддержка/Faq: http://forum.nedopc.com.
Раздача халявы: http://forum.nedopc.com/viewtopic.php?f=32&t=977
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Можно сделать безвайтовый контроллер без особых ухищрений, если между МК и спеком поставить маааленьку м/с памяти на 256 байт - мк будет обновлять данные в ней, спек - читать (с большим приоритетом).
Однако изза незначительной длительности Wait-а в схеме "без-вайта" вся канитель с доп памятью смысла не имеет.
(По моим приблизительным подсчетам, если делать с табличкой в памяти МК то можно добиться значения wait-а в 2-3 спековских такта при частоте МК 8 мгц (AVR)).
А зачем 256 байт? Мне хватило 5 байтов (40 битов, 40 кнопок Спектрума). А еще я не стал ставить микросхему памяти, а поставил ПЛИС, куда была запихнута и вся мелкая логика. Данные в ПЛИС периодически закачивает контроллер КР1878ВЕ1, на котором реализован ps2 интерфейс и сопутствующая перекодировка скан-кодов.
Допустим, контроллер работает на частоте 10 МГц. Период тактовой частоты составляет 100 нс. Современные контроллеры, как правило, с гарвардской архитектурой и выполняют лобую команду за 2 периода тактовой частоты, т.е. в нашем случае за 200 нс. А сколько команд нужно выполнить, просто чтобы зафиксировать факт обращения процессора к порту FEh? Десяток точно наберется. Отсюда и необходимость тормозить процессор на время, необходимое контроллеру, чтобы прочитать состояние шины адреса, вычислить необходимое значение в соответствии с принятыми скан-кодами и выдать его на шину данных. Поэтому безвайтный контроллер просто так не сделать, надо извращаться.
Последний раз редактировалось KingOfEvil; 05.03.2007 в 23:12. Причина: Добавлено сообщение
256 байт - как раз чтобы не заниматься каждый раз высчитыванием ответа спектруму - чтобы убыстрить отклик МК на чтение порта FE.
Хотя с ПЛИС такой проблемы явно нету ;-) - она сама всё что нужно насчитает.
В целом вывод ни в коей мере не оспариваю - от вайта в схеме без ПЛИС/внешней памяти сложно избавиться Лишь несколько корректировок.
AVR (ATmega) выполняет команду за такт. Вход в прерывание - 4 такта. 1 такт - чтение старшего байта адреса с порта МК. еще 2 такта - чтение байта клавиатуры из памяти (это в лучшем случае - если таблица в 256 байт готова). 1 такт - на вывод байта наружу. Итого - 8 тактов. т.е. 800 нс.
На нетурбированном спеке за это время истечет 3 такта (286 нс) - т.е. может быть можно успеть за время I/O операции Z80 (как раз 3 такта) (если я нигде не обсчитался. На турбированном - точно не успеть.
Последний раз редактировалось AlexCrush; 06.03.2007 в 18:48.
А, вот зачем.
ПЛИС у меня ничего не считает, там жесткая логика (мультиплексор + 5 штук 8-разрядных регистров, в которые микроконтроллер периодически закачивает уже сформированную матрицу клавиатуры: 5x8=40 бит, по 1 биту на каждую кнопку).Сообщение от AlexCrush
Не люблю avrСообщение от AlexCrush
![]()
Последний раз редактировалось KingOfEvil; 06.03.2007 в 20:30.
Если внимательно посмотрите, значение каждого байта этого ОЗУ надо предварительно рассчитать
в зависимости от нажатых клавиш, так что никакого выигрыша в быстродействии такой подход не дает.
Как раз жесткая логика, реализованная на CPLD дает выигрыш, поскольку операция ИЛИ в матрице
клавиатуры реализуется аппаратно.
Что касается применяемого микроконтроллера, то на вкус и цвет товарищей нет.
Лично я делаю на том, что наиболее приемлемо в разрабатываемой кострукции, по разным критериям -
цена, быстродействие, подходящий тип корпуса, наличие хороших средств разработки и отладки и т.д.
Последний раз редактировалось caro; 06.03.2007 в 21:28.
Дело в том, что рассчитывать новую матрицу нужно относительно редко - лишь при нажатиях человека на PC клаву - а это несколько раз в секунду, не чаще. Пересчет таблицы на Z80 у меня занимает около 4500 тактов т.е. около 1.3 миллисек. при 3.5 МГц (значит можно пересчитывать до 750 раз в сек). Думаю, что на МК получится не дольше, а с учетом более высокой тактовой частоты - вообще быстро.
Зато мы получаем почти мгновенный (максимум 3 такта вейта в турбо режиме, 0 в обычном) отклик на спектрумовский IN (#XXFE).
Добавлено через 7 минут
Ну там же должна быть логика объединения данных по AND из этих самых регистров на случай чтения спектрумом из порта, например, #00FE. Именно это я и называю "ПЛИС считает". (Причем это такая нехилая логика, на дискретах ее делать громоздко.).
Хотя можно конечно сделать и без обсчета - простым методом "AND на диодах". Но нужно 40 диодов.
Последний раз редактировалось AlexCrush; 07.03.2007 в 08:40. Причина: Добавлено сообщение
Scorpion 256 TurboPlus GMX2048 edition (с новой ревизией спец-чипов - Турбина и ПрофПЗУ на GAL22v10D, ФАПЧ дисковода - GAL16v8D ),CARO ZX_MC/SMUC1.3/GeneralSound 512 Kb/FDD3.5+5.25... Pentagon1024Sl v2/Z-controller+SD 2Gb/GS-512/TurboSound/FDD3.5+5.25...Speccy2007 48 +SD 2Gb ( 128+Ay в процессе ) ... Все через PAL-Coder
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)