On 12/14/05, Greg Brown <[EMAIL PROTECTED]> wrote:
> There is a wealth of knowledge on Mr. Ritchie's home page for anyone > interested. Indeed. I got a kick out of his story involving Penn and Teller and a practical joke at Bell Labs. It also mentioned Rob Pike which reminded me of another 21 year old story. At Siggraph '84, Rob Pike, Leo Guibas, and Dan Ingalls gave a tutorial on bitmap graphics. Lots of interesting stuff was presented. Dan Ingalls, who was responsible for the basic BitBLT (Bit Block Transfer) graphics primitive on the original Xerox Alto Smalltalk implementation talked about that and went on to unusual applications such as using bitblt for character recognition. I can't exactly recall what Guibas covered. Rob Pike talked about the implementation of bitblt on the blit terminal. I was intrigued to see that another person taking the class was Bill Atkinson. This was just after the original Macintosh had been introduced, and Bill was pretty famous as the guru behind Quickdraw, the Mac's graphics engine. Bill tended to do things the hard way. He was one of the select few who Steve Jobs had brought to Xerox Parc to see the demo of the Alto and Smalltalk, and had figured that they were doing pretty sophisticated clipping at a low level in order to do overlapping windows, so he invented the concept of regions in Quickdraw which supported arbitrary non-retangular clipping. Atkinson was the sole developer of Quickdraw, and most of the tricks were documented in his head. There's a famous story of his having a pretty serious car accident. Jobs rushed to the hospital to see him and ask if he was still alright, and his reply was "Don't worry Steve, I still remember regions." http://www.folklore.org/StoryView.py?project=Macintosh&story=I_Still_Remember_Regions.txt&topic=QuickDraw The irony is that the Alto/Smalltalk did no such complicated clipping, it just relied on drawing the windows in z-order, perhaps to an offscreen buffer. Anyway, I seated myself a few rows behind Atkinson, and proceeded to enjoy the tutorial. One of the complications of BitBlt was/is that it deals with quite a few variations. It would move retangular blocks of bits (B/W pixels) which needed to be shifted, and combined with existing bits in the framebuffer and a mask according to various boolean combination rules. Optimizing this was a challenge in balancing speed vs. code space in implementing the innermost loop. Usually this was done by picking a few common cases to optimize by having special inner loops and implement the others with slow code which included quite a few conditional branches. Pike talked about this problem and then said that on the blit, he simply dynamically compiled optimized inner loop code. I watched as Atkinson's head popped up and then sank down to rest on the table for a few seconds! -- Rick DeNatale Visit the Project Mercury Wiki Site http://www.mercuryspacecraft.com/ -- TriLUG mailing list : http://www.trilug.org/mailman/listinfo/trilug TriLUG Organizational FAQ : http://trilug.org/faq/ TriLUG Member Services FAQ : http://members.trilug.org/services_faq/
