GRASS (programming language)

Last updated

GRASS (GRAphics Symbiosis System) is a programming language created to script 2D vector graphics animations. GRASS was similar to BASIC in syntax, but added numerous instructions for specifying 2D object animation, including scaling, translation and rotation over time. These functions were directly supported by the Vector General 3D graphics terminal GRASS was written for. It quickly became a hit with the artistic community who were experimenting with the new medium of computer graphics, and is most famous for its use by Larry Cuba to create the original "attacking the Death Star will not be easy" animation in Star Wars (1977).

Contents

As part of a later partnership with Midway Games, the language was ported to the Midway's Z80-based Z Box. This machine used raster graphics and a form of sprites, which required extensive changes to support, along with animating color changes. This version was known as ZGRASS.

History

GRASS

The original version of GRASS was developed by Tom DeFanti for his 1974 Ohio State University Ph.D. thesis. [1] It was developed on a PDP-11/45 driving a Vector General 3DR display. [1] As the name implies, this was a purely vector graphics machine. GRASS included a number of vector-drawing commands, and could organize collections of them into a hierarchy, applying the various animation effects to whole "trees" of the image at once (stored in arrays). [1]

After graduation, DeFanti moved to the University of Illinois, Chicago Circle. There he joined up with Dan Sandin and together they formed the Circle Graphics Habitat (today known as the Electronic Visualization Laboratory , or EVL). Sandin had joined the university in 1971 and built the Sandin Image Processor, or IP. The IP was an analog computer which took two video inputs, mixed them, colored the results, and then re-created TV output. He described it as the video version of a Moog synthesizer. [1]

DeFanti added the existing GRASS system as the input to the IP, creating the GRASS/Image Processor, which was used throughout the mid-1970s. In order to make the system more useful, DeFanti and Sandin added all sorts of "one-off" commands to the existing GRASS system, but these changes also made the language considerably more idiosyncratic. In 1977 another member of the Habitat, Nola Donato, re-designed many of GRASS's control structures into more general forms, resulting in the considerably cleaner GRASS3. [1]

Larry Cuba's Star Wars work is based on semi-automated filming of a GRASS system running on a Vector General 3D terminal. The VG3D had internal hardware that performed basic transformations - scaling, rotation, etc. - in realtime without interacting with the computer. It is only during the times when new scenery is being presented that the much slower communications with the GRASS language takes place. This can be seen in the sequence, as the initial sections of the film show the Death Star being rotated and scaled very rapidly, while the later sections simulating flight down the trench requires new scenery to be paged in from GRASS "trees". These can be seen appearing in groups.

ZGRASS and UV-1

In 1977, DeFanti was introduced to Jeff Frederiksen, a chip designer working at Dave Nutting Associates. Nutting had been contracted by Midway, the videogame division of Bally, to create a standardized graphics driver chip. They intended to use it in most of their future arcade games, as well as a video game console they were working on which would later turn into the Astrocade. Midway was quite interested in seeing the GRASS language running on their system, and contracted DeFanti to port it to the platform. A number of people at the Habitat, as well as some from Nutting, worked on the project, which they referred to as the Z Box. GRASS3 running on it became ZGRASS. [1]

The Z-Box was a raster graphics machine, unlike the original GRASS systems, so while most of the GRASS3 style was maintained in ZGRASS, it added a number of commands dedicated to raster images. This included an extensive set of bit block transfer commands in order to simulate sprites, something the hardware didn't include. [1] The work would never be released by Midway, but the Circle would produce machines based on it as the Datamax UV-1.

GRASS RT/1

The last version of GRASS was RT/1, a port of GRASS to other platforms that divorced the language from the display model and allowed it to be ported to other platforms. Versions existed for MS-DOS, Microsoft Windows, SGI platform using OpenGL, HP-UX, AIX, Macintosh and Amiga. The language remains similar to the earlier versions, so the reason for the change of name is unclear.

Description

This description is based on the original Bally manuals as well as the ACM description. [2]

Zgrass was based on a standard set of BASIC commands and used most of its syntax. Where Zgrass differed from BASIC was that all commands were in fact functions and returned values, similar to the C programming language. If there was no obvious return value it was expected that a function would return 1 if it succeeded, and 0 if it failed. For instance, the command PRINT PRINT 10 would be illegal in BASIC, but in Zgrass this would print 10 1, the 1 being the value returned by second PRINT, meaning "I successfully output the string '10'".

Programs in Zgrass were referred to as "macros", and stored as strings. Both of these oddities were deliberate, as Zgrass allowed any string to become a program. For instance, MYBOX="BOX 0,0,100,100,2" defines a string (no need for a $ on the variable as in Microsoft BASICs) containing a snippet of Zgrass code. Simply typing MYBOX from that point on would run the command(s) inside. This feature can be used in place of the more traditional GOSUB command from BASIC, but has the added advantage of having a well-defined name as opposed to an opaque line number. In addition, the command remains in the form of a string in memory and can be manipulated at runtime with standard string operations.

Most BASIC interpreters of the era converted the input text into a tokenized version in which each of the commands was replaced by a single number (typically one byte long). This made the program run faster because it didn't have to continually decode the commands from the strings every time. Zgrass's use of string-based macros made this difficult, so they didn't bother with tokenization. Instead, they included a compiler which could be used on any particular macro, speeding it up many times. Programs would often consist of a mix of compiled and uncompiled macros.

Line numbers were optional in Zgrass, and typically only appeared on lines that were the target of a GOTO. Most BASIC interpreters required line numbers for every line of code, but this was due to their use in the "line editor"if you needed to edit a particular line, the only way to refer to it was by number. Zgrass used a more advanced full-screen editor that eliminated this need. Zgrass allowed any string to act as a "line number", GOTO 10 and GOTO MARKER were both valid.

Zgrass also included nameless branches, using the SKIP instruction, which would move forward or back a given number of lines. This is important in Zgrass as the line numbers were optional and different macros might make use of the same labels. For instance, some variation on LOOPSTART is likely to be found in many bits of code, and thus GOTO LOOPSTART might result in a name clash. Using SKIP avoided this possibility.

In keeping with its original purpose as a graphics language, Zgrass included numerous commands for simple drawing. Zgrass's coordinate system had one point for each pixel in the high-resolution mode of Nutting's graphics chip, giving a 320×202 grid. The Astrocade, by design, could only use that chip's low-resolution mode, a 160×101 display. To avoid potential mapping problems, the coordinate space's zero point was placed in the center of the screen. 160 to 160 were valid X locations, and -101 to 101 valid Y locations. For use on the Astrocade you used the positive locations only, whereas on the UV-1 the entire space was available.

Zgrass added a fairly complete set of array functions, as arrays are widely used in graphics. This included the ability to "capture" parts of the display into an array as a bitmap, which could then be manipulated as any other graphic item. This allowed Zgrass to include sprite-like functionality in the language, something the Nutting hardware did not directly include. Another feature the Astrocade did not include was the ability to process arrays with any reasonable speed, so the UV-1 included a Zilog supplied FPU for added performance.

Zgrass included three priorities (called levels) that allowed macros to be run normally, or in "foreground" or "background" levels. This added a simple form of multitasking which was tremendously useful in an animation-oriented language. Game authors could place joystick-reading routines in a macro set to run in the background, and then the joystick would be read automatically whenever the current drawing macro completed. Functions placed in the foreground ran before either, and was often used for timers and other "low latency" needs. Zgrass included a TIMEOUT function that would call macros on a timed basis, making the implementation of timers very easy.

Zgrass also included a series of commands that "covered" CP/M, which allowed the disk to be accessed without exiting to the command prompt. You could easily save out macros to named files, and load them in the same way, allowing you to construct programs by loading up various macros from the disk into one large program. The commands also automatically made a backup copy of every save. Similar features were supported for Compact Cassette storage, but oddly the syntax was not parallel: disk commands were D-something, like DPUT, but tape commands were not T-something, like TPUT, but rather something-TAPE, like PUTTAPE.

With programs constructed from randomly selected modules, Zgrass needed to have better control over its variables than BASIC. In BASIC all variables are "global", so if two subroutines both use the variable I, which is very commonly used as a loop index variable, then they could set each other's values which leads to hard-to-debug problems. Under Zgrass a programmer loading up two modules could easily find that both used I as a loop counter, which could cause problems. To address this issue, Zgrass considered variables named with lowercase letters to be local only to that macro, so I and i were different variables, global and local respectively. Oddly, the examples provided with the language do not make widespread use of this feature, potentially confusing new programmers who might not be aware the feature exists.

Example

<nowiki/>SINCURVE=[PROMPT"WHAT IS THE OFFSET?"INPUTOFFSETx=-160angle=0POINTOFFSET+x,SIN(angle)*80,3angle=angle+2IF(x=x+1)<159,SKIP-2]

This text creates a new macro called SINCURVE that can be called simply by typing SINCURVE into the command prompt, or from other macros or programs. SINCURVE uses two local variables, x and angle, as well as a global variable, OFFSET.

The PROMPT/INPUT is a modification of the original BASIC INPUT which will not ask for the input if the user types it into the command line when calling the macro. In this case, typing SINCURVE will result in the prompt appearing and the program waiting for input, whereas typing SINCURVE 30 will skip the prompt and OFFSET will automatically be assigned 30. This allows a single macro to be used both interactively and within a program as a function.

POINT is an example of one of the many graphics commands included in the Zgrass language. POINT requires an X and Y location, as well as a color. In this example, the user supplied OFFSET moves the x position of the curve on the screen, while the Y position is supplied by the trig function, suitably enlarged for display (in this case, 80 times). The color is supplied in the last input, and in this case is 3. The UV-1 used color registers, so 3 did not imply a particular color, but a color selected from the current palette.

The IF is likewise notable. It places an increment, (x=x+1), in front of the test, a feature not normally available in BASIC. In this case the IF is told to call SKIP -2 if true, which will move back two lines and can be used in place of a GOTO, as there is no line number target.

Notes

    Related Research Articles

    Applesoft BASIC is a dialect of Microsoft BASIC, developed by Marc McDonald and Ric Weiland, supplied with the Apple II series of computers. It supersedes Integer BASIC and is the BASIC in ROM in all Apple II series computers after the original Apple II model. It is also referred to as FP BASIC because of the Apple DOS command FP used to invoke it, instead of INT for Integer BASIC.

    <span class="mw-page-title-main">GW-BASIC</span> Dialect of the BASIC programming language

    GW-BASIC is a dialect of the BASIC programming language developed by Microsoft from IBM BASICA. Functionally identical to BASICA, its BASIC interpreter is a fully self-contained executable and does not need the Cassette BASIC ROM found in the original IBM PC. It was bundled with MS-DOS operating systems on IBM PC compatibles by Microsoft.

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

    The BallyAstrocade is a second-generation home video game console and simple computer system designed by a team at Midway, at that time the videogame division of Bally. It was originally announced as the "Bally Home Library Computer" in October 1977 and initially made available for mail order in December 1977. But due to production delays, the units were first released to stores in April 1978 and its branding changed to "Bally Professional Arcade". It was marketed only for a limited time before Bally decided to exit the market. The rights were later picked up by a third-party company, who re-released it and sold it until around 1984. The Astrocade is particularly notable for its very powerful graphics capabilities for the time of release, and for the difficulty in accessing those capabilities.

    <span class="mw-page-title-main">Datamax UV-1</span>

    The Datamax UV-1 is a pioneering computer designed by a group of computer graphics artists working at the University of Illinois at Chicago, known as the Circle Graphics Habitat. It was primarily the brainchild of Tom DeFanti, who was trying to build a machine capable of running his GRASS programming language at a personal computer price point, a project they referred to as the Z-Box. As time went on the project evolved into a machine intended to be used to make high-quality color graphics for output to videotape, and later as a titling system for use by cable television companies. It represents what seems to be the first dedicated graphics workstation.

    <span class="mw-page-title-main">Atari BASIC</span> Dialect of the BASIC programming language

    Atari BASIC is an interpreter for the BASIC programming language that shipped with the Atari 8-bit family of 6502-based home computers. Unlike most American BASICs of the home computer era, Atari BASIC is not a derivative of Microsoft BASIC and differs in significant ways. It includes keywords for Atari-specific features and lacks support for string arrays, for example.

    Integer BASIC is a BASIC interpreter written by Steve Wozniak for the Apple I and Apple II computers. Originally available on cassette for the Apple I in 1976, then included in ROM on the Apple II from its release in 1977, it was the first version of BASIC used by many early home computer owners.

    Commodore BASIC, also known as PET BASIC or CBM-BASIC, is the dialect of the BASIC programming language used in Commodore International's 8-bit home computer line, stretching from the PET (1977) to the Commodore 128 (1985).

    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.

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

    <span class="mw-page-title-main">Vilnius BASIC</span> Dialect of the BASIC programming language

    Vilnius BASIC, sometimes known as BK BASIC, is a dialect of the BASIC programming language running on the Elektronika BK-0010-01/BK-0011M and UKNC computers. It was developed at Vilnius University, located in Lithuania which was a republic of the Soviet Union at the time.

    HP Time-Shared BASIC is a BASIC programming language interpreter for Hewlett-Packard's HP 2000 line of minicomputer-based time-sharing computer systems. TSB is historically notable as the platform that released the first public versions of the game Star Trek.

    Color BASIC is the implementation of Microsoft BASIC that is included in the ROM of the Tandy/Radio Shack TRS-80 Color Computers manufactured between 1980 and 1991. BASIC is a high level language with simple syntax that makes it easy to write simple programs. Color BASIC is interpreted, that is, decoded as it is run.

    <span class="mw-page-title-main">Simons' BASIC</span>

    Simons' BASIC is an extension to BASIC 2.0 for the Commodore 64 home computer. Written by British programmer David Simons in 1983, who was 16 years old at the time, it was distributed by Commodore as a cartridge.

    Thomas Albert "Tom" DeFanti is an American computer graphics researcher and pioneer. His work has ranged from early computer animation, to scientific visualization, virtual reality, and grid computing. He is a distinguished professor of Computer Science at the University of Illinois at Chicago, and a research scientist at the California Institute for Telecommunications and Information Technology (Calit2).

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

    FutureBasic is a free BASIC compiler for Apple Inc.'s Macintosh.

    SCELBAL, short for SCientific ELementary BAsic Language, is a version of the BASIC programming language released in 1976 for the SCELBI and other early Intel 8008 and 8080-based microcomputers like the Mark-8. Later add-ons to the language included an extended math package and string handling. The original version required 8 kB of RAM, while the additions demanded at least 12 kB.

    <span class="mw-page-title-main">BASIC interpreter</span> Interpreter that enables users to enter and run programs in the BASIC language

    A BASIC interpreter is an interpreter that enables users to enter and run programs in the BASIC language and was, for the first part of the microcomputer era, the default application that computers would launch. Users were expected to use the BASIC interpreter to type in programs or to load programs from storage.

    Wang BASIC is a series of BASIC programming languages for computers from Wang Laboratories. The term can be used to refer to the BASIC on any Wang machine, but is mostly associated with the versions on the Wang 2200 minicomputer series of the early 1970s. When these machines were updated to the VP series in 1976, BASIC-2 was introduced and remained the pattern for future machines in the 2200 series. A planned BASIC-3 was never released.

    CALL/360:BASIC was an IBM dialect of the BASIC programming language for the System/360 and later platforms. It was based on mid-1960s versions of Dartmouth BASIC but added a number of extensions. Most of these were related to file handling, which, at that time, Dartmouth lacked. It also added support for the mathematical symbols found on some IBM terminals, so that <= could be entered directly as . Differences are otherwise minor.

    Acorn System BASIC and Atom BASIC are two closely related dialects of the BASIC programming language developed by Acorn Computers for their early microcomputers like the Acorn System 3 and Acorn Atom. Developed in-house, they have a number of significant idiosyncrasies compared to most BASIC dialects of the home computer era.

    References

    Citations

    Bibliography

    • DeFanti, Thomas; Fenton, Jay; Donato, Nola (August 1978). "BASIC Zgrass—a sophisticated graphics language for the Bally Home Library Computer". Proceedings of the 5th annual conference on Computer graphics and interactive techniques. Vol. 12. ACM SIGGRAPH Computer Graphics. pp. 33–37. doi:10.1145/800248.807366. ISBN   9781450379083. S2CID   8014940.
    • DeFanti, Thomas (November 1980). "Language Control Structures for Easy Electronic Visualization". BYTE.