     
     internal func readByte(position: UInt8) -> UInt8 {
         switch position {
+        case 0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E:
+            return UInt8(truncatingBitPattern: m_x[Int(position >> 1)])
+        case 0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F:
+            return m_y[Int((position - 1) >> 1)]
+        case 0x10:
+            let value = (m_x[0] & 0xFF00) >> 8 |
+                (m_x[1] & 0xFF00) >> 7 |
+                (m_x[2] & 0xFF00) >> 6 |
+                (m_x[3] & 0xFF00) >> 5 |
+                (m_x[4] & 0xFF00) >> 4 |
+                (m_x[5] & 0xFF00) >> 3 |
+                (m_x[6] & 0xFF00) >> 2 |
+                (m_x[7] & 0xFF00) >> 1
+            return UInt8(truncatingBitPattern: value)
         case 0x11:
             return yScroll | (den ? 0x10 : 0) | (bmm ? 0x20 : 0) | (ecm ? 0x40 : 0) | UInt8((raster & 0x100) >> 1)
         case 0x12:

                            graphicsSequencerShiftRegister <<= 2
                        }
                    }

                }
                ++bufferPosition
            }

            b2c = byte & 0x0F
        case 0x24:
            b3c = byte & 0x0F
        case 0x27...0x2E:
            m_c[Int(position - 0x27)] = byte & 0x0F
        default:
            break
        }
