/*******************************************************************************
* openDLX - A DLX/MIPS processor simulator.
* Copyright (C) 2013 The openDLX project, University of Augsburg, Germany
* Project URL: <https://sourceforge.net/projects/opendlx>
* Development branch: <https://github.com/smetzlaff/openDLX>
*
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program, see <LICENSE>. If not, see
* <http://www.gnu.org/licenses/>.
******************************************************************************/
package openDLX.gui.internalframes.factories.tableFactories;
import javax.swing.JTable;
import javax.swing.table.TableColumnModel;
import openDLX.OpenDLXSimulator;
import openDLX.asm.DLXAssembler;
import openDLX.datatypes.uint32;
import openDLX.exception.MemoryException;
import openDLX.gui.MainFrame;
import openDLX.gui.internalframes.renderer.CodeFrameTableCellRenderer;
import openDLX.gui.internalframes.util.NotSelectableTableModel;
public class CodeTableFactory extends TableFactory
{
private OpenDLXSimulator openDLXSim;
public CodeTableFactory(OpenDLXSimulator openDLXSim)
{
this.openDLXSim = openDLXSim;
}
@Override
public JTable createTable()
{
model = new NotSelectableTableModel();
table = new JTable(model);
table.setFocusable(false);
model.addColumn("address");
model.addColumn("code hex");
model.addColumn("code DLX");
//default max width values change here
TableColumnModel tcm = table.getColumnModel();
final int defaultWidth = 150;
tcm.getColumn(0).setMaxWidth(defaultWidth);
tcm.getColumn(1).setMaxWidth(defaultWidth);
tcm.getColumn(2).setMaxWidth(defaultWidth);
table.setDefaultRenderer(Object.class, new CodeFrameTableCellRenderer());
//insert code
int start;
if (!openDLXSim.getConfig().containsKey("text_begin"))
start = openDLXSim.getPipeline().getFetchStage().getPc().getValue();
else
start = stringToInt(openDLXSim.getConfig().getProperty("text_begin"));
int end = openDLXSim.getSimCycles();
if (!openDLXSim.getConfig().containsKey("text_end"))
end = start + 4 * openDLXSim.getSimCycles();
else
end = stringToInt(openDLXSim.getConfig().getProperty("text_end"));
DLXAssembler asm = new DLXAssembler();
try
{
for (int i = start; i < end; i += 4)
{
final uint32 addr = new uint32(i);
final uint32 inst = openDLXSim.getPipeline().getInstructionMemory().read_u32(addr);
model.addRow(new Object[]
{
addr,
inst,
asm.Instr2Str(inst.getValue())
});
}
}
catch (MemoryException e)
{
MainFrame.getInstance().getPipelineExceptionHandler().handlePipelineExceptions(e);
}
return table;
}
private int stringToInt(String s)
{
return Long.decode(s).intValue();
}
}