Previous 15994 Revisions Next

r7161 Sunday 24th January, 2010 at 16:51:45 UTC by Curt Coder
[PET] Cleanup.
[src/mess/machine]pet.c

src/mess/machine/pet.c
r7160r7161
4040static emu_timer *datasette1_timer;
4141static emu_timer *datasette2_timer;
4242
43
44static READ8_HANDLER( pet_mc6845_register_r )
45{
46   const device_config *devconf = devtag_get_device(space->machine, "crtc");
47   return mc6845_register_r(devconf, offset);
48}
49
50static WRITE8_HANDLER( pet_mc6845_register_w )
51{
52   const device_config *devconf = devtag_get_device(space->machine, "crtc");
53   mc6845_register_w(devconf, offset, data);
54}
55
56static WRITE8_HANDLER( pet_mc6845_address_w )
57{
58   const device_config *devconf = devtag_get_device(space->machine, "crtc");
59   mc6845_address_w(devconf, offset, data);
60}
61
6243/* pia at 0xe810
6344   port a
6445    7 sense input (low for diagnostics)
r7160r7161
7354  cb1 video sync in
7455  cb2 cassette 1 motor out
7556*/
76static READ8_DEVICE_HANDLER( pet_pia0_port_a_read )
57static READ8_DEVICE_HANDLER( pia0_pa_r )
7758{
7859   /*
7960
r7160r7161
11192   return data;
11293}
11394
114static WRITE8_DEVICE_HANDLER( pet_pia0_port_a_write )
95static WRITE8_DEVICE_HANDLER( pia0_pa_w )
11596{
11697   /*
11798
r7160r7161
128109
129110   */
130111
112   /* key */
131113   pet_keyline_select = data & 0x0f;
132114}
133115
r7160r7161
166148}
167149
168150/* Keyboard handling for business keyboard */
169static READ8_DEVICE_HANDLER( petb_pia0_port_b_read )
151static READ8_DEVICE_HANDLER( petb_kin_r )
170152{
171153   UINT8 data = 0xff;
172154   pet_state *state = (pet_state *)device->machine->driver_data;
r7160r7161
196178}
197179
198180/* NOT WORKING - Just placeholder */
199static READ8_DEVICE_HANDLER( cass_1_r )
181static READ8_DEVICE_HANDLER( cass1_r )
200182{
201183   // cassette 1 read
202184   return (cassette_input(devtag_get_device(device->machine, "cassette1")) > +0.0) ? 1 : 0;
r7160r7161
209191   ieee488_eoi_w(ieeebus, device, data);
210192}
211193
212static WRITE8_DEVICE_HANDLER( cass_motor_1_w )
194static WRITE8_DEVICE_HANDLER( cass1_motor_w )
213195{
214196   if (!data)
215197   {
r7160r7161
223205   }
224206}
225207
208static WRITE_LINE_DEVICE_HANDLER( pia0_irq_w )
209{
210   pet_state *driver_state = (pet_state *)device->machine->driver_data;
211
212   driver_state->pia0_irq = state;
213   int level = (driver_state->pia0_irq | driver_state->pia1_irq | driver_state->via_irq) ? ASSERT_LINE : CLEAR_LINE;
214
215   cpu_set_input_line(device->machine->firstcpu, INPUT_LINE_IRQ0, level);
216}
217
218const pia6821_interface pet_pia0 =
219{
220   DEVCB_HANDLER(pia0_pa_r),      /* in_a_func */
221   DEVCB_HANDLER(kin_r),         /* in_b_func */
222   DEVCB_HANDLER(cass1_r),         /* in_ca1_func */
223   DEVCB_NULL,                  /* in_cb1_func */
224   DEVCB_NULL,                  /* in_ca2_func */
225   DEVCB_NULL,                  /* in_cb2_func */
226   DEVCB_HANDLER(pia0_pa_w),      /* out_a_func */
227   DEVCB_NULL,                  /* out_b_func */
228   DEVCB_HANDLER(eoi_w),         /* out_ca2_func */
229   DEVCB_HANDLER(cass1_motor_w),   /* out_cb2_func */
230   DEVCB_LINE(pia0_irq_w),         /* irq_a_func */
231   DEVCB_LINE(pia0_irq_w)         /* irq_b_func */
232};
233
234const pia6821_interface petb_pia0 =
235{
236   DEVCB_HANDLER(pia0_pa_r),      /* in_a_func */
237   DEVCB_HANDLER(petb_kin_r),      /* in_b_func */
238   DEVCB_HANDLER(cass1_r),         /* in_ca1_func */
239   DEVCB_NULL,                  /* in_cb1_func */
240   DEVCB_NULL,                  /* in_ca2_func */
241   DEVCB_NULL,                  /* in_cb2_func */
242   DEVCB_HANDLER(pia0_pa_w),      /* out_a_func */
243   DEVCB_NULL,                  /* out_b_func */
244   DEVCB_HANDLER(eoi_w),         /* out_ca2_func */
245   DEVCB_HANDLER(cass1_motor_w),   /* out_cb2_func */
246   DEVCB_LINE(pia0_irq_w),         /* irq_a_func */
247   DEVCB_LINE(pia0_irq_w)         /* irq_b_func */
248};
249
226250/* pia at 0xe820 (ieee488)
227251   port a data in
228252   port b data out
r7160r7161
268292   ieee488_dav_w(ieeebus, device, data);
269293}
270294
271static WRITE_LINE_DEVICE_HANDLER( pia0_irq_w )
272{
273   pet_state *driver_state = (pet_state *)device->machine->driver_data;
274
275   driver_state->pia0_irq = state;
276   int level = (driver_state->pia0_irq | driver_state->pia1_irq | driver_state->via_irq) ? ASSERT_LINE : CLEAR_LINE;
277
278   cpu_set_input_line(device->machine->firstcpu, INPUT_LINE_IRQ0, level);
279}
280
281295static WRITE_LINE_DEVICE_HANDLER( pia1_irq_w )
282296{
283297   pet_state *driver_state = (pet_state *)device->machine->driver_data;
r7160r7161
288302   cpu_set_input_line(device->machine->firstcpu, INPUT_LINE_IRQ0, level);
289303}
290304
291const pia6821_interface pet_pia0 =
292{
293   DEVCB_HANDLER(pet_pia0_port_a_read),   /* in_a_func */
294   DEVCB_HANDLER(kin_r),               /* in_b_func */
295   DEVCB_HANDLER(cass_1_r),            /* in_ca1_func */
296   DEVCB_NULL,                        /* in_cb1_func */
297   DEVCB_NULL,                        /* in_ca2_func */
298   DEVCB_NULL,                        /* in_cb2_func */
299   DEVCB_HANDLER(pet_pia0_port_a_write),   /* out_a_func */
300   DEVCB_NULL,                        /* out_b_func */
301   DEVCB_HANDLER(eoi_w),               /* out_ca2_func */
302   DEVCB_HANDLER(cass_motor_1_w),         /* out_cb2_func */
303   DEVCB_LINE(pia0_irq_w),               /* irq_a_func */
304   DEVCB_LINE(pia0_irq_w)               /* irq_b_func */
305};
306
307const pia6821_interface petb_pia0 =
308{
309   DEVCB_HANDLER(pet_pia0_port_a_read),   /* in_a_func */
310   DEVCB_HANDLER(petb_pia0_port_b_read),   /* in_b_func */
311   DEVCB_HANDLER(cass_1_r),            /* in_ca1_func */
312   DEVCB_NULL,                        /* in_cb1_func */
313   DEVCB_NULL,                        /* in_ca2_func */
314   DEVCB_NULL,                        /* in_cb2_func */
315   DEVCB_HANDLER(pet_pia0_port_a_write),   /* out_a_func */
316   DEVCB_NULL,                        /* out_b_func */
317   DEVCB_HANDLER(eoi_w),               /* out_ca2_func */
318   DEVCB_HANDLER(cass_motor_1_w),         /* out_cb2_func */
319   DEVCB_LINE(pia1_irq_w),               /* irq_a_func */
320   DEVCB_LINE(pia1_irq_w)               /* irq_b_func */
321};
322
323305const pia6821_interface pet_pia1 =
324306{
325307   DEVCB_DEVICE_HANDLER("ieee_bus", ieee488_dio_r),/* in_a_func */
r7160r7161
336318   DEVCB_LINE(pia1_irq_w)               /* irq_b_func */
337319};
338320
339static WRITE_LINE_DEVICE_HANDLER( gb_w )
340{
341   DBG_LOG(device->machine, 1, "address line", ("%d\n", state));
342   if (state) pet_font |= 1;
343   else pet_font &= ~1;
344}
345
346321/* userport, cassettes, rest ieee488
347322   ca1 userport
348323   ca2 character rom address line 11
r7160r7161
441416   }
442417}
443418
419static WRITE_LINE_DEVICE_HANDLER( gb_w )
420{
421   DBG_LOG(device->machine, 1, "address line", ("%d\n", state));
422   if (state) pet_font |= 1;
423   else pet_font &= ~1;
424}
425
444426static WRITE_LINE_DEVICE_HANDLER( via_irq_w )
445427{
446428   pet_state *driver_state = (pet_state *)device->machine->driver_data;
r7160r7161
478460   const device_config *via_0 = devtag_get_device(space->machine, "via6522_0");
479461   const device_config *pia_0 = devtag_get_device(space->machine, "pia_0");
480462   const device_config *pia_1 = devtag_get_device(space->machine, "pia_1");
463   const device_config *mc6845 = devtag_get_device(space->machine, "crtc");
481464
482465   if (offset < 0x10) ;
483466   else if (offset < 0x14) pia6821_w(pia_0, offset & 3, data);
r7160r7161
486469   else if (offset < 0x40) ;
487470   else if (offset < 0x50) via_w(via_0, offset & 0xf, data);
488471   else if (offset < 0x80) ;
489   else if (offset == 0x80) pet_mc6845_address_w(space, offset, data);
490   else if (offset == 0x81) pet_mc6845_register_w(space, offset, data);
472   else if (offset == 0x80) mc6845_address_w(mc6845, 0, data);
473   else if (offset == 0x81) mc6845_register_w(mc6845, 0, data);
491474}
492475
493476static READ8_HANDLER( cbm8096_io_r )
r7160r7161
495478   const device_config *via_0 = devtag_get_device(space->machine, "via6522_0");
496479   const device_config *pia_0 = devtag_get_device(space->machine, "pia_0");
497480   const device_config *pia_1 = devtag_get_device(space->machine, "pia_1");
481   const device_config *mc6845 = devtag_get_device(space->machine, "crtc");
498482
499483   int data = 0xff;
500484   if (offset < 0x10) ;
r7160r7161
504488   else if (offset < 0x40) ;
505489   else if (offset < 0x50) data = via_r(via_0, offset & 0xf);
506490   else if (offset < 0x80) ;
507   else if (offset == 0x81) data = pet_mc6845_register_r(space, offset);
491   else if (offset == 0x81) data = mc6845_register_r(mc6845, 0);
508492   return data;
509493}
510494

Previous 15994 Revisions Next


© 1998-2018 The MESS Team