diff --git a/index.html b/index.html index 0176581..a32f328 100644 --- a/index.html +++ b/index.html @@ -9,6 +9,11 @@ font-family: monospace; font-size: 14px; } + hr { + border-top: #ccc solid 1px; + height: 0; + margin: 10px 0 10px 0; + } div { border: 0; padding: 0; @@ -23,6 +28,11 @@ margin: 0 13px 0 0; padding: 0; } + .comments { + font-size: 11px; + color: #666; + line-height: 14px; + } @@ -54,6 +64,17 @@
+

+   + +

+
+Examples - binary data of simple programs:
+db ff d3 ff c3 00 00       // Switch echo between A2 and A1.
+3e 8c d3 ff 0f c3 02 00    // Pattern shift.
+ +
+

LEDs:

@@ -203,14 +224,19 @@ sim.powerOff(); } + function loadData() { + var data = document.getElementById("data").value; + sim.loadDataAsHexString(0, data); + } + function run() { - // Switch echo between A2 and A1. - // sim.loadDataAsHexString(0, 'db ff d3 ff c3 00 00'); - // Pattern shift. - sim.loadDataAsHexString(0, '3e 8c d3 ff 0f c3 02 00'); sim.start(); } + function singleStep() { + sim.step(1); + } + function stop() { sim.stop(); } diff --git a/js/sim8800.js b/js/sim8800.js index 465c616..ec19459 100644 --- a/js/sim8800.js +++ b/js/sim8800.js @@ -104,9 +104,12 @@ class Sim8800 { * @param {Array} data The array of data. */ loadData(address, data) { + if (!this.isPoweredOn) + return; for (let i = 0; i < data.length && address < this.mem.length; i++) { this.mem[address++] = data[i]; } + this.dumpMem(); } /** @@ -115,11 +118,14 @@ class Sim8800 { * @param {string} hexString Data encoded in hex string, like 'c3 00 00'. */ loadDataAsHexString(address, hexString) { + if (!this.isPoweredOn || !hexString) + return; var data = hexString.split(' '); for (let i = 0; i < data.length && address < this.mem.length; i++) { var byte = parseInt('0x' + data[i]); this.mem[address++] = byte; } + this.dumpMem(); } /** @@ -257,23 +263,6 @@ class Sim8800 { }; } - /** - * Runs a given number of CPU cycles. - * @param {number} cycles The number of CPU cycles to step on. - */ - step(cycles) { - if (!this.isPoweredOn) - return; - CPU8080.steps(cycles); - this.dumpCpu(); - this.dumpMem(); - if (this.setAddressLedsCallback) { - var cpu = CPU8080.status(); - var pcBits = Sim8800.parseBits(cpu.pc, 16); - this.setAddressLedsCallback(pcBits); - } - } - /** * Powers on the machine. */ @@ -353,4 +342,21 @@ class Sim8800 { } window.setTimeout(this.getClockTickerCallback(), 1); } + + /** + * Runs a given number of CPU cycles. + * @param {number} cycles The number of CPU cycles to step on. + */ + step(cycles) { + if (!this.isPoweredOn) + return; + CPU8080.steps(cycles); + this.dumpCpu(); + this.dumpMem(); + if (this.setAddressLedsCallback) { + var cpu = CPU8080.status(); + var pcBits = Sim8800.parseBits(cpu.pc, 16); + this.setAddressLedsCallback(pcBits); + } + } };