Previous 199869 Revisions Next

r23668 Thursday 13th June, 2013 at 11:20:06 UTC by Fabio Priuli
Modernized Konami 007232 sound device [Osso]

also, removed the chip from bishi_state class, since it seems that the driver does not use this device at all...
[src/emu/sound]k007232.c k007232.h
[src/mame/drivers]ajax.c aliens.c bottom9.c chqflag.c crimfght.c fastlane.c flkatck.c gbusters.c gradius3.c hcastle.c mainevt.c nemesis.c spy.c thunderx.c tmnt.c twin16.c wecleman.c
[src/mame/includes]bishi.h

trunk/src/mame/drivers/aliens.c
r23667r23668
1010#include "emu.h"
1111#include "cpu/z80/z80.h"
1212#include "cpu/m6809/konami.h" /* for the callback and the firq irq definition */
13#include "sound/k007232.h"
1413#include "sound/2151intf.h"
1514#include "video/konicdev.h"
1615#include "includes/konamipt.h"
r23667r23668
7776   int bank_A = BIT(data, 1);
7877   int bank_B = BIT(data, 0);
7978
80   k007232_set_bank(m_k007232, bank_A, bank_B);
79   m_k007232->set_bank(bank_A, bank_B);
8180}
8281
8382
r23667r23668
126125   AM_RANGE(0x8000, 0x87ff) AM_RAM                                     /* RAM */
127126   AM_RANGE(0xa000, 0xa001) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
128127   AM_RANGE(0xc000, 0xc000) AM_READ(soundlatch_byte_r)                         /* soundlatch_byte_r */
129   AM_RANGE(0xe000, 0xe00d) AM_DEVREADWRITE_LEGACY("k007232", k007232_r, k007232_w)
128   AM_RANGE(0xe000, 0xe00d) AM_DEVREADWRITE("k007232", k007232_device, read, write)
130129ADDRESS_MAP_END
131130
132131
r23667r23668
187186
188187WRITE8_MEMBER(aliens_state::volume_callback)
189188{
190   k007232_set_volume(m_k007232, 0, (data & 0x0f) * 0x11, 0);
191   k007232_set_volume(m_k007232, 1, 0, (data >> 4) * 0x11);
189   m_k007232->set_volume(0, (data & 0x0f) * 0x11, 0);
190   m_k007232->set_volume(1, 0, (data >> 4) * 0x11);
192191}
193192
194193static const k007232_interface k007232_config =
trunk/src/mame/drivers/nemesis.c
r23667r23668
5454#include "sound/3812intf.h"
5555#include "sound/vlm5030.h"
5656#include "sound/k005289.h"
57#include "sound/k007232.h"
5857#include "sound/k051649.h"
5958#include "includes/nemesis.h"
6059#include "includes/konamipt.h"
r23667r23668
254253{
255254   int bank_A = (data & 0x03);
256255   int bank_B = ((data >> 2) & 0x03);
257   k007232_set_bank(m_k007232, bank_A, bank_B);
256   m_k007232->set_bank(bank_A, bank_B);
258257}
259258
260259
r23667r23668
541540   AM_RANGE(0x0000, 0x7fff) AM_ROM
542541   AM_RANGE(0x8000, 0x87ff) AM_RAM
543542   AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_byte_r)
544   AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE_LEGACY("k007232", k007232_r, k007232_w)
543   AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("k007232", k007232_device, read, write)
545544   AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
546545   AM_RANGE(0xd000, 0xd000) AM_DEVWRITE_LEGACY("vlm", vlm5030_data_w)
547546   AM_RANGE(0xe000, 0xe000) AM_READ(wd_r) /* watchdog?? */
r23667r23668
552551   AM_RANGE(0x0000, 0x7fff) AM_ROM
553552   AM_RANGE(0x8000, 0x87ff) AM_RAM
554553   AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_byte_r)
555   AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE_LEGACY("k007232", k007232_r, k007232_w)
554   AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("k007232", k007232_device, read, write)
556555   AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
557556   AM_RANGE(0xe000, 0xe000) AM_READ(wd_r) /* watchdog?? */
558557ADDRESS_MAP_END
r23667r23668
566565   AM_RANGE(0x988f, 0x988f) AM_DEVWRITE("k051649", k051649_device, k051649_keyonoff_w)
567566   AM_RANGE(0x98e0, 0x98ff) AM_DEVREADWRITE("k051649", k051649_device, k051649_test_r, k051649_test_w)
568567   AM_RANGE(0xa000, 0xa001) AM_DEVREADWRITE("ymsnd", ym3812_device, read, write)
569   AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE_LEGACY("k007232", k007232_r, k007232_w)
568   AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("k007232", k007232_device, read, write)
570569   AM_RANGE(0xc000, 0xc000) AM_WRITE(city_sound_bank_w) /* 7232 bankswitch */
571570   AM_RANGE(0xd000, 0xd000) AM_READ(soundlatch_byte_r)
572571ADDRESS_MAP_END
r23667r23668
14921491
14931492WRITE8_MEMBER(nemesis_state::volume_callback)
14941493{
1495   k007232_set_volume(m_k007232, 0, (data >> 4) * 0x11, 0);
1496   k007232_set_volume(m_k007232, 1, 0, (data & 0x0f) * 0x11);
1494   m_k007232->set_volume(0, (data >> 4) * 0x11, 0);
1495   m_k007232->set_volume(1, 0, (data & 0x0f) * 0x11);
14971496}
14981497
14991498static const k007232_interface k007232_config =
trunk/src/mame/drivers/bottom9.c
r23667r23668
1616#include "cpu/z80/z80.h"
1717#include "cpu/m6809/m6809.h"
1818#include "video/konicdev.h"
19#include "sound/k007232.h"
2019#include "includes/konamipt.h"
2120#include "includes/bottom9.h"
2221
r23667r23668
146145
147146   bank_A = ((data >> 0) & 0x03);
148147   bank_B = ((data >> 2) & 0x03);
149   k007232_set_bank(m_k007232_1, bank_A, bank_B);
148   m_k007232_1->set_bank(bank_A, bank_B);
150149
151150   bank_A = ((data >> 4) & 0x03);
152151   bank_B = ((data >> 6) & 0x03);
153   k007232_set_bank(m_k007232_2, bank_A, bank_B);
152   m_k007232_2->set_bank(bank_A, bank_B);
154153}
155154
156155
r23667r23668
178177   AM_RANGE(0x0000, 0x7fff) AM_ROM
179178   AM_RANGE(0x8000, 0x87ff) AM_RAM
180179   AM_RANGE(0x9000, 0x9000) AM_WRITE(sound_bank_w)
181   AM_RANGE(0xa000, 0xa00d) AM_DEVREADWRITE_LEGACY("k007232_1", k007232_r, k007232_w)
182   AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE_LEGACY("k007232_2", k007232_r, k007232_w)
180   AM_RANGE(0xa000, 0xa00d) AM_DEVREADWRITE("k007232_1", k007232_device, read, write)
181   AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("k007232_2", k007232_device, read, write)
183182   AM_RANGE(0xd000, 0xd000) AM_READ(soundlatch_byte_r)
184183   AM_RANGE(0xf000, 0xf000) AM_WRITE(nmi_enable_w)
185184ADDRESS_MAP_END
r23667r23668
263262
264263WRITE8_MEMBER(bottom9_state::volume_callback0)
265264{
266   k007232_set_volume(m_k007232_1, 0, (data >> 4) * 0x11, 0);
267   k007232_set_volume(m_k007232_1, 1, 0, (data & 0x0f) * 0x11);
265   m_k007232_1->set_volume(0, (data >> 4) * 0x11, 0);
266   m_k007232_1->set_volume(1, 0, (data & 0x0f) * 0x11);
268267}
269268
270269WRITE8_MEMBER(bottom9_state::volume_callback1)
271270{
272   k007232_set_volume(m_k007232_2, 0, (data >> 4) * 0x11, 0);
273   k007232_set_volume(m_k007232_2, 1, 0, (data & 0x0f) * 0x11);
271   m_k007232_2->set_volume(0, (data >> 4) * 0x11, 0);
272   m_k007232_2->set_volume(1, 0, (data & 0x0f) * 0x11);
274273}
275274
276275static const k007232_interface k007232_interface_1 =
trunk/src/mame/drivers/gradius3.c
r23667r23668
2323#include "cpu/m68000/m68000.h"
2424#include "cpu/z80/z80.h"
2525#include "sound/2151intf.h"
26#include "sound/k007232.h"
2726#include "includes/konamipt.h"
2827#include "includes/gradius3.h"
2928
r23667r23668
142141   /* banks # for the 007232 (chip 1) */
143142   bank_A = ((data >> 0) & 0x03);
144143   bank_B = ((data >> 2) & 0x03);
145   k007232_set_bank(m_k007232, bank_A, bank_B);
144   m_k007232->set_bank(bank_A, bank_B);
146145}
147146
148147
r23667r23668
185184   AM_RANGE(0x0000, 0xefff) AM_ROM
186185   AM_RANGE(0xf000, 0xf000) AM_WRITE(sound_bank_w)             /* 007232 bankswitch */
187186   AM_RANGE(0xf010, 0xf010) AM_READ(soundlatch_byte_r)
188   AM_RANGE(0xf020, 0xf02d) AM_DEVREADWRITE_LEGACY("k007232", k007232_r, k007232_w)
187   AM_RANGE(0xf020, 0xf02d) AM_DEVREADWRITE("k007232", k007232_device, read, write)
189188   AM_RANGE(0xf030, 0xf031) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
190189   AM_RANGE(0xf800, 0xffff) AM_RAM
191190ADDRESS_MAP_END
r23667r23668
251250
252251WRITE8_MEMBER(gradius3_state::volume_callback)
253252{
254   k007232_set_volume(m_k007232, 0, (data >> 4) * 0x11, 0);
255   k007232_set_volume(m_k007232, 1, 0, (data & 0x0f) * 0x11);
253   m_k007232->set_volume(0, (data >> 4) * 0x11, 0);
254   m_k007232->set_volume(1, 0, (data & 0x0f) * 0x11);
256255}
257256
258257static const k007232_interface k007232_config =
trunk/src/mame/drivers/fastlane.c
r23667r23668
1111
1212#include "emu.h"
1313#include "cpu/m6809/hd6309.h"
14#include "sound/k007232.h"
1514#include "video/konicdev.h"
1615#include "includes/konamipt.h"
1716#include "includes/fastlane.h"
r23667r23668
4645   membank("bank1")->set_entry((data & 0x0c) >> 2);
4746
4847   /* bit 4: bank # for the 007232 (chip 2) */
49   k007232_set_bank(m_k007232_2, 0 + ((data & 0x10) >> 4), 2 + ((data & 0x10) >> 4));
48   m_k007232_2->set_bank(0 + ((data & 0x10) >> 4), 2 + ((data & 0x10) >> 4));
5049
5150   /* other bits seems to be unused */
5251}
r23667r23668
5655
5756READ8_MEMBER(fastlane_state::fastlane_k1_k007232_r)
5857{
59   return k007232_r(m_k007232_1, space, offset ^ 1);
58   return m_k007232_1->read(space, offset ^ 1);
6059}
6160
6261WRITE8_MEMBER(fastlane_state::fastlane_k1_k007232_w)
6362{
64   k007232_w(m_k007232_1, space, offset ^ 1, data);
63   m_k007232_1->write(space, offset ^ 1, data);
6564}
6665
6766READ8_MEMBER(fastlane_state::fastlane_k2_k007232_r)
6867{
69   return k007232_r(m_k007232_2, space, offset ^ 1);
68   return m_k007232_2->read(space, offset ^ 1);
7069}
7170
7271WRITE8_MEMBER(fastlane_state::fastlane_k2_k007232_w)
7372{
74   k007232_w(m_k007232_2, space, offset ^ 1, data);
73   m_k007232_2->write(space, offset ^ 1, data);
7574}
7675static ADDRESS_MAP_START( fastlane_map, AS_PROGRAM, 8, fastlane_state )
7776   AM_RANGE(0x0000, 0x005f) AM_RAM_WRITE(k007121_registers_w) AM_SHARE("k007121_regs") /* 007121 registers */
r23667r23668
177176
178177WRITE8_MEMBER(fastlane_state::volume_callback0)
179178{
180   k007232_set_volume(m_k007232_1, 0, (data >> 4) * 0x11, 0);
181   k007232_set_volume(m_k007232_1, 1, 0, (data & 0x0f) * 0x11);
179   m_k007232_1->set_volume(0, (data >> 4) * 0x11, 0);
180   m_k007232_1->set_volume(1, 0, (data & 0x0f) * 0x11);
182181}
183182
184183WRITE8_MEMBER(fastlane_state::volume_callback1)
185184{
186   k007232_set_volume(m_k007232_2, 0, (data >> 4) * 0x11, 0);
187   k007232_set_volume(m_k007232_2, 1, 0, (data & 0x0f) * 0x11);
185   m_k007232_2->set_volume(0, (data >> 4) * 0x11, 0);
186   m_k007232_2->set_volume(1, 0, (data & 0x0f) * 0x11);
188187}
189188
190189static const k007232_interface k007232_interface_1 =
trunk/src/mame/drivers/tmnt.c
r23667r23668
7474#include "sound/samples.h"
7575#include "sound/k053260.h"
7676#include "sound/k054539.h"
77#include "sound/k007232.h"
7877#include "sound/upd7759.h"
7978#include "machine/nvram.h"
8079#include "includes/tmnt.h"
r23667r23668
10811080   AM_RANGE(0x0000, 0x7fff) AM_ROM
10821081   AM_RANGE(0x8000, 0x87ff) AM_RAM
10831082   AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_byte_r)
1084   AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE_LEGACY("k007232", k007232_r, k007232_w)
1083   AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("k007232", k007232_device, read, write)
10851084   AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
10861085ADDRESS_MAP_END
10871086
r23667r23668
10911090   AM_RANGE(0x8000, 0x87ff) AM_RAM
10921091   AM_RANGE(0x9000, 0x9000) AM_READWRITE(tmnt_sres_r, tmnt_sres_w) /* title music & UPD7759C reset */
10931092   AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_byte_r)
1094   AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE_LEGACY("k007232", k007232_r, k007232_w)
1093   AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("k007232", k007232_device, read, write)
10951094   AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
10961095   AM_RANGE(0xd000, 0xd000) AM_DEVWRITE_LEGACY("upd", upd7759_port_w)
10971096   AM_RANGE(0xe000, 0xe000) AM_WRITE(tmnt_upd_start_w)
r23667r23668
20152014
20162015WRITE8_MEMBER(tmnt_state::volume_callback)
20172016{
2018   k007232_set_volume(m_k007232, 0, (data >> 4) * 0x11, 0);
2019   k007232_set_volume(m_k007232, 1, 0, (data & 0x0f) * 0x11);
2017   m_k007232->set_volume(0, (data >> 4) * 0x11, 0);
2018   m_k007232->set_volume(1, 0, (data & 0x0f) * 0x11);
20202019}
20212020
20222021static const k007232_interface k007232_config =
trunk/src/mame/drivers/crimfght.c
r23667r23668
1616#include "cpu/m6809/konami.h" /* for the callback and the firq irq definition */
1717#include "video/konicdev.h"
1818#include "sound/2151intf.h"
19#include "sound/k007232.h"
2019#include "includes/konamipt.h"
2120#include "includes/crimfght.h"
2221
r23667r23668
4948   int bank_A = BIT(data, 1);
5049   int bank_B = BIT(data, 0);
5150
52   k007232_set_bank(m_k007232, bank_A, bank_B );
51   m_k007232->set_bank(bank_A, bank_B );
5352}
5453
5554READ8_MEMBER(crimfght_state::k052109_051960_r)
r23667r23668
102101   AM_RANGE(0x8000, 0x87ff) AM_RAM                                 /* RAM */
103102   AM_RANGE(0xa000, 0xa001) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)       /* YM2151 */
104103   AM_RANGE(0xc000, 0xc000) AM_READ(soundlatch_byte_r)                     /* soundlatch_byte_r */
105   AM_RANGE(0xe000, 0xe00d) AM_DEVREADWRITE_LEGACY("k007232", k007232_r, k007232_w)    /* 007232 registers */
104   AM_RANGE(0xe000, 0xe00d) AM_DEVREADWRITE("k007232", k007232_device, read, write)    /* 007232 registers */
106105ADDRESS_MAP_END
107106
108107/***************************************************************************
r23667r23668
222221
223222WRITE8_MEMBER(crimfght_state::volume_callback)
224223{
225   k007232_set_volume(m_k007232, 0, (data & 0x0f) * 0x11, 0);
226   k007232_set_volume(m_k007232, 1, 0, (data >> 4) * 0x11);
224   m_k007232->set_volume(0, (data & 0x0f) * 0x11, 0);
225   m_k007232->set_volume(1, 0, (data >> 4) * 0x11);
227226}
228227
229228static const k007232_interface k007232_config =
trunk/src/mame/drivers/spy.c
r23667r23668
2222#include "cpu/m6809/m6809.h"
2323#include "video/konicdev.h"
2424#include "sound/3812intf.h"
25#include "sound/k007232.h"
2625#include "includes/konamipt.h"
2726#include "includes/spy.h"
2827
r23667r23668
336335
337336   bank_A = (data >> 0) & 0x03;
338337   bank_B = (data >> 2) & 0x03;
339   k007232_set_bank(m_k007232_1, bank_A, bank_B);
338   m_k007232_1->set_bank(bank_A, bank_B);
340339
341340   bank_A = (data >> 4) & 0x03;
342341   bank_B = (data >> 6) & 0x03;
343   k007232_set_bank(m_k007232_2, bank_A, bank_B);
342   m_k007232_2->set_bank(bank_A, bank_B);
344343}
345344
346345
r23667r23668
391390   AM_RANGE(0x0000, 0x7fff) AM_ROM
392391   AM_RANGE(0x8000, 0x87ff) AM_RAM
393392   AM_RANGE(0x9000, 0x9000) AM_WRITE(sound_bank_w)
394   AM_RANGE(0xa000, 0xa00d) AM_DEVREADWRITE_LEGACY("k007232_1", k007232_r, k007232_w)
395   AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE_LEGACY("k007232_2", k007232_r, k007232_w)
393   AM_RANGE(0xa000, 0xa00d) AM_DEVREADWRITE("k007232_1", k007232_device, read, write)
394   AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("k007232_2", k007232_device, read, write)
396395   AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym3812_device, read, write)
397396   AM_RANGE(0xd000, 0xd000) AM_READ(soundlatch_byte_r)
398397ADDRESS_MAP_END
r23667r23668
449448
450449WRITE8_MEMBER(spy_state::volume_callback0)
451450{
452   k007232_set_volume(m_k007232_1, 0, (data >> 4) * 0x11, 0);
453   k007232_set_volume(m_k007232_1, 1, 0, (data & 0x0f) * 0x11);
451   m_k007232_1->set_volume(0, (data >> 4) * 0x11, 0);
452   m_k007232_1->set_volume(1, 0, (data & 0x0f) * 0x11);
454453}
455454
456455static const k007232_interface spy_k007232_interface_1 =
r23667r23668
460459
461460WRITE8_MEMBER(spy_state::volume_callback1)
462461{
463   k007232_set_volume(m_k007232_2, 0, (data >> 4) * 0x11, 0);
464   k007232_set_volume(m_k007232_2, 1, 0, (data & 0x0f) * 0x11);
462   m_k007232_2->set_volume(0, (data >> 4) * 0x11, 0);
463   m_k007232_2->set_volume(1, 0, (data & 0x0f) * 0x11);
465464}
466465
467466static const k007232_interface spy_k007232_interface_2 =
trunk/src/mame/drivers/hcastle.c
r23667r23668
1010#include "cpu/m6809/konami.h"
1111#include "cpu/z80/z80.h"
1212#include "sound/3812intf.h"
13#include "sound/k007232.h"
1413#include "sound/k051649.h"
1514#include "video/konicdev.h"
1615#include "includes/konamipt.h"
r23667r23668
6766{
6867   int bank_A=(data&0x3);
6968   int bank_B=((data>>2)&0x3);
70   k007232_set_bank(m_k007232, bank_A, bank_B );
69   m_k007232->set_bank(bank_A, bank_B );
7170}
7271
7372static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, hcastle_state )
r23667r23668
7978   AM_RANGE(0x988f, 0x988f) AM_DEVWRITE("k051649", k051649_device, k051649_keyonoff_w)
8079   AM_RANGE(0x98e0, 0x98ff) AM_DEVREADWRITE("k051649", k051649_device, k051649_test_r, k051649_test_w)
8180   AM_RANGE(0xa000, 0xa001) AM_DEVREADWRITE("ymsnd", ym3812_device, read, write)
82   AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE_LEGACY("k007232", k007232_r, k007232_w)
81   AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("k007232", k007232_device, read, write)
8382   AM_RANGE(0xc000, 0xc000) AM_WRITE(sound_bank_w) /* 7232 bankswitch */
8483   AM_RANGE(0xd000, 0xd000) AM_READ(soundlatch_byte_r)
8584ADDRESS_MAP_END
r23667r23668
162161
163162WRITE8_MEMBER(hcastle_state::volume_callback)
164163{
165   k007232_set_volume(m_k007232, 0, (data >> 4) * 0x11, 0);
166   k007232_set_volume(m_k007232, 1, 0, (data & 0x0f) * 0x11);
164   m_k007232->set_volume(0, (data >> 4) * 0x11, 0);
165   m_k007232->set_volume(1, 0, (data & 0x0f) * 0x11);
167166}
168167
169168static const k007232_interface k007232_config =
trunk/src/mame/drivers/flkatck.c
r23667r23668
1414#include "cpu/z80/z80.h"
1515#include "cpu/m6809/hd6309.h"
1616#include "sound/2151intf.h"
17#include "sound/k007232.h"
1817#include "video/konicdev.h"
1918#include "includes/konamipt.h"
2019#include "includes/flkatck.h"
r23667r23668
108107   AM_RANGE(0x9004, 0x9004) AM_READNOP                                         /* ??? */
109108   AM_RANGE(0x9006, 0x9006) AM_WRITENOP                                        /* ??? */
110109   AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_byte_r)                             /* soundlatch_byte_r */
111   AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE_LEGACY("k007232", k007232_r, k007232_w) /* 007232 registers */
110   AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("k007232", k007232_device, read, write) /* 007232 registers */
112111   AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)           /* YM2151 */
113112ADDRESS_MAP_END
114113
r23667r23668
179178
180179WRITE8_MEMBER(flkatck_state::volume_callback0)
181180{
182   k007232_set_volume(m_k007232, 0, (data >> 4) * 0x11, 0);
183   k007232_set_volume(m_k007232, 1, 0, (data & 0x0f) * 0x11);
181   m_k007232->set_volume(0, (data >> 4) * 0x11, 0);
182   m_k007232->set_volume(1, 0, (data & 0x0f) * 0x11);
184183}
185184
186185static const k007232_interface k007232_config =
r23667r23668
202201
203202void flkatck_state::machine_reset()
204203{
205   k007232_set_bank(m_k007232, 0, 1);
204   m_k007232->set_bank(0, 1);
206205
207206   m_irq_enabled = 0;
208207   m_multiply_reg[0] = 0;
trunk/src/mame/drivers/wecleman.c
r23667r23668
263263#include "video/konicdev.h"
264264#include "cpu/m6809/m6809.h"
265265#include "sound/2151intf.h"
266#include "sound/k007232.h"
267266#include "wecleman.lh"
268267#include "includes/wecleman.h"
269268
r23667r23668
617616
618617WRITE8_MEMBER(wecleman_state::wecleman_K00723216_bank_w)
619618{
620   k007232_set_bank(m_k007232, 0, ~data&1 );  //* (wecleman062gre)
619   m_k007232->set_bank(0, ~data&1 );  //* (wecleman062gre)
621620}
622621
623622static ADDRESS_MAP_START( wecleman_sound_map, AS_PROGRAM, 8, wecleman_state )
r23667r23668
628627   AM_RANGE(0x9000, 0x9001) AM_WRITE(multiply_w)   // Protection
629628   AM_RANGE(0x9006, 0x9006) AM_WRITENOP    // ?
630629   AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_byte_r) // From main CPU
631   AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE_LEGACY("k007232", k007232_r, k007232_w) // K007232 (Reading offset 5/b triggers the sample)
630   AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("k007232", k007232_device, read, write) // K007232 (Reading offset 5/b triggers the sample)
632631   AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
633632   AM_RANGE(0xf000, 0xf000) AM_WRITE(wecleman_K00723216_bank_w)    // Samples banking
634633ADDRESS_MAP_END
r23667r23668
650649
651650WRITE8_MEMBER(wecleman_state::hotchase_sound_control_w)
652651{
653   k007232_device *sound[3];
654
655652//  int reg[8];
656653
657   sound[0] = m_k007232_1;
658   sound[1] = m_k007232_2;
659   sound[2] = m_k007232_3;
660654
661655//  reg[offset] = data;
662656
r23667r23668
673667             ++------ chip select ( 0:chip 1, 1:chip2, 2:chip3)
674668             data&0x0f left volume  (data>>4)&0x0f right volume
675669         */
676         k007232_set_volume( sound[offset>>1], offset&1,  (data&0x0f) * 0x08, (data>>4) * 0x08 );
670         m_k007232_1->set_volume( offset&1,  (data&0x0f) * 0x08, (data>>4) * 0x08 );
671         m_k007232_2->set_volume( offset&1,  (data&0x0f) * 0x08, (data>>4) * 0x08 );
672         m_k007232_3->set_volume( offset&1,  (data&0x0f) * 0x08, (data>>4) * 0x08 );
677673         break;
678674
679675      case 0x06:  /* Bankswitch for chips 0 & 1 */
r23667r23668
685681         // bit 6: chip 2 - ch0 ?
686682         // bit 7: chip 2 - ch1 ?
687683
688         k007232_set_bank( sound[0], bank0_a, bank0_b );
689         k007232_set_bank( sound[1], bank1_a, bank1_b );
684         m_k007232_1->set_bank( bank0_a, bank0_b );
685         m_k007232_2->set_bank( bank1_a, bank1_b );
690686      }
691687      break;
692688
r23667r23668
695691         int bank2_a = (data >> 0) & 7;
696692         int bank2_b = (data >> 3) & 7;
697693
698         k007232_set_bank( sound[2], bank2_a, bank2_b );
694         m_k007232_3->set_bank( bank2_a, bank2_b );
699695      }
700696      break;
701697   }
r23667r23668
705701   even and odd register are mapped swapped */
706702READ8_MEMBER(wecleman_state::hotchase_1_k007232_r)
707703{
708   return k007232_r(m_k007232_1, space, offset ^ 1);
704   return m_k007232_1->read(space, offset ^ 1);
709705}
710706
711707WRITE8_MEMBER(wecleman_state::hotchase_1_k007232_w)
712708{
713   k007232_w(m_k007232_1, space, offset ^ 1, data);
709   m_k007232_1->write(space, offset ^ 1, data);
714710}
715711
716712READ8_MEMBER(wecleman_state::hotchase_2_k007232_r)
717713{
718   return k007232_r(m_k007232_2, space, offset ^ 1);
714   return m_k007232_2->read(space, offset ^ 1);
719715}
720716
721717WRITE8_MEMBER(wecleman_state::hotchase_2_k007232_w)
722718{
723   k007232_w(m_k007232_2, space, offset ^ 1, data);
719   m_k007232_2->write(space, offset ^ 1, data);
724720}
725721
726722READ8_MEMBER(wecleman_state::hotchase_3_k007232_r)
727723{
728   return k007232_r(m_k007232_3, space, offset ^ 1);
724   return m_k007232_3->read(space, offset ^ 1);
729725}
730726
731727WRITE8_MEMBER(wecleman_state::hotchase_3_k007232_w)
732728{
733   k007232_w(m_k007232_3, space, offset ^ 1, data);
729   m_k007232_3->write(space, offset ^ 1, data);
734730}
735731
736732static ADDRESS_MAP_START( hotchase_sound_map, AS_PROGRAM, 8, wecleman_state )
r23667r23668
10401036
10411037MACHINE_RESET_MEMBER(wecleman_state,wecleman)
10421038{
1043   k007232_set_bank( m_k007232, 0, 1 );
1039   m_k007232->set_bank( 0, 1 );
10441040}
10451041
10461042static MACHINE_CONFIG_START( wecleman, wecleman_state )
trunk/src/mame/drivers/ajax.c
r23667r23668
1616#include "cpu/m6809/konami.h"
1717#include "video/konicdev.h"
1818#include "sound/2151intf.h"
19#include "sound/k007232.h"
2019#include "includes/ajax.h"
2120#include "includes/konamipt.h"
2221
r23667r23668
5150   AM_RANGE(0x0000, 0x7fff) AM_ROM                             /* ROM F6 */
5251   AM_RANGE(0x8000, 0x87ff) AM_RAM                             /* RAM 2128SL at D16 */
5352   AM_RANGE(0x9000, 0x9000) AM_WRITE(sound_bank_w)             /* 007232 bankswitch */
54   AM_RANGE(0xa000, 0xa00d) AM_DEVREADWRITE_LEGACY("k007232_1", k007232_r, k007232_w)      /* 007232 registers (chip 1) */
55   AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE_LEGACY("k007232_2", k007232_r, k007232_w)      /* 007232 registers (chip 2) */
53   AM_RANGE(0xa000, 0xa00d) AM_DEVREADWRITE("k007232_1", k007232_device, read, write)      /* 007232 registers (chip 1) */
54   AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("k007232_2", k007232_device, read, write)      /* 007232 registers (chip 2) */
5655   AM_RANGE(0xb80c, 0xb80c) AM_WRITE(k007232_extvol_w)         /* extra volume, goes to the 007232 w/ A11 */
5756                                                /* selecting a different latch for the external port */
5857   AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)       /* YM2151 */
r23667r23668
142141   /* banks # for the 007232 (chip 1) */
143142   bank_A = BIT(data, 1);
144143   bank_B = BIT(data, 0);
145   k007232_set_bank(m_k007232_1, bank_A, bank_B);
144   m_k007232_1->set_bank(bank_A, bank_B);
146145
147146   /* banks # for the 007232 (chip 2) */
148147   bank_A = ((data >> 4) & 0x03);
149148   bank_B = ((data >> 2) & 0x03);
150   k007232_set_bank(m_k007232_2, bank_A, bank_B);
149   m_k007232_2->set_bank(bank_A, bank_B);
151150}
152151
153152WRITE8_MEMBER(ajax_state::volume_callback0)
154153{
155   k007232_set_volume(m_k007232_1, 0, (data >> 4) * 0x11, 0);
156   k007232_set_volume(m_k007232_1, 1, 0, (data & 0x0f) * 0x11);
154   m_k007232_1->set_volume(0, (data >> 4) * 0x11, 0);
155   m_k007232_1->set_volume(1, 0, (data & 0x0f) * 0x11);
157156}
158157
159158WRITE8_MEMBER(ajax_state::k007232_extvol_w)
160159{
161160   /* channel A volume (mono) */
162   k007232_set_volume(m_k007232_2, 0, (data & 0x0f) * 0x11/2, (data & 0x0f) * 0x11/2);
161   m_k007232_2->set_volume(0, (data & 0x0f) * 0x11/2, (data & 0x0f) * 0x11/2);
163162}
164163
165164WRITE8_MEMBER(ajax_state::volume_callback1)
166165{
167166   /* channel B volume/pan */
168   k007232_set_volume(m_k007232_2, 1, (data & 0x0f) * 0x11/2, (data >> 4) * 0x11/2);
167   m_k007232_2->set_volume(1, (data & 0x0f) * 0x11/2, (data >> 4) * 0x11/2);
169168}
170169
171170static const k007232_interface k007232_interface_1 =
trunk/src/mame/drivers/gbusters.c
r23667r23668
1212#include "cpu/m6809/konami.h" /* for the callback and the firq irq definition */
1313#include "video/konicdev.h"
1414#include "sound/2151intf.h"
15#include "sound/k007232.h"
1615#include "includes/konamipt.h"
1716#include "includes/gbusters.h"
1817
r23667r23668
102101{
103102   int bank_B = BIT(data, 2);  /* ?? */
104103   int bank_A = BIT(data, 0);      /* ?? */
105   k007232_set_bank(m_k007232, bank_A, bank_B );
104   m_k007232->set_bank(bank_A, bank_B );
106105
107106#if 0
108107   {
r23667r23668
164163   AM_RANGE(0x0000, 0x7fff) AM_ROM                                                 /* ROM 878h01.rom */
165164   AM_RANGE(0x8000, 0x87ff) AM_RAM                                                 /* RAM */
166165   AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_byte_r)                                 /* soundlatch_byte_r */
167   AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE_LEGACY("k007232", k007232_r, k007232_w)        /* 007232 registers */
166   AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("k007232", k007232_device, read, write)        /* 007232 registers */
168167   AM_RANGE(0xc001, 0xc001) AM_DEVREAD("ymsnd", ym2151_device, status_r)                   /* YM 2151 */
169168   AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)               /* YM 2151 */
170169   AM_RANGE(0xf000, 0xf000) AM_WRITE(gbusters_snd_bankswitch_w)        /* 007232 bankswitch? */
r23667r23668
232231
233232WRITE8_MEMBER(gbusters_state::volume_callback)
234233{
235   k007232_set_volume(m_k007232, 0, (data >> 4) * 0x11, 0);
236   k007232_set_volume(m_k007232, 1, 0, (data & 0x0f) * 0x11);
234   m_k007232->set_volume(0, (data >> 4) * 0x11, 0);
235   m_k007232->set_volume(1, 0, (data & 0x0f) * 0x11);
237236}
238237
239238static const k007232_interface k007232_config =
trunk/src/mame/drivers/thunderx.c
r23667r23668
1717#include "cpu/m6809/konami.h" /* for the callback and the firq irq definition */
1818#include "video/konicdev.h"
1919#include "sound/2151intf.h"
20#include "sound/k007232.h"
2120#include "includes/konamipt.h"
2221#include "includes/thunderx.h"
2322
r23667r23668
364363
365364   int bank_A = (data & 0x03);
366365   int bank_B = ((data >> 2) & 0x03);
367   k007232_set_bank(m_k007232, bank_A, bank_B);
366   m_k007232->set_bank(bank_A, bank_B);
368367}
369368
370369READ8_MEMBER(thunderx_state::k052109_051960_r)
r23667r23668
438437   AM_RANGE(0x0000, 0x7fff) AM_ROM                 /* ROM */
439438   AM_RANGE(0x8000, 0x87ff) AM_RAM                 /* RAM */
440439   AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_byte_r)         /* soundlatch_byte_r */
441   AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE_LEGACY("k007232", k007232_r, k007232_w)        /* 007232 registers */
440   AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("k007232", k007232_device, read, write)        /* 007232 registers */
442441   AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)       /* YM2151 */
443442   AM_RANGE(0xf000, 0xf000) AM_WRITE(scontra_snd_bankswitch_w) /* 007232 bank select */
444443ADDRESS_MAP_END
r23667r23668
574573
575574WRITE8_MEMBER(thunderx_state::volume_callback)
576575{
577   k007232_set_volume(m_k007232, 0, (data >> 4) * 0x11, 0);
578   k007232_set_volume(m_k007232, 1, 0, (data & 0x0f) * 0x11);
576   m_k007232->set_volume(0, (data >> 4) * 0x11, 0);
577   m_k007232->set_volume(1, 0, (data & 0x0f) * 0x11);
579578}
580579
581580static const k007232_interface k007232_config =
trunk/src/mame/drivers/mainevt.c
r23667r23668
2626#include "video/konicdev.h"
2727#include "cpu/m6809/m6809.h"
2828#include "sound/2151intf.h"
29#include "sound/k007232.h"
3029#include "sound/upd7759.h"
3130#include "includes/konamipt.h"
3231#include "includes/mainevt.h"
r23667r23668
107106   /* bits 0-3 select the 007232 banks */
108107   bank_A = (data & 0x3);
109108   bank_B = ((data >> 2) & 0x3);
110   k007232_set_bank(m_k007232, bank_A, bank_B);
109   m_k007232->set_bank(bank_A, bank_B);
111110
112111   /* bits 4-5 select the UPD7759 bank */
113112   upd7759_set_bank_base(m_upd7759, ((data >> 4) & 0x03) * 0x20000);
r23667r23668
122121   /* bits 0-3 select the 007232 banks */
123122   bank_A = (data & 0x3);
124123   bank_B = ((data >> 2) & 0x3);
125   k007232_set_bank(m_k007232, bank_A, bank_B);
124   m_k007232->set_bank(bank_A, bank_B);
126125}
127126
128127READ8_MEMBER(mainevt_state::k052109_051960_r)
r23667r23668
205204   AM_RANGE(0x8000, 0x83ff) AM_RAM
206205   AM_RANGE(0x9000, 0x9000) AM_DEVWRITE_LEGACY("upd", upd7759_port_w)
207206   AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_byte_r)
208   AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE_LEGACY("k007232", k007232_r,k007232_w)
207   AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("k007232", k007232_device, read, write)
209208   AM_RANGE(0xd000, 0xd000) AM_READ(mainevt_sh_busy_r)
210209   AM_RANGE(0xe000, 0xe000) AM_WRITE(mainevt_sh_irqcontrol_w)
211210   AM_RANGE(0xf000, 0xf000) AM_WRITE(mainevt_sh_bankswitch_w)
r23667r23668
215214   AM_RANGE(0x0000, 0x7fff) AM_ROM
216215   AM_RANGE(0x8000, 0x83ff) AM_RAM
217216   AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_byte_r)
218   AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE_LEGACY("k007232", k007232_r,k007232_w)
217   AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("k007232", k007232_device, read, write)
219218   AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym2151_device,read,write)
220219   AM_RANGE(0xe000, 0xe000) AM_WRITE(devstor_sh_irqcontrol_w)
221220   AM_RANGE(0xf000, 0xf000) AM_WRITE(dv_sh_bankswitch_w)
r23667r23668
375374
376375WRITE8_MEMBER(mainevt_state::volume_callback)
377376{
378   k007232_set_volume(m_k007232, 0, (data >> 4) * 0x11, 0);
379   k007232_set_volume(m_k007232, 1, 0, (data & 0x0f) * 0x11);
377   m_k007232->set_volume(0, (data >> 4) * 0x11, 0);
378   m_k007232->set_volume(1, 0, (data & 0x0f) * 0x11);
380379}
381380
382381static const k007232_interface k007232_config =
trunk/src/mame/drivers/chqflag.c
r23667r23668
1717#include "cpu/m6809/konami.h"
1818#include "video/konicdev.h"
1919#include "sound/2151intf.h"
20#include "sound/k007232.h"
2120#include "includes/chqflag.h"
2221#include "includes/konamipt.h"
2322
r23667r23668
169168   /* banks # for the 007232 (chip 1) */
170169   bank_A = ((data >> 4) & 0x03);
171170   bank_B = ((data >> 6) & 0x03);
172   k007232_set_bank(m_k007232_1, bank_A, bank_B);
171   m_k007232_1->set_bank(bank_A, bank_B);
173172
174173   /* banks # for the 007232 (chip 2) */
175174   bank_A = ((data >> 0) & 0x03);
176175   bank_B = ((data >> 2) & 0x03);
177   k007232_set_bank(m_k007232_2, bank_A, bank_B);
176   m_k007232_2->set_bank(bank_A, bank_B);
178177}
179178
180179static ADDRESS_MAP_START( chqflag_sound_map, AS_PROGRAM, 8, chqflag_state )
181180   AM_RANGE(0x0000, 0x7fff) AM_ROM /* ROM */
182181   AM_RANGE(0x8000, 0x87ff) AM_RAM /* RAM */
183182   AM_RANGE(0x9000, 0x9000) AM_WRITE(k007232_bankswitch_w) /* 007232 bankswitch */
184   AM_RANGE(0xa000, 0xa00d) AM_DEVREADWRITE_LEGACY("k007232_1", k007232_r, k007232_w)  /* 007232 (chip 1) */
183   AM_RANGE(0xa000, 0xa00d) AM_DEVREADWRITE("k007232_1", k007232_device, read, write)  /* 007232 (chip 1) */
185184   AM_RANGE(0xa01c, 0xa01c) AM_WRITE(k007232_extvolume_w)  /* extra volume, goes to the 007232 w/ A11 */
186   AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE_LEGACY("k007232_2", k007232_r, k007232_w)  /* 007232 (chip 2) */
185   AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("k007232_2", k007232_device, read, write)  /* 007232 (chip 2) */
187186   AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)   /* YM2151 */
188187   AM_RANGE(0xd000, 0xd000) AM_READ(soundlatch_byte_r)         /* soundlatch_byte_r */
189188   AM_RANGE(0xe000, 0xe000) AM_READ(soundlatch2_byte_r)         /* engine sound volume */
r23667r23668
257256
258257WRITE8_MEMBER(chqflag_state::volume_callback0)
259258{
260   k007232_set_volume(m_k007232_1, 0, (data & 0x0f) * 0x11, 0);
261   k007232_set_volume(m_k007232_1, 1, 0, (data >> 4) * 0x11);
259   m_k007232_1->set_volume(0, (data & 0x0f) * 0x11, 0);
260   m_k007232_1->set_volume(1, 0, (data >> 4) * 0x11);
262261}
263262
264263WRITE8_MEMBER(chqflag_state::k007232_extvolume_w)
265264{
266   k007232_set_volume(m_k007232_2, 1, (data & 0x0f) * 0x11/2, (data >> 4) * 0x11/2);
265   m_k007232_2->set_volume(1, (data & 0x0f) * 0x11/2, (data >> 4) * 0x11/2);
267266}
268267
269268WRITE8_MEMBER(chqflag_state::volume_callback1)
270269{
271   k007232_set_volume(m_k007232_2, 0, (data & 0x0f) * 0x11/2, (data >> 4) * 0x11/2);
270   m_k007232_2->set_volume(0, (data & 0x0f) * 0x11/2, (data >> 4) * 0x11/2);
272271}
273272
274273static const k007232_interface k007232_interface_1 =
trunk/src/mame/drivers/twin16.c
r23667r23668
4747#include "cpu/m68000/m68000.h"
4848#include "cpu/z80/z80.h"
4949#include "sound/2151intf.h"
50#include "sound/k007232.h"
5150#include "sound/upd7759.h"
5251#include "machine/nvram.h"
5352#include "includes/twin16.h"
r23667r23668
224223   AM_RANGE(0x8000, 0x8fff) AM_RAM
225224   AM_RANGE(0x9000, 0x9000) AM_WRITE(twin16_upd_reset_w)
226225   AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_byte_r)
227   AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE_LEGACY("k007232", k007232_r, k007232_w)
226   AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("k007232", k007232_device, read, write)
228227   AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
229228   AM_RANGE(0xd000, 0xd000) AM_DEVWRITE_LEGACY("upd", upd7759_port_w)
230229   AM_RANGE(0xe000, 0xe000) AM_WRITE(twin16_upd_start_w)
r23667r23668
670669
671670WRITE8_MEMBER(twin16_state::volume_callback)
672671{
673   k007232_set_volume(m_k007232,0,(data >> 4) * 0x11,0);
674   k007232_set_volume(m_k007232,1,0,(data & 0x0f) * 0x11);
672   m_k007232->set_volume(0,(data >> 4) * 0x11,0);
673   m_k007232->set_volume(1,0,(data & 0x0f) * 0x11);
675674}
676675
677676static const k007232_interface k007232_config =
trunk/src/mame/includes/bishi.h
r23667r23668
33    Bishi Bashi Champ Mini Game Senshuken
44
55*************************************************************************/
6#include "sound/k007232.h"
76
87#define CPU_CLOCK       (XTAL_24MHz / 2)        /* 68000 clock */
98#define SOUND_CLOCK     XTAL_16_9344MHz     /* YMZ280 clock */
r23667r23668
1514      : driver_device(mconfig, type, tag),
1615      m_maincpu(*this, "maincpu"),
1716      m_audiocpu(*this, "audiocpu"),
18      m_k007232(*this, "k007232"),
1917      m_k056832(*this, "k056832"),
2018      m_k054338(*this, "k054338"),
2119      m_k055555(*this, "k055555") { }
r23667r23668
3432   /* devices */
3533   required_device<cpu_device> m_maincpu;
3634   optional_device<cpu_device> m_audiocpu;
37   optional_device<k007232_device> m_k007232;
3835   required_device<k056832_device> m_k056832;
3936   required_device<k054338_device> m_k054338;
4037   required_device<k055555_device> m_k055555;
trunk/src/emu/sound/k007232.c
r23667r23668
2626#include "emu.h"
2727#include "k007232.h"
2828
29
30#define  KDAC_A_PCM_MAX    (2)      /* Channels per chip */
31
32
33struct KDAC_A_PCM
34{
35   UINT8           vol[KDAC_A_PCM_MAX][2]; /* volume for the left and right channel */
36   UINT32          addr[KDAC_A_PCM_MAX];
37   UINT32          start[KDAC_A_PCM_MAX];
38   UINT32          step[KDAC_A_PCM_MAX];
39   UINT32          bank[KDAC_A_PCM_MAX];
40   int             play[KDAC_A_PCM_MAX];
41
42   UINT8           wreg[0x10]; /* write data */
43   UINT8 *         pcmbuf[2];  /* Channel A & B pointers */
44
45   UINT32          clock;          /* chip clock */
46   UINT32          pcmlimit;
47
48   sound_stream *  stream;
49   const k007232_interface *intf;
50   UINT32          fncode[0x200];
51   devcb_resolved_write8 portwritehandler;
52};
53
54
5529#define   BASE_SHIFT    (12)
5630
5731
58INLINE KDAC_A_PCM *get_safe_token(device_t *device)
59{
60   assert(device != NULL);
61   assert(device->type() == K007232);
62   return (KDAC_A_PCM *)downcast<k007232_device *>(device)->token();
63}
64
65
6632#if 0
6733static const int kdac_note[] = {
6834   261.63/8, 277.18/8,
r23667r23668
175141#endif
176142
177143/*************************************************************/
178static void KDAC_A_make_fncode( KDAC_A_PCM *info ){
179   int i;
144
145
146const device_type K007232 = &device_creator<k007232_device>;
147
148k007232_device::k007232_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
149   : device_t(mconfig, K007232, "K007232", tag, owner, clock),
150      device_sound_interface(mconfig, *this)
151{
152   
153}
154
155//-------------------------------------------------
156//  device_config_complete - perform any
157//  operations now that the configuration is
158//  complete
159//-------------------------------------------------
160
161void k007232_device::device_config_complete()
162{
163   // inherit a copy of the static data
164   const k007232_interface *intf = reinterpret_cast<const k007232_interface *>(static_config());
165   if (intf != NULL)
166   *static_cast<k007232_interface *>(this) = *intf;
167
168   // or initialize to defaults if none provided
169   else
170   {
171   memset(&m_portwritehandler, 0, sizeof(m_portwritehandler));
172   }
173}
174
175//-------------------------------------------------
176//  device_start - device-specific startup
177//-------------------------------------------------
178
179void k007232_device::device_start()
180{
181   /* Set up the chips */
182   m_pcmbuf[0] = *region();
183   m_pcmbuf[1] = *region();
184   m_pcmlimit  = region()->bytes();
185
186   m_portwritehandler_func.resolve(m_portwritehandler,*this);
187
188   for (int i = 0; i < KDAC_A_PCM_MAX; i++)
189   {
190      m_addr[i] = 0;
191      m_start[i] = 0;
192      m_step[i] = 0;
193      m_play[i] = 0;
194      m_bank[i] = 0;
195   }
196   m_vol[0][0] = 255;  /* channel A output to output A */
197   m_vol[0][1] = 0;
198   m_vol[1][0] = 0;
199   m_vol[1][1] = 255;  /* channel B output to output B */
200
201   for (int i = 0; i < 0x10; i++) 
202      m_wreg[i] = 0;
203
204   m_stream = machine().sound().stream_alloc(*this, 0 , 2, clock()/128, this);
205
206   KDAC_A_make_fncode();
207
208   save_item(NAME(m_vol));
209   save_item(NAME(m_addr));
210   save_item(NAME(m_start));
211   save_item(NAME(m_step));
212   save_item(NAME(m_bank));
213   save_item(NAME(m_play));
214   save_item(NAME(m_wreg));
215}
216
217void k007232_device::KDAC_A_make_fncode()
218{
180219#if 0
181220   int i, j, k;
182221   float fn;
r23667r23668
206245#endif
207246
208247#else
209   for( i = 0; i < 0x200; i++ ){
248   int i;
249   for( i = 0; i < 0x200; i++ )
250   {
210251   //fncode[i] = (0x200 * 55) / (0x200 - i);
211   info->fncode[i] = (32 << BASE_SHIFT) / (0x200 - i);
212//  info->fncode[i] = ((0x200 * 55.2 / 880) / (0x200 - i));
252   m_fncode[i] = (32 << BASE_SHIFT) / (0x200 - i);
253//  m_fncode[i] = ((0x200 * 55.2 / 880) / (0x200 - i));
213254   // = 512 * 55.2 / 220 / (512 - i) = 128 / (512 - i)
214255   //    logerror("2 : fncode[%04x] = %.2f\n", i, fncode[i] );
215256   }
r23667r23668
219260
220261
221262/************************************************/
222/*    Konami PCM update                         */
223/************************************************/
224
225static STREAM_UPDATE( KDAC_A_update )
226{
227   KDAC_A_PCM *info = (KDAC_A_PCM *)param;
228   int i;
229
230   memset(outputs[0],0,samples * sizeof(*outputs[0]));
231   memset(outputs[1],0,samples * sizeof(*outputs[1]));
232
233   for( i = 0; i < KDAC_A_PCM_MAX; i++ )
234   {
235      if (info->play[i])
236   {
237      int volA,volB,j,out;
238      unsigned int addr, old_addr;
239      //int cen;
240
241      /**** PCM setup ****/
242      addr = info->start[i] + ((info->addr[i]>>BASE_SHIFT)&0x000fffff);
243      volA = info->vol[i][0] * 2;
244      volB = info->vol[i][1] * 2;
245#if 0
246      cen = (volA + volB) / 2;
247      volA = (volA + cen) < 0x1fe ? (volA + cen) : 0x1fe;
248      volB = (volB + cen) < 0x1fe ? (volB + cen) : 0x1fe;
249#endif
250
251      for( j = 0; j < samples; j++ )
252      {
253         old_addr = addr;
254         addr = info->start[i] + ((info->addr[i]>>BASE_SHIFT)&0x000fffff);
255         while (old_addr <= addr)
256      {
257         if( (info->pcmbuf[i][old_addr] & 0x80) || old_addr >= info->pcmlimit )
258         {
259            /* end of sample */
260
261            if( info->wreg[0x0d]&(1<<i) )
262         {
263            /* loop to the beginning */
264            info->start[i] =
265            ((((unsigned int)info->wreg[i*0x06 + 0x04]<<16)&0x00010000) |
266               (((unsigned int)info->wreg[i*0x06 + 0x03]<< 8)&0x0000ff00) |
267               (((unsigned int)info->wreg[i*0x06 + 0x02]    )&0x000000ff) |
268               info->bank[i]);
269            addr = info->start[i];
270            info->addr[i] = 0;
271            old_addr = addr; /* skip loop */
272         }
273            else
274         {
275            /* stop sample */
276            info->play[i] = 0;
277         }
278            break;
279         }
280
281         old_addr++;
282      }
283
284         if (info->play[i] == 0)
285      break;
286
287         info->addr[i] += info->step[i];
288
289         out = (info->pcmbuf[i][addr] & 0x7f) - 0x40;
290
291         outputs[0][j] += out * volA;
292         outputs[1][j] += out * volB;
293      }
294   }
295   }
296}
297
298
299/************************************************/
300/*    Konami PCM start                          */
301/************************************************/
302static DEVICE_START( k007232 )
303{
304   static const k007232_interface defintrf = { DEVCB_NULL };
305   int i;
306   KDAC_A_PCM *info = get_safe_token(device);
307
308   info->intf = (device->static_config() != NULL) ? (const k007232_interface *)device->static_config() : &defintrf;
309
310   /* Set up the chips */
311
312   info->pcmbuf[0] = *device->region();
313   info->pcmbuf[1] = *device->region();
314   info->pcmlimit  = device->region()->bytes();
315
316   info->clock = device->clock();
317
318   info->portwritehandler.resolve(info->intf->portwritehandler,*device);
319
320   for( i = 0; i < KDAC_A_PCM_MAX; i++ )
321   {
322      info->start[i] = 0;
323      info->step[i] = 0;
324      info->play[i] = 0;
325      info->bank[i] = 0;
326   }
327   info->vol[0][0] = 255;  /* channel A output to output A */
328   info->vol[0][1] = 0;
329   info->vol[1][0] = 0;
330   info->vol[1][1] = 255;  /* channel B output to output B */
331
332   for( i = 0; i < 0x10; i++ )  info->wreg[i] = 0;
333
334   info->stream = device->machine().sound().stream_alloc(*device,0,2,device->clock()/128,info,KDAC_A_update);
335
336   KDAC_A_make_fncode(info);
337}
338
339/************************************************/
340263/*    Konami PCM write register                 */
341264/************************************************/
342WRITE8_DEVICE_HANDLER( k007232_w )
265WRITE8_MEMBER( k007232_device::write )
343266{
344   KDAC_A_PCM *info = get_safe_token(device);
345267   int r = offset;
346268   int v = data;
347269
348   info->stream->update();
270   m_stream->update();
349271
350   info->wreg[r] = v;          /* stock write data */
272   m_wreg[r] = v;          /* stock write data */
351273
352274   if (r == 0x0c){
353275   /* external port, usually volume control */
354   if (!info->portwritehandler.isnull()) info->portwritehandler(0,v);
276   if (!m_portwritehandler_func.isnull()) m_portwritehandler_func(0,v);
355277   return;
356278   }
357279   else if( r == 0x0d ){
r23667r23668
372294   case 0x01:
373295   {
374296            /**** address step ****/
375      int idx = (((((unsigned int)info->wreg[reg_port*0x06 + 0x01])<<8)&0x0100) | (((unsigned int)info->wreg[reg_port*0x06 + 0x00])&0x00ff));
297      int idx = (((((unsigned int)m_wreg[reg_port*0x06 + 0x01])<<8)&0x0100) | (((unsigned int)m_wreg[reg_port*0x06 + 0x00])&0x00ff));
376298#if 0
377299      if( !reg_port && r == 1 )
378300   logerror("%04x\n" ,idx );
379301#endif
380302
381      info->step[reg_port] = info->fncode[idx];
303      m_step[reg_port] = m_fncode[idx];
382304      break;
383305   }
384306   case 0x02:
r23667r23668
387309      break;
388310   case 0x05:
389311            /**** start address ****/
390      info->start[reg_port] =
391   ((((unsigned int)info->wreg[reg_port*0x06 + 0x04]<<16)&0x00010000) |
392      (((unsigned int)info->wreg[reg_port*0x06 + 0x03]<< 8)&0x0000ff00) |
393      (((unsigned int)info->wreg[reg_port*0x06 + 0x02]    )&0x000000ff) |
394      info->bank[reg_port]);
395      if (info->start[reg_port] < info->pcmlimit ){
396   info->play[reg_port] = 1;
397   info->addr[reg_port] = 0;
312      m_start[reg_port] =
313   ((((unsigned int)m_wreg[reg_port*0x06 + 0x04]<<16)&0x00010000) |
314      (((unsigned int)m_wreg[reg_port*0x06 + 0x03]<< 8)&0x0000ff00) |
315      (((unsigned int)m_wreg[reg_port*0x06 + 0x02]    )&0x000000ff) |
316      m_bank[reg_port]);
317      if (m_start[reg_port] < m_pcmlimit ){
318   m_play[reg_port] = 1;
319   m_addr[reg_port] = 0;
398320      }
399321      break;
400322   }
r23667r23668
404326/************************************************/
405327/*    Konami PCM read register                  */
406328/************************************************/
407READ8_DEVICE_HANDLER( k007232_r )
329READ8_MEMBER( k007232_device::read )
408330{
409   KDAC_A_PCM *info = get_safe_token(device);
410331   int r = offset;
411332   int  ch = 0;
412333
r23667r23668
414335   ch = r/0x0006;
415336   r  = ch * 0x0006;
416337
417   info->start[ch] =
418      ((((unsigned int)info->wreg[r + 0x04]<<16)&0x00010000) |
419      (((unsigned int)info->wreg[r + 0x03]<< 8)&0x0000ff00) |
420      (((unsigned int)info->wreg[r + 0x02]    )&0x000000ff) |
421      info->bank[ch]);
338   m_start[ch] =
339      ((((unsigned int)m_wreg[r + 0x04]<<16)&0x00010000) |
340      (((unsigned int)m_wreg[r + 0x03]<< 8)&0x0000ff00) |
341      (((unsigned int)m_wreg[r + 0x02]    )&0x000000ff) |
342      m_bank[ch]);
422343
423   if (info->start[ch] <  info->pcmlimit ){
424      info->play[ch] = 1;
425      info->addr[ch] = 0;
344   if (m_start[ch] <  m_pcmlimit ){
345      m_play[ch] = 1;
346      m_addr[ch] = 0;
426347   }
427348   }
428349   return 0;
r23667r23668
430351
431352/*****************************************************************************/
432353
433void k007232_set_volume(device_t *device,int channel,int volumeA,int volumeB)
354void k007232_device::set_volume(int channel,int volumeA,int volumeB)
434355{
435   KDAC_A_PCM *info = get_safe_token(device);
436   info->vol[channel][0] = volumeA;
437   info->vol[channel][1] = volumeB;
356   m_vol[channel][0] = volumeA;
357   m_vol[channel][1] = volumeB;
438358}
439359
440void k007232_set_bank( device_t *device, int chABank, int chBBank )
360void k007232_device::set_bank(int chABank, int chBBank )
441361{
442   KDAC_A_PCM *info = get_safe_token(device);
443   info->bank[0] = chABank<<17;
444   info->bank[1] = chBBank<<17;
362   m_bank[0] = chABank<<17;
363   m_bank[1] = chBBank<<17;
445364}
446365
447366/*****************************************************************************/
448367
449const device_type K007232 = &device_creator<k007232_device>;
450368
451k007232_device::k007232_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
452   : device_t(mconfig, K007232, "K007232", tag, owner, clock),
453      device_sound_interface(mconfig, *this)
454{
455   m_token = global_alloc_clear(KDAC_A_PCM);
456}
457
458369//-------------------------------------------------
459//  device_config_complete - perform any
460//  operations now that the configuration is
461//  complete
370//  sound_stream_update - handle a stream update
462371//-------------------------------------------------
463372
464void k007232_device::device_config_complete()
373void k007232_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples)
465374{
466}
375   int i;
467376
468//-------------------------------------------------
469//  device_start - device-specific startup
470//-------------------------------------------------
377   memset(outputs[0],0,samples * sizeof(*outputs[0]));
378   memset(outputs[1],0,samples * sizeof(*outputs[1]));
471379
472void k007232_device::device_start()
473{
474   DEVICE_START_NAME( k007232 )(this);
475}
380   for( i = 0; i < KDAC_A_PCM_MAX; i++ )
381   {
382      if (m_play[i])
383   {
384      int volA,volB,j,out;
385      unsigned int addr, old_addr;
386      //int cen;
476387
477//-------------------------------------------------
478//  sound_stream_update - handle a stream update
479//-------------------------------------------------
388      /**** PCM setup ****/
389      addr = m_start[i] + ((m_addr[i]>>BASE_SHIFT)&0x000fffff);
390      volA = m_vol[i][0] * 2;
391      volB = m_vol[i][1] * 2;
392#if 0
393      cen = (volA + volB) / 2;
394      volA = (volA + cen) < 0x1fe ? (volA + cen) : 0x1fe;
395      volB = (volB + cen) < 0x1fe ? (volB + cen) : 0x1fe;
396#endif
480397
481void k007232_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples)
482{
483   // should never get here
484   fatalerror("sound_stream_update called; not applicable to legacy sound devices\n");
398      for( j = 0; j < samples; j++ )
399      {
400         old_addr = addr;
401         addr = m_start[i] + ((m_addr[i]>>BASE_SHIFT)&0x000fffff);
402         while (old_addr <= addr)
403      {
404         if( (m_pcmbuf[i][old_addr] & 0x80) || old_addr >= m_pcmlimit )
405         {
406            /* end of sample */
407
408            if( m_wreg[0x0d]&(1<<i) )
409         {
410            /* loop to the beginning */
411            m_start[i] =
412            ((((unsigned int)m_wreg[i*0x06 + 0x04]<<16)&0x00010000) |
413               (((unsigned int)m_wreg[i*0x06 + 0x03]<< 8)&0x0000ff00) |
414               (((unsigned int)m_wreg[i*0x06 + 0x02]    )&0x000000ff) |
415               m_bank[i]);
416            addr = m_start[i];
417            m_addr[i] = 0;
418            old_addr = addr; /* skip loop */
419         }
420            else
421         {
422            /* stop sample */
423            m_play[i] = 0;
424         }
425            break;
426         }
427
428         old_addr++;
429      }
430
431         if (m_play[i] == 0)
432      break;
433
434         m_addr[i] += m_step[i];
435
436         out = (m_pcmbuf[i][addr] & 0x7f) - 0x40;
437
438         outputs[0][j] += out * volA;
439         outputs[1][j] += out * volB;
440      }
441   }
442   }
485443}
trunk/src/emu/sound/k007232.h
r23667r23668
77#ifndef __K007232_H__
88#define __K007232_H__
99
10#include "devlegcy.h"
10#define KDAC_A_PCM_MAX    (2)      /* Channels per chip */
1111
1212struct k007232_interface
1313{
14   devcb_write8 portwritehandler;
14   devcb_write8 m_portwritehandler;
1515};
1616
17DECLARE_WRITE8_DEVICE_HANDLER( k007232_w );
18DECLARE_READ8_DEVICE_HANDLER( k007232_r );
17class k007232_device : public device_t,
18                           public device_sound_interface,
19                           public k007232_interface
20{
21public:
22   k007232_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
23   ~k007232_device() {}
1924
20void k007232_set_bank( device_t *device, int chABank, int chBBank );
21
22/*
25   DECLARE_WRITE8_MEMBER( write );
26   DECLARE_READ8_MEMBER( read );
27   
28   /*
2329  The 007232 has two channels and produces two outputs. The volume control
2430  is external, however to make it easier to use we handle that inside the
2531  emulation. You can control volume and panning: for each of the two channels
2632  you can set the volume of the two outputs. If panning is not required,
2733  then volumeB will be 0 for channel 0, and volumeA will be 0 for channel 1.
2834  Volume is in the range 0-255.
29*/
30void k007232_set_volume(device_t *device,int channel,int volumeA,int volumeB);
31
32class k007232_device : public device_t,
33                           public device_sound_interface
34{
35public:
36   k007232_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
37   ~k007232_device() { global_free(m_token); }
38
39   // access to legacy token
40   void *token() const { assert(m_token != NULL); return m_token; }
35   */
36   void set_volume(int channel,int volumeA,int volumeB);
37   
38   void set_bank( int chABank, int chBBank );
39   
4140protected:
4241   // device-level overrides
4342   virtual void device_config_complete();
r23667r23668
4544
4645   // sound stream update overrides
4746   virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples);
47   
48   void KDAC_A_make_fncode();
49
4850private:
4951   // internal state
50   void *m_token;
52   UINT8           m_vol[KDAC_A_PCM_MAX][2]; /* volume for the left and right channel */
53   UINT32          m_addr[KDAC_A_PCM_MAX];
54   UINT32          m_start[KDAC_A_PCM_MAX];
55   UINT32          m_step[KDAC_A_PCM_MAX];
56   UINT32          m_bank[KDAC_A_PCM_MAX];
57   int             m_play[KDAC_A_PCM_MAX];
58
59   UINT8           m_wreg[0x10]; /* write data */
60   UINT8 *         m_pcmbuf[2];  /* Channel A & B pointers */
61
62   UINT32          m_pcmlimit;
63
64   sound_stream *  m_stream;
65   UINT32          m_fncode[0x200];
66   devcb_resolved_write8 m_portwritehandler_func;
5167};
5268
5369extern const device_type K007232;

Previous 199869 Revisions Next


© 1997-2024 The MAME Team