Blitter

From Wikipedia, the free encyclopedia
Jump to navigation Jump to search

A blitter is a circuit, sometimes as a coprocessor or a logic block on a microprocessor, dedicated to the rapid movement and modification of data within a computer's memory. A blitter can copy large quantities of data from one memory area to another relatively quickly, and in parallel with the CPU, while freeing up the CPU's more complex capabilities for other operations. A typical use for a blitter is the movement of a bitmap, such as windows and fonts in a graphical user interface or images and backgrounds in a 2D video game. The name comes from the bit blit operation of the 1973 Xerox Alto,[1] which stands for bit-block transfer.[2] A blit operation is more than a memory copy, because it can involve data that's not byte aligned (hence the bit in bit blit), handling transparent pixels (pixels which should not overwrite the destination), and various ways of combining the source and destination data.

Blitters have largely been superseded by programmable graphics processing units.

History[edit]

In early computers with raster-graphics output, the frame buffer was normally held in main memory and updated via software running on the CPU. For many simple graphics routines, like compositing a smaller image into a larger one (such as for a video game) or drawing a filled rectangle, large amounts of memory had to be manipulated, and many CPU cycles were spent fetching and decoding instructions for short repetitive loops of load/store instructions. For CPUs without caches, the bus requirement for instructions was as significant as data. Further, as a single byte usually held between 2 (for 16-colors) and 8 (for monochrome) pixels, the data was not naturally aligned for the CPU, so extra shifting and masking operations were required.

Blitters in personal computers and video games[edit]

1973: The Xerox Alto, where the term bit blit originated, has a bit block transfer instruction implemented in microcode, making it much faster than the same operation written on the CPU.[1] The microcode was implemented by Dan Ingalls.[1]

1982: The Robotron: 2084 arcade game from Williams Electronics includes two blitter chips which allow the game to have up to 80 simultaneously moving objects.[3] Performance was measured at roughly 910 KB/second.[3] The blitter operates on 4-bit (16 color) pixels where color 0 is transparent, allowing for non-rectangular shapes.[4] Williams used the same blitters in other games from the time period, including Sinistar and Joust.[4]

1984: The MS-DOS compatible Mindset contains a custom VLSI chip to move rectangular sections of a bitmap. The hardware handles transparency and eight modes for combining the source and destination data.[5] The Mindset was claimed to have graphics up to 50x faster than PCs of the time,[6] but the system was not successful.

1985: Commodore's Amiga launches with a blitter co-processor. The first US patent filing to use the term blitter was "Personal computer apparatus for block transfer of bit-mapped image data," assigned to Commodore-Amiga, Inc.[7] The blitter performs a 4 operand boolean operation (typically destination := op(destination, source, mask)).

1986: The TMS34010 is a general purpose 32-bit processor with additional blitter-like instructions for manipulating bitmap data. It is optimized for cases that normally take extra processing on the CPU, such as handling transparent pixels, working with non-byte aligned data, and converting between bit depths. The TMS34010 served as both CPU and GPU for a number of arcade games in the late 1980s and early 1990s, including Hard Drivin', Narc, Smash TV, Mortal Kombat, and NBA Jam, [8] as well as finding use in PC graphics accelerator boards in the 1990s.

1986: The Intel 82786 is a programmable graphics processor which includes a BIT_BLT instruction to move rectangular sections of bitmaps.[9]

1987: The IBM 8514/A display adapter, introduced with the IBM Personal System/2 computers in April 1987, includes bit block transfer hardware.[10]

Atari Blitter chip

1987: Atari introduces a blitter co-processor, stylized as the BLiTTER chip, on the Atari Mega ST 2 computer.[11] It was supported on most later machines (except the Atari TT).

1989: The short-lived Atari Transputer Workstation contains blitter hardware as part of its "Blossom" video system.[12]

Operation[edit]

Sprites (Left) and Masks (Right)

Typically, a computer program puts information into certain registers describing what memory transfer needs to be completed and the logical operations to perform on the data. The CPU then triggers the blitter to begin operating. The CPU is free for other processing while the blitter is working, though the blit running in parallel uses memory bandwidth.

To copy data with transparent portions—such as sprites—a color can be designated to be ignored during the blit (such as color 0). On other systems, a second 1 bit per pixel image may be used as a "mask" to indicate which pixels to transfer and which to leave untouched (see image at right). The mask operates like a stencil. The logical operation is destination := (background AND mask) OR sprite.

Other approaches[edit]

Hardware sprites are small bitmaps that can be positioned independently, composited together with the background on-the-fly by the video chip, so no actual modification of the frame buffer occurs.[13] Sprite systems are more efficient for moving graphics, typically requiring 1/3 the memory cycles because only image data—not CPU instructions—need to be fetched, with the subsequent compositing happening on-chip.[citation needed] The downside of sprites is a limit of moving graphics per scanline, which can range from three (Atari 2600) to eight (Commodore 64 and Atari 8-bit family) to significantly higher for 16-bit arcade hardware and consoles, and the inability to update a permanent bitmap (making them unsuitable for general desktop GUI acceleration).

See also[edit]

References[edit]

  1. ^ a b c Shirriff, Ken. "Restoring YCombinator's Xerox Alto day 5: Microcode tracing with a logic analyzer". Ken Shirriff's Blog.
  2. ^ "BitBlt function". Windows Dev Network. Microsoft. Retrieved 2 October 2016.
  3. ^ a b Wolf, Mark J.P. (June 2012). Before the Crash: Early Video Game History. Wayne State University Press. p. 185. ISBN 9780814334508.
  4. ^ a b Riddle, Sean. "Blitter Information".
  5. ^ Williams, Gregg (April 1984). "Product Preview: The Mindset Personal Computer". Byte Magazine. 9 (4): 278–280.
  6. ^ Anderson, John J. (February 1985). "Mindset Micro: Pushing the envelope, or whatever happened to innovation?". Creative Computing. 11 (2): 50.
  7. ^ "US Patent 4874164 "Personal computer apparatus for block transfer of bit-mapped image data"".
  8. ^ "Game listing for games running on the TMS34010 processor". mamedb.com.
  9. ^ 82786 Graphics Coprocessor User's Manual. Intel. 1988. p. 2-29.
  10. ^ Necasek, Michael. "The 8514/A Graphics Accelerator". OS/2 Museum.
  11. ^ "Atari Mega ST 2". Centre for Computing History.
  12. ^ Rosenthal, Marshal M. (November 1989). "The Transputer Connection: An Exclusive Interview with Perihelion's Dr. Tim King". STart. 4 (4).
  13. ^ Hague, James. "Why Do Dedicated Game Consoles Exist?". Programming in the 21st Century.