mz700-js
Version:
MZ-700 Full JavaScript Emulator
74 lines (69 loc) • 2.28 kB
JavaScript
var MZ_TapeHeader = require('../js/lib/mz-tape-header.js');
var changeExt = require('../js/lib/change-ext.js');
var fs = require('fs');
var getPackageJson = require("./lib/get-package-json");
var npmInfo = getPackageJson(__dirname + "/..");
var Getopt = require('node-getopt');
var getopt = new Getopt([
['a', 'loading-address=ADDR', 'set loading address'],
['e', 'execution-address=ADDR', 'set execution address'],
['o', 'output-file=FILENAME', 'filename to output'],
['h', 'help', 'display this help'],
['v', 'version', 'show version']
]);
var cli = getopt.parseSystem();
var description = "A MZT header generator. -- " + npmInfo.name + "@" + npmInfo.version;
getopt.setHelp(
"Usage: bin2mzt [OPTION] filename\n" +
description + "\n" +
"\n" +
"[[OPTIONS]]\n" +
"\n" +
"Installation: npm install -g mz700-js\n" +
"Repository: https://github.com/takamin/mz700-js");
if(cli.options.help) {
getopt.showHelp();
process.exit(0);
}
if(cli.options.version) {
console.log(description);
process.exit(0);
}
var args = require("hash-arg").get(["input_filename"], cli.argv);
if(cli.argv.length < 1) {
console.error('error: no input file');
process.exit(-1);
}
var input_filename = args.input_filename;
var output_filename = null;
if('output-file' in cli.options) {
output_filename = cli.options['output-file'];
} else {
output_filename = changeExt(input_filename, ".mzt");
}
//
// MZT-Header
//
var mzt_header = MZ_TapeHeader.createNew();
var load_addr = 0;
var exec_addr = 0;
if('loading-address' in cli.options) {
load_addr = parseInt(cli.options['loading-address'], 0);
exec_addr = load_addr;
}
if('execution-address' in cli.options) {
exec_addr = parseInt(cli.options['execution-address'], 0);
}
fs.readFile(input_filename, function(err, data) {
if(err) {
throw err;
}
const buffer = Buffer.from(data);
mzt_header.setFilename(output_filename);
mzt_header.setAddrLoad(load_addr);
mzt_header.setAddrExec(exec_addr);
mzt_header.setFilesize(buffer.length);
fs.writeFileSync(output_filename,
Buffer.concat([Buffer.from(mzt_header.buffer), buffer]));
});