diff --git a/src/renderer/card-settings.tsx b/src/renderer/card-settings.tsx index 8ce85a1..88bd982 100644 --- a/src/renderer/card-settings.tsx +++ b/src/renderer/card-settings.tsx @@ -2,17 +2,22 @@ import * as React from "react"; import { resetState } from "./utils/reset-state"; +// v86's IDE CD-ROM path is currently broken; flip this once it works again. +const CDROM_ENABLED = false; + interface CardSettingsProps { bootFromScratch: () => void; setFloppy: (file: File) => void; + setCdrom: (file: File) => void; setSmbSharePath: (path: string) => void; pickFolder: () => Promise; navigate: (to: "start" | "settings") => void; floppy?: File; + cdrom?: File; smbSharePath: string; } -type Tab = "floppy" | "network" | "state"; +type Tab = "floppy" | "cdrom" | "network" | "state"; interface CardSettingsState { tab: Tab; @@ -27,6 +32,7 @@ export class CardSettings extends React.Component< super(props); this.onChangeFloppy = this.onChangeFloppy.bind(this); + this.onChangeCdrom = this.onChangeCdrom.bind(this); this.onResetState = this.onResetState.bind(this); this.state = { @@ -53,12 +59,14 @@ export class CardSettings extends React.Component<
{this.renderTab("floppy", "Floppy Drive")} + {CDROM_ENABLED && this.renderTab("cdrom", "CD-ROM")} {this.renderTab("network", "Network Share")} {this.renderTab("state", "Machine State")}
{tab === "floppy" && this.renderFloppy()} + {tab === "cdrom" && this.renderCdrom()} {tab === "network" && this.renderSmbShare()} {tab === "state" && this.renderState()}
@@ -131,6 +139,48 @@ export class CardSettings extends React.Component< ); } + private renderCdrom() { + const { cdrom } = this.props; + + return ( +
+ Drive D: + +
+ +

+ windows95 ships with a virtual CD-ROM drive. Mount an{" "} + .iso image here, then boot the machine to read it from + inside Windows. +

+
+
+ + +
+
+ +
+
+ ); + } + private renderSmbShare() { const { smbSharePath } = this.props; @@ -203,6 +253,19 @@ export class CardSettings extends React.Component< } } + private onChangeCdrom(event: React.ChangeEvent) { + const cdromFile = + event.target.files && event.target.files.length > 0 + ? event.target.files[0] + : null; + + if (cdromFile) { + this.props.setCdrom(cdromFile); + } else { + console.log(`Cdrom: Input changed but no file selected`); + } + } + private async onResetState() { await resetState(); this.setState({ isStateReset: true }); diff --git a/src/renderer/emulator.tsx b/src/renderer/emulator.tsx index cee325e..56ee27a 100644 --- a/src/renderer/emulator.tsx +++ b/src/renderer/emulator.tsx @@ -210,7 +210,7 @@ export class Emulator extends React.Component<{}, EmulatorState> { * 🤡 */ public renderUI() { - const { isRunning, currentUiCard, floppyFile } = this.state; + const { isRunning, currentUiCard, floppyFile, cdromFile } = this.state; if (isRunning) { return null; @@ -225,6 +225,7 @@ export class Emulator extends React.Component<{}, EmulatorState> { card = ( this.setState({ floppyFile })} + setCdrom={(cdromFile) => this.setState({ cdromFile })} setSmbSharePath={(smbSharePath) => { this.setState({ smbSharePath }); ipcRenderer.invoke(IPC_COMMANDS.SET_SMB_SHARE_PATH, smbSharePath); @@ -232,6 +233,7 @@ export class Emulator extends React.Component<{}, EmulatorState> { pickFolder={() => ipcRenderer.invoke(IPC_COMMANDS.PICK_FOLDER)} bootFromScratch={this.bootFromScratch} floppy={floppyFile} + cdrom={cdromFile} smbSharePath={this.state.smbSharePath} navigate={navigate} />