Contents |
Follow the guide called 'The Easy Way', except you may have to replace
set path=%PATH%;\mingw\bin
with
set path=\mingw\bin;%PATH%
and you may want to change the target architecture in the makefile, here I set it to Pentium M:
#------------------------------------------------- # specify architecture-specific optimizations #------------------------------------------------- # uncomment and specify architecture-specific optimizations here # some examples: # optimize for I686: ARCHOPTS = -march=pentiumpro # optimize for Core 2: ARCHOPTS = -march=pentium-m -msse3 # optimize for G4: ARCHOPTS = -mcpu=G4 # note that we leave this commented by default so that you can # configure this in your environment and never have to think about it ARCHOPTS = -march=pentium-m
nice -n20 make -j3 TARGETOS=macosx
nice -n20 make -j3 TARGETOS=macosx BIGENDIAN=1
Notes:
nice -n20 makes the compile run at low scheduling priority, which you always should do for lengthy compiles.
-j3 takes advantage of dual core processors to compile faster.
emerge -avt sdlmame (may be unnecessary, try without).
#------------------------------------------------- # specify architecture-specific optimizations #------------------------------------------------- # uncomment and specify architecture-specific optimizations here # some examples: # optimize for I686: ARCHOPTS = -march=pentiumpro # optimize for Core 2: ARCHOPTS = -march=pentium-m -msse3 # optimize for G4: ARCHOPTS = -mcpu=G4 # note that we leave this commented by default so that you can # configure this in your environment and never have to think about it ARCHOPTS = -march=prescott -msse3 -fomit-frame-pointer
I live life on the edge, so I dare to ignore pending anonymous timers, even though I don't know exactly what they are:
In emu/machine.c:
void running_machine::handle_saveload()
{
...
// if there are anonymous timers, we can't save just yet, and we can't load yet either
// because the timers might overwrite data we have loaded
/*
if (!m_scheduler.can_save())
{
// if more than a second has passed, we're probably screwed
if ((this->time() - m_saveload_schedule_time) > attotime::from_seconds(1))
{
popmessage("Unable to %s due to pending anonymous timers. See error.log for details.", opname);
goto cancel;
}
return;
}
*/
Disabling the always annoying 'unable to save due to pending anonymous timers'- edit src/emu/mame.c:
handle_load and handle_save: comment out this if:
/*
if (timer_count_anonymous() > 0)
{
...
}
*/
To avoid a warning (which is being treated as an error), uncomment the 'cancel' label at the bottom of handle_load and handle_save:
//cancel: /* unschedule the load */ astring_free(mame->saveload_pending_file); mame->saveload_pending_file = NULL; mame->saveload_schedule_callback = NULL; }
This hack enables autosave even though save states may not be officially supported for the game - edit src/emu/mame.c:
static void saveload_init(running_machine *machine)
{
...
/* if we're in autosave mode, schedule a load */
else if (options_get_bool(mame_options(), OPTION_AUTOSAVE) /*&& (machine->gamedrv->flags & GAME_SUPPORTS_SAVE)*/)
mame_schedule_load(machine, "auto");
}
void mame_schedule_exit(running_machine *machine)
{
...
/* if we're autosaving on exit, schedule a save as well */
if (options_get_bool(mame_options(), OPTION_AUTOSAVE) /*&& (machine->gamedrv->flags & GAME_SUPPORTS_SAVE)*/)
mame_schedule_save(machine, "auto");
}
Start games with audit errors from ingame menu - edit src/emu/uimenu.c:
void menu_select_game:
/* if everything looks good, schedule the new driver */
/* if (audit_result == CORRECT || audit_result == BEST_AVAILABLE)
{ */
mame_schedule_new_driver(machine, driver);
ui_menu_stack_reset(machine);
//}
/* otherwise, display an error */
/* else
{
ui_menu_reset(menu, UI_MENU_RESET_REMEMBER_REF);
menustate->error = TRUE;
} */
Change your makefile - you cannot just run 'make pacmanonly', it doesn't work:
... ifeq ($(TARGET),) TARGET = pacmanonly endif
Create a src/pacmanonly.mak file (it's LARGE, because the pacman driver links to many many other drivers):
COREDEFS += -DTINY_COMPILE=1
COREDEFS += -DTINY_NAME="driver_pacman"
COREDEFS += -DTINY_POINTER="&driver_pacman"
# uses these CPUs
CPUS+=M6502@
CPUS+=Z80@
CPUS+=N2A03@
# uses these SOUNDs
SOUNDS+=NAMCO@
SOUNDS+=SAMPLES@
SOUNDS+=DISCRETE@
SOUNDS+=SN76496@
SOUNDS+=AY8910@
SOUNDS+=SN76496@
SOUNDS+=TMS36XX@
SOUNDS+=DAC@
SOUNDS+=NES@
SOUNDS+=TMS5110@
OBJS = $(OBJ)/vidhrdw/pacman.o $(OBJ)/drivers/pacman.o \
$(OBJ)/vidhrdw/galaxian.o $(OBJ)/sndhrdw/galaxian.o $(OBJ)/drivers/galaxian.o \
$(OBJ)/vidhrdw/phoenix.o $(OBJ)/sndhrdw/phoenix.o $(OBJ)/drivers/phoenix.o \
$(OBJ)/machine/scramble.o $(OBJ)/sndhrdw/scramble.o $(OBJ)/drivers/scramble.o \
$(OBJ)/drivers/cvs.o $(OBJ)/vidhrdw/cvs.o $(OBJ)/vidhrdw/s2636.o \
$(OBJ)/vidhrdw/dkong.o $(OBJ)/sndhrdw/dkong.o $(OBJ)/drivers/dkong.o \
$(OBJ)/vidhrdw/cclimber.o $(OBJ)/sndhrdw/cclimber.o $(OBJ)/drivers/cclimber.o \
$(OBJ)/vidhrdw/mario.o $(OBJ)/sndhrdw/mario.o $(OBJ)/drivers/mario.o \
$(OBJ)/vidhrdw/ladybug.o $(OBJ)/drivers/ladybug.o \
$(OBJ)/drivers/frogger.o \
$(OBJ)/machine/bagman.o $(OBJ)/vidhrdw/bagman.o $(OBJ)/drivers/bagman.o \
$(OBJ)/drivers/scobra.o \
$(OBJ)/drivers/epos.o $(OBJ)/vidhrdw/epos.o \
$(OBJ)/machine/8255ppi.o \
$(OBJ)/sndhrdw/pleiads.o \
$(OBJ)/machine/7474.o \
$(OBJ)/vidhrdw/res_net.o \
$(OBJ)/drivers/amidar.o \
$(OBJ)/machine/strtheat.o $(OBJ)/machine/drakton.o \
$(OBJ)/vidhrdw/pacman.o $(OBJ)/drivers/pacman.o \
$(OBJ)/machine/mspacman.o $(OBJ)/machine/pacplus.o \
$(OBJ)/machine/jumpshot.o $(OBJ)/machine/theglobp.o \
$(OBJ)/machine/acitya.o \
$(OBJ)/drivers/pengo.o \
$(OBJ)/drivers/jrpacman.o \
$(OBJ)/machine/segacrpt.o \
COREOBJS += $(OBJ)/tiny.o $(OBJ)/cheat.o
Copy src/tiny.c to src/pacmanonly.c and run:
C:\MinGW\mame>make