public boolean load(String filename) {
        File file = new File(filename);
        FileInputStream stream = null;

        if (!file.exists()) {
            System.out.println("Não foi possível carregar o arquivo: " + filename);
            return false;
        }
        try {
            stream = new FileInputStream(file);

            byte[] signature = new byte[4];
            stream.read(signature);

            if (!checkSignature(signature)) {
                System.out.println("Não é uma ROM válida!");
                return false;
            }
            System.out.println("Arquivo de ROM válido, carregando...");

            prgBanks = stream.read();
            chrBanks = stream.read();
            flag6 = stream.read();
            flag7 = stream.read();

            System.out.println("PRG-BANKS: " + prgBanks);
            System.out.println("CHR-BANKS: " + chrBanks);
            System.out.println("MAPPER-NO: " + getMapperNumber());

            stream.skip(8);

            if (chrBanks == 0) {
                chrBanks = 1;
                isChrRam = true;
            } else isChrRam = false;

            int prgSize = prgBanks * PRG_BANK_SIZE;
            int chrSize = chrBanks * CHR_BANK_SIZE;

            prgRom = new byte[prgSize];
            chrRom = new byte[chrSize];

            stream.read(prgRom);
            stream.read(chrRom);
            stream.close();
        } catch (IOException e) {
            System.out.println("Erro de IO");
            return false;
        } finally {
        }
        System.out.println("ROM carregada com sucesso!");
        savePrg();
        saveChr();
        return true;
    }