nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 09:51



Reply to topic  [ 270 posts ]  Go to page Previous  1 ... 14, 15, 16, 17, 18  Next
Отладочный модуль на К1801ВМ1 
Author Message
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Да она вроде как и читается более-менее - ЛН1 :)

Я хоть и "к старости слаба глазами стала", но распознавание образов в зашумлённой среде пока работает ;)

_________________
:dj: https://mastodon.social/@Shaos


24 Jan 2018 01:09
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
Да она вроде как и читается более-менее - ЛН1 :)

Привычка подвела... :-? По привычке ЛН1 должны быть просто 6 инверторов... :wink:
Вот и искал что-то типа ЛП1 ... ЛЛ1... :roll:

_________________
iLavr


24 Jan 2018 01:15
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Привел в удобочитаемый вид цепи подключения клавиатуры и индикатора:
Attachment:
MPSS_86_2_35.gif
MPSS_86_2_35.gif [ 59.63 KiB | Viewed 10607 times ]

А то непонятно мне её сканирование было... :-?

Но есть там один момент не совсем очевидный...
Сейчас еще матрицу клавиш понятно разрисую.


P.S. А со схемой у авторов, похоже, ошибочка вышла... В тексте статьи:
"Биты 0,1,2,3,4,5,6,7 - соответствуют сегментам А,В,С,D,E,F,G,Н", и эмуляция
7-сегментного индикатора это подтверждает. А на схеме - совсем не так!


P.P.S. Заменил схему на исправленный вариант. Успешная эмуляция программы
Монитор показывает, что вроде как никаких других неточностей нет.
:-?

_________________
iLavr


Last edited by Lavr on 05 Feb 2018 03:21, edited 3 times in total.



24 Jan 2018 02:48
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Матрица клавиатуры Отладочного модуля разведена следующим образом:
Attachment:
MPSS_86_2_KBM.gif
MPSS_86_2_KBM.gif [ 13.83 KiB | Viewed 10844 times ]

Сканирование матрицы осуществляется "бегущим нулём" с выходов дешифраторов D18, D19
типа К155ИД7. Эти же выходы И1 ... И13 осуществляют поразрядное подключение позиций
индикатора. На входы дешифраторов подаются разряды D8...D11 шины данных.
"При этом код строки К1 ... К4 считывается через входной порт пульта. Нажатой клавише
соответствует сигнал низкого уровня
(проверка их в строке происходит сверху вниз)".
Разряды D0...D7 шины данных через преобразователи уровня подаются на сегментные входы
ABCDEFGH индикатора.

Внешне сама клавиатура, согласно рисунку в статье, выглядит следующим образом:
Attachment:
MPSS_86_2_KB.gif
MPSS_86_2_KB.gif [ 5.61 KiB | Viewed 10844 times ]

Назначение клавиш совпадает с описанием в статье, но не совпадает с пультом "Электроника С5-2107",
от которого, якобы, согласно статье, клавиатура используется.
Attachment:
c5-2107-5.gif
c5-2107-5.gif [ 49.81 KiB | Viewed 10844 times ]

Человек я добрый, но русские надписи на клавиатуре типа "БСЧ-БАП" меня почему-то раздражают... :lol:

_________________
iLavr


24 Jan 2018 06:36
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
Сделал развертку по позициям индикатора, и оно заработало! :o
Image
Стартует всегда, как и написано в статье, с "0" в крайнем разряде.
Дальше, как я понимаю, Монитор читает порт 177714о, в который сам же и записал только что
код и знакоместо индикатора, и воспринимает это как нажатие кнопок клавиатуры.

На самом деле оказалось, что значение, выдаваемое в "COVOX", эмулятор БК-0010 просто нигде
не хранит.
В ячейку 177714о он записывает только состояние "джойстика", если поддержка джойстика
с клавиатуры разрешена.
Так что если изначально в ячейку 177714о записать значение 0х0000FFFF, то Монитор при
старте четко устанавливается в стартовой позиции с "0" в крайнем разряде.

_________________
iLavr


24 Jan 2018 21:06
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Приятный результат, что эмулятор БК-0010 "слушает" клавиатуру обычным образом, через сообщения
Выньдоуз в его очередь.
Поэтому срабатывают
Code:
PostMessage(hwnd, WM_KEYDOWN, VK_хх, lParam);
PostMessage(hwnd, WM_KEYUP, VK_хх, lParam);
посланные ему из другого окна.

Неприятный результат, что в теле самого эмулятора БК-0010 места на обработку 24 клавиш
пульта практически нет.
Придется, видимо, использовать функцию, вызываемую из dll, дважды.
Чтобы различать вызовы для индикатора и вызовы для клавиатуры, предполагаю в качестве флага
использовать старшее слово передаваемого в функцию аргумента.

_________________
iLavr


25 Jan 2018 08:38
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
срабатывают
Code:
PostMessage(hwnd, WM_KEYDOWN, VK_хх, lParam);
PostMessage(hwnd, WM_KEYUP, VK_хх, lParam);
посланные ему из другого окна.

Значит пульт Монитора теперь будет эмулироваться целиком вместе с клавишами:
Attachment:
digidisp91.gif
digidisp91.gif [ 7.17 KiB | Viewed 10787 times ]

Попробовал - обычные коды клавиатуры посылаются хорошо, но для "джойстика" надо посылать
коды боковой клавиатуры с учетом признака KF_EXTENDED.
Проверяется в обслуживании "джойстика": if (!(nFlags & KF_EXTENDED))
Ну и надо будет засинхронизировать посылку "нажатий" с кодом опроса индикатора...

Наверно надо будет заменить на клавишах некоторые русские надписи на более првычные английские.
Всё-таки П - повторный пуск - это RES, Шаг - это Step, и т.д.

_________________
iLavr


25 Jan 2018 22:21
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Заменил надписи на кнопках на английские - стало гораздо понятнее... 8)
Attachment:
kbdscan.gif
kbdscan.gif [ 18.32 KiB | Viewed 10729 times ]

С большим трудом вписал патчем в код БК-0010 опрос порта о177714 в процедуру чтения клавиш
джойстика - трудоёмко было сдвинуть код, поэтому вписывался как есть...

Джойстик эмулятора БК-0010 понимает нажатия клавиш, как установку битов порта о177714 в 1.
Монитор же наоборот понимает нажатия клавиш, как сброс битов порта о177714 в 0.

В итоге получился некий компромисс: джойстик наоборот... :wink:
Хотя Монитору надо всего 4 бита, можно манипулировать всеми 8-ю, что и видно на картинке.

Остался последний шаг - посылать скан-коды синхронно с опросом Монитором разрядов индикатора...
И трудность будет в том, что по идее, для подавления "дребезга контактов" Монитор может фиксировать
нажатие клавиши не с одного опроса.

Очень много времени потерял на глупую затею: хотел сделать кнопку RES красной - чисто для красоты. :-?
Оказалось, что цвет стандартной кнопки типа BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD | WS_TABSTOP
простыми способами поменять практически нельзя. :osad:
Надо делать её типа BS_OWNERDRAW и отрисовывать программно самому - решил не усложнять программу...

_________________
iLavr


31 Jan 2018 02:02
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
Остался последний шаг - посылать скан-коды синхронно с опросом Монитором разрядов индикатора...
И трудность будет в том, что по идее, для подавления "дребезга контактов" Монитор может фиксировать
нажатие клавиши не с одного опроса.

Да, похоже, что сканирование клавиш проходит не с одного опроса столбца... :-?
Клавиши срабатывают, но со сбоями. Придется посмотреть код Монитора - как конкретно
организован опрос, и имитировать кнопками эту процедуру...

_________________
iLavr


31 Jan 2018 19:57
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Я, конечно, пока еще не очень освоился с ассемблером 1801ВМ1, но насколько я вижу,
"противодребезговых" мероприятий в коде опроса клавиатуры вроде как и нет. :-?
В лобовую пишут в порт позицию разряда, сразу же читают порт и сдвигом вправо начинают
анализировать биты, не более 4-х сдвигов.
Видимо, в эмуляции я не успеваю "отпустить" кнопку, поэтому она считывается не один раз.
Code:
;------ ADDR KBD SCAN ------------------------------------------------------------------;
0013372          MOV        R3, -(SP)
0013374          MOV        R1, -(SP)
0013376          MOV        R2, -(SP)
0013400          TST        100(R0)
0013404          BEQ        13422
0013406          TSTB       127(R0)
0013412          BNE        13422
0013414          MOVB      #175, 127(R0)
;--------------------------
0013422          JSR        PC, 13676; PULT ;
0013426          BIC       #20, R4; 0001.0000 Bit Clear

0013432          MOV       #400, R3; 100h = 1.0000.0000b - позиция 1 в старшем бите
;                          #410, R3; 108h = 1.0000.1000b - позиция 1 в старшем бите-'_'
;                                R3 - счетчик позиций в старшем байте, код - в младшем;
0013436          CLR        R5;    = 0;  - счетчик строк;
0013440          MOV       #4, R2; = 4 max счетчика строк;
;-------------------- 13444 --------------------
0013444          MOV        R3, @13770; R3 -> по адресу пульта указана позиция;
0013450          MOV       @13770, R1 ; читаем код с адреса пульта -> R1
;-------------------- 13454
0013454          ROR        R1; Rotate Right -> C ;
0013456          BLO        13462; Branch if Lower (бит C PSW равен 1) сам бит =0 на шине;
0013460          BR         13534;
;-------------------- 13462
0013462          CMP         R5, #33; 1Bh = 0001.1011b; счетчик строк проверка на 27 ?
0013466          BEQ         13506  ; если равен 27;

0013470          INC         R5; R5 = R5 + 1 счетчик строк увеличим;
0013472          CMP         R5, R2;  R5 < 4=R2 ?;
0013474          BLT         13454; Branch if Less Then НА Rotate Right -> C ;

0013476          CMP        (R2)+, (R2)+ ; R2 = R2 + 2;
0013500          ADD        #400, R3; + 100h = 1.0000.0000b следующий разряд в строке;
0013504          BR          13444; на R3 -> по адресу пульта указать новую позицию;
;-------------------- 13506
0013506          BIT        #20, R4; Bit Test 10h = 0001.0000b;
0013512          BNE         13520

0013514          CLR         104(R0)
;-------------------- 13520
0013520          BIC        #40000, R4; Bit Clear 4000h = 0100.0000.0000.0000b;
0013524          MOV        #177777, 110(R0); 0FFFFh;
0013532          BR          13422; на  JSR PC, 13676; PULT ;
;-------------------- 13534
0013534          TST         104(R0)
0013540          BMI         13560
0013542          BIT        #40000, R4; Bit Test  0100.0000.0000.0000b;
0013546          BEQ         13616
0013550          ADD        #700, 104(R0)
0013556          BR          13422; на  JSR PC, 13676; PULT ;
;-------------------- 13560
0013560          BIS        #20, R4; Bit Set  0000.0000.0000.0010b;
0013564          CMP         R5, 110(R0)
0013570          BLE         13462; на  CMP  R5, #33;
0013572          MOV        #3, 106(R0)
;-------------------- 13600
0013600          JSR         PC, 13676; PULT
0013604          DEC         106(R0)
0013610          BPL         13600;----/\
0013612          MOV         R5, 110(R0)
;-------------------- 13616
0013616          BIS        #40000, R4; Bit Set  0100.0000.0000.0000b;
0013622          MOV        (SP)+, R2
0013624          MOV        (SP)+, R1
0013626          MOV        (SP)+, R3
0013630          MOVB        127(R0), 106(R0)
0013636          CLRB        127(R0)
0013642          ASL         R5
0013644          ADD         PC, R5
0013646          ADD        #177434, R5; 0FF1Ch
0013652          MOV        (R5), R5
0013654          CMP        #10, R5
0013660          BLT         13666;
0013662          JMP         10134
;-------------------- 13666
0013666          ADD         PC, R5;  R5 = R5 + PC;
0013670          SUB        #4670, R5; 9B8h, 2488
0013674          JMP        (R5)

_________________
iLavr


01 Feb 2018 04:06
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Что-то я никак не подстроюсь под процедуру опроса кнопок в Мониторе.... :-?
То есть, кнопки то работают правильно, то сбоить начинают.

Добавил выше более разобранный код опроса клавиатуры.
Меня очень смущает один момент:
Code:
0013476          CMP        (R2)+, (R2)+ ;
0013500          ADD        #400, R3; + 100h = 1.0000.0000b следующий разряд в строке;
0013504          BR          13444; на R3 -> по адресу пульта указать новую позицию;

строчка CMP (R2)+, (R2)+ ; мне кажется, это просто R2 = R2 + 2;
т.к. CMP (R2)+, (R2)+ ; сработает всегда одинаково, и по итогу сравнения никаких
действий не предпринимается...

_________________
iLavr


03 Feb 2018 10:43
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
Меня очень смущает один момент:
строчка CMP (R2)+, (R2)+ ; мне кажется, это просто R2 = R2 + 2;

Пришлось-таки прибегнуть к проходу отладчиком, хотя думал, что "на глаз" обойдусь...
Строчка CMP (R2)+, (R2)+ ; на самом деле выполняет R2 = R2 + 4; ! :o
Не зная ассемблера 1801ВМ1, "на глаз" ни за что не догадаешься! 8)

_________________
iLavr


04 Feb 2018 06:35
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Да, кстати, я так было и подумал - оно же по адресам скачет по 2 байта, значит двойной инкремент будет +4

_________________
:dj: https://mastodon.social/@Shaos


04 Feb 2018 10:46
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
В общем, раз уж дошло до отладчика, погонял я внимательно алгоритм сканирования клавиатуры,
и подпатчил код Монитора вот в этом месте:
Code:
;-------------------- 13444 --------------------
0013444          MOV        R3, @13770; R3 -> по адресу пульта указана позиция;
0013450          MOV       @13770, R1 ; читаем код с адреса пульта -> R1
;-------------------- 13454
0013454          ROR        R1; Rotate Right -> C ;

Вот так:
Code:
;-------------------- 13444 --------------------
0013444          JMP        14000; выйдем на свободное место за Монитор
0013450          MOV       @13770, R1 ; читаем код с адреса пульта -> R1
;-------------------- 13454
0013454          ROR        R1; Rotate Right -> C ;

...

0014000          MOV        R3, @13770; R3 -> по адресу пульта указана позиция;
0014004          MOV       @13770, R1 ; читаем код с адреса пульта -> R1
0014010          BIS       #1, R3; установим бит 0 = 1 признак для dll-библиотеки
0014014          MOV        R3, @33770; сообщаем dll-библиотеке, что скан-код считан
0014020          BIC       #1, R3; Bit Clear 4000h = 0001b - сбрасываем бит 0 = 0, как и было
0014024          JMP        0013454; возвращаемся в Монитор, откуда пришли.

То есть, теперь Монитор сам сообщает, что скан-код считан и кнопку можно "отпустить". :wink:
Ну и виртуальная клавиатура сразу заработала четко, как "A Clockwork Orange"... 8)
Attachment:
digidispB.gif
digidispB.gif [ 28.48 KiB | Viewed 10622 times ]

Хотелось бы сказать:"Ура!"... но "Не Ура..."- задолбал меня этот патч в целом... :-?

Единственное, есть теперь уверенность, что код Монитора, выложенный здесь на форуме,
работоспособен процентов так на 99...

Ну и планирую я его ассемблерный текст привести к виду, который бы компилировался в побитную копию.
А это не так просто, Монитор перемещаемый - почти всё на относительных смещениях... :-?

_________________
iLavr


04 Feb 2018 14:30
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
А у нас на форуме или еще где-либо есть удобочитаемая схема БК-шки?
Хотел глянуть кое-что, но везде только скан из её мануала на двух листах.
Кому-нибуть попадалось более приемлемое изображение схемы БК ?

_________________
iLavr


07 Feb 2018 11:24
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 270 posts ]  Go to page Previous  1 ... 14, 15, 16, 17, 18  Next

Who is online

Users browsing this forum: No registered users and 9 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

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.