Цитата Сообщение от caro Посмотреть сообщение
Код:
;==========================================================
; На линиях PORTD фиксируются изменения состояния адресов
				;4 PCINT2 PORTD 
	in	YL,PIND		;+1 адрес сканирования
	ld	scanFF,Y	;+2 скан код из текущего буфера
	out	PORTB,scanFF	;+1 выдать в порт данных
				;=8 тактов => 1 Мксек при 8 МГц
; Регистровая пара Y по умолчанию указывает на 256 байтный буфер,
; в котором сформирована таблица с кодами нажатых клавиш
; Это в случае матрицы 8*8
; ----
; Для дополнительных 3 бит нужно будет сформировать еще один буфер на 256 байт
; Для ускорения работы сделаем его со старшим байтом адреса, отличающимся
; на 1 бит от первого буфера, например 0200h и 0300h
	sbr	YH,1<<0		;+1 -> Y=03xx
; теперь прочитаем код нажатых клавиш из нового буфера
	ld	scanFF,Y            ;+2
; а вот теперь надо обязательно запомнить регистр статуса МК
	in	tempS,SREG	;+1 сохранить СТАТУС
        in      port_C,PINC        ;+1 текущее состояние порта C
        andi   port_C,0xF8        ;+1 обнулить 3 мл. бита
	or	scanFF,port_C	;+1 добавим 3 бита из буфера клавиш 		
	out	PORTC,scanFF	;+1
				;= 16 тактов => 2 мксек
; завершили выдачу во второй порт клавиатуры
	cbr	YH,1<<0		; Y=02xxh 
	out	SREG,tempS	; восстановить СТАТУС
	reti			;+4 возврат
;**********************************************************
Получилось 2 мксек.
Посмотри, если есть возможность, сколько времени в ОРИОНЕ занимает чтение порта клавиатуры.
Если больше 2 мксек до момента фиксации данных, то может и пройдет.
На спектруме, при тактовой частоте 3.5 Мгц реакция должна быть не более 0.7 мксек.
А у Ориона по моему тактовая = 2 МГц если я не ошибаюсь?
Самая короткая (скоростная) последовательность чтения с клавиатуры для Ориона будет такая:
Код:
ld hl,0F400h ; base PPA address
ld a,scancode  ; 8 bits
ld (hl),a  ; 7 tstates
inc l      ; 4 tstates
ld b,(hl)  ; 7 tstates
inc l      ; 4 tstates
ld c,(hl)  ; BC[15..5]=resulting inkey bits
как видим, порядка 10 тактов на реакцию от контроллера, т.е. для частот до 5 Мгц вполне умещаемся.
Причем, это минимальная подпрограмма, большинство прочих написано куда как менее оптимально.