 
   // Sprite Attribute Table (OAM): $FE00 – $FE9F
   if (address >= 0xFE00) and (address <= 0xFE9F) {
+    // OAM cannot be accessed in modes 2 or 3
+    let mode = mmu_read8(0xFF41) & 3;
+    if mode == 3 or mode == 2 { return 0xFF; }
+
     return *(oam + (address & 0xFF));
   }
 


  // Video RAM: $8000 – $9FFF
  if (address & 0xF000) <= 0x9000 {
    // VRAM can be accessed as long as we're not mode 3
    // let mode = mmu_read8(0xFF41) & 3;
    // if mode == 3 { return; }



  // Video RAM: $8000 – $9FFF
  if (address & 0xF000) <= 0x9000 {
    // VRAM cannot be accessed in mode 3
    let mode = mmu_read8(0xFF41) & 3;
    if mode == 3 { return 0xFF; }

    return *(vram + (address & 0x1FFF));
  }
