The mac VM had various ways of moving data between the squeak display surface and the big-endian quickdraw surface. Currently it uses quartz to do that in the 3.8.12 VM. Earlier versions of the code move data by word/bits and bytes from various combinations of 1/2/4/8/16/32 to 1/2/4/8/16/32 Earlier versions of this code used code from the unix version which had limited bit depth mapping algorithms.
On 4-Jun-06, at 12:32 PM, tim Rowledge wrote:
On 4-Jun-06, at 11:16 AM, Bert Freudenberg wrote:
Ah, Squeak bitmaps are BIG endian, not little. The first implementation was 68k mac based and the PPC. Us little endian guys (ARM, x86 etc) had all sorts of fun developing efficient Squeak 'Display' to actual glass transfer routines. You would most likely benefit most from looking at the Mac code for this stuff. You might need to convert the *pixel* format though since not every platform is RGB. RISC OS is little-endian BGR for example, some thing that took a lot of attention to resolve in the early days of Squeak.
Note, though, that the recent bitblt code can deal with both, little *and* big endian RGB. While big endian is standard, little endian is indicated by negative depth values. However, I guess a 2.3 image might not have the in-image support for negative bit depths, yet, and also, it might not call the hasDisplayDepth primitive. Implementing bit shuffling for big endian still is the most compatible way.
I never did manage to get that stuff to work on RISC OS, unfortunately. It certainly doesn't cope with pixel format conversions, for one thing. 2.3 doesn't have image support for it and I don't think VM support went in until about 3.4 or so; could be wrong.
tim
tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Disclaimer: Any errors in spelling, tact, or fact are transmission errors.
-- ======================================================================== === John M. McIntosh johnmci@smalltalkconsulting.com 1-800-477-2659 Corporate Smalltalk Consulting Ltd. http://www.smalltalkconsulting.com ======================================================================== ===