summaryrefslogtreecommitdiffstatshomepage
path: root/language/Dutch
Commit message (Expand)AuthorAgeFilesLines
* Update copyright years. Vas Crabb2024-02-261-1/+1
* srcclean and bump copyright date on language files to 2023 Vas Crabb2023-02-191-1/+1
* Input refactoring: Vas Crabb2023-02-181-542/+579
* Miscellaneous fixes and refactoring: Vas Crabb2023-01-281-21/+21
* Regenerated UI translation files Vas Crabb2022-10-161-426/+426
* Patched up some gaps in functionality and fixed some bugs. Vas Crabb2022-09-021-241/+265
* ui, docs: Added menus to fill a couple of gaps, improved consistency. (#9915) Vas Crabb2022-06-111-1128/+1550
* Moved localised I/O port name lookup into I/O port manager. Vas Crabb2021-12-091-2028/+577
* Updated localisations for UI changes in 0.238 development cycle. Vas Crabb2021-11-191-601/+760
* -frontend: Refactored menu event handling and fixed a number of issues. (#8777) Vas Crabb2021-10-311-1171/+1566
* Filled in Japanese names for a bunch of inputs, fixed issues with localised P... Vas Crabb2021-10-231-30/+30
* Regenerate and patch up translation files for latest UI work. Vas Crabb2021-10-171-191/+192
* Updated translation files for latest changes. Vas Crabb2021-10-161-3204/+3253
* Re-generated translations for I/O port names. Vas Crabb2021-10-111-968/+4355
* Overdue internal UI enhancements (#8674) Vas Crabb2021-10-091-478/+857
* Re-generate localisations Vas Crabb2021-05-291-2019/+2354
* Update Dutch strings.po (#7924) Jos van Mourik2021-04-041-89/+94
* (nw) Clean up the mess on master Vas Crabb2019-03-261-1723/+1925
* Revert "conflict resolution (nw)" andreasnaive2019-03-251-1925/+1723
* regenerate localisation files (nw) Vas Crabb2019-03-171-1723/+1925
* Update Dutch language strings (#3499) Jos van Mourik2018-04-301-30/+44
* well that was dumb (nw) Vas Crabb2018-04-301-2/+2
* Make devopt menu localisable. Vas Crabb2018-04-281-6/+168
* Update Dutch strings Jos van Mourik2018-03-271-2/+2
* srcclean and regenerate localisations (nw) Vas Crabb2018-03-251-354/+358
* Update Dutch translations (#3151) Jos van Mourik2018-01-301-8/+10
* srcclean and regenerate localisations (nw) Vas Crabb2018-01-281-1431/+1462
* clean up unused translation strings (nw) Vas Crabb2017-11-291-43/+0
* Update Dutch translations Jos van Mourik2017-11-141-79/+89
* (nw) Improve localisation: Vas Crabb2017-10-031-1391/+1429
* add lua translation to makefile and update translations cracyc2017-09-291-1354/+1619
* fix an oversight, clean up many obsolete strings (nw) Vas Crabb2017-09-041-287/+1
* 100% complete Dutch translation Jos van Mourik2017-09-041-368/+386
* Swedish translation [Edstrom] Vas Crabb2017-08-251-1358/+1362
* try to appease GCC, update language files (nw) Vas Crabb2017-08-211-91/+116
* update language files (nw) Vas Crabb2017-08-191-979/+1019
* Update language files (nw) Vas Crabb2017-08-101-555/+652
* Update translation files (again) Vas Crabb2017-08-061-968/+1022
* Update localisation .po files. Our localisations are rotting badly, so pleas... Vas Crabb2017-07-281-1372/+1633
* srcclean and translation regeneration Vas Crabb2016-08-291-616/+615
* Update and fix translation files. dankan18902016-07-071-560/+783
* Synchronized the translation files. (Nw) dankan18902016-04-151-358/+383
* submenu: merged some options menu. (nw) dankan18902016-04-111-415/+390
* Fixed the key handler for the error "roms or missing CHD." dankan18902016-04-071-237/+255
* Updated translation files (nw) Miodrag Milanovic2016-04-031-211/+199
* Update translations to latest Miodrag Milanovic2016-03-281-121/+118
* tweaks and fixes (nw) Wilbert Pol2016-03-271-82/+82
* translation files resynchronized. (nw) dankan18902016-03-261-80/+83
* Update translations to latest code (nw) Miodrag Milanovic2016-03-251-123/+127
* Translated the rest of the dutch strings and improved some previous ones (nw) Wilbert Pol2016-03-231-105/+118
) , m_rom_bank(0U), m_rom_offset(0U), m_cmd_addr(0U), m_cmd_data(0U), m_new_data(0U), m_cmd_pending(0U), m_dsp_ready(1U) , m_samples{ 0, 0 }, m_sr(0U), m_fsr(0U), m_ock(1U), m_old(1U), m_ready(0U), m_channel(0U) { } void qsound_device::qsound_w(offs_t offset, u8 data) { switch (offset) { case 0: LOGCOMMAND( "QSound: set command data[h] = %02X (%04X -> %04X)\n", data, m_new_data, (m_new_data & 0x00ffU) | (u16(data) << 8)); m_new_data = (m_new_data & 0x00ffU) | (u16(data) << 8); break; case 1: LOGCOMMAND( "QSound: set command data[l] = %02X (%04X -> %04X)\n", data, m_new_data, (m_new_data & 0xff00U) | data); m_new_data = (m_new_data & 0xff00U) | data; break; case 2: m_dsp_ready = 0U; machine().scheduler().synchronize( timer_expired_delegate(FUNC(qsound_device::set_cmd), this), (unsigned(data) << 16) | m_new_data); break; default: logerror("QSound: host write to unknown register %01X = %02X (%s)\n", offset, data, machine().describe_context()); } } u8 qsound_device::qsound_r() { return m_dsp_ready ? 0x80 : 0x00; } //------------------------------------------------- // rom_region - return a pointer to the device's // internal ROM region //------------------------------------------------- const tiny_rom_entry *qsound_device::device_rom_region() const { return ROM_NAME( qsound ); } //------------------------------------------------- // device_add_mconfig - add device configuration //------------------------------------------------- void qsound_device::device_add_mconfig(machine_config &config) { DSP16A(config, m_dsp, DERIVED_CLOCK(1, 1)); m_dsp->set_addrmap(AS_IO, &qsound_device::dsp_io_map); m_dsp->ock_cb().set(FUNC(qsound_device::dsp_ock_w)); m_dsp->pio_r_cb().set(FUNC(qsound_device::dsp_pio_r)); m_dsp->pio_w_cb().set(FUNC(qsound_device::dsp_pio_w)); } //------------------------------------------------- // device_start - device-specific startup //------------------------------------------------- void qsound_device::device_start() { // hope we get good synchronisation between the DSP and the sound system m_stream = stream_alloc(0, 2, clock() / 2 / 1248); // save DSP communication state save_item(NAME(m_rom_bank)); save_item(NAME(m_rom_offset)); save_item(NAME(m_cmd_addr)); save_item(NAME(m_cmd_data)); save_item(NAME(m_new_data)); save_item(NAME(m_cmd_pending)); save_item(NAME(m_dsp_ready)); // save serial sample recovery state save_item(NAME(m_samples)); save_item(NAME(m_sr)); save_item(NAME(m_fsr)); save_item(NAME(m_ock)); save_item(NAME(m_old)); save_item(NAME(m_ready)); save_item(NAME(m_channel)); } //------------------------------------------------- // device_clock_changed //------------------------------------------------- void qsound_device::device_clock_changed() { m_stream->set_sample_rate(clock() / 2 / 1248); } //------------------------------------------------- // device_reset - device-specific reset //------------------------------------------------- void qsound_device::device_reset() { // TODO: does this get automatically cleared on reset or not? m_cmd_pending = 0U; m_dsp_ready = 1U; m_dsp->set_input_line(DSP16_INT_LINE, CLEAR_LINE); } //------------------------------------------------- // sound_stream_update - handle a stream update //------------------------------------------------- void qsound_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs) { outputs[0].fill(stream_buffer::sample_t(m_samples[0]) * (1.0 / 32768.0)); outputs[1].fill(stream_buffer::sample_t(m_samples[1]) * (1.0 / 32768.0)); } //------------------------------------------------- // rom_bank_updated - the rom bank has changed //------------------------------------------------- void qsound_device::rom_bank_updated() { machine().scheduler().synchronize(); } // DSP external ROM space void qsound_device::dsp_io_map(address_map &map) { map.unmap_value_high(); map(0x0000, 0x7fff).mirror(0x8000).r(FUNC(qsound_device::dsp_sample_r)); } u16 qsound_device::dsp_sample_r(offs_t offset) { // on CPS2, bit 0-7 of external ROM data is tied to ground u8 const byte(read_byte((u32(m_rom_bank) << 16) | m_rom_offset)); if (!machine().side_effects_disabled()) m_rom_bank = (m_rom_bank & 0x8000U) | offset; return u16(byte) << 8; } WRITE_LINE_MEMBER(qsound_device::dsp_ock_w) { // detect active edge if (bool(state) == bool(m_ock)) return; m_ock = state; if (!state) return; // detect start of word if (m_ready && !m_fsr && !m_dsp->ose_r()) { // FIXME: PSEL at beginning of word seems to select channel, but how does the logic derive WS from the DSP outputs? m_channel = m_dsp->psel_r(); m_fsr = 0xffffU; } // shift in data if (m_fsr) { m_sr = (m_sr << 1) | (m_dsp->do_r() ? 0x0001U : 0x0000U); m_fsr >>= 1; if (!m_fsr) { LOGSAMPLE("QSound: recovered channel %u sample %04X\n", m_channel, m_sr); if (!m_channel) m_stream->update(); m_samples[m_channel] = m_sr; #if 0 // enable to log PCM to a file - can be imported with "ffmpeg -f s16be -ar 24038 -ac 2 -i qsound.pcm qsound.wav" static std::ofstream logfile("qsound.pcm", std::ios::binary); logfile.put(u8(m_sr >> 8)); logfile.put(u8(m_sr)); #endif } } // detect falling OLD - indicates next bit could be start of a word u8 const old(m_dsp->old_r()); m_ready = (m_old && !old); m_old = old; } void qsound_device::dsp_pio_w(offs_t offset, u16 data) { // PDX0 is used for QSound ROM offset, and PDX1 is used for ADPCM ROM offset // this prevents spurious PSEL transitions between sending samples to the DAC // it could still be used to have separate QSound/ADPCM ROM banks m_rom_bank = (m_rom_bank & 0x7fffU) | u16(offset << 15); m_rom_offset = data; } u16 qsound_device::dsp_pio_r() { LOGCOMMAND( "QSound: DSP PIO read returning %s = %04X\n", m_cmd_pending ? "addr" : "data", m_cmd_pending ? m_cmd_addr : m_cmd_data); if (m_cmd_pending) { m_cmd_pending = 0U; m_dsp->set_input_line(DSP16_INT_LINE, CLEAR_LINE); machine().scheduler().synchronize(timer_expired_delegate(FUNC(qsound_device::set_dsp_ready), this)); return m_cmd_addr; } else { return m_cmd_data; } } void qsound_device::set_dsp_ready(void *ptr, s32 param) { m_dsp_ready = 1U; } void qsound_device::set_cmd(void *ptr, s32 param) { /* * I don't believe the data word is actually double-buffered in * real life. In practice it works because the DSP's instruction * throughput is so much higher than the Z80's that it can always * read the data word before the Z80 can realise it's read the * address. * * In MAME, there's a scheduler synchronisation barrier when the * DSP reads the address but before it reads the data. When this * happens, MAME may give the Z80 enough time to see that the DSP * has read the address and write more data before scheduling the * DSP again. The DSP then reads the new data and stores it at * the old command address. * * You can see this happening in megaman2 test mode by playing * command 0x11 (Gyro Man's theme). Within two minutes, some * channels' sample banks/offsets will likely be overwritten. */ LOGCOMMAND("QSound: DSP command @%02X = %04X\n", u32(param) >> 16, u16(u32(param))); m_cmd_addr = u16(u32(param) >> 16); m_cmd_data = u16(u32(param)); m_cmd_pending = 1U; m_dsp->set_input_line(DSP16_INT_LINE, ASSERT_LINE); }