Commit Graph

325 Commits

Author SHA1 Message Date
Vas Crabb
2993e850bb (nw) fix lots of inadverently mutable static pointers 2018-09-20 11:42:37 +10:00
Felipe Corrêa da Silva Sanches
e88ec6a7a5 A large portion of the Atari Gran Trak 10 schematics (1974)
implemented on MAME using the netlist subsystem.
2018-07-28 11:37:12 -03:00
Vas Crabb
90d7b40e62 srcclean and other cleanup (nw) 2018-06-24 19:04:53 +10:00
Vas Crabb
c15531dddc srcclean (nw) 2018-05-27 04:48:13 +10:00
balr0g
ea646ca403 Add Schmitt trigger device to standalone netlist Makefile (nw) 2018-05-11 12:06:50 -04:00
arbee
9adf583c47 Final GCC 8 batch for tonight (nw) 2018-05-01 22:52:25 -04:00
Justin Kerk
0e77f9c540 Fixed issue causing drivers using netlists to fail on the Emscripten target. [Justin Kerk] 2018-03-06 03:12:21 +00:00
Vas Crabb
8dad4881f6 srcclean (nw) 2018-02-25 01:34:04 +11:00
smf-
80ee327f08 disable netlist statistic logging on shutdown, because it triggers a use after free in void device_debug::errorlog_write_line(const char *line) & fixed the copy & pasted comment. (nw) 2018-01-31 11:11:16 +00:00
smf-
e78d6ac9dc thanks hap (nw) 2018-01-29 15:13:07 +00:00
smf-
6f377beb87 fix is_set() when generic_function is an int array (nw) 2018-01-29 12:07:47 +00:00
smf-
6fb696211b fix assertion when debugging in visual studio (nw) 2018-01-29 12:07:46 +00:00
Jonathan Holt
c25b98226d Updates "2017" strings to "2018" where relevant. 2018-01-06 00:48:05 +11:00
Olivier Galibert
cbbbd07484 dimemory: Lift the cap on the number of address spaces per device [O. Galibert] 2017-07-03 08:03:57 +02:00
couriersud
7e8a7aeea9 Add Zaccaria to mamenl build. (nw) 2017-05-28 11:10:54 +02:00
couriersud
e9a5e08b41 Fix state saving for pfunction lfsr. (nw) 2017-05-28 09:03:29 +02:00
Vas Crabb
e892661905 srcclean (nw) 2017-05-28 13:40:48 +10:00
couriersud
0a2d4a256d Fix issues identified by Vas and LordKale4:
- made local netlists in Cheeky Mouse static
- replace stdlib rand by 16 bit galois lfsr

(nw)
2017-05-27 22:17:35 +02:00
couriersud
994263eaf9 Add rand() function to pfunction expression parser. Use this to simulate
E-B noise in Cheeky Mouse and fix the "cheese" choose. [Couriersud]
2017-05-27 14:28:53 +02:00
Vas Crabb
2d4ba2471d netlist: add a crude TTL schmitt trigger model and hook up in 1B11142
sound board, completing the tromba circuit

(nw) I'm not sure whether the model works properly or not, but in the
circuit where it's used, I don't think it can work properly with the
current TTL output model.  A capacitor is charged by the Q output of a
74LS74 flipflop (U3A) until the voltage passes the Schmitt trigger's
threshold, causing it to reset the flipflop.  However, the positive
trigger voltage of the Schmitt trigger is 1.6V, but our TTL output model
has a high output voltage of 1.0V (see nl_base.cpp:89).  I realise the
simplified model of TTL logic with high impedance inputs and outputs
behaving as though thery're loaded is convenient and fast to simulate,
but it's not detailed enough for applications like this where
7400-series chips are used in analog circuitry.  This is what held me up
last time I tried adding a netlist for this sound board.
2017-05-27 18:44:23 +10:00
couriersud
6d9da523e3 Fix DEBUG build. (nw) 2017-05-27 00:11:16 +02:00
couriersud
6fd40f98a6 Various code alignments across solvers. (nw) 2017-05-27 00:11:16 +02:00
couriersud
6dfe04c620 Cleanup of solver code. (nw) 2017-05-27 00:11:15 +02:00
couriersud
a27f10c4a7 Reordered members to be more cache friendly. (nw) 2017-05-27 00:11:15 +02:00
couriersud
bc29593982 Netlist refactoring:
- OPENMP refactored. All OPENMP operations are now templatized in pomp.h
- We don't need thread-safe priority queue. Event code updating analog
outputs now runs outside the parallel code. 
(nw)
2017-05-27 00:11:14 +02:00
couriersud
01f8ace296 Changed Solver.PARALLEL parameter logic:
0: Parallel processing of solvers disabled
1: One processor parallel processing. Can be used to measure OPENMP
overhead
>1: Solve n analog subnets in parallel.

Previously, all available processors were used which caused performance
to degrade on hyperthreading. 
[Couriersud]
2017-05-27 00:11:14 +02:00
Vas Crabb
2b7d87317b Preliminary netlist sound for the Zaccaria 1B11142 board
* Tromba (trumpet) sound is not working - requires Schmitt trigger device
* Connecting cassa (bass drum) swamps other instruments so it's disconnected for now
* Mixing melody sound with speech/SFX is not done in netlist (should be)
* Relative levels of melody/speech/SFX are probably still wrong

(nw) A good test case for this is the Money Money driver (monymony).
There's a bit of buzzing on this one as well.  The problem with the
cassa could be caused by running into non-ideal characteristics of opams
again (the LM3900 seems to ignore the V+ value supplied to it).  When
the netlist library gets Schmitt trigger support, the tromba can be
completed.  Unfortunately, the tromba is a key part of the
characteristic sound of these boards, so you really notice when it's
lacking.
2017-05-27 03:57:50 +10:00
Vas Crabb
308c2bb72d cheekyms: add preliminary netlist sound based on schematics provided by Sam Grech
(nw) It doesn't work quite right yet.  The "Hammer" and "Pest" sounds
are generated by free-running 555/556 timers and gated with LM324
applifiers.  For whatever reason, the netlist system produces a kind of
buzzing from the "Hammer" circuit when it's supposed to be suppressed,
and it doesn't think the pest sound should be suppressed completely so
you can always hear it at a low level in the background.  The "Cheese"
circuit is a bit weird - either they're using the base-emitter junction
of a 2SC945 as a signal diode, or there's an error in the schematic
(collector is shown unconnected).  Connecting this part of the circuit
causes the netlist system to hang, so R2/R3/C8/Q2 are not connected for
now.
2017-05-26 16:43:29 +10:00
Miodrag Milanovic
a4c5e29c2f Forgot this one for GCC 7.1 (nw) 2017-05-15 19:27:56 +02:00
Vas Crabb
0f0d39ef81 Move static data out of devices into the device types. This is a significant change, so please pay attention.
The core changes are:
* Short name, full name and source file are no longer members of device_t, they are part of the device type
* MACHINE_COFIG_START no longer needs a driver class
* MACHINE_CONFIG_DERIVED_CLASS is no longer necessary
* Specify the state class you want in the GAME/COMP/CONS line
* The compiler will work out the base class where the driver init member is declared
* There is one static device type object per driver rather than one per machine configuration

Use DECLARE_DEVICE_TYPE or DECLARE_DEVICE_TYPE_NS to declare device type.
* DECLARE_DEVICE_TYPE forward-declares teh device type and class, and declares extern object finders.
* DECLARE_DEVICE_TYPE_NS is for devices classes in namespaces - it doesn't forward-declare the device type.

Use  DEFINE_DEVICE_TYPE or DEFINE_DEVICE_TYPE_NS to define device types.
* These macros declare storage for the static data, and instantiate the device type and device finder templates.

The rest of the changes are mostly just moving stuff out of headers that shouldn't be there, renaming stuff for consistency, and scoping stuff down where appropriate.

Things I've actually messed with substantially:
* More descriptive names for a lot of devices
* Untangled the fantasy sound from the driver state, which necessitates breaking up sound/flip writes
* Changed DECO BSMT2000 ready callback into a device delegate
* Untangled Microprose 3D noise from driver state
* Used object finders for CoCo multipak, KC85 D002, and Irem sound subdevices
* Started to get TI-99 stuff out of the TI-990 directory and arrange bus devices properly
* Started to break out common parts of Samsung ARM SoC devices
* Turned some of FM, SID, SCSP DSP, EPIC12 and Voodoo cores into something resmbling C++
* Tried to make Z180 table allocation/setup a bit safer
* Converted generic keyboard/terminal to not use WRITE8 - space/offset aren't relevant
* Dynamically allocate generic terminal buffer so derived devices (e.g. teleprinter) can specify size
* Imporved encapsulation of Z80DART channels
* Refactored the SPC7110 bit table generator loop to make it more readable
* Added wrappers for SNES PPU operations so members can be made protected
* Factored out some boilerplate for YM chips with PSG
* toaplan2 gfx
* stic/intv resolution
* Video System video
* Out Run/Y-board sprite alignment
* GIC video hookup
* Amstrad CPC ROM box members
* IQ151 ROM cart region
* MSX cart IRQ callback resolution time
* SMS passthrough control devices starting subslots

I've smoke-tested several drivers, but I've probably missed something.  Things I've missed will likely blow up spectacularly with failure to bind errors and the like.  Let me know if there's more subtle breakage (could have happened in FM or Voodoo).

And can everyone please, please try to keep stuff clean.  In particular, please stop polluting the global namespace.  Keep things out of headers that don't need to be there, and use things that can be scoped down rather than macros.
It feels like an uphill battle trying to get this stuff under control while more of it's added.
2017-05-14 21:44:11 +10:00
Vas Crabb
d6cd22c5e3 stupid MSVC (nw) 2017-04-24 00:04:20 +10:00
Vas Crabb
dac6dc4f62 srcclean (nw) 2017-04-23 12:27:42 +10:00
couriersud
41b915c712 Minor optimization. (nw) 2017-04-09 23:00:03 +02:00
couriersud
f011567c77 Parametrized device activation in truthtables. (nw) 2017-04-09 23:00:02 +02:00
couriersud
a55419d485 Fix VS2015 build. (nw) 2017-04-09 04:25:49 +02:00
couriersud
5a24cab445 More work on 9316. (nw) 2017-04-09 04:25:09 +02:00
couriersud
6e9637196d Refactored 74715 to one device layout. Removed subdevice. (nw) 2017-04-09 02:42:38 +02:00
couriersud
49d50c3045 Netlist code refactoring:
- more use of c++ features
- some CRTP in pfmtlog
- demangled code for truthtables
- use more constexpr
- rewrite main loop
- use default constructors and assignment operators were applicable.
- optimized 7448 and 9316

All of this has decreased startup time by approx. 25% to 30%. Complex
netlists like pong or kidniki are parsed, analyzed and constructed in
around 15 ms. Run performance has increased by about 5%.

All in all not to bad. A game like pong uses a clock of 7 MHz (after
division by 2). Thats 14 MHz clock invocations. Running at over 200%, 28
MHz. On a 3.9 GHz Machine about 140 cycles/clock change.

[Couriersud]
2017-04-09 00:04:10 +02:00
couriersud
58aa97913f pstring, pdynlib, pfmtlog refactoring :
pstring:
- added support for UTF16LE to pstring. 
- renamed size() to mem_t_size()
- renmaed len() to length()
- added size() == length()
- added empty()
- added simple compare()

pfmtlog:
- Simplified pfmtlog, added more c++

pdynlib:
- add a dynproc type to dynlib to wrap dynamic library calls. 

various:
- fix two coverty scan issue.
- various clang warnings fixed.

(nw)
2017-04-04 02:02:56 +02:00
couriersud
0c1b6430d0 Fix pedantic clang warnings. (nw) 2017-03-30 23:24:48 +02:00
couriersud
aacee827fe Use char32_t were appropriate. (nw) 2017-03-30 23:17:11 +02:00
couriersud
ac13946ffb Change pstring to use std::string as storage container.
This removes all allocation code from pstring. const_iterator is
consequently now based on pstring::const_iterator. 
Removed pstring_buffer. This was class wasn't a good idea.

Vas was right: This change did not impact runtime performance. Startup
performance (string intensive) increased. (nw)
2017-03-30 22:06:03 +02:00
Vas Crabb
5e8fefbb12 Turn psring iterator into a real forward iterator that works with standard algorithms.
There are a few changes to achieve this:
* Rename to const_iterator since it's immutable
* Typedef iterator to const_iterator for now as there's no mutable iterator
* Add default constrcutor and operator-> required by concept, const-qualify operators
* Remove operator+ and operator+= since it's not a random-access iterator (use std::next and std::advance instead)
* Return reference/pointer to a proxy rather than a code_t value from opertator*/operator->

The final change is required to meet the requirement that operator* for
two equivalent forward iterators return an equivalent reference.  The
pstring doesn't actually contain a sequence of code_t, so there's no way
to return a reference to code_t directly.  Instead, a reference to a
proxy object aliased on the string storage is returned.  The proxy is
implicitly convertible to code_t.  The most noticeable side effect is
that auto c = *s.begin() or for (auto c : s) won't work.  You need to do
for (auto &c : s) or for (code_t c : s) instead.
2017-03-30 15:51:14 +11:00
Vas Crabb
6cb38b0771 srcclean (nw) 2017-03-26 12:57:49 +11:00
couriersud
6e8b88136d Fix openmp compile. (nw) 2017-03-20 18:42:11 +01:00
couriersud
d23cecc86b Fix clang warnings in netlist code.
Fixed -Winconsistent-missing-destructor-override warnings. Made
some constructors of template classes and classes with virtual .. = 0
methods protected. Fixed src/lib/netlist/build/makefile (nw)
2017-03-05 21:59:52 +01:00
Couriersud
3c49610274 More cppcheck fixes. (nw) 2017-03-05 16:19:59 +01:00
Couriersud
c933d239f5 Fix some cppcheck warnings. (nw) 2017-03-05 16:19:58 +01:00
couriersud
1a2f928403 Netlist refactoring
- align timed_queue closer to std::priority_queue
- use uint8_t in extended clock for better memory usage.
- minor changes to nl_breakout.cpp (nw)
2017-02-25 10:44:04 +01:00
couriersud
7c1ba76f3b Fix netlist stats collection. Code refactoring:
Small improvement for 7493.
Convert 9316 from subdevice to delegate.
Convert 74107 from subdevice style to delegate. 
Also refactored inconsistencies in other parts of the code. (nw)
2017-02-24 14:55:45 +01:00