public boolean disassembleROM(CPU6502ControllerInterface controller, NESRom rom , Component parentComponent){
        if(_running) {
            stopRunning();
            try { Thread.sleep(500); } catch(Exception e) { e.printStackTrace(); }
            if(!_runCompleted){
                System.err.println("Preview Disassemble still running");
                return false;
            }
        }
        
        _selectedDir = null;
        _rom = rom;
        if(rom.getNumPRGBanks() < 1) {
            System.err.println("Nothing to disassemble ");
            return false;
        }
        if(rom.getNumPRGBanks() > 2) {
            System.err.println("Unable to disassemble ROMs with more than 2 16K PRG banks ");
            return false;
        }
        _selectedDir = FileUtilities.selectDirectoryForSave(parentComponent);
        
        if(_selectedDir == null){
            System.err.println("No directory selected");
            return false;
        }
        
        
        System.out.println("Starting disassembly");
        
        // make a copy for the class
        _romData = new byte[0xFFFF + 1];
        if(rom.getNumPRGBanks() == 1){
            byte b[] = rom.getPRGBank(0);
            System.arraycopy(b,0,_romData,Architecture6502.PRG_BANK0_OFFSET,b.length);
            System.arraycopy(b,0,_romData,Architecture6502.PRG_BANK1_OFFSET,b.length);
        } else {
            byte b[] = rom.getPRGBank(0);
            System.arraycopy(b,0,_romData,Architecture6502.PRG_BANK0_OFFSET,b.length);
            b = rom.getPRGBank(1);
            System.arraycopy(b,0,_romData,Architecture6502.PRG_BANK1_OFFSET,b.length);
            
        }
        _types = new int[_romData.length]; // array is initially set to zero: ie: unknown
        _count = new int[_romData.length];  // initially zero
        _lowLabels= new int[_romData.length]; // array is initially set to zero: ie: unused
        _highLabels= new int[_romData.length]; // array is initially set to zero: ie: unused
//        _jsrRets = new int[_romData.length];
        _memSets = new int[0xFF + 4];
        _controller = controller;
        _thread = new Thread(this);
        _thread.start();
        return true;
    }