%---------------------------------------------------------------------------- % Magic Maintainer's Manual #3 %---------------------------------------------------------------------------- \NeedsTeXFormat{LaTeX2e}[1994/12/01] \documentclass[letterpaper,twoside,12pt]{article} \usepackage{epsfig,times} \setlength{\textwidth}{8.5in} \addtolength{\textwidth}{-2.0in} \setlength{\textheight}{11.0in} \addtolength{\textheight}{-2.0in} \setlength{\oddsidemargin}{0in} \setlength{\evensidemargin}{0pt} \setlength{\topmargin}{-0.5in} \setlength{\headheight}{0.2in} \setlength{\headsep}{0.3in} \setlength{\topskip}{0pt} \def\hinch{\hspace*{0.5in}} \def\starti{\begin{center}\begin{tabbing}\hinch\=\hinch\=\hinch\=hinch\hinch\=\kill} \def\endi{\end{tabbing}\end{center}} \def\ii{\>\>\>} \def\mytitle{Magic Maintainer's Manual \#3: Display Styles, Colormaps, and Glyphs} %---------------------------------------------------------------------------- \begin{document} \makeatletter \newcommand{\ps@magic}{% \renewcommand{\@oddhead}{\mytitle\hfil\today}% \renewcommand{\@evenhead}{\today\hfil\mytitle}% \renewcommand{\@evenfoot}{\hfil\textrm{--{\thepage}--}\hfil}% \renewcommand{\@oddfoot}{\@evenfoot}} \newcommand{\ps@mplain}{% \renewcommand{\@oddhead}{}% \renewcommand{\@evenhead}{}% \renewcommand{\@evenfoot}{\hfil\textrm{--{\thepage}--}\hfil}% \renewcommand{\@oddfoot}{\@evenfoot}} \makeatother \pagestyle{magic} \thispagestyle{mplain} \begin{center} {\bfseries \Large \mytitle} \\ \vspace*{0.5in} {\itshape Robert N. Mayo} \\ {\itshape John Ousterhout} \\ \vspace*{0.5in} Computer Science Division \\ Electrical Engineering and Computer Sciences \\ University of California \\ Berkeley, CA 94720 \\ \vspace*{0.25in} This tutorial corresponds to Magic version 7. \\ \end{center} \vspace*{0.5in} {\noindent\bfseries\large Tutorials to read first:} \starti \> All of them. \endi {\noindent\bfseries\large Commands introduced in this tutorial:} \starti \> {\itshape (None)} \endi {\noindent\bfseries\large Macros introduced in this tutorial:} \starti \> {\itshape (None)} \endi \vspace*{0.75in} \section{Introduction} This document gives overall information about the files that tell Magic how to display information on the screen. There are three types of files that contain display information: display styles files, color-map files, and glyph files. \section{Display Styles} Display styles files describe how to draw rectangular areas and text. A single file contains a large number of display styles. Each display style contains two kinds of information: a) how to modify pixels (which bits of the pixel should be changed and what their new value(s) should be); and b) which pixels to modify. Part b) consists of things like ``fill the entire area,'' or ``modify only those pixels in the area that are given by a particular stipple pattern,'' or ``draw a dashed-line around the area's outline.'' In the case of text, ``which pixels to modify'' is determined by the font for the text, which is not part of the display style, so the display style information for this is ignored. See the manual page {\bfseries dstyle~(5)} for details on the format of display styles files. Display styles are designed to take into account both the characteristics of certain technologies and the characteristics of certain displays. For example, a bipolar process may require information to be displayed very differently than a MOS process, and a black-and-white display will be used much differently than a color display. Thus there can be many different display styles files, each corresponding to a particular class of technologies and a class of displays. The names of styles files reflect these classes: each display styles file has a name of the form {\itshape x}{\bfseries .}{\itshape y}{\bfseries .dstyle}, where {\itshape x} is the technology class (given by the {\bfseries styletype} line in the {\bfseries styles} section of the technology file), and {\itshape y} is the class of display. Each display driver knows its display class; the driver initialization routine sets an internal Magic variable with the display class to use. Right now we have two display styles files: {\bfseries mos.7bit.dstyle} and {\bfseries mos.bw.dstyle}. Both files contain enough different styles to handle a variety of MOS processes, including both nMOS and CMOS (hence the {\bfseries mos} field). {\bfseries Mos.7bit.dstyle} is designed for color displays with at least seven bits of color per pixel, while {\bfseries mos.bw.dstyle} is for black-and-white displays (stipple patterns are used instead of colors). \section{Color Maps} The display styles file tells how to modify pixels, but this doesn't completely specify the color that will be displayed on the screen (unless the screen is black-and-white). For color displays, the pixel values are used to index into a {\itshape color map}, which contains the red, green, and blue intensity values to use for each pixel value. The values for color maps are stored in color-map files and can be edited using the color-map-editing window in Magic. See {\bfseries cmap~(5)} for details on the format of color-map files. Each display styles file uses a separate color map. Unfortunately, some monitors have slightly different phosphors than others; this will result in different colors if the same intensity values are used for them. To compensate for monitor differences, Magic supports multiple color maps for each display style, depending on the monitor being used. The monitor type can be specified with the {\bfseries -m} command line switch to Magic, with {\bfseries std} as the default. Color-map files have names of the form {\itshape x}{\bfseries .}{\itshape y}{\bfseries .}{\itshape z} {\bfseries .cmap}, where {\itshape x} and {\itshape y} have the same meaning as for display styles and {\itshape z} is the monitor type. Over the last few years monitor phosphors appear to have standardized quite a bit, so almost all monitors now work well with the {\bfseries std} monitor type. The color map {\bfseries mos.7bit.std.cmap} is the standard one used at Berkeley. \section{Transparent and Opaque Layers} One of the key decisions in defining a set of display styles for a color display is how to use the bits of a pixel (this section doesn't apply to black-and-white displays). One option is to use a separate bit of each pixel (called a {\itshape bit plane}) for each mask layer. The advantage of this is that each possible combination of layer overlaps results in a different pixel value, and hence a different color (if you wish). Thus, for example, if metal and poly are represented with different bit planes, poly-without-metal, metal-without-poly, poly-and-metal, and neither-poly-nor-metal will each cause a different value to be stored in the pixel. A different color can be used to display each of these combinations. Typically, the colors are chosen to present an illusion of transparency: the poly-and-metal color is chosen to make it appear as if metal were a transparent colored foil placed on top of poly. You can see this effect if you paint polysilicon, metal1, and metal2 on top of each other in our standard technologies. The problem with transparent layers is that they require many bits per pixel. Most color displays don't have enough planes to use a different one for each mask layer. Another option is to use a group of planes together. For example, three bits of a pixel can be used to store seven mask layers plus background, with each mask layer corresponding to one of the combinations of the three bits. The problem with this scheme is that there is no way to represent overlaps: where there is an overlap, one of the layers must be displayed at the expense of the others. We call this scheme an {\itshape opaque} one since when it is used it appears as if each layer is an opaque foil, with the foils lying on top of each other in some priority order. This makes it harder to see what's going on when there are several mask layers in an area. The display styles files we've designed for Magic use a combination of these techniques to get as much transparency as possible. For example, our {\bfseries mos.7bit.dstyle} file uses three bits of the pixel in an opaque scheme to represent polysilicon, diffusion, and various combinations of them such as transistors. Two additional bits are used, one each, for the two metal layers, so they are transparent with respect to each other and the poly-diff combinations. Thus, although only one poly-diff combination can appear at each point, it's possible to see the overlaps between each of these combinations and each combination of metal1 and metal2. Furthermore, all of these styles are overridden if the sixth bit of the pixel is set. In this case the low order five bits no longer correspond to mask layers; they are used for opaque layers for things like labels and cell bounding boxes, and override any mask information. Thus, for example, when metal1 is displayed it only affects one bit plane, but when labels are displayed, the entire low-order six bits of the pixel are modified. It's important that the opaque layers like labels are drawn after the transparent things that they blot out; this is guaranteed by giving them higher style numbers in the display styles files. Finally, the seventh bit of the pixel is used for highlights like the box and the selection. All 64 entries in the color map corresponding to pixel values with this bit set contain the same value, namely pure white. This makes the highlights appear opaque with respect to everything else. However, since they have their own bit plane which is completely independent of anything else, they can be drawn and erased without having to redraw any of the mask information underneath. This is why the box can be moved relatively quickly. On the other hand, if Magic erases a label it must redraw all the mask information in the area because the label shared pixel bits with the mask information. Thus, the scheme we've been using for Magic is a hierarchical combination of transparent and opaque layers. This scheme is defined almost entirely by the styles file, so you can try other schemes if you wish. However, you're likely to have problems if you try anything too radically different; we haven't tried any schemes but the one currently being used so there are probably some code dependencies on it. For more information on transparent and opaque layers, see the paper ``The User Interface and Implementation of an IC Layout Editor,'' which appeared in {\itshape IEEE Transactions on CAD} in July 1984. \section{Glyphs} Glyphs are small rectangular bit patterns that are used in two places in Magic. The primary use for glyphs is for programmable cursors, such as the shapes that show you which corner of the box you're moving and the various tools described in Tutorial \#3. Each programmable cursor is stored as a glyph describing the pattern to be displayed in the cursor. The second use of glyphs is by the window package: the little arrow icons appearing at the ends of scroll bars are stored as glyphs, as is the zoom box in the lower-left corner of the window. We may eventually use glyphs in a menu interface (but don't hold your breath). Glyphs are stored in ASCII glyph files, each of which can hold one or more glyph patterns. Each glyph is represented as a pattern of characters representing the pixels in the glyph. Each character selects a display style from the current display styles file; the display style indicates the color to use for that pixel. See the manual page {\bfseries glyphs~(5)} for details on the syntax of glyphs files. The window glyphs are stored in files of the form {\bfseries windows}{\itshape XX}{\bfseries .glyphs}. The {\itshape XX} indicates how wide the glyphs are, and is set by the graphics driver for a particular display. We started out with a {\bfseries windows7.glyphs} and a {\bfseries windows11.glyphs}. Since then, display resolution has increased greatly so we have also created a {\bfseries windows14.glyphs} and a {\bfseries windows22.glyphs}. The positions of the various glyphs in these files is important, and is defined in the {\bfseries window} module of Magic. Programmable cursors are stored in files named {\itshape x}{\bfseries .glyphs}, where {\itshape x} is determined by the device driver for the display. Displays capable of supporting full-color cursors use {\bfseries color.glyphs}; displays that can only support monochrome cursors used {\bfseries bw.glyphs}. The order of the various glyphs in these files is important. It is defined by the files {\bfseries styles.h} in the {\bfseries misc} module of Magic. \end{document}