UI support for loading hex string data
This commit is contained in:
parent
99e0ffff4a
commit
3b2b82cd69
34
index.html
34
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;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
@ -54,6 +64,17 @@
|
|||
|
||||
<hr>
|
||||
|
||||
<p>
|
||||
<input id="data" type="text" size="60">
|
||||
<input type="button" value="LOAD DATA" onclick="loadData();">
|
||||
</p>
|
||||
<pre class="comments">
|
||||
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.</pre>
|
||||
|
||||
<hr>
|
||||
|
||||
<p>LEDs: <!-- ● - on. ○ - off. -->
|
||||
<div id="status-leds">
|
||||
<p>
|
||||
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -104,9 +104,12 @@ class Sim8800 {
|
|||
* @param {Array<number>} 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);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue
Block a user