--- XFree86-3.3.6/xc/config/cf/xfree86.cf.m68k Fri Sep 20 19:53:41 2002 +++ XFree86-3.3.6/xc/config/cf/xfree86.cf Fri Sep 20 20:24:35 2002 @@ -123,6 +123,9 @@ #ifndef XF86SvgaDrivers #define XF86SvgaDrivers mga s3v #endif +#ifndef XF86Vga16Drivers +#define XF86Vga16Drivers generic +#endif #ifndef XF86Vga2Drivers #define XF86Vga2Drivers generic #endif @@ -133,8 +136,17 @@ * are supported on this platform. */ #ifdef Mc68020Architecture +#if defined(LinuxArchitecture) #ifndef XF68FBDevServer #define XF68FBDevServer YES +#define XF68FBDev77C32 NO +#define XF68FBDevIMSTT NO +#define XF68FBDevMach64 NO +#define XF68FBDevPermedia2 NO +#endif +#endif +#ifndef BuildXF86Setup +#define BuildXF86Setup NO #endif #endif --- XFree86-3.3.6/xc/programs/Xserver/hw/xfree68/fbdev/Imakefile.m68k Wed Jun 2 11:40:47 1999 +++ XFree86-3.3.6/xc/programs/Xserver/hw/xfree68/fbdev/Imakefile Fri Sep 20 20:25:41 2002 @@ -56,13 +56,14 @@ INCLUDES = -I../common -I../os-support -I$(XF86COMSRC) -I$(XF86OSSRC) -I. \ -I$(SERVERSRC)/mfb -I$(SERVERSRC)/ilbm -I$(SERVERSRC)/afb \ - -I$(SERVERSRC)/mi -I$(SERVERSRC)/include -I$(XINCLUDESRC) + -I$(SERVERSRC)/mi -I$(SERVERSRC)/include -I$(XINCLUDESRC) \ + -I$(EXTINCSRC) NormalLibraryObjectRule() NormalLibraryTarget(fbdev,$(OBJS)) LintLibraryTarget(fbdev,$(SRCS)) NormalLintTarget($(SRCS)) -SpecialCObjectRule(fbdev,NullParameter,$(FB_DEFINES)) +SpecialCObjectRule(fbdev,NullParameter,$(FB_DEFINES) ExtensionDefines) InstallLinkKitLibrary(fbdev,$(LINKKITDIR)/drivers) --- XFree86-3.3.6/xc/programs/Xserver/hw/xfree68/Imakefile.m68k Wed Jun 2 11:40:44 1999 +++ XFree86-3.3.6/xc/programs/Xserver/hw/xfree68/Imakefile Fri Sep 20 20:25:43 2002 @@ -10,8 +10,23 @@ SCREENS = fbdev +ACCELDIRS = + +#if XF68FBDev77C32 + ACCELDIRS+= 77c32blt +#endif +#if XF68FBDevIMSTT + ACCELDIRS+= imstt +#endif +#if XF68FBDevMach64 + ACCELDIRS+= mach64 +#endif +#if XF68FBDevPermedia2 + ACCELDIRS+= pm2 +#endif + SUBDIRS = os-support common $(SCREENS) doc $(XF86SETUPDIR) etc LinkKit \ - 77c32blt mach64 imstt pm2 + $(ACCELDIRS) XF86CONFIG = XF86Config --- XFree86-3.3.6/xc/programs/Xserver/afb/Imakefile.m68k Sat Jan 25 04:13:33 1997 +++ XFree86-3.3.6/xc/programs/Xserver/afb/Imakefile Fri Sep 20 20:25:44 2002 @@ -2,6 +2,11 @@ XCOMM $XConsortium: Imakefile,v 1.38 94/03/11 18:47:47 dpw Exp $ #include +#ifdef Mc68020Architecture +C2PSRC = chunkyc2p.s +C2POBJ = chunkyc2p.o +#endif + SRCS1 = afbgc.c afbwindow.c afbfont.c afbfillrct.c afbpntwin.c afbpixmap.c \ afbimage.c afbline.c afbbres.c afbhrzvert.c afbbresd.c afbpushpxl.c \ afbzerarc.c afbfillarc.c afbfillsp.c afbsetsp.c afbscrinit.c \ @@ -18,7 +23,7 @@ afbfillarc.o afbply1rct.o afbtileC.o afbtileG.o afbfillrct.o \ afbpolypnt.o afbmisc.o afbbstore.o afbbresd.o afbimggblt.o \ afbpushpxl.o afbplygblt.o afbtegblt.o afbpntwin.o afbpntarea.o \ - afbbres.o afbhrzvert.o afbline.o afbseg.o + afbbres.o afbhrzvert.o afbline.o afbseg.o $(C2POBJ) INCLUDES = -I. -I../cfb -I../mfb -I../mi -I../include -I$(XINCLUDESRC) \ -I$(FONTINCSRC) $(EXTRAINCLUDES) @@ -33,6 +38,10 @@ NormalLibraryTarget(afb,$(OBJS)) LintLibraryTarget(afb,$(SRCS1)) NormalLintTarget($(LINTDEFS) $(SRCS1)) + +#ifdef Mc68020Architecture +NormalAsmObjectRule() +#endif ObjectFromSpecialSource(afbseg,afbline,-DPOLYSEGMENT) --- XFree86-3.3.6/xc/programs/Xserver/afb/afbbitblt.c.m68k Sat Jan 25 04:13:34 1997 +++ XFree86-3.3.6/xc/programs/Xserver/afb/afbbitblt.c Fri Sep 20 20:25:46 2002 @@ -364,88 +364,38 @@ RegionPtr afbCopyPlane(pSrcDrawable, pDstDrawable, pGC, srcx, srcy, width, height, dstx, dsty, plane) -DrawablePtr pSrcDrawable, pDstDrawable; -register GC *pGC; -int srcx, srcy; -int width, height; -int dstx, dsty; -unsigned long plane; + DrawablePtr pSrcDrawable, pDstDrawable; + register GC *pGC; + int srcx, srcy; + int width, height; + int dstx, dsty; + unsigned long plane; { - int alu; - RegionPtr prgnExposed = NULL; - unsigned long old_planemask; - PixmapPtr pPixmap = NULL; + RegionPtr prgnExposed = NULL; + + if (pSrcDrawable->depth == 1) { + prgnExposed = miCopyPlane(pSrcDrawable, pDstDrawable, pGC, srcx, srcy, + width, height, dstx, dsty, plane); + } else { + int old_alu; + unsigned long old_planemask; - if (pDstDrawable->depth == 1) { old_planemask = pGC->planemask; pGC->planemask = plane; - if ((pGC->fgPixel & 1) == 1 && (pGC->bgPixel & 1) == 0) { - prgnExposed = (*pGC->ops->CopyArea)(pSrcDrawable, pDstDrawable, - pGC, srcx, srcy, width, height, dstx, dsty); + old_alu = pGC->alu; + if ((pGC->fgPixel & 1) == 0 && (pGC->bgPixel & 1) == 1) { + pGC->alu = afbInverseAlu[old_alu]; } else if ((pGC->fgPixel & 1) == (pGC->bgPixel & 1)) { unsigned char rop; afbReduceRop(pGC->alu, pGC->fgPixel, 1, 1, &rop); - alu = pGC->alu; pGC->alu = rop; - prgnExposed = (*pGC->ops->CopyArea)(pSrcDrawable, pDstDrawable, pGC, - srcx, srcy, width, height, dstx, - dsty); - pGC->alu = alu; - } else { /* need to invert the src */ - alu = pGC->alu; - pGC->alu = afbInverseAlu[alu]; - prgnExposed = (*pGC->ops->CopyArea)(pSrcDrawable, pDstDrawable, pGC, - srcx, srcy, width, height, dstx, - dsty); - pGC->alu = alu; } + prgnExposed = (*pGC->ops->CopyArea)(pSrcDrawable, pDstDrawable, pGC, + srcx, srcy, width, height, dstx, + dsty); + pGC->alu = old_alu; pGC->planemask = old_planemask; - } else { - int free_pixmap = FALSE; - PixmapPtr pBitmap = (PixmapPtr)pSrcDrawable; - ScreenPtr pScreen = pSrcDrawable->pScreen; - GCPtr pGC1; - - if (pSrcDrawable == pDstDrawable || - pSrcDrawable->type == DRAWABLE_WINDOW || pSrcDrawable->depth != 1) { - /* Copy a plane from source drawable to a tmp 1-bit deep pixmap */ - /* XXX: Range check width and height */ - pBitmap = (*pScreen->CreatePixmap)(pScreen, width, height, 1); - - if (!pBitmap) - return(NULL); - pGC1 = GetScratchGC(1, pScreen); - if (!pGC1) { - (*pScreen->DestroyPixmap)(pBitmap); - return(NULL); - } - ValidateGC((DrawablePtr)pBitmap, pGC1); - (void)afbBitBlt(pSrcDrawable, (DrawablePtr)pBitmap, pGC1, srcx, srcy, - width, height, 0, 0, afbDoBitbltCopy, plane); - free_pixmap = TRUE; - } -#if 0 - else { - /* XXX: could cope with N-deep pixmap source case without using tmp - * src bitmap by setting up a scratch pixmap header and fiddle - * around with the pbits pointer. - */ - } -#endif - afbReduceOpaqueStipple(pGC->fgPixel, pGC->bgPixel, pGC->planemask, - pGC->depth, afbRropsOS); - (void)afbBitBlt((DrawablePtr)pBitmap, pDstDrawable, pGC, 0, 0, width, - height, dstx, dsty, afbCopy1ToN, pGC->planemask); - if (free_pixmap) { - (*pScreen->DestroyPixmap)(pBitmap); - FreeScratchGC(pGC1); - } - - if (afbGetGCPrivate(pGC)->fExpose) - prgnExposed = miHandleExposures(pSrcDrawable, pDstDrawable, pGC, srcx, - srcy, width, height, dstx, dsty, - plane); } return prgnExposed; } @@ -462,15 +412,10 @@ BoxPtr pbox = REGION_RECTS(prgnDst); int r; - for (r = 0; r < numRects; r++, pbox++, pptSrc++) { - int dx = pptSrc->x; - int dy = pptSrc->y; - - if (alu == GXcopy) - afbOpaqueStippleAreaCopy(pDst, 1, pbox, alu, (PixmapPtr)pSrc, dx, dy, - afbRropsOS, planemask); - else - afbOpaqueStippleAreaGeneral(pDst, 1, pbox, alu, (PixmapPtr)pSrc, dx, - dy, afbRropsOS, planemask); - } + if (alu == GXcopy) + afbOpaqueStippleAreaCopy(pDst, numRects, pbox, alu, (PixmapPtr)pSrc, 0, 0, + afbRropsOS, planemask); + else + afbOpaqueStippleAreaGeneral(pDst, numRects, pbox, alu, (PixmapPtr)pSrc, 0, + 0, afbRropsOS, planemask); } --- XFree86-3.3.6/xc/programs/Xserver/afb/afbimage.c.m68k Sun Aug 18 01:45:40 1996 +++ XFree86-3.3.6/xc/programs/Xserver/afb/afbimage.c Fri Sep 20 20:25:47 2002 @@ -8,6 +8,29 @@ #include "afb.h" #include "maskbits.h" #include "servermd.h" +#include + +#ifdef __mc68000__ +typedef unsigned char *PLANEPTR; + +struct BitMap { + unsigned short BytesPerRow; + unsigned short Rows; + unsigned char Flags; + unsigned char Depth; + unsigned short pad; + PLANEPTR Planes[8]; +}; + +typedef struct c2pStruct { + struct BitMap *bmap; + unsigned short startX, startY, width, height; + unsigned char *ChunkyBuffer; + unsigned short ChunkyPitch; +} c2pStr, *c2pPtr; + +extern void ChunkyToPlanar(c2pPtr); +#endif void afbPutImage(pDraw, pGC, depth, x, y, width, height, leftPad, format, pImage) @@ -23,52 +46,57 @@ if ((width == 0) || (height == 0)) return; - if (format != ZPixmap || depth == 1 || pDraw->depth == 1) { + if ((format == XYPixmap) && (depth != 1) && (depth != 8)) { + miPutImage(pDraw, pGC, depth, x, y, width, height, leftPad, format, + pImage); + return; + } + + if ((format != ZPixmap) || (depth == 1) || (pDraw->depth == 1)) { pPixmap = GetScratchPixmapHeader(pDraw->pScreen, width+leftPad, height, - depth, depth, - BitmapBytePad(width+leftPad), - (pointer)pImage); + 1, 1, BitmapBytePad(width+leftPad), + (pointer)pImage); if (!pPixmap) return; - afbGetGCPrivate(pGC)->fExpose = FALSE; + afbGetGCPrivate(pGC)->fExpose = FALSE; if (format == XYBitmap) (void)(*pGC->ops->CopyPlane)((DrawablePtr)pPixmap, pDraw, pGC, leftPad, - 0, width, height, x, y, 1); - else { -#if 0 - /* XXX: bit plane order wronge ! */ + 0, width, height, x, y, 1); + else if (depth == 1) { + (void)(*pGC->ops->CopyArea)((DrawablePtr)pPixmap, pDraw, pGC, leftPad, 0, + width, height, x, y); + } else { + int plane, bytesPer; + void (*doBitBlt)(); + pPixmap->drawable.depth = 1; pPixmap->drawable.bitsPerPixel = 1; switch (pGC->alu) { - case GXcopy: - doBitBlt = afbDoBitbltCopy; - break; - case GXxor: - doBitBlt = afbDoBitbltXor; - break; - case GXcopyInverted: - doBitBlt = afbDoBitbltCopyInverted; - break; - case GXor: - doBitBlt = afbDoBitbltOr; - break; - default: - doBitBlt = afbDoBitbltGeneral; - break; + case GXcopy: + doBitBlt = afbDoBitbltCopy; + break; + case GXxor: + doBitBlt = afbDoBitbltXor; + break; + case GXcopyInverted: + doBitBlt = afbDoBitbltCopyInverted; + break; + case GXor: + doBitBlt = afbDoBitbltOr; + break; + default: + doBitBlt = afbDoBitbltGeneral; + break; } - for (plane = (1L << (pPixmap->drawable.depth - 1)); plane; - plane >>= 1) { + bytesPer = (int)height * BitmapBytePad(width + leftPad); + for (plane = (1L << (depth - 1)); plane; plane >>= 1, pImage += bytesPer) { + pPixmap->devPrivate.ptr = pImage; (void)afbBitBlt((DrawablePtr)pPixmap, pDraw, pGC, leftPad, 0, - width, height, x, y, doBitBlt, plane); - /* pDraw->devKind += sizeDst; */ + width, height, x, y, doBitBlt, plane); } -#else - (void)(*pGC->ops->CopyArea)((DrawablePtr)pPixmap, pDraw, pGC, leftPad, - 0, width, height, x, y); -#endif } afbGetGCPrivate(pGC)->fExpose = TRUE; @@ -95,6 +123,10 @@ PixelType *pdstBase; int widthDst; int depthDst; +#ifdef __mc68000__ + struct BitMap bmap; + c2pStr c2p; +#endif /* Create a tmp pixmap */ pPixmap = (pScreen->CreatePixmap)(pScreen, width, height, depth); @@ -104,8 +136,30 @@ afbGetPixelWidthSizeDepthAndPointer((DrawablePtr)pPixmap, widthDst, sizeDst, depthDst, pdstBase); +#ifdef __mc68000__ + if (depth == 8) { + bmap.Depth = depthDst; + bmap.Rows = pPixmap->drawable.height; + bmap.BytesPerRow = BitmapBytePad(pPixmap->drawable.width); + bmap.Planes[0] = (PLANEPTR)pdstBase; + bmap.Planes[1] = (PLANEPTR)(pdstBase + sizeDst); + bmap.Planes[2] = (PLANEPTR)(pdstBase + sizeDst * 2); + bmap.Planes[3] = (PLANEPTR)(pdstBase + sizeDst * 3); + bmap.Planes[4] = (PLANEPTR)(pdstBase + sizeDst * 4); + bmap.Planes[5] = (PLANEPTR)(pdstBase + sizeDst * 5); + bmap.Planes[6] = (PLANEPTR)(pdstBase + sizeDst * 6); + bmap.Planes[7] = (PLANEPTR)(pdstBase + sizeDst * 7); + c2p.bmap = &bmap; + c2p.startX = 0; + c2p.startY = 0; + c2p.width = PixmapWidthInPadUnits(width + leftPad, depth) << 2; + c2p.height = height; + c2p.ChunkyBuffer = pImage; + c2p.ChunkyPitch = 0; + ChunkyToPlanar(&c2p); + } else { +#endif widthSrc = PixmapWidthInPadUnits(width, depth); - /* XXX: if depth == 8, use fast chunky to planar assembly function.*/ if (depth > 4) { start_srcshift = 24; shift_step = 8; @@ -139,6 +193,9 @@ *pdst++ = dst; } } /* for (d = ...) */ +#ifdef __mc68000__ + } /* depth != 8 */ +#endif afbGetGCPrivate(pGC)->fExpose = FALSE; (void)(*pGC->ops->CopyArea)((DrawablePtr)pPixmap, pDraw, pGC, leftPad, 0, --- XFree86-3.3.6/xc/programs/Xserver/afb/chunkyc2p.s.m68k Fri Sep 20 20:25:50 2002 +++ XFree86-3.3.6/xc/programs/Xserver/afb/chunkyc2p.s Fri Sep 20 20:25:50 2002 @@ -0,0 +1,1112 @@ +| 100% systemfriendly ChunkyToPlanar converter for use with intuition +| screens in applications/games/whatever. +| +| Coded in 1994 by Morten Eriksen. +| Reach me through email: mortene@stud.unit.no. +| +| Use and modify as you like - give credit where appropriate. +| +| Timings on my %A1200 with 68EC020 and 32-bit fastram: +| +| Testcase Dimensions This routine C='s WritePixelArray8 +| +| 1 320x256x5 - 15 frames (0.30 seconds) 33 frames +| 2 320x256x8 - 16 frames (0.32 seconds) 51 frames +| 3 640x512x4 - 63 frames (1.26 seconds) 100 frames +| 4 1024x1024x1 - 194 frames (3.88 seconds) 101 frames +| 5 752x578x8 - 88 frames (1.76 seconds) 250 frames +| +| Please help me speed up this sucker - the main bottleneck is the +| 'convert32pixels' subroutine (e.g. in the 3rd testcase, 60 out of +| 63 frames are spent in this routine). As you can see, it gets worse +| on less bitplanes (compared to C='s routine) - but on 8-bit bitmaps it's +| about 3 times as fast. If you improve it, be sure to repost the improved +| version to Usenet, or send it to me through email. +| +|------------------------------------------------------------------------------ +|------------------------------------------------------------------------------ +| This routine takes a buffer of chunkybytes and transform it into +| planar datas, which are directly inserted into the destination BitMap. +| +| As a replacement for C='s WritePixelArray8 routine, this one is on average +| about twice as fast and works directly on bitmaps (instead of RastPorts). +| All cases handled (any width and height > 0, no alignment restrictions). +| Works on OCS/ECS/AGA, all Kickstarts and any MC680x0 CPU. +| The downside is that it does not do clipping and does not work with +| interleaved bitmaps (support for interleaved bitmaps should be piece of +| cake to implement, though). +|------------------------------------------------------------------------------ +| +| C interface: +| +| extern void ChunkyToPlanar(struct c2pStruct *); +| +| struct c2pStruct +| { +| struct BitMap *bmap; +| UWORD startX, startY, width, height; +| UBYTE *chunkybuffer; +| } c2p; +| +| c2p.bmap = mybitmap; +| c2p.startX = x0; +| c2p.startY = y0; +| c2p.width = x1 - x0 + 1; +| c2p.height = y1 - y0 + 1; +| c2p.chunkybuffer = chunkybytes; +| +| ChunkyToPlanar(&c2p); +| CopySBitMap(mywindow->RPort->Layer); +|------------------------------------------------------------------------------ + +| ** BitMap struct ** +BytesPerRow = 0 | UWORD +Rows = 2 | UWORD +Flags = 4 | UBYTE +Depth = 5 | UBYTE +Pad = 6 | UWORD +Planes = 8 | PLANEPTRs [8] + +| ** c2p struct ** + +bmap = 0 | struct BitMap * +startX = 4 | UWORD +startY = 6 | UWORD +width = 8 | UWORD +height = 10 | UWORD +chunkybuffer = 12 | UBYTE * +chunkypitch = 16 | UWORD +|------------------------------------------------------------------------------ +.stabs "chunkyc2p.S",100,0,0,.Ltext0 +.text +.Ltext0: +.stabs "void:t(0,1)=(0,1)",128,0,0,0 +.data + .align 2 + .type insertpointers,@object + .size insertpointers,32 +insertpointers: + .long plane1 + .long plane2 + .long plane3 + .long plane4 + .long plane5 + .long plane6 + .long plane7 + .long plane8 + .align 2 + .type insertpointerslong,@object + .size insertpointerslong,32 +insertpointerslong: + .long plane1l + .long plane2l + .long plane3l + .long plane4l + .long plane5l + .long plane6l + .long plane7l + .long plane8l +.text + .align 2 +.stabs "ChunkyToPlanar:F(0,1)",36,0,116,ChunkyToPlanar +.globl ChunkyToPlanar + .type ChunkyToPlanar,@function +ChunkyToPlanar: + move.l 4(%sp),%a0 + movem.l %d2-%d7/%a2-%a6,-(%sp) + + tst.b madetable | need only make bitspreadtable once + bne.s .Ltable_made + bsr.w make_table +.Ltable_made: + + | find number of not bytealigned pixels at left side of frame and + | the mask to be used + moveq #0,%d0 + move.w startX(%a0),%d0 + andi.w #0x7,%d0 + tst.w %d0 + beq.s .Lleadno + move.w %d0,%d1 + moveq #8,%d0 + sub.w %d1,%d0 + + move.b #0xff,%d1 + lsl.b %d0,%d1 + move.b %d1,andval_lead + +.Lleadno: + move.w %d0,leadingbits + + move.w width(%a0),%d0 + cmp.w leadingbits,%d0 + bhs.s .Lnotsingle + + * in case the whole chunkypixels buffer to be inserted fits into + * a single byte + move.b #0x80,%d1 + subq #1,%d0 + asr.b %d0,%d1 + addq #1,%d0 + moveq #8,%d2 + sub.w leadingbits,%d2 + lsr.b %d2,%d1 + not.b %d1 + move.b %d1,andval_single + clr.w trailingbits + bra.s .Lsingle +.Lnotsingle: + clr.b andval_single + + * find number of not bytealigned pixels at right side of frame and + * the mask to be used + sub.w leadingbits,%d0 + move.w %d0,%d1 + andi.w #0xfff8,%d1 + sub.w %d1,%d0 + move.w %d0,trailingbits + move.b #0xff,%d1 + lsr.b %d0,%d1 + move.b %d1,andval_trail +.Lsingle: + | initialize variables to be used (modulo, bytealigned width, etc) + move.l bmap(%a0),%a1 + move.l chunkybuffer(%a0),%a3 + move.w chunkypitch(%a0),pitch + moveq #0,%d0 + move.b Depth(%a1),%d0 + move.w %d0,depth + move.w height(%a0),Height + move.w width(%a0),Width + move.w leadingbits,%d1 + sub.w %d1,Width + move.w trailingbits,%d1 + sub.w %d1,Width + move.w Width,GWidth + move.w BytesPerRow(%a1),Modulo + tst.b andval_single + bne.s .Lsinglebyte + move.w Width,%d0 + lsr.w #3,%d0 + sub.w %d0,Modulo +.Lsinglebyte: + tst.w leadingbits + beq.s .Lnolead + sub.w #1,Modulo +.Lnolead: + tst.w trailingbits + beq.s .Lnotrail + sub.w #1,Modulo +.Lnotrail: + + | find initial offset in bytes into bitmap given by (startX, startY) + moveq #0,%d0 + move.w startX(%a0),%d0 + lsr.w #3,%d0 + move.w startY(%a0),%d1 + tst.w %d1 + beq.s .Lline0 + moveq #0,%d2 + move.w BytesPerRow(%a1),%d2 + subq #1,%d1 +.Lmakeoffset: + add.l %d2,%d0 + dbra %d1,.Lmakeoffset +.Lline0: + move.l %d0,%a2 + + | find jumpaddress for planar data insertion into bitmap + | (depending on bitmap depth) + move.l %a1,%a6 + add.l #Planes,%a6 + lea insertpointerslong,%a4 + lea insertpointers,%a5 + moveq #0,%d7 + move.w depth,%d7 + lsl.w #2,%d7 + add.l %d7,%a6 + move.l %a6,planepointerspointer + subq #4,%d7 + add.l %d7,%a4 + add.l %d7,%a5 + move.l (%a4),insertpointerlong + move.l (%a5),insertpointer + + lea c2p,%a4 + + | %a0 - c2p struct, %a1 - bmap, + | %a2 - offset from Planes pointer, %a3 - chunkybuffer + | %a4 - bitspread table + +.Lconvertlines: + | check if whole width fits into a single byte and take + | appropriate action if this is the case + tst.b andval_single + beq.s .Ltestlead + bsr.w insertsinglebytebits + bra.w .Ltrailno + +.Ltestlead: + | is the frame _not_ left bytealigned ? + tst.w leadingbits + beq.b .Lconvert8pixels + bsr.w insertleadingbits + +.Lconvert8pixels: + | done? + tst.w Width + beq.w .Lrowdone + + | check if we can do a speedier 32 pixels in one go conversion... + cmp.w #32,Width + blo.s .Lnolong + | test odd/even address to be compatible with 68000 aswell * + | move.l Planes(%a1),%d0 + | add.l %a2,%d0 + | btst #0,%d0 + | bne.s .Lnolong + bsr.w convert32pixels + sub.w #32,Width + addq #4,%a2 + bra.s .Lconvert8pixels + +.Lnolong: + | ...rather than the slower 8 pixel conversion + moveq #0,%d0 + moveq #0,%d4 + moveq #8-1,%d1 +.Lconvert8bytes: + | find correct bitspreadtable offset -> %a4 * + moveq #0,%d2 + move.b (%a3)+,%d2 + lsl.w #3,%d2 + + | insert bitrow * + add.l %d0,%d0 + or.l 0(%a4,%d2.w),%d0 + addq #4,%d2 + add.l %d4,%d4 + or.l 0(%a4,%d2.w),%d4 + + dbra %d1,.Lconvert8bytes + + | spread bits to all registers * + move.b %d0,%d3 + lsr.w #8,%d0 + move.b %d0,%d2 + swap %d0 + move.b %d0,%d1 + lsr.w #8,%d0 + + move.b %d4,%d7 + lsr.w #8,%d4 + move.b %d4,%d6 + swap %d4 + move.b %d4,%d5 + lsr.w #8,%d4 + + cmp.w #8,depth + beq.s .Lits8 + move.l %a2,%d7 +.Lits8: move.l planepointerspointer(%pc),%a6 + move.l insertpointer(%pc),%a5 + jsr (%a5) + + addq #1,%a2 + subq #8,Width + bra.w .Lconvert8pixels + +.Lrowdone: + | are there any non bytealigned pixels remaining at the right side + | of the frame? + tst.w trailingbits + beq.b .Ltrailno + bsr.w inserttrailingbits + +.Ltrailno: + move.w GWidth,Width + add.w Modulo,%a2 + add.w pitch,%a3 + subq #1,Height + tst.w Height + bne.w .Lconvertlines + + movem.l (%sp)+,%d2-%d7/%a2-%a6 + rts +.Lfe1: + .size ChunkyToPlanar,.Lfe1-ChunkyToPlanar +.Lscope0: +.stabs "",36,0,0,.Lscope0-ChunkyToPlanar +|------------------------------------------------------------------------------ + | insert converted 8 pixels c->p data into the bitmap +plane8: + move.l -(%a6),%a5 + add.l %a2,%a5 + move.b %d7,(%a5) + move.l %a2,%d7 +plane7: + move.l -(%a6),%a5 + move.b %d6,0(%a5,%d7.l) +plane6: + move.l -(%a6),%a5 + move.b %d5,0(%a5,%d7.l) +plane5: + move.l -(%a6),%a5 + move.b %d4,0(%a5,%d7.l) +plane4: + move.l -(%a6),%a5 + move.b %d3,0(%a5,%d7.l) +plane3: + move.l -(%a6),%a5 + move.b %d2,0(%a5,%d7.l) +plane2: + move.l -(%a6),%a5 + move.b %d1,0(%a5,%d7.l) +plane1: + move.l -(%a6),%a5 + move.b %d0,0(%a5,%d7.l) + rts +|------------------------------------------------------------------------------ + | insert converted 32 pixels c->p data into the bitmap +plane8l: + move.l -(%a6),%a5 + add.l %a2,%a5 + move.l %d7,(%a5) + move.l %a2,%d7 +plane7l: + move.l -(%a6),%a5 + move.l %d6,0(%a5,%d7.l) +plane6l: + move.l -(%a6),%a5 + move.l %d5,0(%a5,%d7.l) +plane5l: + move.l -(%a6),%a5 + move.l %d4,0(%a5,%d7.l) +plane4l: + move.l -(%a6),%a5 + move.l %d3,0(%a5,%d7.l) +plane3l: + move.l -(%a6),%a5 + move.l %d2,0(%a5,%d7.l) +plane2l: + move.l -(%a6),%a5 + move.l %d1,0(%a5,%d7.l) +plane1l: + move.l -(%a6),%a5 + move.l %d0,0(%a5,%d7.l) + rts +|------------------------------------------------------------------------------ +|------------------------------------------------------------------------------ + .align 2 +.stabs "convert32pixels:f(0,1)",36,0,409,convert32pixels + .type convert32pixels,@function +convert32pixels: + | convert 4 * 8 = 32 pixels in one go + lea buffer+32,%a5 + + moveq #4-1,%d3 +.Leachlong: + moveq #0,%d2 + move.b (%a3)+,%d2 + lsl.w #3,%d2 + movem.l 0(%a4,%d2.w),%d0/%d4 + + moveq #0,%d2 + move.b (%a3)+,%d2 + lsl.w #3,%d2 + add.l %d0,%d0 + or.l 0(%a4,%d2.w),%d0 + add.l %d4,%d4 + or.l 4(%a4,%d2.w),%d4 + + moveq #0,%d2 + move.b (%a3)+,%d2 + lsl.w #3,%d2 + add.l %d0,%d0 + or.l 0(%a4,%d2.w),%d0 + add.l %d4,%d4 + or.l 4(%a4,%d2.w),%d4 + + moveq #0,%d2 + move.b (%a3)+,%d2 + lsl.w #3,%d2 + add.l %d0,%d0 + or.l 0(%a4,%d2.w),%d0 + add.l %d4,%d4 + or.l 4(%a4,%d2.w),%d4 + + moveq #0,%d2 + move.b (%a3)+,%d2 + lsl.w #3,%d2 + add.l %d0,%d0 + or.l 0(%a4,%d2.w),%d0 + add.l %d4,%d4 + or.l 4(%a4,%d2.w),%d4 + + moveq #0,%d2 + move.b (%a3)+,%d2 + lsl.w #3,%d2 + add.l %d0,%d0 + or.l 0(%a4,%d2.w),%d0 + add.l %d4,%d4 + or.l 4(%a4,%d2.w),%d4 + + moveq #0,%d2 + move.b (%a3)+,%d2 + lsl.w #3,%d2 + add.l %d0,%d0 + or.l 0(%a4,%d2.w),%d0 + add.l %d4,%d4 + or.l 4(%a4,%d2.w),%d4 + + moveq #0,%d2 + move.b (%a3)+,%d2 + lsl.w #3,%d2 + add.l %d0,%d0 + or.l 0(%a4,%d2.w),%d0 + add.l %d4,%d4 + or.l 4(%a4,%d2.w),%d4 + + | push temporary converted data in buffer + movem.l %d0/%d4,-(%a5) + dbra %d3,.Leachlong + + | buffer now looks like this: + | %d00 %d10 + | %d20 %d30 + | %d40 %d50 + | %d60 %d70 + | %d01 %d11 + | %d21 %d31 + | %d41 %d51 + | %d61 %d71 + | %d02 %d12 + | %d22 %d32 + | %d42 %d52 + | %d62 %d72 + | %d03 %d13 + | %d23 %d33 + | %d43 %d53 + | %d63 %d73 + | ...where e.g. %d43 means most significant byte (#3) in dataregister 4 + + | now pop the converted data from the buffer and into the + | dataregisters + add.l #4*2*4,%a5 + + move.l -(%a5),%d4 + move.b %d4,%d7 + lsr.w #8,%d4 + move.b %d4,%d6 + swap %d4 + move.b %d4,%d5 + lsr.w #8,%d4 + + move.l -(%a5),%d0 + move.b %d0,%d3 + lsr.w #8,%d0 + move.b %d0,%d2 + swap %d0 + move.b %d0,%d1 + lsr.w #8,%d0 + + lsl.w #8,%d7 + move.b -1(%a5),%d7 + lsl.w #8,%d6 + move.b -2(%a5),%d6 + lsl.w #8,%d5 + move.b -3(%a5),%d5 + lsl.w #8,%d4 + move.b -4(%a5),%d4 + lsl.w #8,%d3 + move.b -5(%a5),%d3 + lsl.w #8,%d2 + move.b -6(%a5),%d2 + lsl.w #8,%d1 + move.b -7(%a5),%d1 + lsl.w #8,%d0 + move.b -8(%a5),%d0 + + swap %d0 + swap %d1 + swap %d2 + swap %d3 + swap %d4 + swap %d5 + swap %d6 + swap %d7 + + subq #8,%a5 + + move.w -(%a5),%d6 + move.b %d6,%d7 + lsr.w #8,%d6 + move.w -(%a5),%d4 + move.b %d4,%d5 + lsr.w #8,%d4 + move.w -(%a5),%d2 + move.b %d2,%d3 + lsr.w #8,%d2 + move.w -(%a5),%d0 + move.b %d0,%d1 + lsr.w #8,%d0 + + lsl.w #8,%d7 + move.b -1(%a5),%d7 + lsl.w #8,%d6 + move.b -2(%a5),%d6 + lsl.w #8,%d5 + move.b -3(%a5),%d5 + lsl.w #8,%d4 + move.b -4(%a5),%d4 + lsl.w #8,%d3 + move.b -5(%a5),%d3 + lsl.w #8,%d2 + move.b -6(%a5),%d2 + lsl.w #8,%d1 + move.b -7(%a5),%d1 + lsl.w #8,%d0 + move.b -8(%a5),%d0 + + | insert the converted c->p data into the bitmap + cmp.w #8,depth + beq.b .Lits8x + move.l %a2,%d7 +.Lits8x: + move.l planepointerspointer(%pc),%a6 + move.l insertpointerlong(%pc),%a5 + jsr (%a5) + rts +.Lfe2: + .size convert32pixels,.Lfe2-convert32pixels +.Lscope1: +.stabs "",36,0,0,.Lscope1-convert32pixels +|------------------------------------------------------------------------------ + .align 2 +.stabs "insertleadingbits:f(0,1)",36,0,595,insertleadingbits + .type insertleadingbits,@function +insertleadingbits: + moveq #0,%d0 + moveq #0,%d4 + move.w leadingbits,%d1 + subq #1,%d1 +.Lconvertleadingbits: + | find correct bitspreadtable offset -> %a4 * + moveq #0,%d2 + move.b (%a3)+,%d2 + lsl.w #3,%d2 + + | insert bitrow * + add.l %d0,%d0 + or.l 0(%a4,%d2.w),%d0 + addq #4,%d2 + add.l %d4,%d4 + or.l 0(%a4,%d2.w),%d4 + + dbra %d1,.Lconvertleadingbits + + | spread bits to all registers * + move.b %d0,%d3 + lsr.w #8,%d0 + move.b %d0,%d2 + swap %d0 + move.b %d0,%d1 + lsr.w #8,%d0 + + move.b %d4,%d7 + lsr.w #8,%d4 + move.b %d4,%d6 + swap %d4 + move.b %d4,%d5 + lsr.w #8,%d4 + + movem.l %a0-%a1/%a3,-(%sp) + + move.w depth,%a0 + addq #Planes,%a1 + + | read and mix in the data from the bitmap with the converted data +.Lplanel0: + move.w %d7,-(%sp) + move.l (%a1),%a3 + add.l %a2,%a3 + move.b (%a3),%d7 + and.b andval_lead,%d7 + or.b %d7,%d0 + move.w (%sp)+,%d7 + move.w %d0,-(%sp) + + subq #1,%a0 + cmp.w #0,%a0 + beq.w .Ldoneplanes +.Lplanel1: + addq #4,%a1 + move.l (%a1),%a3 + add.l %a2,%a3 + move.b (%a3),%d0 + and.b andval_lead,%d0 + or.b %d0,%d1 + + subq #1,%a0 + cmp.w #0,%a0 + beq.w .Ldoneplanes +.Lplanel2: + addq #4,%a1 + move.l (%a1),%a3 + add.l %a2,%a3 + move.b (%a3),%d0 + and.b andval_lead,%d0 + or.b %d0,%d2 + + subq #1,%a0 + cmp.w #0,%a0 + beq.s .Ldoneplanes +.Lplanel3: + addq #4,%a1 + move.l (%a1),%a3 + add.l %a2,%a3 + move.b (%a3),%d0 + and.b andval_lead,%d0 + or.b %d0,%d3 + + subq #1,%a0 + cmp.w #0,%a0 + beq.s .Ldoneplanes +.Lplanel4: + addq #4,%a1 + move.l (%a1),%a3 + add.l %a2,%a3 + move.b (%a3),%d0 + and.b andval_lead,%d0 + or.b %d0,%d4 + + subq #1,%a0 + cmp.w #0,%a0 + beq.s .Ldoneplanes +.Lplanel5: + addq #4,%a1 + move.l (%a1),%a3 + add.l %a2,%a3 + move.b (%a3),%d0 + and.b andval_lead,%d0 + or.b %d0,%d5 + + subq #1,%a0 + cmp.w #0,%a0 + beq.s .Ldoneplanes +.Lplanel6: + addq #4,%a1 + move.l (%a1),%a3 + add.l %a2,%a3 + move.b (%a3),%d0 + and.b andval_lead,%d0 + or.b %d0,%d6 + + subq #1,%a0 + cmp.w #0,%a0 + beq.s .Ldoneplanes +.Lplanel7: + addq #4,%a1 + move.l (%a1),%a3 + add.l %a2,%a3 + move.b (%a3),%d0 + and.b andval_lead,%d0 + or.b %d0,%d7 + +.Ldoneplanes: + move.w (%sp)+,%d0 + movem.l (%sp)+,%a0-%a1/%a3 + + cmp.w #8,depth + beq.s .Lits8l + move.l %a2,%d7 +.Lits8l: + move.l planepointerspointer(%pc),%a6 + move.l insertpointer(%pc),%a5 + jsr (%a5) + addq #1,%a2 + rts +.Lfe3: + .size insertleadingbits,.Lfe3-insertleadingbits +.Lscope2: +.stabs "",36,0,0,.Lscope2-insertleadingbits +|------------------------------------------------------------------------------ + .align 2 +.stabs "inserttrailingbits:f(0,1)",36,0,744,inserttrailingbits + .type inserttrailingbits,@function +inserttrailingbits: + moveq #0,%d0 + moveq #0,%d4 + move.w trailingbits,%d1 + subq #1,%d1 +.Lconverttrailingbits: + | find correct bitspreadtable offset -> %a4 * + moveq #0,%d2 + move.b (%a3)+,%d2 + lsl.w #3,%d2 + + | insert bitrow * + add.l %d0,%d0 + or.l 0(%a4,%d2.w),%d0 + addq #4,%d2 + add.l %d4,%d4 + or.l 0(%a4,%d2.w),%d4 + + dbra %d1,.Lconverttrailingbits + + moveq #8,%d1 + sub.w trailingbits,%d1 + lsl.l %d1,%d0 + lsl.l %d1,%d4 + + | spread bits to all registers * + move.b %d0,%d3 + lsr.w #8,%d0 + move.b %d0,%d2 + swap %d0 + move.b %d0,%d1 + lsr.w #8,%d0 + + move.b %d4,%d7 + lsr.w #8,%d4 + move.b %d4,%d6 + swap %d4 + move.b %d4,%d5 + lsr.w #8,%d4 + + movem.l %a0-%a1/%a3,-(%sp) + + move.w depth,%a0 + addq #Planes,%a1 + + | read and mix in the data from the bitmap with the converted data +.Lplanet0: + move.w %d7,-(%sp) + move.l (%a1),%a3 + add.l %a2,%a3 + move.b (%a3),%d7 + and.b andval_trail,%d7 + or.b %d7,%d0 + move.w (%sp)+,%d7 + move.w %d0,-(%sp) + + subq #1,%a0 + cmp.w #0,%a0 + beq.w .Ldone_planes +.Lplanet1: + addq #4,%a1 + move.l (%a1),%a3 + add.l %a2,%a3 + move.b (%a3),%d0 + and.b andval_trail,%d0 + or.b %d0,%d1 + + subq #1,%a0 + cmp.w #0,%a0 + beq.w .Ldone_planes +.Lplanet2: + addq #4,%a1 + move.l (%a1),%a3 + add.l %a2,%a3 + move.b (%a3),%d0 + and.b andval_trail,%d0 + or.b %d0,%d2 + + subq #1,%a0 + cmp.w #0,%a0 + beq.s .Ldone_planes +.Lplanet3: + addq #4,%a1 + move.l (%a1),%a3 + add.l %a2,%a3 + move.b (%a3),%d0 + and.b andval_trail,%d0 + or.b %d0,%d3 + + subq #1,%a0 + cmp.w #0,%a0 + beq.s .Ldone_planes +.Lplanet4: + addq #4,%a1 + move.l (%a1),%a3 + add.l %a2,%a3 + move.b (%a3),%d0 + and.b andval_trail,%d0 + or.b %d0,%d4 + + subq #1,%a0 + cmp.w #0,%a0 + beq.s .Ldone_planes +.Lplanet5: + addq #4,%a1 + move.l (%a1),%a3 + add.l %a2,%a3 + move.b (%a3),%d0 + and.b andval_trail,%d0 + or.b %d0,%d5 + + subq #1,%a0 + cmp.w #0,%a0 + beq.s .Ldone_planes +.Lplanet6: + addq #4,%a1 + move.l (%a1),%a3 + add.l %a2,%a3 + move.b (%a3),%d0 + and.b andval_trail,%d0 + or.b %d0,%d6 + + subq #1,%a0 + cmp.w #0,%a0 + beq.s .Ldone_planes +.Lplanet7: + addq #4,%a1 + move.l (%a1),%a3 + add.l %a2,%a3 + move.b (%a3),%d0 + and.b andval_trail,%d0 + or.b %d0,%d7 + +.Ldone_planes: + move.w (%sp)+,%d0 + movem.l (%sp)+,%a0-%a1/%a3 + + cmp.w #8,depth + beq.s .Lits8t + move.l %a2,%d7 +.Lits8t: + move.l planepointerspointer(%pc),%a6 + move.l insertpointer(%pc),%a5 + jsr (%a5) + addq #1,%a2 + rts +.Lfe4: + .size inserttrailingbits,.Lfe4-inserttrailingbits +.Lscope3: +.stabs "",36,0,0,.Lscope3-inserttrailingbits +|------------------------------------------------------------------------------ + .align 2 +.stabs "insertsinglebytebits:f(0,1)",36,0,898,insertsinglebytebits + .type insertsinglebytebits,@function +insertsinglebytebits: + moveq #0,%d0 + moveq #0,%d4 + move.w width(%a0),%d1 + subq #1,%d1 +.Lconvertsinglebytebits: + | find correct bitspreadtable offset -> %a4 * + moveq #0,%d2 + move.b (%a3)+,%d2 + lsl.w #3,%d2 + + | insert bitrow * + add.l %d0,%d0 + or.l 0(%a4,%d2.w),%d0 + addq #4,%d2 + add.l %d4,%d4 + or.l 0(%a4,%d2.w),%d4 + + dbra %d1,.Lconvertsinglebytebits + + moveq #0,%d1 + move.w leadingbits,%d1 + sub.w width(%a0),%d1 + lsl.l %d1,%d0 + lsl.l %d1,%d4 + + | spread bits to all registers * + move.b %d0,%d3 + lsr.w #8,%d0 + move.b %d0,%d2 + swap %d0 + move.b %d0,%d1 + lsr.w #8,%d0 + + move.b %d4,%d7 + lsr.w #8,%d4 + move.b %d4,%d6 + swap %d4 + move.b %d4,%d5 + lsr.w #8,%d4 + + movem.l %a0-%a1/%a3,-(%sp) + + move.w depth,%a0 + addq #Planes,%a1 + + | read and mix in the data from the bitmap with the converted data +.Lplanes0: + move.w %d7,-(%sp) + move.l (%a1),%a3 + add.l %a2,%a3 + move.b (%a3),%d7 + and.b andval_single,%d7 + or.b %d7,%d0 + move.w (%sp)+,%d7 + move.w %d0,-(%sp) + + subq #1,%a0 + cmp.w #0,%a0 + beq.w .Ldone__planes +.Lplanes1: + addq #4,%a1 + move.l (%a1),%a3 + add.l %a2,%a3 + move.b (%a3),%d0 + and.b andval_single,%d0 + or.b %d0,%d1 + + subq #1,%a0 + cmp.w #0,%a0 + beq.w .Ldone__planes +.Lplanes2: + addq #4,%a1 + move.l (%a1),%a3 + add.l %a2,%a3 + move.b (%a3),%d0 + and.b andval_single,%d0 + or.b %d0,%d2 + + subq #1,%a0 + cmp.w #0,%a0 + beq.s .Ldone__planes +.Lplanes3: + addq #4,%a1 + move.l (%a1),%a3 + add.l %a2,%a3 + move.b (%a3),%d0 + and.b andval_single,%d0 + or.b %d0,%d3 + + subq #1,%a0 + cmp.w #0,%a0 + beq.s .Ldone__planes +.Lplanes4: + addq #4,%a1 + move.l (%a1),%a3 + add.l %a2,%a3 + move.b (%a3),%d0 + and.b andval_single,%d0 + or.b %d0,%d4 + + subq #1,%a0 + cmp.w #0,%a0 + beq.s .Ldone__planes +.Lplanes5: + addq #4,%a1 + move.l (%a1),%a3 + add.l %a2,%a3 + move.b (%a3),%d0 + and.b andval_single,%d0 + or.b %d0,%d5 + + subq #1,%a0 + cmp.w #0,%a0 + beq.s .Ldone__planes +.Lplanes6: + addq #4,%a1 + move.l (%a1),%a3 + add.l %a2,%a3 + move.b (%a3),%d0 + and.b andval_single,%d0 + or.b %d0,%d6 + + subq #1,%a0 + cmp.w #0,%a0 + beq.s .Ldone__planes +.Lplanes7: + addq #4,%a1 + move.l (%a1),%a3 + add.l %a2,%a3 + move.b (%a3),%d0 + and.b andval_single,%d0 + or.b %d0,%d7 + +.Ldone__planes: + move.w (%sp)+,%d0 + movem.l (%sp)+,%a0-%a1/%a3 + + cmp.w #8,depth + beq.s .Lits8s + move.l %a2,%d7 +.Lits8s: + move.l planepointerspointer(%pc),%a6 + move.l insertpointer(%pc),%a5 + jsr (%a5) + addq #1,%a2 + rts +.Lfe5: + .size insertsinglebytebits,.Lfe5-insertsinglebytebits +.Lscope4: +.stabs "",36,0,0,.Lscope4-insertsinglebytebits +|------------------------------------------------------------------------------ +| makes the bitspread table * +| Do not destroy %a0! * + .align 2 +.stabs "make_table:f(0,1)",36,0,1055,make_table + .type make_table,@function +make_table: + lea c2p,%a1 + moveq #0,%d0 +.Lmore_table: + move.b %d0,%d1 + + moveq #8-1,%d2 +.Lbyteloop: + btst #0,%d1 + beq.s .Lzero + move.b #1,(%a1)+ + bra.s .Lone +.Lzero: clr.b (%a1)+ +.Lone: lsr.b #1,%d1 + dbra %d2,.Lbyteloop + + addq #1,%d0 + cmp.w #256,%d0 + beq.s .Ltable_done + bra.s .Lmore_table +.Ltable_done: + move.b #1,madetable + rts +.Lfe6: + .size make_table,.Lfe6-make_table +.Lscope5: +.stabs "",36,0,0,.Lscope5-make_table +|------------------------------------------------------------------------------ + .local insertpointer + .comm insertpointer,4,2 + .local insertpointerlong + .comm insertpointerlong,4,2 + .local planepointerspointer + .comm planepointerspointer,4,2 + .local depth + .comm depth,2,2 + .local Width + .comm Width,2,2 + .local GWidth + .comm GWidth,2,2 + .local Height + .comm Height,2,2 + .local pitch + .comm pitch,2,2 + .local Modulo + .comm Modulo,2,2 + .local leadingbits + .comm leadingbits,2,2 + .local trailingbits + .comm trailingbits,2,2 + .local madetable + .comm madetable,1,1 + .local andval_lead + .comm andval_lead,1,1 + .local andval_trail + .comm andval_trail,1,1 + .local andval_single + .comm andval_single,1,1 + | bitspread table * + .local c2p + .comm c2p,256*8,1 + | temporary buffer * + .local buffer + .comm buffer,32,1 +|------------------------------------------------------------------------------ --- XFree86-3.3.6/xc/programs/xkbcomp/symbols/macintosh/us.m68k Sun May 23 05:30:15 1999 +++ XFree86-3.3.6/xc/programs/xkbcomp/symbols/macintosh/us Fri Sep 20 20:26:00 2002 @@ -20,7 +20,7 @@ key { [ 0, parenright ] }; key { [ minus, underscore ] }; key { [ equal, plus ] }; - key { [ Delete ] }; + key { [ BackSpace ] }; key { [ Tab, ISO_Left_Tab ] }; key { [ q, Q ] }; @@ -98,7 +98,7 @@ key { [ Insert ] }; key { [ Home ] }; key { [ Prior ] }; - key { [ BackSpace ] }; + key { [ Delete ] }; key { [ End ] }; key { [ Next ] };