IOP 16 PS 2 Keyboard - douggilliland/IOP16 GitHub Wiki

Table of Contents

PS/2 Keyboard

  • VHDL Code
  • Wrapper for PS/2 keyboard interfaces
  • PS/2 to ASCII conversion

Software Interface

Address i_RegSel - Register Select = 0 - Status register

  • Value = 0x00, No data present
  • Value = 0x01, Data present

Address i_RegSel - Register Select = 0 - Data register

  • ASCII Data

Software Examples

Read Keyboard

  • Returns keyboard ASCII character in Reg0
  • Destroys Reg1
RDKBD	JSR	WTKBRX		WAIT FOR KBD RX CHAR
	IOR	0X01	0X0D	READ KBD CHAR
	RTS			
WTKBRX	IOR	0X00	0X0C	READ KBD STATUS
	ARI	0X00	0X01	RX RDY BIT
	BEZ	WTKBRX		LOOP UNTIL CHAR PRESENT
	RTS			

Poll keyboard Status

  • Returns keyboard status in Reg0
    • 0x00 = No char
    • 0x01 - Char present
POLLKBD	IOR	0X00	0X0C
	RTS		

Check keyboard for CTRL-C

  • Returns CTRL-c Status
    • 0x00 - No key pressed or not Ctrl-C key
    • 0x01 - CTRL-C was pressed
CHKCTLC	IOR	0X01	0X0C	READ KBD STATUS
	CMP	0x01	0X00	
	BEQ	DONCTLC		KEY WAS NOT PRESSED
SKPCTLC	IOR	0X00	0X0D	READ KBD DATA
	CMP	0X00	0X03	IS CTRL-C
	BNE	DONCTLC		
	LRI	0X00	0X01	RETURNS 1 IF CTRL-C
	JMP	EXITCTLC		
DONCTLC	LRI	0X00	0X00	
EXITCTLC	RTS			

VHDL Entity

ENTITY Wrap_Keyboard IS
port (
  i_CLOCK_50 : IN  STD_LOGIC; -- input clock
  i_n_reset  : IN  STD_LOGIC; -- 
  i_kbCS     : IN  STD_LOGIC; -- 
  i_RegSel   : IN  STD_LOGIC; -- address
  i_rd_Kbd   : IN  STD_LOGIC; --
  i_ps2_clk  : IN  STD_LOGIC; --
  i_ps2_data : IN  STD_LOGIC; --
  o_kbdDat   : OUT STD_LOGIC_vector(7 downto 0));
end Wrap_Keyboard;
⚠️ **GitHub.com Fallback** ⚠️