HOME

TheInfoList



OR:

MAD (Michigan Algorithm Decoder) is a
programming language A programming language is a system of notation for writing computer programs. Most programming languages are text-based formal languages, but they may also be graphical. They are a kind of computer language. The description of a programming ...
and
compiler In computing, a compiler is a computer program that translates computer code written in one programming language (the ''source'' language) into another language (the ''target'' language). The name "compiler" is primarily used for programs tha ...
for the
IBM 704 The IBM 704 is a large digital mainframe computer introduced by IBM in 1954. It was the first mass-produced computer with hardware for floating-point arithmetic. The IBM 704 ''Manual of operation'' states: The type 704 Electronic Data-Proce ...
and later the
IBM 709 The IBM 709 was a computer system, initially announced by IBM in January 1957 and first installed during August 1958. The 709 was an improved version of its predecessor, the IBM 704, and was the third of the IBM 700/7000 series of scientific co ...
,
IBM 7090 The IBM 7090 is a second-generation transistorized version of the earlier IBM 709 vacuum tube mainframe computer that was designed for "large-scale scientific and technological applications". The 7090 is the fourth member of the IBM 700/7000 se ...
,
IBM 7040 The IBM 7040 was a historic but short-lived model of transistor computer built in the 1960s. History It was announced by IBM in December 1961, but did not ship until April 1963. A later member of the IBM 700/7000 series of scientific compute ...
,
UNIVAC 1107 The UNIVAC 1100/2200 series is a series of compatible 36-bit computer systems, beginning with the UNIVAC 1107 in 1962, initially made by Sperry Rand. The series continues to be supported today by Unisys Corporation as the ClearPath Dorado Seri ...
,
UNIVAC 1108 The UNIVAC 1100/2200 series is a series of compatible 36-bit computer systems, beginning with the UNIVAC 1107 in 1962, initially made by Sperry Rand. The series continues to be supported today by Unisys Corporation as the ClearPath Dorado Serie ...
, Philco 210-211, and eventually the IBM S/370 mainframe computers. Developed in 1959 at the
University of Michigan , mottoeng = "Arts, Knowledge, Truth" , former_names = Catholepistemiad, or University of Michigania (1817–1821) , budget = $10.3 billion (2021) , endowment = $17 billion (2021)As o ...
by Bernard Galler, Bruce Arden and Robert M. Graham, MAD is a variant of the
ALGOL ALGOL (; short for "Algorithmic Language") is a family of imperative computer programming languages originally developed in 1958. ALGOL heavily influenced many other languages and was the standard method for algorithm description used by the ...
language. It was widely used to teach programming at colleges and universities during the 1960s and played a minor role in the development of CTSS,
Multics Multics ("Multiplexed Information and Computing Service") is an influential early time-sharing operating system based on the concept of a single-level memory.Dennis M. Ritchie, "The Evolution of the Unix Time-sharing System", Communications of ...
, and the
Michigan Terminal System The Michigan Terminal System (MTS) is one of the first time-sharing computer operating systems.. Developed in 1967 at the University of Michigan for use on IBM S/360-67, S/370 and compatible mainframe computers, it was developed and used by a ...
computer
operating system An operating system (OS) is system software that manages computer hardware, software resources, and provides common daemon (computing), services for computer programs. Time-sharing operating systems scheduler (computing), schedule tasks for ef ...
s. The archives at the
Bentley Historical Library The Bentley Historical Library is the campus archive for the University of Michigan and is located on the University of Michigan's North Campus in Ann Arbor. It was established in 1935 by the regents of the University of Michigan. Its mission ...
of the University of Michigan contain reference materials on the development of MAD and MAD/I, including three linear feet of printouts with hand-written notations and original printed manuals.


MAD, MAD/I, and GOM

There are three MAD compilers: # Original MAD, the compiler developed in 1959 at the University of Michigan for the
IBM 704 The IBM 704 is a large digital mainframe computer introduced by IBM in 1954. It was the first mass-produced computer with hardware for floating-point arithmetic. The IBM 704 ''Manual of operation'' states: The type 704 Electronic Data-Proce ...
and later the
IBM 709 The IBM 709 was a computer system, initially announced by IBM in January 1957 and first installed during August 1958. The 709 was an improved version of its predecessor, the IBM 704, and was the third of the IBM 700/7000 series of scientific co ...
and
IBM 7090 The IBM 7090 is a second-generation transistorized version of the earlier IBM 709 vacuum tube mainframe computer that was designed for "large-scale scientific and technological applications". The 7090 is the fourth member of the IBM 700/7000 se ...
mainframe A mainframe computer, informally called a mainframe or big iron, is a computer used primarily by large organizations for critical applications like bulk data processing for tasks such as censuses, industry and consumer statistics, enterprise ...
computers running the University of Michigan Executive System (UMES) and the
Compatible Time-Sharing System The Compatible Time-Sharing System (CTSS) was the first general purpose time-sharing operating system. Compatible Time Sharing referred to time sharing which was compatible with batch processing; it could offer both time sharing and batch proces ...
(CTSS)
operating system An operating system (OS) is system software that manages computer hardware, software resources, and provides common daemon (computing), services for computer programs. Time-sharing operating systems scheduler (computing), schedule tasks for ef ...
s.''A User's Reference Manual For The Michigan Algorithm Decoder (MAD) For the IBM 7090''
Digital Computer Laboratory, Graduate College, University of Illinois, 1962, 221 pages
''The Michigan Algorithm Decoder (The MAD Manual)''
Bruce W. Arden, Revised Edition 1966
In the mid-1960s MAD was ported at the
University of Maryland The University of Maryland, College Park (University of Maryland, UMD, or simply Maryland) is a public land-grant research university in College Park, Maryland. Founded in 1856, UMD is the flagship institution of the University System of ...
to the
UNIVAC 1108 The UNIVAC 1100/2200 series is a series of compatible 36-bit computer systems, beginning with the UNIVAC 1107 in 1962, initially made by Sperry Rand. The series continues to be supported today by Unisys Corporation as the ClearPath Dorado Serie ...
. Versions of MAD were also available for the
Philco Philco (an acronym for Philadelphia Battery Company) is an American electronics industry, electronics manufacturer headquartered in Philadelphia. Philco was a pioneer in battery, radio, and television production. In 1961, the company was purchased ...
210-211 and
UNIVAC 1107 The UNIVAC 1100/2200 series is a series of compatible 36-bit computer systems, beginning with the UNIVAC 1107 in 1962, initially made by Sperry Rand. The series continues to be supported today by Unisys Corporation as the ClearPath Dorado Seri ...
. # MAD/I, an "extended" version of MAD for the
IBM System/360 The IBM System/360 (S/360) is a family of mainframe computer systems that was announced by IBM on April 7, 1964, and delivered between 1965 and 1978. It was the first family of computers designed to cover both commercial and scientific applic ...
series of computers running under the
Michigan Terminal System The Michigan Terminal System (MTS) is one of the first time-sharing computer operating systems.. Developed in 1967 at the University of Michigan for use on IBM S/360-67, S/370 and compatible mainframe computers, it was developed and used by a ...
(MTS). Work on the new compiler started in 1965 as part of the ARPA sponsored CONCOMP project at the University of Michigan. As work progressed it gradually became clear that MAD/I was a new language independent of the original 7090 version of MAD.''The MAD/I Manual''
Bolas, Springer, and Srodawa, CONCOMP Technical Report 32, 1970, University of Michigan, Ann Arbor, 194 pages
# GOM (Good Old MAD), a reimplementation of the original 7090 MAD for the
IBM System/370 The IBM System/370 (S/370) is a model range of IBM mainframe computers announced on June 30, 1970, as the successors to the System/360 family. The series mostly maintains backward compatibility with the S/360, allowing an easy migration path ...
series of mainframe computers running the
Michigan Terminal System The Michigan Terminal System (MTS) is one of the first time-sharing computer operating systems.. Developed in 1967 at the University of Michigan for use on IBM S/360-67, S/370 and compatible mainframe computers, it was developed and used by a ...
(MTS). GOM was created in the early 1980s by Don Boettner at the University of Michigan Computing Center. ''GOM Manual''
Don Boettner, University of Michigan Computing Center, Ann Arbor, June 1989


History

While MAD was motivated by
ALGOL 58 ALGOL 58, originally named IAL, is one of the family of ALGOL computer programming languages. It was an early compromise design soon superseded by ALGOL 60. According to John Backus The Zurich ACM-GAMM Conference had two principal motives in pro ...
, it does not resemble ALGOL 58 in any significant way.''Computer Languages - Principles and History''
/ref> Programs written in MAD included MAIL,
RUNOFF Runoff, run-off or RUNOFF may refer to: * RUNOFF, the first computer text-formatting program * Runoff or run-off, another name for bleed, printing that lies beyond the edges to which a printed sheet is trimmed * Runoff or run-off, a stock marke ...
, one of the first text processing systems, and several other utilities all under
Compatible Time-Sharing System The Compatible Time-Sharing System (CTSS) was the first general purpose time-sharing operating system. Compatible Time Sharing referred to time sharing which was compatible with batch processing; it could offer both time sharing and batch proces ...
(CTSS). Work was done on a design for a MAD compiler for
Multics Multics ("Multiplexed Information and Computing Service") is an influential early time-sharing operating system based on the concept of a single-level memory.Dennis M. Ritchie, "The Evolution of the Unix Time-sharing System", Communications of ...
, but it was never implemented. The following is an interesting quote from ''An Interview with
Brian Kernighan Brian Wilson Kernighan (; born 1942) is a Canadian computer scientist. He worked at Bell Labs and contributed to the development of Unix alongside Unix creators Ken Thompson and Dennis Ritchie. Kernighan's name became widely known through co- ...
'' when he was asked "What hooked you on programming?": :I think that the most fun I had programming was a summer job at Project MAC at MIT in the summer of 1966, where I worked on a program that created a job tape for the brand new GE 645 in the earliest days of Multics. I was writing in MAD, which was much easier and more pleasant than the FORTRAN and COBOL that I had written earlier, and I was using CTSS, the first time-sharing system, which was infinitely easier and more pleasant than punch cards. MAD was quite fast compared to some of the other compilers of its day. Because a number of people were interested in using the FORTRAN language and yet wanted to obtain the speed of the MAD compiler, a system called MADTRAN (written in MAD) was developed. MADTRAN was simply a translator from FORTRAN to MAD, which then produced machine code. MADTRAN was distributed through SHARE. MAD/I has a syntactic structure similar to
ALGOL 60 ALGOL 60 (short for ''Algorithmic Language 1960'') is a member of the ALGOL family of computer programming languages. It followed on from ALGOL 58 which had introduced code blocks and the begin and end pairs for delimiting them, representing a ...
together with important features from the original MAD and from
PL/I PL/I (Programming Language One, pronounced and sometimes written PL/1) is a procedural, imperative computer programming language developed and published by IBM. It is designed for scientific, engineering, business and system programming. I ...
. MAD/I was designed as an extensible language. It was available for use under MTS and provided many new ideas which made their way into other languages, but MAD/I compilations were slow and MAD/I never extended itself into widespread use when compared to the original 7090 MAD. GOM is essentially the 7090 MAD language modified and extended for the 360/370 architecture with some judicious tailoring to better fit current programming practices and problems. The MTS Message System was written in GOM.


MAD, MAD Magazine, and Alfred E. Neuman

In a pre-release version of the original MAD, as a reference to MAD's namesake,
MAD magazine Mad, mad, or MAD may refer to: Geography * Mad (village), a village in the Dunajská Streda District of Slovakia * Mád, a village in Hungary * Adolfo Suárez Madrid–Barajas Airport, by IATA airport code * Mad River (disambiguation), several ...
, when a program contained too many compile time errors the compiler would print a full-page picture of Alfred E. Neuman using
ASCII art ASCII art is a graphic design technique that uses computers for presentation and consists of pictures pieced together from the 95 printable (from a total of 128) characters defined by the ASCII Standard from 1963 and ASCII compliant char ...
. The caption read, "See this man about your program--He might want to publish it. He never worries--but from the looks of your program, you should." This feature was not included in the final official version. However, it was included in the production version for the IBM 7040. And Bernie Galler remembers: :By the time we designed the language that we thought would be worth doing and for which we could do a compiler, we couldn't call it Algol any more; it really was different. That's when we adopted the name MAD, for the Michigan Algorithm Decoder. We had some funny interaction with the Mad Magazine people, when we asked for permission to use the name MAD. In a very funny letter, they told us that they would take us to court and everything else, but ended the threat with a P.S. at the bottom - "Sure, go ahead." Unfortunately, that letter is lost.


"Hello, world" example

The " hello, world" example program prints the string "Hello, world" to a terminal or screen display. PRINT FORMAT HELLOW VECTOR VALUES HELLOW=$13h0Hello, world*$ END OF PROGRAM The first character of the line is treated as logical carriage control, in this example the character "0" which causes a double-spaced line to be printed. Alternatively, contractions can be used, and the compiler will expand them in the listing: P'T HELLOW V'S HELLOW=$13h0Hello, world*$ E'M


Language elements

MAD and GOM, but not MAD/I, are composed of the following elements:


Input format

MAD programs are a series of statements written on punched cards, generally one statement per card, although a statement can be continued to multiple cards. Columns 1-10 contains an optional statement label, comments or remarks are flagged using the letter "R" in column 11, and columns 73-80 are unused and could contain a sequence identifier. Spaces are not significant anywhere other than within character constants. For GOM input is free form with no sequence field and lines may be up to 255 characters long; lines that start with an asterisk (*) are comments; and lines that start with a plus-sign (+) are continuation lines.


Names

Variable names, function names, and statement labels have the same form, a letter followed by zero to five letters or digits. Function names end with a period. All names can be subscripted (the name followed by parentheses, with multiple subscripts separated by commas). For GOM names may be up to 24 characters long and may include the underscore (_) character. Few keywords in the language are reserved words since most are longer than six letters or are surrounded by periods. There is a standard set of abbreviations which can be used to replace the longer words. These consist of the first and last letters of the keywords with an apostrophe between them, such as W'R for WHENEVER and D'N for DIMENSION.


Data types

MAD uses the term "mode" for its data types. Five basic modes are supported: * Integer written with or without a scale factor (1, +1, -1, 1K10, 1K) or as octal constants (to 7777777777777K); * Floating Point written with or without an exponent (0., 1.5, -0.05, +100.4, -4., .05E-2, -.05E2, 5E02, 5.E2); *Boolean (1B for true and 0B for false); * Statement Label, and * Function Name written as a name followed by a period (SQRT.). The mode of a constant can be redefined by adding the character M followed by a single digit at the end of the constant, where 0 indicates floating point, 1 integer, 2 boolean, 3 function name, and 4 statement label. For GOM six additional modes are added: CHARACTER, SHORT INTEGER, BYTE INTEGER, LONG INTEGER, POINTER, and DYNAMIC RECORD. Alphabetic or character constants are stored as integers and written using the dollar sign as a delimiter ($ABCDEF$) with double dollar-signs used to enter a true dollar sign ($$$.56$ is 56 cents). Strings longer than six characters are represented using arrays.


Arrays and matrices

* There is no limit on the number of dimensions. * Negative and zero as well as floating-point subscripts are allowed. * Matrices are storied in consecutive memory locations in the order determined by varying the rightmost subscript first. * Matrices may be referenced using a subscript for each dimension, NAME(s1,s2,s3), or using a single subscript, NAME(s1). * Input-output lists, VECTOR VALUES statements, and some subroutines allow the use of block notation, which has the form A,...,B or A...B, which is a reference to the entire region from A to B. inclusive. In terms of a vector, A(1)...A(N) would be A(1), A(2), A(3), ..., A(N). * There are facilities that allow changing dimensions at run-time; permitting the programmer to vary the location of the initial element in an array within the overall block which has been set aside for the array; and allowing an arbitrary storage mapping to be specified.


Operators


Arithmetic operators

* .ABS. (unary absolute value) * + (unary identity) * - (unary negation) * + (addition) * - (subtraction) * * (multiplication) * / (division) * .P. (exponentiation) * .N. (bitwise negation) * .A. (bitwise and) * .V. (bitwise or) * .EV. (bitwise exclusive or) * .LS. (left shift) * .RS. (right shift) * .REM. (remainder, GOM only)


Pointer operators (GOM only)

* : (selection) * .LOC. (location) * .IND. (indirection)


Relational operators

* .L. (less than) * .LE. (less than or equal) * .E. (equal) * .NE. (not equal) * .G. (greater than) * .GE. (greater than or equal)


Boolean operators

* .NOT. (unary logical not) * .OR. (logical or) * .EXOR. (logical exclusive or) * .AND. (logical and) * .THEN. (implies) * .EQV. (equivalence)


Bit operators (GOM only)

* .SETBIT. (set bit to 1) * .RESETBIT. (reset bit to 0) * .BIT. (test bit)


Declaration statements

Variables may be implicitly or explicitly declared. By default all implicitly declared variables are assumed to be floating point. The NORMAL MODE IS statement may be used to change this default. * FLOATING POINT var1, var2, ... (may include dimension information) * INTEGER var1, var2, ... (may include dimension information) * BOOLEAN var1, var2, ... (may include dimension information) * FUNCTION NAME ''name''1, ''name''2, ... (may include dimension information) * STATEMENT LABEL ''label''1, ''label''2, ... (may include dimension information) * MODE NUMBER ''n'', var1, var2, ... (may include dimension information) * NORMAL MODE IS ''type-name'' (INTEGER, BOOLEAN, FLOATING POINT, STATEMENT LABEL, or FUNCTION NAME) * NORMAL MODE IS MODE NUMBER ''n'' * DIMENSION ''variable''(''max-dimension'') (declares an array from 0...''max-dimension'') * DIMENSION ''variable''(''from''...''to'') * DIMENSION ''variable''(''subscript1'', ''subscript2'', ..., ''subscriptn'') (declares a multidimensional array) * VECTOR VALUES ''array''(''n'') = c1, c2, c3, ... * VECTOR VALUES ''array''(''m'') ... ''array''(''n'') = constant * DOUBLE STORAGE MODE ''mode-list'' (doubles the amount of storage allocated for the modes listed) * EQUIVALENCE (''a''1, ''a''2, ..., ''a''m), ... * PROGRAM COMMON ''a'', ''b'', ''c'', ... (may include dimension information) * ERASABLE ''a'', ''b'', ''c'', ... (may include dimension information) * PARAMETER ''A''1(''B''1), ''A''2(''B''2), ..., ''A''n(''B''n) * SYMBOL TABLE VECTOR ''variable'' * FULL SYMBOL TABLE VECTOR ''variable'' * LISTING ON (the default) * LISTING OFF * REFERENCES ON * REFERENCES OFF (the default)


Executable statements

* ''variable'' = ''expression'' (assignment) * TRANSFER TO ''statement-label'' * WHENEVER ''boolean-expression'', ''executable-statement'' (simple conditional) * WHENEVER ''boolean-expression'' (compound conditional) ** OR WHENEVER ''boolean-expression'' ** OTHERWISE ** END OF CONDITIONAL * CONTINUE (do nothing statement, usually used to carry a statement label) * THROUGH ''statement-label'', FOR VALUES OF ''variable'' = ''expression-list'' (iteration) :(where ''variable'' may be any mode including floating-point) * SET LIST TO ''array-element'', ''expression'' * SAVE DATA ''list'' * RESTORE DATA ''list'' * PAUSE NO. ''octal-integer'' (stop execution, print an octal number on the operators console, allow manual restart) * END OF PROGRAM (the last statement in all MAD programs)


Input and output statements

* READ DATA (reads data using a self-defining format, ''var1''=''value1'', ''var2''=''value2'', ..., ''varN''=''valueN'' * READ AND PRINT DATA (similar to READ DATA, but data read is echoed to the printer) * READ FORMAT ''format'', ''list'' * READ BCD TAPE ''n'', ''format'', ''list'' * READ BINARY TAPE ''n'', ''list'' * PRINT RESULTS ''list'' * PRINT BCD RESULTS ''list'' * PRINT OCTAL RESULTS ''list'' * PRINT COMMENT $''string''$ (first character of string is carriage control) * PRINT FORMAT ''format'', ''list'' * PRINT ON LINE FORMAT ''format'', ''list'' (display a message for the machine operator) * WRITE BCD TAPE ''n'', ''format'', ''list'' * WRITE BINARY TAPE ''n'', ''list'' * PUNCH FORMAT ''format'', ''list'' * LOOK AT FORMAT ''format'', ''list'' (read data without advancing to next record) * REWIND TAPE ''n'' * END OF FILE TAPE ''n'' * BACKSPACE RECORD OF TAPE ''n'' * BACKSPACE RECORD OF TAPE ''n'', IF LOAD POINT TRANSFER TO ''statement'' * BACKSPACE FILE OF TAPE ''n'' * BACKSPACE FILE OF TAPE ''n'', IF LOAD POINT TRANSFER TO ''statement'' * SET LOW DENSITY TAPE ''n'' * SET HIGH DENSITY TABLE ''n'' * REWIND TAPE ''n'' * UNLOAD TAPE ''n'' * FORMAT VARIABLE ''list'' (declaration, may include dimension information)


Functions

Function names end with a period. Internal and external functions are supported. Internal functions are compiled as part of the program in which they are used and share declarations and variables with the main program. External functions are compiled separately and do not share declarations and variables. A one statement definition of internal functions is permitted. Recursive functions are permitted, although the function must do some of the required saving and restoring work itself. * INTERNAL FUNCTION ''function-name''.(''argument-list'') = ''expression'' (single statement definition) * INTERNAL FUNCTION ''function-name''.(''argument-list'') * EXTERNAL FUNCTION ''function-name''.(''argument-list'') * ENTRY TO NAME ''name''. * END OF FUNCTION (last statement in a multiple line definition) * FUNCTION RETURN ''expression'' * ERROR RETURN (force an error return to a statement or to the operating system, if no error statement is given as last argument of the call) * SAVE RETURN * RESTORE DATA * RESTORE RETURN * EXECUTE ''procedure''.(''argument-list'') (call a non-single valued function)


Operator definition and redefinition

One of the most interesting features in MAD is the ability to extend the language by redefining existing operators, defining new operators, or defining new data types (modes). The definitions are made using MAD declaration statements and assembly language mnemonics included following the declaration up to the END pseudo-instruction that implement the operation. * DEFINE BINARY OPERATOR ''defined-op'', PRECEDENCE ''rank'' ''existing-op'' MODE STRUCTURE ''mode-options'' * DEFINE UNARY OPERATOR ''defined-op'', PRECEDENCE ''rank'' ''existing-op'' MODE STRUCTURE ''mode-options'' * MODE STRUCTURE ''mode-no'' = ''mode-no'' ''existing-op'' ''mode-no'' * MODE STRUCTURE ''mode-no'' = ''mode-no'' ''existing-op'' ''mode-no'' SAME SEQUENCE AS ''mode-no'' ''existing-op'' ''mode-no'' where: * ''rank'' is one of SAME AS, LOWER THAN, or HIGHER THAN; and * ''mode-options'' are the options that appear on the MODE STRUCTURE statement. Three pre-defined packages of definitions (MATRIX, DOUBLE PRECISION, and COMPLEX) are available for inclusion in MAD source programs using the INCLUDE statement. * INCLUDE ''package''


See also

*
ALGOL 58 ALGOL 58, originally named IAL, is one of the family of ALGOL computer programming languages. It was an early compromise design soon superseded by ALGOL 60. According to John Backus The Zurich ACM-GAMM Conference had two principal motives in pro ...
*
ALGOL 60 ALGOL 60 (short for ''Algorithmic Language 1960'') is a member of the ALGOL family of computer programming languages. It followed on from ALGOL 58 which had introduced code blocks and the begin and end pairs for delimiting them, representing a ...


Notes


References

* ''An Abbreviated description of the MAD compiler language'', Fernando J. Corbató,
Jerome H. Saltzer Jerome Howard "Jerry" Saltzer (born October 9, 1939) is an American computer scientist. Career Jerry Saltzer received an ScD in Electrical Engineering from MIT in 1966. His dissertation Traffic Control in a Multiplexed System was advised by ...
, Neil Barta, and Thomas N. Hastings, M.I.T. Computation Center Memorandum CC-213, June, 1963. * ''CLSYS, a program to facilitate the use of the MAD translator for large (class-size) batches'', Jerome H. Saltzer, M.I.T. Computation Center Memorandum CC-204. February, 1963. * ''A Computer Primer for the Mad Language'', Elliott Irving Organick, 1961.
''Internal organization of the MAD translator''
Arden, B. W., Galler, B. A. and Graham, R. M., pp. 28–31, CACM Volume 4 No. 1 (Jan 1961) * ''An Introduction To Algorithmic Methods Using The MAD Language'', Alan B. Marcovitz and Earl J. Schweppe, Macmillan, 1966.
''An Introduction to Digital Computers and the MAD Language''
Brice Carnahan, University of Michigan.
''The Language of Computers''
Bernard A. Galler, University of Michigan, McGraw-Hill, 1962.
''MAD at Michigan: its function & features''
Arden, B. W., Galler, B. A., and Graham, R. M., pp27–28, Datamation, Volume 7 No. 12 (Dec 1961) * ''Flow Charts of The Michigan Algorithm Decoder'', by G. B. Smith, SHARE General Program Library, SHARE Distribution Number 1327 PA, 1961


External links


Eric Raymond's retrocompiler for MAD




– Has a CTSS environment that includes the MIT version of MAD. {{DEFAULTSORT:Mad (Programming Language) ALGOL 58 dialect Procedural programming languages Programming languages created in 1959