-
Notifications
You must be signed in to change notification settings - Fork 4
/
plexem.html
90 lines (85 loc) · 3.9 KB
/
plexem.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="xterm/css/xterm.css" />
<link rel="stylesheet" href="plexem.css" />
<title>Plexus P/20 emulator</title>
</head>
<body>
<div id="terminal"></div>
<script type="module">
import './xterm/lib/xterm.js';
import './xterm-pty/index.js';
import initEmscripten from './plexem.mjs';
var xterm = new Terminal();
xterm.open(document.getElementById('terminal'));
// Create master/slave objects
const { master, slave } = openpty();
// Connect the master object to xterm.js
xterm.loadAddon(master);
await initEmscripten({
pty: slave
});
</script>
<script>
document.addEventListener("DOMContentLoaded", function(event) {
const showabout = document.getElementById("showabout");
const showfaq = document.getElementById("showfaq");
const closeabout = document.getElementById("closeabout");
const closefaq = document.getElementById("closefaq");
const about = document.getElementById("about");
const faq = document.getElementById("faq");
showabout.addEventListener("click", () => {
about.showModal();
});
showfaq.addEventListener("click", () => {
faq.showModal();
});
closeabout.addEventListener("click", () => {
about.close();
});
closefaq.addEventListener("click", () => {
faq.close();
});
});
</script>
<a href="#" id="showfaq">Does not work?</a> - <a href="#" id="showabout">About</a>
<dialog id="faq">
<p>
This is a pretty faithful Plexus system emulator. It runs more or less in real time, meaning things may take a while. If you get stuck, try the following:
</p>
<ul>
<li>The emulator needs to download a hard disk image before it runs. If all you see is a black screen, check if your browser is still loading.</li>
<li>If all you see is 'PLEXUS SELFTEST REV 3.3', the Plexus is running its selftest. This will take about 30 seconds, or you can abort it by typing a '!' character.</li>
<li>If you're at the 'PLEXUS PRIMARY BOOT REV 1.2' prompt, the Plexus is waiting for you to do something. Try pressing enter to boot Unix.</li>
<li>If you run 'init 2', you need to login. Try user 'root' with no password.</li>
<li>If you get weird colored blocks in the terminal, please allow using canvas image data for this site. There probably is an icon for that in the address bar.</li>
<li>Hard disk changes are saved to local storage in your browser. Changing computers or browsers will clear it. Your browser may also clear the storage when it's unused for a long time or your (physical) machine is running low on hard disk space.</li>
</ul>
<button id="closefaq">Close</button>
</dialog>
<dialog id="about">
<p>
This is an emulator for a Plexus P/20 system, which is an Unix server from the '80's. It
runs SystemV Unix on a dual 68010 processor mainboard. Adrian Black
(from Adrian's Digital Basement) did some videos on the topic of getting one to work:
<a href="https://www.youtube.com/watch?v=iltZYXg5hZw">1</a>
<a href="https://www.youtube.com/watch?v=lCPZAYvk940">2</a>
<a href="https://www.youtube.com/watch?v=_IrxvDE6Fyo">3</a>
<a href="https://www.youtube.com/watch?v=Ve1SuuRkx_o">4</a>
<a href="https://www.youtube.com/watch?v=10b50ECWXLk">5</a>.
</p>
<p>
This emulator is written in C. While it can be ran as a native program, the version
you're looking at right now is compiled to webassembly using
<a href="https://emscripten.org/">Emscripten</a>. It uses
<a href="https://xtermjs.org/">xterm.js</a> for the fancy terminal, which is connected
to Emscripten via <a href="https://github.com/mame/xterm-pty">xterm-pty</a>.
</p>
<p>
Plexus emulator © 2024 Sprite_tm and contributors. Licensed under the MIT license. <a href="https://github.com/Spritetm/plexus_20_emu">Source code</a> for this emulator is on Github.
</p>
<button id="closeabout">Close</button>
</dialog>
</body>
</html>