public boolean load(String filename) {
        /*
         * A ideia é que todos os componentes do hardware sejam conectados através
         * do BUS, como no hardware real.
         * O unico objeto que não tem depência do BUS é o próprio cartucho.
         */
        cartridge = new NesCartridge();
        if (!cartridge.load(filename))
            return false;
        bus = new NesBus();
        bus.setCartridge(cartridge);
        bus.setupMapper();
        cpu = new NesCpu(bus);
        cpu.reset();
        ppu = new NesPPU(bus);
        joystick = new NesJoystick(bus);

        // libera toda a memória alocada
        System.gc();

        return true;
    }