;----------------BANK0---------------------
	num	equ	R0	; введенное нами число
	LSB	equ	R1	; Хранилка для младшей части  полученного числа (пока что ОСТ)
	MSB	equ	R2	; Хранилка для старшей части 
	shift	equ	R3	; число для сдвига
	maskOCT	equ	R4	; Маска для получения числа в ОСТ
	maskHEX	equ	R5	; Маска для получения числа в HEX
;----------------BANK1---------------------
	YCode	equ	R0
	YCount	equ	R1	
	ScanCode	equ	R2
	XCode	equ	R3
	temp	equ	R4
;-----------------Прочие определения------	
	BANK0	equ	0x00
	BANK1	equ	0x01
	;PSW	equ	0xD0
;-----------------Конец определений-------	
	
		
org 0
	JMP	init
	
org 100
init:	
	MOV	num,#00
	MOV	LSB,#00
	MOV 	MSB,#00
	MOV	shift,#08h	; для O2H #10h
	MOV	maskOCT,#07h
	MOV	maskHEX,#0Fh
	mov	P1,#10h		; ИЗМЕНИТЬ ПОРТ (!)
	mov	B,#04h		; начальное значение для регистра (юзаем в скане клавы)


;=========================================
; Главный цикл программы
;=========================================
Main:	call scan
	call read
	jmp	Main
;-----------------------------------------
; ***** ОТЛАЖЕНО **** 
; Функция сканирования клавиатуры (столбцы)
;  Порт сканирования: Р0
;  Пины сканирования: 4-7
;  Сканирование еденицей
;-----------------------------------------	
scan:	MOV	PSW,BANK1		; Переключились на бакнк 1
	clr	C		; Так, на всякий случай :)
	mov	A,P1		; Скопировали состояние порта в аккум. ИЗМЕНИТЬ ПОРТ И В ИНИЦИАЛИЗАЦИИ ТОЖЕ(!)
	ANL	A,#0F0h		; Вырубили младшую тетраду
	cjne	A,#80h,next
	jmp	reload
next:	clr	C
	jz	reload		; Перезагрузили порт, если в нём был нуль
	rlc	A		; сдвинули аакум
	mov	P1,A		; передали в порт состояние аккумулятора
	inc	YCount		; Указали, что перешли на следующий столбец
	mov	A,YCount
	MUL	AB
	mov	YCode,A
	mov	B,#04h
sout:	MOV	PSW,BANK0		; Вернулись в банк0
	ret
reload:	mov	P1,#10h
	mov	YCode,#00h
	mov	R4,#00h 
	jmp	sout

;-----------------------------------------
; Функция чтения клавиатуры (Порт чтения Р0, пины 0-3. Строки)
;-----------------------------------------	
read: 	MOV	PSW,BANK1		; перешли в банк1
	clr	C		; Так, на всякий случай :) 
	mov	XCode,#00h	; Аналогично
	mov	temp,#00h		; :)
	mov	A,P1		; считали состояние порта 0 ИЗМЕНИТЬ ПОРТ НА 0 (!)
	ANL	A,#0Fh		; убили старшую тетраду
	;call	dreb		; ждём пока дребезг не устаканится		
	;setb	F0		; Подняли флаг, если что то нажато
	JZ	_end_		; Если тут нуль то выходим.

tryRd:	rrc	A		; Подвинули аакум и спихнули младший бит в С
	inc	XCode		; Увеличили счетчик сдвигов
	mov	temp,A		; Засейвились
	jc	end_		; Если С==1, то выходим из п/п
	jmp 	tryRd		; Нет		
end_:	mov	A,XCode
	add	A,YCode
	;jb	F0,chcCod		; Если нажата та же кнопка, то сбрасываем сканкод
	mov	ScanCode,A
	;setb	F0		; Подняли флаг, если что то нажато
	MOV	PSW,BANK0		; Вернулись в банк0
	ret
_end_:	mov	XCode,#00
	MOV	ScanCode,#00
	;clr	F0		; Уронили флаг, если порт в нуле (ниодной нажатой клавиши)
	MOV	PSW,BANK0		; Вернулись в банк0
	ret	
end