mkweb

PDP-8 Emulator written in Javascipt with HTML5 Canvas based frontend.

<!DOCTYPE html>
<html>
<head>
    <!-- Pure CSS -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/build/pure-min.css" integrity="sha384-X38yfunGUhNzHpBaEBsWLO+A0HDYOQi8ufWDkZ0k9e0eXz/tH3II7uKZ9msv++Ls" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/build/grids-responsive-min.css">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    
    <link rel="stylesheet" href="mkweb.css">
    
    <title>PDP-8 Emulator</title>
    <link rel="icon" type="image/x-icon" href="/assets/favicon.ico">
</head>
<body>
    <div class="pure-g">
        <div class="pure-u-1 pure-u-lg-1-4"></div>
        
        <div class="pure-u-1 pure-u-lg-1-2">
            <input type="text" id="keyboardtrigger">
            <div id="teletype-container" style="background-color: black;"></div>
            <div id="frontpanel-container"></div>
        </div>

        <div class="pure-u-1 pure-u-lg-1-4">
            <table class="pure-table pure-table-horizontal">
                <thead>
                    <tr>
                        <th>Switches</th>
                        <th></th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td>CLR</td>
                        <td>Clear Link bit</td>
                    </tr>
                    <tr>
                        <td>LOAD ADDR</td>
                        <td>Load SR into PC</td>
                    </tr>
                    <tr>
                        <td>DEP</td>
                        <td>Load PC into MA, increment PC. Load SR into MB, write MB to MA</td>
                    </tr>
                    <tr>
                        <td>EXAM</td>
                        <td>Load PC into MA, increment PC. Read MA into MB</td>
                    </tr>
                    <tr>
                        <td>START</td>
                        <td>Start computer</td>
                    </tr>
                    <tr>
                        <td>STOP</td>
                        <td>Stop computer</td>
                    </tr>
                    <tr>
                        <td>SING INST</td>
                        <td>Execute a single instruction cycle</td>
                    </tr>
                    <tr>
                        <td>SING STEP</td>
                        <td>Execute step in instruction cycle</td>
                    </tr>

                    <tr>
                        <td>SWITCH REGISTER</td>
                        <td>12-bit register used for user input</td>
                    </tr>
                    <tr>
                        <td>INST FIELD</td>
                        <td>(NOT IMPLEMENTED)</td>
                    </tr>
                    <tr>
                        <td>DATA FIELD</td>
                        <td>(NOT IMPLEMENTED)</td>
                    </tr>
                </tbody>
            </table>

            <table class="pure-table pure-table-horizontal" style="margin-left: auto; margin-right:auto;">
                <thead>
                    <tr>
                        <th>Hotkeys</th>
                        <th></th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td>&lt;Ctrl&gt; + &lt;Enter&gt;</td>
                        <td>Start computer</td>
                    </tr>
                    <tr>
                        <td>&lt;Ctrl&gt; + &lt;Backspace&gt;</td>
                        <td>Stop computer</td>
                    </tr>
                    <tr>
                        <td>&lt;Ctrl&gt; + &lt;Space&gt;</td>
                        <td>Cycle computer</td>
                    </tr>
                    <tr>
                        <td>&lt;Ctrl&gt; + &lt;Esc&gt;</td>
                        <td>Reset computer</td>
                    </tr>
                    <tr>
                        <td>&lt;Ctrl&gt; + &lt;Delete&gt;</td>
                        <td>Clear screen</td>
                    </tr>
                </tbody>
            </table>
        </div>

        <div class="pure-u-1">
            <p>
                PDP-8 Emulator 
                &copy; 2024 Rex McKinnon&nbsp;&nbsp;&mdash;&nbsp;&nbsp;
                <a href="https://git.mckinnon.ninja/mkweb">Source Code</a>&nbsp;&nbsp;&mdash;&nbsp;&nbsp;
                <a href="/tests/">Example Programs</a>
            </p>
        </div>
    </div>

    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/phaser.min.js"></script>
    <script src="mkweb-sim.js"></script>
    <script src="mkweb-frontpanel.js"></script>
    <script src="mkweb-teletype.js"></script>
    <script>
        // Create our simulated PDP-8
        const COMPUTER = new MK12();
        COMPUTER.on();  // Turn it on

        // Create our simulated front panel
        const FP_CFG = {
            type: Phaser.AUTO,
            width: 1200,
            height: 600,
            scene: FrontPanel,
            parent: 'frontpanel-container',
            title: 'PDP-8 Emulator',
            url: 'https://pdp8.mckinnon.ninja'
        };
        const FRONTPANEL = new Phaser.Game(FP_CFG);

        // Create our simulated Teletype
        const TT_CFG = {
        type: Phaser.AUTO,
        width: 1200,
        height: 700,
        scene: Teletype,
        parent: 'teletype-container',
        title: 'VT51 Emulator',
        };
        const TELETYPE = new Phaser.Game(TT_CFG);
    </script>
</body>
</html>