Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sound and other improvements to Sega G-80 games. #7103

Merged
merged 96 commits into from Aug 20, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
96 commits
Select commit Hold shift + click to select a range
5545c47
Added 74139 and TL082 devices to netlist.
aaronsgiles Jul 22, 2020
3156b88
Add CD4011 and an attempt at CD4053 devices.
aaronsgiles Jul 23, 2020
0818fe1
Whoops, forgot to add 4053 to MAME.
aaronsgiles Jul 23, 2020
c807415
Add CD4024 and 7407 devices.
aaronsgiles Jul 24, 2020
ae61a86
Fixes to new devices.
aaronsgiles Jul 24, 2020
1f199cb
Some fixes/improvements to the templated device.
aaronsgiles Jul 24, 2020
b6c782e
Very preliminary Eliminator/Zektor netlist. Much debugging left.
aaronsgiles Jul 25, 2020
b1f17bf
Merge branch 'master' into aaron-nl2
aaronsgiles Jul 25, 2020
5edd59f
Remove a couple of hacks for now. Fix logging.
aaronsgiles Jul 25, 2020
7308f91
Merge branch 'master' into aaron-nl2
aaronsgiles Jul 25, 2020
05069fc
netlist: Fix 4011 implementation.
couriersud Jul 25, 2020
d08dba2
Merge branch 'aaron-nl2' of https://github.com/mamedev/mame into aaro…
aaronsgiles Jul 25, 2020
3decddf
Merge branch 'master' into aaron-nl2
aaronsgiles Jul 25, 2020
7323040
Split Zektor from Eliminator. Document differences. Verify sheet 8 co…
aaronsgiles Jul 25, 2020
2ec47e5
All sounds mostly working. Hooked up PSG into netlist for Zektor.
aaronsgiles Jul 26, 2020
3ce8621
sega80v: Improved interrupt handling. Misc cleanups.
aaronsgiles Jul 27, 2020
a2f40ea
Add clipping diodes to torpedo sounds to allow them to retrigger more…
aaronsgiles Jul 27, 2020
1f61f90
Merge branch 'master' into aaron-nl2
aaronsgiles Jul 28, 2020
4ed165f
Initial pass at Space Fury. Most sounds do something, but very slow.
aaronsgiles Jul 28, 2020
b52d7c8
Add clipping diodes to all 4011-based triggers. Complete review of sp…
aaronsgiles Jul 29, 2020
adc2973
Minor optimization to remove sqrt from inner loop.
aaronsgiles Jul 29, 2020
d2454e1
Added generic netlist CSV creation. Define NETLIST_CREATE_CSV to enable.
aaronsgiles Jul 30, 2020
b7d3ed7
Add message to static_assert
aaronsgiles Jul 30, 2020
6f9b54a
Better implementation of CD4053
aaronsgiles Jul 30, 2020
51a63fc
Fix incorrect sense in warning.
aaronsgiles Jul 30, 2020
bd210ca
Split Sega USB from segasnd. Implement the backend as a netlist. Curr…
aaronsgiles Jul 30, 2020
8b38d2d
Didn't mean to add this.
aaronsgiles Jul 30, 2020
1aed093
Fix up a few USB items.
aaronsgiles Jul 30, 2020
b7d6a6f
netlist: Disable dangerous optimization.
couriersud Jul 30, 2020
69f3a1d
Add remaining Sega G80 sources to nl.lua
aaronsgiles Jul 30, 2020
57acadb
nl_elim.cpp: Add NL_CONTAINS hint
aaronsgiles Jul 31, 2020
17b35b4
nl_cinemat_common.h: 5236 should be a ZDIODE
aaronsgiles Jul 31, 2020
f25a037
Merge branch 'aaron-nl2' of https://github.com/mamedev/mame into aaro…
aaronsgiles Jul 31, 2020
bd247e8
Finish adding Sega G80 games to nl subtarget.
aaronsgiles Jul 31, 2020
402a766
Added CD4017/4022 devices to netlist.
aaronsgiles Jul 31, 2020
1d2eade
Fixes for CD4017 device
aaronsgiles Jul 31, 2020
876e8b5
First cut at Astro Blaster netlist.
aaronsgiles Aug 1, 2020
9dbb820
Merge branch 'master' into aaron-nl2
aaronsgiles Aug 1, 2020
41a1f34
Add zaxxon to netlist build because of USB (also was on my shortlist …
aaronsgiles Aug 2, 2020
2be3f63
Optimizations for elim/zektor netlist. Improved SKITTER sound.
aaronsgiles Aug 5, 2020
f53f321
segausb: Remove debugging code
aaronsgiles Aug 5, 2020
d6e04dd
netlist: Improve logging to sort out-of-order timestamps
aaronsgiles Aug 5, 2020
de46c1c
netlist: Disable debugging
aaronsgiles Aug 5, 2020
7a4bd35
netlist: Fix CD4053 device behavior
aaronsgiles Aug 5, 2020
140a5be
Netlist: add 'Q' parameter to VARCLOCK to indicate which phase is bei…
aaronsgiles Aug 6, 2020
1146ff6
segausb: Attempt an alternate approach by faking the 8253
aaronsgiles Aug 6, 2020
7eac789
pit8253.cpp: Minor improvements and optimizations:
aaronsgiles Aug 7, 2020
272685e
segausb.cpp: Reduce GOS clock frequency. Add some debugging.
aaronsgiles Aug 7, 2020
597cb68
netlist.h: Add missing #include needed on Visual Studio for logging.
aaronsgiles Aug 7, 2020
e934d9d
segausb.h: Go with the real 8253 now that it mostly works.
aaronsgiles Aug 7, 2020
e69bec8
sp0250.cpp: Implement NOPing when no data is available.
aaronsgiles Aug 9, 2020
bb55cdf
segasnd.cpp: Make Sega Speech Board a proper device. Remove entangled
aaronsgiles Aug 10, 2020
e0ff842
Add missing files to build system.
aaronsgiles Aug 10, 2020
5219db9
nl_spacfury: fixes and optimizations
aaronsgiles Aug 10, 2020
61de9c5
nl_elim: Clean up and optimize.
aaronsgiles Aug 10, 2020
e0b19c1
segag80v: Update spacfury output level
aaronsgiles Aug 10, 2020
39ec9cb
sp0250: Experimentally output PWM directly for consumption by netlist.
aaronsgiles Aug 10, 2020
f1cf3c3
segasnd: Update speech output to use new PWM source for SP0250.
aaronsgiles Aug 10, 2020
ed020a4
segasnd: Attempt to pass PWM data as a logic input, but crashes.
aaronsgiles Aug 10, 2020
ad8ccf9
netlist: make streams accept logic parameters as well.
couriersud Aug 10, 2020
4df5a1d
sp0250: add proper PWM implementation according to more detailed anal…
aaronsgiles Aug 10, 2020
23902d1
nl_segaspeech: remove buffer
couriersud Aug 10, 2020
e695365
Merge branch 'aaron-nl2' of https://github.com/mamedev/mame into aaro…
aaronsgiles Aug 10, 2020
a38a1f6
segag80v: Misc cleanup. Fix frame timing. Implement DRAW flag.
aaronsgiles Aug 11, 2020
9f21c56
sp0250: Make PWM into a mode, selectable at the driver level.
aaronsgiles Aug 11, 2020
bcb4f5f
segasnd: Update to use SP0250 PWM mode, but not working yet.
aaronsgiles Aug 11, 2020
4184d94
segasnd: match netlist input to new output 1:1
aaronsgiles Aug 11, 2020
f931ec6
segasnd.cpp: Fix netlist filtering of PWM SP0250 speech. Add compile …
aaronsgiles Aug 11, 2020
3dd1632
sega80v.cpp: Add waitstates to Z80 memory accesses.
aaronsgiles Aug 11, 2020
a884e52
sp0250: Correct LFSR to hardware. General cleanup.
aaronsgiles Aug 11, 2020
c886a9e
segasnd.cpp: Boost volume out of netlist
aaronsgiles Aug 11, 2020
aaec09b
segasnd -> segaspeech
aaronsgiles Aug 11, 2020
771b547
netlist: append tag to name of csv files
aaronsgiles Aug 11, 2020
cecf993
netlist: Convert error to warning
aaronsgiles Aug 11, 2020
a798391
Revert "Netlist: add 'Q' parameter to VARCLOCK to indicate which phas…
aaronsgiles Aug 11, 2020
8f3f47b
netlist: Add THRESH parameter to AFUNC
aaronsgiles Aug 11, 2020
8792e10
segaspeech: Clear up schematics discrepancies. Route non-speech sound…
aaronsgiles Aug 11, 2020
a948195
segausb/astrob: Latest WIP work
aaronsgiles Aug 18, 2020
41d034e
Merge branch 'master' into aaron-nl2
aaronsgiles Aug 18, 2020
7a8c30f
Fix merge errors
aaronsgiles Aug 18, 2020
c15fd2e
segausb: Remove fake 8253 attempt; it wasn't any better performing.
aaronsgiles Aug 18, 2020
0d5fa42
segaspeech: Disable netlist filtering until new sound changes.
aaronsgiles Aug 18, 2020
2783d57
segausb: Restore original HLE implementation.
aaronsgiles Aug 18, 2020
dc9e8d8
segag80v: Reduce wait states back to 2, which seems more plausible.
aaronsgiles Aug 18, 2020
cae2b22
segag80v: Update flags
aaronsgiles Aug 18, 2020
a96ef53
segausb: Reduce amplitude a bit
aaronsgiles Aug 18, 2020
912038d
segag80v/segag80r: Cleaner implementation of waitstates
aaronsgiles Aug 19, 2020
12c0c5f
astrob: Sound improvements:
aaronsgiles Aug 19, 2020
979d1a3
Fix compile error
aaronsgiles Aug 19, 2020
7d05f24
astrob: Some more optimizations.
aaronsgiles Aug 19, 2020
e0363f6
astrob: Rebalance sound
aaronsgiles Aug 19, 2020
59b2c7f
netlist: Allow models to be overwritten.
couriersud Aug 19, 2020
3f182fc
astrob: use 12V minimum specs for CMOS circuits.
couriersud Aug 19, 2020
af5ff17
segag80v: Add model override for these netlists as well
aaronsgiles Aug 19, 2020
03829e2
astrob: Hook up MUTE. Couple of small optimizations.
aaronsgiles Aug 19, 2020
f8cc967
Fixed merge failure.
aaronsgiles Aug 19, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
19 changes: 16 additions & 3 deletions scripts/target/mame/arcade.lua
Expand Up @@ -3528,7 +3528,14 @@ files {
MAME_DIR .. "src/mame/video/segag80r.cpp",
MAME_DIR .. "src/mame/drivers/segag80v.cpp",
MAME_DIR .. "src/mame/includes/segag80v.h",
MAME_DIR .. "src/mame/audio/segag80v.cpp",
MAME_DIR .. "src/mame/audio/segag80.cpp",
MAME_DIR .. "src/mame/audio/segag80.h",
MAME_DIR .. "src/mame/audio/nl_astrob.cpp",
MAME_DIR .. "src/mame/audio/nl_astrob.h",
MAME_DIR .. "src/mame/audio/nl_elim.cpp",
MAME_DIR .. "src/mame/audio/nl_elim.h",
MAME_DIR .. "src/mame/audio/nl_spacfury.cpp",
MAME_DIR .. "src/mame/audio/nl_spacfury.h",
MAME_DIR .. "src/mame/video/segag80v.cpp",
MAME_DIR .. "src/mame/drivers/segahang.cpp",
MAME_DIR .. "src/mame/includes/segahang.h",
Expand Down Expand Up @@ -3644,8 +3651,14 @@ files {
MAME_DIR .. "src/mame/machine/segaic16.h",
MAME_DIR .. "src/mame/machine/segabill.cpp",
MAME_DIR .. "src/mame/machine/segabill.h",
MAME_DIR .. "src/mame/audio/segasnd.cpp",
MAME_DIR .. "src/mame/audio/segasnd.h",
MAME_DIR .. "src/mame/audio/segaspeech.cpp",
MAME_DIR .. "src/mame/audio/segaspeech.h",
MAME_DIR .. "src/mame/audio/segausb.cpp",
MAME_DIR .. "src/mame/audio/segausb.h",
MAME_DIR .. "src/mame/audio/nl_segausb.cpp",
MAME_DIR .. "src/mame/audio/nl_segausb.h",
MAME_DIR .. "src/mame/audio/nl_segaspeech.cpp",
MAME_DIR .. "src/mame/audio/nl_segaspeech.h",
MAME_DIR .. "src/mame/video/segaic16.cpp",
MAME_DIR .. "src/mame/video/segaic16.h",
MAME_DIR .. "src/mame/video/segaic16_road.cpp",
Expand Down
37 changes: 37 additions & 0 deletions scripts/target/mame/nl.lua
Expand Up @@ -58,6 +58,9 @@ SOUNDS["VOLT_REG"] = true
SOUNDS["SPEAKER"] = true
SOUNDS["DIGITALKER"] = true
SOUNDS["SN76477"] = true
SOUNDS["SN76496"] = true
SOUNDS["SP0250"] = true
SOUNDS["TMS36XX"] = true

--------------------------------------------------
-- specify available video cores
Expand Down Expand Up @@ -89,6 +92,7 @@ MACHINES["6522VIA"] = true

MACHINES["6821PIA"] = true
MACHINES["I8255"] = true
MACHINES["I8243"] = true
MACHINES["WATCHDOG"] = true
MACHINES["EEPROMDEV"] = true
MACHINES["UPD4701"] = true
Expand Down Expand Up @@ -285,11 +289,44 @@ files{
MAME_DIR .. "src/mame/machine/nl_palestra.cpp",
MAME_DIR .. "src/mame/machine/nl_palestra.h",

MAME_DIR .. "src/mame/machine/segacrpt_device.cpp",
MAME_DIR .. "src/mame/machine/segacrpt_device.h",
MAME_DIR .. "src/mame/drivers/segag80r.cpp",
MAME_DIR .. "src/mame/includes/segag80r.h",
MAME_DIR .. "src/mame/machine/segag80.cpp",
MAME_DIR .. "src/mame/machine/segag80.h",
MAME_DIR .. "src/mame/audio/segag80r.cpp",
MAME_DIR .. "src/mame/audio/segag80r.h",
MAME_DIR .. "src/mame/video/segag80r.cpp",
MAME_DIR .. "src/mame/drivers/segag80v.cpp",
MAME_DIR .. "src/mame/includes/segag80v.h",
MAME_DIR .. "src/mame/audio/segag80.cpp",
MAME_DIR .. "src/mame/audio/segag80.h",
MAME_DIR .. "src/mame/audio/segaspeech.cpp",
MAME_DIR .. "src/mame/audio/segaspeech.h",
MAME_DIR .. "src/mame/audio/segausb.cpp",
MAME_DIR .. "src/mame/audio/segausb.h",
MAME_DIR .. "src/mame/audio/nl_astrob.cpp",
MAME_DIR .. "src/mame/audio/nl_astrob.h",
MAME_DIR .. "src/mame/audio/nl_elim.cpp",
MAME_DIR .. "src/mame/audio/nl_elim.h",
MAME_DIR .. "src/mame/audio/nl_spacfury.cpp",
MAME_DIR .. "src/mame/audio/nl_spacfury.h",
MAME_DIR .. "src/mame/video/segag80v.cpp",
MAME_DIR .. "src/mame/drivers/zaxxon.cpp",
MAME_DIR .. "src/mame/includes/zaxxon.h",
MAME_DIR .. "src/mame/audio/zaxxon.cpp",
MAME_DIR .. "src/mame/video/zaxxon.cpp",

MAME_DIR .. "src/mame/drivers/segas16b.cpp",
MAME_DIR .. "src/mame/includes/segas16b.h",
MAME_DIR .. "src/mame/video/segas16b.cpp",
MAME_DIR .. "src/mame/audio/nl_segas16b.cpp",
MAME_DIR .. "src/mame/audio/nl_segas16b.h",
MAME_DIR .. "src/mame/audio/nl_segausb.cpp",
MAME_DIR .. "src/mame/audio/nl_segausb.h",
MAME_DIR .. "src/mame/audio/nl_segaspeech.cpp",
MAME_DIR .. "src/mame/audio/nl_segaspeech.h",
MAME_DIR .. "src/mame/machine/315_5195.cpp",
MAME_DIR .. "src/mame/machine/315_5195.h",
MAME_DIR .. "src/mame/machine/fd1089.cpp",
Expand Down
83 changes: 81 additions & 2 deletions src/devices/machine/netlist.cpp
Expand Up @@ -366,6 +366,9 @@ void netlist_mame_analog_input_device::write(const double val)
void netlist_mame_analog_input_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
update_to_current_time();
#if NETLIST_CREATE_CSV
nl_owner().log_add(m_param_name, *((double *) ptr), true);
#endif
m_param->set(*((double *) ptr));
}

Expand All @@ -392,12 +395,18 @@ void netlist_mame_logic_input_device::write(const uint32_t val)
void netlist_mame_int_input_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
update_to_current_time();
#if NETLIST_CREATE_CSV
nl_owner().log_add(m_param_name, param, false);
#endif
m_param->set(param);
}

void netlist_mame_logic_input_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
update_to_current_time();
#if NETLIST_CREATE_CSV
nl_owner().log_add(m_param_name, param, false);
#endif
m_param->set(param);
}

Expand Down Expand Up @@ -435,6 +444,57 @@ void netlist_mame_sub_interface::set_mult_offset(const double mult, const double
m_offset = offset;
}

#if NETLIST_CREATE_CSV
void netlist_mame_device::log_add(char const* param, double value, bool isfloat)
{
// skip if no file
if (m_csv_file == nullptr)
return;

// make a new entry
buffer_entry entry = { machine().scheduler().time(), isfloat, value, param };

// flush out half of the old entries if we hit the buffer limit
if (m_buffer.size() >= MAX_BUFFER_ENTRIES)
log_flush(MAX_BUFFER_ENTRIES / 2);

// fast common case: if we go at the end, just push_back
if (m_buffer.size() == 0 || entry.time >= m_buffer.back().time)
{
m_buffer.push_back(entry);
return;
}

// find our place in the queue
for (auto cur = m_buffer.rbegin(); cur != m_buffer.rend(); cur++)
if (entry.time >= cur->time)
{
m_buffer.insert(cur.base(), entry);
return;
}

// if we're too early, drop this entry rather than risk putting an out-of-order
// entry after the last one we flushed
}

void netlist_mame_device::log_flush(int count)
{
if (m_csv_file == nullptr)
return;
if (count > m_buffer.size())
count = m_buffer.size();
while (count--)
{
auto &entry = m_buffer.front();
if (entry.isfloat)
fprintf(m_csv_file, "%s,%s,%f\n", entry.time.as_string(), entry.string, entry.value);
else
fprintf(m_csv_file, "%s,%s,%d\n", entry.time.as_string(), entry.string, int(entry.value));
m_buffer.pop_front();
}
}
#endif

netlist_mame_analog_input_device::netlist_mame_analog_input_device(const machine_config &mconfig, const char *tag, device_t *owner, const char *param_name)
: device_t(mconfig, NETLIST_ANALOG_INPUT, tag, owner, 0)
, netlist_mame_sub_interface(*owner)
Expand Down Expand Up @@ -833,7 +893,7 @@ void netlist_mame_stream_output_device::device_reset()
void netlist_mame_stream_output_device::sound_update_fill(std::size_t samples, stream_sample_t *target)
{
if (samples < m_buffer.size())
throw emu_fatalerror("sound %s: samples %d less bufsize %d\n", name(), samples, m_buffer.size());
osd_printf_warning("sound %s: samples %d less bufsize %d\n", name(), samples, m_buffer.size());

std::copy(m_buffer.begin(), m_buffer.end(), target);
std::size_t pos = m_buffer.size();
Expand Down Expand Up @@ -1036,6 +1096,18 @@ void netlist_mame_device::device_start_common()


m_device_reset_called = false;

#if NETLIST_CREATE_CSV
std::string name = machine().system().name;
name += tag();
for (int index = 0; index < name.size(); index++)
if (name[index] == ':')
name[index] = '_';
name += ".csv";
m_csv_file = fopen(name.c_str(), "wb");
#endif

LOGDEVCALLS("device_start exit\n");
}


Expand Down Expand Up @@ -1070,7 +1142,14 @@ void netlist_mame_device::device_stop()
{
LOGDEVCALLS("device_stop\n");
if (m_netlist)
m_netlist->exec().stop();
netlist().exec().stop();
#if NETLIST_CREATE_CSV
if (m_csv_file != nullptr)
{
log_flush();
fclose(m_csv_file);
}
#endif
}

void netlist_mame_device::device_post_load()
Expand Down
24 changes: 24 additions & 0 deletions src/devices/machine/netlist.h
Expand Up @@ -12,9 +12,14 @@
#define MAME_MACHINE_NETLIST_H

#include <functional>
#include <deque>

#include "../../lib/netlist/nltypes.h"

#ifndef NETLIST_CREATE_CSV
#define NETLIST_CREATE_CSV (0)
#endif

class netlist_mame_stream_output_device;
class nld_sound_in;

Expand Down Expand Up @@ -106,6 +111,25 @@ class netlist_mame_device : public device_t

func_type m_setup_func;
bool m_device_reset_called;

#if NETLIST_CREATE_CSV
static constexpr int MAX_BUFFER_ENTRIES = 1000;

public:
void log_add(char const* param, double value, bool isfloat);
void log_flush(int count = MAX_BUFFER_ENTRIES);

private:
struct buffer_entry
{
attotime time;
bool isfloat;
double value;
char const *string;
};
std::deque<buffer_entry> m_buffer;
FILE* m_csv_file = nullptr;
#endif
};

class netlist_mame_cpu_device : public netlist_mame_device,
Expand Down