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-family: monospace;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
|
hr {
|
||||||
|
border-top: #ccc solid 1px;
|
||||||
|
height: 0;
|
||||||
|
margin: 10px 0 10px 0;
|
||||||
|
}
|
||||||
div {
|
div {
|
||||||
border: 0;
|
border: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
@ -23,6 +28,11 @@
|
||||||
margin: 0 13px 0 0;
|
margin: 0 13px 0 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
.comments {
|
||||||
|
font-size: 11px;
|
||||||
|
color: #666;
|
||||||
|
line-height: 14px;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
@ -54,6 +64,17 @@
|
||||||
|
|
||||||
<hr>
|
<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. -->
|
<p>LEDs: <!-- ● - on. ○ - off. -->
|
||||||
<div id="status-leds">
|
<div id="status-leds">
|
||||||
<p>
|
<p>
|
||||||
|
@ -203,14 +224,19 @@
|
||||||
sim.powerOff();
|
sim.powerOff();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function loadData() {
|
||||||
|
var data = document.getElementById("data").value;
|
||||||
|
sim.loadDataAsHexString(0, data);
|
||||||
|
}
|
||||||
|
|
||||||
function run() {
|
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();
|
sim.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function singleStep() {
|
||||||
|
sim.step(1);
|
||||||
|
}
|
||||||
|
|
||||||
function stop() {
|
function stop() {
|
||||||
sim.stop();
|
sim.stop();
|
||||||
}
|
}
|
||||||
|
|
|
@ -104,9 +104,12 @@ class Sim8800 {
|
||||||
* @param {Array<number>} data The array of data.
|
* @param {Array<number>} data The array of data.
|
||||||
*/
|
*/
|
||||||
loadData(address, data) {
|
loadData(address, data) {
|
||||||
|
if (!this.isPoweredOn)
|
||||||
|
return;
|
||||||
for (let i = 0; i < data.length && address < this.mem.length; i++) {
|
for (let i = 0; i < data.length && address < this.mem.length; i++) {
|
||||||
this.mem[address++] = data[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'.
|
* @param {string} hexString Data encoded in hex string, like 'c3 00 00'.
|
||||||
*/
|
*/
|
||||||
loadDataAsHexString(address, hexString) {
|
loadDataAsHexString(address, hexString) {
|
||||||
|
if (!this.isPoweredOn || !hexString)
|
||||||
|
return;
|
||||||
var data = hexString.split(' ');
|
var data = hexString.split(' ');
|
||||||
for (let i = 0; i < data.length && address < this.mem.length; i++) {
|
for (let i = 0; i < data.length && address < this.mem.length; i++) {
|
||||||
var byte = parseInt('0x' + data[i]);
|
var byte = parseInt('0x' + data[i]);
|
||||||
this.mem[address++] = byte;
|
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.
|
* Powers on the machine.
|
||||||
*/
|
*/
|
||||||
|
@ -353,4 +342,21 @@ class Sim8800 {
|
||||||
}
|
}
|
||||||
window.setTimeout(this.getClockTickerCallback(), 1);
|
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