Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
Robert

ARCADE 0.205

Recommended Posts

There is new functionality written by Calamity originally for groovymame. It basically saves sliders states for audio levels cpus overclock and picture adjustments. Would be great to have this also in ARCADE32/64.

 

I ask about long time ago - http://www.1emulation.com/forums/topic/35683-feature-sound-boost-with-save/ and now this functionality is ready

diff -Nru src/frontend/mame/ui/ui.cpp src/frontend/mame/ui/ui.cpp
--- src/frontend/mame/ui/ui.cpp 2018-11-28 07:07:25.000000000 +0100
+++ src/frontend/mame/ui/ui.cpp 2018-12-22 11:37:18.000000000 +0100
@@ -30,6 +30,7 @@
#include "ui/state.h"
#include "ui/viewgfx.h"
#include "imagedev/cassette.h"
+#include "config.h"
/***************************************************************************
@@ -208,6 +209,9 @@
// request a callback upon exiting
machine().add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(&mame_ui_manager::exit, this));
+ // register callbacks
+ machine().configuration().config_register("sliders", config_load_delegate(&mame_ui_manager::config_load, this), config_save_delegate(&mame_ui_manager::config_save, this));
+
// create mouse bitmap
uint32_t *dst = &m_mouse_bitmap.pix32(0);
memcpy(dst,mouse_bitmap,32*32*sizeof(uint32_t));
@@ -1517,6 +1521,8 @@
}
#endif
+ config_apply();
+
std::vector<ui::menu_item> items;
for (auto &slider : m_sliders)
{
@@ -2234,3 +2240,80 @@
{
ui::menu::stack_reset(machine());
}
+
+//-------------------------------------------------
+// config_load - read data from the
+// configuration file
+//-------------------------------------------------
+
+void mame_ui_manager::config_load(config_type cfg_type, util::xml::data_node const *parentnode)
+{
+ // we only care about game files
+ if (cfg_type != config_type::GAME)
+ return;
+
+ // might not have any data
+ if (parentnode == nullptr)
+ return;
+
+ // iterate over slider nodes
+ for (util::xml::data_node const *slider_node = parentnode->get_child("slider"); slider_node; slider_node = slider_node->get_next_sibling("slider"))
+ {
+ const char *desc = slider_node->get_attribute_string("desc", "");
+ int32_t saved_val = slider_node->get_attribute_int("value", 0);
+
+ // create a dummy slider to store the saved value
+ m_sliders_saved.push_back(slider_alloc(0, desc, 0, saved_val, 0, 0, 0));
+ }
+}
+
+
+//-------------------------------------------------
+// config_appy - apply data from the conf. file
+// This currently needs to be done on a separate
+// step because sliders are not created yet when
+// configuration file is loaded
+//-------------------------------------------------
+
+void mame_ui_manager::config_apply(void)
+{
+ // iterate over sliders and restore saved values
+ for (auto &slider : m_sliders)
+ {
+ for (auto &slider_saved : m_sliders_saved)
+ {
+ if (!strcmp(slider->description.c_str(), slider_saved->description.c_str()))
+ {
+ std::string tempstring;
+ slider->update(machine(), slider->arg, slider->id, &tempstring, slider_saved->defval);
+ break;
+
+ }
+ }
+ }
+}
+
+
+//-------------------------------------------------
+// config_save - save data to the configuration
+// file
+//-------------------------------------------------
+
+void mame_ui_manager::config_save(config_type cfg_type, util::xml::data_node *parentnode)
+{
+ // we only care about game files
+ if (cfg_type != config_type::GAME)
+ return;
+
+ std::string tempstring;
+ util::xml::data_node *slider_node;
+
+ // save UI sliders
+ for (auto &slider : m_sliders)
+ {
+ int32_t curval = slider->update(machine(), slider->arg, slider->id, &tempstring, SLIDER_NOCHANGE);
+ slider_node = parentnode->add_child("slider", nullptr);
+ slider_node->set_attribute("desc", slider->description.c_str());
+ slider_node->set_attribute_int("value", curval);
+ }
+}
diff -Nru src/frontend/mame/ui/ui.h src/frontend/mame/ui/ui.h
--- src/frontend/mame/ui/ui.h 2018-11-28 07:07:25.000000000 +0100
+++ src/frontend/mame/ui/ui.h 2018-12-22 10:56:04.000000000 +0100
@@ -215,6 +215,11 @@
void start_save_state();
void start_load_state();
+ // config callbacks
+ void config_load(config_type cfg_type, util::xml::data_node const *parentnode);
+ void config_save(config_type cfg_type, util::xml::data_node *parentnode);
+ void config_apply(void);
+
// slider controls
std::vector<ui::menu_item>& get_slider_list(void);
@@ -299,6 +304,7 @@
#endif
std::vector<std::unique_ptr<slider_state>> m_sliders;
+ std::vector<std::unique_ptr<slider_state>> m_sliders_saved;
};
Edited by haynor666

Share this post


Link to post
Share on other sites

You guys need to release arcade version before mame release, because people is complain i had to check crlmamepro backup folder to get roms from the older version of mame, and there is no roms in there. So i need to force my self to check everytime mame old versions to get the roms. If you guys can´t just let it stay as it is. I really don´t care. Those people who complain, just don´t want to waste their time to help. Thank you. :msnwink:

Edited by Hyperscorpio

Share this post


Link to post
Share on other sites

ssv driver is probably not modified

Gradius/Nemesis audio is also not fixed

Edited by haynor666

Share this post


Link to post
Share on other sites
Posted (edited)

Restored patch for nemesis.cpp

 

void nemesis_state::nemesis(machine_config &config)
{
	/* basic machine hardware */
	M68000(config, m_maincpu, 18432000/2); /* 9.216 MHz? */
//  14318180/2, /* From schematics, should be accurate */
	m_maincpu->set_addrmap(AS_PROGRAM, &nemesis_state::nemesis_map);

	Z80(config, m_audiocpu, 14318180/4); /* From schematics, should be accurate */
	m_audiocpu->set_addrmap(AS_PROGRAM, &nemesis_state::sound_map); /* fixed */

	ls259_device &outlatch(LS259(config, "outlatch")); // 13J
	outlatch.q_out_cb<0>().set(FUNC(nemesis_state::coin1_lockout_w));
	outlatch.q_out_cb<0>().append(FUNC(nemesis_state::coin2_lockout_w));
	outlatch.q_out_cb<2>().set(FUNC(nemesis_state::sound_irq_w));

	ls259_device &intlatch(LS259(config, "intlatch")); // 11K
	intlatch.q_out_cb<0>().set(FUNC(nemesis_state::irq_enable_w));
	intlatch.q_out_cb<2>().set(FUNC(nemesis_state::gfx_flipx_w));
	intlatch.q_out_cb<3>().set(FUNC(nemesis_state::gfx_flipy_w));

	WATCHDOG_TIMER(config, "watchdog", 0);

	/* video hardware */
	SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
	m_screen->set_refresh_hz((18432000.0/4)/(288*264));      /* ??? */
	m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
	m_screen->set_size(32*8, 32*;
	m_screen->set_visarea(0*8, 32*8-1, 2*8, 30*8-1);
	m_screen->set_screen_update(FUNC(nemesis_state::screen_update_nemesis));
	m_screen->set_palette(m_palette);
	m_screen->screen_vblank().set(FUNC(nemesis_state::nemesis_vblank_irq));

	GFXDECODE(config, m_gfxdecode, m_palette, gfx_nemesis);
	PALETTE(config, m_palette, 2048);

	/* sound hardware */
	SPEAKER(config, "mono").front_center();

	GENERIC_LATCH_8(config, "soundlatch");

	ay8910_device &ay1(AY8910(config, "ay1", 14318180/8));
	ay1.set_flags(AY8910_LEGACY_OUTPUT);
	ay1.port_a_read_callback().set(FUNC(nemesis_state::nemesis_portA_r));
	ay1.add_route(ALL_OUTPUTS, "mono", 0.20);

	ay8910_device &ay2(AY8910(config, "ay2", 14318180/8));
	ay2.port_a_write_callback().set(m_k005289, FUNC(k005289_device::k005289_control_A_w));
	ay2.port_b_write_callback().set(m_k005289, FUNC(k005289_device::k005289_control_B_w));
	ay2.add_route(ALL_OUTPUTS, "mono", 1.00);

	FILTER_RC(config, m_filter1);
	m_filter1->add_route(ALL_OUTPUTS, "mono", 1.0);
	FILTER_RC(config, m_filter2);
	m_filter2->add_route(ALL_OUTPUTS, "mono", 1.0);
	FILTER_RC(config, m_filter3);
	m_filter3->add_route(ALL_OUTPUTS, "mono", 1.0);
	FILTER_RC(config, m_filter4);
	m_filter4->add_route(ALL_OUTPUTS, "mono", 1.0);

	K005289(config, m_k005289, 3579545);
	m_k005289->add_route(ALL_OUTPUTS, "mono", 0.35);
}

void nemesis_state::gx400(machine_config &config)
{
	/* basic machine hardware */
	M68000(config, m_maincpu, 18432000/2); /* 9.216MHz */
	m_maincpu->set_addrmap(AS_PROGRAM, &nemesis_state::gx400_map);
	TIMER(config, "scantimer").configure_scanline(FUNC(nemesis_state::gx400_interrupt), "screen", 0, 1);

	Z80(config, m_audiocpu, 14318180/4);        /* 3.579545 MHz */
	m_audiocpu->set_addrmap(AS_PROGRAM, &nemesis_state::gx400_sound_map);

	ls259_device &outlatch(LS259(config, "outlatch"));
	outlatch.q_out_cb<0>().set(FUNC(nemesis_state::coin1_lockout_w));;
	outlatch.q_out_cb<1>().set(FUNC(nemesis_state::coin2_lockout_w));
	outlatch.q_out_cb<2>().set(FUNC(nemesis_state::sound_irq_w));
	outlatch.q_out_cb<7>().set(FUNC(nemesis_state::irq4_enable_w)); // ??

	ls259_device &intlatch(LS259(config, "intlatch"));
	intlatch.q_out_cb<0>().set(FUNC(nemesis_state::irq2_enable_w));
	intlatch.q_out_cb<1>().set(FUNC(nemesis_state::irq1_enable_w));
	intlatch.q_out_cb<2>().set(FUNC(nemesis_state::gfx_flipx_w));
	intlatch.q_out_cb<3>().set(FUNC(nemesis_state::gfx_flipy_w));

	WATCHDOG_TIMER(config, "watchdog");

	/* video hardware */
	SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
	m_screen->set_refresh_hz((18432000.0/4)/(288*264)); /* 60.606060 Hz */
	m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
	m_screen->set_size(32*8, 32*;
	m_screen->set_visarea(0*8, 32*8-1, 2*8, 30*8-1);
	m_screen->set_screen_update(FUNC(nemesis_state::screen_update_nemesis));
	m_screen->set_palette(m_palette);
	m_screen->screen_vblank().set_inputline("audiocpu", INPUT_LINE_NMI);

	GFXDECODE(config, m_gfxdecode, m_palette, gfx_nemesis);
	PALETTE(config, m_palette, 2048);

	/* sound hardware */
	SPEAKER(config, "mono").front_center();

	GENERIC_LATCH_8(config, "soundlatch");

	ay8910_device &ay1(AY8910(config, "ay1", 14318180/8));
	ay1.set_flags(AY8910_LEGACY_OUTPUT);
	ay1.port_a_read_callback().set(FUNC(nemesis_state::nemesis_portA_r));
	ay1.add_route(ALL_OUTPUTS, "mono", 0.20);

	ay8910_device &ay2(AY8910(config, "ay2", 14318180/8));
	ay2.port_a_write_callback().set(m_k005289, FUNC(k005289_device::k005289_control_A_w));
	ay2.port_b_write_callback().set(m_k005289, FUNC(k005289_device::k005289_control_B_w));
	ay2.add_route(ALL_OUTPUTS, "mono", 1.00);

	FILTER_RC(config, m_filter1);
	m_filter1->add_route(ALL_OUTPUTS, "mono", 1.0);
	FILTER_RC(config, m_filter2);
	m_filter2->add_route(ALL_OUTPUTS, "mono", 1.0);
	FILTER_RC(config, m_filter3);
	m_filter3->add_route(ALL_OUTPUTS, "mono", 1.0);
	FILTER_RC(config, m_filter4);
	m_filter4->add_route(ALL_OUTPUTS, "mono", 1.0);

	K005289(config, m_k005289, 3579545);
	m_k005289->add_route(ALL_OUTPUTS, "mono", 0.35);

	VLM5030(config, m_vlm, 3579545);
	m_vlm->set_addrmap(0, &nemesis_state::gx400_vlm_map);
	m_vlm->add_route(ALL_OUTPUTS, "mono", 0.70);
}

Still sound in gwarrior is not too good. Nemesis/Gradius seems to be ok.

Edited by haynor666

Share this post


Link to post
Share on other sites

The slider stuff has been added. I tested it by starting ozmawars, changing the volume to -7db, quit, start the game again, still says -7db. With standard MAME it goes back to 0db.

 

I'm assuming that's what you're after.

Share this post


Link to post
Share on other sites

Made the changes to nemesis.cpp - it would have been nice if you'd highlighted the changed lines, as it is I'm not sure if I found everything.

 

One thing to remember, when mamedev do changes to a modified driver and a conflict occurs, I'm not going to spend time trying to figure out what the changes were doing and how to keep them there, I will simply revert it back to MAME standard. If it's important to you, you will show me what to change back.

Share this post


Link to post
Share on other sites

Diff for nemesis:

 

diff -Nru src/mame/drivers/nemesis.cpp src-fx/mame/drivers/nemesis.cpp
--- src/mame/drivers/nemesis.cpp	Tue Dec 25 18:33:07 2018
+++ src-fx/mame/drivers/nemesis.cpp	Tue Jan  1 19:45:43 2019
@@ -1499,16 +1499,14 @@
 	GENERIC_LATCH_8(config, "soundlatch");
 
 	ay8910_device &ay1(AY8910(config, "ay1", 14318180/8));
-	ay1.set_flags(AY8910_LEGACY_OUTPUT | AY8910_SINGLE_OUTPUT);
+	ay1.set_flags(AY8910_LEGACY_OUTPUT);
 	ay1.port_a_read_callback().set(FUNC(nemesis_state::nemesis_portA_r));
-	ay1.add_route(ALL_OUTPUTS, "filter1", 0.20);
+	ay1.add_route(ALL_OUTPUTS, "mono", 0.20);
 
 	ay8910_device &ay2(AY8910(config, "ay2", 14318180/8));
 	ay2.port_a_write_callback().set(m_k005289, FUNC(k005289_device::k005289_control_A_w));
 	ay2.port_b_write_callback().set(m_k005289, FUNC(k005289_device::k005289_control_B_w));
-	ay2.add_route(0, "filter2", 1.00);
-	ay2.add_route(1, "filter3", 1.00);
-	ay2.add_route(2, "filter4", 1.00);
+	ay2.add_route(ALL_OUTPUTS, "mono", 1.00);
 
 	FILTER_RC(config, m_filter1);
 	m_filter1->add_route(ALL_OUTPUTS, "mono", 1.0);
@@ -1566,16 +1564,14 @@
 	GENERIC_LATCH_8(config, "soundlatch");
 
 	ay8910_device &ay1(AY8910(config, "ay1", 14318180/8));
-	ay1.set_flags(AY8910_LEGACY_OUTPUT | AY8910_SINGLE_OUTPUT);
+	ay1.set_flags(AY8910_LEGACY_OUTPUT);
 	ay1.port_a_read_callback().set(FUNC(nemesis_state::nemesis_portA_r));
-	ay1.add_route(ALL_OUTPUTS, "filter1", 0.20);
+	ay1.add_route(ALL_OUTPUTS, "mono", 0.20);
 
 	ay8910_device &ay2(AY8910(config, "ay2", 14318180/8));
 	ay2.port_a_write_callback().set(m_k005289, FUNC(k005289_device::k005289_control_A_w));
 	ay2.port_b_write_callback().set(m_k005289, FUNC(k005289_device::k005289_control_B_w));
-	ay2.add_route(0, "filter2", 1.00);
-	ay2.add_route(1, "filter3", 1.00);
-	ay2.add_route(2, "filter4", 1.00);
+	ay2.add_route(ALL_OUTPUTS, "mono", 1.00);
 
 	FILTER_RC(config, m_filter1);
 	m_filter1->add_route(ALL_OUTPUTS, "mono", 1.0);

 

 

As for sliders - yes, mame should remember audio volume for each game, stored in cfg files.

 

Share this post


Link to post
Share on other sites

Small diff for ssv (Only two games I fixed - Chanded Air Blade and Dyna Gear):

 

diff -Nru src/mame/drivers/ssv.cpp src-fx/mame/drivers/ssv.cpp
--- src/mame/drivers/ssv.cpp	Tue Dec 25 18:33:11 2018
+++ src-fx/mame/drivers/ssv.cpp	Tue Jan  1 20:15:19 2019
@@ -2825,7 +2825,7 @@
 	survarts(config);
 
 	/* video hardware */
-	m_screen->set_visarea(0, (0xd4-0x2c)*2-1, 0, (0x102 - 0x12)-1);
+	m_screen->set_visarea(8, (336--1, 0, 240-1);
 }
 
 void ssv_state::eaglshot(machine_config &config)
@@ -2894,7 +2894,7 @@
 	WATCHDOG_TIMER(config, "watchdog");
 
 	/* video hardware */
-	m_screen->set_visarea(0, (0xcb - 0x22)*2-1, 0, (0xfe - 0x0e)-1);
+	m_screen->set_visarea(0, 336-1, 0, 240-1);
 }
 
 void ssv_state::twineag2(machine_config &config)

Share this post


Link to post
Share on other sites

Revert modified drivers to original state is actually not a good practice, the update to new standards can be easily done with programs like WinMerge or others side-by-side diff tools. Though I don't want to criticize, I perfectly know how much time-consuming is keep alive ARCADE.

 

Another change that seems gone away is the correct refresh rate for CAVE.CPP games, it's reverted back to the 271.5 divisor, instead of 272.0.

SSV.CPP resolutions as already pointed out by haynor666 are reverted too. IIRC there are 23 resolution changes for that file, maybe I'll do the job by myself and upload the updated file on my mediafire account.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...