PC1-88 - одноплатный компьютер на 8088

16-битные ПЦ-совместимые компьютеры с процессорами 8086/8088/80286 работающие под управлением ДОС

Moderator: Shaos

User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: PC1-88 - одноплатный компьютер на 8088

Post by Lavr »

Tronix wrote:Помогла в этом деле страничка https://www.robertocarraro.com/?q=pic18 ... 2-keyboard.
С ходу с гугля не ищется, но делал по осциллограммам. Все так и работает у мну.
Хоршая страничка, черт побери! :roll:
Он прямо как букварь с коммиксами написал на тему сопряжения с ps2-keyboard! :wink:
iLavr
Vic3Dexe
Doomed
Posts: 370
Joined: 16 Dec 2014 11:58
Location: Киев

Re: PC1-88 - одноплатный компьютер на 8088

Post by Vic3Dexe »

Tronix wrote:Я ж недавно контроллер PS/2 для Поиска делал... тема на zx.pk Он у меня на PIC18F4620 (первое что было под рукой с Parallel Slave Port). Дык не замечал я никаких траблов со "звоном".
Если я правильно понял (тяжело код для PIC читать, давно с ними дела не имел), то взводится таймер

Code: Select all

ps2_enable_timer(100);
по первому изменению CLK он останавливается, и начинает выполняться дальнейший код

Code: Select all

ps2_read_bit();
Тогда понятно, что проблем нет, все остальные переключения просто игнорируются. Я так сделать не могу, у меня не контроллер.

Когда "звенит" - схема переключается лишние разы. Ну, например, сделал я счетчик принятых бит. Считает по фронту или спаду клока (непринципиально). Т.е. линия KBD_CLK заведена на тактовый вход счетчика.
Скажем, достиг он 10 - приняли все биты. А он достигает 10 то в середине последовательности, то вообще в начале, то ближе к концу. Т.е. считает быстрее, чем реально клок перебрасывается. Вывод? Дребезг. Откуда берется? Не знаю! :)
Tronix wrote:Помогла в этом деле страничка https://www.robertocarraro.com/?q=pic18 ... 2-keyboard.
Только не везде такая передача будет работать. Клава отвечает FA на КАЖДЫЙ переданный ей байт. Так вот моя при передаче ED nn не желает принимать второй байт пока не примешь FA от первого байта. Китайский ноунейм.
Tronix
Doomed
Posts: 662
Joined: 18 Nov 2013 02:38
Location: Москва

Re: PC1-88 - одноплатный компьютер на 8088

Post by Tronix »

Vic3Dexe wrote: Если я правильно понял (тяжело код для PIC читать, давно с ними дела не имел), то взводится таймер
Это первый вариант. Я забыл оконечный выложить, я там все начисто переделал. Таймер взводится каждый раз, когда есть перепад CLK. В таймере - выход из конечного автомата (установка на начальное значение). Таким образом, если клоков было не 10, а скажем 9, то на последнем девятом ждем 100мс и если ничего нет (клока последнего) - вываливаемся в начальное состояние конечного автомата, как будто ничего нам клава и не слала.

Вообще-то не буду лукавить, код я взял и нагло скопипастил (портировал) из проекта для AVR PS2 Encoder Ну конечно изменил малость для себя кое-чего, но в целом, оригинальный код там. Мне он понравился лаконичностью и вообще понравился. Удобно читается.

К слову сказать, четность не проверяется. Что приняли - то и выплевываю в Поиск. И повторюсь, при этом ошибочных нажатий кнопок пока не встретил. Поэтому и не стал заморачиваться с четностью.
Vic3Dexe wrote: Только не везде такая передача будет работать. Клава отвечает FA на КАЖДЫЙ переданный ей байт. Так вот моя при передаче ED nn не желает принимать второй байт пока не примешь FA от первого байта. Китайский ноунейм.
А в этом алгоритме (на AVR и, соответственно у меня) сразу после передачи автомат переключается на чтение. Поэтому если клава шлет после байта FA, мы его успешно принимаем (и игнорирую) и только затем шлем следующий байт клаве из буфера.
С контроллерами конечно по проще в этом отношении, чем с логикой.
А так - i8042 можно в схему поставить, как у всех AT вплоть до 586, и моск себе не этим больше не забивать.
Vic3Dexe
Doomed
Posts: 370
Joined: 16 Dec 2014 11:58
Location: Киев

Re: PC1-88 - одноплатный компьютер на 8088

Post by Vic3Dexe »

Tronix wrote:Таймер взводится каждый раз, когда есть перепад CLK. В таймере - выход из конечного автомата (установка на начальное значение).
Это понятно, я имел ввиду, что триггером условия "есть шевеление на линии клока" является первый перепад этого клока. Весь последующий дребезг игнорится.
Пока идут разборки с принятым битом, дребезг устаканивается, после чего следующий таймер реагирует уже на следующий первый перепад. Ну как-то так...
Tronix wrote:К слову сказать, четность не проверяется. Что приняли - то и выплевываю в Поиск. И повторюсь, при этом ошибочных нажатий кнопок пока не встретил. Поэтому и не стал заморачиваться с четностью.
Аналогично.
Tronix wrote:А в этом алгоритме (на AVR и, соответственно у меня) сразу после передачи автомат переключается на чтение. Поэтому если клава шлет после байта FA, мы его успешно принимаем (и игнорирую) и только затем шлем следующий байт клаве из буфера.
Почти аналогично, только логика выходит в исходное состояние, а FA я забираю процом (он в проц все равно должен попадать, совместимость, итить ее...)
Tronix wrote:А так - i8042 можно в схему поставить, как у всех AT вплоть до 586, и моск себе не этим больше не забивать.
download/file.php?id=463
Куда, например? Места нет вообще. :) Он же здоровенная 40-ногая дура... Да прошивку искать...
Tronix
Doomed
Posts: 662
Joined: 18 Nov 2013 02:38
Location: Москва

Re: PC1-88 - одноплатный компьютер на 8088

Post by Tronix »

Vic3Dexe wrote: Куда, например? Места нет вообще. :) Он же здоровенная 40-ногая дура... Да прошивку искать...
Стоп. Так вон же там на картинке какой-то адский циклон. В него разве не влезает обработка PS/2? С ходу нагуглил вариантов пять разных реализаций на VHDL... Или это в нем и делается, и при этом такие траблы с дребезгом?

А 8042 - это вообще однократно-программируемый контроллер на заводе, контроллер клавиатуры. Прошивку даже если и найти - залить в него не удастся (потому что она там уже есть). Их много разных было, 80C42, 82C42 (и другие названия) от различных фирм в различных корпусах, например PLCC.
Это i8048 - контроллер, в который в теории можно залить прошивку с 8042 и он превратится в 8042. Но не факт. Потому что по-моему в 8042 есть защелка встроенная на порту, который на шину данных смотрит, а в 8048 ее нет. Но может это просто мои фантазии. С другой стороны если у 8042 притянуть ногу EA (External Access) к VCC, то он превращается в 8035 - то есть обычный контроллер с внешней ПЗУ, откуда и исполняет опкоды (а не из своей внутренней OPT ROM) -)
newold86
Devil
Posts: 716
Joined: 30 Nov 2013 11:08
Location: WWW

Re: PC1-88 - одноплатный компьютер на 8088

Post by newold86 »

С год назад я пытался взять написанный на VHDL 8048 контроллер и прикрутить к нему прошивку от 8042. Сразу, к сожалению, не взлетело, а потом почему-то забросил.
Tronix
Doomed
Posts: 662
Joined: 18 Nov 2013 02:38
Location: Москва

Re: PC1-88 - одноплатный компьютер на 8088

Post by Tronix »

newold86 wrote:С год назад я пытался взять написанный на VHDL 8048 контроллер и прикрутить к нему прошивку от 8042. Сразу, к сожалению, не взлетело, а потом почему-то забросил.
А зачем эмулировать целый 8048? Достаточно же просто написать обработку PS/2 свою собственную. Или взять любую, благо открытых кодов на VHDL полно. На других языках не смотрел (Verilog), но уверен что тоже есть.

PS: Делают же спектрумы всякие на ПЛИС, где на плате ПЛИС, а снаружи PS/2 клава, мыша, SD, аудио-выход и VGA.
Vic3Dexe
Doomed
Posts: 370
Joined: 16 Dec 2014 11:58
Location: Киев

Re: PC1-88 - одноплатный компьютер на 8088

Post by Vic3Dexe »

Tronix wrote:Или это в нем и делается, и при этом такие траблы с дребезгом?
Именно.
Vic3Dexe
Doomed
Posts: 370
Joined: 16 Dec 2014 11:58
Location: Киев

Re: PC1-88 - одноплатный компьютер на 8088

Post by Vic3Dexe »

2 newold86
Просьба выполнить след. код на этой конструкции (интересует поведение 8259).
Синтаксис fasm, если что - архив с досовским экзешником прикручиваю.
Интересует выведенное на экран число, выход - по резету :)

Code: Select all

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'
You do not have the required permissions to view the files attached to this post.
newold86
Devil
Posts: 716
Joined: 30 Nov 2013 11:08
Location: WWW

Re: PC1-88 - одноплатный компьютер на 8088

Post by newold86 »

Vic3Dexe wrote:2 newold86
Просьба выполнить след. код на этой конструкции
Не уверен, что сделаю это раньше следующей среды...
Vic3Dexe
Doomed
Posts: 370
Joined: 16 Dec 2014 11:58
Location: Киев

Re: PC1-88 - одноплатный компьютер на 8088

Post by Vic3Dexe »

Так мне не срочно :)
Просто не пойму - должен ICW1 (он же master clear) сбрасывать ISR или нет. Документация говорит что нет, досбокс тоже не сбрасывает, но логически это бред - это же MASTER clear, по идее должен быть способом полного программного сброса контроллера.
А ведет это к тому, что если int9 писать так, как написан оригинальный, то перезагрузка по ctrl+alt+del блочит клаву, ибо EOI не высылается.
newold86
Devil
Posts: 716
Joined: 30 Nov 2013 11:08
Location: WWW

Re: PC1-88 - одноплатный компьютер на 8088

Post by newold86 »

Vic3Dexe wrote:Так мне не срочно :)
Просто не пойму - должен ICW1 (он же master clear) сбрасывать ISR или нет. Документация говорит что нет, досбокс тоже не сбрасывает, но логически это бред - это же MASTER clear, по идее должен быть способом полного программного сброса контроллера.
А ведет это к тому, что если int9 писать так, как написан оригинальный, то перезагрузка по ctrl+alt+del блочит клаву, ибо EOI не высылается.
В данный момент под рукой нет PS/2 клавиатуры, но могу повесить что-нибудь на 08. Некогда разбираться - там те же команды нужно выдать, или что-то модифицировать с учетом другого IRQ ?
newold86
Devil
Posts: 716
Joined: 30 Nov 2013 11:08
Location: WWW

Re: PC1-88 - одноплатный компьютер на 8088

Post by newold86 »

newold86 wrote:В данный момент под рукой нет PS/2 клавиатуры, но могу повесить что-нибудь на 08. Некогда разбираться - там те же команды нужно выдать, или что-то модифицировать с учетом другого IRQ ?
Вопрос отпал - оказывается, у меня еще одна в шкафу завалялась... Вот результат:
PICtest.jpg
You do not have the required permissions to view the files attached to this post.
Vic3Dexe
Doomed
Posts: 370
Joined: 16 Dec 2014 11:58
Location: Киев

Re: PC1-88 - одноплатный компьютер на 8088

Post by Vic3Dexe »

Супер, спасибо. Значит, документация и досбокс с нею врут со страшной силой.
Впрочем, не впервой...
newold86
Devil
Posts: 716
Joined: 30 Nov 2013 11:08
Location: WWW

Re: PC1-88 - одноплатный компьютер на 8088

Post by newold86 »

Блин, мне тут написали, а я даже сразу не мог понять, о чем идет речь - настолько забыл об этом проекте...

По просьбе написавшего выкладываю полную схему. Обращаю внимание, что в схеме есть несколько неисправленных ошибок, о которых я писал ранее.
PC1-88.pdf
You do not have the required permissions to view the files attached to this post.