public boolean loadROM(Component parentComponent){    
        if(isDirty()){
            // prompt for save
        }
        File selectedFile = FileUtilities.selectFileForOpen( parentComponent );
        if(selectedFile == null){
            return false;
        }
        byte header[] = new byte[INES_ROM_INFO.INES_HEADER_SIZE];
        int headerCount = FileUtilities.loadBytes(selectedFile, header, INES_ROM_INFO.INES_HEADER_SIZE);
        
        if(headerCount < INES_ROM_INFO.INES_HEADER_SIZE){
            System.err.println("Header too small" + headerCount + " < " + INES_ROM_INFO.INES_HEADER_SIZE);
            return false;
        }
        if(!validateHeader(header)){
            System.err.println("Header not in INES format");
            return false;            
        }
        // store the data thats in the CHR and PRG banks into memory (what a pig I am)
        // I am such a memory PIG :)
        int entireRomContentsSize = (INES_ROM_INFO.INES_HEADER_SIZE) + (_numPrgBanks * INES_ROM_INFO.PRG_BANK_SIZE) + (_numChrBanks * INES_ROM_INFO.CHR_BANK_SIZE);
        byte entireRomContents[] = new byte[entireRomContentsSize];
        int romLoadedVal = FileUtilities.loadBytes(selectedFile, entireRomContents, entireRomContentsSize);
        if(romLoadedVal != entireRomContentsSize ){
            System.err.println("Rom data does not correspond to the header. Unable to load the data");
            return false;       
        }
        _prgBanks = new byte[_numPrgBanks][INES_ROM_INFO.PRG_BANK_SIZE];
        _chrBanks = new byte[_numChrBanks][INES_ROM_INFO.CHR_BANK_SIZE];
        int curPos = INES_ROM_INFO.INES_HEADER_SIZE;
        for(int i=0;i<_numPrgBanks;i++){
            System.arraycopy(entireRomContents, curPos, _prgBanks[i], 0,  INES_ROM_INFO.PRG_BANK_SIZE);
            curPos+=INES_ROM_INFO.PRG_BANK_SIZE;
        }
        for(int i=0;i<_numChrBanks;i++){
            System.arraycopy(entireRomContents, curPos, _chrBanks[i], 0,  INES_ROM_INFO.CHR_BANK_SIZE);
            curPos+=INES_ROM_INFO.CHR_BANK_SIZE;
        }
         
        _fullROMFileName = selectedFile.getAbsolutePath();
        _romFileNameOnly = selectedFile.getName();
        _isDirty = false;
        notifyCPUModelChanged(MODEL_CHANGED);
        return true;
    }