From c99cbedd3520f1fdebbd6838951c62051ee901cd Mon Sep 17 00:00:00 2001 From: Curt Coder Date: Wed, 5 Sep 2012 16:25:28 +0000 Subject: [PATCH] mos6560: Refactored interface to use devcb. (nw) --- src/emu/sound/mos6560.c | 88 +++++++++++++++++--------- src/emu/sound/mos6560.h | 55 ++++++++++------ src/mame/drivers/attckufo.c | 56 ++++------------- src/mess/drivers/vic20.c | 122 ++++++++++-------------------------- src/mess/includes/vic20.h | 8 ++- 5 files changed, 150 insertions(+), 179 deletions(-) diff --git a/src/emu/sound/mos6560.c b/src/emu/sound/mos6560.c index b0c2fc8991a..48da777661e 100644 --- a/src/emu/sound/mos6560.c +++ b/src/emu/sound/mos6560.c @@ -92,17 +92,17 @@ struct _mos6560_state int total_xsize, total_ysize, total_lines, total_vretracerate; /* DMA */ - mos6560_dma_read dma_read; - mos6560_dma_read_color dma_read_color; + devcb_resolved_read8 dma_read; + devcb_resolved_read8 dma_read_color; UINT8 last_data; /* lightpen */ - mos6560_lightpen_button_callback lightpen_button_cb; - mos6560_lightpen_x_callback lightpen_x_cb; - mos6560_lightpen_y_callback lightpen_y_cb; + devcb_resolved_read8 lightpen_button_cb; + devcb_resolved_read8 lightpen_x_cb; + devcb_resolved_read8 lightpen_y_cb; /* paddles */ - mos6560_paddle_callback paddle_cb[2]; + devcb_resolved_read8 paddle_cb[2]; /* sound part */ int tone1pos, tone2pos, tone3pos, @@ -154,9 +154,9 @@ INLINE const mos6560_interface *get_interface( device_t *device ) /* 2008-05 FP: lightpen code needs to read input port from vc20.c */ -#define LIGHTPEN_BUTTON ((mos6560->lightpen_button_cb != NULL) ? mos6560->lightpen_button_cb(device->machine()) : 0) -#define LIGHTPEN_X_VALUE ((mos6560->lightpen_x_cb != NULL) ? mos6560->lightpen_x_cb(device->machine()) : 0) -#define LIGHTPEN_Y_VALUE ((mos6560->lightpen_y_cb != NULL) ? mos6560->lightpen_y_cb(device->machine()) : 0) +#define LIGHTPEN_BUTTON ((!mos6560->lightpen_button_cb.isnull()) ? mos6560->lightpen_button_cb(0) : 0) +#define LIGHTPEN_X_VALUE ((!mos6560->lightpen_x_cb.isnull()) ? mos6560->lightpen_x_cb(0) : 0) +#define LIGHTPEN_Y_VALUE ((!mos6560->lightpen_y_cb.isnull()) ? mos6560->lightpen_y_cb(0) : 0) /* lightpen delivers values from internal counters * they do not start with the visual area or frame area */ @@ -198,6 +198,37 @@ INLINE const mos6560_interface *get_interface( device_t *device ) #define BACKGROUNDCOLOR (mos6560->reg[0x0f] >> 4) #define FRAMECOLOR (mos6560->reg[0x0f] & 0x07) + +static const rgb_t PALETTE[] = +{ +/* ripped from vice, a very excellent emulator */ + MAKE_RGB(0x00, 0x00, 0x00), + MAKE_RGB(0xff, 0xff, 0xff), + MAKE_RGB(0xf0, 0x00, 0x00), + MAKE_RGB(0x00, 0xf0, 0xf0), + + MAKE_RGB(0x60, 0x00, 0x60), + MAKE_RGB(0x00, 0xa0, 0x00), + MAKE_RGB(0x00, 0x00, 0xf0), + MAKE_RGB(0xd0, 0xd0, 0x00), + + MAKE_RGB(0xc0, 0xa0, 0x00), + MAKE_RGB(0xff, 0xa0, 0x00), + MAKE_RGB(0xf0, 0x80, 0x80), + MAKE_RGB(0x00, 0xff, 0xff), + + MAKE_RGB(0xff, 0x00, 0xff), + MAKE_RGB(0x00, 0xff, 0x00), + MAKE_RGB(0x00, 0xa0, 0xff), + MAKE_RGB(0xff, 0xff, 0x00) +}; + +PALETTE_INIT( mos6560 ) +{ + palette_set_colors(machine, 0, PALETTE, ARRAY_LENGTH(PALETTE)); +} + + /***************************************************************************** IMPLEMENTATION *****************************************************************************/ @@ -215,7 +246,7 @@ static void mos6560_draw_character( device_t *device, int ybegin, int yend, int for (y = ybegin; y <= yend; y++) { - code = mos6560->dma_read(device->machine(), (mos6560->chargenaddr + ch * mos6560->charheight + y) & 0x3fff); + code = mos6560->dma_read((mos6560->chargenaddr + ch * mos6560->charheight + y) & 0x3fff); mos6560->last_data = code; mos6560->bitmap->pix16(y + yoff, xoff + 0) = color[code >> 7]; mos6560->bitmap->pix16(y + yoff, xoff + 1) = color[(code >> 6) & 1]; @@ -240,7 +271,7 @@ static void mos6560_draw_character_multi( device_t *device, int ybegin, int yend for (y = ybegin; y <= yend; y++) { - code = mos6560->dma_read(device->machine(), (mos6560->chargenaddr + ch * mos6560->charheight + y) & 0x3fff); + code = mos6560->dma_read((mos6560->chargenaddr + ch * mos6560->charheight + y) & 0x3fff); mos6560->last_data = code; mos6560->bitmap->pix16(y + yoff, xoff + 0) = mos6560->bitmap->pix16(y + yoff, xoff + 1) = color[code >> 6]; @@ -301,9 +332,9 @@ static void mos6560_drawlines( device_t *device, int first, int last ) for (xoff = mos6560->xpos; (xoff < mos6560->xpos + mos6560->xsize) && (xoff < mos6560->total_xsize); xoff += 8, offs++) { - ch = mos6560->dma_read(device->machine(), (mos6560->videoaddr + offs) & 0x3fff); + ch = mos6560->dma_read((mos6560->videoaddr + offs) & 0x3fff); mos6560->last_data = ch; - attr = (mos6560->dma_read_color(device->machine(), (mos6560->videoaddr + offs) & 0x3fff)) & 0xf; + attr = (mos6560->dma_read_color((mos6560->videoaddr + offs) & 0x3fff)) & 0xf; if (mos6560->type == MOS6560_ATTACKUFO) { @@ -479,7 +510,7 @@ READ8_DEVICE_HANDLER( mos6560_port_r ) break; case 8: /* poti 1 */ case 9: /* poti 2 */ - val = (mos6560->paddle_cb != NULL) ? mos6560->paddle_cb[offset - 8](device->machine()) : mos6560->reg[offset]; + val = (!mos6560->paddle_cb->isnull()) ? mos6560->paddle_cb[offset - 8](0) : mos6560->reg[offset]; break; default: val = mos6560->reg[offset]; @@ -489,9 +520,9 @@ READ8_DEVICE_HANDLER( mos6560_port_r ) return val; } -UINT8 mos6560_bus_r( device_t *device ) +UINT8 mos6560_device::bus_r() { - mos6560_state *mos6560 = get_safe_token(device); + mos6560_state *mos6560 = get_safe_token(this); return mos6560->last_data; } @@ -527,6 +558,11 @@ UINT32 mos6560_video_update( device_t *device, bitmap_ind16 &bitmap, const recta return 0; } +UINT32 mos6560_device::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + return mos6560_video_update(this, bitmap, cliprect); +} + /***************************************************************************** SOUND IMPLEMENTATION *****************************************************************************/ @@ -820,18 +856,14 @@ static DEVICE_START( mos6560 ) mos6560->bitmap = auto_bitmap_ind16_alloc(device->machine(), width, height); - assert(intf->dma_read != NULL); - assert(intf->dma_read_color != NULL); - - mos6560->dma_read = intf->dma_read; - mos6560->dma_read_color = intf->dma_read_color; - - mos6560->lightpen_button_cb = intf->button_cb; - mos6560->lightpen_x_cb = intf->x_cb; - mos6560->lightpen_y_cb = intf->y_cb; - - mos6560->paddle_cb[0] = intf->paddle0_cb; - mos6560->paddle_cb[1] = intf->paddle1_cb; + // resolve callbacks + mos6560->dma_read.resolve(intf->dma_read, *device); + mos6560->dma_read_color.resolve(intf->dma_read_color, *device); + mos6560->lightpen_button_cb.resolve(intf->button_cb, *device); + mos6560->lightpen_x_cb.resolve(intf->x_cb, *device); + mos6560->lightpen_y_cb.resolve(intf->y_cb, *device); + mos6560->paddle_cb[0].resolve(intf->paddle0_cb, *device); + mos6560->paddle_cb[1].resolve(intf->paddle1_cb, *device); switch (mos6560->type) { diff --git a/src/emu/sound/mos6560.h b/src/emu/sound/mos6560.h index 2ec7c785d8e..6e9baafc2cf 100644 --- a/src/emu/sound/mos6560.h +++ b/src/emu/sound/mos6560.h @@ -15,15 +15,6 @@ TYPE DEFINITIONS ***************************************************************************/ -typedef UINT8 (*mos6560_lightpen_x_callback)(running_machine &machine); -typedef UINT8 (*mos6560_lightpen_y_callback)(running_machine &machine); -typedef UINT8 (*mos6560_lightpen_button_callback)(running_machine &machine); -typedef UINT8 (*mos6560_paddle_callback)(running_machine &machine); - -typedef int (*mos6560_dma_read)(running_machine &machine, int); -typedef int (*mos6560_dma_read_color)(running_machine &machine, int); - - typedef enum { MOS6560_ATTACKUFO, // this is a 6560VIC derivative, missing some of the features @@ -34,18 +25,18 @@ typedef enum typedef struct _mos6560_interface mos6560_interface; struct _mos6560_interface { - const char *screen; + const char *screen; - mos6560_type type; + mos6560_type type; - mos6560_lightpen_x_callback x_cb; - mos6560_lightpen_y_callback y_cb; - mos6560_lightpen_button_callback button_cb; + devcb_read8 x_cb; + devcb_read8 y_cb; + devcb_read8 button_cb; - mos6560_paddle_callback paddle0_cb, paddle1_cb; + devcb_read8 paddle0_cb, paddle1_cb; - mos6560_dma_read dma_read; - mos6560_dma_read_color dma_read_color; + devcb_read8 dma_read; + devcb_read8 dma_read_color; }; /*************************************************************************** @@ -97,6 +88,11 @@ public: // access to legacy token void *token() const { assert(m_token != NULL); return m_token; } + + UINT8 bus_r(); + + UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + protected: // device-level overrides virtual void device_config_complete(); @@ -121,6 +117,29 @@ extern const device_type MOS656X; MCFG_SOUND_ADD(_tag, MOS656X, 0) \ MCFG_DEVICE_CONFIG(_interface) +#define MCFG_MOS6560_ADD(_tag, _screen_tag, _clock, _config) \ + MCFG_SCREEN_ADD(_screen_tag, RASTER) \ + MCFG_SCREEN_REFRESH_RATE(MOS6560_VRETRACERATE) \ + MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) \ + MCFG_SCREEN_SIZE((MOS6560_XSIZE + 7) & ~7, MOS6560_YSIZE) \ + MCFG_SCREEN_VISIBLE_AREA(MOS6560_MAME_XPOS, MOS6560_MAME_XPOS + MOS6560_MAME_XSIZE - 1, MOS6560_MAME_YPOS, MOS6560_MAME_YPOS + MOS6560_MAME_YSIZE - 1) \ + MCFG_SCREEN_UPDATE_DEVICE(_tag, mos6560_device, screen_update) \ + MCFG_PALETTE_LENGTH(16) \ + MCFG_PALETTE_INIT(mos6560) \ + MCFG_SOUND_ADD(_tag, MOS656X, _clock) \ + MCFG_DEVICE_CONFIG(_config) + +#define MCFG_MOS6561_ADD(_tag, _screen_tag, _clock, _config) \ + MCFG_SCREEN_ADD(_screen_tag, RASTER) \ + MCFG_SCREEN_REFRESH_RATE(MOS6561_VRETRACERATE) \ + MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) \ + MCFG_SCREEN_SIZE((MOS6561_XSIZE + 7) & ~7, MOS6561_YSIZE) \ + MCFG_SCREEN_VISIBLE_AREA(MOS6561_MAME_XPOS, MOS6561_MAME_XPOS + MOS6561_MAME_XSIZE - 1, MOS6561_MAME_YPOS, MOS6561_MAME_YPOS + MOS6561_MAME_YSIZE - 1) \ + MCFG_SCREEN_UPDATE_DEVICE(_tag, mos6560_device, screen_update) \ + MCFG_PALETTE_LENGTH(16) \ + MCFG_PALETTE_INIT(mos6560) \ + MCFG_SOUND_ADD(_tag, MOS656X, _clock) \ + MCFG_DEVICE_CONFIG(_config) /*************************************************************************** I/O PROTOTYPES @@ -129,9 +148,9 @@ extern const device_type MOS656X; WRITE8_DEVICE_HANDLER( mos6560_port_w ); READ8_DEVICE_HANDLER( mos6560_port_r ); -UINT8 mos6560_bus_r( device_t *device ); void mos6560_raster_interrupt_gen( device_t *device ); UINT32 mos6560_video_update( device_t *device, bitmap_ind16 &bitmap, const rectangle &cliprect ); +extern PALETTE_INIT( mos6560 ); #endif /* __MOS6560_H__ */ diff --git a/src/mame/drivers/attckufo.c b/src/mame/drivers/attckufo.c index 462fa275dfb..44c92419328 100644 --- a/src/mame/drivers/attckufo.c +++ b/src/mame/drivers/attckufo.c @@ -66,40 +66,11 @@ public: DECLARE_READ8_MEMBER(attckufo_io_r); DECLARE_WRITE8_MEMBER(attckufo_io_w); + + DECLARE_READ8_MEMBER(dma_read); + DECLARE_READ8_MEMBER(dma_read_color); }; - - -static const rgb_t attckufo_palette[] = -{ -/* ripped from vice, a very excellent emulator */ - MAKE_RGB(0x00, 0x00, 0x00), - MAKE_RGB(0xff, 0xff, 0xff), - MAKE_RGB(0xf0, 0x00, 0x00), - MAKE_RGB(0x00, 0xf0, 0xf0), - - MAKE_RGB(0x60, 0x00, 0x60), - MAKE_RGB(0x00, 0xa0, 0x00), - MAKE_RGB(0x00, 0x00, 0xf0), - MAKE_RGB(0xd0, 0xd0, 0x00), - - MAKE_RGB(0xc0, 0xa0, 0x00), - MAKE_RGB(0xff, 0xa0, 0x00), - MAKE_RGB(0xf0, 0x80, 0x80), - MAKE_RGB(0x00, 0xff, 0xff), - - MAKE_RGB(0xff, 0x00, 0xff), - MAKE_RGB(0x00, 0xff, 0x00), - MAKE_RGB(0x00, 0xa0, 0xff), - MAKE_RGB(0xff, 0xff, 0x00) -}; - -static PALETTE_INIT( attckufo ) -{ - palette_set_colors(machine, 0, attckufo_palette, ARRAY_LENGTH(attckufo_palette)); -} - - READ8_MEMBER(attckufo_state::attckufo_io_r) { switch(offset) @@ -172,25 +143,24 @@ static SCREEN_UPDATE_IND16( attckufo ) return 0; } -static int attckufo_dma_read( running_machine &machine, int offset ) +READ8_MEMBER(attckufo_state::dma_read) { - attckufo_state *state = machine.driver_data(); - return state->m_maincpu->space(AS_PROGRAM)->read_byte(offset); + return m_maincpu->space(AS_PROGRAM)->read_byte(offset); } -static int attckufo_dma_read_color( running_machine &machine, int offset ) +READ8_MEMBER(attckufo_state::dma_read_color) { - attckufo_state *state = machine.driver_data(); - return state->m_maincpu->space(AS_PROGRAM)->read_byte(offset + 0x400); + return m_maincpu->space(AS_PROGRAM)->read_byte(offset + 0x400); } static const mos6560_interface attckufo_6560_intf = { "screen", /* screen */ MOS6560_ATTACKUFO, - NULL, NULL, NULL, /* lightgun cb */ - NULL, NULL, /* paddle cb */ - attckufo_dma_read, attckufo_dma_read_color /* DMA */ + DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, /* lightgun cb */ + DEVCB_NULL, DEVCB_NULL, /* paddle cb */ + DEVCB_DRIVER_MEMBER(attckufo_state, dma_read), + DEVCB_DRIVER_MEMBER(attckufo_state, dma_read_color) /* DMA */ }; @@ -209,8 +179,8 @@ static MACHINE_CONFIG_START( attckufo, attckufo_state ) MCFG_SCREEN_VISIBLE_AREA(0, 23*8 - 1, 0, 22*8 - 1) MCFG_SCREEN_UPDATE_STATIC(attckufo) - MCFG_PALETTE_LENGTH(ARRAY_LENGTH(attckufo_palette)) - MCFG_PALETTE_INIT(attckufo) + MCFG_PALETTE_LENGTH(16) + MCFG_PALETTE_INIT(mos6560) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") diff --git a/src/mess/drivers/vic20.c b/src/mess/drivers/vic20.c index 6486ad8f403..0a67ec4ed7a 100644 --- a/src/mess/drivers/vic20.c +++ b/src/mess/drivers/vic20.c @@ -123,7 +123,7 @@ enum READ8_MEMBER( vic20_state::read ) { - UINT8 data = mos6560_bus_r(m_vic); + UINT8 data = m_vic->bus_r(); int ram1 = 1, ram2 = 1, ram3 = 1; int blk1 = 1, blk2 = 1, blk3 = 1, blk5 = 1; @@ -250,7 +250,7 @@ WRITE8_MEMBER( vic20_state::write ) break; case COLOR: - m_color_ram[offset & 0x3ff] = data; + m_color_ram[offset & 0x3ff] = data & 0x0f; break; case IO2: io2 = 0; break; @@ -270,36 +270,6 @@ WRITE8_MEMBER( vic20_state::write ) // VIDEO //************************************************************************** -static const unsigned char mos6560_palette[] = -{ -// ripped from vice, a very excellent emulator -// black, white, red, cyan - 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0xf0, 0xf0, -// purple, green, blue, yellow - 0x60, 0x00, 0x60, 0x00, 0xa0, 0x00, 0x00, 0x00, 0xf0, 0xd0, 0xd0, 0x00, -// orange, light orange, pink, light cyan, - 0xc0, 0xa0, 0x00, 0xff, 0xa0, 0x00, 0xf0, 0x80, 0x80, 0x00, 0xff, 0xff, -// light violett, light green, light blue, light yellow - 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xa0, 0xff, 0xff, 0xff, 0x00 -}; - -static PALETTE_INIT( vic20 ) -{ - int i; - - for (i = 0; i < sizeof(mos6560_palette) / 3; i++) - { - palette_set_color_rgb(machine, i, mos6560_palette[i * 3], mos6560_palette[i * 3 + 1], mos6560_palette[i * 3 + 2]); - } -} - -static SCREEN_UPDATE_IND16( vic20 ) -{ - vic20_state *state = screen.machine().driver_data(); - mos6560_video_update(state->m_vic, bitmap, cliprect); - return 0; -} - static INTERRUPT_GEN( vic20_raster_interrupt ) { vic20_state *state = device->machine().driver_data(); @@ -644,52 +614,44 @@ static CBM_IEC_INTERFACE( cbm_iec_intf ) #define VC20ADDR2MOS6560ADDR(a) (((a) > 0x8000) ? ((a) & 0x1fff) : ((a) | 0x2000)) #define MOS6560ADDR2VC20ADDR(a) (((a) > 0x2000) ? ((a) & 0x1fff) : ((a) | 0x8000)) -static int vic20_dma_read_color( running_machine &machine, int offset ) +READ8_MEMBER( vic20_state::vic_dma_read_color ) { - vic20_state *state = machine.driver_data(); - - return state->m_color_ram[offset & 0x3ff]; + return m_color_ram[offset & 0x3ff]; } -static int vic20_dma_read( running_machine &machine, int offset ) +READ8_MEMBER( vic20_state::vic_dma_read ) { - address_space *program = machine.device(M6502_TAG)->memory().space(AS_PROGRAM); + address_space *program = m_maincpu->memory().space(AS_PROGRAM); return program->read_byte(MOS6560ADDR2VC20ADDR(offset)); } -static UINT8 vic20_lightx_cb( running_machine &machine ) +READ8_MEMBER( vic20_state::vic_lightx_cb ) { - return (machine.root_device().ioport("LIGHTX")->read_safe(0) & ~0x01); + return (ioport("LIGHTX")->read_safe(0) & ~0x01); } -static UINT8 vic20_lighty_cb( running_machine &machine ) +READ8_MEMBER( vic20_state::vic_lighty_cb ) { - return (machine.root_device().ioport("LIGHTY")->read_safe(0) & ~0x01); + return (ioport("LIGHTY")->read_safe(0) & ~0x01); } -static UINT8 vic20_lightbut_cb( running_machine &machine ) +READ8_MEMBER( vic20_state::vic_lightbut_cb ) { - return (((machine.root_device().ioport("CTRLSEL")->read() & 0xf0) == 0x20) && (machine.root_device().ioport("JOY")->read() & 0x40)); -} - -static UINT8 vic20_paddle0_cb( running_machine &machine ) -{ - return machine.root_device().ioport("PADDLE0")->read(); -} - -static UINT8 vic20_paddle1_cb( running_machine &machine ) -{ - return machine.root_device().ioport("PADDLE1")->read(); + return (((ioport("CTRLSEL")->read() & 0xf0) == 0x20) && (ioport("JOY")->read() & 0x40)); } static const mos6560_interface vic_ntsc_intf = { SCREEN_TAG, MOS6560, - vic20_lightx_cb, vic20_lighty_cb, vic20_lightbut_cb, // lightgun cb - vic20_paddle0_cb, vic20_paddle1_cb, // paddle cb - vic20_dma_read, vic20_dma_read_color // DMA + DEVCB_DRIVER_MEMBER(vic20_state, vic_lightx_cb), + DEVCB_DRIVER_MEMBER(vic20_state, vic_lighty_cb), + DEVCB_DRIVER_MEMBER(vic20_state, vic_lightbut_cb), + DEVCB_INPUT_PORT("PADDLE0"), + DEVCB_INPUT_PORT("PADDLE1"), + DEVCB_DRIVER_MEMBER(vic20_state, vic_dma_read), + DEVCB_DRIVER_MEMBER(vic20_state, vic_dma_read_color) }; @@ -701,9 +663,13 @@ static const mos6560_interface vic_pal_intf = { SCREEN_TAG, MOS6561, - vic20_lightx_cb, vic20_lighty_cb, vic20_lightbut_cb, // lightgun cb - vic20_paddle0_cb, vic20_paddle1_cb, // paddle cb - vic20_dma_read, vic20_dma_read_color // DMA + DEVCB_DRIVER_MEMBER(vic20_state, vic_lightx_cb), + DEVCB_DRIVER_MEMBER(vic20_state, vic_lighty_cb), + DEVCB_DRIVER_MEMBER(vic20_state, vic_lightbut_cb), + DEVCB_INPUT_PORT("PADDLE0"), + DEVCB_INPUT_PORT("PADDLE1"), + DEVCB_DRIVER_MEMBER(vic20_state, vic_dma_read), + DEVCB_DRIVER_MEMBER(vic20_state, vic_dma_read_color) }; @@ -820,20 +786,9 @@ static MACHINE_CONFIG_DERIVED( vic20_ntsc, vic20_common ) MCFG_CPU_PROGRAM_MAP(vic20_mem) MCFG_CPU_PERIODIC_INT(vic20_raster_interrupt, MOS656X_HRETRACERATE) - // video hardware - MCFG_SCREEN_ADD(SCREEN_TAG, RASTER) - MCFG_SCREEN_REFRESH_RATE(MOS6560_VRETRACERATE) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) // not accurate - MCFG_SCREEN_SIZE((MOS6560_XSIZE + 7) & ~7, MOS6560_YSIZE) - MCFG_SCREEN_VISIBLE_AREA(MOS6560_MAME_XPOS, MOS6560_MAME_XPOS + MOS6560_MAME_XSIZE - 1, MOS6560_MAME_YPOS, MOS6560_MAME_YPOS + MOS6560_MAME_YSIZE - 1) - MCFG_SCREEN_UPDATE_STATIC( vic20 ) - - MCFG_PALETTE_LENGTH(16) - MCFG_PALETTE_INIT( vic20 ) - - // sound hardware + // video/sound hardware MCFG_SPEAKER_STANDARD_MONO("mono") - MCFG_MOS656X_ADD(M6560_TAG, vic_ntsc_intf) + MCFG_MOS6560_ADD(M6560_TAG, SCREEN_TAG, MOS6560_CLOCK, vic_ntsc_intf) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) MCFG_SOUND_ADD("dac", DAC, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) @@ -857,27 +812,16 @@ static MACHINE_CONFIG_DERIVED( vic20_pal, vic20_common ) MCFG_CPU_PROGRAM_MAP(vic20_mem) MCFG_CPU_PERIODIC_INT(vic20_raster_interrupt, MOS656X_HRETRACERATE) - // video hardware - MCFG_SCREEN_ADD(SCREEN_TAG, RASTER) - MCFG_SCREEN_REFRESH_RATE(MOS6561_VRETRACERATE) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) // not accurate - MCFG_SCREEN_SIZE((MOS6561_XSIZE + 7) & ~7, MOS6561_YSIZE) - MCFG_SCREEN_VISIBLE_AREA(MOS6561_MAME_XPOS, MOS6561_MAME_XPOS + MOS6561_MAME_XSIZE - 1, MOS6561_MAME_YPOS, MOS6561_MAME_YPOS + MOS6561_MAME_YSIZE - 1) - MCFG_SCREEN_UPDATE_STATIC( vic20 ) - - MCFG_PALETTE_LENGTH(16) - MCFG_PALETTE_INIT( vic20 ) - - // devices - MCFG_VIC20_EXPANSION_SLOT_ADD(VIC20_EXPANSION_SLOT_TAG, MOS6561_CLOCK, expansion_intf, vic20_expansion_cards, NULL, NULL) - - // sound hardware + // video/sound hardware MCFG_SPEAKER_STANDARD_MONO("mono") - MCFG_MOS656X_ADD(M6560_TAG, vic_pal_intf) + MCFG_MOS6561_ADD(M6560_TAG, SCREEN_TAG, MOS6561_CLOCK, vic_pal_intf) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) MCFG_SOUND_ADD("dac", DAC, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) + // devices + MCFG_VIC20_EXPANSION_SLOT_ADD(VIC20_EXPANSION_SLOT_TAG, MOS6561_CLOCK, expansion_intf, vic20_expansion_cards, NULL, NULL) + // software lists MCFG_SOFTWARE_LIST_FILTER("cart_list", "PAL") MCFG_SOFTWARE_LIST_FILTER("disk_list", "PAL") diff --git a/src/mess/includes/vic20.h b/src/mess/includes/vic20.h index 10f71146eb6..099683a4304 100644 --- a/src/mess/includes/vic20.h +++ b/src/mess/includes/vic20.h @@ -52,7 +52,7 @@ public: required_device m_maincpu; required_device m_via0; required_device m_via1; - required_device m_vic; + required_device m_vic; required_device m_iec; required_device m_joy1; required_device m_joy2; @@ -67,6 +67,12 @@ public: DECLARE_READ8_MEMBER( read ); DECLARE_WRITE8_MEMBER( write ); + DECLARE_READ8_MEMBER( vic_lightx_cb ); + DECLARE_READ8_MEMBER( vic_lighty_cb ); + DECLARE_READ8_MEMBER( vic_lightbut_cb ); + DECLARE_READ8_MEMBER( vic_dma_read ); + DECLARE_READ8_MEMBER( vic_dma_read_color ); + DECLARE_READ8_MEMBER( via0_pa_r ); DECLARE_WRITE8_MEMBER( via0_pa_w );