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><Ctrl> + <Enter></td>
<td>Start computer</td>
</tr>
<tr>
<td><Ctrl> + <Backspace></td>
<td>Stop computer</td>
</tr>
<tr>
<td><Ctrl> + <Space></td>
<td>Cycle computer</td>
</tr>
<tr>
<td><Ctrl> + <Esc></td>
<td>Reset computer</td>
</tr>
<tr>
<td><Ctrl> + <Delete></td>
<td>Clear screen</td>
</tr>
</tbody>
</table>
</div>
<div class="pure-u-1">
<p>
PDP-8 Emulator
© 2024 Rex McKinnon —
<a href="https://git.mckinnon.ninja/mkweb">Source Code</a> —
<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>