XMAME 0.67.1



TEST SYSTEM OVERVIEWS


Two old Linux systems are used for testing xmame.

System #1 Primary xmame testing

  • AMD K6-2 CPU @ 500 MHz
  • es1371 Ensonique sound card (supported in kernel)
  • VIA chipset
  • Clunky ol' Voodoo 3 card.

    System #2 Slightly better CPU for enjoying xmame

  • AMD K6-3+ CPU @ 450 MHz
  • es1371 Ensonique sound card (supported in kernel)
  • ALi Aladdin 7 chipset with dual-channel SDRAM
  • Integrated ArtX graphics, but used with fbdev in 32bpp.

    Software
    Both systems began as vanilla RedHat 6.2 boxes, but packages have been heavily recompiled for speed and updated with latest security enhancements. Highlights as follows.

  • 2.2.x kernel
  • glibc 2.1.3
  • egcs-1.1.2, aka gcc 2.91.66
  • XFree86 3.3.6

    No lectures on obsolescence, please. I know full-well the evils of old-school XFree et. al. Newer systems will be forthcoming on this list soon enough. K6-3+ is a great overclocker, but it won't cut the mustard for kinst. :)

    xmame Compile Options

  • No SDL support.
  • No svgalib support.
  • Just plain x11 support with MIT shared memory extensions.
  • No Xv support. Does not exist in XFree86 3.3.6 and will cause compile to die if left uncommented from makefile.unix
  • Voodoo 3 has accelerated X support, but fbdev is set to 32bpp on the other machine.
  • No ALSA support, or any other sound driver except default oss.
  • Compile succeeds with the following flags
    CFLAGS = -O2 -Wall -Wno-unused -march=i586 -pipe -fomit-frame-pointer -fstrict-aliasing -fstrength-reduce -ffast-math
    
    OR
    CFLAGS = -O3 -pipe -mcpu=pentium -march=pentium -Wall -Wno-unused -funroll-loops -fstrength-reduce -fomit-frame-pointer -ffast-math -malign-functions=2 -malign-jumps=2 -malign-loops=2
    

    PROBLEM #1

    src/sound/multipcm.c does not compile!

    EXPLANATION

    Some gcc versions are evidently more picky than others about the ordering of declarations and assignments. gcc 2.91.66 refuses to compile multipcm.c as a result.

    FILES AFFECTED

    The following files need fixes.

  • src/sound/multipcm.c

    FIXES

    Below are the details of how to fix the file.

    multipcm.c

    The following lines need to be swapped.

    Here's the patch:

    --- src/sound/multipcm.c.orig   Thu Apr 10 05:33:55 2003
    +++ src/sound/multipcm.c        Thu Apr 10 05:37:38 2003
    @@ -211,11 +211,11 @@
            int vol[2];
            struct MultiPCM_interface *intf;
     
    -       intf = msound->sound_interface;
    -
            /* make volume table */
            double  max=255.0;
            double  db=(48.0/128);
    +
    +       intf = msound->sound_interface;
     
            for (i = 0; i < 128; i++)
            {
    

    PROBLEM #2

    src/vidhrdw/seta2.c does not compile!

    EXPLANATION

    Some gcc versions are evidently more picky than others about the ordering of declarations and assignments. gcc 2.91.66 refuses to compile seta2.c as a result. This file changed from 0.66.2. sizex and sizey are now assigned before x and y variables are declared. This causes compile to break on old gcc versions.

    src/vidhrdw/seta2.c: In function `seta2_draw_sprites':
    src/vidhrdw/seta2.c:318: parse error before `int'
    src/vidhrdw/seta2.c:329: `y' undeclared (first use in this function)
    src/vidhrdw/seta2.c:329: (Each undeclared identifier is reported only once
    src/vidhrdw/seta2.c:329: for each function it appears in.)
    src/vidhrdw/seta2.c:331: `x' undeclared (first use in this function)
    make: *** [xmame.obj/vidhrdw/seta2.o] Error 1
    

    FILES AFFECTED

    The following files need fixes.

  • src/vidhrdw/seta2.c

    FIXES

    Below are the details of how to fix the file.

    seta2.c

    The following lines need to be swapped.

    Here's the patch:

    --- src/vidhrdw/seta2.c.orig    Thu Apr 10 06:09:43 2003
    +++ src/vidhrdw/seta2.c Thu Apr 10 06:49:01 2003
    @@ -310,12 +310,12 @@
                                    int flipy = (attr & 0x0008);
                                    int color = (attr & 0xffe0) >> 5;
     
    +                               int x,y;
    +
                                    int sizex = use_global_size ? global_sizex : sx;
                                    int sizey = use_global_size ? global_sizey : sy;
                                    sizex = (1 << ((sizex & 0x0c00)>> 10))-1;
                                    sizey = (1 << ((sizey & 0x0c00)>> 10))-1;
    -
    -                               int x,y;
     
                                    sx += xoffs;
                                    sy += yoffs;
    

    PROBLEM #3

    src/drivers/dynax.c does not compile!

    EXPLANATION

    Some gcc versions are evidently more picky than others about the ordering of declarations and assignments. gcc 2.91.66 refuses to compile dynax.c as a result. This file changed from 0.66.2. For "maya" a for loop occurs before *gfx and i are declared. This causes compile to break on old gcc versions.

    Compiling src/vidhrdw/dynax.c ...
    Compiling src/drivers/dynax.c ...
    src/drivers/dynax.c: In function `init_maya':
    src/drivers/dynax.c:1789: parse error before `*'
    src/drivers/dynax.c:1791: parse error before `int'
    src/drivers/dynax.c:1792: `i' undeclared (first use in this function)
    src/drivers/dynax.c:1792: (Each undeclared identifier is reported only once
    src/drivers/dynax.c:1792: for each function it appears in.)
    src/drivers/dynax.c:1793: `gfx' undeclared (first use in this function)
    make: *** [xmame.obj/drivers/dynax.o] Error 1
    

    FILES AFFECTED

    The following files need fixes.

  • src/drivers/dynax.c

    FIXES

    Below are the details of how to fix the file.

    dynax.c

    The following lines need to be swapped.

    Here's the patch:

    --- src/drivers/dynax.c.orig    Thu Apr 10 07:03:36 2003
    +++ src/drivers/dynax.c Thu Apr 10 07:23:45 2003
    @@ -1775,6 +1775,9 @@
            /* Address lines scrambling on 1 z80 rom */
            data8_t *rom = memory_region(REGION_CPU1) + 0x28000,
                            *end = rom + 0x10000;
    +       data8_t *gfx = memory_region(REGION_GFX1);
    +       int i;
    +
            for (;rom < end; rom+=8)
            {
                    data8_t temp[8];
    @@ -1786,9 +1789,7 @@
            }
     
            /* Address lines scrambling on the blitter data roms */
    -       data8_t *gfx = memory_region(REGION_GFX1);
            rom = memory_region(REGION_USER1);
    -       int i;
            for (i = 0; i < 0xc0000; i++)
                    gfx[i] = rom[BITSWAP24(i,23,22,21,20,19,18,14,15, 16,17,13,12,11,10,9,8, 7,6,5,4,3,2,1,0)];
     }
    

    Back to the list of fixes