diff options
-rw-r--r-- | lib/compilers/z88dk.ts | 13 | ||||
-rw-r--r-- | static/panes/compiler.js | 26 | ||||
-rw-r--r-- | static/panes/editor.js | 7 | ||||
-rw-r--r-- | views/popups/jsspeccyemu.pug | 5 | ||||
-rw-r--r-- | views/popups/popups.pug | 2 |
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 |