summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/dec0.cpp (follow)
Commit message (Collapse)AuthorAgeFilesLines
* Rearrange source to match project structure (done using the script in ↵ Vas Crabb2022-06-271-4303/+0
| | | | src/tools).
* dec0.cpp: fix midres2 control scheme angelosa2022-03-261-46/+58
|
* New working clones Ivan Vangelista2022-03-031-1/+1
| | | | | | | | ------------------ Cruis'n USA (v1.1) [Rasmus Bælum Rolfshøj] Ms. Pac-Man (Leisure and Allied bootleg) [Guru] - various drivers and devices: added some notes about decapped chips which turned out to be ULAs
* New working machines Ivan Vangelista2022-02-101-1/+49
| | | | | | | | | | | | | -------------------- Chic Gum Video [Fabrice Arzeno] New working clones ------------------ Midnight Resistance (World, set 2) [Jorge Silva] New clones marked as NOT_WORKING -------------------------------- Attack Force (unencrypted, bootleg?) [IZ8DWF]
* dec0.cpp: Updates and cleanup AJR2021-12-071-19/+10
| | | | | - robocop: Use MB8421 device for shared RAM - midresb: Remove some superfluous handlers
* dec0.cpp: Correct note about DEM-01 [Caps0ff] (#8942) ClawGrip2021-12-071-1/+1
| | | | It's a Fujitsu MB8421 Dual port SRAM. Since it's a supported device (src/devices/machine/mb8421.cpp), maybe it should be correctly hooked up on the driver.
* upd4701: Change input update method to not use PORT_RESET AJR2021-11-061-4/+4
|
* dec0: Fix overdriven sound Aaron Giles2021-08-291-6/+6
|
* ymfm: Refactor new FM engine into a 3rdparty library (#8046) Aaron Giles2021-05-141-2/+2
| | | | | | | | | | | | | | | ymfm: refactor the code into a separate 3rdparty library * Moved ymfm core implementation to 3rdparty/ymfm * Split out each family (OPM/OPN/OPL/etc) into its own source file * Added preliminary OPQ and OPZ support, still WIP * Put all 3rdparty code into its own namespace ymfm * Fixed various bugs reported in #8042 * Created interface class for communication between the 3rdparty engine and the emulator * Standardized MAME implementation of all Yamaha devices based on a template class * Created standard base class ym_generic that can be used when multiple YM chips are swapped in * Changed YM2203/2608/2610 to embed a YM2149 as a subdevice instead of deriving from ay8910_device * Also provided compile-time option to use a simplified built-in SSG rather than using MAME's at all (currently off) * Consolidated MAME header files from one-per-chip (ym2151.h, ym2203.h, etc) to one-per-family (ymopm.h, ymopn.h, etc)
* New BSD-licensed OPL/OPLL (YM3526, YM3812, YM2413, Y8950, YMF262, etc) cores ↵ Aaron Giles2021-04-021-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (#7869) * OPL prep. Define FAMILY constant in register classes, and use that instead of template specialization for family-specific behaviors. Expand channel masks to 32 bits. Add is_keyon() helper. * Made FM channel and operator mapping more flexible. Operators are now owned by the engine and can be dynamically assigned to channels. Register classes now provide a mapping between a linear set of operators and channels. The register data array is now a regular array instead of a vector. * Minor change for consistency. * Introduce OPL registers and create a ymopl_engine. Add support for sustain-less notes and the OPL envelope clocks (which does not divide by 3). * Moved keycode calculations into register class. Removed unnecessary recalc in phase generator. Lined up OPL frequency, feedback, algorithm, and total level. * Implement key scale level and OPL-specific LFO and phase handling. * Create new YM3526 device based on new OPL. Fix keyon and sustain behaviors. * Fix weird OPL multiple values. Clean up and further document OPL LFO. * No busy flag on OPL, so no need to do the work. Add a right shift of 1 to the output stage to line up volume with old implementation. * More compact way of representing key scale level values. * Move the KSL bitswap into the registers since it's apparently fixed in OPLL and perhaps others. * Add support for ryhthm generation in OPL. Change compute_volume to take a phase value directly, and expose operator phase. * Fix OPL timers. * Start LFSR with a non-zero value to ensure it actually starts generating for OPL. * Fix silly bug in sustain logic for OPL. Fixes a lot of previously missing sounds. * Create OPL2 engine. Add waveform support for OPL2/3 waveforms. * Wire up YM3812 to the new OPL2 engine. * Reset OPL timers when the mask is written as well. * Manage rhythm key ons separately. Fixes Wardner awfulness. * Explicitly make channel logic handle 0, 2, or 4 operators rather than checking each one for null. Also simplify the combining logic for the 2 operator case. * Reverse bit order of LFSRs to make things a little simpler. Fix OPL LFSR so that it has its full 23-bit period. * Change outputs along the path to arrays rather than stereo items. This allows for four channel output. Also add a constant for the number of outputs to the register class. * Move status register bit definitions to the registers class. Generically support the IRQ bit. * Create shared helpers for FP encode/decode/roundtrip and use them throughout. Also update TMNT to use the FP decoder. * No need to clamp when using the roundtrip. * Clear the EOS flag when execute is turned off on ADPCM-B. Fix combine_status in YM2608 to ignore previously set flags. * Add missing note_select in base class. Don't add 1 to the OPL release rate. * Move Y8950 over to new OPL engine. * Remove old y8950, along with fmopl and ymdeltat * Add updates prior to status reads for ADPCM systems. * Add status_mask and irq_reset logic into the core. Clean up documentation on family-specific registers. Includes some temporary gross debugging stuff. * Made debugging less gross by giving operators and channels a reference back to their owner. * Fix status port address in OPL chips. Reduce ADPCM volume to match previous implementation. * Fix Y8950 ADPCM start. Return masked status properly. * Initial cut at OPLL mapping. * Add YM2413 support based on ymfm; renamed vrc7snd to ds1001; added YM2423 amd YMF281 variants as well. Instrument data is now loaded via external ROMs. Added 'depress' envelope support to the core engine. Fixed a number of issues in the ymopll_engine. Documented hard-coded values. Moved register clear into register-specific reset. * Add missing identifier. * Y8950 is OPL not OPL2. * Some documentation cleanup. Consistency fixes in the register classes. * Consolidate large comments. Add support for delayed modulators for OPL. Broke out 2-op and 4-op cases to help simplify logic. Fixed overflow handling in fp encoding. * Fix silly bug. * Changed operator assignment mechanism to be more readable. Added prepare method to be called at the start of sound update. Added ALL_CHANNELS constant to register files. Updated all consumers to call prepare and use constants where applicable. * Move YMF262 and YMF278B to use new FM engine for OPL3/4. Fix several issues in OPL3 logic, which now seems to work ok. * Minor fixes. More documentation. * Fix MSVC build. * Add caching of data to prepare methods to improve performance. Moved non-register decoding logic out of the .h file and into .cpp file. Move phase_step calculation into register class. * More notes. Removed keycode from cache. Split 2/4-operator outputs into separate functions. Changed OPN/OPL to use templates for variants. Added channel/operator_offset helpers. * Fairly substantial overhaul of register interface. Register interface is now stateless and contains family-specific state. Channel and operator accessors are prefixed by ch_/op_ now and require an offset to the specific channel or operator. Moved LFO/noise generation into register class, along with keyon logging. * Add noise back to OPL/OPLL * Added early-out for low envelope. Moved waveform logic out into family-specific code. General clean up of ordering. Reduced family base class to minimal needed. * More aggressively track active channels to help performance. * Use only summing outputs for consideration of active channels. Centralize the logic of determined 4-op vs 2-op. * More conservative channel deactivation. * Add helper to compute the sample rate and use it in all implementations. Remove unneeded chnum/opnum members. * Fix error in YM2612 that caused crashes. * Switching parameters and locals to 32-bit values gives a noticeable performance boost. Checkpoint 1. * More moving to 32-bit values. Checkpoint 2. * Last of the 32-bit promotions. * Ensure SSG inverted flag is only tested on systems with SSG support in the innermost loops. * Make most constants 32-bit as well. Expose some constants via the engine class. * Expand waveforms ahead of time. Optimize the attenuation lookup a bit. * If volume is low, don't erase output, just leave it alone. Fixes missing sound in raimais. * Replace a couple of magic numbers with constants. * Normalization of FM engine usage across consumers. * Removed explicit external prepare() call; this logic is now automatically done after writes and periodically. Changed OPL/OPLL to use native formats for block/fnum. Fixed waveform generation. Fixed PM and AM depth on OPL/OPLL. * Cache multiple value. Clean up output handling a bit. * Move multiple caching ahead of phase step caching. * Fully split OPLL from OPL. Remove many hacks now that OPLL registers can have state. Created shared helpers between OPL/OPLL. Removed more aggressive channel disables since it was not rhythm friendly and didn't really buy much. * Remove old comment * Remove bad write in OPL mode case. Fixes fsoccer intro. Only call set_reset_status() once per mode call. * Remove FM output boost in YM2608/2610. Not sure why I did that. Better matches previous volume now. * Make AM/PM logging less confusing. * Let's actually set DYNAMIC_OPS properly, eh? * Improved logging. * Comment cleanups. Add constant for dynamic phase. Pre-shift sustain level. Srcclean. * Fix memory regions on YM2608 games. * Clean up ymadpcm to line up with recent ymfm changes. * y8950: Reshuffle read/write handlers. Rename them to less confusing names. * ym2413: Reshuffle read/write handlers. Rename them to less confusing names. * ym3526/ym3812: Reshuffle read/write handlers. Rename them to less confusing names. * ymf262: Match read/write details to datasheet and previous tests. * Use a constexpr function instead of macro for packing operator numbers. Pre-compute OPM LFO waveforms. * Generate OPL4 engine to support the proper clock divider and new flags. Update YMF278B to use FM timers and status rather than replicating the logic. * Fix 4-operator enable on new OPL4 instance. * Fix FM downsampling and adjust balance in YM278B.
* New BSD-licensed implementation of Yamaha OPN and OPM FM audio chips (#7808) Aaron Giles2021-02-271-1/+1
| | | New BSD-licensed implementation of Yamaha OPN and OPM FM audio chips, along with new device drivers for YM2203, YM2608, YM2610, YM2610B, YM2612, YM3438, and YM2151 based upon these.
* - dec0.cpp: updated hardware infos [Guru] Ivan Vangelista2021-02-191-1/+71
|
* srcclean for 0.227 Vas Crabb2020-12-271-1/+1
|
* emumem: Simplify memory management. [O. Galibert] Olivier Galibert2020-11-021-10/+12
| | | | | | | | | | | | | | | | | | | | API impact: - install_ram/rom/writeonly now requires a non-null pointer. If you want automatically managed ram, add it to a memory map, not in machine_start - install_*_bank now requires a memory_bank *, not a string - one can create memory banks outside of memory maps with memory_bank_creator - one can create memory shares outside of memory maps with memory_share_creator Memory maps impact: - ram ranges with overlapping addresses are not shared anymore. Use .share() - ram ranges touching each other are not merged anymore. Stay in your range Extra note: - there is no need to create a bank just to dynamically map some memory/rom. Just use install_rom/ram/writeonly
* dec0.cpp: fixed midres lives dips Ivan Vangelista2020-10-101-15/+4
|
* New clones marked as NOT_WORKING Ivan Vangelista2020-09-121-28/+81
| | | | | -------------------------------- Master Bond (bootleg of Secret Agent) [caius]
* drivers starting with c and d: completed read* and write* macros removal (nw) Ivan Vangelista2020-06-081-15/+15
|
* decbac06.cpp Update drawing behavior, Use tile callback cam9002020-04-081-6/+21
| | | | | | Convert pen masking into set_transmask behavior, Add notes, Reduce duplicates, unneeded values dec0.cpp: Reduce duplicates, Move shared video_start under protected: section madmotor.cpp: Cleanup gfx layouts
* (nw) dec0.cpp: Document undumped versions of Heavy Barrel braintro2019-12-231-0/+5
|
* dec0.cpp: restore comment that was removed (nw) Vas Crabb2019-12-071-0/+24
|
* Spring cleaning: Vas Crabb2019-11-011-4/+4
| | | | | | | | | | | | * Changed emu_fatalerror to use util::string_format semantics * Fixed some incorrectly marked up stuff in build scripts * Make internal layout compression type a scoped enum (only zlib is supported still, but at least the values aren't magic numbers now) * Fixed memory leaks in Xbox USB * There can only be one "perfect quantum" device - enforce that only the root machine can set it, as allowing subdevices to will cause weird issues with slot cards overiding it * Allow multiple devices to set maximum quantum and use the most restrictive one (it's maximum quantum, it would be minimum interleave) * Got rid of device_slot_card_interface as it wasn't providing value * Added a helper template to reduce certain kinds of boilerplate in slots/buses * Cleaned up some particularly bad slot code (plenty more of that to do), and made some slots more idiomatic
* Make devdelegate more like devcb for configuration. This is a Vas Crabb2019-10-261-10/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | fundamental change to show device delegates are configured. Device delegates are now aware of the current device during configuration and will resolve string tags relative to it. This means that device delegates need a device to be supplied on construction so they can find the machine configuration object. There's a one-dimensional array helper to make it easier to construct arrays of device delegates with the same owner. (I didn't make an n-dimensional one because I didn't hit a use case, but it would be a simple addition.) There's no more bind_relative_to member - just call resolve() like you would for a devcb. There's also no need to cast nullptr when creating a late bind device delegate. The flip side is that for an overloaded or non-capturing lambda you'll need to cast to the desired type. There is one less conditional branch in the hot path for calls for delegates bound to a function pointer of member function pointer. This comes at the cost of one additional unconditional branch in the hot path for calls to delegates bound to functoids (lambdas, functions that don't take an object reference, other callable objects). This applies to all delegates, not just device delegates. Address spaces will now print an error message if a late bind error is encountered while installing a handler. This will give the range and address range, hopefully making it easier to guess which memory map is faulty. For the simple case of allowing a device_delegate member to be configured, use a member like this: template <typename... T> void set_foo(T &&...args) { m_foo_cb.set(std::forward<T>(args)...); } For a case where different delegates need to be used depending on the function signature, see src/emu/screen.h (the screen update function setters). Device delegates now take a target specification and function pointer. The target may be: * Target omitted, implying the current device being configured. This can only be used during configuration. It will work as long as the current device is not removed/replaced. * A tag string relative to the current device being configured. This can only be used during configuration. It will not be callable until .resolve() is called. It will work as long as the current device is not removed/replaced. * A device finder (required_device/optional_device). The delegate will late bind to the current target of the device finder. It will not be callable until .resolve() is called. It will work properly if the target device is replaced, as long as the device finder's base object isn't removed/replaced. * A reference to an object. It will be callable immediately. It will work as long as the target object is not removed/replaced. The target types and restrictions are pretty similar to what you already have on object finders and devcb, so it shouldn't cause any surprises. Note that dereferencing a device finder will changes the effect. To illustrate this: ... required_device<some_device> m_dev; ... m_dev(*this, "dev") ... // will late bind to "dev" relative to *this // will work if "dev" hasn't been created yet or is replaced later // won't work if *this is removed/replaced // won't be callable until resolve() is called cb1.set(m_dev, FUNC(some_device::w)); ... // will bind to current target of m_dev // will not work if m_dev is not resolved // will not work if "dev" is replaced later // will be callable immediately cb2.set(*m_dev, FUNC(some_device::w)); ... The order of the target and name has been reversed for functoids (lambdas and other callable objects). This allows the NAME macro to be used on lambdas and functoids. For example: foo.set_something(NAME([this] (u8 data) { m_something = data; })); I realise the diagnostic messages get ugly if you use NAME on a large lambda. You can still give a literal name, you just have to place it after the lambda rather than before. This is uglier, but it's intentional. I'm trying to drive developers away from a certain style. While it's nice that you can put half the driver code in the memory map, it detracts from readability. It's hard to visualise the memory range mappings if the memory map functions are punctuated by large lambdas. There's also slightly higher overhead for calling a delegate bound to a functoid. If the code is prettier for trivial lambdas but uglier for non-trivial lambdas in address maps, it will hopefully steer people away from putting non-trivial lambdas in memory maps. There were some devices that were converted from using plain delegates without adding bind_relative_to calls. I fixed some of them (e.g. LaserDisc) but I probably missed some. These will likely crash on unresolved delegate calls. There are some devices that reset delegates at configuration complete or start time, preventing them from being set up during configuration (e.g. src/devices/video/ppu2c0x.cpp and src/devices/machine/68307.cpp). This goes against the design principles of how device delegates should be used, but I didn't change them because I don't trust myself to find all the places they're used. I've definitely broken some stuff with this (I know about asterix), so report issues and bear with me until I get it all fixed.
* dec0.cpp: Decapped and dumped the i8751 MCU for Dragonninja (Japan revision ↵ braintro2019-09-271-18/+3
| | | | 1) [TeamEurope, Brian Troha]
* New working clone braintro2019-09-211-1/+52
| | | | | | New working clone ------------------ Birdie Try (Japan revision 2, revision 1 MCU) [TeamEurope, The Guru]
* (nw) correct labels for F-1 Dream & misc clean ups braintro2019-09-011-1/+1
|
* (nw) dec0.cpp: Correct ROM labels for Dragonninja & updated info braintro2019-08-311-26/+22
|
* (nw) dec0.cpp: Correct Dragonninja MCU label & other misc comment clean ups braintro2019-08-221-4/+4
|
* dec0.cpp: MUCu dumps braintro2019-08-221-86/+60
| | | | | | dec0: Verified Bad Dudes MCU dump as correct. [TeamEurope, Brian Troha, The Dumping Union] dec0.cpp: Decapped and dumped actual MCU for Heavy Barrel (World). [TeamEurope, Brian Troha, The Dumping Union]
* dec0: Label Birdie Try as revision 2 in case someone ever finds an earlier ↵ braintro2019-08-151-1/+1
| | | | version & other misc doc updates
* dec0.cpp: Note on sound CPU type (nw) AJR2019-08-131-2/+6
|
* (nw) dec0.cpp: Minor ROM name correction based on actual PCB. braintro2019-08-121-23/+23
|
* birdtry: Hook up newly dumped MCU, remove simulation Dirk Best2019-08-121-1/+11
| | | | Promoted to working as result.
* dec0.cpp: fixed erroneous c-p on my part (nw) Ivan Vangelista2019-08-101-1/+0
|
* dec0.cpp: dumped PROMs for the dec0 motherboard [Guru] Ivan Vangelista2019-08-101-47/+72
|
* dec0.cpp: Decapped and dumped the MCU for Birdie Try. [Team Europe, Ivan ↵ braintro2019-08-091-32/+37
| | | | | | | | Vangelista] NOTE: MCU NOT hooked up, just fix ROM names and MCU dump only out of whatsnew: Add in PCB locations for Birdie Try and correct ROM labels and document the PCB combo
* (nw) dec0.cpp: use correct sized PROMs braintro2019-08-091-40/+40
|
* (nw) dec0.cpp: Add PROMs to other robocop sets - misc PCB info braintro2019-08-081-18/+31
|
* (nw) dec0.cpp: Clean up Heavy Barrel ROM labels braintro2019-08-081-77/+93
|
* decmxc06.cpp : Updates cam9002019-05-101-10/+10
| | | | | | Use callback for colour masking and priority behavior, Move configuration into handlers, Reduce unnecessary lines, Unnecessary configuration values decbac06.cpp : Implement priority dec0.cpp : Add notes
* gen_latch.cpp : Remove unnecessary arguments in handlers (#4623) cam9002019-03-291-3/+3
| | | | | | | | * gen_latch.cpp : Remove unnecessary arguments in acknowledge related handlers * gen_latch.cpp : Remove unnecessary handlers in 16 bit read/write handlers * gen_latch.cpp : Remove unnecessary arguments in 8 bit handlers
* emupal.cpp : Remove MCFGs, Simplify handlers (#4713) cam9002019-03-291-1/+1
|
* (nw) Clean up the mess on master Vas Crabb2019-03-261-6/+218
| | | | | | | | | | | | | This effectively reverts b380514764cf857469bae61c11143a19f79a74c5 and c24473ddff715ecec2e258a6eb38960cf8c8e98e, restoring the state at 598cd5227223c3b04ca31f0dbc1981256d9ea3ff. Before pushing, please check that what you're about to push is sane. Check your local commit log and ensure there isn't anything out-of-place before pushing to mainline. When things like this happen, it wastes everyone's time. I really don't need this in a week when real work™ is busting my balls and I'm behind where I want to be with preparing for MAME release.
* Revert "conflict resolution (nw)" andreasnaive2019-03-251-218/+6
| | | | | This reverts commit c24473ddff715ecec2e258a6eb38960cf8c8e98e, reversing changes made to 009cba4fb8102102168ef32870892438327f3705.
* dec0.cpp: Use uPD4701A device for trackballs AJR2019-02-241-34/+32
|
* Works better with PORT_RESET (nw) Angelo Salese2019-02-241-4/+4
|
* srcclean (nw) Vas Crabb2019-02-241-88/+88
|
* (nw) revert decbac06 and decmcx06 changes from ↵ Vas Crabb2019-02-241-1/+1
| | | | | | | 779b7626265c29145b06d451af2088fa43635374 * The decbac06 changes break other games on the same hardware * The change to sprite flipping in decmxc06 won't work with screen flipping
* dec0.cpp: implement trackball inputs [Angelo Salese] angelosa2019-02-231-2/+51
|
* New working game - Bandit (Data East USA, 1989) bmcphail2019-02-221-4/+169
| | | | Please credit CoolMod, Phil Bennett, Bryan McPhail, Moffitt, rtw, gamezfan, Dane Biegert, Candy Wolff, Henrique Areias Pontes, Sean Sutton, Surgeville, Evan Korzon, Charles MacDonald, Smitdogg, The Dumping Union
* -devices/sound/3812intf: Removed MCFG macro, nw mooglyguy2018-12-301-176/+173
| | | | -drivers/actfancr, alpha68k, bloodbro, crospang, dcon, dec0, deniam, dynduke, fuukifg2, galspnbl, goodejan, legionna, nmg5, oneshot, prehisle, r2dx_v33, raiden, raiden2, sengokmj, snk68, spbactn, spdodgeb, stadhero, tbowl, toaplan1, toki, twincobr, umipoker, wardner, yunsun16: Removed MACHINE_CONFIG macros, nw