         case 0x15:
             state.me = byte
         case 0x16:
+            updateSideBorder()
             state.nextPipe.xScroll = byte & 0x07
             state.csel = byte & 0x08 != 0
             borderComparison.left = state.csel ? 24 : 31

    // Subfunction are always inlined for performance
    private func drawPixel(_ i: Int) {
        if (state.rasterX >= configuration.visibleX.first || state.rasterX < configuration.visibleX.last - 1) &&
            (state.raster > configuration.vblankLines.last || state.raster < configuration.vblankLines.first) {
            if state.rasterX == borderComparison.right {
                state.nextPipe.mainBorder = true
            } else if state.rasterX == borderComparison.left {
                if !state.nextPipe.verticalBorder {
                    state.nextPipe.mainBorder = false
                }
            }
            if state.currentCycle >= 18 && state.currentCycle <= 57 && i == state.pipe.xScroll {
                state.graphicsShiftRegister = state.pipe.graphicsData
                state.graphicsMulticolorFlipFlop = true

        //TODO: this will cause the next 2 frames to be skipped, as the actual buffers are in VIC, figure this later
        //      Good enough for now
        let screenBuffer = UnsafeMutableBufferPointer<UInt32>(start: calloc(512 * 512, MemoryLayout<UInt32>.size).assumingMemoryBound(to: UInt32.self), count: 512 * 512)
        return VICState(videoMatrix: binaryDump.next(), colorLine: binaryDump.next(), mp: binaryDump.next(), screenBuffer: screenBuffer, currentCycle: binaryDump.next(), currentLine: binaryDump.next(), m_y: binaryDump.next(), yScroll: binaryDump.next(), rsel: binaryDump.next(), den: binaryDump.next(), raster: binaryDump.next(), me: binaryDump.next(), csel:binaryDump.next(), mye: binaryDump.next(), vm: binaryDump.next(), cb: binaryDump.next(), ir: binaryDump.next(), ier: binaryDump.next(), mdp: binaryDump.next(), mmc: binaryDump.next(), mm: binaryDump.next(), md: binaryDump.next(), vc: binaryDump.next(), vcbase: binaryDump.next(), rc: binaryDump.next(), vmli: binaryDump.next(), displayState: binaryDump.next(), rasterX: binaryDump.next(), rasterInterruptLine: binaryDump.next(), mainBorder: binaryDump.next(), ref: binaryDump.next(), mc: binaryDump.next(), mcbase: binaryDump.next(), yExpansion: binaryDump.next(), pipe: binaryDump.next(), nextPipe: binaryDump.next(), colorPipe: binaryDump.next(), nextColorPipe: binaryDump.next(), addressBus: binaryDump.next(), dataBus: binaryDump.next(), memoryBankAddress: binaryDump.next(), bufferPosition: binaryDump.next(), badLinesEnabled: binaryDump.next(), isBadLine: binaryDump.next(), baPin: binaryDump.next(), baLowCount: binaryDump.next(), currentSprite: binaryDump.next(), spriteDma: binaryDump.next(), spriteDisplay: binaryDump.next(), anySpriteDisplaying: binaryDump.next(), spriteSequencerData: binaryDump.next(), spriteShiftRegisterCount: binaryDump.next(), spriteShiftRegisterPixelsPerShift: binaryDump.next(), graphicsShiftRegister: binaryDump.next(), graphicsShiftRegisterRemainingBits: binaryDump.next(), graphicsPixelData: binaryDump.next(), graphicsMulticolorFlipFlop: binaryDump.next())
    }

    var description: String {
