USB клавиатура на ZX Evo

Железо, связанное с TS-Conf

Postby valen » Sun, 17.05.2015 15:54:19

TS-Labs wrote:Я себе собирался взять одну из AVR корок. Собралась для С2 на 1700 ЛЕ, 60МГц.
Плюсы: вменяемые С-компилеры, нетупой набор команд.


Плюс один, к возможности заюзать нормальный Си компилер (AVR или др.).
(вместо не особо хороших iar и sdcc для z80)
Может есть смысл ставить 32-битный проц в ПЛИС ?
(с хорошим Си компилером)
чтобы банками не клацать и нормально адресовать много памяти/кода
valen
 
Posts: 3
Joined: Sun, 17.05.2015 15:33:00

Postby MVV » Sun, 17.05.2015 16:29:31

TS-Labs wrote:Я себе собирался взять одну из AVR корок. Собралась для С2 на 1700 ЛЕ, 60МГц.
Плюсы: вменяемые С-компилеры, нетупой набор команд.

Основных команд акселю в роли сопроца на forth хватит за глаза, т.к. при их увеличении пропорционально падает частота работы корки и соответственно растут LE :)
Одну из AVR корок, это какую? Или так, домыслы?
valen wrote:Может есть смысл ставить 32-битный проц в ПЛИС ?

Вот к примеру есть ZPU, Plasma, AvrCore, RISCMCU, qrisc32... Какой посоветуешь? Может допилить некст + ADL?

Пока не все корки просмотрел, возможно что-то ещё есть, что действительно подошло бы.
MVV
 
Posts: 479
Joined: Sun, 01.12.2013 22:48:17

Postby TS-Labs » Sun, 17.05.2015 19:58:16

valen wrote:Может есть смысл ставить 32-битный проц в ПЛИС ?

Нет такого проца. АРМ самый нежирный весит 9кЛЕ.
MVV wrote:Основных команд акселю в роли сопроца на forth хватит за глаза

Пожалуй, соглашусь.
User avatar
TS-Labs
 
Posts: 5398
Joined: Thu, 26.07.2012 01:29:56

Postby TS-Labs » Sun, 17.05.2015 20:03:12

Хотя, чоэто я. Линус Окессон сделал.
User avatar
TS-Labs
 
Posts: 5398
Joined: Thu, 26.07.2012 01:29:56

Postby VBI » Sun, 17.05.2015 20:32:40

Линус просто великолепен, конечно
User avatar
VBI
 
Posts: 1965
Joined: Mon, 03.06.2013 09:20:29

Postby valen » Sun, 17.05.2015 20:38:00

TS-Labs wrote:Нет такого проца. АРМ самый нежирный весит 9кЛЕ.


Из того списка, что mvv написал можно найти и поменьше, тот же ZPU.
Интересн ли тебе вариант, впилить 32 битный проц в ПЛИС ?
valen
 
Posts: 3
Joined: Sun, 17.05.2015 15:33:00

Postby TS-Labs » Sun, 17.05.2015 20:41:29

Сама 32-битность еще не самоцель. Зависит от многих других факторов. Во1х занимаемое место. Во2х компиляторы. В3х частота и набор комманд. Запилить я могу за вечер и 256-битный VLIW. Который будет годен только для того, чтоб сказать: смотрите 256-битный влив.
ZPU стековая машина, простите, но фтопку.
User avatar
TS-Labs
 
Posts: 5398
Joined: Thu, 26.07.2012 01:29:56

Postby MVV » Mon, 18.05.2015 20:48:50

dsp, как у тебя с запуском MSD и QBasic? Выбрать курсором или мышью ничего не получается. Даже тут всё работает ссылка
MVV
 
Posts: 479
Joined: Sun, 01.12.2013 22:48:17

Postby dsp » Tue, 19.05.2015 10:47:35

MVV wrote:dsp, как у тебя с запуском MSD и QBasic

MS DOS и Win3 работает мышка и клавиатура. TC (Турбо Си) мышка не работает, но она не работает и при запуске на обычном компьютере у меня например. Компилятор Cи запускается, файлы редактируются и сохранятются. Вот Байсик проверил - мышка работает а клавиатура нет. Возможно потому что она не будет откликаться если ее пытаться детектить. В общем надо смотреть.
dsp
 
Posts: 127
Joined: Wed, 25.06.2014 05:53:32

Postby dsp » Tue, 19.05.2015 12:31:04

Была мысль что биос может подпортил, но с ним все нормально. Взял исходники (от 10 мая 2015 что выкладывал здесь), откомпилировал и загрузил в DE1 (мышка и клавиатура PS/2) - клавиатура и мышка в Qbasic работает. TC - мышка не работает (чуда не произошло), так что в железе надо смотерть. Все равно уже делаю PS/2 вместо RS232 а затем хочу поменять на SPI, так что идним разом буду смотреть на Qbasic (спасибо что подсказал). Счас уже транслятор кода с USB на PS/2 реализвал. Осталось подключить PS/2. Не работает пока непрерывная посылка кода при удержании нажатой клавиши но это поправимо все, так же как и клавиатура в Qbasic.
dsp
 
Posts: 127
Joined: Wed, 25.06.2014 05:53:32

Postby MVV » Tue, 19.05.2015 13:09:20

dsp, у тебя firware для vnc2 на git обновляется или то что здесь выложено? Просто на git можно в паре попробовать работать и нормально отслеживать сделанные изменения. Попробую разобраться, что у тебя там уже с vnc2.
На выходных начал с нового проекта [url=github.com/mvvproject/ReVerSE-U16/tree/master/u16_zx48k]zx-48k[/url], хочу увязать с NextZ80 работу SDRAM и кэш. Дальше уже пересобрать ts-conf на новой базе, постепенно задействовать все возможности платы U16.
MVV
 
Posts: 479
Joined: Sun, 01.12.2013 22:48:17

Postby dsp » Thu, 21.05.2015 18:26:04

На git ничего не обновляю не из за принципа какого, просто нет времни (надеюсь появится). Я сейчас спать ложусь где то в час - два ночи а утром (6 am )- надо просыпаться. Если есть какое время днем то разбираюсь с VNC2. На что-то еще, просто физически не получается. Может не по теме но существу - почему не обновляю и не учавствую в проектах на данный момент. Любое обновление (я думаю и на git тоже) требует ведения истории, и всего соответсвующего если по уму делать. Я не потяну сейчас. Пока VNC2 - более чем для меня. Мне проще здесь выложить и расписать что и как. Здесь как то все демократично. Что я вот надумал так собираюсь перепаять память (на меньшую) на U16 чтобы совместима была с твоей.
dsp
 
Posts: 127
Joined: Wed, 25.06.2014 05:53:32

Postby dsp » Thu, 21.05.2015 18:29:44

Превая тестовая (вполне рабочая ) версия USB to PS/2 конвертора для мышки и клавиатуры на VNC2. Ест-но не последняя. Можно компилировать и в Debug и в Release. Испытывал на ZET. Кстати в Qbasic клавиатура работает. Почему не работает в режиме RS232 я не разбирался еще. В программе два потока. Один обрабатывает все что касается USB и заодно отправляет байты c клавиатуры по PS/2. Второй обрабатывает PS/2 прием и передачу для мышки. Клавиатура на прием не работает (типа светодиодики зажигать пока не получится).
В прикрепленном архиве есть и ZET проект, в котором мышка и клавиатура реализованы только как PS/2 и там же есть конвертор на VNC2. Если все это зашить в U16 то ZET работает с USB мышкой и клавиатурой. Мышка бегает шустро и без дергания, что порадовало (смотреть надо в Win 3). Естественно есть неприятный момент, заключающийся в том, что длительность импульса CLK (PS/2) не есть постоянная. Объясняется это тем что вообще то надо работать с периферией через драйвера а не просто дергать ножки программно. Такая же аналогичная ситуация и Win XP (например).
Из за этого пришлось перенастроить входной фильтр на CLK клавиатуры (в FPGA ZET) с 60us на 180us. То есть временные параметры не соблюдаются (пока).
Attachments
VNC2 PS2 KB CLK.JPG
Last edited by dsp on Sun, 07.06.2015 13:23:12, edited 2 times in total.
dsp
 
Posts: 127
Joined: Wed, 25.06.2014 05:53:32

Postby MVV » Thu, 21.05.2015 18:32:58

dsp, пересобрал проект и сделал вывод на HDMI, увеличил частоту процессора до 25МГц, добавил звук на uBus (ссылка в подписи). Сейчас разбираюсь с PS/2...
MVV
 
Posts: 479
Joined: Sun, 01.12.2013 22:48:17

Postby dsp » Thu, 21.05.2015 18:36:23

MVV wrote:dsp, пересобрал проект и сделал вывод на HDMI

Спасибо
dsp
 
Posts: 127
Joined: Wed, 25.06.2014 05:53:32

Postby MVV » Fri, 22.05.2015 11:57:32

dsp, в общем доработал прошивку, сделал следующее: Bit 7=1 в таблице USB_PS2_tb указывает на префикс 0xE0, добавлены: 0x00=Overrun Error, 0x80=POST Fail, 0x7f=None. Исправлен код Caps Lock. Заработали все клавиши.
Осталось разобраться с автоповтором, что-то с алгоритм работы флага release и press, флаг PS2_KB.new_data должен устанавливать press для возможности передачи нажатых клавиш.
Как выглядит посылка PS/2 при удерживании клавиши? Если соответствует реальной, то скорее всего нужно смотреть что не так с времянками на ожидание в ps2.v

Глянул осциллом, автоповтора нет, после нажатия клавиши, в данном случае "пробел". Сверху реальная клавиатура PS/2, снизу VNC2.
VNC2 (ps2 keyboard mouse).7z
(144.3 KiB) Downloaded 378 times
Attachments
press_space_ps2real.gif
press_space_ps2real.gif (6.57 KiB) Viewed 24853 times
press_space.gif
press_space.gif (7.2 KiB) Viewed 24853 times
MVV
 
Posts: 479
Joined: Sun, 01.12.2013 22:48:17

Postby dsp » Sat, 23.05.2015 18:41:27

MVV, спасибо за сообщение.
Теперь как я это все вижу (Возможно что где то не прав, но тем не менее...)
MVV wrote:PS2_KB.new_data должен устанавливать press для возможности передачи нажатых клавиш.

Этот флаг просто сигнализирует что новые данные от клавиатуры готовы. Это в принципе для синхронизации потоков. Но так как в одном потоке все, то его хоть устанавливай хоть сбрасывай он не на что не повлияет (я его завел для будущего). Программа вообще дойдет то того места где этот флажок устанавливается в единичку только когда данные с USB клавиатуры придут, а USB клавиатура повторы не посылает. Для того чтобы реализовать повтор, надо еще один поток запустить (лучше всего). если посмотртеть то в основном цикле есть семафор, до него программа дойдет и остановится и будет ждать сообщения либо от мышки либо от клавиатуры.
MVV wrote:что-то с алгоритм работы флага release и press

тут все в порядке с алгоритном, так же как с осциллограммами реальной и VNC2 (смотрел и увидел только то что длительность импульса на постоянная). release и press относятся к стороне USB (тма повторов нет). Для реалицации повторной посылки кода при удержании клавиши надо завести таймер (в другом потоке или убрать семафор и переделать алгоритм этого потока). Когда таймер оттикает свое он должен проверить флажок press, а точнее надо завести last_press - это тольо на одну клавишу реакция. Если он установлен то отправить еще раз код.
MVV wrote:времянками на ожидание в ps2.v

Я думаю что ты про VNC2 хотел сказать а не про FPGA
Смотри выше мое сообшение с картиночкой где я красненьким выделил - 80us. Теперь все по порядку.
1. Таблица перекодировки у меня была сырая, если ты что исправил и добавил - Большое спасибо !!!!
2. Автоповтор не реализован был (точно так же как я его не было ни в одной версии на U16 c RS232 клавиатурой и во всех моих модификациях - до него просто руки не доходили). На PS2 думаю делать на стороне VNC2 а для SPI - на стороне FPGA.
3.
MVV wrote:что не так с времянками на ожидание в ps2.v

Этот момент не понял. Сигналы которые ты привел генерит VNC2 (функция PS2KB_write). Сигнал PS_CLK генерится в цикле при передаче байта и если понаблюдать то задрежка приходится не на один битик а бегает от битика к битику при передаче байта за байтом. Так происходит потому что запущено несколько потоков и переключение между ними - одна операционная системма знает на что и сколько времени выделать. (так же как и в Win 98 и выше где потоки существуют).
Можно экспериментировать с моей подпрограмкой как вздумается, может какие идеи и появятся еще.
dsp
 
Posts: 127
Joined: Wed, 25.06.2014 05:53:32

Postby MVV » Sun, 24.05.2015 08:14:38

dsp, как правильно сделать буфер в 14 байт, чтобы запись сделанная в ps2_keyboard.с в нем сохранялась? Разбираюсь в чем баг, в буфер пишется по 0x01 вместо несколько одновременно нажатых кодов клавиш.
MVV
 
Posts: 479
Joined: Sun, 01.12.2013 22:48:17

Postby dsp » Sun, 24.05.2015 12:44:28

MVV wrote:dsp, как правильно сделать буфер в 14 байт,

Я готов помочь и рассказать, только я не понимаю вопроса. То есть, какая проблема.
1. что-то не правильно работает (тогда опиши пожалуйста подробно)
2. ты занят реализацией повторной посылки кода от нажатой клавиши, тогда лучше вообще этот 14 байтный буфер не трогать у него совсем другое назначение. Я там структуры делал и по ссылке обращался, но это по привычке (и совсем не обязательно так делать), тут можно просто глобально объявить переменную какую или буфер и потом к нему обращаться. Тоже будет работать. Тут всего одна клавиатура, а не 10.

По поводу 14 байтного буфера (которых у меня аж целых два, и они все время местами меняются, поэтому по ссылке к ним обращаюсь).
Вот есть там такая функция
int KBParse(PS2_keyboard_t* pPS2_keyboard)
она занимается тем, что все время сравнивает текущее и предыдущее состояние клавиатуры, когда происходит одно из событий – нажали клавишу (несколько) или отпустили. Вот клавиатура прислала нам 8 байт и как понять, что уже было нажато до сего момента, а что нажали только-что или какую клавишу отпустили. Для этого сравниваем с предыдущим состоянием. Так как то, что сейчас текущее в следующий раз будет предыдущим состоянием, то все время по ссылке переприсваиваем буфер. Как бы реально существует два буфера LIN_BUF_0 и LIN_BUF_1 а обращаемся к ним (чтобы проще было) через ссылки LIN_BUF_curr и LIN_BUF_prev. Эти массивы по 14 байт, потому что функциональных клавиш 8 (по байту) и плюс обычные клавиши могут быть нажаты (до пяти клавиш)
if (pPS2_KB->SW == 0x0){
LIN_BUF_curr = pPS2_KB->LIN_BUF_0;
LIN_BUF_prev = pPS2_KB->LIN_BUF_1;
} else {
LIN_BUF_curr = pPS2_KB->LIN_BUF_1;
LIN_BUF_prev = pPS2_KB->LIN_BUF_0;
}

Это все работает. Не знаю, почему ты спрашиваешь, как туда записать что то.
Я сейчас пользуюсь своей прошивкой, отличие только в том, что клавиши курсора добавлены. Так как клавиатура точно такие же шлет коды без 0xE0 еще от аналогичных клавиш курсора (уж не помню, можно посмотреть) то я не стал пока заморачиваться на посылку этого самого 0xE0 байта (пока). Ты добавил – хорошо. Если у тебя проблемка что на стороне приемника FPGA что-то не работает, то поменяй строчку (было - timer_60usec_count == 12'h800)
ps2_keyb.v
assign timer_60usec_done = (timer_60usec_count == 12'hFF0); // 12'h800 = 4000~ 160us

Частоту clk ты увеличил c 12.5 до 25Mhz, но некоторые вещи были настроены на 12.5 Mhz. Может еще где надо править по хорошему но у меня работает и так.
Вот, как понял так и объяснил.

MVV wrote:как правильно сделать буфер в 14 байт, чтобы запись сделанная в ps2_keyboard.с в нем сохранялась

все что делается ps2_keyboard.с а именно в функии KBParse, сохраняется в структуре PS2_KB. с нее все можно прочитать и переписать.
dsp
 
Posts: 127
Joined: Wed, 25.06.2014 05:53:32

Postby MVV » Sun, 24.05.2015 16:33:20

dsp, спасибо за объяснение. В общем разобрался немного оптимизировал и доработал, сейчас в режиме отладки по uart. Всё заработало как я планировал, осталось реализовать автоповтор. Версию обновил в git.
Attachments
vnc2_2015_05_24_16_18.7z
(149.87 KiB) Downloaded 378 times
MVV
 
Posts: 479
Joined: Sun, 01.12.2013 22:48:17

Postby dsp » Sun, 24.05.2015 17:48:24

MVV wrote: Всё заработало как я планировал

Удачи!
dsp
 
Posts: 127
Joined: Wed, 25.06.2014 05:53:32

Postby MVV » Tue, 26.05.2015 16:47:24

dsp, добавил автоповтор последней нажатой не функциональной клавиши, при сверке осциллограммам посылок vnc и реальной клавиатуры без учёта времянок теперь стало схоже. Осталось придумать как наложить всё на время посылок реальной клавиатуры...
Image
Video from : youtube.com
Video from : youtube.com

Video from : youtube.com

dsp wrote:Я сейчас пользуюсь своей прошивкой

Удачи!

Keyboard protocols supported:
XT (scan code set 1) Если использовать эту кодировку, то не нужна будет табличка перекодировки в Zet
AT (scan code set 2)
PS/2 (MF2) (extended scan code set 2) Сейчас установлена эта
Terminal e.g. 3179/318x/319x (scan code set 3)

http://www.codeproject.com/Articles/752 ... c-Analyzer Есть ли для Evo нечто подобное по функционалу?
К стати по джойстику http://jenswilly.dk/tag/vnc2/
Attachments
vnc2_2015_05_26_16_46.7z
(271.38 KiB) Downloaded 380 times
MVV
 
Posts: 479
Joined: Sun, 01.12.2013 22:48:17

Postby dsp » Tue, 02.06.2015 22:14:30

Итак, c помощью хорошего человека MVV, проект USB-PS2 продвигается.
Не поленился и проверил последнее обновление от MVV для ZET на git и здесь. Кроме таблицы перекодировки решил ничего не менять в своей версии больше, так как разницы с моим исходным текстом не увидел (кроме изменения названия массивов и потока, алгоритм остался прежним), но тут как говорится, каждый выбирает сам. Еще добавился код по повторной посылке клавиш – что тоже уже хорошо. Можно даже и так сделать. В принципе как-бы уже все работает. По поводу временных параметров – так это я даже не буду пытаться делать. В идеале надо PS/2 делать на железе. Единственное что я уже по ходу сделал, так это пофиксил баг с клавишей F7. Баг заключается в том что такая клавиша не работает так как изначально у нее код 0x83 а старший битик в таблице перекодировки MVV отвечает за расширенный код и в результате будет передаваться 0xE0 + 0x03 вместо 0x83. На стороне FPGA это уже делали до меня на форуме ZET, но я код посеял, а у MVV оказался заремаренный. На стороне VNC2 у MVV на базе его таблицы – не обнаружил никаких намеков на корректную работу F7, поэтому пришлось дописать. Вот еще заодно переделал кодировку VGA для поддержки русского текста. Все в одном архиве.
Attachments
2015_06_03.RAR
(91.62 KiB) Downloaded 420 times
dsp
 
Posts: 127
Joined: Wed, 25.06.2014 05:53:32

Postby MVV » Tue, 02.06.2015 23:56:39

Убрал перекодеровку Fkeys и исправил передачу кода 0x83, спасибо dsp, обновил.
dsp wrote:В принципе как-бы уже все работает. По поводу временных параметров – так это я даже не буду пытаться делать. В идеале надо PS/2 делать на железе.

Как я уже писал выше, я бы ограничился пересылкой всего лишь ответного дескриптора (как это было сделано раньше, добавив сюда ещё и мышку), а обработка его, уже дело драйвера.
Сейчас собираю для U16 преобразователь uBUS-ZXBus для возможности подключения железок для этой шины - типа NeoGS, контроллер дисковода...
MVV
 
Posts: 479
Joined: Sun, 01.12.2013 22:48:17

Postby dsp » Sun, 07.06.2015 13:21:48

Начал эксперименты с тремя потоками, по потоку на USB, клавиатуру и мышку. Это вот у меня такая цель была в самом начале. Все воде бы ничего и при подаче питания на U16 все работает, как и планировалось, но после RESET (Я кнопку сделал на USB_RESET), курсор мышки по оси Y скачет вверх (при плавном перемещении мышки вверх) и вниз (аналогично при перемещении вниз). Причем это не случайный результат, а стабильно повторяющийся. Подаю питание – все работает как надо, после ресет – такая вот штука приключается. Толком еще не разбирался, так как мыслей конкретных нет – в чем причина. При поверхностной проверке VNC2 вроде все, как и раньше. Возможно что-то на стороне FPGA. Или с временами где-то узкое место. По ходу еще сделал возможность использования расширенной памяти для драйвера LTEMM (даже исходники на него есть и в интернете и у MVV в его проекте ZET в разделе что надо сделать).
Для проверки использовал программу CheckIt V3.0 Сейчас есть расширенная память - 2 MB (это исходный драйвер на такой объем сделан, а пока по железу можно до 4 MB, еще 2MB – на электронный диск). Ничего не прикрепил так как лимит уже исчерпал свой. Пока поэкспериментирую с тремя потоками. По поводу вложений (и лимита, что в общем правильно), если старые мои вложения поудалять то возможность добавлять файлы воссатновится или нет?
dsp
 
Posts: 127
Joined: Wed, 25.06.2014 05:53:32

Previous

Return to Hardware

Who is online

Users browsing this forum: No registered users and 1 guest

cron

x