aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/compilers/z88dk.ts13
-rw-r--r--static/panes/compiler.js26
-rw-r--r--static/panes/editor.js7
-rw-r--r--views/popups/jsspeccyemu.pug5
-rw-r--r--views/popups/popups.pug2
5 files changed, 48 insertions, 5 deletions
diff --git a/lib/compilers/z88dk.ts b/lib/compilers/z88dk.ts
index f09b4a0f6..b40560a35 100644
--- a/lib/compilers/z88dk.ts
+++ b/lib/compilers/z88dk.ts
@@ -24,6 +24,8 @@
import path from 'path';
+import fs from 'fs-extra';
+
import {ExecutionOptions} from '../../types/compilation/compilation.interfaces';
import {ParseFilters} from '../../types/features/filters.interfaces';
import {BaseCompiler} from '../base-compiler';
@@ -100,6 +102,10 @@ export class z88dkCompiler extends BaseCompiler {
return defaultOutputFilename;
}
+ getTapefilename() {
+ return `${this.outputFilebase}.tap`;
+ }
+
override async objdump(outputFilename, result: any, maxSize: number, intelAsm, demangle, filters: ParseFilters) {
outputFilename = this.getObjdumpOutputFilename(outputFilename);
@@ -141,6 +147,13 @@ export class z88dkCompiler extends BaseCompiler {
}
}
+ if (result.code === 0 && filters.binary) {
+ const tapeFilepath = path.join(result.dirPath, this.getTapefilename());
+ const file_buffer = await fs.readFile(tapeFilepath);
+ const binary_base64 = file_buffer.toString('base64');
+ result.speccytape = binary_base64;
+ }
+
return result;
}
}
diff --git a/static/panes/compiler.js b/static/panes/compiler.js
index 6fd4ce359..0fbfcc896 100644
--- a/static/panes/compiler.js
+++ b/static/panes/compiler.js
@@ -1417,9 +1417,35 @@ Compiler.prototype.postCompilationResult = function (request, result, wasCmake)
if (result.bbcdiskimage) {
this.emulateBbcDisk(result.bbcdiskimage);
+ } else if (result.speccytape) {
+ this.emulateSpeccyTape(result.speccytape);
}
};
+Compiler.prototype.emulateSpeccyTape = function (image) {
+ var dialog = $('#jsspeccyemu');
+
+ this.alertSystem.notify(
+ 'Click ' +
+ '<a target="_blank" id="jsspeccy_emulink" style="cursor:pointer;" click="javascript:;">here</a>' +
+ ' to emulate',
+ {
+ group: 'emulation',
+ collapseSimilar: true,
+ dismissTime: 10000,
+ onBeforeShow: function (elem) {
+ elem.find('#jsspeccy_emulink').on('click', function () {
+ dialog.modal();
+
+ var emuwindow = dialog.find('#speccyemuframe')[0].contentWindow;
+ var tmstr = Date.now();
+ emuwindow.location = 'https://static.ce-cdn.net/jsspeccy/index.html?' + tmstr + '#b64tape=' + image;
+ });
+ },
+ }
+ );
+};
+
Compiler.prototype.emulateBbcDisk = function (bbcdiskimage) {
var dialog = $('#jsbeebemu');
diff --git a/static/panes/editor.js b/static/panes/editor.js
index efc79124f..1a76a7434 100644
--- a/static/panes/editor.js
+++ b/static/panes/editor.js
@@ -1479,7 +1479,6 @@ Editor.prototype.setDecorationTags = function (widgets, ownerId) {
this
);
-
this.updateDecorations();
};
@@ -1491,7 +1490,6 @@ Editor.prototype.setQuickFixes = function (fixes) {
} else {
quickFixesHandler.unregister(this.id);
}
-
};
Editor.prototype.onCompileResponse = function (compilerId, compiler, result) {
@@ -1499,7 +1497,7 @@ Editor.prototype.onCompileResponse = function (compilerId, compiler, result) {
this.busyCompilers[compilerId] = false;
- var collectedOutput = this.collectOutputWidgets(this.getAllOutputAndErrors(result, compiler.name, compilerId));
+ var collectedOutput = this.collectOutputWidgets(this.getAllOutputAndErrors(result, compiler.name, compilerId));
this.setDecorationTags(collectedOutput.widgets, compilerId);
this.setQuickFixes(collectedOutput.fixes);
@@ -1519,7 +1517,7 @@ Editor.prototype.onCompileResponse = function (compilerId, compiler, result) {
this.numberUsedLines();
};
-Editor.prototype.onExecuteResponse = function (executorId, compiler, result) {
+Editor.prototype.onExecuteResponse = function (executorId, compiler, result) {
var output = this.getAllOutputAndErrors(result, compiler.name, 'Execution ' + executorId);
if (result.buildResult) {
output = output.concat(this.getAllOutputAndErrors(result.buildResult, compiler.name, 'Executor ' + executorId));
@@ -1529,7 +1527,6 @@ Editor.prototype.onExecuteResponse = function (executorId, compiler, result) {
this.numberUsedLines();
};
-
Editor.prototype.onSelectLine = function (id, lineNum) {
if (Number(id) === this.id) {
this.editor.setSelection(new monaco.Selection(lineNum - 1, 0, lineNum, 0));
diff --git a/views/popups/jsspeccyemu.pug b/views/popups/jsspeccyemu.pug
new file mode 100644
index 000000000..0698fa1ad
--- /dev/null
+++ b/views/popups/jsspeccyemu.pug
@@ -0,0 +1,5 @@
+#jsspeccyemu.modal.fade.gl_keep(tabindex="-1" role="dialog")
+ .modal-dialog.modal-xl
+ .modal-content
+ .modal-body
+ iframe#speccyemuframe(src="about:blank" width="670" height="560")
diff --git a/views/popups/popups.pug b/views/popups/popups.pug
index e1c4fe9a6..53634ff29 100644
--- a/views/popups/popups.pug
+++ b/views/popups/popups.pug
@@ -22,4 +22,6 @@ include timing
include jsbeebemu
+include jsspeccyemu
+
include site-template-loader