diff options
-rw-r--r-- | bedrock.js | 33 |
1 files changed, 21 insertions, 12 deletions
@@ -360,7 +360,7 @@ function EmulatorElement(options) { emulator.canvas = canvas; let br = new Bedrock(emulator); br.reset(); - br.onUpdate = () => emulator.updateStatePanel(); + br.onUpdate = () => emulator.updateDOM(); emulator.showStatePanel = function() { statePanel.classList.remove('hidden'); } @@ -397,14 +397,14 @@ function EmulatorElement(options) { // Fires when the stop button is pressed. emulator.stopProgram = function() { br.stop(); - emulator.updateStatePanel(); + emulator.updateDOM(); transmissions.innerHTML = ''; emulator.hideStreamPanel(); emulator.hideScreenPanel(); currentTransmission = null; } - emulator.updateStatePanel = function() { + emulator.updateDOM = function() { function renderStack(stack) { let string = ''; for (let i=0; i<stack.p && i<stack.mem.length; i++) { @@ -428,6 +428,7 @@ function EmulatorElement(options) { } else { status.textContent = `running / ${br.cycle}`; } + emulator.flushTransmission(); } emulator.updateScreenSize = function() { @@ -446,20 +447,28 @@ function EmulatorElement(options) { // Receive an incoming byte from the local stream. emulator.receiveTransmissionByte = function(byte) { - if (!currentTransmission) { - emulator.showStreamPanel(); - let element = document.createElement('li'); - element.addEventListener('click', function() { - copyText(element.textContent); }) - currentTransmission = element; - transmissions.appendChild(element); } transmissionParser.push(byte); - currentTransmission.textContent += transmissionParser.read(); - streamPanel.scrollTop = streamPanel.scrollHeight; + } + + // Push all received bytes to the DOM. + emulator.flushTransmission = function() { + let string = transmissionParser.read(); + if (string) { + if (!currentTransmission) { + emulator.showStreamPanel(); + let element = document.createElement('li'); + element.addEventListener('click', function() { + copyText(element.textContent); }) + currentTransmission = element; + transmissions.appendChild(element); } + currentTransmission.textContent += string; + streamPanel.scrollTop = streamPanel.scrollHeight; + } } // End the current incoming transmission. emulator.endTransmission = function() { + emulator.flushTransmission(); streamPanel.scrollTop = streamPanel.scrollHeight; currentTransmission = null; |