0.36

Note1: MESS is now developed and distributed as a MAME source 
override, hence the MESS version number leap ;-) 
Note2: .inp record/playback does still not work currently.  


New System Drivers Supported (in no particular order):
------------------------------------------------------
Vectrex  [Mathis Rosenhauer, Chris Salomon]
Atari 800/5200  [Juergen Buchmueller]
Apple II Family  [Mike Balfour, Brad Oliver]
PDP/1  [Chris Salomon]
Sega Master System  [Mathis Rosenhauer, Brad Oliver]
Sega GameGear  [Mathis Rosenhauer, Brad Oliver]
Kaypro CP/M  [Juergen Buchmueller, Benjamin C. W. Sittler]
Bally Astrocade  [Frank Palazzolo]
Amstrad CPC  [Kevin Thacker]
Atari 7800  [Dan Boris]
Commodore Amiga  [Ernesto Corvi]
Dragon 32  [Mathis Rosenhauer]
EACA Colour Genie 2000  [Mathis Rosenhauer]
Enterprise 128K  [Kevin Thacker]
KC Compact  [Kevin Thacker]
PC-Engine / Turbo Graphics-16  [Charles Mac Donald]
PC-compatible (MDA, CGA)  [Juergen Buchmueller]
RA+A Spectrum I+  [Mathis Rosenhauer]
TI-994a  [Raphael Nabet]
ZX-Spectrum 48k  [Allard van der Bas]
KIM 1  [Juergen Buchmueller]
Tandy 1000TX (PC clone)  [Juergen Buchmueller]
Coco 3  [Nate Woods] 
ORIC 1  [Paul Cook]
ORIC Atmos  [Paul Cook]
Vic20 (NTSC)  [Peter Trauner]
Vc20 (Vic20 Pal)  [Peter Trauner]
Commodore 16  [Peter Trauner]
Commodore Plus4 NTSC  [Peter Trauner]
VZ 200  [Juergen Buchmueller]
VZ 300  [Juergen Buchmueller]
MSX  [Sean Young]
GameBoy (preliminary)  [Carsten Sorensen, Marat Fayzullin,
                       Pascal Felber, Hans de Goede, 
                       Juergen Buchmueller]
TI99_4 (not working)  [Raphael Nabet]
CP400  [Nate Woods]
AdventureVision  [Dan Boris]
Commodore64(NTSC&pal), Max  [Peter Trauner]
Apple1, Nascom1  [Paul Danials]
MicroBee (32,56k)  [Juergen Buchmueller]
zx80, zx81, ts1000, aszmic, pc8300, pow3000  
  [Juergen Buchmueller]
laser 110, 210, 200, 310, 350, 500, 700, tx8000
  [Juergen Buchmueller]
cpc464, cpc664  [Kev Thacker]
kc85_4 (preliminary)  [Kev Thacker]
a400, a400pal (16K RAM only)  [Juergen Buchmueller]
spectrum plus3  [Kev Thacker]
a800pal  [Juergen Buchmueller]
sys80  [Juergen Buchmueller]
c364, c64gs  [Peter Trauner]
ti99_4e, ti99_4ae  [Raphael Nabet]
Atari800xl (not working)  [Juergen Buchmueller]
Philips P2000t/m  [Paul Daniels]
Tandy MC-10  [Nate Woods]
Uk101, SuperBoard (Note: have SHIFT pressed when typing)
  [Paul Daniels]	
MSX Japanese and Korean  [Sean Young]  
Commodore 65  [Peter Trauner]
Commodore 128  [Peter Trauner]
Commodore PET2000/CBM2000  [Peter Trauner]
Commodore CBM3000  [Peter Trauner]
Commodore CBM4000  [Peter Trauner]
Commodore CBM8000  [Peter Trauner]
MacIntosh Plus  [Nate Woods, Ernesto Corvi]
CPS Changer - Street Fighter Zero  [MAME team]
Commodore B series  [Peter Trauner]
MSX1 UK  [Sean Young]
C16 (c1551)  [Peter Trauner]
Plus4 (c1551)  [Peter Trauner]


System Driver Changes:
----------------------
- Apple2 driver keyboard fix 	 [Juergen Buchmueller]

- Apple2 driver changed to use 'normalized' character and graphics 
  layout.  The scanlines are now done by the hosts video code.
  [Juergen Buchmueller]

- ColecoVision Video refresh fixed. [Sean Young]

- Adjusted timing of NES clock to be accurate. [Brad Oliver]

- Preliminary Mockingboard support for the Apple II. [Brad Oliver]

- Genesis sound improvements. [Gareth Long]

- Several drivers have had compatibility improved (eg. NES, Genesis and Coleco)

- The Apple II drivers have been fleshed out a little more. The //e
  family now works. The disk emulation is significantly faster as well.
  There is still plenty of work to be done though. [Brad Oliver]

- Bug fixes to the TI9928a video code. This affects the ColecoVision and the
  TI-994a drivers. [Raphael Nabet, Sean Young]

- NES psg frequency is now correct. [Brad Oliver]

- Genesis now features preliminary FM sound. [Gareth Long, Tatsuyuki Satoh]

- Increased Genesis compatibility. [Gareth Long]

- Memory allocation fix in the NES driver [Juergen Buchmueller]

- Commodore SID emulation!  [Peter Trauner]


Other Changes:
--------------

- [DOS] Images specified at the command line must now be accompanied by the device they 
  are to be attached to, and will not be loaded unless the device is specified *and* 
  supported by that system.  Eg, to attach a cartridge for the NES, you must specify: 
  MESS nes -cart galaga.nes
  This may affect the usage of frontends, however it brings the MESS command line 
  into sync with the well accepted MAME convention for command line usage.  See mess.txt 
  for options and usage.

- Added support to automagically append or replace extensions for files 
  opened with image_fopen(), which means, if opening a given filename 
  fails (also from the optional clone_of parent driver), the code replaces 
  or appends the next available extension and tries again.   Therefore, there 
  is no need to actually supply the file extension to the command line.
  [Juergen Buchmueller]

- The core is based on MAME 0.36 final. This incorporates all 
  features of the update to this core.  [MAME team] 

- New option -listdevices. Use this to obtain valid device names for use at the command 
  line to attach images to the system.

- Extensive CRC updates.
  [Sean Young, Chris Henry, Gerardo Jorrin, Peter Trauner, Cowering]
  SysInfo.dat documentation update 
  [Thierry Schimbi, Chris Henry, Kev Thacker, Raphael Nabet]
  Please send all CRC/sysinfo file contributions to Chris Henry. 
  (battlepriest@hotmail.com).

- Small bug in the 6522 emulator fixed. [Gordon Jefferyes]

- Important inclusions for this release:
  *wave sound interface and IODevice handler
  *speaker sound driver (replaces the buzzer code)
  *preliminary file manager
  *mess_printf() which checks for gui_host
  Check the UI (TAB) for handling options for most of the above.

- Generic M6847 code  [Nate Woods]

- Wd179x disk access update.  The correct sector size is now 
  calculated for the nec765 real FDD access.  Now it is calculated 
  from sector size. Loading from real disc works on Enterprise 
  emulator.  [Kev Thacker]

- void via_set_clock(int which,int clock); added to 6522via.c.  This 
  can be called after via_config() to change the clock, otherwise the 
  clock speed of CPU1 is used. [Mathis Rosenhauer] 

- mess/msdos.c & mess/msdos.h created for MESS DOS specific functions.
  Note: Each port is now responsible for handling these functions.


- GAME_ALIAS flag added.  Use this when specifying a clone system
  which requires the same romset as another. [Juergen Buchmueller]

- System documentation is now contained in sysinfo.dat and 
  sysinfo.htm.  Use dat2html to generate sysinfo.htm from sysinfo.dat
  [Chris Henry, Juergen Buchmueller, Ben Bruscella]

- You can now specify switches on the commandline in which case every 
  image name following them goes to that respective slot, regardless 
  of it's extension.  See mess.txt for some examples
  [Peter Trauner, Juergen Buchmueller]

- [DOS] New options for IMAGES to be opened, namely OSD_FOPEN_READ, 
  OSD_FOPEN_WRITE, OSD_FOPEN_RW, and OSD_FOPEN_RW_CREATE.  Check 
  mess.h for a description of what they are used for.  Be sure to use 
  these semantics when handling read/write files.
  [Juergen Buchmueller]
- slight changes to the PDP1 driver.

- [DOS] TI99 keyboard fix! [Raphael Nabet]

- System ROM (Image) name matched from CRC database file on startup.  
  (file stored in CRC directory)

- You can now specify in MESS.CFG the *exact* directory a rom is 
  which you want to run.  no longer necessray to have a directory with 
  the same name as the system [Juergen Buchmueller] 
  
- Zipped cart and image support added. To use, make sure that the zip has the
  same name as the file in the zip. (eg) for a coleco CART called
  "venture.rom", zip to "venture.zip".  When running MESS, type "mess coleco
  venture.rom".  MESS will then load "venture.rom" from "venture.zip".  Any
  system roms can also be zipped and placed anywhere in you ROMPATH. (eg)
  coleco.rom in coleco.zip.
  [Ben Bruscella]

- GAME_COMPUTER flag added.  Use this to specify that the system requires
  full keyboard emulation.  Emulated Computer systems now use the 
  scroll_lock key to toggle the keyboard emulation.  When on, MAME keys 
  (such as "P" for pause) are disabled, until toggled with the scroll_lock.
  [Juergen Buchmueller]


- [DOS] MAKEFILE/compilation changes. To compile MESS, simply make sure you
  can compile MAME. Then, apply the MESS source over-ride and:

   1. Rename MAKEFILE to MAKEFILE.mm
   2. Rename MAKEFILE.MES MAKEFILE
   3. Type MAKE


- There have been major changes to the Driver structures and loading procedure.  

*Here is an overview:

* Every game driver's struct GameDriver (src/mess/systems/*.c) is now
defined using one of four macros COMP/COMPX or CONS/CONSX.
COMP is for computers and CONS is for consoles. The X versions allow
specifying additional flags (GAME_NOT_WORKING ect.)

* Every game driver specifies it's peripherals in an array of
"struct IODevice" elements.

* rom_load and rom_id fields were moved into that list, together with
the number of devices and the known file extensions for images of that
type.

* MAME's src/driver.h now only contains one pointer to this list of
devices, all of MESS' extra fields are gone.
Old:
#ifdef MESS
    int (*rom_load)(void);
    int (*rom_id)(const char *name, const char *gamename);
    const char **file_extension;
    int num_of_rom_slots;
    int num_of_floppy_drives;
    int num_of_hard_drives;
    int num_of_cassette_drives;
#endif

New:
#ifdef MESS
    const struct IODevice *dev;
#endif


* The global rom_name[], floppy_name[], hard_name[] and cassette_name[]
arrays are gone! Instead each machine driver (src/mess/systems/*.c)
should specify an init function for every device it supports.
This init function is called during the startup with an id (0 to max
instances of the device - 1) and a filename.

* rom_load is called very early when a driver is started.
It is the 'init' function for the device type IO_CARTSLOT, so the
previous statement applies here too. 

* the rom_id function pointer moved into the struct IODevice too.
Every device can have a id function, so if it is possible to identify
eg. a floppy disk, harddisk, cassette ect., you should provide the
identifying functions and put them in this field in your systems/driver code.
The id function return value is sort of TRUE/FALSE, ie. non zero
means image is ok for this device, zero is not recognized.

* The IODevice contains an "void (*exit)(int id);" entry, so each
driver could (and probably should) handle shutting down the various
device instances.
The exit entries are called from src/mess/mess.c exit_devices(),
which is called from src/mame.c shutdown_machine().

* Startup handling moved from src/mame.c to src/mess/mess.c
In the first stage load_image() is called.
The images specified on the command line are parsed in mess.c now, and
a list of "struct ImageFile" entries in the GameOptions is set.
This struct contains a "char *name" and an "int type", where type should
be set to one of the IO_CARTSLOT, IO_FLOPPY ect. values.
GUI ports could use this to store some file selection lists together with
the type of files selected.
The DOS port stores image names from the command line (*argv) in this
array, and the type of image is determined this way:
1st: user specified a type using a switch before a (list of) name(s).
     For DOS this looks like "mess system -flop test -cart rom1 -cart rom2"
2nd: the extension of the filename matches one of the MessDevice entries
     of the driver which is started. So if a driver defines "cas" for
     it's IO_CASSETTE device and "dsk" for it's IO_FLOPPY device, the
     command line "mess driver a.dsk b.cas" will be sufficient.

* In the second stage during startup, the get_files() function is called
and images are sorted into some (static) arrays of names in mess.c.
This is to allow easier/faster access to them and maybe useful for
swapping the names and calling init_<device> again.

* The third stage now walks through the list of devices of the driver
which is to be started and calls it's init functions with the the
names from the arrays. If the driver returns non zero, the startup
process is terminated here.
