|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
PC1-88 - одноплатный компьютер на 8088
Author |
Message |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Хоршая страничка, черт побери! Он прямо как букварь с коммиксами написал на тему сопряжения с ps2-keyboard!
_________________ iLavr
|
30 Jan 2016 09:04 |
|
|
Vic3Dexe
Doomed
Joined: 16 Dec 2014 11:58 Posts: 370 Location: Киев
|
Если я правильно понял (тяжело код для PIC читать, давно с ними дела не имел), то взводится таймер по первому изменению CLK он останавливается, и начинает выполняться дальнейший код Тогда понятно, что проблем нет, все остальные переключения просто игнорируются. Я так сделать не могу, у меня не контроллер. Когда "звенит" - схема переключается лишние разы. Ну, например, сделал я счетчик принятых бит. Считает по фронту или спаду клока (непринципиально). Т.е. линия KBD_CLK заведена на тактовый вход счетчика. Скажем, достиг он 10 - приняли все биты. А он достигает 10 то в середине последовательности, то вообще в начале, то ближе к концу. Т.е. считает быстрее, чем реально клок перебрасывается. Вывод? Дребезг. Откуда берется? Не знаю! Только не везде такая передача будет работать. Клава отвечает FA на КАЖДЫЙ переданный ей байт. Так вот моя при передаче ED nn не желает принимать второй байт пока не примешь FA от первого байта. Китайский ноунейм.
|
30 Jan 2016 23:19 |
|
|
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
Это первый вариант. Я забыл оконечный выложить, я там все начисто переделал. Таймер взводится каждый раз, когда есть перепад CLK. В таймере - выход из конечного автомата (установка на начальное значение). Таким образом, если клоков было не 10, а скажем 9, то на последнем девятом ждем 100мс и если ничего нет (клока последнего) - вываливаемся в начальное состояние конечного автомата, как будто ничего нам клава и не слала. Вообще-то не буду лукавить, код я взял и нагло скопипастил (портировал) из проекта для AVR PS2 Encoder Ну конечно изменил малость для себя кое-чего, но в целом, оригинальный код там. Мне он понравился лаконичностью и вообще понравился. Удобно читается. К слову сказать, четность не проверяется. Что приняли - то и выплевываю в Поиск. И повторюсь, при этом ошибочных нажатий кнопок пока не встретил. Поэтому и не стал заморачиваться с четностью. А в этом алгоритме (на AVR и, соответственно у меня) сразу после передачи автомат переключается на чтение. Поэтому если клава шлет после байта FA, мы его успешно принимаем (и игнорирую) и только затем шлем следующий байт клаве из буфера. С контроллерами конечно по проще в этом отношении, чем с логикой. А так - i8042 можно в схему поставить, как у всех AT вплоть до 586, и моск себе не этим больше не забивать.
|
31 Jan 2016 00:42 |
|
|
Vic3Dexe
Doomed
Joined: 16 Dec 2014 11:58 Posts: 370 Location: Киев
|
Это понятно, я имел ввиду, что триггером условия "есть шевеление на линии клока" является первый перепад этого клока. Весь последующий дребезг игнорится. Пока идут разборки с принятым битом, дребезг устаканивается, после чего следующий таймер реагирует уже на следующий первый перепад. Ну как-то так... Аналогично. Почти аналогично, только логика выходит в исходное состояние, а FA я забираю процом (он в проц все равно должен попадать, совместимость, итить ее...) download/file.php?id=463Куда, например? Места нет вообще. Он же здоровенная 40-ногая дура... Да прошивку искать...
|
31 Jan 2016 03:31 |
|
|
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
Стоп. Так вон же там на картинке какой-то адский циклон. В него разве не влезает обработка PS/2? С ходу нагуглил вариантов пять разных реализаций на VHDL... Или это в нем и делается, и при этом такие траблы с дребезгом? А 8042 - это вообще однократно-программируемый контроллер на заводе, контроллер клавиатуры. Прошивку даже если и найти - залить в него не удастся (потому что она там уже есть). Их много разных было, 80C42, 82C42 (и другие названия) от различных фирм в различных корпусах, например PLCC. Это i8048 - контроллер, в который в теории можно залить прошивку с 8042 и он превратится в 8042. Но не факт. Потому что по-моему в 8042 есть защелка встроенная на порту, который на шину данных смотрит, а в 8048 ее нет. Но может это просто мои фантазии. С другой стороны если у 8042 притянуть ногу EA (External Access) к VCC, то он превращается в 8035 - то есть обычный контроллер с внешней ПЗУ, откуда и исполняет опкоды (а не из своей внутренней OPT ROM) -)
|
31 Jan 2016 07:58 |
|
|
newold86
Devil
Joined: 30 Nov 2013 11:08 Posts: 709 Location: WWW
|
С год назад я пытался взять написанный на VHDL 8048 контроллер и прикрутить к нему прошивку от 8042. Сразу, к сожалению, не взлетело, а потом почему-то забросил.
|
31 Jan 2016 08:26 |
|
|
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
А зачем эмулировать целый 8048? Достаточно же просто написать обработку PS/2 свою собственную. Или взять любую, благо открытых кодов на VHDL полно. На других языках не смотрел (Verilog), но уверен что тоже есть. PS: Делают же спектрумы всякие на ПЛИС, где на плате ПЛИС, а снаружи PS/2 клава, мыша, SD, аудио-выход и VGA.
|
31 Jan 2016 08:37 |
|
|
Vic3Dexe
Doomed
Joined: 16 Dec 2014 11:58 Posts: 370 Location: Киев
|
|
31 Jan 2016 09:25 |
|
|
Vic3Dexe
Doomed
Joined: 16 Dec 2014 11:58 Posts: 370 Location: Киев
|
2 newold86Просьба выполнить след. код на этой конструкции (интересует поведение 8259). Синтаксис fasm, если что - архив с досовским экзешником прикручиваю. Интересует выведенное на экран число, выход - по резету | | | | Code: use16 format MZ entry _code:start
segment _code start: mov ax,3 int 10h ;---- вешаем прерывание push CS pop DS mov dx,Int09 mov ax,2509h int 21h ;---- ждем jmp $
;---- 9 прерывание
Int09: in al,60h ;снимаем запрос
;-------------- не разрешаем прерывания и не выдаем EOI ! -----------
;инициализируем PIC mov al,13h ;single, edge, ICW4 out 20h,al jmp $+2 mov al,8 out 21h,al ;ICW2 vector jmp $+2 mov al,9 out 21h,al ;ICW4, 8086 mode jmp $+2
;читаем ISR mov al,0Bh out 20h,al jmp $+2 in al,20h
;пишем на экран mov bx,digits and al,0Fh xlat byte [CS:bx] mov ah,0Eh mov bh,0 int 10h
;вешаемся jmp $
digits db '0123456789ABCDEF'
| | | | |
|
08 Feb 2016 05:43 |
|
|
newold86
Devil
Joined: 30 Nov 2013 11:08 Posts: 709 Location: WWW
|
Не уверен, что сделаю это раньше следующей среды...
|
08 Feb 2016 06:18 |
|
|
Vic3Dexe
Doomed
Joined: 16 Dec 2014 11:58 Posts: 370 Location: Киев
|
Так мне не срочно Просто не пойму - должен ICW1 (он же master clear) сбрасывать ISR или нет. Документация говорит что нет, досбокс тоже не сбрасывает, но логически это бред - это же MASTER clear, по идее должен быть способом полного программного сброса контроллера. А ведет это к тому, что если int9 писать так, как написан оригинальный, то перезагрузка по ctrl+alt+del блочит клаву, ибо EOI не высылается.
|
08 Feb 2016 06:49 |
|
|
newold86
Devil
Joined: 30 Nov 2013 11:08 Posts: 709 Location: WWW
|
В данный момент под рукой нет PS/2 клавиатуры, но могу повесить что-нибудь на 08. Некогда разбираться - там те же команды нужно выдать, или что-то модифицировать с учетом другого IRQ ?
|
12 Feb 2016 07:55 |
|
|
newold86
Devil
Joined: 30 Nov 2013 11:08 Posts: 709 Location: WWW
|
Вопрос отпал - оказывается, у меня еще одна в шкафу завалялась... Вот результат:
|
12 Feb 2016 08:18 |
|
|
Vic3Dexe
Doomed
Joined: 16 Dec 2014 11:58 Posts: 370 Location: Киев
|
Супер, спасибо. Значит, документация и досбокс с нею врут со страшной силой. Впрочем, не впервой...
|
12 Feb 2016 14:37 |
|
|
newold86
Devil
Joined: 30 Nov 2013 11:08 Posts: 709 Location: WWW
|
Блин, мне тут написали, а я даже сразу не мог понять, о чем идет речь - настолько забыл об этом проекте... По просьбе написавшего выкладываю полную схему. Обращаю внимание, что в схеме есть несколько неисправленных ошибок, о которых я писал ранее.
|
20 Apr 2017 02:32 |
|
|
Who is online |
Users browsing this forum: No registered users and 4 guests |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|