public Object getValueAt(int row, int column) { Object res = ""; int memLoc = rowToMemLoc(row); switch (column) { case C_ADDRESS: res = Utils.asHex(memLoc); break; case C_VALUE: res = Utils.asHex(memory.getAt(memLoc)); break; case C_REGPTRS: { String pc, sp, mp; pc = sp = mp = ""; if (memLoc == registers.getReg(Registers.PC)) pc = " PC"; if (memLoc == registers.getReg(Registers.SP)) sp = " SP"; if (memLoc == registers.getReg(Registers.MP)) mp = " MP"; res = pc + sp + mp; } break; case C_ANNOTE: MemoryAnnotation ann = memory.getAnnotationAt(memLoc); res = ann == null ? ColoredText.blankDefault : ann; break; } return res; }
public void reset() { if (memory != null) memory.removeMemoryCellListener(this); if (registers != null) registers.removeMemoryCellListener(this); memory = machineState.getMemory(); registers = machineState.getRegisters(); memory.addMemoryCellListener(this); registers.addMemoryCellListener(this); startAddressOfStack = maxAccessedSP = registers.getReg(Registers.SP); fireTableChanged(new TableModelEvent(this)); }
public void cellChanged(MemoryCellEvent e) { Object src = e.getSource(); int v; if (src == memory) { int row = memLocToRow(e.cellIndex); if (isMemLocWithinStackRange(e.cellIndex)) fireTableRowsUpdated(row, row); } else if (src == registers && e.event == MemoryCellEvent.CELL) { int loc = registers.getReg(e.cellIndex); if (e.cellIndex == Registers.SP && maxAccessedSP < loc) { int oldSPRow = rowToMemLoc(maxAccessedSP); int newSPRow = rowToMemLoc(loc); maxAccessedSP = loc; isSPChanged = true; fireTableRowsInserted(oldSPRow + 1, newSPRow); } else isSPChanged = false; if (isMemLocWithinStackRange(v = e.getOldCellValue())) { int oldrow = memLocToRow(v); fireTableCellUpdated(oldrow, C_REGPTRS); } if (isMemLocWithinStackRange(loc)) { int row = memLocToRow(loc); fireTableCellUpdated(row, C_REGPTRS); } } }