MAME/0.37 Part 1

From GamerWiki

Jump to: navigation, search

A warts and all look through the history of MAME as described by the MAME Dev team themselves through their releases.

Contents

MAME 0.37b1 "Seta"

Released: 2000-04-06

These drivers have improved GRAPHICS

  • Background in Exerion. [Aaron Giles]
  • Fixed sprite colors in the MCR2 games, however overlapping sprites are still wrong. [Aaron Giles]

These drivers have improved SOUND

  • Emulated saucer sound in Space Invaders - sample no longer used (the other samples are still required). [Zsolt Vasvari]
  • Completed sound in Splash. [Manuel Abadia]
  • Samples support in Got-Ya. [Zsolt Vasvari]

Changes to the main program

  • Support for 24-bit artwork. [Mathis Rosenhauer]

Source

  • Support for a priority buffer, updated by tilemap.c, which can be used to draw sprites using the new function pdrawgfx(). This allowed to fix many tile/sprite priority bugs e.g. in Ajax, Lightning Thunder, Simpsons, Vendetta, Punk Shot, Gradius III and others. [Phil Stroffolino, Nicola Salmoria]
  • Change the API for tilemap_mark_tile_dirty() and the get_tile_info hooks, now a single parameter tile_index is used instead of (col,row). A function passed to tilemap_create() does the (col,row)->tile_index mapping, two standard functions are provided for the common cases.
All drivers have been converted to the new API except for namcos2.c, which is therefore broken at the moment. [Phil Stroffolino]
  • New GAME_UNEMULATED_PROTECTION flag.
  • 6803/63701 external port writes no longer set to 1 the bits that are set as inputs in the DDR register. Instead, they are set to the value returned by a read from the port. [Tatsuyuki Satoh]
  • Updated all memory handlers to the new READ_HANDLER()/WRITE_HANDLER() macro declarations. The old "function(int offset,int data)" style must not be used anymore.

New games supported

New clones supported

MAME 0.37b2 "GDR"

Released: 2000-05-06

These drivers have improved GRAPHICS

  • Correct colors in Lasso. [Phil Stroffolino]
  • Fixed colors in Reactor. [Fabrice Frances]

These drivers have improved SOUND

  • Fixed adpcm decoding in the K053260, this improves several Konami games. [Ernesto Corvi]
  • Sound in Demon. [Zsolt Vasvari]
  • Samples in Warrior. [Mathis Rosenhauer]
  • Sound in Lasso. [Phil Stroffolino]

Other drivers changes

Changes to the main program

  • Massive rewrite of the cheat system user interface. This is still a work in progress. [Brad Oliver]
  • First pass for multi language support with external translation files. [Brad Oliver]
  • Extended the internal font to support characters 128-255 (ISO Latin-1). [Juergen Buchmueller]
  • Fixed Hu6280 emulation bugs which caused missing levels in Trio the Punch. [Bryan McPhail]

Source

  • Replaced instances of "if (errorlog) fprintf(errorlog," with a call to the new function logerror().
  • New filetypes that must be supported by the OS dependant code:
FILETYPE_HIGHSCORE_DB
FILETYPE_HISTORY
FILETYPE_CHEAT
FILETYPE_LANGUAGE
new functions:
osd_readkey_unicode
osd_fgetc
osd_ungetc
osd_fgets
osd_feof
osd_ftell
new filed in struct Gameoptions: language_file. The OS dependant code must initialize it if it wants to use a translation file.
[Brad Oliver]
  • I added a new parameter to the end of the EEPROM interface to enable multiple reads to occur after a single read command. Added an EEPROM_set_data() routine that can be used to explicitly initialize the contents of the EEPROM if the NVRAM file isn't found. [Aaron Giles]

New games supported

New clones supported

MAME 0.37b3 "Leland"

Released: 2000-05-27

These drivers have improved GRAPHICS

These drivers have improved SOUND

  • Sound in Jumping. [Jarek Burczynski]

Other drivers changes

  • Lots of fixes to the 8080bw games. [Zsolt Vasvari]
  • Fixed dipswitches in many games. [Gerardo Oporto]
  • Alternate control system in Assault, only available when cheats are enabled. [Maurizio Zanello]

Source

  • Lots of changes to some CPU cores (mostly i86). I186 support. [Peter Trauner, Juergen Buchmueller, Aaron Giles]
  • Preliminary MIPS CPU emulation. [smf]
  • New makefile, easier to port, split into multiple files. [Juergen Buchmueller]
  • New modes for drawgfx(): TRANSPARENCY_NONE_RAW, TRANSPARENCY_PEN_RAW, TRANSPARENCY_PENS_RAW, TRANSPARENCY_THROUGH_RAW. The purpose of these is to allow you to work in "raw" colorspace (that is, unremapped pens) and then perform the palette lookup at the end. This is useful for a number of games that do collision detection or foreground/background blends (e.g., the palette index is ((fgpen << 4) | bgpen)).
When you use these modes, the "color" parameter doesn't refer to the palette any longer. Instead, it is just a value that is added to the raw pen value of the graphics you are drawing. That way, if your background layer uses pens 0-63 and your foreground layer uses pens 64-127, you can pass in a color of 0 when drawing the background layer and 64 when drawing the foreground.
Also added copybitmap_remap() and copyscrollbitmap_remap(). These take the same parameters as the originals, but don't make the assumption that TRANSPARENCY_NONE means TRANSPARENCY_NONE_RAW (which, if you think about it, is the way they work).
This means that you can do all your work with raw palette indexes until the very end, and then do a copybitmap_remap(TRANSPARENCY_NONE) to copy the result and do the remap step in the end.
Finally, there's a new pair of modes that are only supported in copybitmap(): TRANSPARENCY_BLEND and TRANSPARENCY_BLEND_RAW. For these modes, the source bitmap is shifted left by the "color" parameter and then ORed into the destination bitmap. This lets you compute the palette indexes and optionally do the lookup) for games that look up the palette by combining forground and background pen indices. [Aaron Giles]
  • Moved logerror() from mame.c to the OS dependant code, and removed errorlog from the GameOptions structure.
  • Major redesign of the artwork support. All the drivers need to do is call overlay_create() or overlay_load() and the rest is handled by the core.
Opacity/translucency support in 16-bit mode. Check out Space Invaders for example, the colored strips that make up the overlay is faintly visible under the black areas. [Mathis Rosenhauer, Zsolt Vasvari]
  • Fixed YM2608 adpcm support. [Aaron Giles]

New games supported

New clones supported

MAME 0.37b4 "Taito-B"

Released: 2000-06-16

PORTERS: THERE ARE A FEW API CHANGES, READ CAREFULLY THE SOURCE SECTION.

These drivers have improved GRAPHICS

  • Fixed final fireworks in Ajax. [Nicola Salmoria]

These drivers have improved SOUND

  • Fixed sound in the Exidy games. [Aaron Giles]
  • Improved YM2413 emulation. [Paul Leaman]

Source

  • [DOS] The SEAL patch was bugged on mono sound cards, a new one is included.
  • Fixed save_screen_snapshot() to save VIDEO_PIXEL_ASPECT_RATIO_1_2 games with the correct aspect ratio. Also introduced save_screen_snapshot_as(). Porters are STRONGLY ADVISED to use one of these functions to save screen shots, instead of providing their own. Note that osd_save_snapshot() now takes a bitmap argument, so it must not be hardwired to save Machine->scrbitmap (overlays wouldn't be saved otherwise). [nathan]
  • A few changes were made to allow run time changes to the visible area, and to simplify the OS dependant code by moving some functionality to the core.
  • Added visible_area to struct RunningMachine. Drivers must now use Machine->visible_area instead of Machine->drv->visible_area. The field in struct MachineDriver has been renamed default_visible_area and it should normally be used by the core only.
  • New function set_visible_area() that can be used by drivers to change the active display area at run time.
  • New function osd_set_visible_area() used to tell the OS dependant code the portion of the bitmap that has to be drawn on screen. It is passed coordinates relative to the actual bitmap, so no further processing is required for rotated games. The OS dependant code is allowed to display a smaller portion of the bitmap if necessary, but it must not draw a larger portion (which might contain garbage).
The function must call set_ui_visarea() to tell the core the portion of the bitmap which is actually visible (which might be smaller than requested), so the user interface can be drawn accordingly.
  • osd_update_video_and_audio() takes a bitmap parameter so must not be hardwired to draw Machine->scrbitmap.
  • New fields vector_width and vector_height in struct GameOptions. The OS dependant code must initialize them to force different resolutions for vector games. If left at 0, the default 640x480 is used.
  • osd_create_display() must no longer create the screen bitmap, this is done by the core. It must only create the display screen / window, and return 0 on success.
Note that the width and height parameters passed are now the dimensions of the visible area, not of the bitmap as they were before; therefore the function only has to create a screen / window of the requested size, without further processing, and without peeking into the drv->visible_area field.
This applies to osd_set_display() as well.
  • Changed osd_new_bitmap() and renamed it osd_alloc_bitmap() to avoid confusion with old drivers. The function is the same as before but it must not swap width and height for vertical games - this is done by the core.
osd_new_bitmap() and osd_free_bitmap() must not be called by drivers, they are reserved to the core. Drivers must call the equivalent bitmap_alloc() and bitmap_free() which take care of rotation for vertical games.
[Nicola Salmoria]
  • The meaning of the full_refresh parameter to vh_screenrefresh() has been slightly extend. It usually means "don't make incremental updates to the screen bitmap, redraw it completely", however if the driver wants it can also mean "redraw all temporary bitmaps". This happens when using the functions below. This way, drivers doing lots of memset(dirtybuffer,1) can be simplified and schedule it just at the beginning of vh_screenrefresh.
  • Added some functions that make flip screen handling a little more eloquent:
flip_screen_x_w(), flip_screen_y_w(), flip_screen_w() to set the flip_screen bits, and 3 variables flip_screen_x, flip_screen_y, flip_screen to read them back. If the flipscreen changes, the funtions automatically set full_refresh to true for the next call of vh_screenrefresh.
The functions also call tilemap_set_flip(ALL_TILEMAPS), so no further operations are required when using TileMaps.
Finally, the functions also adjust the visible area, mirroring it, in case it is asymmetrical. For example, rockola.c relies on this.
  • Also added 2 helper functions:
  • void set_vh_global_attribute( data_t *addr, data_t data ) This takes a pointer to any variable and a value, and sets the variable to the value. In addition, if the value has changed, it sets full_refresh to true by calling the next function.
  • void schedule_full_refresh(void) This just sets full_refresh to true for the next screenrefresh. See vidhrdw/galaxian.c for examples on this and set_vh_global_attribute.
[Zsolt Vasvari]

New games supported

New clones supported

MAME 0.37b5 "Wolf Unit / T-Unit / Taito F2 / Taito B / Cave / Psikyo / Seta / Tecmo16 / Shanghai3 / LSASquad / Mahjong"

Released: 2000-07-27

These drivers have improved GRAPHICS

Other drivers changes

  • Complete rewrite of the 34010 drivers. [Aaron Giles]
  • Lots of improvements to the Taito F2 driver. [David Graves]

Source

  • New video flag VIDEO_NEEDS_6BITS_PER_GUN to indicate to the OS dependant layer that a 16-bit display is not enough to reproduce the whole game's palette and a 24-bit display is preferred.
  • Support for compressed PCM playback in the C140 emulator. [CAB]
  • YMZ280B sound emulation, used by the Cave games. [Aaron Giles]
  • New functions in cpuintrf.c: cpu_get/set_cycle_table(), cpu_set_irq_callback(). [Juergen Buchmueller]
  • New cpu cores and fixes to old ones. [Juergen Buchmueller]
  • New graphic primitive copyrozbitmap(). This replaces copybitmapzoom() which was a special case.
A side effect is that, thanks to the better precision, the boxer on the Punch Out hall of fame looks much better. [Nicola Salmoria]
  • Abstracted Taito F2 gfx chip emulation to vidhrdw/taitoic.c (there's also some non-gfx chips in there). There are many other Taito games using these chips. [Nicola Salmoria]

New games supported

New clones supported

MAME 0.37b6 "Dooyong / Deniam / PC10"

Released: 2000-08-20

Other drivers changes

  • Several fixes and improvements to the Taito L games (sound, priorities, speed). [Nicola Salmoria, Jarek Burczynski]
  • I hope you didn't throw away unused PROMs from your archives.

Changes to the main program

  • [DOS] Instead of the internal game name, you can use on the command line the .zip file name, it can also include path, so for example
MAME G:\MyBoards\pacman.zip
will be equivalent to
MAME pacman -rompath G:\MyBoards
[David Widel]

Source

  • TMS5110 emulator, used by Bagman. [Jarek Burczynski]
  • Several changes to have the debugger run in the game screen under DOS.
The debugger display is now entirely rendered in the core using a standard bitmap, instead of relying on the OS dependant code to simulate a character mapped display.
Changes affecting porters are:
osd_set_display() removed
osd_set_screen_size() removed
osd_screen_update() removed
osd_wait_keypress() removed
osd_debugger_focus() added
osd_dbg.h removed
osd_update_video_and_audio() has extra debug_bitmap argument
osd_allocate_colors() has parameters for the debugger palette
mamedbg.c no longer requires clock_t and clock()
It's entirely up to the OS dependant code what to do with the game and debug bitmaps. They can be shown one at a time (giving the user a means to switch between them), or in two separate windows. osd_debugger_focus() is used to request that one of the two bitmaps be made visible to the user.
Under DOS, you can switch at any time between the game and debugger display by pressing F5.
[Juergen Buchmueller]
  • Removed osd_poll_joysticks(). Ports requiring polling of the joystick can do so in osd_update_video_and_audio().
  • True HD6309 emulation (instead of using the M6809). [Tim Lindner].

New games supported

New clones supported

MAME 0.37b7 "Shocking moral values with Buggy Challenge"

Released: 2000-09-05

-- FIRST, A WORD FROM OUR SPONSOR --

Some time ago I (Nicola) mistakenly removed Lotto Fun because I thought it was a gambling machine. After some more careful evaluation, it is evident that this is a game of skill, therefore it is now supported again. This was my mistake and I apologize for that.

As a reminder, the exclusion of gambling machines is purely technical, not moral or legal. Gambling machines are not video games, and just like MAME doesn't support mechanical pinballs (but it supports software pinballs), it also doesn't support gambling machines (but it supports games with a gambling theme). Both mechanical pinballs and gambling machines can be found in the same places where video games are; this doesn't make them all the same thing. The distinction between gambling machines and video games is not arbitrary: gambling machines usually require more money to play than a video game (e.g. 10 tokens to start), and they have settings that allow the operator to decide how much of the money that comes in should come out. No amount of skill can improve a player's chances of winning: this is entirely predetermined by the machine.

-- WE NOW RETURN YOU TO YOUR USUAL PROGRAMMING --

These drivers have improved GRAPHICS

  • Fixed sprite/tile priority in Black Tiger. [Nicola Salmoria]
  • Fixed startup garbage in Vastar. [Zsolt Vasvari]

Other drivers changes

  • Fixed the Pokey emulation so that the Tempest reset bug is fixed, this time for real and forever. [Juergen Buchmueller]

Source

  • Important for porters: changes to the dirty marking system. The blitting code was previously required to support two types of dirty marking: a "correct" one, used for vector games, where only the screen portions marked dirty during the current frame should be copied to the video card; and a "wrong" one, relying on a hack, where the blitter was also required to remember the dirty regions from *previous* frame, and copy those as well.
Only the "correct" one is left, which should somewhat simplify dirty handling in the OS dependant code. Moreover, the code must not check for VIDEO_TYPE_VECTOR to know whether to use dirty marking: it must check only VIDEO_SUPPORTS_DIRTY, which is set for vector games.
  • Important for porters: the HAS_XXX constants for cpu and sound emulation are no longer #defined in cpuintrf.h if they were not already defined. They are set by the makefile (rules.mak). If you are not using that in your port, you'll have to make sure that all constants are initialized somewhere.
  • Removed osd_led_w(); instead, an additional leds_status parameter is passed to osd_update_video_and_audio(). Drivers now have to use set_led_status().
  • Added VIDEO_PIXEL_ASPECT_RATIO_2_1, this should be honored by the OS dependant code just like VIDEO_PIXEL_ASPECT_RATIO_1_2.
  • Backdrops are handled by the core like overlays, specific support in the drivers is no longer necessary. [Mathis Rosenhauer]

New games supported

New clones supported

MAME 0.37b8 "First ever 68000 game emulated / Banana Mahjong!"

Released: 2000-10-02

These drivers have improved GRAPHICS

These drivers have improved SOUND

Source

  • Major changes to the memory interface.
Drivers must use the new MEMORY_READ_START etc. macros, and for 16-bit CPUs the API is completely changed: the new READ16_HANDLER, WRITE16_HANDLER function types must be used for memory handlers. The macros READ_WORD(), WRITE_WORD() etc. are obsolete: handlers must directly access 16-bit wide arrays (use data16_t * instead of the old unsigned char *); always use the new macro COMBINE_DATA() to store data in the arrays correctlyhandling 8-bit wide memory accesses. Use ACCESSING_MSB and ACCESSING_LSB to know if the specified byte is being accessed (necessary for 8-bit wide external hardware).
You no longer have to use MRA_BANKx for sparse RAM areas, you can use MRA_RAM just like with the 8-bit games.
A handful of drivers haven't beenconverted to the new API yet, and therefore don't work. On startup, they will give the error cpu # uses wrong data width memory handlers! and refuse to start.
The cheat system might be broken for 16-bit CPUs (untested).
[Juergen Buchmueller]
  • Changes to the tilemap API:
  • tilemap_render() is obsolete
  • struct tilemap is private - can't be accessed directly
  • tilemap_set_transparent_pen() and tilemap_set_transmask() replace direct poking in the tilemap
  • tilemap_mark_all_pixels_dirty() is obsolete (replaced by tilemap_dirty_palette() which is automatically called by palette_recalc())
  • additional parameter to tilemap_draw() to specify the priority mask to be stored in the priority buffer
[Phil Stroffolino]
  • Removed palette_transparent_color which is no longer needed by any driver. [Nicola Salmoria]
  • Removed the "ui" parameter from osd_mark_dirty(). [Nicola Salmoria]
  • Removed osd_clearbitmap(). The correct way to black the screen in drivers is, and has always been, fillbitmap(). osd_alloc_bitmap() no longer has to clear the bitmap (it isn't necessary since it's cleared by the drivers anyway).
extern int need_to_clear_bitmap removed as well; use schedule_full_refresh() instead (clearing the bitmap is not necessary because drivers are required to redraw the whole screen when full_refresh is 1). [Nicola Salmoria]
  • Rewritten the Nec CPU core, with correct timing and support for encryption. [Bryan McPhail]
  • Preliminary Irem GA20 sound emulation. [Bryan McPhail]
  • The profiler also watches memory read and write handlers. They were previously cumulated with the CPU emulation.
Also, the profiler is now disabled in non-debug builds because the performance hit is quite noticeable. [Nicola Salmoria]
  • The x86 asm 68000 core now has limited 68020 support and runs the Psikyo games, so is reenabled by default. [Darren Olafson]

New games supported

New clones supported

Other Versions


Personal tools