Electromask

Electromask / Mann (PAT)

Electromask and D. W. Mann / GCA pattern-generator files — often called PAT files — are the job language of optical pattern generators used to write photomasks. Those machines expose the plate with a mechanical aperture: each flash is one rectangle of width W, height H, centre (X, Y) and aperture angle A. The file is a flat list of those flashes. There is no hierarchy, no layer table, no text, and no cell names.

The same token language is used by Mann/GCA 1600A, 2600, 3000, 3600/3600F and 4600 machines and by Electromask 2000-class writers. Encoding is usually IBM EBCDIC; ASCII files also exist.

LayoutEditor reads and writes this format. Import always goes onto the active layer. Export writes rectangles only. It is not a general IC exchange format (unlike GDSII) and it is not an e-beam MEBES job (see MEBES).

Using Electromask in the LayoutEditor

A PAT file describes one mask layer. Open, Import and Update therefore follow the same single-layer rules as MEBES.

Open creates a new cell and makes it current. Flashes are added as boxes when the angle is zero, or as four-point polygons when they are rotated, always on the active layer. Import / Attach adds flashes to the current cell on the active layer and keeps existing geometry. Update deletes all elements on the active layer of the current cell, then imports the file onto that layer.

Save writes rectangles in the current cell, including shapes reached through cell references. Layer numbers are not stored; a warning that layer information cannot be stored is reported. Non-rectangles are skipped. Save layer does the same write, but only for shapes on the requested layer.

The file dialog lists the type as Electromask. The default extension is .pat (also .PAT). Three-character extensions that start with 8 or end with m are also treated as Electromask (historical Mann tape names).

A pattern generator can only flash rectangles. Before Save, keep one layer with Extract Layer, or export that layer with Save layer. Split arbitrary polygons into rectangles with Fracture in overlapping-rectangle mode. Flatten is not required: Save walks into cell references and writes the rectangles found there. Texts, paths, and non-rectangular polygons are ignored. Negative centres cannot be stored; those rectangles are skipped with a warning that negative coordinates cannot be stored.

File syntax

A PAT file is a stream of letters plus integer words, not a tagged binary format. A word is a letter (X, Y, H, W, A, and a few others on later machines) immediately followed by digits, for example X43000. Words may be concatenated with no spaces, as in X43000Y22000H100W100A20. A block is one or more words ended by a semicolon; one block is one flash. If a word is omitted, the value from the previous flash is reused (modal). A comment starts with a double quote and runs to the next newline. Comments do not create flashes. A dollar sign marks the end of file; anything after it is ignored. LayoutEditor also stops at end of file if the dollar sign is missing. Leading zeros in a word may be dropped: X115 is the same token as X00115.

The LayoutEditor splits records on the semicolon. Newlines only discard an unfinished comment or line buffer; they are not required between flashes. After a semicolon, the buffer is scanned for the next letter among A, H, W, X and Y (from the second character onward), so a line such as X100Y200W50H20A0; is one block with five words. A block whose first character is a double quote is ignored (a comment that happened to end with a semicolon). The writer emits no spaces and no comments, then a dollar sign and a newline.

Encoding

LayoutEditor writes IBM EBCDIC (code pages 37 / 500 style) by default. Digits, letters A to Z, semicolon, dollar, and space are mapped to EBCDIC. Newline is written as byte A0 hexadecimal.

On read, if an unexpected byte below 130 appears while decoding EBCDIC, the rest of the file is treated as ASCII / Latin-1 and a note that ASCII encoding is used is reported. The reader maps the usual EBCDIC digits and letters plus semicolon (5E hexadecimal), dollar (5B), space (40), minus (60), quote (7F), and several newline bytes (00, 0A, 0D, 15, 16). Unknown high bytes become a question mark.

Units and coordinates

LayoutEditor always treats X, Y, W and H as micrometres, then converts with the current database unit. There is no scale record in the file. A Mann shop tape that used inches or millimetres with an assumed decimal point will come in at the wrong size unless the numbers already mean micrometres.

Angle A is written and read in tenths of a degree: A15 is 1.5°, A0 is 0°. That matches Mann 3000 / 3600 metric angle resolution (0.1°), not the older 1600A integer-degree scale where A34 meant 34°.

Geometry in the LayoutEditor uses GDS-style axes: plus X to the right, plus Y up. The centre of the flash is (X, Y). At angle 0, W is the size along X and H along Y; the shape is stored as a box from (X − W/2, Y − H/2) with size W by H. At a non-zero angle the same rectangle is stored as a polygon rotated by A/10 degrees, counter-clockwise in LayoutEditor coordinates.

Historic Mann hardware used a left-handed stage (origin at the lower right, plus X to the left, plus A clockwise). LayoutEditor does not mirror X or invert the angle. A round-trip inside the LayoutEditor is consistent. A file meant for a physical Mann 3000 may need a mask-shop origin or mirror.

Mann 1600A, 2600 and 3000 data stay in the first quadrant (X and Y greater than or equal to zero). Mann 3600 and 4600 allow signed centres. LayoutEditor reads a leading minus; it does not write negative centres.

Reference — pattern file

The words used on all machine families are X and Y for the aperture centre, W for width along X at angle 0, H for height along Y at angle 0, and A for aperture angle in tenths of a degree. LayoutEditor reads and writes all of them as integers. A semicolon ends a block and produces one flash. A quoted comment to end of line is skipped on read and is not written. A dollar sign ends the file and is both read and written.

A complete first flash typically sets every motion word, for example X43000Y22000H100W100A20; Later flashes only repeat words that changed, for example a line with only Y21000; or only X44000; The second of those is still a full rectangle: Y comes from the new word, and X, H, W and A are kept from the previous block.

GCA/Mann 3600-class tapes add extra syntax that LayoutEditor does not implement. Unknown letters are skipped and only X, Y, H, W and A from the same block are applied, so an R/I array is not expanded. The first record may identify the file as 3600 format with a quoted T3600, T360M (metric) or T360E (English inches); those lines are comments and are skipped. R followed by a count would repeat flashes in X, and I followed by a distance would be the X increment between repeats; both are ignored. Signed X and Y (four-quadrant stage) are read if a minus is present, but are not written. An explicit decimal point in a word is not parsed.

Historically, 3600 assumed a decimal point at the end of A unless one was given (A45 is 45°, A.4 is 0.4°), and at the start of metric X, Y, H and W unless one was given (H2 and H200 both mean 0.2 mm, while H2.0 means 2.0 mm). LayoutEditor never applies those assumed points; it always uses the integer as micrometres and A as tenths of a degree.

The table below is what a physical generator will accept. LayoutEditor does not clip to these ranges.

Machine Units Stage X,Y Aperture H,W Angle
Metric 1600A/2600 mm 0 … 100, step 0.005 0.005 … 3.000, step 0.005 0 … 89°, step 1°
English 1600A/2600 inch 0 … 4, step 0.00025 0.00025 … 0.120, step 0.00025 0 … 89°, step 1°
Metric 3000 mm 0 … 100, step 0.001 0.004 … 3.000, step 0.001 0 … 89.9°, step 0.1°
English 3000 inch 0 … 4, step 0.00005 0.004 … 0.120, step 0.00005 0 … 89.9°, step 0.1°
Metric 3600/4600 mm −75 … +75, step 0.00025 0.002 … 1.500, step 0.0005 0 … 89.9°, step 0.1°

On 1600A, 2600 and 3000 the last digit of a word must match the machine step (for example an English 1600A word ends in 0, 2, 5 or 7). LayoutEditor does not enforce that.

Example

ASCII equivalent of a short metric-3000-style job (LayoutEditor writes the same tokens in EBCDIC). Units are micrometres; A is in tenths of a degree.

"two flashes and a modal Y move
X1000Y2000W100H50A0;
X1200;
Y2100A15;
$

The first block is a 100 by 50 micrometre rectangle centred at (1000, 2000) with angle 0. The second reuses Y, W, H and A and only moves the centre to X 1200. The third keeps that X and the size, sets Y to 2100, and sets the angle to 1.5°.

What is not stored / not read

Layer number, datatype, cell name, and hierarchy as instances are not stored; subcell rectangles are flattened into flashes on write. Texts, paths, circles, trapezoids, and any polygon that is not a rectangle are skipped. Negative centres are not written. Mann 3600 headers, R/I repeat arrays, and assumed decimal-point scaling are not applied. Inch or millimetre shop scaling is not used: LayoutEditor numbers are always micrometres. The left-handed stage axes of the original Mann hardware are not applied.

See also

  • MEBES — e-beam mask writer jobs (also one layer per file)
  • GDSII — hierarchical IC layout exchange
  • Extract Layer — drop other layers before mask export
  • Fracture — split polygons into rectangles