         ADD(&register, memory.read(address))
     }
 
+    /// `AND r, d8`
     public mutating func AND(_ register: inout UInt8, _ value: UInt8) {
         register = register & value
 

        ADC(&register, memory.read(address))
    }
    
    /// `ADD r, d8`
    public mutating func SUB(_ register: inout UInt8, _ value: UInt8) {
        let high = UInt16(register) &- UInt16(value)
        let low  = (register & 0x0F) &- (value & 0x0F)

        CFlag = false
    }

    /// `OR r, (a16)`
    public mutating func OR(_ register: inout UInt8, address: Address) {
        OR(&register, memory.read(address))
    }

    /// `PUSH d16`
    public mutating func PUSH(_ value: UInt16) {
        SP -= 2
        memory.write16(SP, value)
    }

    /// `POP r`
    public mutating func POP(_ register: inout UInt16) {
        register = memory.read16(SP)
        SP += 2
    }

    /// `ADC r, d8`
    public mutating func SBC(_ register: inout UInt8, _ value: UInt8) {
        let carry: UInt8 = CFlag ? 1 : 0
