<h1>Writing Program Five</h1>
<h2>[[Start|Page1]]</h2>
<h2>[[Credits]]</h2>
by Dan Cox | @videlais<p>Writing Program Five was heavily inspired by the following projects:</p>
<ul>
<li><a href="https://www.tramm.li/i8080/">Emu8080</a></li>
<li><a href="https://codepen.io/syndicatefx/pen/jPxXpz">jQuery CLI</a></li>
<ul>
<p>Code used under MIT or equivalent license from the following projects:</p>
<ul>
<li><a href="https://github.com/edwardtufte/tufte-css">Tufte CSS</a></li>
<li><a href="https://codepen.io/SitePoint/pen/QbMgvY">Accessible Footnotes with CSS</a></li>
</ul>
[[Back to Menu|Start]]<div class="command">
<div class="previous">
CP/M VER 2.2
<ul>
<li>-HELP Show possible commands</li>
</ul>
</div><br>
A><input type="text"></div>
<script>
$(document).click(function() {
$('input[type="text"]').focus();
});
$('input[type="text"]').focus();
$('input[type="text"]').keyup(function(e){
if(e.which == 13) {
var destination = $('input[type="text"]').val();
var input = "<br>A:> " + destination + "<br>";
var fullInput = destination.split(' ')
var results = window.story.passage('command-' + fullInput[0].toLowerCase());
window.twineStorage.parameters = fullInput;
// Wipe out previous value
$('input[type="text"]').val("");
if(results != undefined) {
// This is a known command, load it
$('.previous').append(input + results.source);
} else {
// An error happened, load default
$('.previous').append(input + window.story.passage('command-help').source);
}
}
});
</script>
<script>
if(window.twineStorage.parameters.length == 1) {
$(".previous").append(
"<ul><li>-ERA [file] erases file content.</li>" +
"<li>-DIR lists filenames in the directory.</li>" +
"<li>-SAVE [file] creates an empty file.</li>" +
"<li>-TYPE [file] displays the content of a file</li>" +
"<li>-RUN [file] Execute filename</li>" +
"<li>-HELP Show possible commands</li></ul>");
} else {
$(".previous").append("INVALID NUMBER OF PARAMETERS");
}
window.twineStorage.parameters = [];
</script><label for="mn-demo" class="margin-toggle">⊕</label><input type="checkbox" id="mn-demo" class="margin-toggle"/><span class="marginnote">The Sharp MZ series started with the MZ-40K, not the Z80 microprossor as many think. The first microprocessor used in the series was Fujitsu's 4-bit MB8843 processor. In 1983, the MZ-80K series launched and included more memory in successive versions. By 1983, the Sharp MZ-3545 ran on two Z80A processors and featured the CP/M operating system.</span>
Sue had managed to rig up a setup that would read off the old drives and feed it to some emulator software we had written to try to get it running. <span class="highlight"><em>Writing Program Five</em> (TM) was written for the Sharp MZ-3545, an incredibly hard-to-find computer that was introduced and then quickly cancelled by Sharp in late 1983.</span>
[[Page3]]<label for="mn-demo" class="margin-toggle">⊕</label><input type="checkbox" id="mn-demo" class="margin-toggle"/><span class="marginnote">Kaplen (1975) once asserted that "all stories start in the middle. It's just that some start before others" (p. 2). In his seminal work <em>Returning Again to the Middle</em>, Kaplen (1975) makes the case that narrative transportation depends on the ability of readers to be able to empathize with the protagonists and their plight. As one of the first to write about the concept, he makes the grand assertion that "we enter a new reality when we engage with a work" (p. 23).</span>
"I think I've finally got it working," the message started. It was a summary of the latest patch from Sue about some restoration work we were trying to do on the esoteric word processing program <em>Writing Program Five (TM)</em>. After years of trying to track down a copy, <span class="highlight">we managed to get a few badly beaten hard drives from a U.S. government surplus reseller.</span>
[[Page2]]<label for="mn-demo" class="margin-toggle">⊕</label><input type="checkbox" id="mn-demo" class="margin-toggle"/><span class="marginnote">The CP/M operating system was originally named for Control Program/Monitor, but later was renamed Control Program for Microcomputers. It was introduced in 1974.</span>
The emulator we had written was a stripped-down copy of the last public version of the <span class="highlight">CP/M system in 1983 paired with a hardware virtualization layer</span>. As far as <em>Writing Program Five (TM)</em> would know, it would be running in its original environment but would also have access to a more modern file system.
[[Page4]]<label for="mn-demo" class="margin-toggle">⊕</label><input type="checkbox" id="mn-demo" class="margin-toggle"/><span class="marginnote">In his book <em>This Connected Age</em>, Elmer (2001) suggests that personal histories should be written as "you-stories" where the personal subjective becomes the objective of the reflective exploration. Increasing the psychic distance between the writer and their own narrative, Elmer (2001) explains, helps a writer explore the gap between their abjection cycle and what he calls social-identification forces that combine their performativity identity with the cultural pressures of their societal context. Throughout a life, these social-identification forces can act in both synchronic and diachronic durations. A woman may face more social pressure early in her life, Elmer (2001) notes, during a diachronic window that can be mapped into cycles of abjection where her body is overdetermined by social pressures from her family and the culture around her. There may also be a singular, synchronic moment where the realization of her first menstrual cycle could mark her psyche and be a particular noteworthy abjection moment.</span>
I had been putting in some extra hours after teaching my Introduction to Digital Narratives course in the small research lab the department shared. I was ready to get the project out the door and into the hands of the public. If we could prove that we, <span class="highlight">two English professors with limited coding knowledge,</span> had gotten it running, then the department would have to help fund us through part of a large NEH grant project the university had gotten for restoring software archive projects. I was tired of the computer science department getting all the funds when we were struggling to do important archival research through applying software and code studies in projects like this.
[[Page5]]<label for="mn-demo" class="margin-toggle">⊕</label><input type="checkbox" id="mn-demo" class="margin-toggle"/><span class="marginnote">The titular Stalker in Tarkovsky's <em>Stalker</em> (1979) is trying to reach the center of the 'Zone'. It is a maze-like area where, should someone reach the center, their greatest wish would be granted. Some have drawn connections between it and the much later film, <em>Annihilation</em> (2018) based on the Jeff VanderMeer novel of the same name. In confronting the alien artifact in both films, the protagonists come face-to-face with powers that react to their materiality. In the case of <em>Stalker</em> (1979), The Room grants wishes those who enter it may not like. For <em>Annihilation</em> (2018), the ending is far worse: the protagonist is confronted with her greatest nightmare, a twisted-darkly mirror of herself.</span>
I came back from <span class="highlight">my musing</span> to read the rest of the message. Sue detailed some <span aria-describedby="footnote-label">technical</span> <span aria-describedby="footnote-label">aspects</span> I was not really following and then gave me some instructions for how to get it running and then how to close the emulation shell when done.
[[Page6]]
<footer>
<h2 class="visually-hidden" id="footnote-label">Footnotes</h2>
<ol>
<li id="technical">The CP/M operating system used the "8.3" filename naming convention where the name of a file could only contain eight characters with its file type another three characters.</span>.</li>
<li id="aspects">George Hafman invented this filename convention in 1956 as part of a government project named Leaping Opus. The full details of this project were finally declassified in 2025 upon his death.</li>
</ol>
</footer><label for="mn-demo" class="margin-toggle">⊕</label><input type="checkbox" id="mn-demo" class="margin-toggle"/><span class="marginnote">The style guide included with the <em>Writing Program Five</em> (TM) software requires that the name of the program be followed by the trademark symbol or the letters "TM". Unless specifically turned off, this will be replaced in all documents created with the program.</span>
She <span class="highlight">closed the message</span> with some extra instructions: “There’s a memory error somewhere. Don’t leave it running for more than a couple hours at a time or things get screwy. I think it has something to do with how the serial port <span aria-describedby="footnote-label">emulator</span> software was implemented. It’s a third-party thing."
[[Page7]]
<footer>
<h2 class="visually-hidden" id="footnote-label">Footnotes</h2>
<ol>
<li id="emulator">The Linkable OMF386 Object Code is bound to the LIB 386 header upon successful translation.</li>
</ol>
</footer><label for="mn-demo" class="margin-toggle">⊕</label><input type="checkbox" id="mn-demo" class="margin-toggle"/><span class="marginnote">Kaplen (1975) opens his book with the following sentence: "You have entered a new world" (p. 1). In using what is now called narrative transportation theory to frame his book, he points to the ways in which the reader has been changed by the experience of reading the text. They are no longer who they were when they started.<br><br>The entire third chapter is printed in reverse. This was initially thought to be a publishing error and the first edition of the book was recalled before being sent back out again. The second edition of the book now comes with a preface that explains this choice from the author. He notes how our expectations of linearity betray us. Nothing is really ever as straightforward as it seems.</span>
The first thing I noticed was that it used "<span class="highlight">pages</span>" for different files. No matter how short or long the amount of text that was entered, it used the same naming scheme and incremented the number each <span aria-describedby="footnote-label">time</span>.
[[Page8]]
<footer>
<h2 class="visually-hidden" id="footnote-label">Footnotes</h2>
<ol>
<li id="time">The emulator shell can be closed at any time through the keyboard shortcut CTRL + SPACEBAR.</li>
</ol>
</footer><label for="mn-demo" class="margin-toggle">⊕</label><input type="checkbox" id="mn-demo" class="margin-toggle"/><span class="marginnote"><em>Writing Program Five</em> (TM) comes with cutting-edge assistance software! Simply feed it your data and it will try to predict what comes next!<br><br>For example, write "What comes next?" with the Guided Assistance mode turned on to get "What do you want to do today?" as a response!</span>
Creating a series of files, I entered some text from various projects I have saved on my computer. These were parts of <span class="highlight">articles</span> and random notes I had collected that might one day turn into papers. I did some quick searches and put in different <span aria-describedby="footnote-label">footnotes</span> and comments.
[[Page9]]
<footer>
<h2 class="visually-hidden" id="footnote-label">Footnotes</h2>
<ol>
<li id="footnotes">The emulator shell can be closed at any time through the keyboard shortcut CTRL + SPACEBAR.</li>
</ol>
</footer><script>
if(window.twineStorage.parameters.length == 1) {
var results = [];
for(var p of window.story.passages) {
if(p != undefined ) {
if(p.tags.includes("page")) {
results.push(p);
}
}
}
for(var i of results) {
$(".previous").append(i.name + "<br>");
}
} else {
$(".previous").append("INVALID NUMBER OF PARAMETERS");
}
window.twineStorage.parameters = [];
</script><label for="mn-demo" class="margin-toggle">⊕</label><input type="checkbox" id="mn-demo" class="margin-toggle"/><span class="marginnote">A successful "you-story" is able to account for all social-identification forces during a lifetime. "A personal narrative should never be lie," Elmer (2001) writes (p. 53). The goal of a "you-story" is to express truth, even if the author is not ready for that truth. It should be a meditative experience that unreveals to the author information about their life they did not know.</span>
For being a dated program, I noticed that <em>Writing Program Five</em> (TM) was able to handle <span class="highlight">anything</span> I threw at it. Once it seemed to get a feel for how things were progressing, I saw it make some suggestions for the next sentence and how to <span aria-describedby="footnote-label">improve</span> things.
[[Page10]]
<footer>
<h2 class="visually-hidden" id="footnote-label">Footnotes</h2>
<ol>
<li id="improve"><em>Writing Program Five</em> (TM) was able to quickly discover other files on the system and build an increasingly large database of possible connections between words and their placement in sentences.</li>
</ol>
</footer><label for="mn-demo" class="margin-toggle">⊕</label><input type="checkbox" id="mn-demo" class="margin-toggle"/><span class="marginnote">The Room grants our deepest wish. This is what the people who are exploring the 'Zone' learn about the twisting place. The alien artifact at its center has seemingly near-infinite power but is limited by the mind that interacts with it.<br><br>As any computer scientist will tell you, "garbage in, garbage out!"</span>
Its ability to <span aria-describedby="footnote-label">correctly</span> predict text quickly became very <span class="highlight">impressive!</span>
[[Page11]]
<footer>
<h2 class="visually-hidden" id="footnote-label">Footnotes</h2>
<ol>
<li id="correctly">I soon learned that I could no longer control the main text of each file. <em>Writing Program Five</em> (TM) was taking over writing each file as soon as I created it! It was adding in connections to other books I had never read and expanding out my comments. I was starting to worry I might be losing control over the program.</li>
</ol>
</footer><label for="mn-demo" class="margin-toggle">⊕</label><input type="checkbox" id="mn-demo" class="margin-toggle"/><span class="marginnote">The true horror of <em>Annihilation</em> (2018) is not the monsters. They are unnerving, yes, but what really shakes people is the haunting inevitability of the movie. Everything is foreshadowed from the beginning. Its rules are very simple. As a viewer, you know where the story is going and how it will end. Each step brings new tension toward its inevitability.</span>
[[Page12]]
<footer>
<h2 class="visually-hidden" id="footnote-label">Footnotes</h2>
<ol>
<li id="became">I stopped adding text and simply created new files to leave new footnotes for myself. I didn't know how to stop <em>Writing Program Five</em> (TM), the latest in word-processing technology! without falling back into the emulated shell.</li>
</ol>
</footer>
<footer>
<h2 class="visually-hidden" id="footnote-label">Footnotes</h2>
<ol>
<li id="became">The only solution I could come up with was to drop out of the program and re-write the story manually.</li>
</ol>
</footer>I quit the program and got up from the chair. It was time to go home.
I looked back to see only a few words remaining on the screen.
CLOSE TAB TO END SESSION<script>
if(window.twineStorage.parameters.length == 1) {
$(".previous").append("INVALID NUMBER OF PARAMETERS<br>");
} else if (window.twineStorage.parameters.length == 2) {
var file = window.twineStorage.parameters[1];
var l = window.story.passages.length;
var results = [];
for(var p of window.story.passages) {
if(p != undefined ) {
if(p.name == file) {
results.push(p);
}
}
}
if(results.length == 0) {
var p = new Passage(l++, file, ["page"], '');
window.story.passages.push(p);
$(".previous").append("FILE " + file + " CREATED<br>");
} else {
$(".previous").append("FILE EXISTS<br>");
}
} else {
$(".previous").append("INVALID NUMBER OF PARAMETERS");
}
window.twineStorage.parameters = [];
</script><script>
if(window.twineStorage.parameters.length == 1) {
$(".previous").append("INVALID NUMBER OF PARAMETERS");
} else if(window.twineStorage.parameters.length == 2) {
if(window.twineStorage.parameters[1] == "END.ASM") {
window.story.show("END.ASM");
} else {
$(".previous").append("EXECUTION LOCKED TO END.ASM");
}
} else {
$(".previous").append("INVALID NUMBER OF PARAMETERS");
}
window.twineStorage.parameters = [];
</script><script>
if(window.twineStorage.parameters.length == 1) {
$(".previous").append("INVALID NUMBER OF PARAMETERS");
} else if(window.twineStorage.parameters.length == 2) {
var results = [];
var file = window.twineStorage.parameters[1];
for(var p of window.story.passages) {
if(p != undefined ) {
if(p.name == file && p.tags.includes("page")) {
results.push(p);
}
}
}
if(results.length > 0) {
window.story.show(results[0].name);
} else {
$(".previous").append("UNKNOWN FILE");
}
} else {
$(".previous").append("INVALID NUMBER OF PARAMETERS");
}
window.twineStorage.parameters = [];
</script><script>
if(window.twineStorage.parameters.length == 1) {
$(".previous").append("INVALID NUMBER OF PARAMETERS");
} else if(window.twineStorage.parameters.length == 2) {
var results = [];
var file = window.twineStorage.parameters[1];
var p = 0;
for(p in window.story.passages) {
if(window.story.passages[p] != undefined ) {
if(window.story.passages[p].name == file && window.story.passages[p].tags.includes("page")) {
results.push(p);
break;
}
}
}
if(results.length > 0) {
window.story.passages[p].source = "";
}
} else {
$(".previous").append("INVALID NUMBER OF PARAMETERS");
}
window.twineStorage.parameters = [];
</script><label for="mn-demo" class="margin-toggle">⊕</label><input type="checkbox" id="mn-demo" class="margin-toggle"/><span class="marginnote">The "mystery" is the central part of all narratives. Every sense of irony resolves around those who know and those who do not. Elmer (2001) spends a whole chapter in <em>This Connected Age</em> recounting how we cannot stand not knowing things. The pull of narrative closure will drive readers deeper into a story to find more details and gather more clues.</span>
<footer>
<h2 class="visually-hidden" id="footnote-label">Footnotes</h2>
<ol>
<li id="became">I might be lost in the file system. I can erase existing files and create new ones, but nothing else happens. How do I get out of this program?</li>
</ol>
</footer><em>Writing Program Five</em> (TM) was supposed to named Writing Program IX, but there was a typo and some disagreement between Joesph Pothern, its creator, and the software publishing company. Pothern wanted to call it Writing Program IV-E or "Ivy" for short. The company did not agree to it and there was a compromise to rename it FIVE despite there already being a version called "V" on the market.