mirror of
https://github.com/holub/mame
synced 2025-04-19 15:11:37 +03:00
bus/cbus: initial hookup for PC-98 Sound Blaster 16
This commit is contained in:
parent
fe971256dc
commit
be99bd1e17
@ -5252,6 +5252,8 @@ if (BUSES["CBUS"]~=null) then
|
||||
files {
|
||||
MAME_DIR .. "src/devices/bus/cbus/amd98.cpp",
|
||||
MAME_DIR .. "src/devices/bus/cbus/amd98.h",
|
||||
MAME_DIR .. "src/devices/bus/cbus/mpu_pc98.cpp",
|
||||
MAME_DIR .. "src/devices/bus/cbus/mpu_pc98.h",
|
||||
MAME_DIR .. "src/devices/bus/cbus/pc9801_26.cpp",
|
||||
MAME_DIR .. "src/devices/bus/cbus/pc9801_26.h",
|
||||
MAME_DIR .. "src/devices/bus/cbus/pc9801_55.cpp",
|
||||
@ -5260,12 +5262,12 @@ if (BUSES["CBUS"]~=null) then
|
||||
MAME_DIR .. "src/devices/bus/cbus/pc9801_86.h",
|
||||
MAME_DIR .. "src/devices/bus/cbus/pc9801_118.cpp",
|
||||
MAME_DIR .. "src/devices/bus/cbus/pc9801_118.h",
|
||||
MAME_DIR .. "src/devices/bus/cbus/pc9801_snd.cpp",
|
||||
MAME_DIR .. "src/devices/bus/cbus/pc9801_snd.h",
|
||||
MAME_DIR .. "src/devices/bus/cbus/mpu_pc98.cpp",
|
||||
MAME_DIR .. "src/devices/bus/cbus/mpu_pc98.h",
|
||||
MAME_DIR .. "src/devices/bus/cbus/pc9801_cbus.cpp",
|
||||
MAME_DIR .. "src/devices/bus/cbus/pc9801_cbus.h",
|
||||
MAME_DIR .. "src/devices/bus/cbus/pc9801_snd.cpp",
|
||||
MAME_DIR .. "src/devices/bus/cbus/pc9801_snd.h",
|
||||
MAME_DIR .. "src/devices/bus/cbus/sb16_ct2720.cpp",
|
||||
MAME_DIR .. "src/devices/bus/cbus/sb16_ct2720.h",
|
||||
}
|
||||
end
|
||||
|
||||
|
@ -12,7 +12,7 @@
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> isa8_mpu401_device
|
||||
// ======================> mpu_pc98_device
|
||||
|
||||
class mpu_pc98_device : public device_t
|
||||
{
|
||||
|
101
src/devices/bus/cbus/sb16_ct2720.cpp
Normal file
101
src/devices/bus/cbus/sb16_ct2720.cpp
Normal file
@ -0,0 +1,101 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Angelo Salese
|
||||
/**************************************************************************************************
|
||||
|
||||
Creative Sound Blaster 16 for PC-9800 Series (board name: CT2720)
|
||||
|
||||
References:
|
||||
- https://j02.nobody.jp/jto98/n_desk_sound/ct2720.htm
|
||||
- http://retropc.net/yasuma/V2/PC/SOUND/ct2720.html
|
||||
|
||||
TODO:
|
||||
- Optional YM2203 (+ ROM socket), PC-9801-26K equivalent fallback;
|
||||
- Game port;
|
||||
- MIDI;
|
||||
- CT1741 (DSP);
|
||||
- CT1745 (Mixer);
|
||||
- CD-Rom interface/CD-In;
|
||||
- Mic-In/Line-In;
|
||||
- Configuration dips;
|
||||
|
||||
**************************************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "bus/cbus/sb16_ct2720.h"
|
||||
#include "speaker.h"
|
||||
|
||||
|
||||
DEFINE_DEVICE_TYPE(SB16_CT2720, sb16_ct2720_device, "sb16_ct2720", "Creative Sound Blaster 16 CT-2720")
|
||||
|
||||
sb16_ct2720_device::sb16_ct2720_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, SB16_CT2720, tag, owner, clock)
|
||||
, m_bus(*this, DEVICE_SELF_OWNER)
|
||||
, m_opl3(*this, "opl3")
|
||||
, m_ldac(*this, "ldac")
|
||||
, m_rdac(*this, "rdac")
|
||||
{
|
||||
}
|
||||
|
||||
void sb16_ct2720_device::device_add_mconfig(machine_config &config)
|
||||
{
|
||||
SPEAKER(config, "lspeaker").front_left();
|
||||
SPEAKER(config, "rspeaker").front_right();
|
||||
|
||||
DAC_16BIT_R2R(config, m_ldac, 0).add_route(ALL_OUTPUTS, "lspeaker", 0.5); // unknown DAC
|
||||
DAC_16BIT_R2R(config, m_rdac, 0).add_route(ALL_OUTPUTS, "rspeaker", 0.5); // unknown DAC
|
||||
|
||||
// PC_JOY(config, m_joy);
|
||||
|
||||
// MIDI_PORT(config, "mdin", midiin_slot, "midiin").rxd_handler().set(FUNC(sb_device::midi_rx_w));
|
||||
// MIDI_PORT(config, "mdout", midiout_slot, "midiout");
|
||||
|
||||
YMF262(config, m_opl3, XTAL(14'318'181));
|
||||
m_opl3->add_route(0, "lspeaker", 1.0);
|
||||
m_opl3->add_route(1, "rspeaker", 1.0);
|
||||
m_opl3->add_route(2, "lspeaker", 1.0);
|
||||
m_opl3->add_route(3, "rspeaker", 1.0);
|
||||
}
|
||||
|
||||
void sb16_ct2720_device::device_start()
|
||||
{
|
||||
m_bus->install_device(0x0000, 0xffff, *this, &sb16_ct2720_device::io_map);
|
||||
}
|
||||
|
||||
void sb16_ct2720_device::device_reset()
|
||||
{
|
||||
}
|
||||
|
||||
void sb16_ct2720_device::io_map(address_map &map)
|
||||
{
|
||||
const u16 base = 0xd2;
|
||||
// map(0x0400 | base, 0x0400 | base).select(0x300) PC Gameport
|
||||
map(0x2000 | base, 0x2000 | base).select(0x300).lrw8(
|
||||
NAME([this] (offs_t offset) {
|
||||
return m_opl3->read(offset >> 8);
|
||||
}),
|
||||
NAME([this] (offs_t offset, u8 data) {
|
||||
m_opl3->write(offset >> 8, data);
|
||||
})
|
||||
);
|
||||
// map(0x2400 | base, 0x2400 | base).select(0x100) CT1745 mixer ($224-$225 on AT)
|
||||
// map(0x2600 | base, 0x2600 | base) CT1741 DSP reset
|
||||
map(0x2800 | base, 0x2800 | base).select(0x100).lrw8(
|
||||
NAME([this] (offs_t offset) {
|
||||
return m_opl3->read(offset >> 8);
|
||||
}),
|
||||
NAME([this] (offs_t offset, u8 data) {
|
||||
m_opl3->write(offset >> 8, data);
|
||||
})
|
||||
);
|
||||
// map(0x2a00 | base, 0x2a00 | base) CT1741 DSP read data port
|
||||
// map(0x2c00 | base, 0x2c00 | base).select(0x300) CT1741 DSP ($22c-$22f on AT)
|
||||
// map(0x8000 | base, 0x8000 | base).select(0x100) MIDI port/Wave Blaster
|
||||
map(0xc800 | base, 0xc800 | base).select(0x300).lrw8(
|
||||
NAME([this] (offs_t offset) {
|
||||
return m_opl3->read(offset >> 8);
|
||||
}),
|
||||
NAME([this] (offs_t offset, u8 data) {
|
||||
m_opl3->write(offset >> 8, data);
|
||||
})
|
||||
);
|
||||
}
|
50
src/devices/bus/cbus/sb16_ct2720.h
Normal file
50
src/devices/bus/cbus/sb16_ct2720.h
Normal file
@ -0,0 +1,50 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Angelo Salese
|
||||
|
||||
#ifndef MAME_BUS_CBUS_SB16_CT2720_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "bus/cbus/pc9801_cbus.h"
|
||||
//#include "bus/midi/midi.h"
|
||||
//#include "bus/pc_joy/pc_joy.h"
|
||||
#include "sound/dac.h"
|
||||
//#include "sound/saa1099.h"
|
||||
#include "sound/ymopl.h"
|
||||
//#include "diserial.h"
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
class sb16_ct2720_device : public device_t
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
sb16_ct2720_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
static constexpr feature_type unemulated_features() { return feature::SOUND | feature::MICROPHONE; }
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override ATTR_COLD;
|
||||
virtual void device_reset() override ATTR_COLD;
|
||||
|
||||
// optional information overrides
|
||||
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
|
||||
|
||||
private:
|
||||
void io_map(address_map &map) ATTR_COLD;
|
||||
|
||||
required_device<pc9801_slot_device> m_bus;
|
||||
required_device<ymf262_device> m_opl3;
|
||||
required_device<dac_16bit_r2r_device> m_ldac;
|
||||
required_device<dac_16bit_r2r_device> m_rdac;
|
||||
};
|
||||
|
||||
|
||||
// device type definition
|
||||
DECLARE_DEVICE_TYPE(SB16_CT2720, sb16_ct2720_device)
|
||||
|
||||
#endif // MAME_BUS_CBUS_SB16_H
|
@ -1936,6 +1936,7 @@ static void pc9801_cbus_devices(device_slot_interface &device)
|
||||
// Spark Board
|
||||
device.option_add("amd98", AMD98);
|
||||
device.option_add("mpu_pc98", MPU_PC98);
|
||||
device.option_add("sb16", SB16_CT2720);
|
||||
|
||||
// doujinshi HW
|
||||
// MAD Factory / Doujin Hard (同人ハード)
|
||||
|
@ -53,6 +53,8 @@
|
||||
#include "bus/cbus/pc9801_118.h"
|
||||
#include "bus/cbus/mpu_pc98.h"
|
||||
#include "bus/cbus/pc9801_cbus.h"
|
||||
#include "bus/cbus/sb16_ct2720.h"
|
||||
|
||||
#include "pc9801_kbd.h"
|
||||
#include "pc9801_cd.h"
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user