TUTOR

Last updated
TUTOR
Paradigm imperative (procedural)
Designed by Paul Tenczar & Richard Blomme [1]
Developer Paul Tenczar & University of Illinois at Urbana-Champaign
First appeared1969 (1969)
Typing discipline none
Major implementations
TUTOR, Micro-TUTOR
Influenced
TenCORE, USE (Regency Systems)

TUTOR, also known as PLATO Author Language, is a programming language developed for use on the PLATO system at the University of Illinois at Urbana-Champaign beginning in roughly 1965. TUTOR was initially designed by Paul Tenczar for use in computer assisted instruction (CAI) and computer managed instruction (CMI) (in computer programs called "lessons") and has many features for that purpose. For example, TUTOR has powerful answer-parsing and answer-judging commands, graphics, and features to simplify handling student records and statistics by instructors. TUTOR's flexibility, in combination with PLATO's computational power (running on what was considered a supercomputer in 1972), also made it suitable for the creation of games — including flight simulators, war games, dungeon style multiplayer role-playing games, card games, word games, and medical lesson games such as Bugs and Drugs (BND). TUTOR lives on today as the programming language for the Cyber1 PLATO System, [2] which runs most of the source code from 1980s PLATO and has roughly 5000 users as of June 2020.

Contents

Origins and development

TUTOR was originally developed as a special purpose authoring language for designing instructional lessons, and its evolution into a general purpose programming language was unplanned. The name TUTOR was first applied to the authoring language of the PLATO system in the later days of Plato III. The first documentation of the language, under this name, appears to have been Avner, Richard Allen; Tenczar, Paul (January 1969), The TUTOR Manual. CERL Report X-4

The article Teaching the Translation of Russian by Computer [3] gives a snapshot of TUTOR from shortly before PLATO IV was operational. Core elements of the language were present, but commands were given in upper case, and instead of using a general mechanism, support for alternative character sets was through special command names such as WRUSS for "write using the Russian character set."

Through the 1970s, the developers of TUTOR took advantage of the fact that the entire corpus of TUTOR programs were stored on-line on the same computer system. Whenever they felt a need to change the language, they ran conversion software over the corpus of TUTOR code to revise all existing code so that it conformed with the changes they had made. [4] As a result, once new versions of TUTOR were developed, maintaining compatibility with the PLATO version could be very difficult. [5]

Control Data Corporation (CDC), by 1981, had largely expunged the name TUTOR from their PLATO documentation. They referred to the language itself as the PLATO Author Language. The phrase TUTOR file or even TUTOR lesson file survived, however, as the name of the type of file used to store text written in the PLATO Author Language. [6]

Structure of a TUTOR lesson

A TUTOR lesson consists of a sequence of units where each unit begins with the presentation of information and progress from one unit to the next is contingent on correctly answering one or more questions. As with COBOL paragraphs, control may enter a TUTOR unit from the preceding unit and exit into the next, but units are also callable as subroutines using the do or join commands.

Here is an example unit: [7]

unit    math at      205 write   Answer these problems          3 + 3 =          4 × 3 =  arrow   413 answer  6 arrow   613 answer  12 

Several things should be immediately apparent from this example.

What may not be apparent is the control structure implicit in this unit. The arrow command marks the entrance to a judging block This control structure is one of TUTOR's unique features.

Unique features

TUTOR contained a number of unique features. The following list is not intended as a substitute for a TUTOR manual, but merely highlights the most interesting, innovative, and sometimes confusing features of the language.

Answer judging

A judging block in TUTOR is a control structure that begins with an arrow command and ends with the next arrow, endarrow or unit command. The arrow command also prompts for input, with the special arrow character (resembling "▷") displayed as a prompt at the indicated screen coordinates. In effect, a judging block can be thought of as a backtracking control structure where the student may make multiple attempts to answer a question until a correct answer allows forward progress.

Judging pattern matching

Each judging block consists of a sequence of pattern matching commands, each of which introduces a (possibly empty) block of commands to be executed if that pattern matches. The two most common pattern matching commands were answer and wrong. These had identical pattern matching semantics except that answer judged a student response to be correct if it matched, while wrong judged a student response to be incorrect.

The tag fields on the answer and wrong commands consisted of lists of optional, required and alternative words. consider this example: [8]

answer  <it, is,a, it's, figure,         polygon>         (right, rt) (triangle, triangular) 

This would match answers such as "it is a right triangle" or "it's a triangular figure" or just "rt triangle". It would not match "sort of triangular" because the words "sort of" are not listed as ignored, and it would not match "triangle, right?" because the order is wrong.

The pattern matching subsystem recognized spelling errors, so the words "triangel" or "triangl" would match the example pattern. The lesson author could use the specs command to set how pedantic the system was about spelling errors.

The pattern matching algorithms used by various TUTOR implementations varied in detail, but typically, each word in the input text and each word in the pattern were converted to bit vectors. To see whether a word of student input matched a word of the pattern, the Hamming distance between the two bit vectors was used as a measure of the degree of difference between the words. Bit vectors were typically 60 or 64 bits long, with fields for letter presence, letter pair presence, and the first letter. As a result, the number of one bits in the exclusive or of two such bit vectors approximated the extent of the phonetic difference between the corresponding words. [9]

Judging control structures

All early presentations of the control structure of a TUTOR judging block were confusing. In modern terms, however, a judging block can be described as an iterative control structure that exits when the student input is judged correct. The body of this control structure consists of a series of cases, each introduced by a pattern matching command such as answer or wrong. All output produced by the body of the judging loop in the previous cycle is erased from the screen prior to the next cycle.

Consider this example: [10]

wrong   <it, is,a> square at      1501 write   A square has four         sides. 

In the event that the student inputs "square" or "a square", the answer is judged to be incorrect, and the text "A square has four sides." is output starting at line 15 column 1 on the screen. This output remains on the screen until the student begins to enter a new answer, at which point, it is erased so that the response to the new answer can be computed. The mechanism by which the display screen rolls back to its previous state varies from implementation to implementation. Early implementations operated by switching the terminal into erase mode and re-executing the entire case that had matched. Some later implementations buffered the output produced during judging so that this output could be erased.

The join command was a unique form of subroutine call. It was defined as being equivalent to textual substitution of the body of the joined unit in place of the join command itself. [11] As such, a joined unit could contain part of a judging block. Thus, while the judging block is conceptually an iterator enclosing a series of cases, this block may be arbitrarily broken into subroutines. (An alternative subroutine call, the do command, conformed to the usual semantics associated with subroutine calls in other programming languages.)

Graphic and display commands

The PLATO IV student terminal [12] had a 512 by 512 pixel plasma display panel, with hardware support for point plotting, line drawing, and text display. Each pixel on the PLATO IV terminal was either orange or black. The CDC PLATO V terminal used a monochrome black and white CRT to emulate the plasma panel. The built-in character set had 4 sets of 63 characters, each 8 by 16 pixels, half of these were fixed, half were programmable. The Tutor language provided complete support for this terminal.

There were two coordinate systems [13]

Drawing commands

The following example illustrates some of Tutor's drawing commands. [14]

draw    1812;1852;skip;1844;1544 circle  16,344,288 draw    1837;1537;1535;1633;1833 

Note the use of semicolons to separate successive coordinates on the draw command. This allows unambiguous use of comma-separated fine coordinates. Normally, the draw command connects consecutive points with line segments, but by putting skip in the tag, the draw command could be made to conceptually lift its pen.

The tags on the circle command give the radius and fine coordinates of the center. Additional tags could specify starting and ending angles for partial circles.

Hand composing draw commands is difficult, so a picture editor was included in the PLATO system by 1974 to automate this work. [15] This could only deal with drawing commands with constant coordinates.

Text rendering commands

The following example illustrates some of the text rendering tools of Tutor. [16]

unit    title size    9.5     $$ text 9.5 times normal size rotate  45      $$ text rotated 45 degrees at      2519 write   Latin size    0       $$ return to normal writing rotate  0 at      3125 write   Lessons on Verbs 

Text rendered in size zero rotation zero used the built-in character rendering hardware of the PLATO terminal, while rendering with nonzero size and rotation was done with line segments and therefore significantly slower due to the speed of the communication link to the terminal.

Control structures

Aside from its unique answer judging mechanisms, TUTOR's original set of control structures was rather sparse. In the mid 1970s, this shortcoming was addressed by introducing if, endif blocks with optional elseif and else sections. The semantics of these control structures was routine, but the syntax inherited the mandatory indentation of the Tutor Language, presaging that of Python and adding a unique nonblank indent character to distinguish indenting from continuation lines.

This is illustrated in the following example: [17]

if      n8<4 .       write   first branch .       calc    n9⇐34 elseif  n8=4 .       write   second branch .       do      someunit else .       write   default branch .       if      n8>6 .       .       write   special branch .       endif endif 

(The assignment arrow in the calc statement is not rendered correctly in some browsers. It appears similar to <= but as one character. It had a dedicated key on the PLATO IV keyboard.)

The same syntax was used for loop, endloop blocks with semantics comparable to while loops in conventional programming languages. This is illustrated in the following example [18]

loop    n8<10 .       write   within loop .       sub1    n8 reloop  n8≥5 .       write   still within loop .       do      someunit outloop n8<3 .       write   still within loop endloop write   outside of loop 

Note that the reloop and outloop commands are somewhat analogous to the continue and break statements of languages based on C, except that they must sit at the indenting level of the loop they modify, and they have a condition tag that indicates when the indicated control transfer is to take place. This makes the construct more powerful than in other languages, because any line of the inner loop could terminate or reloop several outer loops with one statement.

Expression syntax

TUTOR's expression syntax did not look back to the syntax of FORTRAN, nor was it limited by poorly designed character sets of the era. For example, the PLATO IV character set included control characters for subscript and superscript, and TUTOR used these for exponentiation. Consider this command [19]

circle  (412+72.62)1/2,100,200

The character set also included the conventional symbols for multiplication and division, × and ÷, but in a more radical departure from the conventions established by FORTRAN, it allowed implicit multiplication, so the expressions (4+7)(3+6) and 3.4+5(23-3)/2 were valid, with the values 99 and 15.9, respectively (op cit). This feature was seen as essential. When students typed in a numeric answer to a question, they could use operators and variables and standard algebraic notation, and the program would use the TUTOR "compute" command to compile and run the formula and check that it was numerically equivalent (or within the floating point roundoff error) to the correct answer.

The language included a pre-defined constant named with the Greek letter pi (π), with the appropriate value, which could be used in calculations. Thus, the expression πr2 could be used to calculate the area of a circle, using the built-in π constant, implicit multiplication and exponentiation indicated by a superscript.

In TUTOR, the floating-point comparison x=y was defined as being true if x and y were approximately equal. [20] This simplified life for mathematically naïve developers of instructional lessons, but it occasionally caused headaches for developers of numerically sophisticated code because it was possible that both x<y and x≥y could be true at the same time. [21]

Memory management

As an authoring language, TUTOR began with only minimal memory resources and only the crudest tools for manipulating them. Each user process had a private data segment of 150 variables, and shared common blocks could be attached, allowing inter-user communication through shared memory.

On the PLATO IV system, words were 60 bits, in keeping with the CDC 6600 family of computers. Some later implementations changed this to 64 bits. [22]

Basic memory resources

The private memory region of each process consisted of 150 words each, referred to as student variables; the values of these variables were persistent, following the individual user from session to session. These were addressed as n1 through n150 when used to hold integer values, or as v1 through v150 when used to hold floating point values. [23]

A TUTOR lesson could attach a single region of up to 1500 words of shared memory using the common command. Each lesson could have an unnamed temporary common block containing variables shared by all users of that lesson. Such blocks were created when a lesson came into use and deallocated when the lesson became inactive. In contrast, named common blocks were associated with a block of a lesson (a disk file). Shared memory was addressed as nc1 through nc1500 (for integers) or vc1 through vc1500 (for floating point numbers). [24]

Where 150 student variables was insufficient, a lesson could use the storage command to create an additional private memory segment of up to 1000 words. This segment existed in swap space only, but it could be mapped to student variables or common variables. For example [25]

common  1000 storage 75 stoload vc1001,1,75 

This example defines nc1 to nc1000 as a shared unnamed common block, while nc1001 to nc1075 are private storage.

Defining symbolic names

The Tutor define command was very similar to the C #define preprocessor directive. This was the only way to associate mnemonic names with variables. It was up to the programmer to statically allocate memory and assign names to variables. Consider this example: [26]

define  mynames         first=v1, second =v2         result=v3 

This creates a set of definitions named mynames defining three floating point variables. Users were advised that "there should not be any v3's or v26's anywhere in your lesson except in the define statement itself. Put all your definitions at the very beginning of the lesson where you will have ready reference to which variables you are using." [27]

Functions could be defined, with macro-substitution semantics, as in this illustration: [28]

define  cotan(a)=cos(a)/sin(a) 

Unlike C, the original scope rules of TUTOR were pure "definition before use" with no provisions for local definitions. Thus, the formal parameter a used above must not have any previous definition.

Later in the development of TUTOR, with the introduction of multiple named sets of definitions, the programmer was given explicit control over which sets of definitions were currently in force. For example, define purge, setname would discard all definitions in the named set. [29]

Arrays, packed arrays, and text manipulation

The original TUTOR tools for text manipulation were based on commands for specific text operations, for example, pack to place a packed character string into consecutive variables in memory, search to search for one string within another, and move to move a string from memory to memory. [30] By 1975, more general tools for arrays of integers and packed arrays were added. For example: [31]

define  segment, name=starting var, num bits per byte, s         array, name(size)=starting var         array, name (num rows, num columns)=starting var 

Segmented arrays, defined with the keyword segment, were comparable to packed arrays in Pascal. The byte size and whether or not the array elements were to be treated as signed or unsigned were entirely under user control. Arbitrary text manipulation could be done by setting the byte size to the machine byte size, 6 bits on implementations using display code, 8 bits on some later ASCII and extended ASCII implementations. Note the lack of any specification of array dimensionality for segmented arrays.

Parameter passing

A general parameter passing mechanism was added to TUTOR early in the PLATO IV era. For example: [32]

define  radius=v1,x=v2,y=v3 unit    vary do      halfcirc(100,150,300) do      halfcirc(50) * unit    halfcirc(radius, x,y) circle  radius, x,y,0,180 draw    x-radius, y;x+radius, y 

Notice that the formal parameters listed in the argument list to the unit command are simply the defined names for statically allocated global variables. The semantics of parameter passing was given as being equivalent to assignment at the time of the control transfer to the destination unit, and if actual parameters were omitted, as in the second do command above, the effect was to leave the prior values of the corresponding formal parameters unchanged.

Local variables

Local variables were added to TUTOR some time around 1980. Lesson authors wishing to use local variables were required to use the lvars command to declare the size of the buffer used for local variables, up to 128 words. [33] Having done so, a unit using local variables could begin as follows: [34]

unit    someu         NAME1,NAME2,NAME3(SIZE)         NAME4=CONSTANT         floating:NAME5,NAME6,NAME7(SIZE)         integer, NUM BITS:NAME8,NAME9         integer, NUM BITS,signed:NAME10         integer:NAME11 

The continuation lines of the unit command given above are taken to be lines of an implicit define command with local scope. Conventional definitions in terms of student variables such as n150 could be used in such a local define, but the forms illustrated here all automatically bind names to locations in the block of memory allocated by the lvars command. The available TUTOR documentation does not discuss how local variables are allocated.

Other implementations

There has been a sizable family of TUTOR-related languages, each similar to the original TUTOR language but with differences. In particular, TUTOR was a component of a system (the PLATO computer-based education system) that ran on particular CDC mainframe hardware. For efficiency, there were some hardware-specific elements in TUTOR (e.g. variables that were 60-bit words that could be used as arrays of 60 bits or as 10 six-bit characters, etc.). Also, TUTOR was designed before the advent of the windows-oriented graphical user interface (GUI).

The microTutor language was developed in the PLATO project at UIUC to permit portions of a lesson to run in terminals that contained microcomputers, with connections to TUTOR code running on the mainframe. The microTutor dialect was also the programming language of the Cluster system developed at UIUC and licensed to TDK in Japan; the Cluster system consisted of a small group of terminals attached to a minicomputer which provided storage and compilation. The Tencore Language Authoring System is a TUTOR derivative developed by Paul Tenczar for PCs and sold by Computer Teaching Corporation. cT was a derivative of TUTOR and microTutor developed at Carnegie Mellon which allowed programs to run without change in windowed GUI environments on Windows, Mac, and Unix/Linux systems.

The Pterm terminal emulator developed by Cyber1 supports the microTutor language starting with version 6. [35] [36]

Citations

  1. Sherwood 1974, p. 4.
  2. "Cyber1 PLATO Computer System" . Retrieved 2020-06-06.
  3. Curtin et al. 1972.
  4. Sherwood 2000.
  5. Jones 1976, Section 7.2.
  6. See, for example, PLATO user's guide 1981 , p. 4-56
  7. From TUTOR user's memo 1973 , p. 5
  8. From TUTOR user's memo 1973
  9. Tenczar & Golden 1972.
  10. From TUTOR user's memo 1973
  11. TUTOR user's memo 1973, p. 21.
  12. Stifle 1974.
  13. Sherwood 1974, p. II-1.
  14. From Sherwood 1974 , p. II-11
  15. Sherwood 1974, p. II-9.
  16. From Sherwood 1974 , p. II-3
  17. From Avner 1981 , p. S5
  18. From Avner 1981 , p. S6
  19. From Sherwood 1974 , p. IV-1
  20. Avner 1975, p. C5.
  21. Sherwood 1974, p. IX-3.
  22. Jones 1976.
  23. Sherwood 1974, pp. IV-2, IX-17.
  24. Sherwood 1974, pp. X-1 to X-3 and X-6.
  25. From Sherwood 1974 , p. X-11
  26. From TUTOR user's memo 1973 , p. 17
  27. Underlining from the original, Sherwood 1974 , p. IV-5
  28. From Sherwood 1974 , p. IX-2
  29. Avner 1975, p. 15.
  30. Sherwood 1974, pp. VII-52 to VII-55.
  31. From Avner 1975 , p. 14
  32. From Sherwood 1974 , p. IV-10
  33. Avner 1981, p. C3.
  34. From Avner 1981 , p. C2
  35. Sinder 2018.
  36. Sinder n.d.

Related Research Articles

<span class="mw-page-title-main">String (computer science)</span> Sequence of characters, data type

In computer programming, a string is traditionally a sequence of characters, either as a literal constant or as some kind of variable. The latter may allow its elements to be mutated and the length changed, or it may be fixed. A string is generally considered as a data type and is often implemented as an array data structure of bytes that stores a sequence of elements, typically characters, using some character encoding. String may also denote more general arrays or other sequence data types and structures.

<span class="mw-page-title-main">Smalltalk</span> Object-oriented programming language released first in 1972

Smalltalk is a purely object oriented programming language (OOP) that was originally created in the 1970s for educational use, specifically for constructionist learning, but later found use in business. It was created at Xerox PARC by Learning Research Group (LRG) scientists, including Alan Kay, Dan Ingalls, Adele Goldberg, Ted Kaehler, Diana Merry, and Scott Wallace.

<span class="mw-page-title-main">Text editor</span> Computer software used to edit plain text documents

A text editor is a type of computer program that edits plain text. Such programs are sometimes known as "notepad" software. Text editors are provided with operating systems and software development packages, and can be used to change files such as configuration files, documentation files and programming language source code.

<span class="mw-page-title-main">Character (computing)</span> Primitive data type

In computer and machine-based telecommunications terminology, a character is a unit of information that roughly corresponds to a grapheme, grapheme-like unit, or symbol, such as in an alphabet or syllabary in the written form of a natural language.

<span class="mw-page-title-main">C shell</span> Unix shell

The C shell is a Unix shell created by Bill Joy while he was a graduate student at University of California, Berkeley in the late 1970s. It has been widely distributed, beginning with the 2BSD release of the Berkeley Software Distribution (BSD) which Joy first distributed in 1978. Other early contributors to the ideas or the code were Michael Ubell, Eric Allman, Mike O'Brien and Jim Kulp.

Microsoft BASIC is the foundation software product of the Microsoft company and evolved into a line of BASIC interpreters and compiler(s) adapted for many different microcomputers. It first appeared in 1975 as Altair BASIC, which was the first version of BASIC published by Microsoft as well as the first high-level programming language available for the Altair 8800 microcomputer.

<span class="mw-page-title-main">PEEK and POKE</span> Commands in some high-level programming languages

In computing, PEEK and POKE are commands used in some high-level programming languages for accessing the contents of a specific memory cell referenced by its memory address. PEEK gets the byte located at the specified memory address. POKE sets the memory byte at the specified address. These commands originated with machine code monitors such as the DECsystem-10 monitor; these commands are particularly associated with the BASIC programming language, though some other languages such as Pascal and COMAL also have these commands. These commands are comparable in their roles to pointers in the C language and some other programming languages.

<span class="mw-page-title-main">Adobe Authorware</span>

Adobe Authorware was an elearning authoring tool with its own interpreted, flowchart-based, graphical programming language. Authorware was used for creating interactive elearning programs that could integrate a range of multimedia content, particularly electronic educational technology applications. The flowchart model differentiated Authorware from other authoring tools, such as Adobe Flash and Adobe Director, which rely on a visual stage, time-line and script structure.

The Burroughs Large Systems Group produced a family of large 48-bit mainframes using stack machine instruction sets with dense syllables. The first machine in the family was the B5000 in 1961, which was optimized for compiling ALGOL 60 programs extremely well, using single-pass compilers. The B5000 evolved into the B5500 and the B5700. Subsequent major redesigns include the B6500/B6700 line and its successors, as well as the separate B8500 line.

Dartmouth BASIC is the original version of the BASIC programming language. It was designed by two professors at Dartmouth College, John G. Kemeny and Thomas E. Kurtz. With the underlying Dartmouth Time Sharing System (DTSS), it offered an interactive programming environment to all undergraduates as well as the larger university community.

<span class="mw-page-title-main">IBM System/3</span> IBM midrange computer (1969–1985)

The IBM System/3 was an IBM midrange computer introduced in 1969, and marketed until 1985. It was produced by IBM Rochester in Minnesota as a low-end business computer aimed at smaller organizations that still used IBM 1400 series computers or unit record equipment. The first member of what IBM refers to as their "midrange" line, it also introduced the RPG II programming language. It is the first ancestor in the product line whose current version is the IBM i series and includes the highly successful AS/400.

<span class="mw-page-title-main">PLATO (computer system)</span> Mainframe computer system

PLATO, also known as Project Plato and Project PLATO, was the first generalized computer-assisted instruction system. Starting in 1960, it ran on the University of Illinois's ILLIAC I computer. By the late 1970s, it supported several thousand graphics terminals distributed worldwide, running on nearly a dozen different networked mainframe computers. Many modern concepts in multi-user computing were first developed on PLATO, including forums, message boards, online testing, email, chat rooms, picture languages, instant messaging, remote screen sharing, and multiplayer video games.

<span class="mw-page-title-main">Commodore DOS</span>

Commodore DOS, also known as CBM DOS, is the disk operating system used with Commodore's 8-bit computers. Unlike most other DOSes, which are loaded from disk into the computer's own RAM and executed there, CBM DOS is executed internally in the drive: the DOS resides in ROM chips inside the drive, and is run there by one or more dedicated MOS 6502 family CPUs. Thus, data transfer between Commodore 8-bit computers and their disk drives more closely resembles a local area network connection than typical disk/host transfers.

FOCAL is an interactive interpreted programming language based on JOSS and mostly used on Digital Equipment Corporation (DEC) Programmed Data Processor (PDP) series machines.

MBASIC is the Microsoft BASIC implementation of BASIC for the CP/M operating system. MBASIC is a descendant of the original Altair BASIC interpreters that were among Microsoft's first products. MBASIC was one of the two versions of BASIC bundled with the Osborne 1 computer. The name "MBASIC" is derived from the disk file name MBASIC.COM of the BASIC interpreter.

<span class="mw-page-title-main">Acorn MOS</span> Computer operating system

The Machine Operating System (MOS) or OS is a discontinued computer operating system (OS) used in Acorn Computers' BBC computer range. It included support for four-channel sound, graphics, file system abstraction, and digital and analogue input/output (I/O) including a daisy-chained expansion bus. The system was single-tasking, monolithic and non-reentrant.

<span class="mw-page-title-main">BASICODE</span>

BASICODE was a computer project intended to create a unified standard for the BASIC programming language. BASIC was available on many popular home computers, but there were countless variants that were mostly incompatible with each other. The project was initiated in 1980 by Hobbyscoop, a radio program of the Dutch broadcasting organisation Nederlandse Omroep Stichting (NOS).

Systems Programming Language, often shortened to SPL but sometimes known as SPL/3000, was a procedurally-oriented programming language written by Hewlett-Packard for the HP 3000 minicomputer line and first introduced in 1972. SPL was used to write the HP 3000's primary operating system, Multi-Programming Executive (MPE). Similar languages on other platforms were generically referred to as system programming languages, confusing matters.

<span class="mw-page-title-main">ZX Spectrum character set</span>

The ZX Spectrum character set is the variant of ASCII used in the ZX Spectrum family computers. It is based on ASCII-1967 but the characters ^, ` and DEL are replaced with ↑, £ and ©. It also differs in its use of the C0 control codes other than the common BS and CR, and it makes use of the 128 high-bit characters beyond the ASCII range. The ZX Spectrum's main set of printable characters and system font are also used by the Jupiter Ace computer.

The Hack Computer is a theoretical computer design created by Noam Nisan and Shimon Schocken and described in their book, The Elements of Computing Systems: Building a Modern Computer from First Principles.  In using the term “modern”, the authors refer to a digital, binary machine that is patterned according to the von Neumann architecture model.

References

Further reading