From 41384d9842dcc81d47c77a457296645b6492aaeb Mon Sep 17 00:00:00 2001 From: Yonggang Wang Date: Fri, 6 Mar 2020 13:06:47 +0800 Subject: [PATCH] connected to the 8080 cpu simulator. also added the code to dump cpu status. --- index.html | 19 +++++++---------- js/sim8800.js | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 12 deletions(-) diff --git a/index.html b/index.html index d648929..d448a29 100644 --- a/index.html +++ b/index.html @@ -5,24 +5,19 @@

test

-
+ +
+
diff --git a/js/sim8800.js b/js/sim8800.js index 2a89795..4d94978 100644 --- a/js/sim8800.js +++ b/js/sim8800.js @@ -31,6 +31,11 @@ class Sim8800 { /** @type {Array} */ this.mem = new Array(memSize); this.initMem(); + CPU8080.init(this.getWriteByteCallback(), + this.getReadByteCallback(), + null, /* not used. */ + this.getWritePortCallback(), + this.getReadPortCallback()); } /** @@ -62,6 +67,38 @@ class Sim8800 { }; } + /** + * Returns the porto (write port) callback. + * @return {function(number, number)} + */ + getWritePortCallback() { + var self = this; + return function(address, value) { + window.console.log('writing port @' + Sim8800.toHex(address, 8) + + ' : ' + Sim8800.toHex(value, 2)); + if (address == 0xff) { + // We only care about port 0xff. + } + }; + } + + /** + * Returns the byteAt (read memory) callback. + * @return {function(number): number} + */ + getReadPortCallback() { + var self = this; + return function(address) { + var value = 0; + if (address == 0xff) { + // We only care about port 0xff. + } + window.console.log('reading port @' + Sim8800.toHex(address, 8) + + ' : ' + Sim8800.toHex(value, 2)); + return value; + }; + } + /** * Formats a number to fixed length hex string. * @param {number} n The number to be formatted. @@ -101,4 +138,25 @@ class Sim8800 { sb.push('\n'); containerElem.innerHTML = sb.join(''); } + + /** + * Dumps the internal CPU status to HTML, for debugging or mornitoring. + * @param {Element} containerElem The DOM element to hold the generated HTML. + */ + dumpCpu(containerElem) { + var cpu = CPU8080.status(); + var sb = ['
\n'];
+        sb.push('PC = ' + Sim8800.toHex(cpu.pc, 4) + '  ');
+        sb.push('SP = ' + Sim8800.toHex(cpu.sp, 4) + '\n');
+        sb.push('A = ' + Sim8800.toHex(cpu.a, 2) + '  ');
+        sb.push('B = ' + Sim8800.toHex(cpu.b, 2) + '  ');
+        sb.push('C = ' + Sim8800.toHex(cpu.c, 2) + '  ');
+        sb.push('D = ' + Sim8800.toHex(cpu.d, 2) + '\n');
+        sb.push('E = ' + Sim8800.toHex(cpu.e, 2) + '  ');
+        sb.push('F = ' + Sim8800.toHex(cpu.f, 2) + '  ');
+        sb.push('H = ' + Sim8800.toHex(cpu.h, 2) + '  ');
+        sb.push('L = ' + Sim8800.toHex(cpu.l, 2) + '\n');
+        sb.push('
\n'); + containerElem.innerHTML = sb.join(''); + } };