diff --git a/include/sym1.h b/include/sym1.h
index 4fb66b251..bedaa7913 100644
--- a/include/sym1.h
+++ b/include/sym1.h
@@ -91,6 +91,30 @@
 #define DISP_LOW_LEFT  0x10   // Lower left segment
 
 
+/*****************************************************************************/
+/*                                 Hardware                                  */
+/*****************************************************************************/
+
+
+
+#include <_6522.h>
+#define VIA1    (*(struct __6522*)0xA000)    // U25
+#define VIA2    (*(struct __6522*)0xA800)    // U28
+#define VIA3    (*(struct __6522*)0xAC00)    // U29
+
+
+struct _display {
+    unsigned char d0;   // left-most seven-segment display
+    unsigned char d1;   // second seven-segment display
+    unsigned char d2;   // third seven-segment display
+    unsigned char d3;   // fouth seven-segment display
+    unsigned char d4;   // fifth seven-segment display
+    unsigned char d5;   // sixth seven-segment display
+    unsigned char d6;   // buffer byte to the right
+};
+#define DISPLAY (*(struct _display*)0xA640)
+
+
 
 /*****************************************************************************/
 /*                                   Code                                    */
@@ -98,55 +122,10 @@
 
 
 
-int __fastcall__ beep (void);                // Beep sound
-void __fastcall__ set_D0 (unsigned char);    // Set display digit 0
-unsigned char __fastcall__ get_D0 (void);    // Get value of display digit 0
-void __fastcall__ set_D1 (unsigned char);    // Set display digit 1
-unsigned char __fastcall__ get_D1 (void);    // Get value of display digit 1
-void __fastcall__ set_D2 (unsigned char);    // Set display digit 2
-unsigned char __fastcall__ get_D2 (void);    // Get value of display digit 2
-void __fastcall__ set_D3 (unsigned char);    // Set display digit 3
-unsigned char __fastcall__ get_D3 (void);    // Get value of display digit 3
-void __fastcall__ set_D4 (unsigned char);    // Set display digit 4
-unsigned char __fastcall__ get_D4 (void);    // Get value of display digit 4
-void __fastcall__ set_D5 (unsigned char);    // Set display digit 5
-unsigned char __fastcall__ get_D5 (void);    // Get value of display digit 5
-void __fastcall__ set_D6 (unsigned char);    // Set byte to the right of display (leading buffer)
-unsigned char __fastcall__ get_D6 (void);    // Get value of memory byte to the right of display
-void __fastcall__ fdisp (void);              // Flash display
-
-int __fastcall__ loadt (int);                // Read from tape (id)
-int __fastcall__ dumpt (int, int, int);      // Write to tape (id, start_addr, end_addr)
-
-void __fastcall__ set_DDR1A (unsigned char); // Set data direction register 1A           (U25)
-unsigned char __fastcall__ get_DDR1A (void); // Get value of data direction register 1A
-void __fastcall__ set_IOR1A (unsigned char); // Set I/O register 1A
-unsigned char __fastcall__ get_IOR1A (void); // Get value of I/O register 1A
-
-void __fastcall__ set_DDR1B (unsigned char); // Set data direction register 1B           (U25)
-unsigned char __fastcall__ get_DDR1B (void); // Get value of data direction register 1B
-void __fastcall__ set_IOR1B (unsigned char); // Set I/O register 1B
-unsigned char __fastcall__ get_IOR1B (void); // Get value of I/O register 1B
-
-void __fastcall__ set_DDR2A (unsigned char); // Set data direction register 2A           (U28)
-unsigned char __fastcall__ get_DDR2A (void); // Get value of data direction register 2A
-void __fastcall__ set_IOR2A (unsigned char); // Set I/O register 2A
-unsigned char __fastcall__ get_IOR2A (void); // Get value of I/O register 2A
-
-void __fastcall__ set_DDR2B (unsigned char); // Set data direction register 2B           (U28)
-unsigned char __fastcall__ get_DDR2B (void); // Get value of data direction register 2B
-void __fastcall__ set_IOR2B (unsigned char); // Set I/O register 2B
-unsigned char __fastcall__ get_IOR2B (void); // Get value of I/O register 2B
-
-void __fastcall__ set_DDR3A (unsigned char); // Set data direction register 3A           (U29)
-unsigned char __fastcall__ get_DDR3A (void); // Get value of data direction register 3A
-void __fastcall__ set_IOR3A (unsigned char); // Set I/O register 3A
-unsigned char __fastcall__ get_IOR3A (void); // Get value of I/O register 3A
-
-void __fastcall__ set_DDR3B (unsigned char); // Set data direction register 3B           (U29)
-unsigned char __fastcall__ get_DDR3B (void); // Get value of data direction register 3B
-void __fastcall__ set_IOR3B (unsigned char); // Set I/O register 3B
-unsigned char __fastcall__ get_IOR3B (void); // Get value of I/O register 3B
+void beep (void);                                                  // Beep sound
+void fdisp (void);                                                 // Flash display
+int __fastcall__ loadt (unsigned char);                            // Read from tape (id)
+int __fastcall__ dumpt (unsigned char, const void*, const void*);  // Write to tape (id, start_addr, end_addr)
 
 
 
diff --git a/libsrc/sym1/bitio.s b/libsrc/sym1/bitio.s
deleted file mode 100644
index a61dd4800..000000000
--- a/libsrc/sym1/bitio.s
+++ /dev/null
@@ -1,220 +0,0 @@
-;
-; Wayne Parham (wayne@parhamdata.com)
-;
-; void set_DDR1A (int value);
-; int get_DDR1A (void);
-; void set_IOR1A (int value);
-; int get_IOR1A (void);
-; void set_DDR1B (int value);
-; int get_DDR1B (void);
-; void set_IOR1B (int value);
-; int get_IOR1B (void);
-; void set_DDR2A (int value);
-; int get_DDR2A (void);
-; void set_IOR2A (int value);
-; int get_IOR2A (void);
-; void set_DDR2B (int value);
-; int get_DDR2B (void);
-; void set_IOR2B (int value);
-; int get_IOR2B (void);
-; void set_DDR3A (int value);
-; int get_DDR3A (void);
-; void set_IOR3A (int value);
-; int get_IOR3A (void);
-; void set_DDR3B (int value);
-; int get_DDR3B (void);
-; void set_IOR3B (int value);
-; int get_IOR3B (void);
-;
-
-.include        "sym1.inc"
-
-.export         _set_DDR1A, _get_DDR1A, _set_IOR1A, _get_IOR1A
-.export         _set_DDR1B, _get_DDR1B, _set_IOR1B, _get_IOR1B
-.export         _set_DDR2A, _get_DDR2A, _set_IOR2A, _get_IOR2A
-.export         _set_DDR2B, _get_DDR2B, _set_IOR2B, _get_IOR2B
-.export         _set_DDR3A, _get_DDR3A, _set_IOR3A, _get_IOR3A
-.export         _set_DDR3B, _get_DDR3B, _set_IOR3B, _get_IOR3B
-
-.segment        "CODE"
-
-.proc _set_DDR1A: near
-
-        sta     DDR1A            ;  Write data direction register for port 1A
-        rts
-
-.endproc
-
-.proc _get_DDR1A: near
-
-        lda     DDR1A            ;  Read data direction register for port 1A
-        ldx     #>$0000          ;
-        rts                      ;  Return DDR1A
-
-.endproc
-
-.proc _set_IOR1A: near
-
-        sta     OR1A             ;  Write I/O register for port 1A
-        rts
-
-.endproc
-
-.proc _get_IOR1A: near
-
-        lda     OR1A             ;  Read I/O register for port 1A
-        ldx     #>$0000          ;
-        rts                      ;  Return OR1A
-
-.endproc
-
-.proc _set_DDR1B: near
-
-        sta     DDR1B            ;  Write data direction register for port 1B
-        rts
-
-.endproc
-
-.proc _get_DDR1B: near
-
-        lda     DDR1B            ;  Read data direction register for port 1B
-        ldx     #>$0000          ;
-        rts                      ;  Return DDR1B
-
-.endproc
-
-.proc _set_IOR1B: near
-
-        sta     OR1B             ;  Write I/O register for port 1B
-        rts
-
-.endproc
-
-.proc _get_IOR1B: near
-
-        lda     OR1B             ;  Read I/O register for port 1B
-        ldx     #>$0000          ;
-        rts                      ;  Return OR1B
-
-.endproc
-
-.proc _set_DDR2A: near
-
-        sta     DDR2A            ;  Write data direction register for port 2A
-        rts
-
-.endproc
-
-.proc _get_DDR2A: near
-
-        lda     DDR2A            ;  Read data direction register for port 2A
-        ldx     #>$0000          ;
-        rts                      ;  Return DDR2A
-
-.endproc
-
-.proc _set_IOR2A: near
-
-        sta     OR2A             ;  Write I/O register for port 2A
-        rts
-
-.endproc
-
-.proc _get_IOR2A: near
-
-        lda     OR2A             ;  Read I/O register for port 2A
-        ldx     #>$0000          ;
-        rts                      ;  Return OR2A
-
-.endproc
-
-.proc _set_DDR2B: near
-
-        sta     DDR2B            ;  Write data direction register for port 2B
-        rts
-
-.endproc
-
-.proc _get_DDR2B: near
-
-        lda     DDR2B            ;  Read data direction register for port 2B
-        ldx     #>$0000          ;
-        rts                      ;  Return DDR2B
-
-.endproc
-
-.proc _set_IOR2B: near
-
-        sta     OR2B             ;  Write I/O register for port 2B
-        rts
-
-.endproc
-
-.proc _get_IOR2B: near
-
-        lda     OR2B             ;  Read I/O register for port 2B
-        ldx     #>$0000          ;
-        rts                      ;  Return OR2B
-
-.endproc
-
-.proc _set_DDR3A: near
-
-        sta     DDR3A            ;  Write data direction register for port 3A
-        rts
-
-.endproc
-
-.proc _get_DDR3A: near
-
-        lda     DDR3A            ;  Read data direction register for port 3A
-        ldx     #>$0000          ;
-        rts                      ;  Return DDR3A
-
-.endproc
-
-.proc _set_IOR3A: near
-
-        sta     OR3A             ;  Write I/O register for port 3A
-        rts                      ;  Return 0000
-
-.endproc
-
-.proc _get_IOR3A: near
-
-        lda     OR3A             ;  Read I/O register for port 3A
-        ldx     #>$0000          ;
-        rts                      ;  Return OR3A
-
-.endproc
-
-.proc _set_DDR3B: near
-
-        sta     DDR3B            ;  Write data direction register for port 3B
-        rts
-
-.endproc
-
-.proc _get_DDR3B: near
-
-        lda     DDR3B            ;  Read data direction register for port 3B
-        ldx     #>$0000          ;
-        rts                      ;  Return DDR3B
-
-.endproc
-
-.proc _set_IOR3B: near
-
-        sta     OR3B             ;  Write I/O register for port 3B
-        rts
-
-.endproc
-
-.proc _get_IOR3B: near
-
-        lda     OR3B             ;  Read I/O register for port 3B
-        ldx     #>$0000          ;
-        rts                      ;  Return OR3B
-
-.endproc
-
diff --git a/libsrc/sym1/display.s b/libsrc/sym1/display.s
index 9bef30c01..1d3b0abfa 100644
--- a/libsrc/sym1/display.s
+++ b/libsrc/sym1/display.s
@@ -1,29 +1,12 @@
 ;
 ; Wayne Parham (wayne@parhamdata.com)
 ;
-; int fdisp (void);
-; void set_D0 (char segments);
-; int get_D0 (void);
-; void set_D1 (char segments);
-; int get_D1 (void);
-; void set_D2 (char segments);
-; int get_D2 (void);
-; void set_D3 (char segments);
-; int get_D3 (void);
-; void set_D4 (char segments);
-; int get_D4 (void);
-; void set_D5 (char segments);
-; int get_D5 (void);
-; void set_D6 (char segments);
-; int get_D6 (void);
+; void fdisp (void);
 ;
 
 .include        "sym1.inc"
 
-.export         _fdisp,  _set_D0, _get_D0
-.export         _set_D1, _get_D1, _set_D2, _get_D2
-.export         _set_D3, _get_D3, _set_D4, _get_D4
-.export         _set_D5, _get_D5, _set_D6, _get_D6
+.export         _fdisp
 
 .segment        "CODE"
 
@@ -34,108 +17,3 @@
 
 .endproc
 
-.proc _set_D0:  near
-
-        sta     DISBUF0          ;  Write Digit 0
-        rts
-
-.endproc
-
-.proc _get_D0:  near
-
-        lda     DISBUF0          ;  Read Digit 0
-        ldx     #>$0000          ;
-        rts                      ;  Return DISBUF0
-
-.endproc
-
-.proc _set_D1:  near
-
-        sta     DISBUF1          ;  Write Digit 1
-        rts
-
-.endproc
-
-.proc _get_D1:  near
-
-        lda     DISBUF1          ;  Read Digit 1
-        ldx     #>$0000          ;
-        rts
-
-.endproc
-
-.proc _set_D2:  near
-
-        sta     DISBUF2          ;  Write Digit 2
-        rts
-
-.endproc
-
-.proc _get_D2:  near
-
-        lda     DISBUF2          ;  Read Digit 2
-        ldx     #>$0000          ;
-        rts                      ;  Return DISBUF2
-
-.endproc
-
-.proc _set_D3:  near
-
-        sta     DISBUF3          ;  Write Digit 3
-        rts
-
-.endproc
-
-.proc _get_D3:  near
-
-        lda     DISBUF3          ;  Read Digit 3
-        ldx     #>$0000          ;
-        rts                      ;  Return DISBUF3
-
-.endproc
-
-.proc _set_D4:  near
-
-        sta     DISBUF4          ;  Write Digit 4
-        rts
-
-.endproc
-
-.proc _get_D4:  near
-
-        lda     DISBUF4          ;  Read Digit 4
-        ldx     #>$0000          ;
-        rts                      ;  Return DISBUF4
-
-.endproc
-
-.proc _set_D5:  near
-
-        sta     DISBUF5          ;  Write Digit 5
-        rts
-
-.endproc
-
-.proc _get_D5:  near
-
-        lda     DISBUF5          ;  Read Digit 5
-        ldx     #>$0000          ;
-        rts                      ;  Return DISBUF5
-
-.endproc
-
-.proc _set_D6:  near
-
-        sta     DISBUF6          ;  Write byte to the right of display
-        rts
-
-.endproc
-
-.proc _get_D6:  near
-
-        lda     DISBUF6          ;  Read byte to the right of display
-        ldx     #>$0000          ;
-        rts                      ;  Return DISBUF6
-
-.endproc
-
diff --git a/libsrc/sym1/read.s b/libsrc/sym1/read.s
index b876a5915..7ab88f1e8 100644
--- a/libsrc/sym1/read.s
+++ b/libsrc/sym1/read.s
@@ -29,7 +29,11 @@ begin:  dec     ptr2
         beq     done             ; If buffer full, return
 
 getch:  jsr     INTCHR           ; Get character using Monitor ROM call
-        and     #$7F             ; Clear hi bit
+        jsr     OUTCHR           ; Echo it
+        and     #$7F             ; Clear hi bit and check for '\r'
+        cmp     #$0D
+        bne     putch
+        lda     #$0A             ; Replace with '\n' and set count to zero
 
 putch:  ldy     #$00             ; Put char into return buffer
         sta     (ptr1),y
diff --git a/targettest/sym1/symDisplay.c b/targettest/sym1/symDisplay.c
index 7b056c3ab..e97518c79 100644
--- a/targettest/sym1/symDisplay.c
+++ b/targettest/sym1/symDisplay.c
@@ -25,9 +25,8 @@ void main (void) {
 
    puts( "\nType a message (40 chars max) and press ENTER, please:\n" );
 
-   while( (c != '\r') && (i < 41) ) {
+   while( (c != '\n') && (i < 40) ) {
       c = getchar();
-      putchar( c );
       buffer[i] = c;
       i++;
       if( i == 40 ) {
@@ -40,7 +39,6 @@ void main (void) {
    while( z == 0 ) {
       puts( "\n\nHow many times (0 for forever) to repeat?" );
       c = getchar();
-      putchar( c );
       if( (c >= '0') && (c <= '9') ) { // between 1 and 9 loops allowed
          z = 1;                        // a number was pressed 
          t = c - '0';                  // convert char to int
@@ -59,14 +57,13 @@ void main (void) {
 
       putchar( '\r' );                 // Send CR to console
 
-
-      set_D0( DISP_SPACE );            // Clear the display
-      set_D1( DISP_SPACE );
-      set_D2( DISP_SPACE );
-      set_D3( DISP_SPACE );
-      set_D4( DISP_SPACE );
-      set_D5( DISP_SPACE );
-      set_D6( DISP_SPACE );
+      DISPLAY.d0 = DISP_SPACE;         // Clear the display
+      DISPLAY.d1 = DISP_SPACE;
+      DISPLAY.d2 = DISP_SPACE;
+      DISPLAY.d3 = DISP_SPACE;
+      DISPLAY.d4 = DISP_SPACE;
+      DISPLAY.d5 = DISP_SPACE;
+      DISPLAY.d6 = DISP_SPACE;
 
       for( d = 0; d < flashes ; d++ ) {
          fdisp();                      // Display
@@ -78,247 +75,247 @@ void main (void) {
 
          switch( buffer[l] ) {         // Put the typed charaters
             case '1':                  // into the display buffer
-               set_D6( DISP_1 );       // one at a time
+               DISPLAY.d6 = DISP_1;    // one at a time
                break;
             case '2':
-               set_D6( DISP_2 );
+               DISPLAY.d6 = DISP_2;
                break;
             case '3':
-               set_D6( DISP_3 );
+               DISPLAY.d6 = DISP_3;
                break;
             case '4':
-               set_D6( DISP_4 );
+               DISPLAY.d6 = DISP_4;
                break;
             case '5':
-               set_D6( DISP_5 );
+               DISPLAY.d6 = DISP_5;
                break;
             case '6':
-               set_D6( DISP_6 );
+               DISPLAY.d6 = DISP_6;
                break;
             case '7':
-               set_D6( DISP_7 );
+               DISPLAY.d6 = DISP_7;
                break;
             case '8':
-               set_D6( DISP_8 );
+               DISPLAY.d6 = DISP_8;
                break;
             case '9':
-               set_D6( DISP_9 );
+               DISPLAY.d6 = DISP_9;
                break;
             case '0':
-               set_D6( DISP_0 );
+               DISPLAY.d6 = DISP_0;
                break;
             case 'A':
-               set_D6( DISP_A );
+               DISPLAY.d6 = DISP_A;
                break;
             case 'a':
-               set_D6( DISP_A );
+               DISPLAY.d6 = DISP_A;
                break;
             case 'B':
-               set_D6( DISP_b );
+               DISPLAY.d6 = DISP_b;
                break;
             case 'b':
-               set_D6( DISP_b );
+               DISPLAY.d6 = DISP_b;
                break;
             case 'C':
-               set_D6( DISP_C );
+               DISPLAY.d6 = DISP_C;
                break;
             case 'c':
-               set_D6( DISP_c );
+               DISPLAY.d6 = DISP_c;
                break;
             case 'D':
-               set_D6( DISP_d );
+               DISPLAY.d6 = DISP_d;
                break;
             case 'd':
-               set_D6( DISP_d );
+               DISPLAY.d6 = DISP_d;
                break;
             case 'E':
-               set_D6( DISP_E );
+               DISPLAY.d6 = DISP_E;
                break;
             case 'e':
-               set_D6( DISP_e );
+               DISPLAY.d6 = DISP_e;
                break;
             case 'F':
-               set_D6( DISP_F );
+               DISPLAY.d6 = DISP_F;
                break;
             case 'f':
-               set_D6( DISP_F );
+               DISPLAY.d6 = DISP_F;
                break;
             case 'G':
-               set_D6( DISP_G );
+               DISPLAY.d6 = DISP_G;
                break;
             case 'g':
-               set_D6( DISP_g );
+               DISPLAY.d6 = DISP_g;
                break;
             case 'H':
-               set_D6( DISP_H );
+               DISPLAY.d6 = DISP_H;
                break;
             case 'h':
-               set_D6( DISP_h );
+               DISPLAY.d6 = DISP_h;
                break;
             case 'I':
-               set_D6( DISP_I );
+               DISPLAY.d6 = DISP_I;
                break;
             case 'i':
-               set_D6( DISP_i );
+               DISPLAY.d6 = DISP_i;
                break;
             case 'J':
-               set_D6( DISP_J );
+               DISPLAY.d6 = DISP_J;
                break;
             case 'j':
-               set_D6( DISP_J );
+               DISPLAY.d6 = DISP_J;
                break;
             case 'K':
-               set_D6( DISP_K );
+               DISPLAY.d6 = DISP_K;
                break;
             case 'k':
-               set_D6( DISP_K );
+               DISPLAY.d6 = DISP_K;
                break;
             case 'L':
-               set_D6( DISP_L );
+               DISPLAY.d6 = DISP_L;
                break;
             case 'l':
-               set_D6( DISP_L );
+               DISPLAY.d6 = DISP_L;
                break;
             case 'M':
-               set_D0( get_D1() );
-               set_D1( get_D2() );
-               set_D2( get_D3() );
-               set_D3( get_D4() );
-               set_D4( get_D5() );
-               set_D5( DISP_M_1 );
-	       set_D6( DISP_M_2 );
+               DISPLAY.d0 = DISPLAY.d1;
+               DISPLAY.d1 = DISPLAY.d2;
+               DISPLAY.d2 = DISPLAY.d3;
+               DISPLAY.d3 = DISPLAY.d4;
+               DISPLAY.d4 = DISPLAY.d5;
+               DISPLAY.d5 = DISP_M_1;
+               DISPLAY.d6 = DISP_M_2;
                break;
             case 'm':
-               set_D0( get_D1() );
-               set_D1( get_D2() );
-               set_D2( get_D3() );
-               set_D3( get_D4() );
-               set_D4( get_D5() );
-               set_D5( DISP_M_1 );
-	       set_D6( DISP_M_2 );
+               DISPLAY.d0 = DISPLAY.d1;
+               DISPLAY.d1 = DISPLAY.d2;
+               DISPLAY.d2 = DISPLAY.d3;
+               DISPLAY.d3 = DISPLAY.d4;
+               DISPLAY.d4 = DISPLAY.d5;
+               DISPLAY.d5 = DISP_M_1;
+               DISPLAY.d6 = DISP_M_2;
                break;
             case 'N':
-               set_D6( DISP_n );
+               DISPLAY.d6 = DISP_n;
                break;
             case 'n':
-               set_D6( DISP_n );
+               DISPLAY.d6 = DISP_n;
                break;
             case 'O':
-               set_D6( DISP_O );
+               DISPLAY.d6 = DISP_O;
                break;
             case 'o':
-               set_D6( DISP_o );
+               DISPLAY.d6 = DISP_o;
                break;
             case 'P':
-               set_D6( DISP_P );
+               DISPLAY.d6 = DISP_P;
                break;
             case 'p':
-               set_D6( DISP_P );
+               DISPLAY.d6 = DISP_P;
                break;
             case 'Q':
-               set_D6( DISP_q );
+               DISPLAY.d6 = DISP_q;
                break;
             case 'q':
-               set_D6( DISP_q );
+               DISPLAY.d6 = DISP_q;
                break;
             case 'R':
-               set_D6( DISP_r );
+               DISPLAY.d6 = DISP_r;
                break;
             case 'r':
-               set_D6( DISP_r );
+               DISPLAY.d6 = DISP_r;
                break;
             case 'S':
-               set_D6( DISP_S );
+               DISPLAY.d6 = DISP_S;
                break;
             case 's':
-               set_D6( DISP_S );
+               DISPLAY.d6 = DISP_S;
                break;
             case 'T':
-               set_D6( DISP_t );
+               DISPLAY.d6 = DISP_t;
                break;
             case 't':
-               set_D6( DISP_t );
+               DISPLAY.d6 = DISP_t;
                break;
             case 'U':
-               set_D6( DISP_U );
+               DISPLAY.d6 = DISP_U;
                break;
             case 'u':
-               set_D6( DISP_u );
+               DISPLAY.d6 = DISP_u;
                break;
             case 'V':
-               set_D0( get_D1() );
-               set_D1( get_D2() );
-               set_D2( get_D3() );
-               set_D3( get_D4() );
-               set_D4( get_D5() );
-               set_D5( DISP_V_1 );
-               set_D6( DISP_V_2 );
+               DISPLAY.d0 = DISPLAY.d1;
+               DISPLAY.d1 = DISPLAY.d2;
+               DISPLAY.d2 = DISPLAY.d3;
+               DISPLAY.d3 = DISPLAY.d4;
+               DISPLAY.d4 = DISPLAY.d5;
+               DISPLAY.d5 = DISP_V_1;
+               DISPLAY.d6 = DISP_V_2;
                break;
             case 'v':
-               set_D0( get_D1() );
-               set_D1( get_D2() );
-               set_D2( get_D3() );
-               set_D3( get_D4() );
-               set_D4( get_D5() );
-               set_D5( DISP_V_1 );
-               set_D6( DISP_V_2 );
+               DISPLAY.d0 = DISPLAY.d1;
+               DISPLAY.d1 = DISPLAY.d2;
+               DISPLAY.d2 = DISPLAY.d3;
+               DISPLAY.d3 = DISPLAY.d4;
+               DISPLAY.d4 = DISPLAY.d5;
+               DISPLAY.d5 = DISP_V_1;
+               DISPLAY.d6 = DISP_V_2;
                break;
             case 'W':
-               set_D0( get_D1() );
-               set_D1( get_D2() );
-               set_D2( get_D3() );
-               set_D3( get_D4() );
-               set_D4( get_D5() );
-               set_D5( DISP_W_1 );
-               set_D6( DISP_W_2 );
+               DISPLAY.d0 = DISPLAY.d1;
+               DISPLAY.d1 = DISPLAY.d2;
+               DISPLAY.d2 = DISPLAY.d3;
+               DISPLAY.d3 = DISPLAY.d4;
+               DISPLAY.d4 = DISPLAY.d5;
+               DISPLAY.d5 = DISP_W_1;
+               DISPLAY.d6 = DISP_W_2;
                break;
             case 'w':
-               set_D0( get_D1() );
-               set_D1( get_D2() );
-               set_D2( get_D3() );
-               set_D3( get_D4() );
-               set_D4( get_D5() );
-               set_D5( DISP_W_1 );
-               set_D6( DISP_W_2 );
+               DISPLAY.d0 = DISPLAY.d1;
+               DISPLAY.d1 = DISPLAY.d2;
+               DISPLAY.d2 = DISPLAY.d3;
+               DISPLAY.d3 = DISPLAY.d4;
+               DISPLAY.d4 = DISPLAY.d5;
+               DISPLAY.d5 = DISP_W_1;
+               DISPLAY.d6 = DISP_W_2;
                break;
             case 'Y':
-               set_D6( DISP_Y );
+               DISPLAY.d6 = DISP_Y;
                break;
             case 'y':
-               set_D6( DISP_Y );
+               DISPLAY.d6 = DISP_Y;
                break;
             case 'Z':
-               set_D6( DISP_Z );
+               DISPLAY.d6 = DISP_Z;
                break;
             case 'z':
-               set_D6( DISP_Z );
+               DISPLAY.d6 = DISP_Z;
                break;
             case ' ':
-               set_D6( DISP_SPACE );
+               DISPLAY.d6 = DISP_SPACE;
                break;
             case '.':
-               set_D6( DISP_PERIOD );
+               DISPLAY.d6 = DISP_PERIOD;
                break;
             case '-':
-               set_D6( DISP_HYPHEN );
+               DISPLAY.d6 = DISP_HYPHEN;
                break;
             case '\'':
-               set_D6( DISP_APOSTR );
+               DISPLAY.d6 = DISP_APOSTR;
                break;
             case '"':
-               set_D6( DISP_APOSTR );
+               DISPLAY.d6 = DISP_APOSTR;
                break;
             case '=':
-               set_D6( DISP_EQUAL );
+               DISPLAY.d6 = DISP_EQUAL;
                break;
             case '_':
-               set_D6( DISP_BOTTOM );
+               DISPLAY.d6 = DISP_BOTTOM;
                break;
             case '/':
-               set_D6( DISP_SLASH );
+               DISPLAY.d6 = DISP_SLASH;
                break;
             case '\\':
-               set_D6( DISP_BACKSLASH );
+               DISPLAY.d6 = DISP_BACKSLASH;
                break;
             default:
                displayable = 0;        // Character not mapped
@@ -328,12 +325,12 @@ void main (void) {
 
             putchar( buffer[l] );      // Send it to the console
 
-            set_D0( get_D1() );        // Scroll to the left
-            set_D1( get_D2() );
-            set_D2( get_D3() );
-            set_D3( get_D4() );
-            set_D4( get_D5() );
-            set_D5( get_D6() );
+            DISPLAY.d0 = DISPLAY.d1;   // Scroll to the left
+            DISPLAY.d1 = DISPLAY.d2;
+            DISPLAY.d2 = DISPLAY.d3;
+            DISPLAY.d3 = DISPLAY.d4;
+            DISPLAY.d4 = DISPLAY.d5;
+            DISPLAY.d5 = DISPLAY.d6;
 
             for( d = 0; d < flashes ; d++ ) {
                fdisp();                // Display
@@ -342,13 +339,13 @@ void main (void) {
       }
 
       for( e = 0; e < 6; e++ ) {       // Gradually fill the
-         set_D0( get_D1() );           // display with spaces
-         set_D1( get_D2() );
-         set_D2( get_D3() );
-         set_D3( get_D4() );
-         set_D4( get_D5() );
-         set_D5( DISP_SPACE );
-         set_D6( DISP_SPACE );
+         DISPLAY.d0 = DISPLAY.d1;      // display with spaces
+         DISPLAY.d1 = DISPLAY.d2;
+         DISPLAY.d2 = DISPLAY.d3;
+         DISPLAY.d3 = DISPLAY.d4;
+         DISPLAY.d4 = DISPLAY.d5;
+         DISPLAY.d5 = DISP_SPACE;
+         DISPLAY.d6 = DISP_SPACE;
          for( d = 0; d < flashes ; d++ ) {
             fdisp();                   // Display
          }
diff --git a/targettest/sym1/symHello.c b/targettest/sym1/symHello.c
index 7fb86f04e..543e00cb2 100644
--- a/targettest/sym1/symHello.c
+++ b/targettest/sym1/symHello.c
@@ -23,9 +23,8 @@ void main(void) {
    }
    printf( "Type a line and press ENTER, please.\n\n" );
 
-   while( c != '\r' ) {
+   while( c != '\n' ) {
       c = getchar();
-      putchar( c );
    }
 
    printf( "\n\nThanks!\n\n" );
diff --git a/targettest/sym1/symIO.c b/targettest/sym1/symIO.c
index 67e898801..99b020be2 100644
--- a/targettest/sym1/symIO.c
+++ b/targettest/sym1/symIO.c
@@ -12,24 +12,24 @@
 #include <string.h>
 
 void main(void) {
-   int ddr1a    =   0x00;
-   int ior1a    =   0x00;
-   int ddr1b    =   0x00;
-   int ior1b    =   0x00;
-   int ddr2a    =   0x00;
-   int ior2a    =   0x00;
-   int ddr2b    =   0x00;
-   int ior2b    =   0x00;
-   int ddr3a    =   0x00;
-   int ior3a    =   0x00;
-   int ddr3b    =   0x00;
-   int ior3b    =   0x00;
-   int     l    =   0x00;
-   int   val    =   0x00;
-   int going    =   0x01;
-   int instr    =   0x01;
-   char* vp     =   0x00;
-   char cmd[20] =  { 0x00 };
+   unsigned char ddr1a =   0x00;
+   unsigned char ior1a =   0x00;
+   unsigned char ddr1b =   0x00;
+   unsigned char ior1b =   0x00;
+   unsigned char ddr2a =   0x00;
+   unsigned char ior2a =   0x00;
+   unsigned char ddr2b =   0x00;
+   unsigned char ior2b =   0x00;
+   unsigned char ddr3a =   0x00;
+   unsigned char ior3a =   0x00;
+   unsigned char ddr3b =   0x00;
+   unsigned char ior3b =   0x00;
+   unsigned char   val =   0x00;
+   int           going =   0x01;
+   int           instr =   0x01;
+   int               l =   0x00;
+   char*            vp =   0x00;
+   char        cmd[20] = { 0x00 };
 
    while( going ) {
 
@@ -38,18 +38,18 @@ void main(void) {
          putchar( '\n' );
       }
 
-      ddr1a = get_DDR1A();
-      ior1a = get_IOR1A();
-      ddr1b = get_DDR1B();
-      ior1b = get_IOR1B();
-      ddr2a = get_DDR2A();
-      ior2a = get_IOR2A();
-      ddr2b = get_DDR2B();
-      ior2b = get_IOR2B();
-      ddr3a = get_DDR3A();
-      ior3a = get_IOR3A();
-      ddr3b = get_DDR3B();
-      ior3b = get_IOR3B();
+      ddr1a = VIA1.ddra;
+      ior1a = VIA1.pra;
+      ddr1b = VIA1.ddrb;
+      ior1b = VIA1.prb;
+      ddr2a = VIA2.ddra;
+      ior2a = VIA2.pra;
+      ddr2b = VIA2.ddrb;
+      ior2b = VIA2.prb;
+      ddr3a = VIA3.ddra;
+      ior3a = VIA3.pra;
+      ddr3b = VIA3.ddrb;
+      ior3b = VIA3.prb;
 
       puts( "================== Digital I/O Status ==================" );
       puts( "     Port1A   Port1B   Port2A   Port2B   Port3A   Port3B" );    
@@ -63,7 +63,7 @@ void main(void) {
          puts( "bits  off  and  the bottom three on,  type  'IOR2A  07'." );
          puts( "Press  ENTER without any command to see register  values" );
          puts( "without changing any of them.   Type 'help' to see these" );
-         puts( "instructions again and type 'stop' to end the program.\n");
+         puts( "instructions again and type 'quit' to end the program.\n");
          puts( "Available registers:   DDR1A, IOR1A, DDR1B, IOR1B, DDR2A" );
          puts( "IOR2A, DDR2B, IOR2B, DDR3A, IOR3A, DDR3B and IOR3B." );
          instr = 0;
@@ -74,7 +74,7 @@ void main(void) {
       fgets(cmd, sizeof(cmd)-1, stdin);
       cmd[strlen(cmd)-1] = '\0';
 
-      if( strncasecmp(cmd, "stop", 4) == 0) {
+      if( strncasecmp(cmd, "quit", 4) == 0) {
          going = 0;  
       }
       else if( strncasecmp(cmd, "help", 4) == 0) {
@@ -83,85 +83,85 @@ void main(void) {
       else if( strncasecmp(cmd, "ddr1a", 5) == 0) {
          vp = strchr(cmd, ' ');
          if( vp ) {
-            val = atoi( vp );
-            set_DDR1A( val );
+            val = (unsigned char) strtol( vp, NULL, 0 );
+            VIA1.ddra = val;
          }
       }
       else if( strncasecmp(cmd, "ior1a", 5) == 0) {
          vp = strchr(cmd, ' ');
          if( vp ) {
-            val = atoi( vp );
-            set_IOR1A( val );
+            val = (unsigned char) strtol( vp, NULL, 0 );
+            VIA1.pra = val;
          }
       }
       else if( strncasecmp(cmd, "ddr1b", 5) == 0) {
          vp = strchr(cmd, ' ');
          if( vp ) {
-            val = atoi( vp );
-            set_DDR1B( val );
+            val = (unsigned char) strtol( vp, NULL, 0 );
+            VIA1.ddrb = val;
          }
       }
       else if( strncasecmp(cmd, "ior1b", 5) == 0) {
          vp = strchr(cmd, ' ');
          if( vp ) {
-            val = atoi( vp );
-            set_IOR1B( val );
+            val = (unsigned char) strtol( vp, NULL, 0 );
+            VIA1.prb = val;
          }
       }
       else if( strncasecmp(cmd, "ddr2a", 5) == 0) {
          vp = strchr(cmd, ' ');
          if( vp ) {
-            val = atoi( vp );
-            set_DDR2A( val );
+            val = (unsigned char) strtol( vp, NULL, 0 );
+            VIA2.ddra = val;
          }
       }
       else if( strncasecmp(cmd, "ior2a", 5) == 0) {
          vp = strchr(cmd, ' ');
          if( vp ) {
-            val = atoi( vp );
-            set_IOR2A( val );
+            val = (unsigned char) strtol( vp, NULL, 0 );
+            VIA2.pra = val;
          }
       }
       else if( strncasecmp(cmd, "ddr2b", 5) == 0) {
          vp = strchr(cmd, ' ');
          if( vp ) {
-            val = atoi( vp );
-            set_DDR2B( val );
+            val = (unsigned char) strtol( vp, NULL, 0 );
+            VIA2.ddrb = val;
          }
       }
       else if( strncasecmp(cmd, "ior2b", 5) == 0) {
          vp = strchr(cmd, ' ');
          if( vp ) {
-            val = atoi( vp );
-            set_IOR2B( val );
+            val = (unsigned char) strtol( vp, NULL, 0 );
+            VIA2.prb = val;
          }
       }
       else if( strncasecmp(cmd, "ddr3a", 5) == 0) {
          vp = strchr(cmd, ' ');
          if( vp ) {
-            val = atoi( vp );
-            set_DDR3A( val );
+            val = (unsigned char) strtol( vp, NULL, 0 );
+            VIA3.ddra = val;
          }
       }
       else if( strncasecmp(cmd, "ior3a", 5) == 0) {
          vp = strchr(cmd, ' ');
          if( vp ) {
-            val = atoi( vp );
-            set_IOR3A( val );
+            val = (unsigned char) strtol( vp, NULL, 0 );
+            VIA3.pra = val;
          }
       }
       else if( strncasecmp(cmd, "ddr3b", 5) == 0) {
          vp = strchr(cmd, ' ');
          if( vp ) {
-            val = atoi( vp );
-            set_DDR3B( val );
+            val = (unsigned char) strtol( vp, NULL, 0 );
+            VIA3.ddrb = val;
          }
       }
       else if( strncasecmp(cmd, "ior3b", 5) == 0) {
          vp = strchr(cmd, ' ');
          if( vp ) {
-            val = atoi( vp );
-            set_IOR3B( val );
+            val = (unsigned char) strtol( vp, NULL, 0 );
+            VIA3.prb = val;
          }
       }
    }
diff --git a/targettest/sym1/symTiny.c b/targettest/sym1/symTiny.c
index 1e9f86516..bbca4f9d1 100644
--- a/targettest/sym1/symTiny.c
+++ b/targettest/sym1/symTiny.c
@@ -26,9 +26,8 @@ void main(void) {
       }
    }
 
-   while( c != '\r' ) {
+   while( c != '\n' ) {
       c = getchar();
-      putchar( c );
    }
 
    puts( "\n\nThanks!\n" );