Path: utzoo!utgpu!water!watmath!clyde!bellcore!rutgers!njin!princeton!phoenix!haahr
From: haahr@phoenix.Princeton.EDU (Paul Gluckauf Haahr)
Newsgroups: comp.arch
Subject: Re: Sw vs. Hw BitBlit.
Summary: macintosh character rendering speed (7000 char/sec) is very fast
Message-ID: <3449@phoenix.Princeton.EDU>
Date: 11 Aug 88 06:52:40 GMT
References: <1988Aug3.153415.9033@utzoo.uucp> <118@leibniz.UUCP>
Reply-To: haahr@princeton.edu (Paul Gluckauf Haahr)
Organization: Princeton University, Princeton NJ
Lines: 50

In article <118@leibniz.UUCP> hwt@leibniz.UUCP (Henry Troup) writes:
> The estimable Mr. Spencer (got to keep all the Henry's straight)
> queries if anyone has numbers for how much character i/o happens
> as against graphics on a graphics (bitmap) terminal.
> I don't know, but I do remember that character writing speed was a
> big thing for MacIntosh QuickDraw (9k characters per second). It's
> in the Byte interview in 1984.

The Byte reference is to the February 1984 issue, and the rendering
speed given was actually 7K characters/second.  (the information is
given on page 37 and repeated on page 76).  Still, remarkably fast for
a 68000, even given that this was done in hand coded assembly
language.  The 9K seemed about a factor 5 too high, which is why I
looked the article up.  7000 chars/sec is still faster than I would
have expected.

They do not give sizes of the characters, and say in the article that
it is irrelevant, but that still probably assumes something like 9x14.
Much larger characters would probably hurt performace.  Later Macs may
be faster (if someone recoded the QuickDraw stuff to use the bit field
instructions, the Mac II could scream).

By way of comparision, the Pike/Locanthi/Reiser "Hardware/Software
Tradeoffs for Bitmap Graphics on the Blit" paper gives numbers (page
146) that work out to 2400 chars/sec for the blit, 900 chars/sec for
the Sun-1, and 2950 for the Sun-2.  This assumes rendering one
character at a time.  Locanthi's fastest example from the EUUG "Fast
bitblt() with asm() and cpp" paper gives 6200 chars per second for a 16
MHz, 2 wait state 68020.  Again, this is for one bitblt() call per
character.

My monochrome sun-3/60 (68020, 20 MHz, bwtwo, with the normal, not high
resolution, monitor), using the large console font (gallant.r.19) comes
out to about 3200 chars/sec.  I have no idea if they render more than
one character at once.  This is a very large font, however, and the
output routine is in the prom monitor.  I did not try to write a
program to test pixrect character speeds on a normal sized font.

My own bitblt, on the same sun-3/60, for an 8x14 font, gives 8100
chars/sec, if characters are rendered individually.  If characters are
batched up and bitblt() is called only once, the speed is > 16000
chars/sec.  This code is a combination of c (with inline assembly for
fetching the characters from the font bitmap and bitblt()s narrower
than one word) and compile-on-the-fly code for bitblt()s spanning word
boundaries.

The real point:  the Macintosh, with no hardware assist, and hand-coded
assembly, draws characters very fast.

paul haahr princeton!haahr or haahr@princeton.edu