From 6dc3f057342c98815b256a450055d97986e9cd78 Mon Sep 17 00:00:00 2001 From: wixette Date: Sat, 7 Mar 2020 00:58:08 +0800 Subject: [PATCH] fix the reset logic --- index.html | 4 ++++ js/sim8800.js | 32 +++++++++++++++++++++++--------- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/index.html b/index.html index a32f328..95e42b4 100644 --- a/index.html +++ b/index.html @@ -224,6 +224,10 @@ db ff d3 ff c3 00 00 // Switch echo between A2 and A1. sim.powerOff(); } + function reset() { + sim.reset(); + } + function loadData() { var data = document.getElementById("data").value; sim.loadDataAsHexString(0, data); diff --git a/js/sim8800.js b/js/sim8800.js index ec19459..8cce6cd 100644 --- a/js/sim8800.js +++ b/js/sim8800.js @@ -123,7 +123,9 @@ class Sim8800 { 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; + if (!isNaN(byte)) { + this.mem[address++] = byte; + } } this.dumpMem(); } @@ -267,27 +269,21 @@ class Sim8800 { * Powers on the machine. */ powerOn() { - this.stop(); - this.reset(); + this.isPoweredOn = true; this.initMem(); + this.reset(); if (this.setStatusLedsCallback) { this.setStatusLedsCallback(true); } if (this.setWaitLedCallback) { this.setWaitLedCallback(false); } - this.dumpCpu(); - this.dumpMem(); - this.isPoweredOn = true; } /** * Powers off the machine. */ powerOff() { - this.stop(); - this.reset(); - this.initMem(); if (this.setStatusLedsCallback) { this.setStatusLedsCallback(false); } @@ -316,6 +312,24 @@ class Sim8800 { if (!this.isPoweredOn) return; CPU8080.reset(); + this.stop(); + if (this.setAddressLedsCallback) { + this.setAddressLedsCallback(new Array(16).fill(1)); + } + if (this.setDataLedsCallback) { + this.setDataLedsCallback(new Array(8).fill(1)); + } + this.dumpCpu(); + this.dumpMem(); + var self = this; + window.setTimeout(function() { + if (self.setAddressLedsCallback) { + self.setAddressLedsCallback(new Array(16).fill(0)); + } + if (self.setDataLedsCallback) { + self.setDataLedsCallback(new Array(8).fill(0)); + } + }, 400); } /**