Comparing version 0.0.65 to 0.0.66
@@ -295,2 +295,62 @@ /** | ||
function execScript(script) { | ||
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, | ||
_ref$verbose = _ref.verbose, | ||
verbose = _ref$verbose === undefined ? false : _ref$verbose; | ||
try { | ||
new ScriptInterpreter({ | ||
file: script, | ||
workingDirectory: path.dirname(script) | ||
}).exec(); | ||
if (verbose) { | ||
console.info(colors.green('\n\u2713 Script executed successfully!\n')); | ||
} else { | ||
console.info(colors.green('[PASS]'), path.basename(script)); | ||
} | ||
} catch (e) { | ||
if (!verbose) { | ||
console.info(colors.red('[FAIL]'), path.basename(script)); | ||
return; | ||
} | ||
if (!e.errorData) { | ||
console.info('Script error:', e); | ||
return; | ||
} | ||
var _e$errorData = e.errorData, | ||
header = _e$errorData.header, | ||
actual = _e$errorData.actual, | ||
expected = _e$errorData.expected, | ||
line = _e$errorData.line, | ||
compareTo = _e$errorData.compareTo; | ||
console.info(colors.red('\nError executing the script:\n')); | ||
var pad2 = ' '; | ||
var pad4 = ' '; | ||
var firstColumnLength = header.slice(1).indexOf('|'); | ||
var firstLinePad = '1'.padStart(line.toString().length, ' '); | ||
var maxLinePad = ' '.repeat(line.toString().length); | ||
console.info(pad2, colors.bold('Expected'), 'on line', colors.bold(line), 'of', colors.bold(compareTo) + ':\n'); | ||
console.info(pad4, firstLinePad, colors.green(header)); | ||
if (line != 2) { | ||
console.info(pad4, maxLinePad + ' |' + centerString('...', firstColumnLength)); | ||
} | ||
console.info(pad4, line, colors.green(expected), '\n'); | ||
console.info(pad2, colors.bold('Received:\n')); | ||
console.info(pad4, firstLinePad, colors.red(header)); | ||
if (line != 2) { | ||
console.info(pad4, maxLinePad + ' |' + centerString('...', firstColumnLength)); | ||
} | ||
console.info(pad4, line, colors.red(actual), '\n'); | ||
} | ||
} | ||
function main() { | ||
@@ -312,39 +372,13 @@ var clockRate = options.clockRate, | ||
if (script) { | ||
try { | ||
new ScriptInterpreter({ | ||
file: script, | ||
workingDirectory: path.dirname(script) | ||
}).exec(); | ||
console.info(colors.green('\n\u2713 Script executed successfully!\n')); | ||
} catch (e) { | ||
var _e$errorData = e.errorData, | ||
header = _e$errorData.header, | ||
actual = _e$errorData.actual, | ||
expected = _e$errorData.expected, | ||
line = _e$errorData.line, | ||
compareTo = _e$errorData.compareTo; | ||
console.info(colors.red('\nError executing the script:\n')); | ||
var pad2 = ' '; | ||
var pad4 = ' '; | ||
var firstColumnLength = header.slice(1).indexOf('|'); | ||
var firstLinePad = '1'.padStart(line.toString().length, ' '); | ||
var maxLinePad = ' '.repeat(line.toString().length); | ||
console.info(pad2, colors.bold('Expected'), 'on line', colors.bold(line), 'of', colors.bold(compareTo) + ':\n'); | ||
console.info(pad4, firstLinePad, colors.green(header)); | ||
if (line != 2) { | ||
console.info(pad4, maxLinePad + ' |' + centerString('...', firstColumnLength)); | ||
} | ||
console.info(pad4, line, colors.green(expected), '\n'); | ||
console.info(pad2, colors.bold('Received:\n')); | ||
console.info(pad4, firstLinePad, colors.red(header)); | ||
if (line != 2) { | ||
console.info(pad4, maxLinePad + ' |' + centerString('...', firstColumnLength)); | ||
} | ||
console.info(pad4, line, colors.red(actual), '\n'); | ||
if (fs.lstatSync(script).isDirectory()) { | ||
// Run the whole directory: | ||
fs.readdirSync(script).forEach(function (file) { | ||
if (path.extname(file) !== '.tst') { | ||
return; | ||
} | ||
execScript(script + '/' + file, { verbose: false }); | ||
}); | ||
} else { | ||
// Single script in the verbose mode: | ||
execScript(script, { verbose: true }); | ||
} | ||
@@ -422,9 +456,9 @@ } | ||
var _expected = (data[row][column] >>> 0).toString(formatRadix).padStart(formatRadix !== 10 ? pinInfo.size : 0, '0').toUpperCase(); | ||
var expected = (data[row][column] >>> 0).toString(formatRadix).padStart(formatRadix !== 10 ? pinInfo.size : 0, '0').toUpperCase(); | ||
if (_expected.length > formatStringLengh) { | ||
_expected = _expected.slice(-formatStringLengh); | ||
if (expected.length > formatStringLengh) { | ||
expected = expected.slice(-formatStringLengh); | ||
} | ||
return colors.red(_expected) + ' / ' + colors.green(value); | ||
return colors.red(expected) + ' / ' + colors.green(value); | ||
} | ||
@@ -431,0 +465,0 @@ return value; |
@@ -21,3 +21,3 @@ /** | ||
*/ | ||
var TRUTH_TABLE = [{ in: 0, sel: 0, out1: 0, out2: 0 }, { in: 0, sel: 1, out1: 0, out2: 0 }, { in: 1, sel: 0, out1: 1, out2: 0 }, { in: 1, sel: 1, out1: 0, out2: 1 }]; | ||
var TRUTH_TABLE = [{ in: 0, sel: 0, a: 0, b: 0 }, { in: 0, sel: 1, a: 0, b: 0 }, { in: 1, sel: 0, a: 1, b: 0 }, { in: 1, sel: 1, a: 0, b: 1 }]; | ||
@@ -60,6 +60,6 @@ /** | ||
description: ['Implements 1-bit demultiplexer (DMux) gate.', '', '{out1 = in, out2 = 0 }, when sel = 0', '{out1 = 0, out2 = in}, when sel = 1'].join('\n'), | ||
description: ['Implements 1-bit demultiplexer (DMux) gate.', '', '{a = in, b = 0 }, when sel = 0', '{a = 0, b = in}, when sel = 1'].join('\n'), | ||
inputPins: ['in', 'sel'], | ||
outputPins: ['out1', 'out2'], | ||
outputPins: ['a', 'b'], | ||
@@ -66,0 +66,0 @@ truthTable: TRUTH_TABLE |
@@ -27,3 +27,45 @@ /** | ||
var TRUTH_TABLE = int16Table([{ $clock: -0, in: 0, load: 0, address: 0, out: 0 }, { $clock: +0, in: 21, load: 1, address: 0, out: 0 }, { $clock: -1, in: 1, load: 0, address: 0, out: 21 }, { $clock: +1, in: 21, load: 0, address: 0, out: 21 }, { $clock: -2, in: 21, load: 0, address: 0, out: 21 }, { $clock: +2, in: 53781, load: 1, address: 2, out: 21 }, { $clock: -3, in: 53781, load: 0, address: 2, out: 53781 }]); | ||
var TRUTH_TABLE = int16Table([{ | ||
$clock: -0, | ||
in: 0, | ||
load: 0, | ||
address: 0, | ||
out: 0 | ||
}, { | ||
$clock: +0, | ||
in: 21, | ||
load: 1, | ||
address: 0, | ||
out: 0 | ||
}, { | ||
$clock: -1, | ||
in: 1, | ||
load: 0, | ||
address: 0, | ||
out: 21 | ||
}, { | ||
$clock: +1, | ||
in: 21, | ||
load: 0, | ||
address: 0, | ||
out: 21 | ||
}, { | ||
$clock: -2, | ||
in: 21, | ||
load: 0, | ||
address: 0, | ||
out: 21 | ||
}, { | ||
$clock: +2, | ||
in: 53781, | ||
load: 1, | ||
address: 2, | ||
out: 0 | ||
}, { | ||
$clock: -3, | ||
in: 53781, | ||
load: 0, | ||
address: 2, | ||
out: 53781 | ||
}]); | ||
@@ -124,2 +166,12 @@ /** | ||
/** | ||
* Update output for address. | ||
*/ | ||
}, { | ||
key: 'eval', | ||
value: function _eval() { | ||
this._updateOutput(); | ||
} | ||
/** | ||
* On rising edge RAM updates the value by the address if the | ||
@@ -150,2 +202,12 @@ * `load` is set, otherwise -- preserves the value. | ||
value: function clockDown() { | ||
this._updateOutput(); | ||
} | ||
/** | ||
* Updates the output on address change, and on clock down. | ||
*/ | ||
}, { | ||
key: '_updateOutput', | ||
value: function _updateOutput() { | ||
var address = this.getInputPins()[2].getValue(); | ||
@@ -152,0 +214,0 @@ this.getOutputPins()[0].setValue(this._storage[address]); |
@@ -25,3 +25,69 @@ /** | ||
var TRUTH_TABLE = int16Table([{ $clock: -0, in: 0, load: 0, address: 0, out: 0 }, { $clock: +0, in: 21, load: 1, address: 0, out: 0 }, { $clock: -1, in: 1, load: 0, address: 0, out: 21 }, { $clock: +1, in: 21, load: 0, address: 0, out: 21 }, { $clock: -2, in: 21, load: 0, address: 0, out: 21 }, { $clock: +2, in: 53781, load: 1, address: 2, out: 21 }, { $clock: -3, in: 53781, load: 0, address: 2, out: 53781 }, { $clock: +3, in: 65535, load: 1, address: 16383, out: 53781 }, { $clock: -4, in: 0, load: 1, address: 16383, out: 65535 }, { $clock: +4, in: 0, load: 1, address: 16383, out: 65535 }, { $clock: -5, in: 0, load: 0, address: 16383, out: 0 }]); | ||
var TRUTH_TABLE = int16Table([{ | ||
$clock: -0, | ||
in: 0, | ||
load: 0, | ||
address: 0, | ||
out: 0 | ||
}, { | ||
$clock: +0, | ||
in: 21, | ||
load: 1, | ||
address: 0, | ||
out: 0 | ||
}, { | ||
$clock: -1, | ||
in: 1, | ||
load: 0, | ||
address: 0, | ||
out: 21 | ||
}, { | ||
$clock: +1, | ||
in: 21, | ||
load: 0, | ||
address: 0, | ||
out: 21 | ||
}, { | ||
$clock: -2, | ||
in: 21, | ||
load: 0, | ||
address: 0, | ||
out: 21 | ||
}, { | ||
$clock: +2, | ||
in: 53781, | ||
load: 1, | ||
address: 2, | ||
out: 0 | ||
}, { | ||
$clock: -3, | ||
in: 53781, | ||
load: 0, | ||
address: 2, | ||
out: 53781 | ||
}, { | ||
$clock: +3, | ||
in: 65535, | ||
load: 1, | ||
address: 16383, | ||
out: 0 | ||
}, { | ||
$clock: -4, | ||
in: 0, | ||
load: 1, | ||
address: 16383, | ||
out: 65535 | ||
}, { | ||
$clock: +4, | ||
in: 0, | ||
load: 1, | ||
address: 16383, | ||
out: 65535 | ||
}, { | ||
$clock: -5, | ||
in: 0, | ||
load: 0, | ||
address: 16383, | ||
out: 0 | ||
}]); | ||
@@ -28,0 +94,0 @@ /** |
@@ -25,3 +25,69 @@ /** | ||
var TRUTH_TABLE = int16Table([{ $clock: -0, in: 0, load: 0, address: 0, out: 0 }, { $clock: +0, in: 21, load: 1, address: 0, out: 0 }, { $clock: -1, in: 1, load: 0, address: 0, out: 21 }, { $clock: +1, in: 21, load: 0, address: 0, out: 21 }, { $clock: -2, in: 21, load: 0, address: 0, out: 21 }, { $clock: +2, in: 53781, load: 1, address: 2, out: 21 }, { $clock: -3, in: 53781, load: 0, address: 2, out: 53781 }, { $clock: +3, in: 65535, load: 1, address: 4095, out: 53781 }, { $clock: -4, in: 0, load: 1, address: 4095, out: 65535 }, { $clock: +4, in: 0, load: 1, address: 4095, out: 65535 }, { $clock: -5, in: 0, load: 0, address: 4095, out: 0 }]); | ||
var TRUTH_TABLE = int16Table([{ | ||
$clock: -0, | ||
in: 0, | ||
load: 0, | ||
address: 0, | ||
out: 0 | ||
}, { | ||
$clock: +0, | ||
in: 21, | ||
load: 1, | ||
address: 0, | ||
out: 0 | ||
}, { | ||
$clock: -1, | ||
in: 1, | ||
load: 0, | ||
address: 0, | ||
out: 21 | ||
}, { | ||
$clock: +1, | ||
in: 21, | ||
load: 0, | ||
address: 0, | ||
out: 21 | ||
}, { | ||
$clock: -2, | ||
in: 21, | ||
load: 0, | ||
address: 0, | ||
out: 21 | ||
}, { | ||
$clock: +2, | ||
in: 53781, | ||
load: 1, | ||
address: 2, | ||
out: 0 | ||
}, { | ||
$clock: -3, | ||
in: 53781, | ||
load: 0, | ||
address: 2, | ||
out: 53781 | ||
}, { | ||
$clock: +3, | ||
in: 65535, | ||
load: 1, | ||
address: 4095, | ||
out: 0 | ||
}, { | ||
$clock: -4, | ||
in: 0, | ||
load: 1, | ||
address: 4095, | ||
out: 65535 | ||
}, { | ||
$clock: +4, | ||
in: 0, | ||
load: 1, | ||
address: 4095, | ||
out: 65535 | ||
}, { | ||
$clock: -5, | ||
in: 0, | ||
load: 0, | ||
address: 4095, | ||
out: 0 | ||
}]); | ||
@@ -28,0 +94,0 @@ /** |
@@ -25,3 +25,69 @@ /** | ||
var TRUTH_TABLE = int16Table([{ $clock: -0, in: 0, load: 0, address: 0, out: 0 }, { $clock: +0, in: 21, load: 1, address: 0, out: 0 }, { $clock: -1, in: 1, load: 0, address: 0, out: 21 }, { $clock: +1, in: 21, load: 0, address: 0, out: 21 }, { $clock: -2, in: 21, load: 0, address: 0, out: 21 }, { $clock: +2, in: 53781, load: 1, address: 2, out: 21 }, { $clock: -3, in: 53781, load: 0, address: 2, out: 53781 }, { $clock: +3, in: 65535, load: 1, address: 511, out: 53781 }, { $clock: -4, in: 0, load: 1, address: 511, out: 65535 }, { $clock: +4, in: 0, load: 1, address: 511, out: 65535 }, { $clock: -5, in: 0, load: 0, address: 511, out: 0 }]); | ||
var TRUTH_TABLE = int16Table([{ | ||
$clock: -0, | ||
in: 0, | ||
load: 0, | ||
address: 0, | ||
out: 0 | ||
}, { | ||
$clock: +0, | ||
in: 21, | ||
load: 1, | ||
address: 0, | ||
out: 0 | ||
}, { | ||
$clock: -1, | ||
in: 1, | ||
load: 0, | ||
address: 0, | ||
out: 21 | ||
}, { | ||
$clock: +1, | ||
in: 21, | ||
load: 0, | ||
address: 0, | ||
out: 21 | ||
}, { | ||
$clock: -2, | ||
in: 21, | ||
load: 0, | ||
address: 0, | ||
out: 21 | ||
}, { | ||
$clock: +2, | ||
in: 53781, | ||
load: 1, | ||
address: 2, | ||
out: 0 | ||
}, { | ||
$clock: -3, | ||
in: 53781, | ||
load: 0, | ||
address: 2, | ||
out: 53781 | ||
}, { | ||
$clock: +3, | ||
in: 65535, | ||
load: 1, | ||
address: 511, | ||
out: 0 | ||
}, { | ||
$clock: -4, | ||
in: 0, | ||
load: 1, | ||
address: 511, | ||
out: 65535 | ||
}, { | ||
$clock: +4, | ||
in: 0, | ||
load: 1, | ||
address: 511, | ||
out: 65535 | ||
}, { | ||
$clock: -5, | ||
in: 0, | ||
load: 0, | ||
address: 511, | ||
out: 0 | ||
}]); | ||
@@ -28,0 +94,0 @@ /** |
@@ -25,3 +25,69 @@ /** | ||
var TRUTH_TABLE = int16Table([{ $clock: -0, in: 0, load: 0, address: 0, out: 0 }, { $clock: +0, in: 21, load: 1, address: 0, out: 0 }, { $clock: -1, in: 1, load: 0, address: 0, out: 21 }, { $clock: +1, in: 21, load: 0, address: 0, out: 21 }, { $clock: -2, in: 21, load: 0, address: 0, out: 21 }, { $clock: +2, in: 53781, load: 1, address: 2, out: 21 }, { $clock: -3, in: 53781, load: 0, address: 2, out: 53781 }, { $clock: +3, in: 65535, load: 1, address: 63, out: 53781 }, { $clock: -4, in: 0, load: 1, address: 63, out: 65535 }, { $clock: +4, in: 0, load: 1, address: 63, out: 65535 }, { $clock: -5, in: 0, load: 0, address: 63, out: 0 }]); | ||
var TRUTH_TABLE = int16Table([{ | ||
$clock: -0, | ||
in: 0, | ||
load: 0, | ||
address: 0, | ||
out: 0 | ||
}, { | ||
$clock: +0, | ||
in: 21, | ||
load: 1, | ||
address: 0, | ||
out: 0 | ||
}, { | ||
$clock: -1, | ||
in: 1, | ||
load: 0, | ||
address: 0, | ||
out: 21 | ||
}, { | ||
$clock: +1, | ||
in: 21, | ||
load: 0, | ||
address: 0, | ||
out: 21 | ||
}, { | ||
$clock: -2, | ||
in: 21, | ||
load: 0, | ||
address: 0, | ||
out: 21 | ||
}, { | ||
$clock: +2, | ||
in: 53781, | ||
load: 1, | ||
address: 2, | ||
out: 0 | ||
}, { | ||
$clock: -3, | ||
in: 53781, | ||
load: 0, | ||
address: 2, | ||
out: 53781 | ||
}, { | ||
$clock: +3, | ||
in: 65535, | ||
load: 1, | ||
address: 63, | ||
out: 0 | ||
}, { | ||
$clock: -4, | ||
in: 0, | ||
load: 1, | ||
address: 63, | ||
out: 65535 | ||
}, { | ||
$clock: +4, | ||
in: 0, | ||
load: 1, | ||
address: 63, | ||
out: 65535 | ||
}, { | ||
$clock: -5, | ||
in: 0, | ||
load: 0, | ||
address: 63, | ||
out: 0 | ||
}]); | ||
@@ -28,0 +94,0 @@ /** |
@@ -25,3 +25,69 @@ /** | ||
var TRUTH_TABLE = int16Table([{ $clock: -0, in: 0, load: 0, address: 0, out: 0 }, { $clock: +0, in: 21, load: 1, address: 0, out: 0 }, { $clock: -1, in: 1, load: 0, address: 0, out: 21 }, { $clock: +1, in: 21, load: 0, address: 0, out: 21 }, { $clock: -2, in: 21, load: 0, address: 0, out: 21 }, { $clock: +2, in: 53781, load: 1, address: 2, out: 21 }, { $clock: -3, in: 53781, load: 0, address: 2, out: 53781 }, { $clock: +3, in: 65535, load: 1, address: 3, out: 53781 }, { $clock: -4, in: 0, load: 1, address: 3, out: 65535 }, { $clock: +4, in: 0, load: 1, address: 3, out: 65535 }, { $clock: -5, in: 0, load: 0, address: 3, out: 0 }]); | ||
var TRUTH_TABLE = int16Table([{ | ||
$clock: -0, | ||
in: 0, | ||
load: 0, | ||
address: 0, | ||
out: 0 | ||
}, { | ||
$clock: +0, | ||
in: 21, | ||
load: 1, | ||
address: 0, | ||
out: 0 | ||
}, { | ||
$clock: -1, | ||
in: 1, | ||
load: 0, | ||
address: 0, | ||
out: 21 | ||
}, { | ||
$clock: +1, | ||
in: 21, | ||
load: 0, | ||
address: 0, | ||
out: 21 | ||
}, { | ||
$clock: -2, | ||
in: 21, | ||
load: 0, | ||
address: 0, | ||
out: 21 | ||
}, { | ||
$clock: +2, | ||
in: 53781, | ||
load: 1, | ||
address: 2, | ||
out: 0 | ||
}, { | ||
$clock: -3, | ||
in: 53781, | ||
load: 0, | ||
address: 2, | ||
out: 53781 | ||
}, { | ||
$clock: +3, | ||
in: 65535, | ||
load: 1, | ||
address: 3, | ||
out: 0 | ||
}, { | ||
$clock: -4, | ||
in: 0, | ||
load: 1, | ||
address: 3, | ||
out: 65535 | ||
}, { | ||
$clock: +4, | ||
in: 0, | ||
load: 1, | ||
address: 3, | ||
out: 65535 | ||
}, { | ||
$clock: -5, | ||
in: 0, | ||
load: 0, | ||
address: 3, | ||
out: 0 | ||
}]); | ||
@@ -28,0 +94,0 @@ /** |
@@ -44,3 +44,5 @@ /** | ||
_ref$ast = _ref.ast, | ||
ast = _ref$ast === undefined ? null : _ref$ast; | ||
ast = _ref$ast === undefined ? null : _ref$ast, | ||
_ref$manualClock = _ref.manualClock, | ||
manualClock = _ref$manualClock === undefined ? false : _ref$manualClock; | ||
@@ -52,3 +54,4 @@ _classCallCheck(this, CompositeGate); | ||
inputPins: inputPins, | ||
outputPins: outputPins | ||
outputPins: outputPins, | ||
manualClock: manualClock | ||
})); | ||
@@ -147,5 +150,3 @@ | ||
if (part.getClass().isClocked()) { | ||
part.tick(); | ||
} | ||
part.tick(); | ||
} | ||
@@ -188,5 +189,3 @@ } catch (err) { | ||
if (part.getClass().isClocked()) { | ||
part.tock(); | ||
} | ||
part.tock(); | ||
} | ||
@@ -193,0 +192,0 @@ } catch (err) { |
@@ -45,24 +45,15 @@ /** | ||
*/ | ||
function Gate() { | ||
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; | ||
function Gate(_ref) { | ||
var _ref$name = _ref.name, | ||
name = _ref$name === undefined ? null : _ref$name, | ||
inputPins = _ref.inputPins, | ||
outputPins = _ref.outputPins, | ||
_ref$manualClock = _ref.manualClock, | ||
manualClock = _ref$manualClock === undefined ? false : _ref$manualClock; | ||
_classCallCheck(this, Gate); | ||
// Infer name from the class if not passed explicitly. | ||
var _this = _possibleConstructorReturn(this, (Gate.__proto__ || Object.getPrototypeOf(Gate)).call(this)); | ||
if (!options) { | ||
var _ret; | ||
return _ret = _this.getClass().defaultFromSpec(), _possibleConstructorReturn(_this, _ret); | ||
} | ||
var _options$name = options.name, | ||
name = _options$name === undefined ? null : _options$name, | ||
_options$inputPins = options.inputPins, | ||
inputPins = _options$inputPins === undefined ? [] : _options$inputPins, | ||
_options$outputPins = options.outputPins, | ||
outputPins = _options$outputPins === undefined ? [] : _options$outputPins; | ||
// Infer name from the class if not passed explicitly. | ||
if (!name) { | ||
@@ -85,4 +76,5 @@ name = _this.getClass().Spec.name; | ||
// Subscribe to the clock events for clocked gates. | ||
if (_this.getClass().isClocked()) { | ||
// Subscribe to the clock events for clocked gates, unless | ||
// `manualClock` is set (for part gates used in composite gates). | ||
if (_this.getClass().isClocked() && !manualClock) { | ||
SystemClock.on('tick', function () { | ||
@@ -279,5 +271,5 @@ return _this.tick(); | ||
value: function generateTruthTable() { | ||
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, | ||
_ref$enforceRandom = _ref.enforceRandom, | ||
enforceRandom = _ref$enforceRandom === undefined ? false : _ref$enforceRandom; | ||
var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, | ||
_ref2$enforceRandom = _ref2.enforceRandom, | ||
enforceRandom = _ref2$enforceRandom === undefined ? false : _ref2$enforceRandom; | ||
@@ -491,3 +483,3 @@ var GateClass = this.getClass(); | ||
this.eval(); | ||
this.clockUp(this.getPin(Pin.CLOCK).getValue()); | ||
this.clockUp(); | ||
return this; | ||
@@ -506,3 +498,3 @@ } | ||
value: function tock() { | ||
this.clockDown(this.getPin(Pin.CLOCK).getValue()); | ||
this.clockDown(); | ||
this.eval(); | ||
@@ -525,2 +517,4 @@ return this; | ||
value: function defaultFromSpec() { | ||
var extraOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; | ||
var _validateSpec = this.validateSpec(this.Spec), | ||
@@ -534,6 +528,6 @@ inputPins = _validateSpec.inputPins, | ||
return new this({ | ||
return new this(Object.assign({ | ||
inputPins: inputPins.map(toPin), | ||
outputPins: outputPins.map(toPin) | ||
}); | ||
}, extraOptions)); | ||
} | ||
@@ -606,14 +600,14 @@ }, { | ||
key: 'printTruthTable', | ||
value: function printTruthTable(_ref2) { | ||
value: function printTruthTable(_ref3) { | ||
var _this5 = this; | ||
var table = _ref2.table, | ||
_ref2$columns = _ref2.columns, | ||
columns = _ref2$columns === undefined ? [] : _ref2$columns, | ||
_ref2$formatRadix = _ref2.formatRadix, | ||
formatRadix = _ref2$formatRadix === undefined ? 2 : _ref2$formatRadix, | ||
_ref2$formatStringLen = _ref2.formatStringLengh, | ||
formatStringLengh = _ref2$formatStringLen === undefined ? 16 : _ref2$formatStringLen, | ||
_ref2$transformValue = _ref2.transformValue, | ||
transformValue = _ref2$transformValue === undefined ? null : _ref2$transformValue; | ||
var table = _ref3.table, | ||
_ref3$columns = _ref3.columns, | ||
columns = _ref3$columns === undefined ? [] : _ref3$columns, | ||
_ref3$formatRadix = _ref3.formatRadix, | ||
formatRadix = _ref3$formatRadix === undefined ? 2 : _ref3$formatRadix, | ||
_ref3$formatStringLen = _ref3.formatStringLengh, | ||
formatStringLengh = _ref3$formatStringLen === undefined ? 16 : _ref3$formatStringLen, | ||
_ref3$transformValue = _ref3.transformValue, | ||
transformValue = _ref3$transformValue === undefined ? null : _ref3$transformValue; | ||
@@ -620,0 +614,0 @@ var spec = this.validateSpec(this.Spec); |
@@ -333,3 +333,7 @@ /** | ||
// Instance. | ||
var partGateInstance = PartGateClass.defaultFromSpec(); | ||
var partGateInstance = PartGateClass.defaultFromSpec({ | ||
// Part pins are manually updated for `tick/tock` events | ||
// from the main parent gate. | ||
manualClock: true | ||
}); | ||
@@ -336,0 +340,0 @@ // Handle arguments. |
@@ -474,3 +474,3 @@ /** | ||
// a[1] | ||
if (node.index) { | ||
if (node.hasOwnProperty('index')) { | ||
return pin.getValueAt(node.index); | ||
@@ -488,3 +488,3 @@ } | ||
// a[1] | ||
if (node.index) { | ||
if (node.hasOwnProperty('index')) { | ||
return pin.setValueAt(node.index, value.value); | ||
@@ -491,0 +491,0 @@ } |
{ | ||
"name": "hdl-js", | ||
"version": "0.0.65", | ||
"version": "0.0.66", | ||
"license": "MIT", | ||
@@ -5,0 +5,0 @@ "description": "Hardware definition language (HDL) and Hardware simulator", |
@@ -912,3 +912,3 @@ # hdl-js | ||
All gates known their own specification, so we can omit passing explicit pins info, and use a constructor without parameters, or create gates via the `defaultFromSpec` method: | ||
All gates known their own specification, so we can omit passing explicit pins info, and use `defaultFromSpec` method: | ||
@@ -923,19 +923,9 @@ ```js | ||
const and1 = new And(); | ||
const and = And.defaultFromSpec(); | ||
and1 | ||
.setPinValues({a: 1, b: 1}) | ||
.eval(); | ||
console.log(and1.getPin('out').getValue()); // 1 | ||
// The same as: | ||
const and2 = And.defaultFromSpec(); | ||
and2 | ||
and | ||
.setPinValues({a: 1, b: 0}) | ||
.eval(); | ||
console.log(and2.getPin('out').getValue()); // 0 | ||
console.log(and.getPin('out').getValue()); // 0 | ||
``` | ||
@@ -1201,2 +1191,21 @@ | ||
It is also possible to test the whole directory, passing the directory name instead of an individual `.tst` file. In this case, the directory is scanned for all `.tst` files, which are executed in sequence: | ||
``` | ||
hdl-js --script src/emulator/hardware/scripting/examples/n2t/03/ | ||
``` | ||
Result: | ||
``` | ||
[PASS] Bit.tst | ||
[PASS] PC.tst | ||
[PASS] RAM16K.tst | ||
[PASS] RAM4K.tst | ||
[PASS] RAM512.tst | ||
[PASS] RAM64.tst | ||
[PASS] RAM8.tst | ||
[PASS] Register.tst | ||
``` | ||
#### Script controller commands | ||
@@ -1203,0 +1212,0 @@ |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Uses eval
Supply chain riskPackage uses dynamic code execution (e.g., eval()), which is a dangerous practice. This can prevent the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
367932
7756
2048
2