Важная информация

User Tag List

Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 12

Тема: Сканирование клавиатуры

  1. #1
    Activist Аватар для artyr_n
    Регистрация
    02.02.2014
    Адрес
    г. Одесса, Украина
    Сообщений
    337
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Сканирование клавиатуры

    В Вектор USER №11 в разделе ПРОГРАММИРОВАНИЕ PPI КР580ВВ55А даётся пример сканирования клавиатуры по прерыванию. Попробовал ее использовать, но она почему то пишет в экранную область, где не могу найти. На сколько я разобрался то в ячейке MSXOB+1 хранится номер байта в буфере KEYBUF нажатых кнопок.
    Видимо нужно периодически смотреть не ноль ли там. Если не ноль прочесть из буфера нажатые кнопки и обнулить эту ячейку. Может я не правильно понял как этот пример использовать. Может у кого то есть пример исходника сканирования клавиатуры.
    Код:
            ; 8080 assembler code
            .hexfile keyscan_test.hex
            .binfile keyscan_test.r0m
            ; try "hex" for downloading in hex format
            .download bin  
            .objcopy objcopy
            .postbuild echo "Gotovo!"
            ;.nodump 
    .org	$0
    jmp start
    .org	$38
    RST7:
    	jmp INTRPT
    	
    
    .org 	$100
    
    
    
    
    STKEY:	db 01000010b
    ;статус клавиатуры
    NEWKEY:	ds 9
    OLDKEY:	ds 9
    KEYBUF:	ds 16
    RPTKEY:	db 13
    INTRPT:	push h
    	push d
    	push b
    	push psw
    	lxi h,STKEY
    	mov a,m
    	xri 10000b
    	mov m,a
    	ani 10000b
    ;scan or code?
    	jz KEYWRK
    	in 3
    	sta SCRL+1
    	mvi a,8Ah
    	out 0
    	mov a,m
    	out 1
    	mov c,a
    	inx h
    	in 1
    	ori 11111b
    	mov m,a
    	mvi b,11111110b
    int1:	mov a,b
    	out 3
    	rlc
    	mov b,a
    	in 2
    	inx h
    	mov m,a
    	jc int1
    	mvi a,88h
    	out 0
    	mov a,c
    	out 1
    	mvi a,0		;10000b
    	out 2
    SCRL:	mvi a,0	;dummy
    	out 3
    intf:	pop psw
    	pop b
    	pop d
    	pop h
    	ei
    	ret
    
    
    KEYWRK:	lxi h,intf
    	push h
    	lxi h,0A6AEh
    ;'xra m, ana m
    	shld PRESS7	;@PRESS
    ;seach for new pressed keys
    	call PRESS6	;PRESS?
    	rnz
    	lxi h,RPTKEY
    	dcr m
    	rnz
    	inr m
    	lxi h,0B72Fh
    ;'cma, ora a
    	shld PRESS7	;@PRESS
    	jmp pres5
    
    
    
    
    PRESS6:	lxi h,OLDKEY+8
    	lxi d,NEWKEY+8
    	mvi b,9
    pres1:	ldax d
    	cmp m
    	dcx h
    	dcx d
    	jnz pres2
    	dcr b
    	jnz pres1
    MSXOB:	lxi h,0
    	mov a,l
    	sub h
    	rat
    pres2:	mvi a,13
    	sta RPTKEY
    	pop h	;-1 ret
    pres5:	lxi h,OLDKEY+8
    	lxi d,NEWKEY+8
    	mvi c,64
    pres3:	ldax d
    	mov b,a
    PRESS7:	nop	;ana m cma
    	nop	;xra m ora a
    	mov m,b
    	jz nokey
    ;поиск бита
    	push h
    	push d
    	push b
    	mvi b,8
    kcod1:	dcr c
    	rlc
    	cc putbuf
    	dcr b
    	jnz kcod1
    	pop b
    	pop d
    	pop h
    nokey:	dcx h
    	dcx d
    	mov a,c
    	sui 8
    	mov c,a
    	jnz pres3
    ;else mode keys
    	ldax d
    	cmp m
    	rz
    	mov m,a
    	dcx d
    	cpi 10011111b
    ;US+SS?
    	mvi b,00100000b
    ;CAPS switch
    	jz ccod1
    	cpi 01011111b
    ;RUS+SS?
    	mvi b,01000000b
    ;QWER/JCUK switch
    	jz ccod1
    	ani 10000000b
    ;RUS?
    	rnz
    	mvi b,10001000b
    ;Rus & lamp switch
    ccod1:	ldax d
    	xra b
    	stax d
    	rat
    
    
    putbuf:	push psw
    ;push or don't modify BC!
    	lxi h,KBUF
    	push h
    	mov a,c
    	cpi 63	;space?
    	mvi a,32
    	rz
    ;... ... etc.
    	mov a,c
    	cpi 11h	;1
    	mvi a,33
    	rz	
    	mov a,c
    	cpi 07h	;DOWN
    	mvi a,07h
    	rz	
    	mov a,c
    	cpi 05h	;UP
    	mvi a,05h
    	rz	
    
    
    
    KBUF:	mov e,a
    	lhld MSXOB+1	;Загрузить в HL содержимое ячейки с адресом a16
    	mov a,l
    	inr a		;инкрементировать A
    	ani 15		;Логическое И непосредственные данные с A
    	cmp h		;Сравнить A с H
    	jz kbuf1
    	sta MSXOB+1	;Записать A по адресу a16
    	mvi a,1
    	out 0
    	mov a,l
    	lxi h,KEYBUF
    	add l
    	mov l,a
    	jnc adhla
    	inr h
    adhla:	xra a
    	out 0
    	mov m,e
    kbuf1:	pop psw
    	rat
    
    
    start:
    
    	ei
    
    
    cicl:
    	nop
    	jmp cicl
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	keyscan_test.jpg 
Просмотров:	216 
Размер:	19.3 Кб 
ID:	50759  

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,806
    Спасибо Благодарностей отдано 
    642
    Спасибо Благодарностей получено 
    1,773
    Поблагодарили
    1,023 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от artyr_n Посмотреть сообщение
    почему то пишет в экранную область
    В приведенном фрагменте нет инициализации стека. Возможно запускаете из под начального загрузчика, а он устанавливает стек в экранную область.

    Тоже сейчас думаю, откуда бы украсть опрос клавиатуры. Или выковырять из бейсика ("драйверы устройств"), или разобраться в варианте PPC из robotz, или накропать что-то свое

  4. #3
    Veteran
    Регистрация
    22.02.2014
    Адрес
    г. Курган
    Сообщений
    1,654
    Спасибо Благодарностей отдано 
    214
    Спасибо Благодарностей получено 
    301
    Поблагодарили
    212 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А чего, в этом коде не видно начальных установок для стека например?
    И ещё, я видать совсем асм забыл, но тупой вопрос: откуда будет считано значение в аккумулятор после команд
    INTRPT: push h
    push d
    push b
    push psw
    lxi h,STKEY
    mov a,m
    вроде задается только значение "H", а значение "L" - остается тем, которое было до входа в прерывание... или я снова глючу...?

  5. #4
    Activist Аватар для artyr_n
    Регистрация
    02.02.2014
    Адрес
    г. Одесса, Украина
    Сообщений
    337
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    В приведенном фрагменте нет инициализации стека.
    да действительно, установил стек ниже экрана и на экран мусорить перестало.

    ---------- Post added at 21:43 ---------- Previous post was at 21:41 ----------

    Цитата Сообщение от KTSerg Посмотреть сообщение
    вроде задается только значение "H", а значение "L" -
    вроде как задается HL
    LXI H,d16 21 Загрузить в HL непосредственные данные d16

  6. #5
    Veteran
    Регистрация
    22.02.2014
    Адрес
    г. Курган
    Сообщений
    1,654
    Спасибо Благодарностей отдано 
    214
    Спасибо Благодарностей получено 
    301
    Поблагодарили
    212 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    ...
    Тоже сейчас думаю, откуда бы украсть опрос клавиатуры. Или выковырять из бейсика ("драйверы устройств"), или разобраться из robotz, или накропать что-то свое
    В любой игрушке сделанной на основе "драйверов" есть "стандартная" обработка клавы
    Посмотреть, самое начало, там должна быть настройка переходов на прерывания, ну и станет ясно где смотреть...

  7. #6
    Activist Аватар для artyr_n
    Регистрация
    02.02.2014
    Адрес
    г. Одесса, Украина
    Сообщений
    337
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    Или выковырять из бейсика ("драйверы устройств")
    Пробовал дизассемблировать драйверы устройств, но очень быстро там потерялся.

  8. #7
    Veteran
    Регистрация
    22.02.2014
    Адрес
    г. Курган
    Сообщений
    1,654
    Спасибо Благодарностей отдано 
    214
    Спасибо Благодарностей получено 
    301
    Поблагодарили
    212 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от artyr_n Посмотреть сообщение
    вроде как задается HL
    LXI H,d16 21 Загрузить в HL непосредственные данные d16
    Смутило, что STKEY имеет формат Байта, а не Слова.
    Реально загружается видимо 0042h.

  9. #8
    Activist Аватар для artyr_n
    Регистрация
    02.02.2014
    Адрес
    г. Одесса, Украина
    Сообщений
    337
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от KTSerg Посмотреть сообщение
    Смутило, что STKEY имеет формат Байта, а не Слова.
    в HL загрузится адрес этой метки, а в А соответственно значение этой ячейки памяти

    Код:
    0100	42              STKEY:	db 01000010b
    	                ;статус клавиатуры
    0101	00 00 00 00     NEWKEY:	ds 9
    	. . . 
    0109	00 
    010A	00 00 00 00     OLDKEY:	ds 9
    	. . . 
    0112	00 
    0113	00 00 00 00     KEYBUF:	ds 16
    	. . . 
    011F	00 00 00 00 
    0123	0D              RPTKEY:	db 13
    0124	E5              INTRPT:	push h
    0125	D5               push d
    0126	C5               push b
    0127	F5               push psw
    0128	21 00 01         lxi h,STKEY
    012B	7E               mov a, m

  10. #9
    Veteran
    Регистрация
    22.02.2014
    Адрес
    г. Курган
    Сообщений
    1,654
    Спасибо Благодарностей отдано 
    214
    Спасибо Благодарностей получено 
    301
    Поблагодарили
    212 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Кстати, на счет сканирования клавиатуры, у меня в архиве есть файл под названием "RETEXD.ASM" - это исходник текстового редактора на сколько я понимаю. Там есть обработка клавиатуры и преобразование кодов в КОИ и таблица знакогенератора (12 байт на символ)

  11. #10
    Activist Аватар для artyr_n
    Регистрация
    02.02.2014
    Адрес
    г. Одесса, Украина
    Сообщений
    337
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от KTSerg Посмотреть сообщение
    у меня в архиве есть файл под названием "RETEXD.ASM"
    а ссылочку можно или на почту.

Страница 1 из 2 12 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Различное сканирование для Spectrum
    от SysCat в разделе Несортированное железо
    Ответов: 22
    Последнее: 14.09.2020, 21:26
  2. Распайка клавиатуры
    от razer в разделе Устройства ввода
    Ответов: 5
    Последнее: 02.06.2013, 21:16
  3. Куплю клавиатуры
    от voin в разделе Барахолка (архив)
    Ответов: 0
    Последнее: 24.12.2011, 22:13
  4. Книги на сканирование
    от NUK в разделе Пресса
    Ответов: 14
    Последнее: 12.09.2009, 18:19

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •