int run_game(int game) { int err; /* copy some settings into easier-to-handle variables */ record = options.record; playback = options.playback; mame_debug = options.mame_debug; Machine->gamedrv = gamedrv = drivers[game]; Machine->drv = drv = gamedrv->drv; /* copy configuration */ if (options.color_depth == 16 || (options.color_depth != 8 && (Machine->gamedrv->flags & GAME_REQUIRES_16BIT))) Machine->color_depth = 16; else Machine->color_depth = 8; //if (options.vector_width == 0) options.vector_width = 640; //if (options.vector_height == 0) options.vector_height = 480; if (options.vector_width == 0) options.vector_width = 320; if (options.vector_height == 0) options.vector_height = 240; Machine->sample_rate = options.samplerate; /* get orientation right */ Machine->orientation = gamedrv->flags & ORIENTATION_MASK; Machine->ui_orientation = ROT0; if (options.norotate) Machine->orientation = ROT0; if (options.ror) { /* if only one of the components is inverted, switch them */ if ((Machine->orientation & ROT180) == ORIENTATION_FLIP_X || (Machine->orientation & ROT180) == ORIENTATION_FLIP_Y) Machine->orientation ^= ROT180; Machine->orientation ^= ROT90; /* if only one of the components is inverted, switch them */ if ((Machine->ui_orientation & ROT180) == ORIENTATION_FLIP_X || (Machine->ui_orientation & ROT180) == ORIENTATION_FLIP_Y) Machine->ui_orientation ^= ROT180; Machine->ui_orientation ^= ROT90; } if (options.rol) { /* if only one of the components is inverted, switch them */ if ((Machine->orientation & ROT180) == ORIENTATION_FLIP_X || (Machine->orientation & ROT180) == ORIENTATION_FLIP_Y) Machine->orientation ^= ROT180; Machine->orientation ^= ROT270; /* if only one of the components is inverted, switch them */ if ((Machine->ui_orientation & ROT180) == ORIENTATION_FLIP_X || (Machine->ui_orientation & ROT180) == ORIENTATION_FLIP_Y) Machine->ui_orientation ^= ROT180; Machine->ui_orientation ^= ROT270; } if (options.flipx) { Machine->orientation ^= ORIENTATION_FLIP_X; Machine->ui_orientation ^= ORIENTATION_FLIP_X; } if (options.flipy) { Machine->orientation ^= ORIENTATION_FLIP_Y; Machine->ui_orientation ^= ORIENTATION_FLIP_Y; } set_pixel_functions(); /* Do the work*/ err = 1; bailing = 0; #ifdef MESS if (get_filenames()) return err; #endif if (osd_init() == 0) { if (init_machine() == 0) { if (run_machine() == 0) err = 0; else if (!bailing) { bailing = 1; printf("Unable to start machine emulation\n"); } shutdown_machine(); } else if (!bailing) { bailing = 1; printf("Unable to initialize machine emulation\n"); } osd_exit(); } else if (!bailing) { bailing = 1; printf ("Unable to initialize system\n"); } return err; }
struct mame_bitmap *bitmap_alloc_core(int width,int height,int depth,int use_auto) { struct mame_bitmap *bitmap; /* obsolete kludge: pass in negative depth to prevent orientation swapping */ if (depth < 0) depth = -depth; /* verify it's a depth we can handle */ if (depth != 8 && depth != 15 && depth != 16 && depth != 32) { logerror("osd_alloc_bitmap() unknown depth %d\n",depth); return NULL; } /* allocate memory for the bitmap struct */ bitmap = use_auto ? auto_malloc(sizeof(struct mame_bitmap)) : malloc(sizeof(struct mame_bitmap)); if (bitmap != NULL) { int i, rowlen, rdwidth, bitmapsize, linearraysize, pixelsize; unsigned char *bm; /* initialize the basic parameters */ bitmap->depth = depth; bitmap->width = width; bitmap->height = height; /* determine pixel size in bytes */ pixelsize = 1; if (depth == 15 || depth == 16) pixelsize = 2; else if (depth == 32) pixelsize = 4; /* round the width to a multiple of 8 */ rdwidth = (width + 7) & ~7; rowlen = rdwidth + 2 * BITMAP_SAFETY; bitmap->rowpixels = rowlen; /* now convert from pixels to bytes */ rowlen *= pixelsize; bitmap->rowbytes = rowlen; /* determine total memory for bitmap and line arrays */ bitmapsize = (height + 2 * BITMAP_SAFETY) * rowlen; linearraysize = (height + 2 * BITMAP_SAFETY) * sizeof(unsigned char *); /* align to 16 bytes */ linearraysize = (linearraysize + 15) & ~15; /* allocate the bitmap data plus an array of line pointers */ bitmap->line = use_auto ? auto_malloc(linearraysize + bitmapsize) : malloc(linearraysize + bitmapsize); if (bitmap->line == NULL) { if (!use_auto) free(bitmap); return NULL; } /* clear ALL bitmap, including safety area, to avoid garbage on right */ bm = (unsigned char *)bitmap->line + linearraysize; memset(bm, 0, (height + 2 * BITMAP_SAFETY) * rowlen); /* initialize the line pointers */ for (i = 0; i < height + 2 * BITMAP_SAFETY; i++) bitmap->line[i] = &bm[i * rowlen + BITMAP_SAFETY * pixelsize]; /* adjust for the safety rows */ bitmap->line += BITMAP_SAFETY; bitmap->base = bitmap->line[0]; /* set the pixel functions */ set_pixel_functions(bitmap); } /* return the result */ return bitmap; }