package externaldebugger; import java.awt.GridLayout; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.IOException; import java.net.Socket; import java.net.UnknownHostException; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import debug.DebugCommand; import debug.DebugCommandType; import debug.DebugResponse; public class CPUStatePanel extends JPanel { private static final long serialVersionUID = 8706770369703977217L; private CPURemote remote; private long cpu; private JLabel values[]; private long[] lvalues; public static interface UpdateWatcher { public void registersUpdated(long[] lvalues); } public UpdateWatcher watcher; public CPUStatePanel(CPURemote r, long cpu) { super(new GridLayout(0,2)); this.remote = r; this.cpu = cpu; String[] names = new String[]{"A","B","C","X","Y","Z","I","J","EX","IA","PC","SP"}; values = new JLabel[names.length]; lvalues = new long[names.length]; for (int i=0; i<names.length; i++) { add(new JLabel(names[i])); values[i] = new JLabel(""); add(values[i]); } update(); } public void update() { new Thread() { public void run() { DebugCommand cmd = new DebugCommand(); cmd.params = new long[]{cpu}; cmd.type = DebugCommandType.CPUREGS; DebugResponse resp = remote.commandResponse(cmd); for (int i=0; i<resp.payload.length; i++) { values[i].setText(String.format("%04x", resp.payload[i])); lvalues[i] = resp.payload[i]; } if (watcher != null) watcher.registersUpdated(lvalues); } }.start(); } public static void main(String[] args) throws UnknownHostException, IOException { JFrame jf = new JFrame(); CPURemote r = new CPURemote(0, new Socket("localhost", 40300)); final CPUStatePanel pan; jf.add(pan = new CPUStatePanel(r, 0)); jf.setVisible(true); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.pack(); jf.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent arg0) { pan.update(); } }); } }