OpenCores
URL https://opencores.org/ocsvn/eco32/eco32/trunk

Subversion Repositories eco32

[/] [eco32/] [trunk/] [monitor/] [monitor/] [common/] [keyboard.s] - Rev 78

Go to most recent revision | Compare with Previous | Blame | View Log

;
; keyboard.s -- a PC keyboard as input device
;
 
;***************************************************************
 
	.set	kbdbase,0xF0200000	; keyboard base address
 
;	.import	cout
;	.import	byteout
 
	.import	xltbl1			; kbd translation table 1
	.import	xltbl2			; kbd translation table 2
 
	.export	kbdinit			; initialize keyboard
	.export	kbdinchk		; check if input available
	.export	kbdin			; do keyboard input
 
;***************************************************************
 
	.code
	.align	4
 
kbdinit:
	jr	$31
 
kbdinchk:
	add	$8,$0,kbdbase
	ldw	$2,$8,0
	and	$2,$2,1
	jr	$31
 
kbdin:
	sub	$29,$29,12
	stw	$31,$29,8
	stw	$16,$29,4
	stw	$17,$29,0
kbdin0:
	jal	kbdinp
	add	$16,$2,$0		; key 1 in $16
	add	$8,$0,0xF0
	bne	$16,$8,kbdin2
kbdin1:
	jal	kbdinp
	j	kbdin0
kbdin2:
	jal	kbdinp
	add	$17,$2,$0		; key 2 in $17
	beq	$17,$16,kbdin2
	add	$8,$0,0xF0
	beq	$17,$8,kbdin3
	j	kbdin5
kbdin3:
	jal	kbdinp
	bne	$2,$16,kbdin2
kbdin4:
	add	$4,$16,$0		; use key 1
	add	$5,$0,xltbl1		; with translation table 1
	jal	xlat
	j	kbdx
kbdin5:
	jal	kbdinp
	add	$8,$0,0xF0
	bne	$2,$8,kbdin5
kbdin6:
	jal	kbdinp
	beq	$2,$16,kbdin7
	beq	$2,$17,kbdin9
	j	kbdin5
kbdin7:
	jal	kbdinp
	add	$8,$0,0xF0
	bne	$2,$8,kbdin7
kbdin8:
	jal	kbdinp
	bne	$2,$17,kbdin7
	j	kbdin11
kbdin9:
	jal	kbdinp
	add	$8,$0,0xF0
	bne	$2,$8,kbdin9
kbdin10:
	jal	kbdinp
	bne	$2,$16,kbdin9
	j	kbdin11
kbdin11:
	add	$8,$0,0x12		; left shift key
	beq	$16,$8,kbdin12
	add	$8,$0,0x59		; right shift key
	beq	$16,$8,kbdin12
	add	$8,$0,0x14		; ctrl key
	beq	$16,$8,kbdin14
	j	kbdin13
kbdin12:
	add	$4,$17,$0		; use key 2
	add	$5,$0,xltbl2		; with translation table 2
	jal	xlat
	j	kbdx
kbdin13:
	add	$4,$16,$0		; use key 1
	add	$5,$0,xltbl1		; with translation table 1
	jal	xlat
	j	kbdx
kbdin14:
	add	$4,$17,$0		; use key 2
	add	$5,$0,xltbl1		; with translation table 1
	jal	xlat
	and	$2,$2,0xFF-0x60		; then reset bits 0x60
	j	kbdx
kbdx:
	ldw	$17,$29,0
	ldw	$16,$29,4
	ldw	$31,$29,8
	add	$29,$29,12
	jr	$31
 
kbdinp:
	add	$8,$0,kbdbase
kbdinp1:
	ldw	$9,$8,0
	and	$9,$9,1
	beq	$9,$0,kbdinp1		; wait until character ready
	ldw	$2,$8,4			; get character
	add	$9,$0,0xE0
	beq	$2,$9,kbdinp1		; ignore E0 prefix
	add	$9,$0,0xE1
	beq	$2,$9,kbdinp1		; as well as E1 prefix
	jr	$31
 
xlat:
	sub	$29,$29,8
	stw	$31,$29,4
	stw	$16,$29,0
	and	$16,$4,0xFF
	add	$8,$16,$5
	ldbu	$2,$8,0
	bne	$2,$0,xlat1
;	add	$4,$0,'<'
;	jal	cout
;	add	$4,$16,$0
;	jal	byteout
;	add	$4,$0,'>'
;	jal	cout
	add	$2,$16,$0
xlat1:
	ldw	$16,$29,0
	ldw	$31,$29,4
	add	$29,$29,8
	jr	$31
 

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.