package elw.dp.app; import elw.dp.mips.Memory; import elw.dp.mips.asm.Data; import javax.swing.table.AbstractTableModel; public class MemoryTableModel extends AbstractTableModel { public static final String COL_ADDR = "Addr"; private static final String COL_BIN = "Bin8"; private static final String COL_HEX_WORD = "Hex32"; private static final String COL_DEC_WORD = "Dec32"; public static final String COL_ACC = InstructionsTableModel.COL_ACC; private final String[] columns = new String[]{COL_ACC, COL_ADDR, COL_HEX_WORD, COL_DEC_WORD, COL_BIN}; private final Memory memory; public MemoryTableModel(Memory memory) { this.memory = memory; } public String getColumnName(int column) { return columns[column]; } public int getColumnCount() { return columns.length; } public int getRowCount() { return memory.getSize(); } public Object getValueAt(int rowIndex, int columnIndex) { final String colName = columns[columnIndex]; final int address = memory.getAddressAt(rowIndex); if (COL_ADDR.equals(colName)) { return Data.str(address, 16, 8); } else if (COL_BIN.equals(colName)) { //Look at this hack on the next line! This should be done inside Data.str() return Data.str((long) memory.getByteInternal(address) & 0xFF, 2, 8); } else if (COL_HEX_WORD.equals(colName)) { if (!memory.hasWord(address)) { return "?"; } return Data.str((long) memory.getWordInternal(address) & 0xFFFFFFFFL, 16, 8); } else if (COL_DEC_WORD.equals(colName)) { if (!memory.hasWord(address)) { return "?"; } return Data.str(memory.getWordInternal(address), 10, 0); } else if (COL_ACC.equals(colName)) { return getAccessMod(address); } return ""; } private String getAccessMod(int address) { StringBuffer accessMod = new StringBuffer(); if (memory.getReadAdresses().contains(address)) { accessMod.append("r"); } if (memory.getWriteAdresses().contains(address)) { accessMod.append("w"); } return accessMod.toString(); } }