Previous 199869 Revisions Next

r25517 Friday 4th October, 2013 at 03:18:01 UTC by Carl
(mess) isa_dectalk: add the dectalk pc device [Carl, Lord Nightmare]
--
Audio quality is currently marginal
[src/mess]mess.mak
[src/mess/machine]isa_cards.c isa_cards.h isa_dectalk.c* isa_dectalk.h*

trunk/src/mess/mess.mak
r25516r25517
813813   $(MESS_MACHINE)/isa_xtide.o   \
814814   $(MESS_MACHINE)/isa_aha1542.o   \
815815   $(MESS_MACHINE)/isa_wd1002a_wx1.o\
816   $(MESS_MACHINE)/isa_dectalk.o \
816817   $(MESS_VIDEO)/isa_cga.o     \
817818   $(MESS_VIDEO)/isa_svga_cirrus.o \
818819   $(MESS_VIDEO)/isa_ega.o     \
trunk/src/mess/machine/isa_dectalk.h
r0r25517
1#ifndef ISA_DECTALK_H_
2#define ISA_DECTALK_H_
3
4#include "emu.h"
5#include "machine/isa.h"
6#include "sound/dac.h"
7#include "cpu/i86/i186.h"
8#include "cpu/tms32010/tms32010.h"
9
10class dectalk_isa_device : public device_t,
11                  public device_isa8_card_interface
12{
13public:
14   dectalk_isa_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
15
16   // optional information overrides
17   virtual const rom_entry *device_rom_region() const;
18   virtual machine_config_constructor device_mconfig_additions() const;
19
20   DECLARE_WRITE8_MEMBER(write);
21   DECLARE_READ8_MEMBER(read);
22
23   DECLARE_WRITE16_MEMBER(status_w);
24   DECLARE_READ16_MEMBER(cmd_r);
25   DECLARE_WRITE16_MEMBER(data_w);
26   DECLARE_READ16_MEMBER(data_r);
27   DECLARE_READ16_MEMBER(host_irq_r);
28   DECLARE_READ8_MEMBER(dma_r);
29   DECLARE_WRITE8_MEMBER(dma_w);
30   DECLARE_WRITE16_MEMBER(dac_w);
31   DECLARE_READ16_MEMBER(dsp_dma_r);
32   DECLARE_WRITE16_MEMBER(dsp_dma_w);
33   DECLARE_WRITE16_MEMBER(output_ctl_w);
34   DECLARE_READ16_MEMBER(bio_line_r);
35   DECLARE_WRITE16_MEMBER(irq_line_w);
36   DECLARE_WRITE_LINE_MEMBER(clock_w);
37
38protected:
39   // device-level overrides
40   virtual void device_start();
41   virtual void device_reset();
42
43private:
44   UINT16 m_cmd, m_stat, m_data, m_dsp_dma, m_ctl;
45   UINT8 m_dma, m_vol, m_bio;
46
47   required_device<i80186_cpu_device> m_cpu;
48   required_device<dac_device> m_dac;
49   required_device<cpu_device> m_dsp;
50};
51
52extern const device_type ISA8_DECTALK;
53
54#endif /* ISA_DECTALK_H_ */
Property changes on: trunk/src/mess/machine/isa_dectalk.h
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native
trunk/src/mess/machine/isa_cards.c
r25516r25517
2929   SLOT_INTERFACE("gblaster", ISA8_GAME_BLASTER)
3030   SLOT_INTERFACE("sblaster1_0", ISA8_SOUND_BLASTER_1_0)
3131   SLOT_INTERFACE("sblaster1_5", ISA8_SOUND_BLASTER_1_5)
32   SLOT_INTERFACE("stereo_fx", ISA8_STEREO_FX)
3233   SLOT_INTERFACE("mpu401", ISA8_MPU401)
3334   SLOT_INTERFACE("ne1000", NE1000)
3435   SLOT_INTERFACE("3c503", EL2_3C503)
3536   SLOT_INTERFACE("lpt", ISA8_LPT)
3637   SLOT_INTERFACE("ibm_mfc", ISA8_IBM_MFC)
3738   SLOT_INTERFACE("wd1002a_wx1", ISA8_WD1002A_WX1)
39   SLOT_INTERFACE("dectalk", ISA8_DECTALK)
3840SLOT_INTERFACE_END
3941
4042SLOT_INTERFACE_START( pc_isa16_cards )
r25516r25517
6365   SLOT_INTERFACE("lpt", ISA8_LPT)
6466   SLOT_INTERFACE("ibm_mfc", ISA8_IBM_MFC)
6567   SLOT_INTERFACE("fdcsmc", ISA8_FDC_SMC)
68   SLOT_INTERFACE("dectalk", ISA8_DECTALK)
6669   // 16-bit
6770   SLOT_INTERFACE("ide", ISA16_IDE)
6871   SLOT_INTERFACE("ne2000", NE2000)
trunk/src/mess/machine/isa_cards.h
r25516r25517
4242#include "machine/isa_sblaster.h"
4343#include "machine/isa_ssi2001.h"
4444#include "machine/isa_stereo_fx.h"
45#include "machine/isa_dectalk.h"
4546
4647// network
4748#include "machine/3c503.h"
trunk/src/mess/machine/isa_dectalk.c
r0r25517
1#include "isa_dectalk.h"
2
3const device_type ISA8_DECTALK = &device_creator<dectalk_isa_device>;
4
5dectalk_isa_device::dectalk_isa_device(const machine_config& mconfig, const char* tag, device_t* owner, UINT32 clock) :
6   device_t(mconfig, ISA8_DECTALK, "DECTalk-PC", tag, owner, clock, "dectalk_isa", __FILE__),
7   device_isa8_card_interface(mconfig, *this),
8   m_cpu(*this, "dectalk_cpu"),
9   m_dac(*this, "dac"),
10   m_dsp(*this, "dectalk_dsp")
11{
12}
13
14WRITE16_MEMBER(dectalk_isa_device::status_w)
15{
16   m_stat = data;
17}
18
19READ16_MEMBER(dectalk_isa_device::cmd_r)
20{
21   return m_cmd;
22}
23
24WRITE16_MEMBER(dectalk_isa_device::data_w)
25{
26   m_data = data;
27}
28
29READ16_MEMBER(dectalk_isa_device::data_r)
30{
31   return m_data;
32}
33
34READ16_MEMBER(dectalk_isa_device::host_irq_r)
35{
36   //m_isa->ir?_w(1);
37   return 0;
38}
39
40READ8_MEMBER(dectalk_isa_device::dma_r)
41{
42   return m_dma;
43}
44
45WRITE8_MEMBER(dectalk_isa_device::dma_w)
46{
47   m_dma = data;
48}
49
50WRITE16_MEMBER(dectalk_isa_device::dac_w)
51{
52   // TODO: Some words are understandable but overall it sounds bad
53   UINT16 out;
54   out = (data >> 4) & 0xfff;
55   out = ((out >> 1) & 0x555) | ((out & 0x555) << 1);
56   out = ((out >> 2) & 0x333) | ((out & 0x333) << 2);
57   out = ((out >> 4) & 0xf0f) | ((out & 0xf0f) << 4);
58   out |= (data & 0x8) << 12;
59   m_dac->write(out << 3);
60}
61
62WRITE16_MEMBER(dectalk_isa_device::output_ctl_w)
63{
64   // X9C503P potentiometer, 8-CS, 4-U/D, 2-INC
65   if(!(data & 8) && !(m_ctl & 2) && (data & 2))
66   {
67      if((data & 4) && (m_vol < 64))
68         m_vol++;
69      else if(!(data & 4) && m_vol)
70         m_vol--;
71
72      m_dac->set_output_gain(ALL_OUTPUTS, m_vol / 63.0);
73   }
74   m_dsp->set_input_line(INPUT_LINE_RESET, (data & 0x10) ? CLEAR_LINE : ASSERT_LINE);
75   m_ctl = data;
76}
77
78READ16_MEMBER(dectalk_isa_device::dsp_dma_r)
79{
80   m_bio = ASSERT_LINE;
81   return m_dsp_dma;
82}
83
84WRITE16_MEMBER(dectalk_isa_device::dsp_dma_w)
85{
86   m_bio = CLEAR_LINE;
87   m_dsp_dma = data;
88}
89
90READ16_MEMBER(dectalk_isa_device::bio_line_r)
91{
92   // TODO: reading the bio line doesn't cause any direct external effects so this is wrong
93   if(m_bio == ASSERT_LINE)
94      m_cpu->drq0_w(1);
95   return m_bio;
96}
97
98WRITE16_MEMBER(dectalk_isa_device::irq_line_w)
99{
100   m_cpu->int1_w(0);
101}
102
103WRITE_LINE_MEMBER(dectalk_isa_device::clock_w)
104{
105   m_dsp->set_input_line(INPUT_LINE_IRQ0, (!(m_ctl & 0x20) || state) ? CLEAR_LINE : ASSERT_LINE);
106}
107
108static ADDRESS_MAP_START(dectalk_cpu_io, AS_IO, 16, dectalk_isa_device)
109   AM_RANGE(0x0400, 0x0401) AM_READWRITE(cmd_r, status_w) //PCS0
110   AM_RANGE(0x0480, 0x0481) AM_READWRITE(data_r, data_w) //PCS1
111   AM_RANGE(0x0500, 0x0501) AM_WRITE(dsp_dma_w) //PCS2
112   AM_RANGE(0x0580, 0x0581) AM_READ(host_irq_r) //PCS3
113   AM_RANGE(0x0600, 0x0601) AM_WRITE(output_ctl_w) //PCS4
114   AM_RANGE(0x0680, 0x0681) AM_READWRITE8(dma_r, dma_w, 0xff) //PCS5
115   AM_RANGE(0x0700, 0x0701) AM_WRITE(irq_line_w) //PCS6
116ADDRESS_MAP_END
117
118static ADDRESS_MAP_START(dectalk_cpu_map, AS_PROGRAM, 16, dectalk_isa_device)
119   AM_RANGE(0x00000, 0xFBFFF) AM_RAM
120   AM_RANGE(0xFC000, 0xFFFFF) AM_ROM AM_REGION("dectalk_cpu", 0)
121ADDRESS_MAP_END
122
123static ADDRESS_MAP_START(dectalk_dsp_io, AS_IO, 16, dectalk_isa_device)
124   AM_RANGE(0x0, 0x0) AM_READ(dsp_dma_r)
125   AM_RANGE(0x1, 0x1) AM_READWRITE(dsp_dma_r, dac_w)
126   AM_RANGE(TMS32010_BIO, TMS32010_BIO) AM_READ(bio_line_r)
127ADDRESS_MAP_END
128
129static ADDRESS_MAP_START(dectalk_dsp_map, AS_PROGRAM, 16, dectalk_isa_device)
130   AM_RANGE(0x0000, 0x0FFF) AM_ROM AM_REGION("dectalk_dsp", 0)
131ADDRESS_MAP_END
132
133static MACHINE_CONFIG_FRAGMENT( dectalk_isa )
134   MCFG_CPU_ADD("dectalk_cpu", I80186, XTAL_20MHz/2)
135   MCFG_CPU_IO_MAP(dectalk_cpu_io)
136   MCFG_CPU_PROGRAM_MAP(dectalk_cpu_map)
137   MCFG_80186_TMROUT0_HANDLER(WRITELINE(dectalk_isa_device, clock_w));
138
139   MCFG_CPU_ADD("dectalk_dsp", TMS32015, XTAL_20MHz)
140   MCFG_CPU_IO_MAP(dectalk_dsp_io)
141   MCFG_CPU_PROGRAM_MAP(dectalk_dsp_map)
142
143   MCFG_SPEAKER_STANDARD_MONO("speaker")
144   MCFG_SOUND_ADD("dac", DAC, 0)
145   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 1.00)
146MACHINE_CONFIG_END
147
148ROM_START( dectalk_isa )
149   ROM_REGION( 0x4000, "dectalk_cpu", 0 )
150   ROM_LOAD16_BYTE("pc_boot_hxl.am27c64.d6.bin", 0x0000, 0x2000, CRC(7492f1e3) SHA1(fe6946a227f01c94f2b99220320a616445c96ee0))
151   ROM_LOAD16_BYTE("pc_boot_hxh.am27c64.d8.bin", 0x0001, 0x2000, CRC(1fe7fe40) SHA1(6e89c237f01aa22e0d21ff4d6fdf8137c6ace374))
152   ROM_REGION( 0x2000, "dectalk_dsp", 0 )
153   ROM_LOAD("spc_034c__2-1-92.tms320p15nl.d3.bin", 0x0000, 0x2000, CRC(d8b1201e) SHA1(4b873a5e882205fcac79a27562054b5c4d1a117c))
154ROM_END
155
156const rom_entry* dectalk_isa_device::device_rom_region() const
157{
158   return ROM_NAME( dectalk_isa );
159}
160
161machine_config_constructor dectalk_isa_device::device_mconfig_additions() const
162{
163   return MACHINE_CONFIG_NAME( dectalk_isa );
164}
165
166WRITE8_MEMBER(dectalk_isa_device::write)
167{
168   switch(offset)
169   {
170      case 0:
171         m_cmd = (m_cmd & 0xff00) | data;
172         break;
173      case 1:
174         m_cmd = (m_cmd & 0xff) | (data << 8);
175         break;
176      case 2:
177         m_data = (m_data & 0xff00) | data;
178         break;
179      case 3:
180         m_data = (m_data & 0xff) | (data << 8);
181         break;
182      case 4:
183         m_dma = data;
184         m_cpu->drq1_w(1);
185         break;
186      case 6:
187         m_cpu->int1_w(1);
188         break;
189   }
190}
191
192READ8_MEMBER(dectalk_isa_device::read)
193{
194   switch(offset)
195   {
196      case 0:
197         return m_stat & 0xff;
198      case 1:
199         return m_stat >> 8;
200      case 2:
201         return m_data & 0xff;
202      case 3:
203         return m_data >> 8;
204      case 4:
205         m_cpu->drq1_w(1);
206         return m_dma;
207   }
208   return 0;
209}
210
211void dectalk_isa_device::device_start()
212{
213   set_isa_device();
214   m_isa->install_device(0x0250, 0x0257, 0, 0, read8_delegate(FUNC(dectalk_isa_device::read), this), write8_delegate(FUNC(dectalk_isa_device::write), this));
215}
216
217void dectalk_isa_device::device_reset()
218{
219   m_ctl = 0;
220   m_vol = 63;
221   m_bio = ASSERT_LINE;
222}
Property changes on: trunk/src/mess/machine/isa_dectalk.c
Added: svn:eol-style
   + native
Added: svn:mime-type
   + text/plain

Previous 199869 Revisions Next


© 1997-2024 The MAME Team