Previous 15994 Revisions Next

r11233 Monday 18th April, 2011 at 14:15:19 UTC by Curt Coder
Refactored the M6510 to use device callbacks for port read/write. (no whatsnew)
[src/emu/cpu/m6502]m4510.c m6502.c m6502.h
[src/mess/drivers]apple3.c c128.c c16.c c64.c sbc6510.c
[src/mess/includes]c128.h c16.h c64.h
[src/mess/machine]c128.c c1551.c c16.c c64.c

src/emu/cpu/m6502/m4510.c
r11232r11233
153153
154154   UINT8    ddr;
155155   UINT8    port;
156   m6510_port_read_func port_read;
157   m6510_port_write_func port_write;
156   
157   devcb_resolved_read8   in_port_func;
158   devcb_resolved_write8   out_port_func;
158159};
159160
160161INLINE m4510_Regs *get_safe_token(device_t *device)
r11232r11233
202203   cpustate->interrupt_inhibit = 0;
203204   cpustate->rdmem_id = default_rdmem_id;
204205   cpustate->wrmem_id = default_wrmem_id;
205   cpustate->port_read = NULL;
206   cpustate->port_write = NULL;
207206   cpustate->irq_callback = irqcallback;
208207   cpustate->device = device;
209208   cpustate->space = device->space(AS_PROGRAM);
r11232r11233
217216      if ( intf->write_indexed_func )
218217         cpustate->wrmem_id = intf->write_indexed_func;
219218
220      if ( intf->port_read_func )
221         cpustate->port_read = intf->port_read_func;
222
223      if ( intf->port_write_func )
224         cpustate->port_write = intf->port_write_func;
219      devcb_resolve_read8(&cpustate->in_port_func, &intf->in_port_func, device);
220      devcb_resolve_write8(&cpustate->out_port_func, &intf->out_port_func, device);
225221   }
226222}
227223
r11232r11233
366362         result = cpustate->ddr;
367363         break;
368364      case 0x0001:   /* Data Port */
369         if (cpustate->port_read)
370            result = cpustate->port_read(cpustate->device, 0);
365         result = devcb_call_read8(&cpustate->in_port_func, 0);
371366         result = (cpustate->ddr & cpustate->port) | (~cpustate->ddr & result);
372367         break;
373368   }
r11232r11233
388383         break;
389384   }
390385
391   if (cpustate->port_write)
392      cpustate->port_write(cpustate->device, 0, m4510_get_port(downcast<legacy_cpu_device *>(&space->device())));
386   devcb_call_write8(&cpustate->out_port_func, 0, m4510_get_port(downcast<legacy_cpu_device *>(&space->device())));
393387}
394388
395389static ADDRESS_MAP_START(m4510_mem, AS_PROGRAM, 8)
src/emu/cpu/m6502/m6502.c
r11232r11233
8181
8282   UINT8    ddr;
8383   UINT8    port;
84   m6510_port_read_func port_read;
85   m6510_port_write_func port_write;
84   
85   devcb_resolved_read8   in_port_func;
86   devcb_resolved_write8   out_port_func;
8687};
8788
8889INLINE m6502_Regs *get_safe_token(device_t *device)
r11232r11233
142143   cpustate->insn = insn;
143144   cpustate->rdmem_id = default_rdmem_id;
144145   cpustate->wrmem_id = default_wdmem_id;
145   cpustate->port_read = NULL;
146   cpustate->port_write = NULL;
147146
148147   if ( intf )
149148   {
r11232r11233
153152      if ( intf->write_indexed_func )
154153         cpustate->wrmem_id = intf->write_indexed_func;
155154
156      if ( intf->port_read_func )
157         cpustate->port_read = intf->port_read_func;
158
159      if ( intf->port_write_func )
160         cpustate->port_write = intf->port_write_func;
155      devcb_resolve_read8(&cpustate->in_port_func, &intf->in_port_func, device);
156      devcb_resolve_write8(&cpustate->out_port_func, &intf->out_port_func, device);
161157   }
162158
163159   device->save_item(NAME(cpustate->pc.w.l));
r11232r11233
374370         result = cpustate->ddr;
375371         break;
376372      case 0x0001:   /* Data Port */
377         if (cpustate->port_read)
378            result = cpustate->port_read( cpustate->device, cpustate->ddr );
373         result = devcb_call_read8(&cpustate->in_port_func, cpustate->ddr);
379374         result = (cpustate->ddr & cpustate->port) | (~cpustate->ddr & result);
380375         break;
381376   }
r11232r11233
396391         break;
397392   }
398393
399   if (cpustate->port_write)
400      cpustate->port_write( cpustate->device, cpustate->ddr, cpustate->port & cpustate->ddr );
394   devcb_call_write8(&cpustate->out_port_func, cpustate->ddr, cpustate->port & cpustate->ddr);
401395}
402396
403397static ADDRESS_MAP_START(m6510_mem, AS_PROGRAM, 8)
src/emu/cpu/m6502/m6502.h
r11232r11233
5151   positiv edge sets overflow flag */
5252#define M6502_SET_OVERFLOW   1
5353
54typedef UINT8 (*m6510_port_read_func)(device_t *device, UINT8 direction);
55typedef void (*m6510_port_write_func)(device_t *device, UINT8 direction, UINT8 data);
5654
57
5855/* Optional interface to set callbacks */
5956typedef struct _m6502_interface m6502_interface;
6057struct _m6502_interface
6158{
6259   read8_space_func      read_indexed_func;
6360   write8_space_func      write_indexed_func;
64   m6510_port_read_func   port_read_func;
65   m6510_port_write_func   port_write_func;
61   devcb_read8            in_port_func;
62   devcb_write8         out_port_func;
6663};
6764
6865DECLARE_LEGACY_CPU_DEVICE(M6502, m6502);
src/mess/machine/c128.c
r11232r11233
10761076*/
10771077
10781078
1079void c128_m6510_port_write( device_t *device, UINT8 direction, UINT8 data )
1079WRITE8_DEVICE_HANDLER(c128_m6510_port_write)
10801080{
10811081   c128_state *state = device->machine().driver_data<c128_state>();
1082   
1083   UINT8 direction = offset; // HACK ALERT!
1084
10821085   /* if line is marked as input then keep current value */
10831086   data = (state->m_c64_port_data & ~direction) | (data & direction);
10841087
r11232r11233
11231126
11241127}
11251128
1126UINT8 c128_m6510_port_read( device_t *device, UINT8 direction )
1129READ8_DEVICE_HANDLER(c128_m6510_port_read)
11271130{
11281131   c128_state *state = device->machine().driver_data<c128_state>();
11291132   UINT8 data = state->m_c64_port_data;
src/mess/machine/c16.c
r11232r11233
6868  p7 serial data in, serial bus 5
6969*/
7070
71void c16_m7501_port_write( device_t *device, UINT8 direction, UINT8 data )
71WRITE8_DEVICE_HANDLER(c16_m7501_port_write)
7272{
7373   c16_state *state = device->machine().driver_data<c16_state>();
7474
r11232r11233
8282   cassette_change_state(state->m_cassette, BIT(data, 7) ? CASSETTE_MOTOR_DISABLED : CASSETTE_MOTOR_ENABLED, CASSETTE_MASK_MOTOR);
8383}
8484
85UINT8 c16_m7501_port_read( device_t *device, UINT8 direction )
85READ8_DEVICE_HANDLER(c16_m7501_port_read)
8686{
8787   c16_state *state = device->machine().driver_data<c16_state>();
8888   UINT8 data = 0xff;
src/mess/machine/c1551.c
r11232r11233
250250    c1551_port_r - M6510T port read
251251-------------------------------------------------*/
252252
253static UINT8 c1551_port_r( device_t *device, UINT8 direction )
253static READ8_DEVICE_HANDLER( c1551_port_r )
254254{
255255   /*
256256
r11232r11233
283283    c1551_port_w - M6510T port write
284284-------------------------------------------------*/
285285
286static void c1551_port_w( device_t *device, UINT8 direction, UINT8 data )
286static WRITE8_DEVICE_HANDLER( c1551_port_w )
287287{
288288   /*
289289
r11232r11233
326326{
327327   NULL,         /* read_indexed_func */
328328   NULL,         /* write_indexed_func */
329   c1551_port_r,   /* port_read_func */
330   c1551_port_w   /* port_write_func */
329   DEVCB_HANDLER(c1551_port_r),   /* port_read_func */
330   DEVCB_HANDLER(c1551_port_w)   /* port_write_func */
331331};
332332
333333/*-------------------------------------------------
src/mess/machine/c64.c
r11232r11233
546546  p6,7 not available on M6510
547547 */
548548
549void c64_m6510_port_write( device_t *device, UINT8 direction, UINT8 data )
549WRITE8_DEVICE_HANDLER(c64_m6510_port_write)
550550{
551551   c64_state *state = device->machine().driver_data<c64_state>();
552   
553   UINT8 direction = offset; // HACK ALERT!
552554
553555   /* if line is marked as input then keep current value */
554556   data = (state->m_port_data & ~direction) | (data & direction);
r11232r11233
595597
596598}
597599
598UINT8 c64_m6510_port_read( device_t *device, UINT8 direction )
600READ8_DEVICE_HANDLER(c64_m6510_port_read)
599601{
600602   c64_state *state = device->machine().driver_data<c64_state>();
601603   UINT8 data = state->m_port_data;
src/mess/includes/c128.h
r11232r11233
8888int c128_dma_read_color(running_machine &machine, int offset);
8989void c128_vic_interrupt(running_machine &machine, int level);
9090
91UINT8 c128_m6510_port_read(device_t *device, UINT8 direction);
92void c128_m6510_port_write(device_t *device, UINT8 direction, UINT8 data);
91extern READ8_DEVICE_HANDLER(c128_m6510_port_read);
92extern WRITE8_DEVICE_HANDLER(c128_m6510_port_write);
9393
9494extern const mos6526_interface c128_ntsc_cia0, c128_pal_cia0;
9595extern const mos6526_interface c128_ntsc_cia1, c128_pal_cia1;
src/mess/includes/c16.h
r11232r11233
4343
4444/*----------- defined in machine/c16.c -----------*/
4545
46UINT8 c16_m7501_port_read(device_t *device, UINT8 direction);
47void c16_m7501_port_write(device_t *device, UINT8 direction, UINT8 data);
46extern READ8_DEVICE_HANDLER(c16_m7501_port_read);
47extern WRITE8_DEVICE_HANDLER(c16_m7501_port_write);
4848
4949extern WRITE8_HANDLER(c16_6551_port_w);
5050extern READ8_HANDLER(c16_6551_port_r);
src/mess/includes/c64.h
r11232r11233
7575
7676/* private area */
7777
78UINT8 c64_m6510_port_read(device_t *device, UINT8 direction);
79void c64_m6510_port_write(device_t *device, UINT8 direction, UINT8 data);
78extern READ8_DEVICE_HANDLER(c64_m6510_port_read);
79extern WRITE8_DEVICE_HANDLER(c64_m6510_port_write);
8080
8181READ8_HANDLER ( c64_colorram_read );
8282WRITE8_HANDLER ( c64_colorram_write );
src/mess/drivers/apple3.c
r11232r11233
3737{
3838   apple3_indexed_read,   /* read_indexed_func */
3939   apple3_indexed_write,   /* write_indexed_func */
40   NULL,               /* port_read_func */
41   NULL,               /* port_write_func */
40   DEVCB_NULL,            /* port_read_func */
41   DEVCB_NULL            /* port_write_func */
4242};
4343
4444#ifdef UNUSED_FUNCTION
src/mess/drivers/c128.c
r11232r11233
654654{
655655   NULL,               /* read_indexed_func */
656656   NULL,               /* write_indexed_func */
657   c128_m6510_port_read,   /* port_read_func */
658   c128_m6510_port_write,   /* port_write_func */
657   DEVCB_HANDLER(c128_m6510_port_read),   /* port_read_func */
658   DEVCB_HANDLER(c128_m6510_port_write)   /* port_write_func */
659659};
660660
661661static CBM_IEC_DAISY( c128_iec_bus )
src/mess/drivers/c16.c
r11232r11233
413413{
414414   NULL,               /* read_indexed_func */
415415   NULL,               /* write_indexed_func */
416   c16_m7501_port_read,   /* port_read_func */
417   c16_m7501_port_write   /* port_write_func */
416   DEVCB_HANDLER(c16_m7501_port_read),   /* port_read_func */
417   DEVCB_HANDLER(c16_m7501_port_write)   /* port_write_func */
418418};
419419
420420static CBM_IEC_DAISY( c16_iec_no_drives )
src/mess/drivers/c64.c
r11232r11233
548548{
549549   NULL,
550550   NULL,
551   c64_m6510_port_read,
552   c64_m6510_port_write
551   DEVCB_HANDLER(c64_m6510_port_read),
552   DEVCB_HANDLER(c64_m6510_port_write)
553553};
554554
555555static CBM_IEC_DAISY( cbm_iec_daisy )
src/mess/drivers/sbc6510.c
r11232r11233
5858{
5959   NULL,
6060   NULL,
61   NULL,
62   NULL
61   DEVCB_NULL,
62   DEVCB_NULL
6363};
6464
6565static const ay8910_interface sbc6510_ay_interface =

Previous 15994 Revisions Next


© 1998-2018 The MESS Team