         loadA(a | data)
         cycle = 0
     }
+    
+    private func oraPageBoundary() {
+        data = memory.readByte(address)
+        if pageBoundaryCrossed {
+            addressHigh = addressHigh &+ 1
+        } else {
+            loadA(a | data)
+            cycle = 0
+        }
+    }
 
     private func oraAbsolute() {
         data = memory.readByte(address)

            case 0x71: return String(format: "ADC (%02x),Y", self.memory.readByte(self.pc))
            case 0x29: return String(format: "AND #%02x", self.memory.readByte(self.pc))
            case 0x25: return String(format: "AND %02x", self.memory.readByte(self.pc))
            case 0x2D: return String(format: "AND %04x", self.memory.readWord(self.pc))
            case 0x3D: return String(format: "AND %04x,X", self.memory.readWord(self.pc))
            case 0x0A: return "ASL"

            andImmediate()
        case 0x25:
            cycle == 2 ? zeroPage() : andZeroPage()
        case 0x35:
            cycle == 2 ? zeroPage() :
                cycle == 3 ? zeroPageX() : andZeroPage()
        case 0x2D:
            cycle == 2 ? absolute() :
                cycle == 3 ? absolute2() : andAbsolute()
