|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Отладочный модуль на К1801ВМ1
Author |
Message |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22616 Location: Silicon Valley
|
Да она вроде как и читается более-менее - ЛН1 Я хоть и "к старости слаба глазами стала", но распознавание образов в зашумлённой среде пока работает
|
24 Jan 2018 01:09 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Привычка подвела... По привычке ЛН1 должны быть просто 6 инверторов... Вот и искал что-то типа ЛП1 ... ЛЛ1...
_________________ iLavr
|
24 Jan 2018 01:15 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Привел в удобочитаемый вид цепи подключения клавиатуры и индикатора: А то непонятно мне её сканирование было... Но есть там один момент не совсем очевидный... Сейчас еще матрицу клавиш понятно разрисую. 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 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Матрица клавиатуры Отладочного модуля разведена следующим образом: Сканирование матрицы осуществляется "бегущим нулём" с выходов дешифраторов D18, D19типа К155ИД7. Эти же выходы И1 ... И13 осуществляют поразрядное подключение позиций индикатора. На входы дешифраторов подаются разряды D8...D11 шины данных. " При этом код строки К1 ... К4 считывается через входной порт пульта. Нажатой клавише соответствует сигнал низкого уровня ( проверка их в строке происходит сверху вниз)". Разряды D0...D7 шины данных через преобразователи уровня подаются на сегментные входы ABCDEFGH индикатора. Внешне сама клавиатура, согласно рисунку в статье, выглядит следующим образом: Назначение клавиш совпадает с описанием в статье, но не совпадает с пультом " Электроника С5-2107", от которого, якобы, согласно статье, клавиатура используется. Человек я добрый, но русские надписи на клавиатуре типа " БСЧ-БАП" меня почему-то раздражают...
_________________ iLavr
|
24 Jan 2018 06:36 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
| | | | Lavr wrote: Сделал развертку по позициям индикатора, и оно заработало! Стартует всегда, как и написано в статье, с " 0" в крайнем разряде. Дальше, как я понимаю, Монитор читает порт 177714о, в который сам же и записал только что код и знакоместо индикатора, и воспринимает это как нажатие кнопок клавиатуры. | | | | |
На самом деле оказалось, что значение, выдаваемое в "COVOX", эмулятор БК-0010 просто нигде не хранит. В ячейку 177714о он записывает только состояние "джойстика", если поддержка джойстика с клавиатуры разрешена. Так что если изначально в ячейку 177714о записать значение 0х0000FFFF, то Монитор при старте четко устанавливается в стартовой позиции с " 0" в крайнем разряде.
_________________ iLavr
|
24 Jan 2018 21:06 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Приятный результат, что эмулятор БК-0010 "слушает" клавиатуру обычным образом, через сообщения Выньдоуз в его очередь. Поэтому срабатывают посланные ему из другого окна. Неприятный результат, что в теле самог о эмулятора БК-0010 места на обработку 24 клавиш пульта практически нет. Придется, видимо, использовать функцию, вызываемую из dll, дважды. Чтобы различать вызовы для индикатора и вызовы для клавиатуры, предполагаю в качестве флага использовать старшее слово передаваемого в функцию аргумента.
_________________ iLavr
|
25 Jan 2018 08:38 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Значит пульт Монитора теперь будет эмулироваться целиком вместе с клавишами: Попробовал - обычные коды клавиатуры посылаются хорошо, но для "джойстика" надо посылать коды боковой клавиатуры с учетом признака KF_EXTENDED. Проверяется в обслуживании "джойстика": if (!(nFlags & KF_EXTENDED)) Ну и надо будет засинхронизировать посылку "нажатий" с кодом опроса индикатора... Наверно надо будет заменить на клавишах некоторые русские надписи на более првычные английские. Всё-таки П - повторный пуск - это RES, Шаг - это Step, и т.д.
_________________ iLavr
|
25 Jan 2018 22:21 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Заменил надписи на кнопках на английские - стало гораздо понятнее... С большим трудом вписал патчем в код БК-0010 опрос порта о177714 в процедуру чтения клавиш джойстика - трудоёмко было сдвинуть код, поэтому вписывался как есть... Джойстик эмулятора БК-0010 понимает нажатия клавиш, как установку битов порта о177714 в 1. Монитор же наоборот понимает нажатия клавиш, как сброс битов порта о177714 в 0. В итоге получился некий компромисс: джойстик наоборот... Хотя Монитору надо всего 4 бита, можно манипулировать всеми 8-ю, что и видно на картинке. Остался последний шаг - посылать скан-коды синхронно с опросом Монитором разрядов индикатора... И трудность будет в том, что по идее, для подавления "дребезга контактов" Монитор может фиксировать нажатие клавиши не с одного опроса. Очень много времени потерял на глупую затею: хотел сделать кнопку RES красной - чисто для красоты. Оказалось, что цвет стандартной кнопки типа BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD | WS_TABSTOPпростыми способами поменять практически нельзя. Надо делать её типа BS_OWNERDRAW и отрисовывать программно самому - решил не усложнять программу...
_________________ iLavr
|
31 Jan 2018 02:02 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Да, похоже, что сканирование клавиш проходит не с одного опроса столбца... Клавиши срабатывают, но со сбоями. Придется посмотреть код Монитора - как конкретно организован опрос, и имитировать кнопками эту процедуру...
_________________ iLavr
|
31 Jan 2018 19:57 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Я, конечно, пока еще не очень освоился с ассемблером 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 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Что-то я никак не подстроюсь под процедуру опроса кнопок в Мониторе.... То есть, кнопки то работают правильно, то сбоить начинают. Добавил выше более разобранный код опроса клавиатуры. Меня очень смущает один момент: строчка CMP (R2)+, (R2)+ ; мне кажется, это просто R2 = R2 + 2; т.к. CMP (R2)+, (R2)+ ; сработает всегда одинаково, и по итогу сравнения никаких действий не предпринимается...
_________________ iLavr
|
03 Feb 2018 10:43 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Пришлось-таки прибегнуть к проходу отладчиком, хотя думал, что "на глаз" обойдусь... Строчка CMP (R2)+, (R2)+ ; на самом деле выполняет R2 = R2 + 4; ! Не зная ассемблера 1801ВМ1, "на глаз" ни за что не догадаешься!
_________________ iLavr
|
04 Feb 2018 06:35 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22616 Location: Silicon Valley
|
Да, кстати, я так было и подумал - оно же по адресам скачет по 2 байта, значит двойной инкремент будет +4
|
04 Feb 2018 10:46 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
В общем, раз уж дошло до отладчика, погонял я внимательно алгоритм сканирования клавиатуры, и подпатчил код Монитора вот в этом месте: Вот так: То есть, теперь Монитор сам сообщает, что скан-код считан и кнопку можно "отпустить". Ну и виртуальная клавиатура сразу заработала четко, как "A Clockwork Orange"... Хотелось бы сказать:"Ура!"... но "Не Ура..."- задолбал меня этот патч в целом... Единственное, есть теперь уверенность, что код Монитора, выложенный здесь на форуме, работоспособен процентов так на 99... Ну и планирую я его ассемблерный текст привести к виду, который бы компилировался в побитную копию. А это не так просто, Монитор перемещаемый - почти всё на относительных смещениях...
_________________ iLavr
|
04 Feb 2018 14:30 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
А у нас на форуме или еще где-либо есть удобочитаемая схема БК-шки? Хотел глянуть кое-что, но везде только скан из её мануала на двух листах. Кому-нибуть попадалось более приемлемое изображение схемы БК ?
_________________ iLavr
|
07 Feb 2018 11:24 |
|
|
Who is online |
Users browsing this forum: No registered users and 43 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
|
|