   printf("\n");
 
   free(rom_title as *uint8);
+
+  // Fail if we can't support
+  if cgb_mode == 0xC0 {
+    printf("error: ROM requires CGB (which is not implemented)\n");
+    exit(1);
+  }
 }
 
 // =============================================================================

  }

  printf("warn: unhandled read from GPU register: $%04X\n", address);
  return 0;
}

def gpu_write(address: uint16, value: uint8) {

    return *(hram + ((address & 0xFF) - 0x80));
  }

  // Sound Register
  if (
    (address >= 0xFF10 and address <= 0xFF14) or
    (address >= 0xFF16 and address <= 0xFF1E) or
    (address >= 0xFF20 and address <= 0xFF26) or
    (address >= 0xFF30 and address <= 0xFF3F)
  ) {
    return sound_read(address);
  }

  // I/O Ports

  if address == 0xFF00 {
