diff --git a/src/renderer/index.html b/src/renderer/index.html
index d18eafc..a5db04c 100644
--- a/src/renderer/index.html
+++ b/src/renderer/index.html
@@ -24,6 +24,17 @@
+
diff --git a/src/renderer/renderer.js b/src/renderer/renderer.js
index 7dcbaa9..0211528 100644
--- a/src/renderer/renderer.js
+++ b/src/renderer/renderer.js
@@ -1,6 +1,11 @@
-const BUTTONS = document.querySelector('#buttons')
+const $ = document.querySelector.bind(document)
+const $$ = document.querySelectorAll.bind(document)
+
+const BUTTONS = $('#buttons')
let cursorCaptured = false
+let floppyFile = null
+let bootFresh = false
const OPTIONS = {
win95: {
@@ -21,7 +26,11 @@ async function main (id) {
},
vga_bios: {
url: './bios/vgabios.bin'
- }
+ },
+ fda: {
+ buffer: floppyFile || undefined
+ },
+ boot_order: 0x132
}, OPTIONS[id])
// New v86 instance
@@ -29,7 +38,9 @@ async function main (id) {
// Restore state. We can't do this right away.
setTimeout(async () => {
- await windows95.restoreState()
+ if (!bootFresh) {
+ await windows95.restoreState()
+ }
cursorCaptured = true
window.emulator.lock_mouse()
@@ -37,16 +48,20 @@ async function main (id) {
}, 500)
}
+function start (id) {
+ BUTTONS.remove()
+ document.body.className = ''
+ main(id)
+}
+
function setupButtons () {
- document.querySelectorAll('.btn-start').forEach((btn) => {
- btn.addEventListener('click', () => {
- BUTTONS.remove()
- document.body.className = ''
- main(btn.id)
- })
+ // Start
+ $$('.btn-start').forEach((btn) => {
+ btn.addEventListener('click', () => start(btn.id))
})
- document.querySelector('#reset').addEventListener('click', () => {
+ // Reset
+ $('#reset').addEventListener('click', () => {
if (window.emulator.stop) {
window.emulator.stop()
}
@@ -57,7 +72,29 @@ function setupButtons () {
window.emulator.run()
}
- document.querySelector('#reset').disabled = true
+ $('#reset').disabled = true
+ })
+
+ $('#discard-state').addEventListener('click', () => {
+ bootFresh = true
+
+ start('win95')
+ })
+
+ // Floppy
+ $('#floppy').addEventListener('click', () => {
+ $('#file-input').click()
+ })
+
+ // Floppy (Hidden Input)
+ $('#file-input').addEventListener('change', (event) => {
+ floppyFile = event.target.files && event.target.files.length > 0
+ ? event.target.files[0]
+ : null
+
+ if (floppyFile) {
+ $('#floppy-path').innerHTML = `Inserted Floppy Disk: ${floppyFile.path}`
+ }
})
}
diff --git a/src/renderer/style/style.css b/src/renderer/style/style.css
index d16740e..58e453b 100644
--- a/src/renderer/style/style.css
+++ b/src/renderer/style/style.css
@@ -1,8 +1,32 @@
html, body {
margin: 0;
padding: 0;
+}
+
+body {
background: #000;
- /* cursor: none; */
+}
+
+body.paused > #emulator {
+ display: none;
+}
+
+body.paused {
+ background: #008080;
+ font-family: Courier;
+}
+
+#floppy-path {
+ background: beige;
+ padding: 5px;
+}
+
+#information {
+ text-align: center;
+ position: absolute;
+ width: 100vw;
+ bottom: 50px;
+ font-size: 18px;
}
#emulator {
@@ -13,7 +37,7 @@ html, body {
margin: auto;
}
-body.paused > #emulator {
+#file-input {
display: none;
}