82 lines
2.7 KiB
JavaScript
82 lines
2.7 KiB
JavaScript
/**
|
|
* Display a table of memory locations.
|
|
* Call with [start] and [end] indices to display a range.
|
|
* @param {Uint8Array} mem - Memory to display
|
|
* @param {number} [start] - A start-index, in decimal
|
|
* @param {number} [end] - An end-index, in decimal
|
|
**/
|
|
const logMemory = (mem, start=0, end=mem.length) => {
|
|
mem = mem.slice(start, end);
|
|
console.log(`┌────────┬────────┬─────────┐`);
|
|
console.log(`│ addr │ opcode │ operand │`);
|
|
console.log(`├────────┼────────┼─────────┤`);
|
|
for (let i = start; i < mem.length; i +=2) {
|
|
let operand = mem[i+1];
|
|
if (typeof operand === 'undefined') {
|
|
console.warn(' operand undefined');
|
|
operand = -1;
|
|
}
|
|
console.log(`│ ${num2hex(i)} │ ${num2hex(mem[i])} │ ${num2hex(operand)} │`);
|
|
|
|
// Add a blank row every 4 lines:
|
|
if (((i + 2) % 8) === 0) {
|
|
if ((i < (mem.length - 2))) {
|
|
console.log(`│ │ │ │`);
|
|
}
|
|
}
|
|
}
|
|
console.log(`└────────┴────────┴─────────┘`);
|
|
}
|
|
|
|
const logRunningHeader = () => {
|
|
console.log();
|
|
let time = new Date();
|
|
console.log( `┌─────────────────────┐`);
|
|
console.log( `│ Running at ${time.toLocaleTimeString('en-GB')} │` );
|
|
console.log( `└─────────────────────┘`);
|
|
}
|
|
|
|
/**
|
|
* @param {number} num
|
|
* @returns {string}
|
|
*/
|
|
const num2hex = (num) => num.toString(16).toUpperCase().padStart(2, "0");
|
|
|
|
/**
|
|
* @param {string} hex
|
|
* @returns {number}
|
|
*/
|
|
const hex2num = (hex) => parseInt(hex, 16);
|
|
|
|
/**
|
|
* Convert a number to binary, padded to 8 bits
|
|
* See here for an explanation: https://stackoverflow.com/questions/9939760/how-do-i-convert-an-integer-to-binary-in-javascript
|
|
* @param {number} num
|
|
* @returns {string} binary representation of the input
|
|
**/
|
|
const num2bin = (num) => (num >>> 0).toString(2).padStart(8, "0");
|
|
|
|
/**
|
|
* Convert a number to binary, padded to 4 bits
|
|
* See here for an explanation: https://stackoverflow.com/questions/9939760/how-do-i-convert-an-integer-to-binary-in-javascript
|
|
* @param {number} num
|
|
* @returns {string} binary representation of the input
|
|
**/
|
|
const num2bin_4bit = (num) => (num >>> 0).toString(2).padStart(4, "0");
|
|
|
|
/**
|
|
* @param {string} bin
|
|
* @returns {number}
|
|
*/
|
|
const bin2num = (bin) => parseInt(bin, 2)
|
|
|
|
|
|
module.exports = {
|
|
"logMemory": logMemory,
|
|
"logRunningHeader": logRunningHeader,
|
|
"num2hex": num2hex,
|
|
"hex2num": hex2num,
|
|
"num2bin": num2bin,
|
|
"num2bin_4bit": num2bin_4bit,
|
|
"bin2num": bin2num,
|
|
} |