diff --git a/src/conio/petscii.c b/src/conio/petscii.c
new file mode 100644
index 0000000000000000000000000000000000000000..721b5da6a5ab0bf5a4222770e653d0433ef7295e
--- /dev/null
+++ b/src/conio/petscii.c
@@ -0,0 +1,219 @@
+#include "keys.h"
+
+struct ascii_trans {
+	unsigned char	native;
+	unsigned char	cp437;
+};
+
+struct key_trans {
+	int	keypress;
+	int	translated;
+};
+
+struct ascii_trans display_petscii[] = {
+	 {32,' '}
+	,{33,'!'}
+	,{34,'"'}
+	,{35,'#'}
+	,{36,'$'}
+	,{37,'%'}
+	,{38,'&'}
+	,{39,'\''}
+	,{40,'('}
+	,{41,')'}
+	,{42,'*'}
+	,{43,'+'}
+	,{44,','}
+	,{45,'-'}
+	,{46,'.'}
+	,{47,'/'}
+	,{48,'0'}
+	,{49,'1'}
+	,{50,'2'}
+	,{51,'3'}
+	,{52,'4'}
+	,{53,'5'}
+	,{54,'6'}
+	,{55,'7'}
+	,{56,'8'}
+	,{57,'9'}
+	,{58,':'}
+	,{59,';'}
+	,{60,'<'}
+	,{61,'='}
+	,{62,'>'}
+	,{63,'?'}
+	,{64,'@'}
+	,{65,'a'}
+	,{66,'b'}
+	,{67,'c'}
+	,{68,'d'}
+	,{69,'e'}
+	,{70,'f'}
+	,{71,'g'}
+	,{72,'h'}
+	,{73,'i'}
+	,{74,'j'}
+	,{75,'k'}
+	,{76,'l'}
+	,{77,'m'}
+	,{78,'n'}
+	,{79,'o'}
+	,{80,'p'}
+	,{81,'q'}
+	,{82,'r'}
+	,{83,'s'}
+	,{84,'t'}
+	,{85,'u'}
+	,{86,'v'}
+	,{87,'w'}
+	,{88,'x'}
+	,{89,'y'}
+	,{90,'z'}
+	,{91,'['}
+	,{92,'\\'}	/* Pound symbol */
+	,{93,']'}
+	,{94,24 /* '^' */}
+	,{95,27 /* '_' */}
+	,{96,196}
+	,{97,'A'}
+	,{98,'B'}
+	,{99,'C'}
+	,{100,'D'}
+	,{101,'E'}
+	,{102,'F'}
+	,{103,'G'}
+	,{104,'H'}
+	,{105,'I'}
+	,{106,'J'}
+	,{107,'K'}
+	,{108,'L'}
+	,{109,'M'}
+	,{110,'N'}
+	,{111,'O'}
+	,{112,'P'}
+	,{113,'Q'}
+	,{114,'R'}
+	,{115,'S'}
+	,{116,'T'}
+	,{117,'U'}
+	,{118,'V'}
+	,{119,'W'}
+	,{120,'X'}
+	,{121,'Y'}
+	,{122,'Z'}
+	,{123,197}
+	,{124,181}	///* Left side fine 50% checker */
+	,{125,179}
+	,{126,178}	///* Course 50% checker */
+	,{127,176}	///* Horizontal cross-hatch (light shade) */
+	,{160,255}
+	,{161,221}
+	,{162,220}
+	,{163,'^'}	/* Row 1 set */
+	,{164,'_'}	///* Row 8 set */
+	,{165,'{'}	/* Col 1 set */
+	,{166,177}	///* Fine 50% checker */
+	,{167,'}'}	/* Col 8 set */
+	,{168,210}	///* Bottom fine 50% checker */
+	,{169,31}	/* Top left half set */
+	,{170,245}	/* Cols 7 & 8 set */
+	,{171,195}
+	,{172,201}	///* Bottom right quadrant set */
+	,{173,192}
+	,{174,191}
+	,{175,205}	/* Rows 7 & 8 set */
+	,{176,218}
+	,{177,193}
+	,{178,194}
+	,{179,180}
+	,{180,244}	/* Cols 1 & 2 set */
+	,{181,185}	/* Cols 1, 2, & 3 set */
+	,{182,222}	/* Cols 6, 7, & 8 set */
+	,{183,169}	/* Rows 1 & 2 set */
+	,{184,223}	/* Rows 1, 2, & 3 set */
+	,{185,22}	/* Rows 6, 7, & 8 set */
+	,{186,251}
+	,{187,187}	///* Bottom left quadrant set */
+	,{188,200}	///* Top right quadrant set */
+	,{189,217}
+	,{190,188}	///* Top left quadrant set */
+	,{191,206}	/* Top left and bottom right quadrants set */
+	,{255,227}
+};
+
+struct key_trans input_petscii[] = {
+	 {'A', 'a'}
+	,{'B', 'b'}
+	,{'C', 'c'}
+	,{'D', 'd'}
+	,{'E', 'e'}
+	,{'F', 'f'}
+	,{'G', 'g'}
+	,{'H', 'h'}
+	,{'I', 'i'}
+	,{'J', 'j'}
+	,{'K', 'k'}
+	,{'L', 'l'}
+	,{'M', 'm'}
+	,{'N', 'n'}
+	,{'O', 'o'}
+	,{'P', 'p'}
+	,{'Q', 'q'}
+	,{'R', 'r'}
+	,{'S', 's'}
+	,{'T', 't'}
+	,{'U', 'u'}
+	,{'V', 'v'}
+	,{'W', 'w'}
+	,{'X', 'x'}
+	,{'Y', 'y'}
+	,{'Z', 'z'}
+	,{'a', 'A'}
+	,{'b', 'B'}
+	,{'c', 'C'}
+	,{'d', 'D'}
+	,{'e', 'E'}
+	,{'f', 'F'}
+	,{'g', 'G'}
+	,{'h', 'H'}
+	,{'i', 'I'}
+	,{'j', 'J'}
+	,{'k', 'K'}
+	,{'l', 'L'}
+	,{'m', 'M'}
+	,{'n', 'N'}
+	,{'o', 'O'}
+	,{'p', 'P'}
+	,{'q', 'Q'}
+	,{'r', 'R'}
+	,{'s', 'S'}
+	,{'t', 'T'}
+	,{'u', 'U'}
+	,{'v', 'V'}
+	,{'w', 'W'}
+	,{'x', 'X'}
+	,{'y', 'Y'}
+	,{'z', 'Z'}
+	,{'\n',141}
+	,{CIO_KEY_DOWN, 17}
+	,{CIO_KEY_HOME, 19}
+	,{CIO_KEY_DC, 20}
+	,{'\b', 20}
+	,{CIO_KEY_RIGHT, 29}
+	,{CIO_KEY_F(1), 133}
+	,{CIO_KEY_F(3), 134}
+	,{CIO_KEY_F(5), 135}
+	,{CIO_KEY_F(7), 136}
+	,{CIO_KEY_F(2), 137}
+	,{CIO_KEY_F(4), 138}
+	,{CIO_KEY_F(6), 139}
+	,{CIO_KEY_F(8), 140}
+	,{CIO_KEY_UP, 145}
+	,{CIO_KEY_IC, 148}
+	,{CIO_KEY_LEFT, 157}
+	,{CIO_KEY_END, 147}
+	,{CIO_KEY_PPAGE, 131}
+	,{CIO_KEY_NPAGE, 3}
+};
+