SX Microcontroler based Matrix Keyboard

Ken Webster says:

I just happened to have an example [of a keyboard to SX interface]. It is for a 4x4 keypad connected [...] on PORTB. It doesn't do the fast scan ... just a plain old one-row-at-a-time scan. I had PORTB (output latch) set to 0. Weak pullups were enabled.

Pinout is kinda funky (to make PCB layout easier):


6---(1)-(2)-(3)-(A)
     |   |   |   |
7---(4)-(5)-(6)-(B)
     |   |   |   |
5---(7)-(8)-(9)-(C)
     |   |   |   |
2---(*)-(0)-(#)-(D)
     |   |   |   |
     3   4   0   1



;------------------------------------------------------------
;Called by interrupt handler to scan the keypad
;Returns with W=ASCII if a key is pressed, W=0 otherwise
;Interrupt handler performs debounce
SCAN1	mov	W, #$40	;Enable ROW0 output
	mov	DDRB, W
	nop
	nop
	sb	RB.3
	retw	#'1'
	sb	RB.4
	retw	#'2'
	sb	RB.0
	retw	#'3'
	sb	RB.1
	retw	#'A'
	mov	W, #$80	;ROW1
	mov	DDRB, W
	nop
	nop
	sb	RB.3
	retw	#'4'
	sb	RB.4
	retw	#'5'
	sb	RB.0
	retw	#'6'
	sb	RB.1
	retw	#'B'
	mov	W, #$20	;ROW2
	mov	DDRB, W
	nop
	nop
	sb	RB.3
	retw	#'7'
	sb	RB.4
	retw	#'8'
	sb	RB.0
	retw	#'9'
	sb	RB.1
	retw	#'C'
	mov	W, #$04	;ROW3
	mov	DDRB, W
	nop
	nop
	sb	RB.3
	retw	#'*'
	sb	RB.4
	retw	#'0'
	sb	RB.0
	retw	#'#'
	sb	RB.1
	retw	#'D'
	retw	#0

Interested: