started adding back 6809 support (xasm)

This commit is contained in:
Steven Hugg 2019-03-20 21:38:53 -04:00
parent 7e2bf32a6f
commit 61290e09f8
7 changed files with 66 additions and 51 deletions

View File

@ -98,7 +98,7 @@ TODO:
- better undo/diff for mistakes?
- get rid of "illegal PC" instruction, replace with status msg
- ide bug/feature visualizer for sponsors
- optimization flags for sdcc (oldralloc)
WEB WORKER FORMAT

View File

@ -349,7 +349,7 @@ if (window.location.host.endsWith('8bitworkshop.com')) {
-->
<script src="src/cpu/z80fast.js"></script>
<script src="jsnes/jsnes.min.js"></script>
<!--<script src="src/cpu/6809.js"></script>-->
<script src="src/cpu/6809.js"></script>
<!--<script src="jsnes/lib/dynamicaudio-min.js" type="text/javascript" charset="utf-8"></script>-->
<script src="FileSaver.js/FileSaver.min.js"></script>
<script src="localForage/dist/localforage.nopromises.js"></script>

View File

@ -644,7 +644,7 @@ export abstract class BaseZ80Platform extends BaseDebugPlatform {
}
}
export function getToolForFilename_z80(fn) {
export function getToolForFilename_z80(fn) : string {
if (fn.endsWith(".c")) return "sdcc";
if (fn.endsWith(".h")) return "sdcc";
if (fn.endsWith(".s")) return "sdasz80";
@ -700,8 +700,18 @@ export abstract class Base6809Platform extends BaseZ80Platform {
// TODO: don't create new CPU
return new CPU6809().disasm(read(pc), read(pc+1), read(pc+2), read(pc+3), read(pc+4), pc);
}
getDefaultExtension() { return ".asm"; };
getDefaultExtension() : string { return ".asm"; };
//this.getOpcodeMetadata = function() { }
getToolForFilename = () => { return "xasm6809"; }
getDebugCategories() {
return ['CPU','Stack'];
}
getDebugInfo(category:string, state:EmuState) : string {
switch (category) {
case 'CPU': return cpuStateToLongString_6809(state.c);
default: return super.getDebugInfo(category, state);
}
}
}
/// MAME SUPPORT

View File

@ -50,6 +50,7 @@ var TOOL_TO_SOURCE_STYLE = {
'zmac': 'z80',
'bataribasic': 'bataribasic',
'markdown': 'markdown',
'xasm6809': 'z80'
}
function newWorker() : Worker {

View File

@ -274,48 +274,3 @@ function compileSCCZ80(code, platform) {
return result;
}
function assembleXASM6809(code, platform) {
load("xasm6809");
var origin = 0; // TODO: configurable
var alst = "";
var lasterror = null;
var errors = [];
function match_fn(s) {
alst += s;
alst += "\n";
if (lasterror) {
var line = parseInt(s.slice(0,5));
errors.push({
line:line,
msg:lasterror
});
lasterror = null;
}
else if (s.startsWith("***** ")) {
lasterror = s.slice(6);
}
}
var Module = xasm6809({
noInitialRun:true,
//logReadFiles:true,
print:match_fn,
printErr:print_fn
});
var FS = Module['FS'];
//setupFS(FS);
FS.writeFile("main.asm", code);
Module.callMain(["-c", "-l", "-s", "-y", "-o=main.bin", "main.asm"]);
if (errors.length)
return {errors:errors};
var aout = FS.readFile("main.bin", {encoding:'binary'});
// 00001 0000 [ 2] 1048 asld
var asmlines = parseListing(alst, /^\s*([0-9A-F]+)\s+([0-9A-F]+)\s+\[([0-9 ]+)\]\s+(\d+) (.*)/i, 1, 2, 4);
// TODO
return {
output:aout,
errors:errors,
lines:asmlines,
intermediate:{listing:alst},
};
}

View File

@ -1805,6 +1805,55 @@ function translateShowdown(step:BuildStep) {
};
}
// TODO
function assembleXASM6809(step:BuildStep) {
load("xasm6809");
var origin = 0; // TODO: configurable
var alst = "";
var lasterror = null;
var errors = [];
function match_fn(s) {
alst += s;
alst += "\n";
if (lasterror) {
var line = parseInt(s.slice(0,5));
errors.push({
line:line,
msg:lasterror
});
lasterror = null;
}
else if (s.startsWith("***** ")) {
lasterror = s.slice(6);
}
}
var Module = emglobal.xasm6809({
noInitialRun:true,
//logReadFiles:true,
print:match_fn,
printErr:print_fn
});
var FS = Module['FS'];
//setupFS(FS);
var code = getWorkFileAsString(step.path);
FS.writeFile("main.asm", code);
Module.callMain(["-c", "-l", "-s", "-y", "-o=main.bin", "main.asm"]);
if (errors.length)
return {errors:errors};
var aout = FS.readFile("main.bin", {encoding:'binary'});
putWorkFile('main.bin', aout);
// 00001 0000 [ 2] 1048 asld
var asmlines = parseListing(alst, /^\s*([0-9A-F]+)\s+([0-9A-F]+)\s+\[([0-9 ]+)\]\s+(\d+) (.*)/i, 1, 2, 4);
// TODO
return {
output:aout,
errors:errors,
lines:asmlines,
intermediate:{listing:alst},
};
}
////////////////////////////
var TOOLS = {
@ -1820,7 +1869,7 @@ var TOOLS = {
'sdasz80': assembleSDASZ80,
'sdldz80': linkSDLDZ80,
'sdcc': compileSDCC,
//'xasm6809': assembleXASM6809,
'xasm6809': assembleXASM6809,
//'naken': assembleNAKEN,
'verilator': compileVerilator,
'yosys': compileYosys,

2
tss

@ -1 +1 @@
Subproject commit 61a1691a1de05dca3b694bf603db49ffbaf572cf
Subproject commit 5b5ee67fc06956bc7dce51726e98812d2d897eaa