diff --git a/lib/compilers/z88dk.ts b/lib/compilers/z88dk.ts index 9ee34b309..1899be0d9 100644 --- a/lib/compilers/z88dk.ts +++ b/lib/compilers/z88dk.ts @@ -106,6 +106,10 @@ export class z88dkCompiler extends BaseCompiler { return `${this.outputFilebase}.tap`; } + getSmsfilename() { + return `${this.outputFilebase}.sms`; + } + override async objdump(outputFilename, result: any, maxSize: number, intelAsm, demangle, filters: ParseFilters) { outputFilename = this.getObjdumpOutputFilename(outputFilename); @@ -154,6 +158,13 @@ export class z88dkCompiler extends BaseCompiler { const binary_base64 = file_buffer.toString('base64'); result.speccytape = binary_base64; } + + const smsFilepath = path.join(result.dirPath, this.getSmsfilename()); + if (await utils.fileExists(smsFilepath)) { + const file_buffer = await fs.readFile(smsFilepath); + const binary_base64 = file_buffer.toString('base64'); + result.miraclesms = binary_base64; + } } return result; diff --git a/static/panes/compiler.js b/static/panes/compiler.js index 0fbfcc896..2606312fa 100644 --- a/static/panes/compiler.js +++ b/static/panes/compiler.js @@ -1419,9 +1419,35 @@ Compiler.prototype.postCompilationResult = function (request, result, wasCmake) this.emulateBbcDisk(result.bbcdiskimage); } else if (result.speccytape) { this.emulateSpeccyTape(result.speccytape); + } else if (result.miraclesms) { + this.emulateMiracleSMS(result.miraclesms); } }; +Compiler.prototype.emulateMiracleSMS = function (image) { + var dialog = $('#miracleemu'); + + this.alertSystem.notify( + 'Click ' + + 'here' + + ' to emulate', + { + group: 'emulation', + collapseSimilar: true, + dismissTime: 10000, + onBeforeShow: function (elem) { + elem.find('#miracle_emulink').on('click', function () { + dialog.modal(); + + var emuwindow = dialog.find('#miracleemuframe')[0].contentWindow; + var tmstr = Date.now(); + emuwindow.location = 'https://xania.org/miracle/miracle.html?' + tmstr + '#b64sms=' + image; + }); + }, + } + ); +}; + Compiler.prototype.emulateSpeccyTape = function (image) { var dialog = $('#jsspeccyemu'); diff --git a/views/popups/miracleemu.pug b/views/popups/miracleemu.pug new file mode 100644 index 000000000..89f9c550f --- /dev/null +++ b/views/popups/miracleemu.pug @@ -0,0 +1,5 @@ +#miracleemu.modal.fade.gl_keep(tabindex="-1" role="dialog") + .modal-dialog.modal-xl + .modal-content + .modal-body + iframe#miracleemuframe(src="about:blank" width="1024" height="600") diff --git a/views/popups/popups.pug b/views/popups/popups.pug index 53634ff29..301006330 100644 --- a/views/popups/popups.pug +++ b/views/popups/popups.pug @@ -24,4 +24,6 @@ include jsbeebemu include jsspeccyemu +include miracleemu + include site-template-loader