mirror of
https://github.com/sehugg/8bitworkshop.git
synced 2025-02-16 17:30:27 +00:00
finished zmac asm (.z); fixed javatari submodule tag; upgraded tsc
This commit is contained in:
parent
c7eaedf24b
commit
59469b41b8
@ -1 +1 @@
|
|||||||
Subproject commit 4cd5b798f534336d09a80e8a1fa962959f401359
|
Subproject commit bd17384fd2c6b020497e5e6a625a1b8130e39ea1
|
6
package-lock.json
generated
6
package-lock.json
generated
@ -1018,9 +1018,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"typescript": {
|
"typescript": {
|
||||||
"version": "2.9.2",
|
"version": "3.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz",
|
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.0.1.tgz",
|
||||||
"integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==",
|
"integrity": "sha512-zQIMOmC+372pC/CCVLqnQ0zSBiY7HHodU7mpQdjiZddek4GMj31I3dUJ7gAs9o65X7mnRma6OokOkc6f9jjfBg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"uuid": {
|
"uuid": {
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
"jsdom": "^12.0.0",
|
"jsdom": "^12.0.0",
|
||||||
"lzg": "^1.0.0",
|
"lzg": "^1.0.0",
|
||||||
"mocha": "^5.2.0",
|
"mocha": "^5.2.0",
|
||||||
"typescript": "^2.9.2",
|
"typescript": "^3.0.1",
|
||||||
"wavedrom-cli": "^0.5.0"
|
"wavedrom-cli": "^0.5.0"
|
||||||
},
|
},
|
||||||
"description": "8bitworkshop.com",
|
"description": "8bitworkshop.com",
|
||||||
|
@ -536,7 +536,7 @@ export function getToolForFilename_z80(fn) {
|
|||||||
if (fn.endsWith(".s")) return "sdasz80";
|
if (fn.endsWith(".s")) return "sdasz80";
|
||||||
if (fn.endsWith(".ns")) return "naken";
|
if (fn.endsWith(".ns")) return "naken";
|
||||||
if (fn.endsWith(".scc")) return "sccz80";
|
if (fn.endsWith(".scc")) return "sccz80";
|
||||||
if (fn.endsWith(".zmac")) return "zmac";
|
if (fn.endsWith(".z")) return "zmac";
|
||||||
return "zmac";
|
return "zmac";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,7 +44,8 @@ var TOOL_TO_SOURCE_STYLE = {
|
|||||||
'sdasz80': 'z80',
|
'sdasz80': 'z80',
|
||||||
'sdcc': 'text/x-csrc',
|
'sdcc': 'text/x-csrc',
|
||||||
'verilator': 'verilog',
|
'verilator': 'verilog',
|
||||||
'jsasm': 'z80'
|
'jsasm': 'z80',
|
||||||
|
'zmac': 'z80',
|
||||||
}
|
}
|
||||||
|
|
||||||
function newWorker() : Worker {
|
function newWorker() : Worker {
|
||||||
|
@ -452,10 +452,12 @@ function extractErrors(regex, strings, path) {
|
|||||||
|
|
||||||
// TODO: "of" doesn't work in MSIE
|
// TODO: "of" doesn't work in MSIE
|
||||||
|
|
||||||
function parseListing(code, lineMatch, iline, ioffset, iinsns, origin) {
|
var re_crlf = /\r?\n/;
|
||||||
|
|
||||||
|
function parseListing(code, lineMatch, iline, ioffset, iinsns) {
|
||||||
var lines = [];
|
var lines = [];
|
||||||
origin |= 0;
|
origin |= 0;
|
||||||
for (var line of code.split(/\r?\n/)) {
|
for (var line of code.split(re_crlf)) {
|
||||||
var linem = lineMatch.exec(line);
|
var linem = lineMatch.exec(line);
|
||||||
if (linem && linem[1]) {
|
if (linem && linem[1]) {
|
||||||
var linenum = parseInt(linem[iline]);
|
var linenum = parseInt(linem[iline]);
|
||||||
@ -477,7 +479,7 @@ function parseSourceLines(code, lineMatch, offsetMatch, origin) {
|
|||||||
var lines = [];
|
var lines = [];
|
||||||
var lastlinenum = 0;
|
var lastlinenum = 0;
|
||||||
origin |= 0;
|
origin |= 0;
|
||||||
for (var line of code.split(/\r?\n/)) {
|
for (var line of code.split(re_crlf)) {
|
||||||
var linem = lineMatch.exec(line);
|
var linem = lineMatch.exec(line);
|
||||||
if (linem && linem[1]) {
|
if (linem && linem[1]) {
|
||||||
lastlinenum = parseInt(linem[1]);
|
lastlinenum = parseInt(linem[1]);
|
||||||
@ -506,7 +508,7 @@ function parseDASMListing(code, unresolved, mainFilename) {
|
|||||||
var macrolines = [];
|
var macrolines = [];
|
||||||
var lastline = 0;
|
var lastline = 0;
|
||||||
var macros = {};
|
var macros = {};
|
||||||
for (var line of code.split(/\r?\n/)) {
|
for (var line of code.split(re_crlf)) {
|
||||||
var linem = lineMatch.exec(line);
|
var linem = lineMatch.exec(line);
|
||||||
if (linem && linem[1]) {
|
if (linem && linem[1]) {
|
||||||
var linenum = parseInt(linem[1]);
|
var linenum = parseInt(linem[1]);
|
||||||
@ -669,7 +671,7 @@ function parseCA65Listing(code, symbols, params, dbg) {
|
|||||||
var insnLineMatch = /^([0-9A-F]+)([r]?)\s+(\d+)\s+([0-9A-F][0-9A-F ]*[0-9A-F])\s+/;
|
var insnLineMatch = /^([0-9A-F]+)([r]?)\s+(\d+)\s+([0-9A-F][0-9A-F ]*[0-9A-F])\s+/;
|
||||||
var lines = [];
|
var lines = [];
|
||||||
var linenum = 0;
|
var linenum = 0;
|
||||||
for (var line of code.split(/\r?\n/)) {
|
for (var line of code.split(re_crlf)) {
|
||||||
linenum++;
|
linenum++;
|
||||||
var segm = segLineMatch.exec(line);
|
var segm = segLineMatch.exec(line);
|
||||||
if (segm) {
|
if (segm) {
|
||||||
@ -892,6 +894,7 @@ function parseIHX(ihx, rom_start, rom_size) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
function assembleSDASZ80(step) {
|
function assembleSDASZ80(step) {
|
||||||
@ -1361,12 +1364,13 @@ function compileYosys(step) {
|
|||||||
|
|
||||||
function assembleZMAC(step) {
|
function assembleZMAC(step) {
|
||||||
loadNative("zmac");
|
loadNative("zmac");
|
||||||
var objout, lstout, symout;
|
var hexout, lstout;
|
||||||
var errors = [];
|
var errors = [];
|
||||||
|
var params = step.params;
|
||||||
gatherFiles(step, {mainFilePath:"main.asm"});
|
gatherFiles(step, {mainFilePath:"main.asm"});
|
||||||
var binpath = "zout/" + step.prefix + ".cim";
|
var hexpath = step.prefix + ".hex";
|
||||||
var lstpath = "zout/" + step.prefix + ".lst";
|
var lstpath = step.prefix + ".lst";
|
||||||
if (staleFiles(step, [binpath, lstpath])) {
|
if (staleFiles(step, [hexpath, lstpath])) {
|
||||||
/*
|
/*
|
||||||
error1.asm(4) : 'l18d4' Undeclared
|
error1.asm(4) : 'l18d4' Undeclared
|
||||||
JP L18D4
|
JP L18D4
|
||||||
@ -1384,23 +1388,38 @@ error1.asm(11): warning: 'foobar' treated as label (instruction typo?)
|
|||||||
});
|
});
|
||||||
var FS = ZMAC['FS'];
|
var FS = ZMAC['FS'];
|
||||||
populateFiles(step, FS);
|
populateFiles(step, FS);
|
||||||
execMain(step, ZMAC, ['-z', '--oo', 'lst,cim', step.path]);
|
// TODO: don't know why CIM (hexary) doesn't work
|
||||||
|
execMain(step, ZMAC, ['-z', '--oo', 'lst,hex', step.path]);
|
||||||
if (errors.length) {
|
if (errors.length) {
|
||||||
return {errors:errors};
|
return {errors:errors};
|
||||||
}
|
}
|
||||||
objout = FS.readFile(binpath, {encoding:'utf8'});
|
hexout = FS.readFile("zout/"+hexpath, {encoding:'utf8'});
|
||||||
lstout = FS.readFile(lstpath, {encoding:'utf8'});
|
lstout = FS.readFile("zout/"+lstpath, {encoding:'utf8'});
|
||||||
putWorkFile(binpath, objout);
|
putWorkFile(hexpath, hexout);
|
||||||
putWorkFile(lstpath, lstout);
|
putWorkFile(lstpath, lstout);
|
||||||
// 230: 1739+7 017A 1600 L017A: LD D,00h
|
if (!anyTargetChanged(step, [hexpath, lstpath]))
|
||||||
var listing = parseListing(lstout, /\s*(\d+):\s*(\d+)[+](\d+)\s+([0-9a-f]+)\s+([0-9a-f]+)\s+(.+)/i, 1, 4, 5);
|
return;
|
||||||
|
// 230: 1739+7+x 017A 1600 L017A: LD D,00h
|
||||||
|
var lines = parseListing(lstout, /\s*(\d+):\s*([0-9+]+)\s+([0-9a-f]+)\s+([0-9a-f]+)\s+(.+)/i, 1, 3, 4);
|
||||||
var listings = {};
|
var listings = {};
|
||||||
listings[lstpath] = listing;
|
listings[lstpath] = {lines:lines};
|
||||||
|
// parse symbol table
|
||||||
|
var symbolmap = {};
|
||||||
|
var sympos = lstout.indexOf('Symbol Table:');
|
||||||
|
if (sympos > 0) {
|
||||||
|
var symout = lstout.slice(sympos+14);
|
||||||
|
symout.split('\n').forEach(function(l) {
|
||||||
|
var m = l.match(/(\S+)\s+([= ]*)([0-9a-f]+)/i);
|
||||||
|
if (m) {
|
||||||
|
symbolmap[m[1]] = parseInt(m[3],16);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
return {
|
return {
|
||||||
output:binpath,
|
output:parseIHX(hexout, params.rom_start||params.code_start, params.rom_size),
|
||||||
listings:listings,
|
listings:listings,
|
||||||
errors:errors,
|
errors:errors,
|
||||||
//symbolmap:symbolmap
|
symbolmap:symbolmap
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user