Previous Thread
Next Thread
Print Thread
Page 1 of 7 1 2 3 4 5 6 7
#103797 - 01/25/16 11:41 AM Separate arcade machines from MESS stuff in XML  
Joined: Jan 2016
Posts: 19
Wintermute0110 Offline
Member
Wintermute0110  Offline
Member

Joined: Jan 2016
Posts: 19
Japan
I'm developing a set of tools in Python to filter MAME and No-Intro ROMs named NARS Advanced ROM Sorting. NARS is useful to create custom game list for front-ends, for example, to filter out clones and mechanical games, to filter out games with controls you do not have (useful for people only having a joystick), to separate all games into three sets: 1970's, 1980's, and 1990's games, etc. NARS supports adding devices with ROMs as dependencies and I am working on also adding CHD as dependencies automatically. In case you want to have a look you can find it in GitHub (https://github.com/Wintermute0110/NARS).

After MAME and MESS merge, now both arcade machines and computers/calculators (MESS stuff) is listed in MAME XML file (the one you get if you execute $ mame -listXML > mame.xml). My question is: how I can differentiate MESS and MAME stuff? This will be useful when filtering MAME arcade machine lists only. Another useful use case would be to separate all MESS BIOS and put it in a list of BIOSes.

As an example currently implemented in NARS, to separate BIOS from standard machines (aka games) you can use the tag isbios=yes,

Code:
<machine name="neogeo" sourcefile="neogeo.c" isbios="yes">
  <description>Neo-Geo</description>
  <year>1990</year>
  <manufacturer>SNK</manufacturer>
  <biosset name="euro" description="Europe MVS (Ver. 2)" default="yes"/>
  <biosset name="euro-s1" description="Europe MVS (Ver. 1)"/>
  ...
  <rom name="sp-s2.sp1" bios="euro" size="131072" crc="" sha1="" region="mainbios" offset="0"/>
  <rom name="sp-s.sp1" bios="euro-s1" size="131072" crc="" sha1="" region="mainbios" offset="0"/>
  ...
</machine >


This tag if only yes if and only if the machine (previously known as "game") is a BIOS.

I have observed that in a MESS machine, usually you have a softwarelist tag,

Code:
<machine name="32x" sourcefile="megadriv.cpp">
  <description>Genesis with 32X (USA, NTSC)</description>
  <year>1994</year>
  <manufacturer>Sega</manufacturer>
  <biosset name="retail" description="Mars Version 1.0 (retail)" default="yes"/>
  <biosset name="sdk" description="Mars Version 1.0 (early sdk)"/>
...
  <softwarelist name="32x" status="original" filter="NTSC-U" />
</machine>


However, this rule is not always true for all MESS machines (there are some MESS machines with no software lists).

Does anybody know any tag combination in MAME XML that allows to separate MAME from MESS stuff? For example, a MESS machine always has a device tag, MAME arcade machines never, etc.

Thanks a lot!

#103799 - 01/25/16 12:27 PM Re: Separate arcade machines from MESS stuff in XML [Re: Wintermute0110]  
Joined: Dec 2013
Posts: 89
xinyingho Offline
Member
xinyingho  Offline
Member

Joined: Dec 2013
Posts: 89
This is a question that is often asked here. So to avoid bothering one of the MAME team, I'll answer in their stead.

The official answer is "you can't". Some of the goals for MAME and MESS merging are to have a unified experience and to maybe get new developers more interested into computers and consoles involved.

MAME as a project doesn't make any differences between machines and consider them all worthy of being emulated, particularly if they've been used for gaming at a point.

That's why you won't ever find a clear cut option to segregate between arcade machines and the remaining. You'll have to develop your own solution in order to achieve that.

Last edited by xinyingho; 01/25/16 12:28 PM.
#103800 - 01/25/16 12:56 PM Re: Separate arcade machines from MESS stuff in XML [Re: xinyingho]  
Joined: Jan 2016
Posts: 19
Wintermute0110 Offline
Member
Wintermute0110  Offline
Member

Joined: Jan 2016
Posts: 19
Japan
Originally Posted By xinyingho
This is a question that is often asked here. So to avoid bothering one of the MAME team, I'll answer in their stead.

The official answer is "you can't". Some of the goals for MAME and MESS merging are to have a unified experience and to maybe get new developers more interested into computers and consoles involved.

MAME as a project doesn't make any differences between machines and consider them all worthy of being emulated, particularly if they've been used for gaming at a point.

That's why you won't ever find a clear cut option to segregate between arcade machines and the remaining. You'll have to develop your own solution in order to achieve that.


Thanks for your answer.

I fully agree with MAME devs: from an hardware point of view, there may be no conceptual difference between a CPS1 system, where you plug games stored in a PCB having ROMs into an slot, and a MegaDrive, where you plug cartridges which inside have a PCB with ROMs into a slot.

However, from the user's point of view (and particularly front-end users) there is a clear difference between a console system and an arcade machine, not to mention that console/computer systems have a massive amount of games/software compared with arcade machines. For example, CPS1/Neogeo may have about 50 games, where consoles/computers may have thousands of games. Also, MAME treats arcade machines and consoles/computers differently: for every CPS1 game there is a different "machine". However, there is only one MegaDrive machine which is able to execute the whole software list. Why is not a CPS1 or NeoGeo software list?

Going back to question, can you please provide the links to such threads where the topic has been discussed? I searched for it but did not found anything useful. Also, if you have any hints or rules you may know please share them so I can save a lot of time researching and concentrate on development.

#103801 - 01/25/16 01:11 PM Re: Separate arcade machines from MESS stuff in XML [Re: Wintermute0110]  
Joined: May 2004
Posts: 1,405
Haze Offline
Very Senior Member
Haze  Offline
Very Senior Member

Joined: May 2004
Posts: 1,405
The rough difference is that software lists are designed for things an end user is meant to plug in / remove.

arcade cabinets were typically an all-in-one system with nothing the end user could remove (unless the end user physically owned the hardware)

note, even with the arcade stuff we do make some exceptions, the NeoGeo has a softlist hooked up and can be used in multi-slot mode, it's still an arcade machine (MVS multi-slot wasn't available for home use) but because it operates using a system with clearly defined removable media it works well using the software list system (and the non software list way of using it *might* eventually be dropped)

For the 'Give Us A Break' arcade quiz machine the driver is already configured to ONLY use the software list system, although I'm actually surprised that didn't get reverted because I didn't think we were quite at the stage of that being accepted yet.

I might also move the updater roms for the various midway 3D games into a software list, as while they're not cartridges / user removable media in a traditional sense it was an optional slot that owners of the hardware used to upgrade their HDDs, so is something of an unusual use case.

On the other side, things like 'batmantv' (non-arcade) really aren't much different to an arcade machine, they were all-in-one units (aside the TV you plugged them into) with absolutely nothing to configure, it behaves no differently to an arcade machine set on freeplay.

Also, not ALL consoles / computers had a huge amount of software, look at things like the Pyuuta / Tutor, or Casio PV1000/2000 systems, they had a similar amount of software to many arcade systems.

but yeah, generally the idea is that we want to see everything preserved for future generations, we don't really want a situation where people chip away at parts of the project and strip them away because right now by distributing things as a whole the 'good' stuff tends to carry the less interesting stuff, and from a preservation point of view, and project development point of view that is a hand side-effect we don't really want to lose by allowing people to filter too easily.

please keep in mind, you're getting this program for free, and the things that get done to help a greater goal are more important than personal goals.

If you really want to filter then logical criteria like 'is there a coin slot in the inputs' 'does it have a display' etc. can be used, but what we want to avoid is giving people anything that allows them to cleanly cut things out.

Also look at it from a psychological point of view, if we allow certain things to be cut out easily, and everybody starts cutting them out then developers are likely to wonder why they bother at all, it ends up feeling like their efforts are in vain, instead we want to encourage an environment where everybody who contributes feels that their work is an equal and important part of the project, valued in the same way. This might sound a little silly, but it is a real factor, we've already seen a tremendous uptake in the number of people developing non-arcade drivers now we've acknowledged it as part of the proper project, some of that is because it's a lot easier to work when you have people testing things (and when people already have the drivers as part of MAME they're more inclined to at least give them a little runout) and also because they see MAME as a longer term, safer place for their drivers than MESS, which always looked like maybe it could end up dying at any minute from the outside as it never had the same support levels as MAME.



#103803 - 01/25/16 02:50 PM Re: Separate arcade machines from MESS stuff in XML [Re: Wintermute0110]  
Joined: Dec 2013
Posts: 89
xinyingho Offline
Member
xinyingho  Offline
Member

Joined: Dec 2013
Posts: 89
Originally Posted By Wintermute0110
Going back to question, can you please provide the links to such threads where the topic has been discussed? I searched for it but did not found anything useful. Also, if you have any hints or rules you may know please share them so I can save a lot of time researching and concentrate on development.

I think Haze provided you with a complete answer from your previous questions smile

As for a topic, I found this thread. This question often popped up right after the merge, maybe mainly on other emulation-related forums :p.

Haze provided some hints as well. I can't provide you with anything better smile

#103807 - 01/25/16 08:52 PM Re: Separate arcade machines from MESS stuff in XML [Re: Wintermute0110]  
Joined: Apr 2015
Posts: 357
EoceneMiacid Offline
Senior Member
EoceneMiacid  Offline
Senior Member

Joined: Apr 2015
Posts: 357
You could use AntoPisa's category.ini, which allows you to distinguish arcade games from other machines.

#103813 - 01/26/16 12:55 PM Re: Separate arcade machines from MESS stuff in XML [Re: Haze]  
Joined: Jan 2016
Posts: 19
Wintermute0110 Offline
Member
Wintermute0110  Offline
Member

Joined: Jan 2016
Posts: 19
Japan
I agree with most of your post, only have some comments.

Originally Posted By Haze

but yeah, generally the idea is that we want to see everything preserved for future generations, we don't really want a situation where people chip away at parts of the project and strip them away because right now by distributing things as a whole the 'good' stuff tends to carry the less interesting stuff, and from a preservation point of view, and project development point of view that is a hand side-effect we don't really want to lose by allowing people to filter too easily.

The whole purpose of NARS if for people who have whole collections that are completely unusable on dumb front-ends which need a filtered list. People who have abridged collections do not need filtering. NARS encourage users to have the full set and try several filters, which I believe is good for the preservation purposes.

Also, not every front-end is a full-featured one like QMC2 and filtered list should be provided to have usability: for example, having 10000 games (or "machines") in Advanced Launcher in Kodi may take 30 seconds to load... which makes the front-end unusable. However, you can split your games by year, etc. so you have several smaller lists that are manageable and load quickly. Another example: many people only have a joystick available, not everybody executes MAME from a computer with a keyboard and mouse. For them, it is inconvenient to have machines which use a keyboard as input.

The whole purpose of NARS is to make MAME/MESS more appealing to end users, particularly when using dumb front ends. The bigger the numbers of users, the more people will report bugs and may contribute to the project as a developer.

Originally Posted By Haze

please keep in mind, you're getting this program for free, and the things that get done to help a greater goal are more important than personal goals.

We are all in the same boat. You can also get NARS for free and the code and documentation is in Github for anyone's benefit.

Originally Posted By Haze

If you really want to filter then logical criteria like 'is there a coin slot in the inputs' 'does it have a display' etc. can be used, but what we want to avoid is giving people anything that allows them to cleanly cut things out.

Thanks a lot for the "has a coin slot" tip. That would be a very useful filter.

#103814 - 01/26/16 12:58 PM Re: Separate arcade machines from MESS stuff in XML [Re: xinyingho]  
Joined: Jan 2016
Posts: 19
Wintermute0110 Offline
Member
Wintermute0110  Offline
Member

Joined: Jan 2016
Posts: 19
Japan
Originally Posted By xinyingho
Originally Posted By Wintermute0110
Going back to question, can you please provide the links to such threads where the topic has been discussed? I searched for it but did not found anything useful. Also, if you have any hints or rules you may know please share them so I can save a lot of time researching and concentrate on development.

I think Haze provided you with a complete answer from your previous questions smile

As for a topic, I found this thread. This question often popped up right after the merge, maybe mainly on other emulation-related forums :p.

Haze provided some hints as well. I can't provide you with anything better smile


Thanks a lot! I will have a look at the thread for filtering ideas.

#103815 - 01/26/16 01:07 PM Re: Separate arcade machines from MESS stuff in XML [Re: EoceneMiacid]  
Joined: Jan 2016
Posts: 19
Wintermute0110 Offline
Member
Wintermute0110  Offline
Member

Joined: Jan 2016
Posts: 19
Japan
Originally Posted By EoceneMiacid
You could use AntoPisa's category.ini, which allows you to distinguish arcade games from other machines.

Thanks for the suggestion. However, I think is not a good idea because MESS machines may have several different categories, for example:

Code:
megacd=Game Console
...
megast=Home Computer

So even with that it is complicated to separate arcade from non-arcade. The ideal situation would be the categories for MESS will be something like this,

Code:
megacd=MESS / Game Console
...
megast=MESS / Home Computer

I think I will create a filter that defines an arcade machine like this: something you can play strait away, that is, you type $ mame game and it runs, and has a coin slot. Everything else would be considered MESS stuff, which generally have a different syntax $ mame machine media game.

#103816 - 01/26/16 01:29 PM Re: Separate arcade machines from MESS stuff in XML [Re: Wintermute0110]  
Joined: Mar 2001
Posts: 15,775
R. Belmont Offline
R. Belmont  Offline

Very Senior Member

Joined: Mar 2001
Posts: 15,775
USA
Quote:
However, I think is not a good idea because MESS machines may have several different categories


Yes, and MAME machines of the type you're seeking typically have one category. This seems very much like you consider the former MESS to be bad and hope to prevent users from ever seeing its drivers, which is exactly the sort of behavior the devs wish to avoid.

Page 1 of 7 1 2 3 4 5 6 7

Who's Online Now
2 registered members (Pernod, 1 invisible), 23 guests, and 3 spiders.
Key: Admin, Global Mod, Mod
Shout Box
Forum Statistics
Forums9
Topics8,456
Posts109,747
Members4,768
Most Online225
May 26th, 2014
Powered by UBB.threads™ PHP Forum Software 7.6.0
Page Time: 0.034s Queries: 15 (0.011s) Memory: 5.0343 MB (Peak: 5.2631 MB) Zlib enabled. Server Time: 2017-12-15 21:34:15 UTC