import { Disassembler } from /**/"./Disassembler.js"; /////////////////////////////////////////////////////////////////////////////// // CPU // /////////////////////////////////////////////////////////////////////////////// // CPU register editor and disassembler class CPU extends Toolkit.SplitPane { ///////////////////////// Initialization Methods ////////////////////////// constructor(app, sim) { super(app, { className: "tk tk-splitpane tk-cpu", edge : Toolkit.SplitPane.RIGHT, style : { position: "relative" } }); this.app = app; this.sim = sim; this.initDasm(); this.metrics = new Toolkit.Component(this.app, { className: "tk tk-mono", tagName : "div", style : { position : "absolute", visibility: "hidden" } }); let text = ""; for (let x = 0; x < 16; x++) { if (x) text += "\n"; let digit = x.toString(16); text += digit + "\n" + digit.toUpperCase(); } this.metrics.element.innerText = text; this.splitter.append(this.metrics.element); this.setView(1, this.regs = new Toolkit.SplitPane(app, { className: "tk tk-splitpane", edge : Toolkit.SplitPane.TOP })); this.regs.setView(0, this.sysregs = new RegisterList(this, true )); this.regs.setView(1, this.proregs = new RegisterList(this, false)); // Adjust split panes to the initial size of the System Registers pane let resize; let preshow = e=>this.onPreshow(resize); resize = new ResizeObserver(preshow); resize.observe(this.sysregs.viewport); resize.observe(this.metrics.element); this.metrics.addEventListener("resize", e=>this.metricsResize()); } initDasm() { this.dasm = new Disassembler(this.app, this.sim); } ///////////////////////////// Event Handlers ////////////////////////////// // Resize handler prior to first visibility onPreshow(resize) { this.metricsResize(); // Once the list of registers is visible, stop listening if (this.isVisible()) { resize.disconnect(); this.sysregs.view.element.style.display = "grid"; return; } // Update the split panes let sys = this.sysregs.view.element; let pro = this.proregs.view.element; this.setValue( Math.max(sys.scrollWidth, pro.scrollWidth) + this.sysregs.vertical.getBounds().width ); this.regs.setValue( this.sysregs[PSW].expansion.getBounds().bottom - sys.getBoundingClientRect().top ); } } export { CPU };