@@ -673,7 +673,6 @@ d23f=input port 1 value
673
673
#include " machine/gen_latch.h"
674
674
#include " machine/upd4701.h"
675
675
#include " sound/dac.h"
676
- #include " sound/samples.h"
677
676
#include " sound/ymopm.h"
678
677
#include " sound/ymopn.h"
679
678
@@ -825,10 +824,10 @@ class kageki_state : public insectx_state
825
824
public:
826
825
kageki_state (const machine_config &mconfig, device_type type, const char *tag)
827
826
: insectx_state(mconfig, type, tag)
828
- , m_samples(*this , " samples" )
829
827
, m_dswa(*this , " DSWA" )
830
828
, m_dswb(*this , " DSWB" )
831
829
, m_csport_sel(0 )
830
+ , m_scpu(*this , " samples" )
832
831
{ }
833
832
834
833
void kageki (machine_config &config) ATTR_COLD;
@@ -847,20 +846,15 @@ class kageki_state : public insectx_state
847
846
uint8_t csport_r ();
848
847
void csport_w (uint8_t data);
849
848
850
- SAMPLES_START_CB_MEMBER (init_samples);
851
-
852
849
void kageki_sub_map (address_map &map) ATTR_COLD;
853
-
854
- required_device<samples_device> m_samples ;
850
+ void scpu_map (address_map& map) ATTR_COLD;
851
+ void scpu_io_map (address_map& map) ATTR_COLD ;
855
852
856
853
required_ioport m_dswa;
857
854
required_ioport m_dswb;
858
855
859
- // sound-related
860
- std::unique_ptr<int16_t []> m_sampledata[MAX_SAMPLES];
861
- int m_samplesize[MAX_SAMPLES]{};
862
-
863
856
int m_csport_sel;
857
+ required_device<cpu_device> m_scpu;
864
858
};
865
859
866
860
@@ -1422,46 +1416,14 @@ void kabukiz_state::sound_bank_w(uint8_t data)
1422
1416
}
1423
1417
1424
1418
1425
- SAMPLES_START_CB_MEMBER (kageki_state::init_samples)
1426
- {
1427
- uint8_t *src = memregion (" samples" )->base () + 0x0090 ;
1428
- for (int i = 0 ; i < MAX_SAMPLES; i++)
1429
- {
1430
- int start = (src[(i * 2 ) + 1 ] * 256 ) + src[(i * 2 )];
1431
- uint8_t *scan = &src[start];
1432
- int size = 0 ;
1433
-
1434
- // check sample length
1435
- while (*scan++ != 0x00 )
1436
- size++;
1437
-
1438
- /* 2009-11 FP: should these be saved? */
1439
- m_sampledata[i] = std::make_unique<int16_t []>(size);
1440
- m_samplesize[i] = size;
1441
-
1442
- if (start < 0x100 )
1443
- start = size = 0 ;
1444
-
1445
- // signed 8-bit sample to unsigned 8-bit sample convert
1446
- int16_t *dest = m_sampledata[i].get ();
1447
- scan = &src[start];
1448
- for (int n = 0 ; n < size; n++)
1449
- {
1450
- *dest++ = (int8_t )((*scan++) ^ 0x80 ) * 256 ;
1451
- }
1452
- // logerror("samples num:%02X ofs:%04X lng:%04X\n", i, start, size);
1453
- }
1454
- }
1455
-
1456
-
1457
1419
uint8_t kageki_state::csport_r ()
1458
1420
{
1459
1421
int dsw, dsw1, dsw2;
1460
1422
1461
1423
dsw1 = m_dswa->read ();
1462
1424
dsw2 = m_dswb->read ();
1463
1425
1464
- switch (m_csport_sel)
1426
+ switch (m_csport_sel & 3 )
1465
1427
{
1466
1428
case 0x00 : // DSW2 5,1 / DSW1 5,1
1467
1429
dsw = (((dsw2 & 0x10 ) >> 1 ) | ((dsw2 & 0x01 ) << 2 ) | ((dsw1 & 0x10 ) >> 3 ) | ((dsw1 & 0x01 ) >> 0 ));
@@ -1485,26 +1447,10 @@ uint8_t kageki_state::csport_r()
1485
1447
1486
1448
void kageki_state::csport_w (uint8_t data)
1487
1449
{
1488
- if (data > 0x3f )
1489
- {
1490
- // read dipsw port
1491
- m_csport_sel = (data & 0x03 );
1492
- }
1493
- else
1494
- {
1495
- if (data < MAX_SAMPLES)
1496
- {
1497
- // play samples
1498
- m_samples->start_raw (0 , m_sampledata[data].get (), m_samplesize[data], 7000 );
1499
- LOG (" VOICE:%02X PLAY" , data);
1500
- }
1501
- else
1502
- {
1503
- // stop samples
1504
- m_samples->stop (0 );
1505
- LOG (" VOICE:%02X STOP" , data);
1506
- }
1507
- }
1450
+ m_csport_sel = data;
1451
+
1452
+ if (!BIT (data, 6 ))
1453
+ m_scpu->pulse_input_line (INPUT_LINE_NMI, attotime::zero);
1508
1454
}
1509
1455
1510
1456
void insectx_state::prompal_main_map (address_map &map)
@@ -1590,6 +1536,18 @@ void kageki_state::kageki_sub_map(address_map &map)
1590
1536
map (0xc002 , 0xc002 ).portr (" IN2" );
1591
1537
}
1592
1538
1539
+ void kageki_state::scpu_map (address_map& map)
1540
+ {
1541
+ map (0x0000 , 0xffff ).rom ();
1542
+ }
1543
+
1544
+ void kageki_state::scpu_io_map (address_map& map)
1545
+ {
1546
+ map.global_mask (0xff );
1547
+ map (0x00 , 0xff ).w (" dac" , FUNC (dac_byte_interface::data_w));
1548
+ map (0x00 , 0xff ).lr8 (NAME ([this ]() { return m_csport_sel; }));
1549
+ }
1550
+
1593
1551
void insectx_state::insectx_sub_map (address_map &map)
1594
1552
{
1595
1553
base_sub_map (map);
@@ -2415,6 +2373,10 @@ void kageki_state::kageki(machine_config &config)
2415
2373
/* basic machine hardware */
2416
2374
m_subcpu->set_addrmap (AS_PROGRAM, &kageki_state::kageki_sub_map);
2417
2375
2376
+ Z80 (config, m_scpu, XTAL (12'000'000 ) / 4 );
2377
+ m_scpu->set_addrmap (AS_PROGRAM, &kageki_state::scpu_map);
2378
+ m_scpu->set_addrmap (AS_IO, &kageki_state::scpu_io_map);
2379
+
2418
2380
/* sound hardware */
2419
2381
ym2203_device &ymsnd (YM2203 (config, " ymsnd" , XTAL (12'000'000 )/4 )); /* verified on pcb */
2420
2382
ymsnd.port_a_read_callback ().set (FUNC (kageki_state::csport_r));
@@ -2424,10 +2386,7 @@ void kageki_state::kageki(machine_config &config)
2424
2386
ymsnd.add_route (2 , " speaker" , 0.15 );
2425
2387
ymsnd.add_route (3 , " speaker" , 0.35 );
2426
2388
2427
- SAMPLES (config, m_samples);
2428
- m_samples->set_channels (1 );
2429
- m_samples->set_samples_start_callback (FUNC (kageki_state::init_samples));
2430
- m_samples->add_route (ALL_OUTPUTS, " speaker" , 1.0 );
2389
+ DAC_8BIT_R2R (config, " dac" , 0 ).add_route (ALL_OUTPUTS, " speaker" , 0.5 ); // HA17408P R2R DAC, TODO: check levels
2431
2390
}
2432
2391
2433
2392
void tnzsb_state::tnzsb (machine_config &config)
0 commit comments