Previous 199869 Revisions Next

r19934 Sunday 30th December, 2012 at 00:14:43 UTC by Carl
[mess] pc.c: make the tandys and other pc compatibles use the am9517a
They can read floppies and boot now.
[src/mess/drivers]amstr_pc.c pc.c
[src/mess/includes]pc.h
[src/mess/machine]pc.c

trunk/src/mess/drivers/amstr_pc.c
r19933r19934
5757#include "formats/pc_dsk.h"
5858#include "formats/mfi_dsk.h"
5959
60#include "machine/8237dma.h"
6160#include "sound/sn76496.h"
6261
6362#include "machine/ram.h"
r19933r19934
8180ADDRESS_MAP_END
8281
8382static ADDRESS_MAP_START(ppc512_io, AS_IO, 16, pc_state )
84   AM_RANGE(0x0000, 0x000f) AM_DEVREADWRITE8_LEGACY("dma8237", i8237_r, i8237_w, 0xffff)
83   AM_RANGE(0x0000, 0x000f) AM_DEVREADWRITE8("dma8237", am9517a_device, read, write, 0xffff)
8584   AM_RANGE(0x0020, 0x0021) AM_DEVREADWRITE8_LEGACY("pic8259", pic8259_r, pic8259_w, 0xffff)
8685   AM_RANGE(0x0040, 0x0043) AM_DEVREADWRITE8_LEGACY("pit8253", pit8253_r, pit8253_w, 0xffff)
8786   AM_RANGE(0x0060, 0x0065) AM_READWRITE8_LEGACY(pc1640_port60_r, pc1640_port60_w, 0xffff)
r19933r19934
110109ADDRESS_MAP_END
111110
112111static ADDRESS_MAP_START(pc200_io, AS_IO, 16, pc_state )
113   AM_RANGE(0x0000, 0x000f) AM_DEVREADWRITE8_LEGACY("dma8237", i8237_r, i8237_w, 0xffff)
112   AM_RANGE(0x0000, 0x000f) AM_DEVREADWRITE8("dma8237", am9517a_device, read, write, 0xffff)
114113   AM_RANGE(0x0020, 0x0021) AM_DEVREADWRITE8_LEGACY("pic8259", pic8259_r, pic8259_w, 0xffff)
115114   AM_RANGE(0x0040, 0x0043) AM_DEVREADWRITE8_LEGACY("pit8253", pit8253_r, pit8253_w, 0xffff)
116115   AM_RANGE(0x0060, 0x0065) AM_READWRITE8_LEGACY(pc1640_port60_r, pc1640_port60_w, 0xffff)
trunk/src/mess/drivers/pc.c
r19933r19934
9494#include "formats/mfi_dsk.h"
9595#include "formats/pc_dsk.h"
9696
97#include "machine/8237dma.h"
97#include "machine/am9517a.h"
9898#include "sound/sn76496.h"
9999
100100#include "machine/wd17xx.h"
r19933r19934
192192
193193static ADDRESS_MAP_START(pc8_io, AS_IO, 8, pc_state )
194194   ADDRESS_MAP_UNMAP_HIGH
195   AM_RANGE(0x0000, 0x000f) AM_DEVREADWRITE_LEGACY("dma8237", i8237_r, i8237_w)
195   AM_RANGE(0x0000, 0x000f) AM_DEVREADWRITE("dma8237", am9517a_device, read, write)
196196   AM_RANGE(0x0020, 0x0021) AM_DEVREADWRITE_LEGACY("pic8259", pic8259_r, pic8259_w)
197197   AM_RANGE(0x0040, 0x0043) AM_DEVREADWRITE_LEGACY("pit8253", pit8253_r, pit8253_w)
198198   AM_RANGE(0x0060, 0x0063) AM_DEVREADWRITE("ppi8255", i8255_device, read, write)
r19933r19934
217217
218218static ADDRESS_MAP_START(pc16_io, AS_IO, 16, pc_state )
219219   ADDRESS_MAP_UNMAP_HIGH
220   AM_RANGE(0x0000, 0x000f) AM_DEVREADWRITE8_LEGACY("dma8237", i8237_r, i8237_w, 0xffff)
220   AM_RANGE(0x0000, 0x000f) AM_DEVREADWRITE8("dma8237", am9517a_device, read, write, 0xffff)
221221   AM_RANGE(0x0020, 0x0021) AM_DEVREADWRITE8_LEGACY("pic8259", pic8259_r, pic8259_w, 0xffff)
222222   AM_RANGE(0x0040, 0x0043) AM_DEVREADWRITE8_LEGACY("pit8253", pit8253_r, pit8253_w, 0xffff)
223223   AM_RANGE(0x0060, 0x0063) AM_DEVREADWRITE8("ppi8255", i8255_device, read, write, 0xffff)
r19933r19934
240240
241241static ADDRESS_MAP_START(ec1841_io, AS_IO, 16, pc_state)
242242   ADDRESS_MAP_UNMAP_HIGH
243   AM_RANGE(0x0000, 0x000f) AM_DEVREADWRITE8_LEGACY("dma8237", i8237_r, i8237_w, 0xffff)
243   AM_RANGE(0x0000, 0x000f) AM_DEVREADWRITE8("dma8237", am9517a_device, read, write, 0xffff)
244244   AM_RANGE(0x0020, 0x0021) AM_DEVREADWRITE8_LEGACY("pic8259", pic8259_r, pic8259_w, 0xffff)
245245   AM_RANGE(0x0040, 0x0043) AM_DEVREADWRITE8_LEGACY("pit8253", pit8253_r, pit8253_w, 0xffff)
246246   AM_RANGE(0x0060, 0x0063) AM_DEVREADWRITE8("ppi8255", i8255_device, read, write, 0xffff)
r19933r19934
261261
262262static ADDRESS_MAP_START(iskr1031_io, AS_IO, 16, pc_state)
263263   ADDRESS_MAP_UNMAP_HIGH
264   AM_RANGE(0x0000, 0x000f) AM_DEVREADWRITE8_LEGACY("dma8237", i8237_r, i8237_w, 0xffff)
264   AM_RANGE(0x0000, 0x000f) AM_DEVREADWRITE8("dma8237", am9517a_device, read, write, 0xffff)
265265   AM_RANGE(0x0020, 0x0021) AM_DEVREADWRITE8_LEGACY("pic8259", pic8259_r, pic8259_w, 0xffff)
266266   AM_RANGE(0x0040, 0x0043) AM_DEVREADWRITE8_LEGACY("pit8253", pit8253_r, pit8253_w, 0xffff)
267267   AM_RANGE(0x0060, 0x0063) AM_DEVREADWRITE8("ppi8255", i8255_device, read, write, 0xffff)
r19933r19934
293293
294294static ADDRESS_MAP_START(ibm5550_io, AS_IO, 16, pc_state )
295295   ADDRESS_MAP_UNMAP_HIGH
296   AM_RANGE(0x0000, 0x000f) AM_DEVREADWRITE8_LEGACY("dma8237", i8237_r, i8237_w, 0xffff)
296   AM_RANGE(0x0000, 0x000f) AM_DEVREADWRITE8("dma8237", am9517a_device, read, write, 0xffff)
297297   AM_RANGE(0x0020, 0x0021) AM_DEVREADWRITE8_LEGACY("pic8259", pic8259_r, pic8259_w, 0xffff)
298298   AM_RANGE(0x0040, 0x0043) AM_DEVREADWRITE8_LEGACY("pit8253", pit8253_r, pit8253_w, 0xffff)
299299   AM_RANGE(0x0060, 0x0063) AM_DEVREADWRITE8("ppi8255", i8255_device, read, write, 0xffff)
r19933r19934
325325
326326
327327static ADDRESS_MAP_START(europc_io, AS_IO, 8, pc_state )
328   AM_RANGE(0x0000, 0x000f) AM_DEVREADWRITE_LEGACY("dma8237", i8237_r, i8237_w)
328   AM_RANGE(0x0000, 0x000f) AM_DEVREADWRITE("dma8237", am9517a_device, read, write)
329329   AM_RANGE(0x0020, 0x0021) AM_DEVREADWRITE_LEGACY("pic8259", pic8259_r, pic8259_w)
330330   AM_RANGE(0x0040, 0x0043) AM_DEVREADWRITE_LEGACY("pit8253", pit8253_r, pit8253_w)
331331   AM_RANGE(0x0060, 0x0063) AM_READWRITE_LEGACY(europc_pio_r,         europc_pio_w)
r19933r19934
359359
360360
361361static ADDRESS_MAP_START(tandy1000_io, AS_IO, 8, pc_state )
362   AM_RANGE(0x0000, 0x000f) AM_DEVREADWRITE_LEGACY("dma8237", i8237_r, i8237_w)
362   AM_RANGE(0x0000, 0x000f) AM_DEVREADWRITE("dma8237", am9517a_device, read, write)
363363   AM_RANGE(0x0020, 0x0021) AM_DEVREADWRITE_LEGACY("pic8259", pic8259_r, pic8259_w)
364364   AM_RANGE(0x0040, 0x0043) AM_DEVREADWRITE_LEGACY("pit8253", pit8253_r, pit8253_w)
365365   AM_RANGE(0x0060, 0x0063) AM_READWRITE_LEGACY(tandy1000_pio_r,         tandy1000_pio_w)
r19933r19934
389389
390390
391391static ADDRESS_MAP_START(tandy1000_16_io, AS_IO, 16, pc_state )
392   AM_RANGE(0x0000, 0x000f) AM_DEVREADWRITE8_LEGACY("dma8237", i8237_r, i8237_w, 0xffff)
392   AM_RANGE(0x0000, 0x000f) AM_DEVREADWRITE8("dma8237", am9517a_device, read, write, 0xffff)
393393   AM_RANGE(0x0020, 0x0021) AM_DEVREADWRITE8_LEGACY("pic8259", pic8259_r, pic8259_w, 0xffff)
394394   AM_RANGE(0x0040, 0x0043) AM_DEVREADWRITE8_LEGACY("pit8253", pit8253_r, pit8253_w, 0xffff)
395395   AM_RANGE(0x0060, 0x0063) AM_READWRITE8_LEGACY(tandy1000_pio_r,         tandy1000_pio_w, 0xffff)
r19933r19934
420420
421421
422422static ADDRESS_MAP_START(tandy1000_286_io, AS_IO, 16, pc_state )
423   AM_RANGE(0x0000, 0x000f) AM_DEVREADWRITE8_LEGACY("dma8237", i8237_r, i8237_w, 0xffff)
423   AM_RANGE(0x0000, 0x000f) AM_DEVREADWRITE8("dma8237", am9517a_device, read, write, 0xffff)
424424   AM_RANGE(0x0020, 0x0021) AM_DEVREADWRITE8_LEGACY("pic8259", pic8259_r, pic8259_w, 0xffff)
425425   AM_RANGE(0x0040, 0x0043) AM_DEVREADWRITE8_LEGACY("pit8253", pit8253_r, pit8253_w, 0xffff)
426426   AM_RANGE(0x0060, 0x0063) AM_READWRITE8_LEGACY(tandy1000_pio_r,         tandy1000_pio_w, 0xffff)
r19933r19934
11411141
11421142   MCFG_PC_FDC_XT_ADD("fdc")
11431143
1144   MCFG_FLOPPY_DRIVE_ADD("fdc:0", ibmpc_floppies, "525dd", 0, pc_state::floppy_formats)
1145   MCFG_FLOPPY_DRIVE_ADD("fdc:1", ibmpc_floppies, "525dd", 0, pc_state::floppy_formats)
1144   MCFG_FLOPPY_DRIVE_ADD("fdc:0", ibmpc_floppies, "35dd", 0, pc_state::floppy_formats)
11461145
11471146   /* internal ram */
11481147   MCFG_RAM_ADD(RAM_TAG)
11491148   MCFG_RAM_DEFAULT_SIZE("640K")
11501149MACHINE_CONFIG_END
11511150
1151static MACHINE_CONFIG_DERIVED( t1000sx, t1000hx )
1152   MCFG_DEVICE_REMOVE("fdc:0")
1153   MCFG_FLOPPY_DRIVE_ADD("fdc:0", ibmpc_floppies, "525dd", 0, pc_state::floppy_formats)
1154MACHINE_CONFIG_END
11521155
11531156static MACHINE_CONFIG_START( t1000_16, pc_state )
11541157   /* basic machine hardware */
r19933r19934
11901193   MCFG_PC_LPT_ADD("lpt_2", pc_lpt_config)
11911194
11921195   MCFG_PC_FDC_XT_ADD("fdc")
1196   MCFG_FLOPPY_DRIVE_ADD("fdc:0", ibmpc_floppies, "35dd", 0, pc_state::floppy_formats)
11931197
1194   MCFG_FLOPPY_DRIVE_ADD("fdc:0", ibmpc_floppies, "525dd", 0, pc_state::floppy_formats)
1195   MCFG_FLOPPY_DRIVE_ADD("fdc:1", ibmpc_floppies, "525dd", 0, pc_state::floppy_formats)
1196
11971198   /* internal ram */
11981199   MCFG_RAM_ADD(RAM_TAG)
11991200   MCFG_RAM_DEFAULT_SIZE("640K")
r19933r19934
12401241   MCFG_PC_LPT_ADD("lpt_2", pc_lpt_config)
12411242
12421243   MCFG_PC_FDC_XT_ADD("fdc")
1244   MCFG_FLOPPY_DRIVE_ADD("fdc:0", ibmpc_floppies, "35dd", 0, pc_state::floppy_formats)
12431245
1244   MCFG_FLOPPY_DRIVE_ADD("fdc:0", ibmpc_floppies, "525dd", 0, pc_state::floppy_formats)
1245   MCFG_FLOPPY_DRIVE_ADD("fdc:1", ibmpc_floppies, "525dd", 0, pc_state::floppy_formats)
1246
12471246   /* internal ram */
12481247   MCFG_RAM_ADD(RAM_TAG)
12491248   MCFG_RAM_DEFAULT_SIZE("640K")
r19933r19934
23252324
23262325// tandy 1000
23272326COMP( 1987, t1000hx,    ibm5150,    0,          t1000hx,    tandy1t, pc_state,    t1000hx,    "Tandy Radio Shack", "Tandy 1000 HX", 0)
2328COMP( 1987, t1000sx,    ibm5150,    0,          t1000hx,    tandy1t, pc_state,    t1000hx,    "Tandy Radio Shack", "Tandy 1000 SX", GAME_NOT_WORKING)
2327COMP( 1987, t1000sx,    ibm5150,    0,          t1000sx,    tandy1t, pc_state,    t1000hx,    "Tandy Radio Shack", "Tandy 1000 SX", GAME_NOT_WORKING)
23292328COMP( 1987, t1000tx,    ibm5150,    0,          t1000_286,  tandy1t, pc_state,    t1000hx,    "Tandy Radio Shack", "Tandy 1000 TX", 0)
23302329COMP( 1989, t1000rl,    ibm5150,    0,          t1000_16,   tandy1t, pc_state,    t1000hx,    "Tandy Radio Shack", "Tandy 1000 RL", 0)
23312330COMP( 1989, t1000tl2,   ibm5150,    0,          t1000_286,  tandy1t, pc_state,    t1000hx,    "Tandy Radio Shack", "Tandy 1000 TL/2", 0)
trunk/src/mess/machine/pc.c
r19933r19934
3636#include "imagedev/cassette.h"
3737#include "sound/speaker.h"
3838
39#include "machine/8237dma.h"
39#include "machine/am9517a.h"
4040#include "machine/wd17xx.h"
4141
4242#include "machine/ram.h"
r19933r19934
167167
168168WRITE_LINE_MEMBER(pc_state::pc_dma_hrq_changed)
169169{
170   device_t *device = machine().device("dma8237");
171170   m_maincpu->set_input_line(INPUT_LINE_HALT, state ? ASSERT_LINE : CLEAR_LINE);
172171
173172   /* Assert HLDA */
174   i8237_hlda_w( device, state );
173   m_dma8237->hack_w(state);
175174}
176175
177176
178177READ8_MEMBER(pc_state::pc_dma_read_byte)
179178{
180   UINT8 result;
179   if(m_dma_channel == -1)
180      return 0xff;
181181   address_space& prog_space = m_maincpu->space(AS_PROGRAM);
182182   offs_t page_offset = (((offs_t) m_dma_offset[0][m_dma_channel]) << 16)
183183      & 0x0F0000;
184184
185   result = prog_space.read_byte( page_offset + offset);
186   return result;
185   return prog_space.read_byte( page_offset + offset);
187186}
188187
189188
190189WRITE8_MEMBER(pc_state::pc_dma_write_byte)
191190{
191   if(m_dma_channel == -1)
192      return;
192193   address_space& prog_space = m_maincpu->space(AS_PROGRAM);
193194   offs_t page_offset = (((offs_t) m_dma_offset[0][m_dma_channel]) << 16)
194195      & 0x0F0000;
r19933r19934
223224WRITE8_MEMBER(pc_state::pc_dma8237_0_dack_w)
224225{
225226   m_u73_q2 = 0;
226   i8237_dreq0_w( m_dma8237, m_u73_q2 );
227   m_dma8237->dreq0_w( m_u73_q2 );
227228}
228229
230void pc_state::pc_eop_w(int channel, bool state)
231{
232   switch(channel)
233   {
234      case 2:
235         machine().device<pc_fdc_interface>("fdc")->tc_w(state);
236         break;
237      case 0:
238      case 1:
239      case 3:
240      default:
241         break;
242   }
243}
229244
245
230246WRITE_LINE_MEMBER(pc_state::pc_dma8237_out_eop)
231247{
232   machine().device<pc_fdc_interface>("fdc")->tc_w(state == ASSERT_LINE);
248   m_cur_eop = state == ASSERT_LINE;
249   if(m_dma_channel != -1 && m_cur_eop)
250      pc_eop_w(m_dma_channel, m_cur_eop ? ASSERT_LINE : CLEAR_LINE);
233251}
234252
235static void set_dma_channel(running_machine &machine, int channel, int state)
253void pc_state::pc_select_dma_channel(int channel, bool state)
236254{
237   pc_state *st = machine.driver_data<pc_state>();
255   if(!state) {
256      m_dma_channel = channel;
257      if(m_cur_eop)
258         pc_eop_w(channel, ASSERT_LINE );
238259
239   if (!state) st->m_dma_channel = channel;
260   } else if(m_dma_channel == channel) {
261      m_dma_channel = -1;
262      if(m_cur_eop)
263         pc_eop_w(channel, CLEAR_LINE );
264   }
240265}
241266
242WRITE_LINE_MEMBER(pc_state::pc_dack0_w){ set_dma_channel(machine(), 0, state); }
243WRITE_LINE_MEMBER(pc_state::pc_dack1_w){ set_dma_channel(machine(), 1, state); }
244WRITE_LINE_MEMBER(pc_state::pc_dack2_w){ set_dma_channel(machine(), 2, state); }
245WRITE_LINE_MEMBER(pc_state::pc_dack3_w){ set_dma_channel(machine(), 3, state); }
267WRITE_LINE_MEMBER(pc_state::pc_dack0_w){ pc_select_dma_channel(0, state); }
268WRITE_LINE_MEMBER(pc_state::pc_dack1_w){ pc_select_dma_channel(1, state); }
269WRITE_LINE_MEMBER(pc_state::pc_dack2_w){ pc_select_dma_channel(2, state); }
270WRITE_LINE_MEMBER(pc_state::pc_dack3_w){ pc_select_dma_channel(3, state); }
246271
247272I8237_INTERFACE( ibm5150_dma8237_config )
248273{
r19933r19934
354379   if ( m_out1 == 0 && state == 1 && m_u73_q2 == 0 )
355380   {
356381      m_u73_q2 = 1;
357      i8237_dreq0_w( m_dma8237, m_u73_q2 );
382      m_dma8237->dreq0_w( m_u73_q2 );
358383   }
359384   m_out1 = state;
360385}
r19933r19934
11351160
11361161void pc_state::fdc_dma_drq(bool state)
11371162{
1138   i8237_dreq2_w( m_dma8237, state);
1163   m_dma8237->dreq2_w( state );
11391164}
11401165
11411166static void pc_set_irq_line(running_machine &machine,int irq, int state)
r19933r19934
14381463MACHINE_START_MEMBER(pc_state,pc)
14391464{
14401465   m_pic8259 = machine().device("pic8259");
1441   m_dma8237 = machine().device("dma8237");
14421466   m_pit8253 = machine().device("pit8253");
1467   m_maincpu = machine().device<cpu_device>("maincpu" );
1468   m_maincpu->set_irq_acknowledge_callback(pc_irq_callback);
14431469
14441470   pc_fdc_interface *fdc = machine().device<pc_fdc_interface>("fdc");
14451471   fdc->setup_intrq_cb(pc_fdc_interface::line_cb(FUNC(pc_state::fdc_interrupt), this));
r19933r19934
14501476MACHINE_RESET_MEMBER(pc_state,pc)
14511477{
14521478   device_t *speaker = machine().device(SPEAKER_TAG);
1453   m_maincpu = machine().device<cpu_device>("maincpu" );
1454   m_maincpu->set_irq_acknowledge_callback(pc_irq_callback);
14551479
14561480   m_u73_q2 = 0;
14571481   m_out1 = 0;
14581482   m_pc_spkrdata = 0;
14591483   m_pc_input = 1;
1460   m_dma_channel = 0;
1484   m_dma_channel = -1;
1485   m_cur_eop = 0;
14611486   memset(m_dma_offset,0,sizeof(m_dma_offset));
14621487   m_ppi_portc_switch_high = 0;
14631488   m_ppi_speaker = 0;
r19933r19934
14791504   m_maincpu->set_irq_acknowledge_callback(pc_irq_callback);
14801505
14811506   m_pic8259 = machine().device("pic8259");
1482   m_dma8237 = NULL;
14831507   m_pit8253 = machine().device("pit8253");
14841508
14851509   /*
r19933r19934
15071531
15081532
15091533   m_pic8259 = machine().device("pic8259");
1510   m_dma8237 = NULL;
15111534   m_pit8253 = machine().device("pit8253");
15121535}
15131536
r19933r19934
15181541   m_out1 = 0;
15191542   m_pc_spkrdata = 0;
15201543   m_pc_input = 1;
1521   m_dma_channel = 0;
1544   m_dma_channel = -1;
15221545   memset(m_memboard,0xc,sizeof(m_memboard));   // check
15231546   memset(m_dma_offset,0,sizeof(m_dma_offset));
15241547   m_ppi_portc_switch_high = 0;
trunk/src/mess/includes/pc.h
r19933r19934
99
1010#include "machine/ins8250.h"
1111#include "machine/i8255.h"
12#include "machine/8237dma.h"
12#include "machine/am9517a.h"
1313#include "machine/serial.h"
1414#include "machine/ser_mouse.h"
1515#include "machine/pc_kbdc.h"
r19933r19934
2020public:
2121   pc_state(const machine_config &mconfig, device_type type, const char *tag)
2222      : driver_device(mconfig, type, tag)
23      , m_dma8237(*this, "dma8237")
2324      , m_pc_kbdc(*this, "pc_kbdc")
2425   {
2526   }
2627
2728   cpu_device *m_maincpu;
2829   device_t *m_pic8259;
29   device_t *m_dma8237;
30   optional_device<am9517a_device> m_dma8237;
3031   device_t *m_pit8253;
3132   optional_device<pc_kbdc_device>  m_pc_kbdc;
3233
r19933r19934
3738   UINT8   m_memboard[4];      /* used only by ec1840 and ec1841 */
3839   int m_dma_channel;
3940   UINT8 m_dma_offset[2][4];
41   int m_cur_eop;
4042   UINT8 m_pc_spkrdata;
4143   UINT8 m_pc_input;
4244   UINT8 m_pcjr_dor;
r19933r19934
141143
142144   void fdc_interrupt(bool state);
143145   void fdc_dma_drq(bool state);
146   void pc_select_dma_channel(int channel, bool state);
147   void pc_eop_w(int channel, bool state);
144148   DECLARE_FLOPPY_FORMATS( floppy_formats );
145149};
146150
147151/*----------- defined in machine/pc.c -----------*/
148152
149extern const i8237_interface ibm5150_dma8237_config;
153extern const struct am9517a_interface ibm5150_dma8237_config;
150154extern const struct pit8253_config ibm5150_pit8253_config;
151155extern const struct pit8253_config pcjr_pit8253_config;
152156extern const struct pit8253_config mc1502_pit8253_config;

Previous 199869 Revisions Next


© 1997-2024 The MAME Team