UNPKG

fma-snes65816

Version:
117 lines (104 loc) 3.42 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); var _fma = require('fma'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var InstructionWriter = function () { function InstructionWriter() { (0, _classCallCheck3.default)(this, InstructionWriter); } (0, _createClass3.default)(InstructionWriter, null, [{ key: 'toCalculation', value: function toCalculation(number) { switch (number.getClassName()) { case 'FutureNumber': number = number.getCalculation(); break; default: throw new Error('Can not process rel8 with ' + number.getClassName()); } return number; } }, { key: 'brk', value: function brk(scope, code, opcode, p1, p2) { code.writeUInt8(opcode); code.writeUInt8(0); } }, { key: 'impl', value: function impl(scope, code, opcode, p1, p2) { code.writeUInt8(opcode); } }, { key: 'rel8', value: function rel8(scope, code, opcode, p1, p2, context) { code.writeUInt8(opcode); var number = InstructionWriter.toCalculation(p1.value); var pc = InstructionWriter.toCalculation(scope.getMember('PC').callWithParameters(context)); code.writeUInt8(new _fma.FutureNumber(new _fma.Calculation(new _fma.Calculation(number, '-', pc), '-', new _fma.StaticNumber(1)))); } }, { key: 'rel16', value: function rel16(scope, code, opcode, p1, p2) { throw new Error("TODO REL16"); } }, { key: 'mv', value: function mv(scope, code, opcode, p1, p2) { code.writeUInt8(opcode); code.writeUInt8(p2.value); code.writeUInt8(p1.value); } }, { key: 'im8', value: function im8(scope, code, opcode, p1, p2) { code.writeUInt8(opcode); code.writeUInt8(p1.value); } }, { key: 'im16', value: function im16(scope, code, opcode, p1, p2) { code.writeUInt8(opcode); code.writeUInt16(p1.value); } }, { key: 'im24', value: function im24(scope, code, opcode, p1, p2) { code.writeUInt8(opcode); code.writeUInt24(p1.value); } }, { key: 'im_a', value: function im_a(scope, code, opcode, p1, p2, context) { var size = scope.getMember('register_size_A').getMember('__value').value; if (size === 8) { InstructionWriter.im8(scope, code, opcode, p1, p2); } else if (size === 16) { InstructionWriter.im16(scope, code, opcode, p1, p2); } else { throw new Error('Invalid size for register A'); } } }, { key: 'im_xy', value: function im_xy(scope, code, opcode, p1, p2) { var size = scope.getMember('register_size_XY').getMember('__value').value; if (size === 8) { InstructionWriter.im8(scope, code, opcode, p1, p2); } else if (size === 16) { InstructionWriter.im16(scope, code, opcode, p1, p2); } else { throw new Error('Invalid size for register XY'); } } }]); return InstructionWriter; }(); exports.default = InstructionWriter; //# sourceMappingURL=InstructionWriter.js.map