--- oisc.c.orig	Mon Aug 17 16:25:22 1998
+++ oisc.c	Mon Aug 17 16:47:18 1998
@@ -6,6 +6,8 @@
 #define	WRITE_LOC	32765	/* Location of write-register */
 #define	READ_LOC	32766	/* Location of read-register */
 #define	STOP_LOC	32767	/* Location of STOP PC */
+#define CHAR_WRITE_LOC	32764	/* location of register for writing ascii [unS] */
+#define CHAR_READ_LOC	32763	/* location of register for reading ascii [unS] */
 
 #define	TOK_REF		0
 #define	TOK_DEF		1
@@ -287,6 +289,9 @@
 	}
 	Y = atoi( Token );
     }
+    else if( Y == CHAR_READ_LOC ) { /* read ascii characters [unS] */
+	Y = getchar();
+    }
     else if( (Y < 0) || (Y >= MemSize) ) {
 	(void)fprintf( stderr, "PC: %ld: address %ld out of range\n",
 			(long)PC, (long)Y );
@@ -303,6 +308,12 @@
 	    PC = Z;
 	}
     }
+    else if( X == CHAR_WRITE_LOC ) { /* write ascii characters [unS] */
+	(void)printf( "%c", (char)-Y );
+	if( Y > 0 ) {
+	    PC = Z;
+	}
+    }
     else if( (X < 0) || (X >= MemSize) ) {
 	(void)fprintf( stderr, "PC: %ld: address %ld out of range\n",
 			(long)PC, (long)X );
@@ -380,6 +391,8 @@
     DefineLab( "READ", READ_LOC );
     DefineLab( "WRITE", WRITE_LOC );
     DefineLab( "STOP", STOP_LOC );
+    DefineLab( "READC", CHAR_READ_LOC ); /* unS */
+    DefineLab( "WRITEC", CHAR_WRITE_LOC ); /* unS */
 
     while( !Done ) {
 	switch( GetTok( InFile, Token ) ) {
