diff options
Diffstat (limited to 'src/mess')
90 files changed, 958 insertions, 1766 deletions
diff --git a/src/mess/drivers/a6809.c b/src/mess/drivers/a6809.c index 55ac980a4e9..ca594096cb4 100644 --- a/src/mess/drivers/a6809.c +++ b/src/mess/drivers/a6809.c @@ -126,25 +126,6 @@ MACHINE_RESET_MEMBER( a6809_state, a6809) m_via->write_pb7(0); } -static MC6845_UPDATE_ROW( a6809_update_row ) -{ -} - -static MC6845_INTERFACE( a6809_crtc6845_interface ) -{ - false, - 0,0,0,0, - 12, - NULL, - a6809_update_row, - NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - NULL -}; - READ8_MEMBER( a6809_state::videoram_r ) { offset += m_start_address; @@ -266,7 +247,9 @@ static MACHINE_CONFIG_START( a6809, a6809_state ) MCFG_VIA6522_CB2_HANDLER(WRITELINE(a6809_state, cass_w)) MCFG_VIA6522_IRQ_HANDLER(DEVWRITELINE("maincpu", m6809e_device, irq_line)) - MCFG_MC6845_ADD("mc6845", MC6845, "screen", XTAL_4MHz / 2, a6809_crtc6845_interface) + MCFG_MC6845_ADD("mc6845", MC6845, "screen", XTAL_4MHz / 2) + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(12) MCFG_DEVICE_ADD("saa5050", SAA5050, 6000000) MCFG_SAA5050_D_CALLBACK(READ8(a6809_state, videoram_r)) diff --git a/src/mess/drivers/alphatro.c b/src/mess/drivers/alphatro.c index f167875ca75..626632b52f1 100644 --- a/src/mess/drivers/alphatro.c +++ b/src/mess/drivers/alphatro.c @@ -77,6 +77,7 @@ public: DECLARE_PALETTE_INIT(alphatro); TIMER_DEVICE_CALLBACK_MEMBER(timer_c); TIMER_DEVICE_CALLBACK_MEMBER(timer_p); + MC6845_UPDATE_ROW(crtc_update_row); required_shared_ptr<UINT8> m_p_videoram; UINT8 *m_p_chargen; UINT8 m_flashcnt; @@ -154,12 +155,11 @@ void alphatro_state::video_start() m_p_chargen = memregion("chargen")->base(); } -static MC6845_UPDATE_ROW( alphatro_update_row ) +MC6845_UPDATE_ROW( alphatro_state::crtc_update_row ) { - alphatro_state *state = device->machine().driver_data<alphatro_state>(); - const rgb_t *pens = state->m_palette->palette()->entry_list_raw(); - bool palette = BIT(state->ioport("CONFIG")->read(), 5); - if (y==0) state->m_flashcnt++; + const rgb_t *pens = m_palette->palette()->entry_list_raw(); + bool palette = BIT(ioport("CONFIG")->read(), 5); + if (y==0) m_flashcnt++; bool inv; UINT8 chr,gfx,attr,bg,fg; UINT16 mem,x; @@ -169,8 +169,8 @@ static MC6845_UPDATE_ROW( alphatro_update_row ) { inv = (x == cursor_x); mem = (ma + x) & 0x7ff; - chr = state->m_p_videoram[mem]; - attr = state->m_p_videoram[mem | 0x800]; + chr = m_p_videoram[mem]; + attr = m_p_videoram[mem | 0x800]; fg = (palette) ? 8 : attr & 7; // amber or RGB bg = (palette) ? 0 : (attr & 0x38) >> 3; @@ -180,13 +180,13 @@ static MC6845_UPDATE_ROW( alphatro_update_row ) chr &= 0x7f; } - if (BIT(attr, 6) & BIT(state->m_flashcnt, 4)) // flashing + if (BIT(attr, 6) & BIT(m_flashcnt, 4)) // flashing { inv ^= 1; } /* get pattern of pixels for that character scanline */ - gfx = state->m_p_chargen[(chr<<4) | ra]; + gfx = m_p_chargen[(chr<<4) | ra]; if (inv) { @@ -414,21 +414,6 @@ PALETTE_INIT_MEMBER(alphatro_state, alphatro) } -static MC6845_INTERFACE( alphatro_crtc6845_interface ) -{ - false, - 0,0,0,0, - 8, - NULL, - alphatro_update_row, - NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - NULL -}; - TIMER_DEVICE_CALLBACK_MEMBER(alphatro_state::timer_c) { m_cass_data[3]++; @@ -494,7 +479,10 @@ static MACHINE_CONFIG_START( alphatro, alphatro_state ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) /* Devices */ - MCFG_MC6845_ADD("crtc", MC6845, "screen", XTAL_12_288MHz / 8, alphatro_crtc6845_interface) // clk unknown + MCFG_MC6845_ADD("crtc", MC6845, "screen", XTAL_12_288MHz / 8) // clk unknown + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_MC6845_UPDATE_ROW_CB(alphatro_state, crtc_update_row) MCFG_DEVICE_ADD("usart", I8251, 0) MCFG_I8251_TXD_HANDLER(WRITELINE(alphatro_state, txdata_callback)) diff --git a/src/mess/drivers/amstrad.c b/src/mess/drivers/amstrad.c index 41d37f4fac9..2bb009279f4 100644 --- a/src/mess/drivers/amstrad.c +++ b/src/mess/drivers/amstrad.c @@ -875,7 +875,12 @@ static MACHINE_CONFIG_START( amstrad_nofdc, amstrad_state ) MCFG_PALETTE_ADD("palette", 32) MCFG_PALETTE_INIT_OWNER(amstrad_state,amstrad_cpc) - MCFG_MC6845_ADD( "mc6845", MC6845, NULL, XTAL_16MHz / 16, amstrad_mc6845_intf ) + MCFG_MC6845_ADD("mc6845", MC6845, NULL, XTAL_16MHz / 16) + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(16) + MCFG_MC6845_OUT_DE_CB(WRITELINE(amstrad_state, amstrad_de_changed)) + MCFG_MC6845_OUT_HSYNC_CB(WRITELINE(amstrad_state, amstrad_hsync_changed)) + MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(amstrad_state, amstrad_vsync_changed)) MCFG_VIDEO_START_OVERRIDE(amstrad_state,amstrad) @@ -961,7 +966,12 @@ static MACHINE_CONFIG_START( cpcplus, amstrad_state ) MCFG_PALETTE_ADD("palette", 4096) MCFG_PALETTE_INIT_OWNER(amstrad_state,amstrad_plus) - MCFG_MC6845_ADD( "mc6845", MC6845, NULL, XTAL_40MHz / 40, amstrad_plus_mc6845_intf ) + MCFG_MC6845_ADD("mc6845", MC6845, NULL, XTAL_40MHz / 40) + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(16) + MCFG_MC6845_OUT_DE_CB(WRITELINE(amstrad_state, amstrad_plus_de_changed)) + MCFG_MC6845_OUT_HSYNC_CB(WRITELINE(amstrad_state, amstrad_plus_hsync_changed)) + MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(amstrad_state, amstrad_plus_vsync_changed)) MCFG_VIDEO_START_OVERRIDE(amstrad_state,amstrad) @@ -1031,7 +1041,12 @@ static MACHINE_CONFIG_START( gx4000, amstrad_state ) MCFG_PALETTE_ADD("palette", 4096) MCFG_PALETTE_INIT_OWNER(amstrad_state,amstrad_plus) - MCFG_MC6845_ADD( "mc6845", MC6845, NULL, XTAL_40MHz / 40, amstrad_plus_mc6845_intf ) + MCFG_MC6845_ADD("mc6845", MC6845, NULL, XTAL_40MHz / 40) + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(16) + MCFG_MC6845_OUT_DE_CB(WRITELINE(amstrad_state, amstrad_plus_de_changed)) + MCFG_MC6845_OUT_HSYNC_CB(WRITELINE(amstrad_state, amstrad_plus_hsync_changed)) + MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(amstrad_state, amstrad_plus_vsync_changed)) MCFG_VIDEO_START_OVERRIDE(amstrad_state,amstrad) diff --git a/src/mess/drivers/amust.c b/src/mess/drivers/amust.c index 3be6c0502df..7df7a17ac73 100644 --- a/src/mess/drivers/amust.c +++ b/src/mess/drivers/amust.c @@ -125,6 +125,7 @@ public: DECLARE_WRITE8_MEMBER(port0d_w); DECLARE_WRITE8_MEMBER(kbd_put); INTERRUPT_GEN_MEMBER(irq_vs); + MC6845_UPDATE_ROW(crtc_update_row); UINT8 *m_p_videoram; const UINT8 *m_p_chargen; required_device<palette_device> m_palette; @@ -320,10 +321,9 @@ static GFXDECODE_START( amust ) GFXDECODE_ENTRY( "chargen", 0x0000, amust_charlayout, 0, 1 ) GFXDECODE_END -MC6845_UPDATE_ROW( amust_update_row ) +MC6845_UPDATE_ROW( amust_state::crtc_update_row ) { - amust_state *state = device->machine().driver_data<amust_state>(); - const rgb_t *palette = state->m_palette->palette()->entry_list_raw(); + const rgb_t *palette = m_palette->palette()->entry_list_raw(); UINT8 chr,gfx,inv; UINT16 mem,x; UINT32 *p = &bitmap.pix32(y); @@ -332,9 +332,9 @@ MC6845_UPDATE_ROW( amust_update_row ) { inv = (x == cursor_x) ? 0xff : 0; mem = (ma + x) & 0x7ff; - chr = state->m_p_videoram[mem]; + chr = m_p_videoram[mem]; if (ra < 8) - gfx = state->m_p_chargen[(chr<<3) | ra] ^ inv; + gfx = m_p_chargen[(chr<<3) | ra] ^ inv; else gfx = inv; @@ -350,21 +350,6 @@ MC6845_UPDATE_ROW( amust_update_row ) } } -static MC6845_INTERFACE( amust_crtc ) -{ - false, - 0,0,0,0, /* visarea adjustment */ - 8, /* number of dots per character */ - NULL, - amust_update_row, /* handler to display a scanline */ - NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - NULL -}; - MACHINE_RESET_MEMBER( amust_state, amust ) { m_p_chargen = memregion("chargen")->base(); @@ -415,7 +400,11 @@ static MACHINE_CONFIG_START( amust, amust_state ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) /* Devices */ - MCFG_MC6845_ADD("crtc", H46505, "screen", XTAL_14_31818MHz / 8, amust_crtc) + MCFG_MC6845_ADD("crtc", H46505, "screen", XTAL_14_31818MHz / 8) + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_MC6845_UPDATE_ROW_CB(amust_state, crtc_update_row) + MCFG_DEVICE_ADD("keybd", GENERIC_KEYBOARD, 0) MCFG_GENERIC_KEYBOARD_CB(WRITE8(amust_state, kbd_put)) MCFG_UPD765A_ADD("fdc", false, true) diff --git a/src/mess/drivers/applix.c b/src/mess/drivers/applix.c index 6cea23d6ac3..0af94b4d305 100644 --- a/src/mess/drivers/applix.c +++ b/src/mess/drivers/applix.c @@ -132,6 +132,7 @@ public: DECLARE_WRITE8_MEMBER( p3_write ); TIMER_DEVICE_CALLBACK_MEMBER(cass_timer); DECLARE_DRIVER_INIT(applix); + MC6845_UPDATE_ROW(crtc_update_row); UINT8 m_video_latch; UINT8 m_pa; virtual void machine_reset(); @@ -771,28 +772,27 @@ void applix_state::video_start() { } -static MC6845_UPDATE_ROW( applix_update_row ) +MC6845_UPDATE_ROW( applix_state::crtc_update_row ) { // The display is bitmapped. 2 modes are supported here, 320x200x16 and 640x200x4. // Need to display a border colour. // There is a monochrome mode, but no info found as yet. - applix_state *state = device->machine().driver_data<applix_state>(); - const rgb_t *palette = state->m_palette->palette()->entry_list_raw(); + const rgb_t *palette = m_palette->palette()->entry_list_raw(); UINT8 i; UINT16 chr,x; - UINT32 mem, vidbase = (state->m_video_latch & 15) << 14, *p = &bitmap.pix32(y); + UINT32 mem, vidbase = (m_video_latch & 15) << 14, *p = &bitmap.pix32(y); for (x = 0; x < x_count; x++) { mem = vidbase + ma + x + (ra<<12); - chr = state->m_base[mem]; + chr = m_base[mem]; - if (BIT(state->m_pa, 3)) + if (BIT(m_pa, 3)) // 640 x 200 x 4of16 mode { for (i = 0; i < 8; i++) { - *p++ = palette[state->m_palette_latch[chr>>14]]; + *p++ = palette[m_palette_latch[chr>>14]]; chr <<= 2; } } @@ -809,21 +809,6 @@ static MC6845_UPDATE_ROW( applix_update_row ) } } -static MC6845_INTERFACE( applix_crtc ) -{ - false, // should show a border - 0,0,0,0, /* visarea adjustment */ - 8, /* number of dots per character */ - NULL, - applix_update_row, /* handler to display a scanline */ - NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(applix_state, vsync_w), - NULL -}; - WRITE_LINE_MEMBER( applix_state::vsync_w ) { m_via->write_ca2(state); @@ -886,7 +871,12 @@ static MACHINE_CONFIG_START( applix, applix_state ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.50) /* Devices */ - MCFG_MC6845_ADD("crtc", MC6845, "screen", 1875000, applix_crtc) // 6545 + MCFG_MC6845_ADD("crtc", MC6845, "screen", 1875000) // 6545 + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_MC6845_UPDATE_ROW_CB(applix_state, crtc_update_row) + MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(applix_state, vsync_w)) + MCFG_DEVICE_ADD("via6522", VIA6522, 0) MCFG_VIA6522_READPB_HANDLER(READ8(applix_state, applix_pb_r)) // in CB1 kbd clk diff --git a/src/mess/drivers/apricot.c b/src/mess/drivers/apricot.c index ab14bc15438..4d3521d11db 100644 --- a/src/mess/drivers/apricot.c +++ b/src/mess/drivers/apricot.c @@ -92,6 +92,8 @@ public: DECLARE_WRITE_LINE_MEMBER( data_selector_dtr_w ) { m_data_selector_dtr = state; }; DECLARE_WRITE_LINE_MEMBER( data_selector_rts_w ) { m_data_selector_rts = state; }; + MC6845_UPDATE_ROW( crtc_update_row ); + virtual void machine_start(); int m_data_selector_dtr; @@ -224,19 +226,18 @@ UINT32 apricot_state::screen_update_apricot(screen_device &screen, bitmap_rgb32 return 0; } -static MC6845_UPDATE_ROW( apricot_update_row ) +MC6845_UPDATE_ROW( apricot_state::crtc_update_row ) { - apricot_state *state = device->machine().driver_data<apricot_state>(); - UINT8 *ram = state->m_ram->pointer(); - const pen_t *pen = state->m_palette->pens(); + UINT8 *ram = m_ram->pointer(); + const pen_t *pen = m_palette->pens(); int i, x; - if (state->m_video_mode) + if (m_video_mode) { // text mode for (i = 0; i < x_count; i++) { - UINT16 code = state->m_screen_buffer[(ma + i) & 0x7ff]; + UINT16 code = m_screen_buffer[(ma + i) & 0x7ff]; UINT16 offset = ((code & 0x7ff) << 5) | (ra << 1); UINT16 data = ram[offset + 1] << 8 | ram[offset]; int fill = 0; @@ -260,22 +261,6 @@ static MC6845_UPDATE_ROW( apricot_update_row ) } } -static MC6845_INTERFACE( apricot_mc6845_intf ) -{ - false, - 0,0,0,0, - 10, - NULL, - apricot_update_row, - NULL, - DEVCB_DRIVER_LINE_MEMBER(apricot_state, apricot_mc6845_de), - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - NULL -}; - - //************************************************************************** // MACHINE EMULATION //************************************************************************** @@ -346,7 +331,11 @@ static MACHINE_CONFIG_START( apricot, apricot_state ) MCFG_PALETTE_ADD_MONOCHROME_GREEN_HIGHLIGHT("palette") - MCFG_MC6845_ADD("ic30", MC6845, "screen", XTAL_15MHz / 10, apricot_mc6845_intf) + MCFG_MC6845_ADD("ic30", MC6845, "screen", XTAL_15MHz / 10) + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(10) + MCFG_MC6845_UPDATE_ROW_CB(apricot_state, crtc_update_row) + MCFG_MC6845_OUT_DE_CB(WRITELINE(apricot_state, apricot_mc6845_de)) // sound hardware MCFG_SPEAKER_STANDARD_MONO("mono") diff --git a/src/mess/drivers/apricotp.c b/src/mess/drivers/apricotp.c index 5987e571f55..488b9986191 100644 --- a/src/mess/drivers/apricotp.c +++ b/src/mess/drivers/apricotp.c @@ -50,31 +50,6 @@ enum // VIDEO //************************************************************************** -//------------------------------------------------- -// mc6845_interface crtc_intf -//------------------------------------------------- - -static MC6845_UPDATE_ROW( fp_update_row ) -{ -} - - -static MC6845_INTERFACE( crtc_intf ) -{ - false, - 0,0,0,0, - 8, - NULL, - fp_update_row, - NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - NULL -}; - - void fp_state::video_start() { // allocate memory @@ -529,7 +504,10 @@ static MACHINE_CONFIG_START( fp, fp_state ) MCFG_PALETTE_ADD("palette", 16) MCFG_GFXDECODE_ADD("gfxdecode", "palette", act_f1) - MCFG_MC6845_ADD(MC6845_TAG, MC6845, SCREEN_CRT_TAG, 4000000, crtc_intf) + + MCFG_MC6845_ADD(MC6845_TAG, MC6845, SCREEN_CRT_TAG, 4000000) + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) // sound hardware MCFG_SPEAKER_STANDARD_MONO("mono") diff --git a/src/mess/drivers/b16.c b/src/mess/drivers/b16.c index 3f725d39271..c6acf3922a6 100644 --- a/src/mess/drivers/b16.c +++ b/src/mess/drivers/b16.c @@ -255,22 +255,6 @@ void b16_state::machine_reset() } - -static MC6845_INTERFACE( mc6845_intf ) -{ - false, /* show border area */ - 0,0,0,0, /* visarea adjustment */ - 8, /* number of pixels per video memory address */ - NULL, /* before pixel update callback */ - NULL, /* row update callback */ - NULL, /* after pixel update callback */ - DEVCB_NULL, /* callback for display state changes */ - DEVCB_NULL, /* callback for cursor state changes */ - DEVCB_NULL, /* HSYNC callback */ - DEVCB_NULL, /* VSYNC callback */ - NULL /* update address callback */ -}; - READ8_MEMBER(b16_state::memory_read_byte) { address_space& prog_space = m_maincpu->space(AS_PROGRAM); @@ -300,7 +284,10 @@ static MACHINE_CONFIG_START( b16, b16_state ) MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 400-1) MCFG_SCREEN_PALETTE("palette") - MCFG_MC6845_ADD("crtc", H46505, "screen", XTAL_14_31818MHz/5, mc6845_intf) /* unknown clock, hand tuned to get ~60 fps */ + MCFG_MC6845_ADD("crtc", H46505, "screen", XTAL_14_31818MHz/5) /* unknown clock, hand tuned to get ~60 fps */ + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_DEVICE_ADD("8237dma", AM9517A, XTAL_14_31818MHz/2) MCFG_I8237_IN_MEMR_CB(READ8(b16_state, memory_read_byte)) MCFG_I8237_OUT_MEMW_CB(WRITE8(b16_state, memory_write_byte)) diff --git a/src/mess/drivers/bbc.c b/src/mess/drivers/bbc.c index 617c6650ecf..10d83389261 100644 --- a/src/mess/drivers/bbc.c +++ b/src/mess/drivers/bbc.c @@ -688,7 +688,12 @@ static MACHINE_CONFIG_START( bbca, bbc_state ) MCFG_SAA5050_SCREEN_SIZE(40, 24, 40) /* crtc */ - MCFG_MC6845_ADD("mc6845", MC6845, "screen", 2000000, bbc_mc6845_intf) + MCFG_MC6845_ADD("mc6845", MC6845, "screen", 2000000) + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_MC6845_UPDATE_ROW_CB(bbc_state, crtc_update_row) + MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(bbc_state, bbc_vsync)) + MCFG_VIDEO_START_OVERRIDE(bbc_state, bbca) MCFG_DEFAULT_LAYOUT(layout_bbc) @@ -909,7 +914,12 @@ static MACHINE_CONFIG_START( bbcm, bbc_state ) MCFG_SAA5050_SCREEN_SIZE(40, 24, 40) /* crtc */ - MCFG_MC6845_ADD("mc6845", MC6845, "screen", 2000000, bbc_mc6845_intf) + MCFG_MC6845_ADD("mc6845", MC6845, "screen", 2000000) + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_MC6845_UPDATE_ROW_CB(bbc_state, crtc_update_row) + MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(bbc_state, bbc_vsync)) + MCFG_VIDEO_START_OVERRIDE(bbc_state, bbcm) /* sound hardware */ diff --git a/src/mess/drivers/bigbord2.c b/src/mess/drivers/bigbord2.c index 3b4c7c019df..c086110a74f 100644 --- a/src/mess/drivers/bigbord2.c +++ b/src/mess/drivers/bigbord2.c @@ -135,6 +135,7 @@ public: DECLARE_WRITE8_MEMBER(memory_write_byte); DECLARE_READ8_MEMBER(io_read_byte); DECLARE_WRITE8_MEMBER(io_write_byte); + MC6845_UPDATE_ROW(crtc_update_row); UINT8 *m_p_chargen; /* character ROM */ UINT8 *m_p_videoram; /* Video RAM */ UINT8 *m_p_attribram; /* Attribute RAM */ @@ -511,10 +512,9 @@ static GFXDECODE_START( bigbord2 ) GFXDECODE_ENTRY( "chargen", 0x0000, bigbord2_charlayout, 0, 1 ) GFXDECODE_END -MC6845_UPDATE_ROW( bigbord2_update_row ) +MC6845_UPDATE_ROW( bigbord2_state::crtc_update_row ) { - bigbord2_state *state = device->machine().driver_data<bigbord2_state>(); - const rgb_t *palette = state->m_palette->palette()->entry_list_raw(); + const rgb_t *palette = m_palette->palette()->entry_list_raw(); UINT8 chr,gfx,inv; UINT16 mem,x; UINT32 *p = &bitmap.pix32(y); @@ -523,11 +523,11 @@ MC6845_UPDATE_ROW( bigbord2_update_row ) { inv=0; mem = (ma + x) & 0x7ff; - if (BIT(state->m_p_attribram[mem], 7)) inv^=0xff; - chr = state->m_p_videoram[mem]; + if (BIT(m_p_attribram[mem], 7)) inv^=0xff; + chr = m_p_videoram[mem]; /* get pattern of pixels for that character scanline */ - gfx = state->m_p_chargen[(chr<<4) | ra ] ^ inv; + gfx = m_p_chargen[(chr<<4) | ra ] ^ inv; /* Display a scanline of a character */ *p++ = palette[BIT( gfx, 7 )]; @@ -541,22 +541,6 @@ MC6845_UPDATE_ROW( bigbord2_update_row ) } } -static MC6845_INTERFACE( bigbord2_crtc ) -{ - false, - 0,0,0,0, /* visarea adjustment */ - 8, /* number of dots per character */ - NULL, - bigbord2_update_row, /* handler to display a scanline */ - NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(bigbord2_state, frame), // vsync - NULL -}; - - /* Machine Drivers */ #define MAIN_CLOCK XTAL_8MHz / 2 @@ -603,7 +587,13 @@ static MACHINE_CONFIG_START( bigbord2, bigbord2_state ) MCFG_MB8877x_ADD("fdc", XTAL_16MHz / 16) MCFG_FLOPPY_DRIVE_ADD("fdc:0", bigbord2_floppies, "525dd", floppy_image_device::default_floppy_formats) MCFG_FLOPPY_DRIVE_ADD("fdc:1", bigbord2_floppies, "525dd", floppy_image_device::default_floppy_formats) - MCFG_MC6845_ADD("crtc", MC6845, SCREEN_TAG, XTAL_16MHz / 8, bigbord2_crtc) + + MCFG_MC6845_ADD("crtc", MC6845, SCREEN_TAG, XTAL_16MHz / 8) + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_MC6845_UPDATE_ROW_CB(bigbord2_state, crtc_update_row) + MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(bigbord2_state, frame)) + MCFG_DEVICE_ADD(KEYBOARD_TAG, GENERIC_KEYBOARD, 0) MCFG_GENERIC_KEYBOARD_CB(WRITE8(bigbord2_state, bigbord2_kbd_put)) diff --git a/src/mess/drivers/bml3.c b/src/mess/drivers/bml3.c index 757af860c11..c4b22d6ea23 100644 --- a/src/mess/drivers/bml3.c +++ b/src/mess/drivers/bml3.c @@ -112,6 +112,8 @@ public: DECLARE_READ8_MEMBER(bml3_f000_r); DECLARE_WRITE8_MEMBER(bml3_f000_w); DECLARE_READ8_MEMBER(bml3_fff0_r); DECLARE_WRITE8_MEMBER(bml3_fff0_w); + MC6845_UPDATE_ROW(crtc_update_row); + UINT8 *m_p_videoram; UINT8 *m_p_chargen; UINT8 m_hres_reg; @@ -589,10 +591,9 @@ static INPUT_PORTS_START( bml3 ) PORT_BIT(0xffe00000,IP_ACTIVE_HIGH,IPT_UNKNOWN) INPUT_PORTS_END -static MC6845_UPDATE_ROW( update_row ) +MC6845_UPDATE_ROW( bml3_state::crtc_update_row ) { - bml3_state *state = device->machine().driver_data<bml3_state>(); - const rgb_t *palette = state->m_palette->palette()->entry_list_raw(); + const rgb_t *palette = m_palette->palette()->entry_list_raw(); // The MB-6890 has a 5-bit colour RAM region. The meaning of the bits are: // 0: blue // 1: red @@ -604,9 +605,9 @@ static MC6845_UPDATE_ROW( update_row ) bool reverse=0,graphic=0,lowres=0; UINT16 mem=0; - interlace = (state->m_crtc_vreg[8] & 3) ? 1 : 0; - lowres = BIT(state->m_hres_reg, 6); - bgcolor = state->m_hres_reg & 7; + interlace = (m_crtc_vreg[8] & 3) ? 1 : 0; + lowres = BIT(m_hres_reg, 6); + bgcolor = m_hres_reg & 7; if (interlace) { @@ -624,11 +625,11 @@ static MC6845_UPDATE_ROW( update_row ) else mem = (ma + x + ra * x_count/40 * 0x400 -0x400) & 0x3fff; - color = state->m_p_videoram[mem|0x4000] & 7; - reverse = BIT(state->m_p_videoram[mem|0x4000], 3) ^ (x == cursor_x); - graphic = BIT(state->m_p_videoram[mem|0x4000], 4); + color = m_p_videoram[mem|0x4000] & 7; + reverse = BIT(m_p_videoram[mem|0x4000], 3) ^ (x == cursor_x); + graphic = BIT(m_p_videoram[mem|0x4000], 4); - rawbits = state->m_p_videoram[mem]; + rawbits = m_p_videoram[mem]; if (graphic) { @@ -653,12 +654,12 @@ static MC6845_UPDATE_ROW( update_row ) int tile_bank = BIT(rawbits, 7); if (interlace) { - dots[0] = state->m_p_chargen[(tile_bank<<11)|(tile<<4)|(ra<<1)]; - dots[1] = state->m_p_chargen[(tile_bank<<11)|(tile<<4)|(ra<<1)|tile_bank]; + dots[0] = m_p_chargen[(tile_bank<<11)|(tile<<4)|(ra<<1)]; + dots[1] = m_p_chargen[(tile_bank<<11)|(tile<<4)|(ra<<1)|tile_bank]; } else { - dots[0] = dots[1] = state->m_p_chargen[(tile<<4)|(ra<<1)|tile_bank]; + dots[0] = dots[1] = m_p_chargen[(tile<<4)|(ra<<1)|tile_bank]; } } @@ -679,20 +680,6 @@ static MC6845_UPDATE_ROW( update_row ) } } -static MC6845_INTERFACE( mc6845_intf ) -{ - false, /* show border area */ - 0,0,0,0, /* visarea adjustment */ - 8, /* number of pixels per video memory address */ - NULL, /* before pixel update callback */ - update_row, /* row update callback */ - NULL, /* after pixel update callback */ - DEVCB_NULL, /* callback for display state changes */ - DEVCB_NULL, /* callback for cursor state changes */ - DEVCB_NULL, /* HSYNC callback */ - DEVCB_NULL, /* VSYNC callback */ - NULL /* update address callback */ -}; TIMER_DEVICE_CALLBACK_MEMBER(bml3_state::keyboard_callback) { @@ -1000,7 +987,11 @@ static MACHINE_CONFIG_START( bml3_common, bml3_state ) /* Devices */ // CRTC clock should be synchronous with the CPU clock. - MCFG_MC6845_ADD("crtc", H46505, "screen", CPU_CLOCK, mc6845_intf) + MCFG_MC6845_ADD("crtc", H46505, "screen", CPU_CLOCK) + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_MC6845_UPDATE_ROW_CB(bml3_state, crtc_update_row) + // fire once per scan of an individual key // According to the service manual (p.65), the keyboard timer is driven by the horizontal video sync clock. MCFG_TIMER_DRIVER_ADD_PERIODIC("keyboard_timer", bml3_state, keyboard_callback, attotime::from_hz(H_CLOCK/2)) diff --git a/src/mess/drivers/bw12.c b/src/mess/drivers/bw12.c index 6d1031bbb2f..cb722ce969f 100644 --- a/src/mess/drivers/bw12.c +++ b/src/mess/drivers/bw12.c @@ -324,17 +324,16 @@ INPUT_PORTS_END /* Video */ -static MC6845_UPDATE_ROW( bw12_update_row ) +MC6845_UPDATE_ROW( bw12_state::crtc_update_row ) { - bw12_state *state = device->machine().driver_data<bw12_state>(); - const pen_t *pen = state->m_palette->pens(); + const pen_t *pen = m_palette->pens(); int column, bit; for (column = 0; column < x_count; column++) { - UINT8 code = state->m_video_ram[((ma + column) & BW12_VIDEORAM_MASK)]; + UINT8 code = m_video_ram[((ma + column) & BW12_VIDEORAM_MASK)]; UINT16 addr = code << 4 | (ra & 0x0f); - UINT8 data = state->m_char_rom->base()[addr & BW12_CHARROM_MASK]; + UINT8 data = m_char_rom->base()[addr & BW12_CHARROM_MASK]; if (column == cursor_x) { @@ -354,21 +353,6 @@ static MC6845_UPDATE_ROW( bw12_update_row ) } -static MC6845_INTERFACE( bw12_mc6845_interface ) -{ - true, - 0,0,0,0, - 8, - NULL, - bw12_update_row, - NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - NULL -}; - /* PIA6821 Interface */ WRITE_LINE_MEMBER( bw12_state::write_centronics_busy ) @@ -564,7 +548,10 @@ static MACHINE_CONFIG_START( common, bw12_state ) MCFG_GFXDECODE_ADD("gfxdecode", "palette", bw12) MCFG_PALETTE_ADD_MONOCHROME_AMBER("palette") - MCFG_MC6845_ADD(MC6845_TAG, MC6845, SCREEN_TAG, XTAL_16MHz/8, bw12_mc6845_interface) + MCFG_MC6845_ADD(MC6845_TAG, MC6845, SCREEN_TAG, XTAL_16MHz/8) + MCFG_MC6845_SHOW_BORDER_AREA(true) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_MC6845_UPDATE_ROW_CB(bw12_state, crtc_update_row) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") diff --git a/src/mess/drivers/c128.c b/src/mess/drivers/c128.c index a0e351cd67a..63316484c3c 100644 --- a/src/mess/drivers/c128.c +++ b/src/mess/drivers/c128.c @@ -862,7 +862,7 @@ READ_LINE_MEMBER( c128_state::mmu_sense40_r ) //------------------------------------------------- -// mc6845_interface vdc_intf +// mc6845 //------------------------------------------------- static GFXDECODE_START( c128 ) @@ -870,22 +870,6 @@ static GFXDECODE_START( c128 ) GFXDECODE_END -static MC6845_INTERFACE( vdc_intf ) -{ - true, - 0,0,0,0, - 8, - NULL, - NULL, - NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - NULL -}; - - //------------------------------------------------- // MOS8564_INTERFACE( vic_intf ) //------------------------------------------------- @@ -1455,7 +1439,15 @@ static MACHINE_CONFIG_START( ntsc, c128_state ) MCFG_QUANTUM_PERFECT_CPU(M8502_TAG) // video hardware - MCFG_MOS8563_ADD(MOS8563_TAG, SCREEN_VDC_TAG, XTAL_16MHz, vdc_intf, vdc_videoram_map) + MCFG_MOS8563_ADD(MOS8563_TAG, SCREEN_VDC_TAG, XTAL_16MHz, vdc_videoram_map) + MCFG_MC6845_SHOW_BORDER_AREA(true) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_SCREEN_ADD(SCREEN_VDC_TAG, RASTER) + MCFG_SCREEN_REFRESH_RATE(60) + MCFG_SCREEN_SIZE(640, 200) + MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 200-1) + MCFG_SCREEN_UPDATE_DEVICE(MOS8563_TAG, mos8563_device, screen_update) + MCFG_DEVICE_ADD(MOS8564_TAG, MOS8564, XTAL_14_31818MHz*2/3.5) MCFG_MOS6566_CPU(M8502_TAG) MCFG_MOS6566_IRQ_CALLBACK(WRITELINE(c128_state, vic_irq_w)) @@ -1619,7 +1611,17 @@ static MACHINE_CONFIG_START( pal, c128_state ) MCFG_QUANTUM_PERFECT_CPU(M8502_TAG) // video hardware - MCFG_MOS8563_ADD(MOS8563_TAG, SCREEN_VDC_TAG, XTAL_16MHz, vdc_intf, vdc_videoram_map) + MCFG_MOS8563_ADD(MOS8563_TAG, SCREEN_VDC_TAG, XTAL_16MHz, vdc_videoram_map) + MCFG_MC6845_SHOW_BORDER_AREA(true) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_MC6845_SHOW_BORDER_AREA(true) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_SCREEN_ADD(SCREEN_VDC_TAG, RASTER) + MCFG_SCREEN_REFRESH_RATE(60) + MCFG_SCREEN_SIZE(640, 200) + MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 200-1) + MCFG_SCREEN_UPDATE_DEVICE(MOS8563_TAG, mos8563_device, screen_update) + MCFG_DEVICE_ADD(MOS8566_TAG, MOS8566, XTAL_17_734472MHz*2/4.5) MCFG_MOS6566_CPU(M8502_TAG) MCFG_MOS6566_IRQ_CALLBACK(WRITELINE(c128_state, vic_irq_w)) diff --git a/src/mess/drivers/camplynx.c b/src/mess/drivers/camplynx.c index 38352c95bd5..cd5e9f32603 100644 --- a/src/mess/drivers/camplynx.c +++ b/src/mess/drivers/camplynx.c @@ -103,6 +103,8 @@ public: DECLARE_DRIVER_INIT(lynx48k); DECLARE_PALETTE_INIT(camplynx); DECLARE_MACHINE_RESET(lynx128k); + MC6845_UPDATE_ROW(lynx48k_update_row); + MC6845_UPDATE_ROW(lynx128k_update_row); required_device<palette_device> m_palette; private: virtual void video_start(); @@ -384,11 +386,10 @@ PALETTE_INIT_MEMBER(camplynx_state, camplynx) } } -static MC6845_UPDATE_ROW( lynx48k_update_row ) +MC6845_UPDATE_ROW( camplynx_state::lynx48k_update_row ) { - camplynx_state *state = device->machine().driver_data<camplynx_state>(); - UINT8 *RAM = device->machine().root_device().memregion("maincpu")->base(); - const rgb_t *palette = state->m_palette->palette()->entry_list_raw(); + UINT8 *RAM = machine().root_device().memregion("maincpu")->base(); + const rgb_t *palette = m_palette->palette()->entry_list_raw(); UINT8 r,g,b; UINT32 x, *p = &bitmap.pix32(y); @@ -409,11 +410,10 @@ static MC6845_UPDATE_ROW( lynx48k_update_row ) } } -static MC6845_UPDATE_ROW( lynx128k_update_row ) +MC6845_UPDATE_ROW( camplynx_state::lynx128k_update_row ) { - camplynx_state *state = device->machine().driver_data<camplynx_state>(); - UINT8 *RAM = device->machine().root_device().memregion("maincpu")->base(); - const rgb_t *palette = state->m_palette->palette()->entry_list_raw(); + UINT8 *RAM = machine().root_device().memregion("maincpu")->base(); + const rgb_t *palette = m_palette->palette()->entry_list_raw(); UINT8 r,g,b; UINT32 x, *p = &bitmap.pix32(y); @@ -438,38 +438,6 @@ void camplynx_state::video_start() { } -static MC6845_INTERFACE( lynx48k_crtc6845_interface ) -{ - false, - 0,0,0,0, - 8, - NULL, - lynx48k_update_row, - NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - NULL -}; - - -static MC6845_INTERFACE( lynx128k_crtc6845_interface ) -{ - false, - 0,0,0,0, /* visarea adjustment */ - 8, /* dots per character */ - NULL, - lynx128k_update_row, /* callback to display one scanline */ - NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_DRIVER_MEMBER(camplynx_state, lynx128k_irq), /* callback when cursor pin changes state */ - DEVCB_NULL, - NULL -}; - - static MACHINE_CONFIG_START( lynx48k, camplynx_state ) /* basic machine hardware */ @@ -492,8 +460,11 @@ static MACHINE_CONFIG_START( lynx48k, camplynx_state ) MCFG_SOUND_ADD("dac", DAC, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.8) - /* Devices */ - MCFG_MC6845_ADD("crtc", MC6845, "screen", XTAL_12MHz / 8 /*? dot clock divided by dots per char */, lynx48k_crtc6845_interface) + /* devices */ + MCFG_MC6845_ADD("crtc", MC6845, "screen", XTAL_12MHz / 8 /*? dot clock divided by dots per char */) + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_MC6845_UPDATE_ROW_CB(camplynx_state, lynx48k_update_row) MACHINE_CONFIG_END static MACHINE_CONFIG_START( lynx128k, camplynx_state ) @@ -520,8 +491,12 @@ static MACHINE_CONFIG_START( lynx128k, camplynx_state ) MCFG_SOUND_ADD("dac", DAC, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.8) - /* Devices */ - MCFG_MC6845_ADD("crtc", MC6845, "screen", XTAL_12MHz / 8 /*? dot clock divided by dots per char */, lynx128k_crtc6845_interface) + /* devices */ + MCFG_MC6845_ADD("crtc", MC6845, "screen", XTAL_12MHz / 8 /*? dot clock divided by dots per char */) + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_MC6845_UPDATE_ROW_CB(camplynx_state, lynx128k_update_row) + MCFG_MC6845_OUT_HSYNC_CB(WRITE8(camplynx_state, lynx128k_irq)) MACHINE_CONFIG_END DRIVER_INIT_MEMBER(camplynx_state,lynx48k) diff --git a/src/mess/drivers/cbm2.c b/src/mess/drivers/cbm2.c index a06698a7bc5..78bcd9e6ec5 100644 --- a/src/mess/drivers/cbm2.c +++ b/src/mess/drivers/cbm2.c @@ -1102,21 +1102,20 @@ INPUT_PORTS_END //************************************************************************** //------------------------------------------------- -// mc6845_interface crtc_intf +// mc6845 //------------------------------------------------- -static MC6845_UPDATE_ROW( crtc_update_row ) +MC6845_UPDATE_ROW( cbm2_state::crtc_update_row ) { - cbm2_state *state = device->machine().driver_data<cbm2_state>(); - const pen_t *pen = state->m_palette->pens(); + const pen_t *pen = m_palette->pens(); int x = 0; for (int column = 0; column < x_count; column++) { - UINT8 code = state->m_video_ram[(ma + column) & 0x7ff]; - offs_t char_rom_addr = (ma & 0x1000) | (state->m_graphics << 11) | ((code & 0x7f) << 4) | (ra & 0x0f); - UINT8 data = state->m_charom->base()[char_rom_addr & 0xfff]; + UINT8 code = m_video_ram[(ma + column) & 0x7ff]; + offs_t char_rom_addr = (ma & 0x1000) | (m_graphics << 11) | ((code & 0x7f) << 4) | (ra & 0x0f); + UINT8 data = m_charom->base()[char_rom_addr & 0xfff]; for (int bit = 0; bit < 9; bit++) { @@ -1126,27 +1125,11 @@ static MC6845_UPDATE_ROW( crtc_update_row ) bitmap.pix32(vbp + y, hbp + x++) = pen[color]; - if (bit < 8 || !state->m_graphics) data <<= 1; + if (bit < 8 || !m_graphics) data <<= 1; } } } -static MC6845_INTERFACE( crtc_intf ) -{ - true, - 0,0,0,0, - 9, - NULL, - crtc_update_row, - NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - NULL -}; - - //------------------------------------------------- // vic2_interface vic_intf //------------------------------------------------- @@ -2254,7 +2237,10 @@ static MACHINE_CONFIG_START( cbm2lp_ntsc, cbm2_state ) MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette") - MCFG_MC6845_ADD(MC68B45_TAG, MC6845, SCREEN_TAG, XTAL_18MHz/9, crtc_intf) + MCFG_MC6845_ADD(MC68B45_TAG, MC6845, SCREEN_TAG, XTAL_18MHz/9) + MCFG_MC6845_SHOW_BORDER_AREA(true) + MCFG_MC6845_CHAR_WIDTH(9) + MCFG_MC6845_UPDATE_ROW_CB(cbm2_state, crtc_update_row) // sound hardware MCFG_SPEAKER_STANDARD_MONO("mono") diff --git a/src/mess/drivers/dgn_beta.c b/src/mess/drivers/dgn_beta.c index c4a3a1f141f..7a744fe606d 100644 --- a/src/mess/drivers/dgn_beta.c +++ b/src/mess/drivers/dgn_beta.c @@ -327,7 +327,6 @@ static MACHINE_CONFIG_START( dgnbeta, dgn_beta_state ) MCFG_CPU_ADD(DMACPU_TAG, M6809E, DGNBETA_CPU_SPEED_HZ) /* 2 MHz */ MCFG_CPU_PROGRAM_MAP(dgnbeta_map) - /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(DGNBETA_FRAMES_PER_SECOND) @@ -375,7 +374,11 @@ static MACHINE_CONFIG_START( dgnbeta, dgn_beta_state ) MCFG_LEGACY_FLOPPY_4_DRIVES_ADD(dgnbeta_floppy_interface) - MCFG_MC6845_ADD("crtc", HD6845, "screen", XTAL_12_288MHz / 16, dgnbeta_crtc6845_interface) //XTAL is guessed + MCFG_MC6845_ADD("crtc", HD6845, "screen", XTAL_12_288MHz / 16) //XTAL is guessed + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(16) /*?*/ + MCFG_MC6845_UPDATE_ROW_CB(dgn_beta_state, crtc_update_row) + MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(dgn_beta_state, dgnbeta_vsync_changed)) /* internal ram */ MCFG_RAM_ADD(RAM_TAG) diff --git a/src/mess/drivers/dim68k.c b/src/mess/drivers/dim68k.c index af052b4c8bd..9c12fb1caff 100644 --- a/src/mess/drivers/dim68k.c +++ b/src/mess/drivers/dim68k.c @@ -66,6 +66,7 @@ public: DECLARE_WRITE16_MEMBER( dim68k_video_high_w ); DECLARE_WRITE16_MEMBER( dim68k_video_reset_w ); DECLARE_WRITE8_MEMBER(kbd_put); + MC6845_UPDATE_ROW(crtc_update_row); const UINT8 *m_p_chargen; bool m_speaker_bit; UINT8 m_video_control; @@ -224,15 +225,14 @@ void dim68k_state::video_start() } // Text-only; graphics isn't emulated yet. Need to find out if hardware cursor is used. -MC6845_UPDATE_ROW( dim68k_update_row ) +MC6845_UPDATE_ROW( dim68k_state::crtc_update_row ) { - dim68k_state *state = device->machine().driver_data<dim68k_state>(); - const rgb_t *palette = state->m_palette->palette()->entry_list_raw(); + const rgb_t *palette = m_palette->palette()->entry_list_raw(); UINT8 chr,gfx,x,xx,inv; UINT16 chr16=0x2020; // set to spaces if screen is off UINT32 *p = &bitmap.pix32(y); - UINT8 screen_on = ~state->m_video_control & 4; - UINT8 dot8 = ~state->m_video_control & 40; + UINT8 screen_on = ~m_video_control & 4; + UINT8 dot8 = ~m_video_control & 40; // need to divide everything in half to cater for 16-bit reads x_count /= 2; @@ -242,14 +242,14 @@ MC6845_UPDATE_ROW( dim68k_update_row ) for (x = 0; x < x_count; x++) { if (screen_on) - chr16 = state->m_ram[ma+x]; // reads 2 characters + chr16 = m_ram[ma+x]; // reads 2 characters inv=0; if (xx == cursor_x && screen_on) inv=0xff; xx++; chr = chr16>>8; - gfx = state->m_p_chargen[(chr<<4) | ra] ^ inv ^ ((chr & 0x80) ? 0xff : 0); + gfx = m_p_chargen[(chr<<4) | ra] ^ inv ^ ((chr & 0x80) ? 0xff : 0); *p++ = palette[BIT(gfx, 7)]; *p++ = palette[BIT(gfx, 6)]; *p++ = palette[BIT(gfx, 5)]; @@ -264,7 +264,7 @@ MC6845_UPDATE_ROW( dim68k_update_row ) xx++; chr = chr16; - gfx = state->m_p_chargen[(chr<<4) | ra] ^ inv ^ ((chr & 0x80) ? 0xff : 0); + gfx = m_p_chargen[(chr<<4) | ra] ^ inv ^ ((chr & 0x80) ? 0xff : 0); *p++ = palette[BIT(gfx, 7)]; *p++ = palette[BIT(gfx, 6)]; *p++ = palette[BIT(gfx, 5)]; @@ -294,21 +294,6 @@ static GFXDECODE_START( dim68k ) GFXDECODE_ENTRY( "chargen", 0x0000, dim68k_charlayout, 0, 1 ) GFXDECODE_END -static MC6845_INTERFACE( dim68k_crtc ) -{ - false, - 0,0,0,0, /* visarea adjustment */ - 8, /* number of dots per character - switchable 7 or 8 */ - NULL, - dim68k_update_row, /* handler to display a scanline */ - NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - NULL -}; - static SLOT_INTERFACE_START( dim68k_floppies ) SLOT_INTERFACE( "525hd", FLOPPY_525_HD ) SLOT_INTERFACE_END @@ -342,7 +327,12 @@ static MACHINE_CONFIG_START( dim68k, dim68k_state ) MCFG_UPD765A_ADD("fdc", true, true) // these options unknown MCFG_FLOPPY_DRIVE_ADD("fdc:0", dim68k_floppies, "525hd", floppy_image_device::default_floppy_formats) MCFG_FLOPPY_DRIVE_ADD("fdc:1", dim68k_floppies, "525hd", floppy_image_device::default_floppy_formats) - MCFG_MC6845_ADD("crtc", MC6845, "screen", 1790000, dim68k_crtc) + + MCFG_MC6845_ADD("crtc", MC6845, "screen", 1790000) + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_MC6845_UPDATE_ROW_CB(dim68k_state, crtc_update_row) + MCFG_DEVICE_ADD("keyboard", GENERIC_KEYBOARD, 0) MCFG_GENERIC_KEYBOARD_CB(WRITE8(dim68k_state, kbd_put)) MACHINE_CONFIG_END diff --git a/src/mess/drivers/ec65.c b/src/mess/drivers/ec65.c index 73d12881606..978ffb25a8f 100644 --- a/src/mess/drivers/ec65.c +++ b/src/mess/drivers/ec65.c @@ -38,6 +38,7 @@ public: } DECLARE_WRITE8_MEMBER(kbd_put); + MC6845_UPDATE_ROW(crtc_update_row); UINT8 *m_p_chargen; required_device<via6522_device> m_via_0; required_device<via6522_device> m_via_1; @@ -118,10 +119,9 @@ void ec65_state::video_start() m_p_chargen = memregion("chargen")->base(); } -static MC6845_UPDATE_ROW( ec65_update_row ) +MC6845_UPDATE_ROW( ec65_state::crtc_update_row ) { - ec65_state *state = device->machine().driver_data<ec65_state>(); - const rgb_t *palette = state->m_palette->palette()->entry_list_raw(); + const rgb_t *palette = m_palette->palette()->entry_list_raw(); UINT8 chr,gfx,inv; UINT16 mem,x; UINT32 *p = &bitmap.pix32(y); @@ -130,10 +130,10 @@ static MC6845_UPDATE_ROW( ec65_update_row ) { inv = (x == cursor_x) ? 0xff : 0; mem = (ma + x) & 0x7ff; - chr = state->m_p_videoram[mem]; + chr = m_p_videoram[mem]; /* get pattern of pixels for that character scanline */ - gfx = state->m_p_chargen[(chr<<4) | (ra & 0x0f)] ^ inv; + gfx = m_p_chargen[(chr<<4) | (ra & 0x0f)] ^ inv; /* Display a scanline of a character */ *p++ = palette[BIT(gfx, 7)]; @@ -147,23 +147,6 @@ static MC6845_UPDATE_ROW( ec65_update_row ) } } - -static MC6845_INTERFACE( ec65_crtc6845_interface ) -{ - false, - 0,0,0,0, - 8 /*?*/, - NULL, - ec65_update_row, - NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - NULL -}; - - /* F4 Character Displayer */ static const gfx_layout ec65_charlayout = { @@ -188,7 +171,6 @@ static MACHINE_CONFIG_START( ec65, ec65_state ) MCFG_CPU_ADD("maincpu",M6502, XTAL_4MHz / 4) MCFG_CPU_PROGRAM_MAP(ec65_mem) - /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) @@ -200,8 +182,10 @@ static MACHINE_CONFIG_START( ec65, ec65_state ) MCFG_GFXDECODE_ADD("gfxdecode", "palette", ec65) MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette") - MCFG_MC6845_ADD(MC6845_TAG, MC6845, "screen", XTAL_16MHz / 8, ec65_crtc6845_interface) - + MCFG_MC6845_ADD(MC6845_TAG, MC6845, "screen", XTAL_16MHz / 8) + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) /*?*/ + MCFG_MC6845_UPDATE_ROW_CB(ec65_state, crtc_update_row) /* devices */ MCFG_DEVICE_ADD(PIA6821_TAG, PIA6821, 0) @@ -225,7 +209,6 @@ static MACHINE_CONFIG_START( ec65k, ec65k_state ) MCFG_CPU_ADD("maincpu",G65816, XTAL_4MHz) // can use 4,2 or 1 MHz MCFG_CPU_PROGRAM_MAP(ec65k_mem) - /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) @@ -237,8 +220,9 @@ static MACHINE_CONFIG_START( ec65k, ec65k_state ) MCFG_GFXDECODE_ADD("gfxdecode", "palette", ec65) MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette") - MCFG_MC6845_ADD(MC6845_TAG, MC6845, "screen", XTAL_16MHz / 8, ec65_crtc6845_interface) - + MCFG_MC6845_ADD(MC6845_TAG, MC6845, "screen", XTAL_16MHz / 8) + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) /*?*/ MACHINE_CONFIG_END /* ROM definition */ diff --git a/src/mess/drivers/einstein.c b/src/mess/drivers/einstein.c index 670c5894ab7..06067b70a53 100644 --- a/src/mess/drivers/einstein.c +++ b/src/mess/drivers/einstein.c @@ -99,17 +99,16 @@ READ8_MEMBER(einstein_state::einstein_80col_ram_r) bit 12 jumper M004, this could be used to select two different character sets. */ -static MC6845_UPDATE_ROW( einstein_6845_update_row ) +MC6845_UPDATE_ROW( einstein_state::crtc_update_row ) { - einstein_state *einstein = device->machine().driver_data<einstein_state>(); - const rgb_t *palette = einstein->m_palette->palette()->entry_list_raw(); - UINT8 *data = einstein->m_region_gfx1->base(); + const rgb_t *palette = m_palette->palette()->entry_list_raw(); + UINT8 *data = m_region_gfx1->base(); UINT8 char_code, data_byte; int i, x; for (i = 0, x = 0; i < x_count; i++, x += 8) { - char_code = einstein->m_crtc_ram[(ma + i) & 0x07ff]; + char_code = m_crtc_ram[(ma + i) & 0x07ff]; data_byte = data[(char_code << 3) + (ra & 0x07) + ((ra & 0x08) << 8)]; bitmap.pix32(y, x + 0) = palette[TMS9928A_PALETTE_SIZE + BIT(data_byte, 7)]; @@ -676,21 +675,6 @@ static const ay8910_interface einstein_ay_interface = DEVCB_NULL }; -static MC6845_INTERFACE( einstein_crtc6845_interface ) -{ - false, - 0,0,0,0, - 8, - NULL, - einstein_6845_update_row, - NULL, - DEVCB_DRIVER_LINE_MEMBER(einstein_state,einstein_6845_de_changed), - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - NULL -}; - /* F4 Character Displayer */ static const gfx_layout einstei2_charlayout = { @@ -721,7 +705,6 @@ static MACHINE_CONFIG_START( einstein, einstein_state ) MCFG_CPU_IO_MAP(einstein_io) MCFG_CPU_CONFIG(einstein_daisy_chain) - /* this is actually clocked at the system clock 4 MHz, but this would be too fast for our driver. So we update at 50Hz and hope this is good enough. */ MCFG_TIMER_DRIVER_ADD_PERIODIC("keyboard", einstein_state, einstein_keyboard_timer_callback, attotime::from_hz(50)) @@ -807,7 +790,11 @@ static MACHINE_CONFIG_DERIVED( einstei2, einstein ) /* 2 additional colors for the 80 column screen */ MCFG_PALETTE_ADD("palette", TMS9928A_PALETTE_SIZE + 2) - MCFG_MC6845_ADD("crtc", MC6845, "80column", XTAL_X002 / 4, einstein_crtc6845_interface) + MCFG_MC6845_ADD("crtc", MC6845, "80column", XTAL_X002 / 4) + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_MC6845_UPDATE_ROW_CB(einstein_state, crtc_update_row) + MCFG_MC6845_OUT_DE_CB(WRITELINE(einstein_state, einstein_6845_de_changed)) MACHINE_CONFIG_END diff --git a/src/mess/drivers/fanucspmg.c b/src/mess/drivers/fanucspmg.c index be6d2d96dcb..77c96770213 100644 --- a/src/mess/drivers/fanucspmg.c +++ b/src/mess/drivers/fanucspmg.c @@ -547,6 +547,8 @@ public: DECLARE_WRITE_LINE_MEMBER(tc_w); DECLARE_WRITE_LINE_MEMBER(hrq_w); + MC6845_UPDATE_ROW(crtc_update_row); + DECLARE_DRIVER_INIT(fanucspmg); UINT8 m_vram[24576]; @@ -765,23 +767,22 @@ WRITE8_MEMBER(fanucspmg_state::memory_write_byte) return prog_space.write_byte(offset | (m_dma_page << 16), data); } -static MC6845_UPDATE_ROW( fanuc_update_row ) +MC6845_UPDATE_ROW( fanucspmg_state::crtc_update_row ) { - fanucspmg_state *state = downcast<fanucspmg_state *>(device->owner()); UINT32 *p = &bitmap.pix32(y); int i; - UINT8 *chargen = state->m_chargen->base(); + UINT8 *chargen = m_chargen->base(); for ( i = 0; i < x_count; i++ ) { UINT16 offset = ( ma + i ); - if (state->m_video_ctrl & 0x02) + if (m_video_ctrl & 0x02) { if (offset <= 0x5ff) { - UINT8 chr = state->m_vram[offset + 0x600]; - UINT8 attr = state->m_vram[offset]; + UINT8 chr = m_vram[offset + 0x600]; + UINT8 attr = m_vram[offset]; UINT8 data = chargen[ chr + (ra * 256) ]; UINT32 fg = 0; UINT32 bg = 0; @@ -814,21 +815,6 @@ static MC6845_UPDATE_ROW( fanuc_update_row ) } } -static MC6845_INTERFACE( mc6845_fanuc_intf ) -{ - false, /* show border area */ - 0,0,0,0, /* visarea adjustment */ - 8, /* number of pixels per video memory address */ - NULL, /* begin_update */ - fanuc_update_row, /* update_row */ - NULL, /* end_update */ - DEVCB_NULL, /* on_de_changed */ - DEVCB_NULL, /* on_cur_changed */ - DEVCB_NULL, /* on hsync changed */ - DEVCB_DRIVER_LINE_MEMBER(fanucspmg_state, vsync_w), /* on vsync changed */ - NULL -}; - static SLOT_INTERFACE_START( fanuc_floppies ) SLOT_INTERFACE( "525dd", FLOPPY_525_DD ) SLOT_INTERFACE_END @@ -882,7 +868,11 @@ static MACHINE_CONFIG_START( fanucspmg, fanucspmg_state ) MCFG_SCREEN_RAW_PARAMS(XTAL_15MHz, 640, 0, 512, 390, 0, 384 ) MCFG_SCREEN_UPDATE_DEVICE( CRTC_TAG, mc6845_device, screen_update ) - MCFG_MC6845_ADD( CRTC_TAG, HD6845, SCREEN_TAG, XTAL_8MHz/2, mc6845_fanuc_intf) + MCFG_MC6845_ADD( CRTC_TAG, HD6845, SCREEN_TAG, XTAL_8MHz/2) + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_MC6845_UPDATE_ROW_CB(fanucspmg_state, crtc_update_row) + MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(fanucspmg_state, vsync_w)) MACHINE_CONFIG_END /* ROM definition */ diff --git a/src/mess/drivers/fp1100.c b/src/mess/drivers/fp1100.c index 22d49cf9e0b..ef89520ccd1 100644 --- a/src/mess/drivers/fp1100.c +++ b/src/mess/drivers/fp1100.c @@ -87,10 +87,6 @@ void fp1100_state::video_start() { } -static MC6845_UPDATE_ROW( fp1100_update_row ) -{ -} - READ8_MEMBER( fp1100_state::fp1100_mem_r ) { if(m_mem_bank == 0 && offset <= 0x8fff) @@ -318,21 +314,6 @@ GFXDECODE_END -static MC6845_INTERFACE( mc6845_intf ) -{ - false, /* show border area */ - 0,0,0,0, /* visarea adjustment */ - 8, /* number of pixels per video memory address */ - NULL, /* before pixel update callback */ - fp1100_update_row, /* row update callback */ - NULL, /* after pixel update callback */ - DEVCB_NULL, /* callback for display state changes */ - DEVCB_NULL, /* callback for cursor state changes */ - DEVCB_NULL, /* HSYNC callback */ - DEVCB_NULL, /* VSYNC callback */ - NULL /* update address callback */ -}; - INTERRUPT_GEN_MEMBER(fp1100_state::fp1100_vblank_irq) { if(irq_mask & 0x10) @@ -362,8 +343,10 @@ static MACHINE_CONFIG_START( fp1100, fp1100_state ) MCFG_PALETTE_ADD("palette", 8) MCFG_GFXDECODE_ADD("gfxdecode", "palette", fp1100) - /* Devices */ - MCFG_MC6845_ADD("crtc", H46505, "screen", MAIN_CLOCK/2, mc6845_intf) /* hand tuned to get ~60 fps */ + /* devices */ + MCFG_MC6845_ADD("crtc", H46505, "screen", MAIN_CLOCK/2) /* hand tuned to get ~60 fps */ + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) MACHINE_CONFIG_END /* ROM definition */ diff --git a/src/mess/drivers/fp6000.c b/src/mess/drivers/fp6000.c index 203fd119961..5eb0720b426 100644 --- a/src/mess/drivers/fp6000.c +++ b/src/mess/drivers/fp6000.c @@ -288,28 +288,12 @@ void fp6000_state::machine_reset() { } -static MC6845_INTERFACE( mc6845_intf ) -{ - false, /* show border area */ - 0,0,0,0, /* visarea adjustment */ - 8, /* number of pixels per video memory address */ - NULL, /* before pixel update callback */ - NULL, /* row update callback */ - NULL, /* after pixel update callback */ - DEVCB_NULL, /* callback for display state changes */ - DEVCB_NULL, /* callback for cursor state changes */ - DEVCB_NULL, /* HSYNC callback */ - DEVCB_NULL, /* VSYNC callback */ - NULL /* update address callback */ -}; - static MACHINE_CONFIG_START( fp6000, fp6000_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", I8086, 16000000/2) MCFG_CPU_PROGRAM_MAP(fp6000_map) MCFG_CPU_IO_MAP(fp6000_io) - /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) @@ -319,7 +303,9 @@ static MACHINE_CONFIG_START( fp6000, fp6000_state ) MCFG_SCREEN_UPDATE_DRIVER(fp6000_state, screen_update_fp6000) MCFG_SCREEN_PALETTE("palette") - MCFG_MC6845_ADD("crtc", H46505, "screen", 16000000/5, mc6845_intf) /* unknown clock, hand tuned to get ~60 fps */ + MCFG_MC6845_ADD("crtc", H46505, "screen", 16000000/5) /* unknown clock, hand tuned to get ~60 fps */ + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) MCFG_PALETTE_ADD("palette", 8) // MCFG_PALETTE_INIT(black_and_white) diff --git a/src/mess/drivers/h19.c b/src/mess/drivers/h19.c index b823566fda2..df5b1815980 100644 --- a/src/mess/drivers/h19.c +++ b/src/mess/drivers/h19.c @@ -72,6 +72,7 @@ public: DECLARE_READ8_MEMBER(h19_a0_r); DECLARE_WRITE8_MEMBER(h19_c0_w); DECLARE_WRITE8_MEMBER(h19_kbd_put); + MC6845_UPDATE_ROW(crtc_update_row); required_shared_ptr<UINT8> m_p_videoram; required_device<palette_device> m_palette; UINT8 *m_p_chargen; @@ -320,10 +321,9 @@ void h19_state::video_start() m_p_chargen = memregion("chargen")->base(); } -static MC6845_UPDATE_ROW( h19_update_row ) +MC6845_UPDATE_ROW( h19_state::crtc_update_row ) { - h19_state *state = device->machine().driver_data<h19_state>(); - const rgb_t *palette = state->m_palette->palette()->entry_list_raw(); + const rgb_t *palette = m_palette->palette()->entry_list_raw(); UINT8 chr,gfx; UINT16 mem,x; UINT32 *p = &bitmap.pix32(y); @@ -333,7 +333,7 @@ static MC6845_UPDATE_ROW( h19_update_row ) UINT8 inv=0; if (x == cursor_x) inv=0xff; mem = (ma + x) & 0x7ff; - chr = state->m_p_videoram[mem]; + chr = m_p_videoram[mem]; if (chr & 0x80) { @@ -342,7 +342,7 @@ static MC6845_UPDATE_ROW( h19_update_row ) } /* get pattern of pixels for that character scanline */ - gfx = state->m_p_chargen[(chr<<4) | ra] ^ inv; + gfx = m_p_chargen[(chr<<4) | ra] ^ inv; /* Display a scanline of a character (8 pixels) */ *p++ = palette[BIT(gfx, 7)]; @@ -372,21 +372,6 @@ static const ins8250_interface h19_ace_interface = }; -static MC6845_INTERFACE( h19_crtc6845_interface ) -{ - false, - 0,0,0,0, - 8 /*?*/, - NULL, - h19_update_row, - NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_NMI), // frame pulse - NULL -}; - /* F4 Character Displayer */ static const gfx_layout h19_charlayout = { @@ -428,8 +413,14 @@ static MACHINE_CONFIG_START( h19, h19_state ) MCFG_GFXDECODE_ADD("gfxdecode", "palette", h19) MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette") - MCFG_MC6845_ADD("crtc", MC6845, "screen", XTAL_12_288MHz / 8, h19_crtc6845_interface) // clk taken from schematics + MCFG_MC6845_ADD("crtc", MC6845, "screen", XTAL_12_288MHz / 8) // clk taken from schematics + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) /*?*/ + MCFG_MC6845_UPDATE_ROW_CB(h19_state, crtc_update_row) + MCFG_MC6845_OUT_VSYNC_CB(INPUTLINE("maincpu", INPUT_LINE_NMI)) // frame pulse + MCFG_INS8250_ADD( "ins8250", h19_ace_interface, XTAL_12_288MHz / 4) // 3.072mhz clock which gets divided down for the various baud rates + MCFG_DEVICE_ADD(KEYBOARD_TAG, GENERIC_KEYBOARD, 0) MCFG_GENERIC_KEYBOARD_CB(WRITE8(h19_state, h19_kbd_put)) diff --git a/src/mess/drivers/hp9k.c b/src/mess/drivers/hp9k.c index afb4dd9111c..19f612d7513 100644 --- a/src/mess/drivers/hp9k.c +++ b/src/mess/drivers/hp9k.c @@ -389,21 +389,6 @@ WRITE8_MEMBER( hp9k_state::kbd_put ) } -static MC6845_INTERFACE( hp9k_mc6845_intf ) -{ - false, - 0,0,0,0, /* visarea adjustment */ - 8, /* number of dots per character */ - NULL, - NULL, /* handler to display a scanline */ - NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - NULL -}; - static MACHINE_CONFIG_START( hp9k, hp9k_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu",M68000, XTAL_8MHz) @@ -422,7 +407,9 @@ static MACHINE_CONFIG_START( hp9k, hp9k_state ) MCFG_GFXDECODE_ADD("gfxdecode", "palette", hp9k) MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette") - MCFG_MC6845_ADD( "mc6845", MC6845, "screen", XTAL_16MHz / 16, hp9k_mc6845_intf ) + MCFG_MC6845_ADD("mc6845", MC6845, "screen", XTAL_16MHz / 16) + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) MACHINE_CONFIG_END /* ROM definition */ diff --git a/src/mess/drivers/kaypro.c b/src/mess/drivers/kaypro.c index 55ce10b2e06..9e76d9acd30 100644 --- a/src/mess/drivers/kaypro.c +++ b/src/mess/drivers/kaypro.c @@ -148,21 +148,6 @@ static const z80_daisy_config kaypro2x_daisy_chain[] = -static MC6845_INTERFACE( kaypro2x_crtc ) -{ - false, - 0,0,0,0, /* visarea adjustment */ - 7, /* number of dots per character */ - NULL, - kaypro2x_update_row, /* handler to display a scanline */ - NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - NULL -}; - //static WRITE_LINE_DEVICE_HANDLER( rx_tx_w ) //{ // downcast<z80sio_device *>(device)->rx_clock_in(); @@ -289,7 +274,11 @@ static MACHINE_CONFIG_START( kaypro2x, kaypro_state ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) /* devices */ - MCFG_MC6845_ADD("crtc", MC6845, "screen", 2000000, kaypro2x_crtc) /* comes out of ULA - needs to be measured */ + MCFG_MC6845_ADD("crtc", MC6845, "screen", 2000000) /* comes out of ULA - needs to be measured */ + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(7) + MCFG_MC6845_UPDATE_ROW_CB(kaypro_state, kaypro2x_update_row) + MCFG_QUICKLOAD_ADD("quickload", kaypro_state, kaypro, "com,cpm", 3) MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer") diff --git a/src/mess/drivers/lola8a.c b/src/mess/drivers/lola8a.c index f07c94246c4..f3aae30c631 100644 --- a/src/mess/drivers/lola8a.c +++ b/src/mess/drivers/lola8a.c @@ -52,6 +52,7 @@ public: DECLARE_WRITE_LINE_MEMBER(cass_w); DECLARE_READ8_MEMBER(keyboard_r); + MC6845_UPDATE_ROW(crtc_update_row); private: UINT8 m_portb; @@ -196,11 +197,10 @@ PALETTE_INIT_MEMBER(lola8a_state, lola8a) } } -static MC6845_UPDATE_ROW( lola8a_update_row ) +MC6845_UPDATE_ROW( lola8a_state::crtc_update_row ) { - lola8a_state *state = device->machine().driver_data<lola8a_state>(); - address_space &program = state->m_maincpu->space(AS_PROGRAM); - const rgb_t *palette = state->m_palette->palette()->entry_list_raw(); + address_space &program = m_maincpu->space(AS_PROGRAM); + const rgb_t *palette = m_palette->palette()->entry_list_raw(); for (int sx = 0; sx < x_count; sx++) { @@ -257,21 +257,6 @@ WRITE_LINE_MEMBER(lola8a_state::crtc_vsync) m_maincpu->set_input_line(I8085_RST75_LINE, state? ASSERT_LINE : CLEAR_LINE); } -static MC6845_INTERFACE( hd46505sp_intf ) -{ - false, - 0,0,0,0, - 8, - NULL, - lola8a_update_row, - NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(lola8a_state, crtc_vsync), - NULL -}; - static const ay8910_interface psg_intf = { AY8910_LEGACY_OUTPUT, @@ -302,7 +287,13 @@ static MACHINE_CONFIG_START( lola8a, lola8a_state ) MCFG_SCREEN_UPDATE_DEVICE(HD46505SP_TAG, hd6845_device, screen_update) MCFG_SCREEN_SIZE(640, 480) MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1) - MCFG_MC6845_ADD(HD46505SP_TAG, HD6845, "screen", XTAL_8MHz / 8, hd46505sp_intf) // HD6845 == HD46505S + + MCFG_MC6845_ADD(HD46505SP_TAG, HD6845, "screen", XTAL_8MHz / 8) // HD6845 == HD46505S + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_MC6845_UPDATE_ROW_CB(lola8a_state, crtc_update_row) + MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(lola8a_state, crtc_vsync)) + MCFG_PALETTE_ADD("palette", 8) MCFG_PALETTE_INIT_OWNER(lola8a_state, lola8a) diff --git a/src/mess/drivers/m20.c b/src/mess/drivers/m20.c index 483651821cf..ba13f0f1802 100644 --- a/src/mess/drivers/m20.c +++ b/src/mess/drivers/m20.c @@ -830,21 +830,6 @@ void m20_state::machine_reset() } -static MC6845_INTERFACE( mc6845_intf ) -{ - false, /* show border area */ - 0,0,0,0, /* visarea adjustment */ - 16, /* number of pixels per video memory address */ - NULL, /* before pixel update callback */ - NULL, /* row update callback */ - NULL, /* after pixel update callback */ - DEVCB_NULL, /* callback for display state changes */ - DEVCB_NULL, /* callback for cursor state changes */ - DEVCB_NULL, /* HSYNC callback */ - DEVCB_NULL, /* VSYNC callback */ - NULL /* update address callback */ -}; - WRITE_LINE_MEMBER(m20_state::kbd_rxrdy_int) { m_i8259->ir4_w(state); @@ -922,7 +907,10 @@ static MACHINE_CONFIG_START( m20, m20_state ) MCFG_WD_FDC_INTRQ_CALLBACK(DEVWRITELINE("i8259", pic8259_device, ir0_w)) MCFG_FLOPPY_DRIVE_ADD("fd1797:0", m20_floppies, "5dd", m20_state::floppy_formats) MCFG_FLOPPY_DRIVE_ADD("fd1797:1", m20_floppies, "5dd", m20_state::floppy_formats) - MCFG_MC6845_ADD("crtc", MC6845, "screen", PIXEL_CLOCK/8, mc6845_intf) /* hand tuned to get ~50 fps */ + + MCFG_MC6845_ADD("crtc", MC6845, "screen", PIXEL_CLOCK/8) /* hand tuned to get ~50 fps */ + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(16) MCFG_DEVICE_ADD("ppi8255", I8255A, 0) diff --git a/src/mess/drivers/mbc200.c b/src/mess/drivers/mbc200.c index 3d29a1c33c5..2e4fc087ac9 100644 --- a/src/mess/drivers/mbc200.c +++ b/src/mess/drivers/mbc200.c @@ -133,26 +133,6 @@ void mbc200_state::machine_start() m_floppy1->floppy_drive_set_ready_state(1, 1); } -MC6845_UPDATE_ROW( mbc200_update_row ) -{ -} - - -static MC6845_INTERFACE( mbc200_crtc ) -{ - false, - 0,0,0,0, /* visarea adjustment */ - 8, /* number of dots per character */ - NULL, - mbc200_update_row, /* handler to display a scanline */ - NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - NULL -}; - void mbc200_state::video_start() { } @@ -253,8 +233,9 @@ static MACHINE_CONFIG_START( mbc200, mbc200_state ) MCFG_GFXDECODE_ADD("gfxdecode", "palette", mbc200) MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette") - - MCFG_MC6845_ADD("crtc", H46505, "screen", XTAL_8MHz / 4, mbc200_crtc) // HD46505SP + MCFG_MC6845_ADD("crtc", H46505, "screen", XTAL_8MHz / 4) // HD46505SP + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) MCFG_DEVICE_ADD("ppi8255_1", I8255, 0) diff --git a/src/mess/drivers/mbc55x.c b/src/mess/drivers/mbc55x.c index 0d2c1ab3056..5b2b4eae3ab 100644 --- a/src/mess/drivers/mbc55x.c +++ b/src/mess/drivers/mbc55x.c @@ -277,7 +277,12 @@ static MACHINE_CONFIG_START( mbc55x, mbc55x_state ) MCFG_I8255_IN_PORTC_CB(READ8(mbc55x_state, mbc55x_ppi_portc_r)) MCFG_I8255_OUT_PORTC_CB(WRITE8(mbc55x_state, mbc55x_ppi_portc_w)) - MCFG_MC6845_ADD(VID_MC6845_NAME, MC6845, SCREEN_TAG, XTAL_14_31818MHz/8, mb55x_mc6845_intf) + MCFG_MC6845_ADD(VID_MC6845_NAME, MC6845, SCREEN_TAG, XTAL_14_31818MHz/8) + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_MC6845_UPDATE_ROW_CB(mbc55x_state, crtc_update_row) + MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(mbc55x_state, vid_hsync_changed)) + MCFG_MC6845_OUT_HSYNC_CB(WRITELINE(mbc55x_state, vid_vsync_changed)) /* Backing storage */ MCFG_FD1793_ADD(FDC_TAG, mbc55x_wd17xx_interface ) diff --git a/src/mess/drivers/mbee.c b/src/mess/drivers/mbee.c index a33b2d5fa86..ed543170355 100644 --- a/src/mess/drivers/mbee.c +++ b/src/mess/drivers/mbee.c @@ -660,67 +660,6 @@ static SLOT_INTERFACE_START( mbee_floppies ) SLOT_INTERFACE_END -static MC6845_INTERFACE( mbee_crtc ) -{ - false, - 0,0,0,0, /* visarea adjustment */ - 8, /* number of dots per character */ - NULL, - mbee_update_row, /* handler to display a scanline */ - NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - mbee_update_addr /* handler to process transparent mode */ -}; - - -static MC6845_INTERFACE( mbeeic_crtc ) -{ - false, - 0,0,0,0, /* visarea adjustment */ - 8, /* number of dots per character */ - NULL, - mbeeic_update_row, /* handler to display a scanline */ - NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - mbee_update_addr /* handler to process transparent mode */ -}; - -static MC6845_INTERFACE( mbeeppc_crtc ) -{ - false, - 0,0,0,0, /* visarea adjustment */ - 8, /* number of dots per character */ - NULL, - mbeeppc_update_row, /* handler to display a scanline */ - NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - mbee_update_addr /* handler to process transparent mode */ -}; - -static MC6845_INTERFACE( mbee256_crtc ) -{ - false, - 0,0,0,0, /* visarea adjustment */ - 8, /* number of dots per character */ - NULL, - mbeeppc_update_row, /* handler to display a scanline */ - NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - mbee256_update_addr /* handler to process transparent mode */ -}; - static const cassette_interface mbee_cassette_interface = { mbee_cassette_formats, @@ -766,7 +705,12 @@ static MACHINE_CONFIG_START( mbee, mbee_state ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) /* devices */ - MCFG_MC6845_ADD("crtc", SY6545_1, "screen", XTAL_12MHz / 8, mbee_crtc) + MCFG_MC6845_ADD("crtc", SY6545_1, "screen", XTAL_12MHz / 8) + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_MC6845_UPDATE_ROW_CB(mbee_state, mbee_update_row) + MCFG_MC6845_ADDR_CHANGED_CB(mbee_state, mbee_update_addr) + MCFG_QUICKLOAD_ADD("quickload", mbee_state, mbee, "mwb,com,bee", 2) MCFG_QUICKLOAD_ADD("quickload2", mbee_state, mbee_z80bin, "bin", 2) @@ -817,7 +761,12 @@ static MACHINE_CONFIG_START( mbeeic, mbee_state ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) /* devices */ - MCFG_MC6845_ADD("crtc", SY6545_1, "screen", XTAL_13_5MHz / 8, mbeeic_crtc) + MCFG_MC6845_ADD("crtc", SY6545_1, "screen", XTAL_13_5MHz / 8) + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_MC6845_UPDATE_ROW_CB(mbee_state, mbeeic_update_row) + MCFG_MC6845_ADDR_CHANGED_CB(mbee_state, mbee_update_addr) + MCFG_QUICKLOAD_ADD("quickload", mbee_state, mbee, "mwb,com,bee", 2) MCFG_QUICKLOAD_ADD("quickload2", mbee_state, mbee_z80bin, "bin", 2) @@ -854,8 +803,13 @@ static MACHINE_CONFIG_DERIVED( mbeeppc, mbeeic ) MCFG_PALETTE_MODIFY("palette") MCFG_PALETTE_ENTRIES(16) MCFG_PALETTE_INIT_OWNER(mbee_state,mbeeppc) + MCFG_DEVICE_REMOVE("crtc") - MCFG_MC6845_ADD("crtc", SY6545_1, "screen", XTAL_13_5MHz / 8, mbeeppc_crtc) + MCFG_MC6845_ADD("crtc", SY6545_1, "screen", XTAL_13_5MHz / 8) + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_MC6845_UPDATE_ROW_CB(mbee_state, mbeeppc_update_row) + MCFG_MC6845_ADDR_CHANGED_CB(mbee_state, mbee_update_addr) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( mbee56, mbeeic ) @@ -890,8 +844,13 @@ static MACHINE_CONFIG_DERIVED( mbee256, mbee128 ) MCFG_CPU_IO_MAP(mbee256_io) MCFG_MACHINE_RESET_OVERRIDE(mbee_state, mbee256 ) MCFG_MC146818_ADD( "rtc", XTAL_32_768kHz ) + MCFG_DEVICE_REMOVE("crtc") - MCFG_MC6845_ADD("crtc", SY6545_1, "screen", XTAL_13_5MHz / 8, mbee256_crtc) + MCFG_MC6845_ADD("crtc", SY6545_1, "screen", XTAL_13_5MHz / 8) + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_MC6845_UPDATE_ROW_CB(mbee_state, mbeeppc_update_row) + MCFG_MC6845_ADDR_CHANGED_CB(mbee_state, mbee256_update_addr) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( mbeett, mbeeppc ) @@ -900,8 +859,13 @@ static MACHINE_CONFIG_DERIVED( mbeett, mbeeppc ) MCFG_CPU_IO_MAP(mbeett_io) MCFG_MACHINE_RESET_OVERRIDE(mbee_state, mbeett ) MCFG_MC146818_ADD( "rtc", XTAL_32_768kHz ) + MCFG_DEVICE_REMOVE("crtc") - MCFG_MC6845_ADD("crtc", SY6545_1, "screen", XTAL_13_5MHz / 8, mbee256_crtc) + MCFG_MC6845_ADD("crtc", SY6545_1, "screen", XTAL_13_5MHz / 8) + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_MC6845_UPDATE_ROW_CB(mbee_state, mbeeppc_update_row) + MCFG_MC6845_ADDR_CHANGED_CB(mbee_state, mbee256_update_addr) MACHINE_CONFIG_END /* Unused roms: diff --git a/src/mess/drivers/multi16.c b/src/mess/drivers/multi16.c index d6cef937648..fb96621bf98 100644 --- a/src/mess/drivers/multi16.c +++ b/src/mess/drivers/multi16.c @@ -127,21 +127,6 @@ void multi16_state::machine_reset() } -static MC6845_INTERFACE( mc6845_intf ) -{ - false, /* show border area */ - 0,0,0,0, /* visarea adjustment */ - 8, /* number of pixels per video memory address */ - NULL, /* before pixel update callback */ - NULL, /* row update callback */ - NULL, /* after pixel update callback */ - DEVCB_NULL, /* callback for display state changes */ - DEVCB_NULL, /* callback for cursor state changes */ - DEVCB_NULL, /* HSYNC callback */ - DEVCB_NULL, /* VSYNC callback */ - NULL /* update address callback */ -}; - static MACHINE_CONFIG_START( multi16, multi16_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", I8086, 8000000) @@ -160,8 +145,11 @@ static MACHINE_CONFIG_START( multi16, multi16_state ) MCFG_PALETTE_ADD("palette", 8) - /* Devices */ - MCFG_MC6845_ADD("crtc", H46505, "screen", 16000000/5, mc6845_intf) /* unknown clock, hand tuned to get ~60 fps */ + /* devices */ + MCFG_MC6845_ADD("crtc", H46505, "screen", 16000000/5) /* unknown clock, hand tuned to get ~60 fps */ + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_PIC8259_ADD( "pic8259", INPUTLINE("maincpu", 0), GND, NULL ) MACHINE_CONFIG_END diff --git a/src/mess/drivers/multi8.c b/src/mess/drivers/multi8.c index 28f5ec2b586..3c01000b25e 100644 --- a/src/mess/drivers/multi8.c +++ b/src/mess/drivers/multi8.c @@ -560,21 +560,6 @@ static GFXDECODE_START( multi8 ) GFXDECODE_END -static MC6845_INTERFACE( mc6845_intf ) -{ - false, /* show border area */ - 0,0,0,0, /* visarea adjustment */ - 8, /* number of pixels per video memory address */ - NULL, /* before pixel update callback */ - NULL, /* row update callback */ - NULL, /* after pixel update callback */ - DEVCB_NULL, /* callback for display state changes */ - DEVCB_NULL, /* callback for cursor state changes */ - DEVCB_NULL, /* HSYNC callback */ - DEVCB_NULL, /* VSYNC callback */ - NULL /* update address callback */ -}; - PALETTE_INIT_MEMBER(multi8_state, multi8) { UINT8 i; @@ -676,9 +661,12 @@ static MACHINE_CONFIG_START( multi8, multi8_state ) MCFG_SOUND_ADD("beeper", BEEP, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS,"mono",0.50) - /* Devices */ + /* devices */ MCFG_TIMER_DRIVER_ADD_PERIODIC("keyboard_timer", multi8_state, keyboard_callback, attotime::from_hz(240/32)) - MCFG_MC6845_ADD("crtc", H46505, "screen", XTAL_3_579545MHz/2, mc6845_intf) /* unknown clock, hand tuned to get ~60 fps */ + + MCFG_MC6845_ADD("crtc", H46505, "screen", XTAL_3_579545MHz/2) /* unknown clock, hand tuned to get ~60 fps */ + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) MCFG_DEVICE_ADD("ppi8255_0", I8255, 0) MCFG_I8255_IN_PORTA_CB(READ8(multi8_state, porta_r)) diff --git a/src/mess/drivers/mx2178.c b/src/mess/drivers/mx2178.c index 6a46dc37c42..18fb00807dc 100644 --- a/src/mess/drivers/mx2178.c +++ b/src/mess/drivers/mx2178.c @@ -41,6 +41,7 @@ public: DECLARE_READ8_MEMBER(keyin_r); DECLARE_WRITE8_MEMBER(kbd_put); DECLARE_WRITE_LINE_MEMBER(write_acia_clock); + MC6845_UPDATE_ROW(crtc_update_row); const UINT8 *m_p_chargen; required_shared_ptr<UINT8> m_p_videoram; @@ -96,10 +97,9 @@ WRITE8_MEMBER( mx2178_state::kbd_put ) m_maincpu->set_input_line(0, HOLD_LINE); } -static MC6845_UPDATE_ROW( update_row ) +MC6845_UPDATE_ROW( mx2178_state::crtc_update_row ) { - mx2178_state *state = device->machine().driver_data<mx2178_state>(); - const rgb_t *pens = state->m_palette->palette()->entry_list_raw(); + const rgb_t *pens = m_palette->palette()->entry_list_raw(); UINT8 chr,gfx; UINT16 mem,x; UINT32 *p = &bitmap.pix32(y); @@ -107,10 +107,10 @@ static MC6845_UPDATE_ROW( update_row ) for (x = 0; x < x_count; x++) { mem = (ma + x) & 0x7ff; - chr = state->m_p_videoram[mem]; + chr = m_p_videoram[mem]; /* get pattern of pixels for that character scanline */ - gfx = state->m_p_chargen[(chr<<4) | ra] ^ ((x == cursor_x) ? 0xff : 0); + gfx = m_p_chargen[(chr<<4) | ra] ^ ((x == cursor_x) ? 0xff : 0); /* Display a scanline of a character (8 pixels) */ *p++ = pens[BIT(gfx, 7)]; @@ -124,21 +124,6 @@ static MC6845_UPDATE_ROW( update_row ) } } -static MC6845_INTERFACE( crtc_interface ) -{ - false, - 0,0,0,0, - 8, - NULL, - update_row, - NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - NULL -}; - /* F4 Character Displayer */ static const gfx_layout mx2178_charlayout = { @@ -185,7 +170,10 @@ static MACHINE_CONFIG_START( mx2178, mx2178_state ) MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette") /* Devices */ - MCFG_MC6845_ADD("crtc", MC6845, "screen", 18869600 / 8, crtc_interface) // clk unknown + MCFG_MC6845_ADD("crtc", MC6845, "screen", 18869600 / 8) // clk unknown + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_MC6845_UPDATE_ROW_CB(mx2178_state, crtc_update_row) MCFG_DEVICE_ADD("acia", ACIA6850, 0) diff --git a/src/mess/drivers/myb3k.c b/src/mess/drivers/myb3k.c index fd64e59cb91..f90339d3400 100644 --- a/src/mess/drivers/myb3k.c +++ b/src/mess/drivers/myb3k.c @@ -233,22 +233,6 @@ static GFXDECODE_START( myb3k ) GFXDECODE_ENTRY( "ipl", 0x0000, myb3k_charlayout, 0, 1 ) GFXDECODE_END -static MC6845_INTERFACE( mc6845_intf ) -{ - false, /* show border area */ - 0,0,0,0, /* visarea adjustment */ - 8, /* number of pixels per video memory address */ - NULL, /* before pixel update callback */ - NULL, /* row update callback */ - NULL, /* after pixel update callback */ - DEVCB_NULL, /* callback for display state changes */ - DEVCB_NULL, /* callback for cursor state changes */ - DEVCB_NULL, /* HSYNC callback */ - DEVCB_NULL, /* VSYNC callback */ - NULL /* update address callback */ -}; - - static const wd17xx_interface myb3k_wd17xx_interface = { DEVCB_NULL, @@ -291,7 +275,10 @@ static MACHINE_CONFIG_START( myb3k, myb3k_state ) MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette") /* Devices */ - MCFG_MC6845_ADD("crtc", H46505, "screen", XTAL_3_579545MHz/4, mc6845_intf) /* unknown clock, hand tuned to get ~60 fps */ + MCFG_MC6845_ADD("crtc", H46505, "screen", XTAL_3_579545MHz/4) /* unknown clock, hand tuned to get ~60 fps */ + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_MB8877_ADD("fdc", myb3k_wd17xx_interface ) //unknown type MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(myb3k_floppy_interface) MACHINE_CONFIG_END diff --git a/src/mess/drivers/mycom.c b/src/mess/drivers/mycom.c index f73dab885df..e275b06e37b 100644 --- a/src/mess/drivers/mycom.c +++ b/src/mess/drivers/mycom.c @@ -93,6 +93,7 @@ public: DECLARE_DRIVER_INIT(mycom); TIMER_DEVICE_CALLBACK_MEMBER(mycom_kbd); DECLARE_WRITE8_MEMBER(mycom_rtc_w); + MC6845_UPDATE_ROW(crtc_update_row); UINT8 *m_p_videoram; UINT8 *m_p_chargen; UINT8 m_0a; @@ -130,22 +131,21 @@ void mycom_state::video_start() m_p_chargen = memregion("chargen")->base(); } -static MC6845_UPDATE_ROW( mycom_update_row ) +MC6845_UPDATE_ROW( mycom_state::crtc_update_row ) { - mycom_state *state = device->machine().driver_data<mycom_state>(); - const rgb_t *palette = state->m_palette->palette()->entry_list_raw(); + const rgb_t *palette = m_palette->palette()->entry_list_raw(); UINT8 chr,gfx=0,z; UINT16 mem,x; UINT32 *p = &bitmap.pix32(y); - if (state->m_0a & 0x40) + if (m_0a & 0x40) { for (x = 0; x < x_count; x++) // lores pixels { UINT8 dbit=1; if (x == cursor_x) dbit=0; mem = (ma + x) & 0x7ff; - chr = state->m_p_videoram[mem]; + chr = m_p_videoram[mem]; z = ra / 3; *p++ = palette[BIT( chr, z ) ? dbit: dbit^1]; *p++ = palette[BIT( chr, z ) ? dbit: dbit^1]; @@ -169,8 +169,8 @@ static MC6845_UPDATE_ROW( mycom_update_row ) gfx = inv; // some blank spacing lines else { - chr = state->m_p_videoram[mem]; - gfx = state->m_p_chargen[(chr<<3) | ra] ^ inv; + chr = m_p_videoram[mem]; + gfx = m_p_chargen[(chr<<3) | ra] ^ inv; } /* Display a scanline of a character */ @@ -339,21 +339,6 @@ static GFXDECODE_START( mycom ) GFXDECODE_ENTRY( "chargen", 0x0000, mycom_charlayout, 0, 1 ) GFXDECODE_END -static MC6845_INTERFACE( mc6845_intf ) -{ - false, /* show border area */ - 0,0,0,0, /* visarea adjustment */ - 8, /* number of pixels per video memory address */ - NULL, /* before pixel update callback */ - mycom_update_row, /* row update callback */ - NULL, /* after pixel update callback */ - DEVCB_NULL, /* callback for display state changes */ - DEVCB_NULL, /* callback for cursor state changes */ - DEVCB_NULL, /* HSYNC callback */ - DEVCB_NULL, /* VSYNC callback */ - NULL /* update address callback */ -}; - WRITE8_MEMBER( mycom_state::mycom_04_w ) { m_i_videoram = (m_i_videoram & 0x700) | data; @@ -549,7 +534,10 @@ static MACHINE_CONFIG_START( mycom, mycom_state ) /* Manual states clock is 1.008mhz for 40 cols, and 2.016 mhz for 80 cols. The CRTC is a HD46505S - same as a 6845. The start registers need to be readable. */ - MCFG_MC6845_ADD("crtc", MC6845, "screen", 1008000, mc6845_intf) + MCFG_MC6845_ADD("crtc", MC6845, "screen", 1008000) + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_MC6845_UPDATE_ROW_CB(mycom_state, crtc_update_row) MCFG_SPEAKER_STANDARD_MONO("mono") diff --git a/src/mess/drivers/paso1600.c b/src/mess/drivers/paso1600.c index a950482813f..3720c89acdf 100644 --- a/src/mess/drivers/paso1600.c +++ b/src/mess/drivers/paso1600.c @@ -271,21 +271,6 @@ static GFXDECODE_START( paso1600 ) GFXDECODE_END -static MC6845_INTERFACE( mc6845_intf ) -{ - false, /* show border area */ - 0,0,0,0, /* visarea adjustment */ - 8, /* number of pixels per video memory address */ - NULL, /* before pixel update callback */ - NULL, /* row update callback */ - NULL, /* after pixel update callback */ - DEVCB_NULL, /* callback for display state changes */ - DEVCB_NULL, /* callback for cursor state changes */ - DEVCB_NULL, /* HSYNC callback */ - DEVCB_NULL, /* VSYNC callback */ - NULL /* update address callback */ -}; - void paso1600_state::machine_start() { } @@ -333,8 +318,12 @@ static MACHINE_CONFIG_START( paso1600, paso1600_state ) // MCFG_PALETTE_INIT(black_and_white) /* Devices */ - MCFG_MC6845_ADD("crtc", H46505, "screen", 16000000/4, mc6845_intf) /* unknown clock, hand tuned to get ~60 fps */ + MCFG_MC6845_ADD("crtc", H46505, "screen", 16000000/4) /* unknown clock, hand tuned to get ~60 fps */ + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_PIC8259_ADD( "pic8259", INPUTLINE("maincpu", 0), GND, NULL ) + MCFG_DEVICE_ADD("8237dma", AM9517A, 16000000/4) MCFG_I8237_IN_MEMR_CB(READ8(paso1600_state, pc_dma_read_byte)) MCFG_I8237_OUT_MEMW_CB(WRITE8(paso1600_state, pc_dma_write_byte)) diff --git a/src/mess/drivers/pasopia.c b/src/mess/drivers/pasopia.c index b9b7ca2e94a..e8a1a33123d 100644 --- a/src/mess/drivers/pasopia.c +++ b/src/mess/drivers/pasopia.c @@ -58,6 +58,7 @@ public: DECLARE_READ8_MEMBER(mux_r); DECLARE_READ8_MEMBER(keyb_r); DECLARE_WRITE8_MEMBER(mux_w); + MC6845_UPDATE_ROW(crtc_update_row); UINT8 m_hblank; UINT16 m_vram_addr; @@ -85,11 +86,10 @@ void pasopia_state::video_start() { } -MC6845_UPDATE_ROW( pasopia_update_row ) +MC6845_UPDATE_ROW( pasopia_state::crtc_update_row ) { - pasopia_state *state = device->machine().driver_data<pasopia_state>(); - const rgb_t *palette = state->m_palette->palette()->entry_list_raw(); - UINT8 *m_p_chargen = state->memregion("chargen")->base(); + const rgb_t *palette = m_palette->palette()->entry_list_raw(); + UINT8 *m_p_chargen = memregion("chargen")->base(); UINT8 chr,gfx,fg=7,bg=0; // colours need to be determined UINT16 mem,x; UINT32 *p = &bitmap.pix32(y); @@ -99,7 +99,7 @@ MC6845_UPDATE_ROW( pasopia_update_row ) UINT8 inv=0; if (x == cursor_x) inv=0xff; mem = (ma + x) & 0xfff; - chr = state->m_p_vram[mem]; + chr = m_p_vram[mem]; /* get pattern of pixels for that character scanline */ gfx = m_p_chargen[(chr<<3) | ra] ^ inv; @@ -253,21 +253,6 @@ WRITE8_MEMBER( pasopia_state::mux_w ) m_mux_data = data; } -static MC6845_INTERFACE( mc6845_intf ) -{ - false, /* show border area */ - 0,0,0,0, /* visarea adjustment */ - 8, /* number of pixels per video memory address */ - NULL, /* before pixel update callback */ - pasopia_update_row, /* row update callback */ - NULL, /* after pixel update callback */ - DEVCB_NULL, /* callback for display state changes */ - DEVCB_NULL, /* callback for cursor state changes */ - DEVCB_NULL, /* HSYNC callback */ - DEVCB_NULL, /* VSYNC callback */ - NULL /* update address callback */ -}; - static const gfx_layout p7_chars_8x8 = { 8,8, @@ -313,7 +298,6 @@ static MACHINE_CONFIG_START( pasopia, pasopia_state ) MCFG_CPU_IO_MAP(pasopia_io) MCFG_CPU_CONFIG(pasopia_daisy) - /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) @@ -325,7 +309,10 @@ static MACHINE_CONFIG_START( pasopia, pasopia_state ) MCFG_PALETTE_ADD("palette", 8) /* Devices */ - MCFG_MC6845_ADD("crtc", H46505, "screen", XTAL_4MHz/4, mc6845_intf) /* unknown clock, hand tuned to get ~60 fps */ + MCFG_MC6845_ADD("crtc", H46505, "screen", XTAL_4MHz/4) /* unknown clock, hand tuned to get ~60 fps */ + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_MC6845_UPDATE_ROW_CB(pasopia_state, crtc_update_row) MCFG_DEVICE_ADD("ppi8255_0", I8255A, 0) MCFG_I8255_OUT_PORTA_CB(WRITE8(pasopia_state, vram_addr_lo_w)) diff --git a/src/mess/drivers/pasopia7.c b/src/mess/drivers/pasopia7.c index c2631be19d8..77e4de73dc7 100644 --- a/src/mess/drivers/pasopia7.c +++ b/src/mess/drivers/pasopia7.c @@ -729,21 +729,6 @@ static GFXDECODE_START( pasopia7 ) GFXDECODE_ENTRY( "kanji", 0x00000, p7_chars_16x16, 0, 0x10 ) GFXDECODE_END -static MC6845_INTERFACE( mc6845_intf ) -{ - false, /* show border area */ - 0,0,0,0, /* visarea adjustment */ - 8, /* number of pixels per video memory address */ - NULL, /* before pixel update callback */ - NULL, /* row update callback */ - NULL, /* after pixel update callback */ - DEVCB_NULL, /* callback for display state changes */ - DEVCB_NULL, /* callback for cursor state changes */ - DEVCB_NULL, /* HSYNC callback */ - DEVCB_NULL, /* VSYNC callback */ - NULL /* update address callback */ -}; - READ8_MEMBER( pasopia7_state::mux_r ) { return m_mux_data; @@ -998,7 +983,9 @@ static MACHINE_CONFIG_DERIVED( p7_raster, p7_base ) MCFG_PALETTE_INIT_OWNER(pasopia7_state,p7_raster) MCFG_GFXDECODE_ADD("gfxdecode", "palette", pasopia7 ) - MCFG_MC6845_ADD("crtc", H46505, "screen", VDP_CLOCK, mc6845_intf) /* unknown clock, hand tuned to get ~60 fps */ + MCFG_MC6845_ADD("crtc", H46505, "screen", VDP_CLOCK) /* unknown clock, hand tuned to get ~60 fps */ + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) MACHINE_CONFIG_END @@ -1016,7 +1003,10 @@ static MACHINE_CONFIG_DERIVED( p7_lcd, p7_base ) MCFG_PALETTE_INIT_OWNER(pasopia7_state,p7_lcd) MCFG_GFXDECODE_ADD("gfxdecode", "palette", pasopia7 ) - MCFG_MC6845_ADD("crtc", H46505, "screen", LCD_CLOCK, mc6845_intf) /* unknown clock, hand tuned to get ~60 fps */ + MCFG_MC6845_ADD("crtc", H46505, "screen", LCD_CLOCK) /* unknown clock, hand tuned to get ~60 fps */ + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_DEFAULT_LAYOUT( layout_lcd ) MACHINE_CONFIG_END diff --git a/src/mess/drivers/pet.c b/src/mess/drivers/pet.c index 40e3be08520..5baa372c11a 100644 --- a/src/mess/drivers/pet.c +++ b/src/mess/drivers/pet.c @@ -1071,22 +1071,19 @@ UINT32 pet_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, con //------------------------------------------------- -// MC6845_INTERFACE( crtc_intf ) +// MC6845 PET80 //------------------------------------------------- -static MC6845_BEGIN_UPDATE( pet_begin_update ) +MC6845_BEGIN_UPDATE( pet_state::pet_begin_update ) { bitmap.fill(rgb_t::black); - - return 0; } -static MC6845_UPDATE_ROW( pet80_update_row ) +MC6845_UPDATE_ROW( pet80_state::pet80_update_row ) { - pet80_state *state = device->machine().driver_data<pet80_state>(); int x = 0; - int char_rom_mask = state->m_char_rom->bytes() - 1; - const pen_t *pen = state->m_palette->pens(); + int char_rom_mask = m_char_rom->bytes() - 1; + const pen_t *pen = m_palette->pens(); hbp = 80; for (int column = 0; column < x_count; column++) @@ -1099,10 +1096,10 @@ static MC6845_UPDATE_ROW( pet80_update_row ) // even character - lsd = state->m_video_ram[((ma + column) << 1) & 0x7ff]; + lsd = m_video_ram[((ma + column) << 1) & 0x7ff]; - offs_t char_addr = (chr_option << 11) | (state->m_graphic << 10) | ((lsd & 0x7f) << 3) | rra; - data = state->m_char_rom->base()[char_addr & char_rom_mask]; + offs_t char_addr = (chr_option << 11) | (m_graphic << 10) | ((lsd & 0x7f) << 3) | rra; + data = m_char_rom->base()[char_addr & char_rom_mask]; for (int bit = 0; bit < 8; bit++, data <<= 1) { @@ -1112,10 +1109,10 @@ static MC6845_UPDATE_ROW( pet80_update_row ) // odd character - lsd = state->m_video_ram[(((ma + column) << 1) + 1) & 0x7ff]; + lsd = m_video_ram[(((ma + column) << 1) + 1) & 0x7ff]; - char_addr = (chr_option << 11) | (state->m_graphic << 10) | ((lsd & 0x7f) << 3) | rra; - data = state->m_char_rom->base()[char_addr & char_rom_mask]; + char_addr = (chr_option << 11) | (m_graphic << 10) | ((lsd & 0x7f) << 3) | rra; + data = m_char_rom->base()[char_addr & char_rom_mask]; for (int bit = 0; bit < 8; bit++, data <<= 1) { @@ -1125,32 +1122,16 @@ static MC6845_UPDATE_ROW( pet80_update_row ) } } -static MC6845_INTERFACE( crtc_intf ) -{ - true, - 0,0,0,0, - 2*8, - pet_begin_update, - pet80_update_row, - NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_DEVICE_LINE_MEMBER(M6520_1_TAG, pia6821_device, cb1_w), - NULL -}; - //------------------------------------------------- -// MC6845_INTERFACE( pet40_crtc_intf ) +// MC6845 PET40 //------------------------------------------------- -static MC6845_UPDATE_ROW( pet40_update_row ) +MC6845_UPDATE_ROW( pet_state::pet40_update_row ) { - pet_state *state = device->machine().driver_data<pet_state>(); int x = 0; - int char_rom_mask = state->m_char_rom->bytes() - 1; - const pen_t *pen = state->m_palette->pens(); + int char_rom_mask = m_char_rom->bytes() - 1; + const pen_t *pen = m_palette->pens(); hbp = 41; for (int column = 0; column < x_count; column++) @@ -1161,10 +1142,10 @@ static MC6845_UPDATE_ROW( pet40_update_row ) int invert = BIT(ma, 12); int chr_option = BIT(ma, 13); - lsd = state->m_video_ram[(ma + column) & 0x3ff]; + lsd = m_video_ram[(ma + column) & 0x3ff]; - offs_t char_addr = (chr_option << 11) | (state->m_graphic << 10) | ((lsd & 0x7f) << 3) | rra; - data = state->m_char_rom->base()[char_addr & char_rom_mask]; + offs_t char_addr = (chr_option << 11) | (m_graphic << 10) | ((lsd & 0x7f) << 3) | rra; + data = m_char_rom->base()[char_addr & char_rom_mask]; for (int bit = 0; bit < 8; bit++, data <<= 1) { @@ -1174,32 +1155,16 @@ static MC6845_UPDATE_ROW( pet40_update_row ) } } -static MC6845_INTERFACE( pet40_crtc_intf ) -{ - true, - 0,0,0,0, - 8, - pet_begin_update, - pet40_update_row, - NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_DEVICE_LINE_MEMBER(M6520_1_TAG, pia6821_device, cb1_w), - NULL -}; - //------------------------------------------------- -// MC6845_INTERFACE( cbm8296_crtc_intf ) +// MC6845 CBM8296 //------------------------------------------------- -static MC6845_UPDATE_ROW( cbm8296_update_row ) +MC6845_UPDATE_ROW( pet80_state::cbm8296_update_row ) { - pet80_state *state = device->machine().driver_data<pet80_state>(); int x = 0; - int char_rom_mask = state->m_char_rom->bytes() - 1; - const pen_t *pen = state->m_palette->pens(); + int char_rom_mask = m_char_rom->bytes() - 1; + const pen_t *pen = m_palette->pens(); for (int column = 0; column < x_count; column++) { @@ -1213,10 +1178,10 @@ static MC6845_UPDATE_ROW( cbm8296_update_row ) // even character - lsd = state->m_ram->pointer()[drma]; + lsd = m_ram->pointer()[drma]; - offs_t char_addr = (chr_option << 11) | (state->m_graphic << 10) | ((lsd & 0x7f) << 3) | rra; - data = state->m_char_rom->base()[char_addr & char_rom_mask]; + offs_t char_addr = (chr_option << 11) | (m_graphic << 10) | ((lsd & 0x7f) << 3) | rra; + data = m_char_rom->base()[char_addr & char_rom_mask]; for (int bit = 0; bit < 8; bit++, data <<= 1) { @@ -1226,10 +1191,10 @@ static MC6845_UPDATE_ROW( cbm8296_update_row ) // odd character - lsd = state->m_ram->pointer()[drma | 0x100]; + lsd = m_ram->pointer()[drma | 0x100]; - char_addr = (chr_option << 11) | (state->m_graphic << 10) | ((lsd & 0x7f) << 3) | rra; - data = state->m_char_rom->base()[char_addr & char_rom_mask]; + char_addr = (chr_option << 11) | (m_graphic << 10) | ((lsd & 0x7f) << 3) | rra; + data = m_char_rom->base()[char_addr & char_rom_mask]; for (int bit = 0; bit < 8; bit++, data <<= 1) { @@ -1239,21 +1204,6 @@ static MC6845_UPDATE_ROW( cbm8296_update_row ) } } -static MC6845_INTERFACE( cbm8296_crtc_intf ) -{ - true, - 0,0,0,0, - 2*8, - NULL, - cbm8296_update_row, - NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_DEVICE_LINE_MEMBER(M6520_1_TAG, pia6821_device, cb1_w), - NULL -}; - //------------------------------------------------- // SLOT_INTERFACE( cbm8296d_ieee488_devices ) @@ -1738,7 +1688,13 @@ static MACHINE_CONFIG_DERIVED( pet4032f, pet4000 ) MCFG_SCREEN_VISIBLE_AREA(0, 320 - 1, 0, 250 - 1) MCFG_SCREEN_UPDATE_DEVICE(MC6845_TAG, mc6845_device, screen_update) MCFG_DEVICE_REMOVE("sync_timer") - MCFG_MC6845_ADD(MC6845_TAG, MC6845, SCREEN_TAG, XTAL_16MHz/16, pet40_crtc_intf) + + MCFG_MC6845_ADD(MC6845_TAG, MC6845, SCREEN_TAG, XTAL_16MHz/16) + MCFG_MC6845_SHOW_BORDER_AREA(true) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_MC6845_BEGIN_UPDATE_CB(pet_state, pet_begin_update) + MCFG_MC6845_UPDATE_ROW_CB(pet_state, pet40_update_row) + MCFG_MC6845_OUT_VSYNC_CB(DEVWRITELINE(M6520_1_TAG, pia6821_device, cb1_w)) // sound hardware MCFG_SPEAKER_STANDARD_MONO("mono") @@ -1804,7 +1760,13 @@ static MACHINE_CONFIG_DERIVED( cbm4032f, cbm4000 ) MCFG_SCREEN_VISIBLE_AREA(0, 320 - 1, 0, 250 - 1) MCFG_SCREEN_UPDATE_DEVICE(MC6845_TAG, mc6845_device, screen_update) MCFG_DEVICE_REMOVE("sync_timer") - MCFG_MC6845_ADD(MC6845_TAG, MC6845, SCREEN_TAG, XTAL_16MHz/16, pet40_crtc_intf) + + MCFG_MC6845_ADD(MC6845_TAG, MC6845, SCREEN_TAG, XTAL_16MHz/16) + MCFG_MC6845_SHOW_BORDER_AREA(true) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_MC6845_BEGIN_UPDATE_CB(pet_state, pet_begin_update) + MCFG_MC6845_UPDATE_ROW_CB(pet_state, pet40_update_row) + MCFG_MC6845_OUT_VSYNC_CB(DEVWRITELINE(M6520_1_TAG, pia6821_device, cb1_w)) // sound hardware MCFG_SPEAKER_STANDARD_MONO("mono") @@ -1880,7 +1842,13 @@ static MACHINE_CONFIG_START( pet80, pet80_state ) MCFG_SCREEN_SIZE(640, 250) MCFG_SCREEN_VISIBLE_AREA(0, 640 - 1, 0, 250 - 1) MCFG_SCREEN_UPDATE_DEVICE(MC6845_TAG, mc6845_device, screen_update) - MCFG_MC6845_ADD(MC6845_TAG, MC6845, SCREEN_TAG, XTAL_16MHz/16, crtc_intf) + + MCFG_MC6845_ADD(MC6845_TAG, MC6845, SCREEN_TAG, XTAL_16MHz/16) + MCFG_MC6845_SHOW_BORDER_AREA(true) + MCFG_MC6845_CHAR_WIDTH(2*8) + MCFG_MC6845_BEGIN_UPDATE_CB(pet_state, pet_begin_update) + MCFG_MC6845_UPDATE_ROW_CB(pet80_state, pet80_update_row) + MCFG_MC6845_OUT_VSYNC_CB(DEVWRITELINE(M6520_1_TAG, pia6821_device, cb1_w)) MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette") @@ -2006,8 +1974,12 @@ static MACHINE_CONFIG_DERIVED_CLASS( cbm8296, pet80, cbm8296_state ) MCFG_PLS100_ADD(PLA1_TAG) MCFG_PLS100_ADD(PLA2_TAG) - MCFG_DEVICE_MODIFY(MC6845_TAG) - MCFG_DEVICE_CONFIG(cbm8296_crtc_intf) + MCFG_DEVICE_REMOVE(MC6845_TAG) + MCFG_MC6845_ADD(MC6845_TAG, MC6845, SCREEN_TAG, XTAL_16MHz/16) + MCFG_MC6845_SHOW_BORDER_AREA(true) + MCFG_MC6845_CHAR_WIDTH(2*8) + MCFG_MC6845_UPDATE_ROW_CB(pet80_state, cbm8296_update_row) + MCFG_MC6845_OUT_VSYNC_CB(DEVWRITELINE(M6520_1_TAG, pia6821_device, cb1_w)) MCFG_DEVICE_MODIFY("ieee8") MCFG_SLOT_DEFAULT_OPTION("c8250") diff --git a/src/mess/drivers/pyl601.c b/src/mess/drivers/pyl601.c index 26528a254c0..005928fd647 100644 --- a/src/mess/drivers/pyl601.c +++ b/src/mess/drivers/pyl601.c @@ -77,6 +77,8 @@ public: DECLARE_WRITE8_MEMBER(led_w); DECLARE_WRITE8_MEMBER(floppy_w); DECLARE_READ8_MEMBER(floppy_r); + MC6845_UPDATE_ROW(pyl601_update_row); + MC6845_UPDATE_ROW(pyl601a_update_row); UINT8 selectedline(UINT16 data); required_device<speaker_sound_device> m_speaker; required_device<upd765a_device> m_fdc; @@ -383,19 +385,18 @@ void pyl601_state::video_start() { } -static MC6845_UPDATE_ROW( pyl601_update_row ) +MC6845_UPDATE_ROW( pyl601_state::pyl601_update_row ) { - pyl601_state *state = device->machine().driver_data<pyl601_state>(); - const rgb_t *palette = state->m_palette->palette()->entry_list_raw(); - UINT8 *charrom = state->memregion("chargen")->base(); + const rgb_t *palette = m_palette->palette()->entry_list_raw(); + UINT8 *charrom = memregion("chargen")->base(); int column, bit, i; UINT8 data; - if (BIT(state->m_video_mode, 5) == 0) + if (BIT(m_video_mode, 5) == 0) { for (column = 0; column < x_count; column++) { - UINT8 code = state->m_ram->pointer()[(((ma + column) & 0x0fff) + 0xf000)]; + UINT8 code = m_ram->pointer()[(((ma + column) & 0x0fff) + 0xf000)]; code = ((code << 1) | (code >> 7)) & 0xff; if (column == cursor_x-2) data = 0xff; @@ -416,7 +417,7 @@ static MC6845_UPDATE_ROW( pyl601_update_row ) { for (i = 0; i < x_count; i++) { - data = state->m_ram->pointer()[(((ma + i) << 3) | (ra & 0x07)) & 0xffff]; + data = m_ram->pointer()[(((ma + i) << 3) | (ra & 0x07)) & 0xffff]; for (bit = 0; bit < 8; bit++) { bitmap.pix32(y, (i * 8) + bit) = palette[BIT(data, 7)]; @@ -426,19 +427,18 @@ static MC6845_UPDATE_ROW( pyl601_update_row ) } } -static MC6845_UPDATE_ROW( pyl601a_update_row ) +MC6845_UPDATE_ROW( pyl601_state::pyl601a_update_row ) { - pyl601_state *state = device->machine().driver_data<pyl601_state>(); - const rgb_t *palette = state->m_palette->palette()->entry_list_raw(); - UINT8 *charrom = state->memregion("chargen")->base(); + const rgb_t *palette = m_palette->palette()->entry_list_raw(); + UINT8 *charrom = memregion("chargen")->base(); int column, bit, i; UINT8 data; - if (BIT(state->m_video_mode, 5) == 0) + if (BIT(m_video_mode, 5) == 0) { for (column = 0; column < x_count; column++) { - UINT8 code = state->m_ram->pointer()[(((ma + column) & 0x0fff) + 0xf000)]; + UINT8 code = m_ram->pointer()[(((ma + column) & 0x0fff) + 0xf000)]; data = charrom[((code << 4) | (ra & 0x07)) & 0xfff]; if (column == cursor_x) data = 0xff; @@ -457,7 +457,7 @@ static MC6845_UPDATE_ROW( pyl601a_update_row ) { for (i = 0; i < x_count; i++) { - data = state->m_ram->pointer()[(((ma + i) << 3) | (ra & 0x07)) & 0xffff]; + data = m_ram->pointer()[(((ma + i) << 3) | (ra & 0x07)) & 0xffff]; for (bit = 0; bit < 8; bit++) { bitmap.pix32(y, (i * 8) + bit) = palette[BIT(data, 7)]; @@ -469,36 +469,6 @@ static MC6845_UPDATE_ROW( pyl601a_update_row ) -static MC6845_INTERFACE( pyl601_crtc6845_interface ) -{ - false, - 0,0,0,0, - 8 /*?*/, - NULL, - pyl601_update_row, - NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - NULL -}; - -static MC6845_INTERFACE( pyl601a_crtc6845_interface ) -{ - false, - 0,0,0,0, - 8 /*?*/, - NULL, - pyl601a_update_row, - NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - NULL -}; - DRIVER_INIT_MEMBER(pyl601_state,pyl601) { memset(m_ram->pointer(), 0, 64 * 1024); @@ -559,7 +529,6 @@ static MACHINE_CONFIG_START( pyl601, pyl601_state ) MCFG_CPU_PROGRAM_MAP(pyl601_mem) MCFG_CPU_VBLANK_INT_DRIVER("screen", pyl601_state, pyl601_interrupt) - /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(50) @@ -576,7 +545,11 @@ static MACHINE_CONFIG_START( pyl601, pyl601_state ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) /* Devices */ - MCFG_MC6845_ADD("crtc", MC6845, "screen", XTAL_2MHz, pyl601_crtc6845_interface) + MCFG_MC6845_ADD("crtc", MC6845, "screen", XTAL_2MHz) + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) /* ? */ + MCFG_MC6845_UPDATE_ROW_CB(pyl601_state, pyl601_update_row) + MCFG_UPD765A_ADD("upd765", true, true) MCFG_FLOPPY_DRIVE_ADD("upd765:0", pyl601_floppies, "525hd", pyl601_state::floppy_formats) MCFG_FLOPPY_DRIVE_ADD("upd765:1", pyl601_floppies, "525hd", pyl601_state::floppy_formats) @@ -592,8 +565,12 @@ static MACHINE_CONFIG_DERIVED( pyl601a, pyl601 ) MCFG_CPU_CLOCK( XTAL_2MHz) MCFG_GFXDECODE_MODIFY("gfxdecode", pyl601a) + MCFG_DEVICE_REMOVE("crtc") - MCFG_MC6845_ADD("crtc", MC6845, "screen", XTAL_2MHz, pyl601a_crtc6845_interface) + MCFG_MC6845_ADD("crtc", MC6845, "screen", XTAL_2MHz) + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) /* ? */ + MCFG_MC6845_UPDATE_ROW_CB(pyl601_state, pyl601a_update_row) MACHINE_CONFIG_END /* ROM definition */ diff --git a/src/mess/drivers/sapi1.c b/src/mess/drivers/sapi1.c index 1091b55501c..b41318516c4 100644 --- a/src/mess/drivers/sapi1.c +++ b/src/mess/drivers/sapi1.c @@ -73,6 +73,7 @@ public: DECLARE_DRIVER_INIT(sapizps3b); DECLARE_MACHINE_RESET(sapi1); DECLARE_MACHINE_RESET(sapizps3); + MC6845_UPDATE_ROW(crtc_update_row); UINT32 screen_update_sapi1(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_sapi3(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); private: @@ -407,10 +408,9 @@ UINT32 sapi1_state::screen_update_sapi3(screen_device &screen, bitmap_ind16 &bit return 0; } -static MC6845_UPDATE_ROW( update_row ) +MC6845_UPDATE_ROW( sapi1_state::crtc_update_row ) { - sapi1_state *state = device->machine().driver_data<sapi1_state>(); - const rgb_t *palette = state->m_palette->palette()->entry_list_raw(); + const rgb_t *palette = m_palette->palette()->entry_list_raw(); UINT8 chr,gfx,inv; UINT16 mem,x; UINT32 *p = &bitmap.pix32(y); @@ -420,7 +420,7 @@ static MC6845_UPDATE_ROW( update_row ) inv = gfx = 0; if (x == cursor_x) inv ^= 0xff; mem = (2*(ma + x)) & 0xfff; - chr = state->m_p_videoram[mem] & 0x3f; + chr = m_p_videoram[mem] & 0x3f; if (ra < 8) gfx = MHB2501[(chr<<3) | ra] ^ inv; @@ -435,23 +435,6 @@ static MC6845_UPDATE_ROW( update_row ) } } -static MC6845_INTERFACE( mc6845_intf ) -{ - false, /* show border area */ - 0,0,0,0, /* visarea adjustment */ - 6, /* number of pixels per video memory address */ - NULL, /* before pixel update callback */ - update_row, /* row update callback */ - NULL, /* after pixel update callback */ - DEVCB_NULL, /* callback for display state changes */ - DEVCB_NULL, /* callback for cursor state changes */ - DEVCB_NULL, /* HSYNC callback */ - DEVCB_NULL, /* VSYNC callback */ - NULL /* update address callback */ -}; - - - /************************************** Keyboard @@ -598,7 +581,12 @@ static MACHINE_CONFIG_DERIVED( sapi3b, sapi3 ) MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(sapi3b_mem) MCFG_CPU_IO_MAP(sapi3b_io) - MCFG_MC6845_ADD("crtc", MC6845, "screen", 1008000, mc6845_intf) // guess + + MCFG_MC6845_ADD("crtc", MC6845, "screen", 1008000) // guess + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(6) + MCFG_MC6845_UPDATE_ROW_CB(sapi1_state, crtc_update_row) + MCFG_SCREEN_MODIFY("screen") MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update) MCFG_SCREEN_NO_PALETTE diff --git a/src/mess/drivers/smc777.c b/src/mess/drivers/smc777.c index 199823d4dc3..b4637015beb 100644 --- a/src/mess/drivers/smc777.c +++ b/src/mess/drivers/smc777.c @@ -1003,21 +1003,6 @@ void smc777_state::machine_reset() } -static MC6845_INTERFACE( mc6845_intf ) -{ - true, /* show border area */ - 0,0,0,0, /* visarea adjustment */ - 8, /* number of pixels per video memory address */ - NULL, /* before pixel update callback */ - NULL, /* row update callback */ - NULL, /* after pixel update callback */ - DEVCB_NULL, /* callback for display state changes */ - DEVCB_NULL, /* callback for cursor state changes */ - DEVCB_NULL, /* HSYNC callback */ - DEVCB_NULL, /* VSYNC callback */ - NULL /* update address callback */ -}; - /* set-up SMC-70 mode colors */ PALETTE_INIT_MEMBER(smc777_state, smc777) { @@ -1096,7 +1081,9 @@ static MACHINE_CONFIG_START( smc777, smc777_state ) MCFG_GFXDECODE_ADD("gfxdecode", "palette", empty) - MCFG_MC6845_ADD("crtc", H46505, "screen", MASTER_CLOCK/2, mc6845_intf) /* unknown clock, hand tuned to get ~60 fps */ + MCFG_MC6845_ADD("crtc", H46505, "screen", MASTER_CLOCK/2) /* unknown clock, hand tuned to get ~60 fps */ + MCFG_MC6845_SHOW_BORDER_AREA(true) + MCFG_MC6845_CHAR_WIDTH(8) MCFG_MB8876_ADD("fdc",smc777_mb8876_interface) MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(smc777_floppy_interface) diff --git a/src/mess/drivers/super80.c b/src/mess/drivers/super80.c index 761ec55c3f3..4f6bc687157 100644 --- a/src/mess/drivers/super80.c +++ b/src/mess/drivers/super80.c @@ -656,21 +656,6 @@ static const cassette_interface super80_cassette_interface = }; -static MC6845_INTERFACE( super80v_crtc ) -{ - false, - 0,0,0,0, /* visarea adjustment */ - SUPER80V_DOTS, /* number of dots per character */ - NULL, - super80v_update_row, /* handler to display a scanline */ - NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - NULL -}; - //------------------------------------------------- // Z80DMA //------------------------------------------------- @@ -812,7 +797,10 @@ static MACHINE_CONFIG_START( super80v, super80_state ) MCFG_PALETTE_ADD("palette", 32) MCFG_PALETTE_INIT_OWNER(super80_state,super80m) - MCFG_MC6845_ADD("crtc", MC6845, "screen", MASTER_CLOCK / SUPER80V_DOTS, super80v_crtc) + MCFG_MC6845_ADD("crtc", MC6845, "screen", MASTER_CLOCK / SUPER80V_DOTS) + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(SUPER80V_DOTS) + MCFG_MC6845_UPDATE_ROW_CB(super80_state, crtc_update_row) MCFG_GFXDECODE_ADD("gfxdecode", "palette", super80v) MCFG_DEFAULT_LAYOUT( layout_super80 ) diff --git a/src/mess/drivers/svi318.c b/src/mess/drivers/svi318.c index 3abefa1d5cc..9b2f621e195 100644 --- a/src/mess/drivers/svi318.c +++ b/src/mess/drivers/svi318.c @@ -389,21 +389,6 @@ static MACHINE_CONFIG_DERIVED( svi328n, svi318n ) MACHINE_CONFIG_END -static MC6845_INTERFACE( svi806_crtc6845_interface ) -{ - false, - 0,0,0,0, - 8 /*?*/, - NULL, - svi806_crtc6845_update_row, - NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - NULL -}; - /* F4 Character Displayer */ static const gfx_layout svi328_charlayout = { @@ -460,7 +445,10 @@ static MACHINE_CONFIG_START( svi328_806, svi318_state ) MCFG_GFXDECODE_ADD("gfxdecode", "palette", svi328) - MCFG_MC6845_ADD("crtc", MC6845, "svi806", XTAL_12MHz / 8, svi806_crtc6845_interface) + MCFG_MC6845_ADD("crtc", MC6845, "svi806", XTAL_12MHz / 8) + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) /* ? */ + MCFG_MC6845_UPDATE_ROW_CB(svi318_state, crtc_update_row) MCFG_VIDEO_START_OVERRIDE(svi318_state, svi328_806 ) diff --git a/src/mess/drivers/tavernie.c b/src/mess/drivers/tavernie.c index 6dd97bb79e3..511201e2ed1 100644 --- a/src/mess/drivers/tavernie.c +++ b/src/mess/drivers/tavernie.c @@ -92,6 +92,7 @@ public: DECLARE_MACHINE_RESET(cpu09); DECLARE_MACHINE_RESET(ivg09); DECLARE_WRITE_LINE_MEMBER(write_acia_clock); + MC6845_UPDATE_ROW(crtc_update_row); const UINT8 *m_p_chargen; optional_shared_ptr<UINT8> m_p_videoram; @@ -206,10 +207,9 @@ WRITE8_MEMBER( tavernie_state::ds_w ) } -static MC6845_UPDATE_ROW( update_row ) +MC6845_UPDATE_ROW( tavernie_state::crtc_update_row ) { - tavernie_state *state = device->machine().driver_data<tavernie_state>(); - const rgb_t *palette = state->m_palette->palette()->entry_list_raw(); + const rgb_t *palette = m_palette->palette()->entry_list_raw(); UINT8 chr,gfx=0; UINT16 mem,x; UINT32 *p = &bitmap.pix32(y); @@ -223,8 +223,8 @@ static MC6845_UPDATE_ROW( update_row ) gfx = inv; // some blank spacing lines else { - chr = state->m_p_videoram[mem]; - gfx = state->m_p_chargen[(chr<<4) | ra] ^ inv; + chr = m_p_videoram[mem]; + gfx = m_p_chargen[(chr<<4) | ra] ^ inv; } /* Display a scanline of a character */ @@ -239,21 +239,6 @@ static MC6845_UPDATE_ROW( update_row ) } } -static MC6845_INTERFACE( mc6845_intf ) -{ - false, /* show border area */ - 0,0,0,0, /* visarea adjustment */ - 8, /* number of pixels per video memory address */ - NULL, /* before pixel update callback */ - update_row, /* row update callback */ - NULL, /* after pixel update callback */ - DEVCB_NULL, /* callback for display state changes */ - DEVCB_NULL, /* callback for cursor state changes */ - DEVCB_NULL, /* HSYNC callback */ - DEVCB_NULL, /* VSYNC callback */ - NULL /* update address callback */ -}; - READ8_MEMBER( tavernie_state::pa_r ) { @@ -381,7 +366,11 @@ static MACHINE_CONFIG_DERIVED( ivg09, cpu09 ) /* Devices */ MCFG_DEVICE_ADD(KEYBOARD_TAG, GENERIC_KEYBOARD, 0) MCFG_GENERIC_KEYBOARD_CB(WRITE8(tavernie_state, kbd_put)) - MCFG_MC6845_ADD("crtc", MC6845, "screen", 1008000, mc6845_intf) // unknown clock + + MCFG_MC6845_ADD("crtc", MC6845, "screen", 1008000) // unknown clock + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_MC6845_UPDATE_ROW_CB(tavernie_state, crtc_update_row) MCFG_DEVICE_ADD("pia_ivg", PIA6821, 0) MCFG_PIA_READPB_HANDLER(READ8(tavernie_state, pb_ivg_r)) diff --git a/src/mess/drivers/trs80m2.c b/src/mess/drivers/trs80m2.c index 9f71593d172..86a7771774b 100644 --- a/src/mess/drivers/trs80m2.c +++ b/src/mess/drivers/trs80m2.c @@ -380,18 +380,17 @@ INPUT_PORTS_END // VIDEO //************************************************************************** -static MC6845_UPDATE_ROW( trs80m2_update_row ) +MC6845_UPDATE_ROW( trs80m2_state::crtc_update_row ) { - trs80m2_state *state = device->machine().driver_data<trs80m2_state>(); - const pen_t *pen = state->m_palette->pens(); + const pen_t *pen = m_palette->pens(); int x = 0; for (int column = 0; column < x_count; column++) { - UINT8 code = state->m_video_ram[(ma + column) & 0x7ff]; + UINT8 code = m_video_ram[(ma + column) & 0x7ff]; offs_t address = ((code & 0x7f) << 4) | (ra & 0x0f); - UINT8 data = state->m_char_rom->base()[address]; + UINT8 data = m_char_rom->base()[address]; int dcursor = (column == cursor_x); int drevid = BIT(code, 7); @@ -427,21 +426,6 @@ WRITE_LINE_MEMBER( trs80m2_state::vsync_w ) } } -static MC6845_INTERFACE( mc6845_intf ) -{ - true, - 0,0,0,0, - 8, - NULL, - trs80m2_update_row, - NULL, - DEVCB_DRIVER_LINE_MEMBER(trs80m2_state, de_w), - DEVCB_NULL, - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(trs80m2_state, vsync_w), - NULL -}; - void trs80m2_state::video_start() { // allocate memory @@ -734,7 +718,12 @@ static MACHINE_CONFIG_START( trs80m2, trs80m2_state ) MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette") - MCFG_MC6845_ADD(MC6845_TAG, MC6845, SCREEN_TAG, XTAL_12_48MHz/8, mc6845_intf) + MCFG_MC6845_ADD(MC6845_TAG, MC6845, SCREEN_TAG, XTAL_12_48MHz/8) + MCFG_MC6845_SHOW_BORDER_AREA(true) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_MC6845_UPDATE_ROW_CB(trs80m2_state, crtc_update_row) + MCFG_MC6845_OUT_DE_CB(WRITELINE(trs80m2_state, de_w)) + MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(trs80m2_state, vsync_w)) // devices MCFG_FD1791x_ADD(FD1791_TAG, XTAL_8MHz/4) @@ -819,7 +808,12 @@ static MACHINE_CONFIG_START( trs80m16, trs80m16_state ) MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette") - MCFG_MC6845_ADD(MC6845_TAG, MC6845, SCREEN_TAG, XTAL_12_48MHz/8, mc6845_intf) + MCFG_MC6845_ADD(MC6845_TAG, MC6845, SCREEN_TAG, XTAL_12_48MHz/8) + MCFG_MC6845_SHOW_BORDER_AREA(true) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_MC6845_UPDATE_ROW_CB(trs80m2_state, crtc_update_row) + MCFG_MC6845_OUT_DE_CB(WRITELINE(trs80m2_state, de_w)) + MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(trs80m2_state, vsync_w)) // devices MCFG_FD1791x_ADD(FD1791_TAG, XTAL_8MHz/4) diff --git a/src/mess/drivers/tvc.c b/src/mess/drivers/tvc.c index 47230c3bb87..ead91f0c9e5 100644 --- a/src/mess/drivers/tvc.c +++ b/src/mess/drivers/tvc.c @@ -510,29 +510,28 @@ void tvc_state::machine_reset() membank("bank2")->set_base(m_ram->pointer() + 0x4000); } -static MC6845_UPDATE_ROW( tvc_update_row ) +MC6845_UPDATE_ROW( tvc_state::crtc_update_row ) { - tvc_state *state = device->machine().driver_data<tvc_state>(); - const rgb_t *palette = state->m_palette->palette()->entry_list_raw(); + const rgb_t *palette = m_palette->palette()->entry_list_raw(); UINT32 *p = &bitmap.pix32(y); - UINT8 *vram = state->memregion("vram")->base() + ((state->m_vram_bank & 0x30)<<10); + UINT8 *vram = memregion("vram")->base() + ((m_vram_bank & 0x30)<<10); UINT16 offset = ((ma*4 + ra*0x40) & 0x3fff); int i; - switch(state->m_video_mode) { + switch(m_video_mode) { case 0 : // 2 colors mode for ( i = 0; i < x_count; i++ ) { UINT8 data = vram[offset + i]; - *p++ = palette[state->m_col[BIT(data,7)]]; - *p++ = palette[state->m_col[BIT(data,6)]]; - *p++ = palette[state->m_col[BIT(data,5)]]; - *p++ = palette[state->m_col[BIT(data,4)]]; - *p++ = palette[state->m_col[BIT(data,3)]]; - *p++ = palette[state->m_col[BIT(data,2)]]; - *p++ = palette[state->m_col[BIT(data,1)]]; - *p++ = palette[state->m_col[BIT(data,0)]]; + *p++ = palette[m_col[BIT(data,7)]]; + *p++ = palette[m_col[BIT(data,6)]]; + *p++ = palette[m_col[BIT(data,5)]]; + *p++ = palette[m_col[BIT(data,4)]]; + *p++ = palette[m_col[BIT(data,3)]]; + *p++ = palette[m_col[BIT(data,2)]]; + *p++ = palette[m_col[BIT(data,1)]]; + *p++ = palette[m_col[BIT(data,0)]]; } break; case 1 : @@ -541,14 +540,14 @@ static MC6845_UPDATE_ROW( tvc_update_row ) for ( i = 0; i < x_count; i++ ) { UINT8 data = vram[offset + i]; - *p++ = palette[state->m_col[BIT(data,3)*2 + BIT(data,7)]]; - *p++ = palette[state->m_col[BIT(data,3)*2 + BIT(data,7)]]; - *p++ = palette[state->m_col[BIT(data,2)*2 + BIT(data,6)]]; - *p++ = palette[state->m_col[BIT(data,2)*2 + BIT(data,6)]]; - *p++ = palette[state->m_col[BIT(data,1)*2 + BIT(data,5)]]; - *p++ = palette[state->m_col[BIT(data,1)*2 + BIT(data,5)]]; - *p++ = palette[state->m_col[BIT(data,0)*2 + BIT(data,4)]]; - *p++ = palette[state->m_col[BIT(data,0)*2 + BIT(data,4)]]; + *p++ = palette[m_col[BIT(data,3)*2 + BIT(data,7)]]; + *p++ = palette[m_col[BIT(data,3)*2 + BIT(data,7)]]; + *p++ = palette[m_col[BIT(data,2)*2 + BIT(data,6)]]; + *p++ = palette[m_col[BIT(data,2)*2 + BIT(data,6)]]; + *p++ = palette[m_col[BIT(data,1)*2 + BIT(data,5)]]; + *p++ = palette[m_col[BIT(data,1)*2 + BIT(data,5)]]; + *p++ = palette[m_col[BIT(data,0)*2 + BIT(data,4)]]; + *p++ = palette[m_col[BIT(data,0)*2 + BIT(data,4)]]; } break; default: @@ -633,21 +632,6 @@ QUICKLOAD_LOAD_MEMBER( tvc_state,tvc64) } -static MC6845_INTERFACE( tvc_crtc6845_interface ) -{ - false, - 0,0,0,0, - 8 /*?*/, - NULL, - tvc_update_row, - NULL, - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(tvc_state, tvc_int_ff_set), - DEVCB_NULL, - DEVCB_NULL, - NULL -}; - static const cassette_interface tvc_cassette_interface = { tvc64_cassette_formats, @@ -679,7 +663,11 @@ static MACHINE_CONFIG_START( tvc, tvc_state ) MCFG_PALETTE_ADD( "palette", 16 ) MCFG_PALETTE_INIT_OWNER(tvc_state, tvc) - MCFG_MC6845_ADD("crtc", MC6845, "screen", 3125000/2, tvc_crtc6845_interface) // clk taken from schematics + MCFG_MC6845_ADD("crtc", MC6845, "screen", 3125000/2) // clk taken from schematics + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) /*?*/ + MCFG_MC6845_UPDATE_ROW_CB(tvc_state, crtc_update_row) + MCFG_MC6845_OUT_CUR_CB(WRITELINE(tvc_state, tvc_int_ff_set)) /* internal ram */ MCFG_RAM_ADD(RAM_TAG) diff --git a/src/mess/drivers/v6809.c b/src/mess/drivers/v6809.c index a5eb5d31e3e..8d14abcd89a 100644 --- a/src/mess/drivers/v6809.c +++ b/src/mess/drivers/v6809.c @@ -90,6 +90,8 @@ public: DECLARE_WRITE8_MEMBER(kbd_put); DECLARE_WRITE_LINE_MEMBER(write_acia_clock); DECLARE_MACHINE_RESET(v6809); + MC6845_UPDATE_ROW(crtc_update_row); + MC6845_ON_UPDATE_ADDR_CHANGED(crtc_update_addr); UINT8 *m_p_videoram; const UINT8 *m_p_chargen; @@ -168,10 +170,9 @@ static GFXDECODE_START( v6809 ) GFXDECODE_ENTRY( "chargen", 0x0000, v6809_charlayout, 0, 1 ) GFXDECODE_END -MC6845_UPDATE_ROW( v6809_update_row ) +MC6845_UPDATE_ROW( v6809_state::crtc_update_row ) { - v6809_state *state = device->machine().driver_data<v6809_state>(); - const rgb_t *palette = state->m_palette->palette()->entry_list_raw(); + const rgb_t *palette = m_palette->palette()->entry_list_raw(); UINT8 chr,gfx; UINT16 mem,x; UINT32 *p = &bitmap.pix32(y); @@ -179,8 +180,8 @@ MC6845_UPDATE_ROW( v6809_update_row ) for (x = 0; x < x_count; x++) { mem = (ma + x) & 0x7ff; - chr = state->m_p_videoram[mem]; - gfx = state->m_p_chargen[(chr<<4) | ra] ^ ((x == cursor_x) ? 0xff : 0); + chr = m_p_videoram[mem]; + gfx = m_p_chargen[(chr<<4) | ra] ^ ((x == cursor_x) ? 0xff : 0); /* Display a scanline of a character (8 pixels) */ *p++ = palette[BIT(gfx, 7)]; @@ -194,28 +195,12 @@ MC6845_UPDATE_ROW( v6809_update_row ) } } -MC6845_ON_UPDATE_ADDR_CHANGED( v6809_update_addr ) +MC6845_ON_UPDATE_ADDR_CHANGED( v6809_state::crtc_update_addr ) { /* not sure what goes in here - parameters passed are device, address, strobe */ - v6809_state *state = device->machine().driver_data<v6809_state>(); - state->m_video_address = address & 0x7ff; + m_video_address = address & 0x7ff; } -static MC6845_INTERFACE( v6809_crtc ) -{ - false, - 0,0,0,0, /* visarea adjustment */ - 8, /* number of dots per character */ - NULL, - v6809_update_row, /* handler to display a scanline */ - NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - v6809_update_addr /* handler to process transparent mode */ -}; - WRITE8_MEMBER( v6809_state::videoram_w ) { m_vidbyte = data; @@ -341,8 +326,13 @@ static MACHINE_CONFIG_START( v6809, v6809_state ) MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) - /* Devices */ - MCFG_MC6845_ADD("crtc", SY6545_1, "screen", XTAL_16MHz / 8, v6809_crtc) + /* devices */ + MCFG_MC6845_ADD("crtc", SY6545_1, "screen", XTAL_16MHz / 8) + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_MC6845_UPDATE_ROW_CB(v6809_state, crtc_update_row) + MCFG_MC6845_ADDR_CHANGED_CB(v6809_state, crtc_update_addr) + MCFG_DEVICE_ADD(KEYBOARD_TAG, GENERIC_KEYBOARD, 0) MCFG_GENERIC_KEYBOARD_CB(WRITE8(v6809_state, kbd_put)) diff --git a/src/mess/drivers/victor9k.c b/src/mess/drivers/victor9k.c index 00a3074c307..87e8122a879 100644 --- a/src/mess/drivers/victor9k.c +++ b/src/mess/drivers/victor9k.c @@ -256,7 +256,7 @@ INPUT_PORTS_END //************************************************************************** //------------------------------------------------- -// MC6845_INTERFACE( hd46505s_intf ) +// MC6845 //------------------------------------------------- #define CODE_NON_DISPLAY 0x1000 @@ -264,11 +264,10 @@ INPUT_PORTS_END #define CODE_LOW_INTENSITY 0x4000 #define CODE_REVERSE_VIDEO 0x8000 -static MC6845_UPDATE_ROW( victor9k_update_row ) +MC6845_UPDATE_ROW( victor9k_state::crtc_update_row ) { - victor9k_state *state = device->machine().driver_data<victor9k_state>(); - address_space &program = state->m_maincpu->space(AS_PROGRAM); - const rgb_t *palette = state->m_palette->palette()->entry_list_raw(); + address_space &program = m_maincpu->space(AS_PROGRAM); + const rgb_t *palette = m_palette->palette()->entry_list_raw(); if (BIT(ma, 13)) { @@ -280,7 +279,7 @@ static MC6845_UPDATE_ROW( victor9k_update_row ) for (int sx = 0; sx < x_count; sx++) { - UINT16 code = (state->m_video_ram[video_ram_addr + 1] << 8) | state->m_video_ram[video_ram_addr]; + UINT16 code = (m_video_ram[video_ram_addr + 1] << 8) | m_video_ram[video_ram_addr]; UINT32 char_ram_addr = (BIT(ma, 12) << 16) | ((code & 0xff) << 5) | (ra << 1); UINT16 data = program.read_word(char_ram_addr); @@ -305,20 +304,6 @@ WRITE_LINE_MEMBER(victor9k_state::vert_w) m_pic->ir7_w(state); } -static MC6845_INTERFACE( hd46505s_intf ) -{ - true, - 0,0,0,0, - 10, - NULL, - victor9k_update_row, - NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(victor9k_state, vert_w), - NULL -}; WRITE_LINE_MEMBER(victor9k_state::mux_serial_b_w) @@ -906,7 +891,11 @@ static MACHINE_CONFIG_START( victor9k, victor9k_state ) MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette") - MCFG_MC6845_ADD(HD46505S_TAG, HD6845, SCREEN_TAG, 1000000, hd46505s_intf) // HD6845 == HD46505S + MCFG_MC6845_ADD(HD46505S_TAG, HD6845, SCREEN_TAG, 1000000) // HD6845 == HD46505S + MCFG_MC6845_SHOW_BORDER_AREA(true) + MCFG_MC6845_CHAR_WIDTH(10) + MCFG_MC6845_UPDATE_ROW_CB(victor9k_state, crtc_update_row) + MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(victor9k_state, vert_w)) // sound hardware MCFG_SPEAKER_STANDARD_MONO("mono") diff --git a/src/mess/drivers/vk100.c b/src/mess/drivers/vk100.c index ad573f8e1c2..46272c8227a 100644 --- a/src/mess/drivers/vk100.c +++ b/src/mess/drivers/vk100.c @@ -244,6 +244,7 @@ public: DECLARE_WRITE_LINE_MEMBER(i8251_txrdy_int); DECLARE_WRITE_LINE_MEMBER(i8251_rts); UINT8 vram_read(); + MC6845_UPDATE_ROW(crtc_update_row); void vram_write(UINT8 data); protected: @@ -964,7 +965,7 @@ void vk100_state::video_start() m_ras_erase = memregion("ras_erase")->base(); } -static MC6845_UPDATE_ROW( vk100_update_row ) +MC6845_UPDATE_ROW( vk100_state::crtc_update_row ) { static const UINT32 colorTable[16] = { 0x000000, 0x0000FF, 0xFF0000, 0xFF00FF, 0x00FF00, 0x00FFFF, 0xFFFF00, 0xFFFFFF, @@ -977,50 +978,38 @@ static MC6845_UPDATE_ROW( vk100_update_row ) * real address to 16-bit chunk a13 a12 a11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0 * crtc input MA11 MA10 MA9 MA8 MA7 MA6 RA1 RA0 MA5 MA4 MA3 MA2 MA1 MA0 */ - vk100_state *state = device->machine().driver_data<vk100_state>(); UINT16 EA = ((ma&0xfc0)<<2)|((ra&0x3)<<6)|(ma&0x3F); // display the 64 different 12-bit-wide chunks for (int i = 0; i < 64; i++) { - UINT16 block = state->m_vram[(EA<<1)+(2*i)+1] | (state->m_vram[(EA<<1)+(2*i)]<<8); - UINT32 fgColor = (state->m_vgSOPS&0x08)?colorTable[(block&0xF000)>>12]:colorTable2[(block&0xF000)>>12]; - UINT32 bgColor = (state->m_vgSOPS&0x08)?colorTable[(state->m_vgSOPS&0xF0)>>4]:colorTable2[(state->m_vgSOPS&0xF0)>>4]; + UINT16 block = m_vram[(EA<<1)+(2*i)+1] | (m_vram[(EA<<1)+(2*i)]<<8); + UINT32 fgColor = (m_vgSOPS&0x08)?colorTable[(block&0xF000)>>12]:colorTable2[(block&0xF000)>>12]; + UINT32 bgColor = (m_vgSOPS&0x08)?colorTable[(m_vgSOPS&0xF0)>>4]:colorTable2[(m_vgSOPS&0xF0)>>4]; // display a 12-bit wide chunk for (int j = 0; j < 12; j++) { - bitmap.pix32(y, (12*i)+j) = (((block&(0x0001<<j))?1:0)^(state->m_vgSOPS&1))?fgColor:bgColor; + bitmap.pix32(y, (12*i)+j) = (((block&(0x0001<<j))?1:0)^(m_vgSOPS&1))?fgColor:bgColor; } } } -static MC6845_INTERFACE( mc6845_intf ) -{ - false, - 0,0,0,0, - 12, - NULL, - vk100_update_row, - NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(vk100_state, crtc_vsync), - NULL -}; - static MACHINE_CONFIG_START( vk100, vk100_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", I8085A, XTAL_5_0688MHz) MCFG_CPU_PROGRAM_MAP(vk100_mem) MCFG_CPU_IO_MAP(vk100_io) - /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_RAW_PARAMS(XTAL_45_6192Mhz/3, 882, 0, 720, 370, 0, 350 ) // fake screen timings for startup until 6845 sets real ones MCFG_SCREEN_UPDATE_DEVICE( "crtc", mc6845_device, screen_update ) - MCFG_MC6845_ADD( "crtc", H46505, "screen", XTAL_45_6192Mhz/3/12, mc6845_intf) + + MCFG_MC6845_ADD( "crtc", H46505, "screen", XTAL_45_6192Mhz/3/12) + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(12) + MCFG_MC6845_UPDATE_ROW_CB(vk100_state, crtc_update_row) + MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(vk100_state, crtc_vsync)) /* i8251 uart */ MCFG_DEVICE_ADD("i8251", I8251, 0) diff --git a/src/mess/drivers/x1.c b/src/mess/drivers/x1.c index abbc820e163..b2e93f6867c 100644 --- a/src/mess/drivers/x1.c +++ b/src/mess/drivers/x1.c @@ -1870,21 +1870,6 @@ WRITE8_MEMBER( x1_state::x1_portc_w ) m_cassette->output(BIT(data, 0) ? +1.0 : -1.0); } -static MC6845_INTERFACE( mc6845_intf ) -{ - true, /* show border area */ - 0,0,0,0, /* visarea adjustment */ - 8, /* number of pixels per video memory address */ - NULL, /* before pixel update callback */ - NULL, /* row update callback */ - NULL, /* after pixel update callback */ - DEVCB_NULL, /* callback for display state changes */ - DEVCB_NULL, /* callback for cursor state changes */ - DEVCB_NULL, /* HSYNC callback */ - DEVCB_NULL, /* VSYNC callback */ - NULL /* update address callback */ -}; - READ8_MEMBER(x1_state::memory_read_byte) { address_space& prog_space = m_maincpu->space(AS_PROGRAM); @@ -2535,7 +2520,10 @@ static MACHINE_CONFIG_START( x1, x1_state ) MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1) MCFG_SCREEN_UPDATE_DRIVER(x1_state, screen_update_x1) - MCFG_MC6845_ADD("crtc", H46505, "screen", (VDP_CLOCK/48), mc6845_intf) //unknown divider + MCFG_MC6845_ADD("crtc", H46505, "screen", (VDP_CLOCK/48)) //unknown divider + MCFG_MC6845_SHOW_BORDER_AREA(true) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_PALETTE_ADD("palette", 0x10+0x1000) MCFG_PALETTE_INIT_OWNER(x1_state,x1) diff --git a/src/mess/drivers/x1twin.c b/src/mess/drivers/x1twin.c index 913bf46de1a..273307e0211 100644 --- a/src/mess/drivers/x1twin.c +++ b/src/mess/drivers/x1twin.c @@ -79,21 +79,6 @@ static const wd17xx_interface x1_mb8877a_interface = {FLOPPY_0, FLOPPY_1, FLOPPY_2, FLOPPY_3} }; -static MC6845_INTERFACE( mc6845_intf ) -{ - false, /* show border area*/ - 0,0,0,0, /* visarea adjustment */ - 8, /* number of pixels per video memory address */ - NULL, /* before pixel update callback */ - NULL, /* row update callback */ - NULL, /* after pixel update callback */ - DEVCB_NULL, /* callback for display state changes */ - DEVCB_NULL, /* callback for cursor state changes */ - DEVCB_NULL, /* HSYNC callback */ - DEVCB_NULL, /* VSYNC callback */ - NULL /* update address callback */ -}; - /************************************* * * Inputs @@ -508,7 +493,10 @@ static MACHINE_CONFIG_START( x1twin, x1twin_state ) MCFG_SCREEN_RAW_PARAMS(PCE_MAIN_CLOCK/2, HUC6260_WPF, 70, 70 + 512 + 32, HUC6260_LPF, 14, 14+242) MCFG_SCREEN_UPDATE_DRIVER(x1twin_state, screen_update_x1pce) - MCFG_MC6845_ADD("crtc", H46505, "x1_screen", (VDP_CLOCK/48), mc6845_intf) //unknown divider + MCFG_MC6845_ADD("crtc", H46505, "x1_screen", (VDP_CLOCK/48)) //unknown divider + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_PALETTE_ADD("palette", 0x10+0x1000) MCFG_PALETTE_INIT_OWNER(x1twin_state,x1) diff --git a/src/mess/drivers/z100.c b/src/mess/drivers/z100.c index b146d33e2c2..67649a9388d 100644 --- a/src/mess/drivers/z100.c +++ b/src/mess/drivers/z100.c @@ -603,21 +603,6 @@ READ8_MEMBER( z100_state::get_slave_ack ) return 0; } -static MC6845_INTERFACE( mc6845_intf ) -{ - false, /* show border area */ - 0,0,0,0, /* visarea adjustment */ - 8, /* number of pixels per video memory address */ - NULL, /* before pixel update callback */ - NULL, /* row update callback */ - NULL, /* after pixel update callback */ - DEVCB_NULL, /* callback for display state changes */ - DEVCB_NULL, /* callback for cursor state changes */ - DEVCB_NULL, /* HSYNC callback */ - DEVCB_NULL, /* VSYNC callback */ - NULL /* update address callback */ -}; - WRITE8_MEMBER( z100_state::video_pia_A_w ) { /* @@ -726,8 +711,10 @@ static MACHINE_CONFIG_START( z100, z100_state ) MCFG_PALETTE_ADD("palette", 8) - /* Devices */ - MCFG_MC6845_ADD("crtc", MC6845, "screen", XTAL_14_31818MHz/8, mc6845_intf) /* unknown clock, hand tuned to get ~50/~60 fps */ + /* devices */ + MCFG_MC6845_ADD("crtc", MC6845, "screen", XTAL_14_31818MHz/8) /* unknown clock, hand tuned to get ~50/~60 fps */ + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) MCFG_PIC8259_ADD( "pic8259_master", INPUTLINE("maincpu", 0), VCC, READ8(z100_state, get_slave_ack) ) MCFG_PIC8259_ADD( "pic8259_slave", DEVWRITELINE("pic8259_master", pic8259_device, ir3_w), GND, NULL ) diff --git a/src/mess/drivers/zrt80.c b/src/mess/drivers/zrt80.c index ae669a6e373..9692961291d 100644 --- a/src/mess/drivers/zrt80.c +++ b/src/mess/drivers/zrt80.c @@ -48,6 +48,7 @@ public: DECLARE_WRITE8_MEMBER(zrt80_30_w); DECLARE_WRITE8_MEMBER(zrt80_38_w); DECLARE_WRITE8_MEMBER(kbd_put); + MC6845_UPDATE_ROW(crtc_update_row); const UINT8 *m_p_chargen; required_shared_ptr<UINT8> m_p_videoram; protected: @@ -214,21 +215,20 @@ void zrt80_state::video_start() m_p_chargen = memregion("chargen")->base(); } -static MC6845_UPDATE_ROW( zrt80_update_row ) +MC6845_UPDATE_ROW( zrt80_state::crtc_update_row ) { - zrt80_state *state = device->machine().driver_data<zrt80_state>(); - const rgb_t *palette = state->m_palette->palette()->entry_list_raw(); + const rgb_t *palette = m_palette->palette()->entry_list_raw(); UINT8 chr,gfx,inv; UINT16 mem,x; UINT32 *p = &bitmap.pix32(y); - UINT8 polarity = state->ioport("DIPSW1")->read() & 4 ? 0xff : 0; + UINT8 polarity = ioport("DIPSW1")->read() & 4 ? 0xff : 0; for (x = 0; x < x_count; x++) { inv = polarity; if (x == cursor_x) inv ^= 0xff; mem = (ma + x) & 0x1fff; - chr = state->m_p_videoram[mem]; + chr = m_p_videoram[mem]; if BIT(chr, 7) { @@ -236,7 +236,7 @@ static MC6845_UPDATE_ROW( zrt80_update_row ) chr &= 0x7f; } - gfx = state->m_p_chargen[(chr<<4) | ra] ^ inv; + gfx = m_p_chargen[(chr<<4) | ra] ^ inv; /* Display a scanline of a character */ *p++ = palette[BIT(gfx, 7)]; @@ -251,21 +251,6 @@ static MC6845_UPDATE_ROW( zrt80_update_row ) } -static MC6845_INTERFACE( zrt80_crtc6845_interface ) -{ - false, - 0,0,0,0, - 8 /*?*/, - NULL, - zrt80_update_row, - NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - NULL -}; - static const ins8250_interface zrt80_com_interface = { DEVCB_NULL, @@ -322,7 +307,11 @@ static MACHINE_CONFIG_START( zrt80, zrt80_state ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) /* Devices */ - MCFG_MC6845_ADD("crtc", MC6845, "screen", XTAL_20MHz / 8, zrt80_crtc6845_interface) + MCFG_MC6845_ADD("crtc", MC6845, "screen", XTAL_20MHz / 8) + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) /*?*/ + MCFG_MC6845_UPDATE_ROW_CB(zrt80_state, crtc_update_row) + MCFG_INS8250_ADD( "ins8250", zrt80_com_interface, 2457600 ) MCFG_DEVICE_ADD(KEYBOARD_TAG, GENERIC_KEYBOARD, 0) MCFG_GENERIC_KEYBOARD_CB(WRITE8(zrt80_state, kbd_put)) diff --git a/src/mess/includes/abc80x.h b/src/mess/includes/abc80x.h index eac46480de1..ac267a60bde 100644 --- a/src/mess/includes/abc80x.h +++ b/src/mess/includes/abc80x.h @@ -184,6 +184,7 @@ public: void hr_update(bitmap_rgb32 &bitmap, const rectangle &cliprect); DECLARE_DIRECT_UPDATE_MEMBER( direct_update_handler ); + MC6845_UPDATE_ROW( abc800m_update_row ); }; @@ -248,6 +249,7 @@ public: DECLARE_WRITE_LINE_MEMBER( mux80_40_w ); DECLARE_WRITE_LINE_MEMBER( vs_w ); DECLARE_DIRECT_UPDATE_MEMBER( direct_update_handler ); + MC6845_UPDATE_ROW( abc802_update_row ); // cpu state int m_lrs; // low RAM select @@ -310,6 +312,7 @@ public: DECLARE_WRITE_LINE_MEMBER( vs_w ); DECLARE_DIRECT_UPDATE_MEMBER( direct_update_handler ); DECLARE_PALETTE_INIT( abc806 ); + MC6845_UPDATE_ROW( abc806_update_row ); // memory state int m_keydtr; // keyboard DTR diff --git a/src/mess/includes/amstrad.h b/src/mess/includes/amstrad.h index 1010953c75e..ca53a4d7655 100644 --- a/src/mess/includes/amstrad.h +++ b/src/mess/includes/amstrad.h @@ -319,13 +319,6 @@ protected: /*----------- defined in machine/amstrad.c -----------*/ -extern const mc6845_interface amstrad_mc6845_intf; -extern const mc6845_interface amstrad_plus_mc6845_intf; - - - - - SLOT_INTERFACE_EXTERN(cpc_exp_cards); SLOT_INTERFACE_EXTERN(cpcplus_exp_cards); diff --git a/src/mess/includes/bbc.h b/src/mess/includes/bbc.h index 62dbdd80dff..aa4bddbdd55 100644 --- a/src/mess/includes/bbc.h +++ b/src/mess/includes/bbc.h @@ -165,6 +165,8 @@ public: DECLARE_DEVICE_IMAGE_LOAD_MEMBER( bbc_exp_rom ); DECLARE_DEVICE_IMAGE_LOAD_MEMBER( bbcm_cart ); + MC6845_UPDATE_ROW(crtc_update_row); + private: required_device<cpu_device> m_maincpu; required_device<ram_device> m_ram; @@ -419,7 +421,6 @@ public: // HACK FOR MC6845 /*----------- defined in machine/bbc.c -----------*/ -extern const mc6845_interface bbc_mc6845_intf; extern const wd17xx_interface bbc_wd17xx_interface; #endif /* BBC_H_ */ diff --git a/src/mess/includes/bw12.h b/src/mess/includes/bw12.h index e0ff1e291d3..bbde95f7d5e 100644 --- a/src/mess/includes/bw12.h +++ b/src/mess/includes/bw12.h @@ -91,6 +91,7 @@ public: DECLARE_READ_LINE_MEMBER( ay3600_shift_r ); DECLARE_READ_LINE_MEMBER( ay3600_control_r ); DECLARE_WRITE_LINE_MEMBER( ay3600_data_ready_w ); + MC6845_UPDATE_ROW( crtc_update_row ); /* memory state */ int m_bank; diff --git a/src/mess/includes/cbm2.h b/src/mess/includes/cbm2.h index 25b2a411eb4..a94419e349d 100644 --- a/src/mess/includes/cbm2.h +++ b/src/mess/includes/cbm2.h @@ -214,6 +214,8 @@ public: DECLARE_WRITE_LINE_MEMBER( user_irq_w ); + MC6845_UPDATE_ROW( crtc_update_row ); + DECLARE_QUICKLOAD_LOAD_MEMBER( cbmb ); // memory state int m_dramon; diff --git a/src/mess/includes/dgn_beta.h b/src/mess/includes/dgn_beta.h index 5c81a5cc056..2b4ec244a6d 100644 --- a/src/mess/includes/dgn_beta.h +++ b/src/mess/includes/dgn_beta.h @@ -193,6 +193,7 @@ public: // Page IO at FE00 DECLARE_READ8_MEMBER(dgn_beta_page_r); DECLARE_WRITE8_MEMBER(dgn_beta_page_w); + MC6845_UPDATE_ROW(crtc_update_row); /* WD2797 FDC */ DECLARE_READ8_MEMBER(dgnbeta_wd2797_r); @@ -219,9 +220,4 @@ public: extern const wd17xx_interface dgnbeta_wd17xx_interface; - -/*----------- defined in video/dgn_beta.c -----------*/ - -extern const mc6845_interface dgnbeta_crtc6845_interface; - #endif /* DGN_BETA_H_ */ diff --git a/src/mess/includes/einstein.h b/src/mess/includes/einstein.h index d0a60d6008f..10de7d0b019 100644 --- a/src/mess/includes/einstein.h +++ b/src/mess/includes/einstein.h @@ -130,6 +130,7 @@ public: DECLARE_WRITE8_MEMBER(einstein_drsel_w); DECLARE_WRITE_LINE_MEMBER(einstein_serial_transmit_clock); DECLARE_WRITE_LINE_MEMBER(einstein_serial_receive_clock); + MC6845_UPDATE_ROW(crtc_update_row); protected: required_device<i8251_device> m_uart; diff --git a/src/mess/includes/kaypro.h b/src/mess/includes/kaypro.h index 3df7b63a470..f48df61d460 100644 --- a/src/mess/includes/kaypro.h +++ b/src/mess/includes/kaypro.h @@ -68,6 +68,7 @@ public: DECLARE_WRITE_LINE_MEMBER(kaypro_interrupt); DECLARE_READ8_MEMBER(kaypro_sio_r); DECLARE_WRITE8_MEMBER(kaypro_sio_w); + MC6845_UPDATE_ROW(kaypro2x_update_row); DECLARE_QUICKLOAD_LOAD_MEMBER(kaypro); const UINT8 *m_p_chargen; UINT8 m_mc6845_cursor[16]; @@ -110,8 +111,3 @@ UINT8 kay_kbd_d_r( running_machine &machine ); void kay_kbd_d_w( running_machine &machine, UINT8 data ); INPUT_PORTS_EXTERN( kay_kbd ); - - -/*----------- defined in video/kaypro.c -----------*/ - -MC6845_UPDATE_ROW( kaypro2x_update_row ); diff --git a/src/mess/includes/mbc55x.h b/src/mess/includes/mbc55x.h index 95d022fd77b..0f2beb080be 100644 --- a/src/mess/includes/mbc55x.h +++ b/src/mess/includes/mbc55x.h @@ -154,6 +154,7 @@ public: DECLARE_READ8_MEMBER(mbc55x_kb_usart_r); DECLARE_WRITE8_MEMBER(mbc55x_kb_usart_w); DECLARE_DRIVER_INIT(mbc55x); + MC6845_UPDATE_ROW(crtc_update_row); virtual void machine_start(); virtual void machine_reset(); virtual void video_start(); @@ -202,9 +203,6 @@ extern const wd17xx_interface mbc55x_wd17xx_interface; /*----------- defined in video/mbc55x.c -----------*/ -extern const mc6845_interface mb55x_mc6845_intf; - - #define RED 0 #define GREEN 1 #define BLUE 2 diff --git a/src/mess/includes/mbee.h b/src/mess/includes/mbee.h index 039d8925d88..25147ee4e54 100644 --- a/src/mess/includes/mbee.h +++ b/src/mess/includes/mbee.h @@ -159,6 +159,12 @@ public: void mbee_video_kbd_scan(int param); UINT8 m_sy6545_cursor[16]; + MC6845_UPDATE_ROW(mbee_update_row); + MC6845_UPDATE_ROW(mbeeic_update_row); + MC6845_UPDATE_ROW(mbeeppc_update_row); + MC6845_ON_UPDATE_ADDR_CHANGED(mbee_update_addr); + MC6845_ON_UPDATE_ADDR_CHANGED(mbee256_update_addr); + private: size_t m_size; UINT8 m_clock_pulse; @@ -223,14 +229,4 @@ public: virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); }; - -/*----------- defined in video/mbee.c -----------*/ - -MC6845_UPDATE_ROW( mbee_update_row ); -MC6845_UPDATE_ROW( mbeeic_update_row ); -MC6845_UPDATE_ROW( mbeeppc_update_row ); -MC6845_ON_UPDATE_ADDR_CHANGED( mbee_update_addr ); -MC6845_ON_UPDATE_ADDR_CHANGED( mbee256_update_addr ); - - #endif /* MBEE_H_ */ diff --git a/src/mess/includes/pc1512.h b/src/mess/includes/pc1512.h index 97eb96946f8..218a3d5599e 100644 --- a/src/mess/includes/pc1512.h +++ b/src/mess/includes/pc1512.h @@ -121,9 +121,9 @@ public: int get_display_mode(UINT8 mode); offs_t get_char_rom_offset(); int get_color(UINT8 data); - void draw_alpha(bitmap_rgb32 &bitmap, const rectangle &cliprect, UINT16 ma, UINT8 ra, UINT16 y, UINT8 x_count, INT8 cursor_x, int de, int hbp, int vbp, void *param); - void draw_graphics_1(bitmap_rgb32 &bitmap, const rectangle &cliprect, UINT16 ma, UINT8 ra, UINT16 y, UINT8 x_count, INT8 cursor_x, int de, int hbp, int vbp, void *param); - void draw_graphics_2(bitmap_rgb32 &bitmap, const rectangle &cliprect, UINT16 ma, UINT8 ra, UINT16 y, UINT8 x_count, INT8 cursor_x, int de, int hbp, int vbp, void *param); + MC6845_UPDATE_ROW(draw_alpha); + MC6845_UPDATE_ROW(draw_graphics_1); + MC6845_UPDATE_ROW(draw_graphics_2); DECLARE_READ8_MEMBER( video_ram_r ); DECLARE_WRITE8_MEMBER( video_ram_w ); @@ -171,6 +171,7 @@ public: DECLARE_WRITE_LINE_MEMBER(write_centronics_perror); DECLARE_WRITE_LINE_MEMBER(write_centronics_select); DECLARE_WRITE_LINE_MEMBER(write_centronics_fault); + MC6845_UPDATE_ROW(crtc_update_row); // system status register int m_pit1; diff --git a/src/mess/includes/pet.h b/src/mess/includes/pet.h index 4f8c650ea62..95eafe61066 100644 --- a/src/mess/includes/pet.h +++ b/src/mess/includes/pet.h @@ -109,6 +109,9 @@ public: DECLARE_MACHINE_START( pet40 ); DECLARE_MACHINE_RESET( pet40 ); + MC6845_BEGIN_UPDATE( pet_begin_update ); + MC6845_UPDATE_ROW( pet40_update_row ); + UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); void check_interrupts(); @@ -206,6 +209,9 @@ public: DECLARE_MACHINE_START( pet80 ); DECLARE_MACHINE_RESET( pet80 ); + + MC6845_UPDATE_ROW( pet80_update_row ); + MC6845_UPDATE_ROW( cbm8296_update_row ); }; diff --git a/src/mess/includes/super80.h b/src/mess/includes/super80.h index e5344e627a3..b378bda25b9 100644 --- a/src/mess/includes/super80.h +++ b/src/mess/includes/super80.h @@ -70,6 +70,7 @@ public: DECLARE_VIDEO_START(super80v); DECLARE_PALETTE_INIT(super80m); DECLARE_QUICKLOAD_LOAD_MEMBER(super80); + MC6845_UPDATE_ROW(crtc_update_row); UINT32 screen_update_super80(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_super80v(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); UINT32 screen_update_super80d(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); @@ -119,7 +120,3 @@ private: optional_device<floppy_connector> m_floppy0; optional_device<floppy_connector> m_floppy1; }; - - -/*----------- defined in video/super80.c -----------*/ -MC6845_UPDATE_ROW( super80v_update_row ); diff --git a/src/mess/includes/svi318.h b/src/mess/includes/svi318.h index 709c1c83e07..d01643e83c8 100644 --- a/src/mess/includes/svi318.h +++ b/src/mess/includes/svi318.h @@ -119,6 +119,8 @@ public: DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER(svi318_cart); DECLARE_WRITE_LINE_MEMBER(write_centronics_busy); + MC6845_UPDATE_ROW(crtc_update_row); + required_device<z80_device> m_maincpu; protected: required_device<cassette_image_device> m_cassette; @@ -156,7 +158,4 @@ protected: extern const ins8250_interface svi318_ins8250_interface[2]; extern const wd17xx_interface svi_wd17xx_interface; -MC6845_UPDATE_ROW( svi806_crtc6845_update_row ); - - #endif /* SVI318_H_ */ diff --git a/src/mess/includes/trs80m2.h b/src/mess/includes/trs80m2.h index c588a85b8ae..94a85e36038 100644 --- a/src/mess/includes/trs80m2.h +++ b/src/mess/includes/trs80m2.h @@ -108,6 +108,8 @@ public: DECLARE_WRITE_LINE_MEMBER( kb_clock_w ); DECLARE_WRITE8_MEMBER( kbd_w ); + MC6845_UPDATE_ROW( crtc_update_row ); + // memory state int m_boot_rom; int m_bank; diff --git a/src/mess/includes/tvc.h b/src/mess/includes/tvc.h index 66486027e9c..27fd7100a12 100644 --- a/src/mess/includes/tvc.h +++ b/src/mess/includes/tvc.h @@ -119,6 +119,8 @@ public: DECLARE_QUICKLOAD_LOAD_MEMBER( tvc64); + MC6845_UPDATE_ROW(crtc_update_row); + tvcexp_slot_device * m_expansions[4]; UINT8 m_video_mode; UINT8 m_keyline; diff --git a/src/mess/includes/v1050.h b/src/mess/includes/v1050.h index 7ec844c0a8c..429f032c38a 100644 --- a/src/mess/includes/v1050.h +++ b/src/mess/includes/v1050.h @@ -150,6 +150,8 @@ public: DECLARE_WRITE_LINE_MEMBER(write_centronics_busy); DECLARE_WRITE_LINE_MEMBER(write_centronics_perror); + MC6845_UPDATE_ROW(crtc_update_row); + protected: virtual void machine_start(); virtual void machine_reset(); diff --git a/src/mess/includes/victor9k.h b/src/mess/includes/victor9k.h index d2932ec3745..b8d5c9c4381 100644 --- a/src/mess/includes/victor9k.h +++ b/src/mess/includes/victor9k.h @@ -162,6 +162,7 @@ public: DECLARE_WRITE_LINE_MEMBER( via6_irq_w ); DECLARE_WRITE_LINE_MEMBER( ssda_irq_w ); + MC6845_UPDATE_ROW( crtc_update_row ); void ready0_cb(floppy_image_device *, int device); int load0_cb(floppy_image_device *device); diff --git a/src/mess/machine/amstrad.c b/src/mess/machine/amstrad.c index a46a1a7303c..cb12927cba1 100644 --- a/src/mess/machine/amstrad.c +++ b/src/mess/machine/amstrad.c @@ -1079,37 +1079,6 @@ UINT32 amstrad_state::screen_update_amstrad(screen_device &screen, bitmap_ind16 } -MC6845_INTERFACE( amstrad_mc6845_intf ) -{ - false, /* show border area */ - 0,0,0,0, /* visarea adjustment */ - 16, /* number of pixels per video memory address */ - NULL, /* begin_update */ - NULL, /* update_row */ - NULL, /* end_update */ - DEVCB_DRIVER_LINE_MEMBER(amstrad_state,amstrad_de_changed), /* on_de_changed */ - DEVCB_NULL, /* on_cur_changed */ - DEVCB_DRIVER_LINE_MEMBER(amstrad_state,amstrad_hsync_changed), /* on_hsync_changed */ - DEVCB_DRIVER_LINE_MEMBER(amstrad_state,amstrad_vsync_changed), /* on_vsync_changed */ - NULL -}; - - -MC6845_INTERFACE( amstrad_plus_mc6845_intf ) -{ - false, /* show border area */ - 0,0,0,0, /* visarea adjustment */ - 16, /* number of pixels per video memory address */ - NULL, /* begin_update */ - NULL, /* update_row */ - NULL, /* end_update */ - DEVCB_DRIVER_LINE_MEMBER(amstrad_state,amstrad_plus_de_changed), /* on_de_changed */ - DEVCB_NULL, /* on_cur_changed */ - DEVCB_DRIVER_LINE_MEMBER(amstrad_state,amstrad_plus_hsync_changed), /* on_hsync_changed */ - DEVCB_DRIVER_LINE_MEMBER(amstrad_state,amstrad_plus_vsync_changed), /* on_vsync_changed */ - NULL -}; - /* traverses the daisy-chain of expansion devices, looking for the specified device */ static device_t* get_expansion_device(running_machine &machine, const char* tag) { diff --git a/src/mess/machine/svi318.c b/src/mess/machine/svi318.c index d7a8e93f0b6..131e9cc7168 100644 --- a/src/mess/machine/svi318.c +++ b/src/mess/machine/svi318.c @@ -313,16 +313,15 @@ READ8_MEMBER(svi318_state::svi318_fdc_irqdrq_r) return result; } -MC6845_UPDATE_ROW( svi806_crtc6845_update_row ) +MC6845_UPDATE_ROW( svi318_state::crtc_update_row ) { - svi318_state *state = device->machine().driver_data<svi318_state>(); - const rgb_t *palette = state->m_palette->palette()->entry_list_raw(); + const rgb_t *palette = m_palette->palette()->entry_list_raw(); int i; for( i = 0; i < x_count; i++ ) { int j; - UINT8 data = state->m_svi.svi806_gfx[ state->m_svi.svi806_ram->u8(( ma + i ) & 0x7FF) * 16 + ra ]; + UINT8 data = m_svi.svi806_gfx[ m_svi.svi806_ram->u8(( ma + i ) & 0x7FF) * 16 + ra ]; if ( i == cursor_x ) { diff --git a/src/mess/video/abc1600.c b/src/mess/video/abc1600.c index 85593b94b16..be4f5a8f355 100644 --- a/src/mess/video/abc1600.c +++ b/src/mess/video/abc1600.c @@ -127,7 +127,7 @@ const rom_entry *abc1600_mover_device::device_rom_region() const //------------------------------------------------- -// mc6845_interface crtc_intf +// mc6845 //------------------------------------------------- inline UINT16 abc1600_mover_device::get_crtca(UINT16 ma, UINT8 ra, UINT8 column) @@ -161,58 +161,32 @@ inline UINT16 abc1600_mover_device::get_crtca(UINT16 ma, UINT8 ra, UINT8 column) return (cr << 10) | ((ra & 0x0f) << 6) | ((cc << 1) & 0x3c); } -void abc1600_mover_device::crtc_update_row(device_t *device, bitmap_rgb32 &bitmap, const rectangle &cliprect, UINT16 ma, UINT8 ra, UINT16 y, UINT8 x_count, INT8 cursor_x, int de, int hbp, int vbp, void *param) +MC6845_UPDATE_ROW(abc1600_mover_device::crtc_update_row) { int x = 0; const pen_t *pen = m_palette->pens(); - + for (int column = 0; column < x_count; column += 2) { UINT16 dma = get_crtca(ma, ra, column); - + // data is read out of video RAM in nibble mode by strobing CAS 4 times for (int cas = 0; cas < 4; cas++) { UINT16 data = read_videoram(dma + cas); - + for (int bit = 0; bit < 16; bit++) { int color = ((BIT(data, 15) ^ PIX_POL) && !BLANK) && de; - + bitmap.pix32(vbp + y, hbp + x++) = pen[color]; - + data <<= 1; } } } } -static MC6845_UPDATE_ROW( abc1600_update_row ) -{ - abc1600_mover_device *mover = downcast<abc1600_mover_device *>(device->owner()); - mover->crtc_update_row(device, bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp, param); -} - -static MC6845_ON_UPDATE_ADDR_CHANGED( crtc_update ) -{ -} - -static MC6845_INTERFACE( crtc_intf ) -{ - true, - 0,0,0,0, - 32, - NULL, - abc1600_update_row, - NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - crtc_update -}; - - //------------------------------------------------- // MACHINE_CONFIG_FRAGMENT( abc1600_mover ) //------------------------------------------------- @@ -229,7 +203,10 @@ static MACHINE_CONFIG_FRAGMENT( abc1600_mover ) MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette") - MCFG_MC6845_ADD(SY6845E_TAG, SY6845E, SCREEN_TAG, XTAL_64MHz/32, crtc_intf) + MCFG_MC6845_ADD(SY6845E_TAG, SY6845E, SCREEN_TAG, XTAL_64MHz/32) + MCFG_MC6845_SHOW_BORDER_AREA(true) + MCFG_MC6845_CHAR_WIDTH(32) + MCFG_MC6845_UPDATE_ROW_CB(abc1600_mover_device, crtc_update_row) MACHINE_CONFIG_END diff --git a/src/mess/video/abc1600.h b/src/mess/video/abc1600.h index 58bf6a2059d..126b195aaeb 100644 --- a/src/mess/video/abc1600.h +++ b/src/mess/video/abc1600.h @@ -54,7 +54,7 @@ public: UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); - void crtc_update_row(device_t *device, bitmap_rgb32 &bitmap, const rectangle &cliprect, UINT16 ma, UINT8 ra, UINT16 y, UINT8 x_count, INT8 cursor_x, int de, int hbp, int vbp, void *param); + MC6845_UPDATE_ROW(crtc_update_row); protected: // device-level overrides diff --git a/src/mess/video/abc800.c b/src/mess/video/abc800.c index bceb3d57eb2..ee9fc3a19de 100644 --- a/src/mess/video/abc800.c +++ b/src/mess/video/abc800.c @@ -231,12 +231,10 @@ void abc800m_state::hr_update(bitmap_rgb32 &bitmap, const rectangle &cliprect) // MC6845_UPDATE_ROW( abc800m_update_row ) //------------------------------------------------- -static MC6845_UPDATE_ROW( abc800m_update_row ) +MC6845_UPDATE_ROW( abc800m_state::abc800m_update_row ) { - abc800m_state *state = device->machine().driver_data<abc800m_state>(); - int column; - rgb_t fgpen = state->m_palette->pen(1); + rgb_t fgpen = m_palette->pen(1); y += vbp; @@ -244,8 +242,8 @@ static MC6845_UPDATE_ROW( abc800m_update_row ) { int bit; - UINT16 address = (state->m_char_ram[(ma + column) & 0x7ff] << 4) | (ra & 0x0f); - UINT8 data = (state->m_char_rom->base()[address & 0x7ff] & 0x3f); + UINT16 address = (m_char_ram[(ma + column) & 0x7ff] << 4) | (ra & 0x0f); + UINT8 data = (m_char_rom->base()[address & 0x7ff] & 0x3f); if (column == cursor_x) { @@ -270,26 +268,6 @@ static MC6845_UPDATE_ROW( abc800m_update_row ) //------------------------------------------------- -// mc6845_interface crtc_intf -//------------------------------------------------- - -static MC6845_INTERFACE( crtc_intf ) -{ - true, - 0,0,0,0, - ABC800_CHAR_WIDTH, - NULL, - abc800m_update_row, - NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_DEVICE_LINE_MEMBER(Z80DART_TAG, z80dart_device, rib_w), - NULL -}; - - -//------------------------------------------------- // SCREEN_UPDATE( abc800m ) //------------------------------------------------- @@ -316,7 +294,11 @@ UINT32 abc800m_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, //------------------------------------------------- MACHINE_CONFIG_FRAGMENT( abc800m_video ) - MCFG_MC6845_ADD(MC6845_TAG, MC6845, SCREEN_TAG, ABC800_CCLK, crtc_intf) + MCFG_MC6845_ADD(MC6845_TAG, MC6845, SCREEN_TAG, ABC800_CCLK) + MCFG_MC6845_SHOW_BORDER_AREA(true) + MCFG_MC6845_CHAR_WIDTH(ABC800_CHAR_WIDTH) + MCFG_MC6845_UPDATE_ROW_CB(abc800m_state, abc800m_update_row) + MCFG_MC6845_OUT_VSYNC_CB(DEVWRITELINE(Z80DART_TAG, z80dart_device, rib_w)) MCFG_SCREEN_ADD(SCREEN_TAG, RASTER) MCFG_SCREEN_UPDATE_DRIVER(abc800m_state, screen_update) diff --git a/src/mess/video/abc802.c b/src/mess/video/abc802.c index a8dac53e8c3..667f8cfe931 100644 --- a/src/mess/video/abc802.c +++ b/src/mess/video/abc802.c @@ -14,7 +14,7 @@ // MC6845_UPDATE_ROW( abc802_update_row ) //------------------------------------------------- -static MC6845_UPDATE_ROW( abc802_update_row ) +MC6845_UPDATE_ROW( abc802_state::abc802_update_row ) { /* @@ -55,8 +55,7 @@ static MC6845_UPDATE_ROW( abc802_update_row ) */ - abc802_state *state = device->machine().driver_data<abc802_state>(); - const pen_t *pen = state->m_palette->pens(); + const pen_t *pen = m_palette->pens(); int rf = 0, rc = 0, rg = 0; @@ -64,7 +63,7 @@ static MC6845_UPDATE_ROW( abc802_update_row ) for (int column = 0; column < x_count; column++) { - UINT8 code = state->m_char_ram[(ma + column) & 0x7ff]; + UINT8 code = m_char_ram[(ma + column) & 0x7ff]; UINT16 address = code << 4; UINT8 ra_latch = ra; UINT8 data; @@ -76,7 +75,7 @@ static MC6845_UPDATE_ROW( abc802_update_row ) ra_latch = 0x0f; } - if ((state->m_flshclk && rf) || rc) + if ((m_flshclk && rf) || rc) { ra_latch = 0x0e; } @@ -86,7 +85,7 @@ static MC6845_UPDATE_ROW( abc802_update_row ) address |= 0x800; } - data = state->m_char_rom->base()[(address + ra_latch) & 0xfff]; + data = m_char_rom->base()[(address + ra_latch) & 0xfff]; if (data & ABC802_ATE) { @@ -119,7 +118,7 @@ static MC6845_UPDATE_ROW( abc802_update_row ) { data <<= 2; - if (state->m_80_40_mux) + if (m_80_40_mux) { for (int bit = 0; bit < ABC800_CHAR_WIDTH; bit++) { @@ -176,26 +175,6 @@ WRITE_LINE_MEMBER( abc802_state::vs_w ) } -//------------------------------------------------- -// mc6845_interface crtc_intf -//------------------------------------------------- - -static MC6845_INTERFACE( crtc_intf ) -{ - true, - 0,0,0,0, - ABC800_CHAR_WIDTH, - NULL, - abc802_update_row, - NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(abc802_state, vs_w), - NULL -}; - - void abc802_state::video_start() { // register for state saving @@ -223,7 +202,11 @@ UINT32 abc802_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, //------------------------------------------------- MACHINE_CONFIG_FRAGMENT( abc802_video ) - MCFG_MC6845_ADD(MC6845_TAG, MC6845, SCREEN_TAG, ABC800_CCLK, crtc_intf) + MCFG_MC6845_ADD(MC6845_TAG, MC6845, SCREEN_TAG, ABC800_CCLK) + MCFG_MC6845_SHOW_BORDER_AREA(true) + MCFG_MC6845_CHAR_WIDTH(ABC800_CHAR_WIDTH) + MCFG_MC6845_UPDATE_ROW_CB(abc802_state, abc802_update_row) + MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(abc802_state, vs_w)) MCFG_SCREEN_ADD(SCREEN_TAG, RASTER) MCFG_SCREEN_UPDATE_DRIVER(abc802_state, screen_update) diff --git a/src/mess/video/abc806.c b/src/mess/video/abc806.c index 8132ae3d931..c83acf9e673 100644 --- a/src/mess/video/abc806.c +++ b/src/mess/video/abc806.c @@ -222,26 +222,25 @@ WRITE8_MEMBER( abc806_state::sso_w ) // MC6845_UPDATE_ROW( abc806_update_row ) //------------------------------------------------- -static MC6845_UPDATE_ROW( abc806_update_row ) +MC6845_UPDATE_ROW( abc806_state::abc806_update_row ) { - abc806_state *state = device->machine().driver_data<abc806_state>(); - const pen_t *pen = state->m_palette->pens(); + const pen_t *pen = m_palette->pens(); // UINT8 old_data = 0xff; int fg_color = 7; int bg_color = 0; int underline = 0; int flash = 0; - int e5 = state->m_40; - int e6 = state->m_40; + int e5 = m_40; + int e6 = m_40; int th = 0; - y += state->m_sync + vbp; + y += m_sync + vbp; for (int column = 0; column < x_count; column++) { - UINT8 data = state->m_char_ram[(ma + column) & 0x7ff]; - UINT8 attr = state->m_attr_ram[(ma + column) & 0x7ff]; + UINT8 data = m_char_ram[(ma + column) & 0x7ff]; + UINT8 attr = m_attr_ram[(ma + column) & 0x7ff]; UINT16 rad_addr; UINT8 rad_data; @@ -270,7 +269,7 @@ static MC6845_UPDATE_ROW( abc806_update_row ) e6 = BIT(attr, 1); // read attributes from next byte - attr = state->m_attr_ram[(ma + column + 1) & 0x7ff]; + attr = m_attr_ram[(ma + column + 1) & 0x7ff]; if (attr != 0x00) { @@ -289,8 +288,8 @@ static MC6845_UPDATE_ROW( abc806_update_row ) bg_color = (attr >> 3) & 0x07; underline = BIT(attr, 6); flash = BIT(attr, 7); - e5 = state->m_40; - e6 = state->m_40; + e5 = m_40; + e6 = m_40; } if (column == cursor_x) @@ -299,14 +298,14 @@ static MC6845_UPDATE_ROW( abc806_update_row ) } else { - rad_addr = (e6 << 8) | (e5 << 7) | (flash << 6) | (underline << 5) | (state->m_flshclk << 4) | ra; - rad_data = state->m_rad_prom->base()[rad_addr] & 0x0f; + rad_addr = (e6 << 8) | (e5 << 7) | (flash << 6) | (underline << 5) | (m_flshclk << 4) | ra; + rad_data = m_rad_prom->base()[rad_addr] & 0x0f; rad_data = ra; // HACK because the RAD prom is not dumped yet } UINT16 chargen_addr = (th << 12) | (data << 4) | rad_data; - UINT8 chargen_data = state->m_char_rom->base()[chargen_addr & 0xfff] << 2; + UINT8 chargen_data = m_char_rom->base()[chargen_addr & 0xfff] << 2; int x = hbp + (column + 4) * ABC800_CHAR_WIDTH; for (int bit = 0; bit < ABC800_CHAR_WIDTH; bit++) @@ -393,26 +392,6 @@ WRITE_LINE_MEMBER( abc806_state::vs_w ) //------------------------------------------------- -// mc6845_interface crtc_intf -//------------------------------------------------- - -static MC6845_INTERFACE( crtc_intf ) -{ - true, - 0,0,0,0, - ABC800_CHAR_WIDTH, - NULL, - abc806_update_row, - NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(abc806_state, hs_w), - DEVCB_DRIVER_LINE_MEMBER(abc806_state, vs_w), - NULL -}; - - -//------------------------------------------------- // hr_update - high resolution screen update //------------------------------------------------- @@ -523,7 +502,12 @@ PALETTE_INIT_MEMBER( abc806_state, abc806 ) //------------------------------------------------- MACHINE_CONFIG_FRAGMENT( abc806_video ) - MCFG_MC6845_ADD(MC6845_TAG, MC6845, SCREEN_TAG, ABC800_CCLK, crtc_intf) + MCFG_MC6845_ADD(MC6845_TAG, MC6845, SCREEN_TAG, ABC800_CCLK) + MCFG_MC6845_SHOW_BORDER_AREA(true) + MCFG_MC6845_CHAR_WIDTH(ABC800_CHAR_WIDTH) + MCFG_MC6845_UPDATE_ROW_CB(abc806_state, abc806_update_row) + MCFG_MC6845_OUT_HSYNC_CB(WRITELINE(abc806_state, hs_w)) + MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(abc806_state, vs_w)) MCFG_SCREEN_ADD(SCREEN_TAG, RASTER) MCFG_SCREEN_UPDATE_DRIVER(abc806_state, screen_update) diff --git a/src/mess/video/bbc.c b/src/mess/video/bbc.c index c3df043c574..f504a1df513 100644 --- a/src/mess/video/bbc.c +++ b/src/mess/video/bbc.c @@ -162,15 +162,14 @@ WRITE8_MEMBER(bbc_state::bbc_videoULA_w) * BBC circuits controlled by 6845 Outputs ************************************************************************/ -static MC6845_UPDATE_ROW( vid_update_row ) +MC6845_UPDATE_ROW( bbc_state::crtc_update_row ) { - bbc_state *state = device->machine().driver_data<bbc_state>(); - const rgb_t *palette = state->m_palette->palette()->entry_list_raw(); + const rgb_t *palette = m_palette->palette()->entry_list_raw(); - if (state->m_videoULA_teletext_normal_select) + if (m_videoULA_teletext_normal_select) { - state->m_trom->lose_w(1); - state->m_trom->lose_w(0); + m_trom->lose_w(1); + m_trom->lose_w(0); for(int x_pos=0; x_pos<x_count; x_pos++) { @@ -180,22 +179,24 @@ static MC6845_UPDATE_ROW( vid_update_row ) if (((ma>>13)&1)==0) { - state->m_Teletext_Latch=0; - } else { - state->m_Teletext_Latch=(state->m_BBC_Video_RAM[state->calculate_video_address(ma+x_pos,ra)]); + m_Teletext_Latch=0; + } + else + { + m_Teletext_Latch=(m_BBC_Video_RAM[calculate_video_address(ma+x_pos,ra)]); } - state->m_trom->write((state->m_Teletext_Latch&0x3f)|(state->m_Teletext_Latch&0x40)); + m_trom->write((m_Teletext_Latch&0x3f)|(m_Teletext_Latch&0x40)); - state->m_trom->f1_w(1); - state->m_trom->f1_w(0); + m_trom->f1_w(1); + m_trom->f1_w(0); for(int pixelno=0;pixelno<6;pixelno++) { - state->m_trom->tr6_w(1); - state->m_trom->tr6_w(0); + m_trom->tr6_w(1); + m_trom->tr6_w(0); - int col=state->m_trom->get_rgb() ^ ((x_pos==cursor_x) ? 7 : 0); + int col=m_trom->get_rgb() ^ ((x_pos==cursor_x) ? 7 : 0); int r = BIT(col, 0) * 0xff; int g = BIT(col, 1) * 0xff; @@ -203,14 +204,14 @@ static MC6845_UPDATE_ROW( vid_update_row ) rgb_t rgb = rgb_t(r, g, b); - bitmap.pix32(y, (x_pos*state->m_pixels_per_byte)+pixelno) = rgb; + bitmap.pix32(y, (x_pos*m_pixels_per_byte)+pixelno) = rgb; } } if (ra == 18) { - state->m_trom->lose_w(1); - state->m_trom->lose_w(0); + m_trom->lose_w(1); + m_trom->lose_w(0); } } else @@ -222,13 +223,13 @@ static MC6845_UPDATE_ROW( vid_update_row ) { for(int x_pos=0; x_pos<x_count; x_pos++) { - int vmem=state->calculate_video_address(ma+x_pos,ra); - unsigned char i=state->m_BBC_Video_RAM[vmem]; + int vmem=calculate_video_address(ma+x_pos,ra); + unsigned char i=m_BBC_Video_RAM[vmem]; - for(int pixelno=0;pixelno<state->m_pixels_per_byte;pixelno++) + for(int pixelno=0;pixelno<m_pixels_per_byte;pixelno++) { - int col=state->m_videoULA_pallet_lookup[state->m_pixel_bits[i]] ^ ((x_pos==cursor_x) ? 7 : 0); - bitmap.pix32(y, (x_pos*state->m_pixels_per_byte)+pixelno)=palette[col]; + int col=m_videoULA_pallet_lookup[m_pixel_bits[i]] ^ ((x_pos==cursor_x) ? 7 : 0); + bitmap.pix32(y, (x_pos*m_pixels_per_byte)+pixelno)=palette[col]; i=(i<<1)|1; } } @@ -237,9 +238,9 @@ static MC6845_UPDATE_ROW( vid_update_row ) { for(int x_pos=0; x_pos<x_count; x_pos++) { - for(int pixelno=0;pixelno<state->m_pixels_per_byte;pixelno++) + for(int pixelno=0;pixelno<m_pixels_per_byte;pixelno++) { - bitmap.pix32(y, (x_pos*state->m_pixels_per_byte)+pixelno)=palette[7]; + bitmap.pix32(y, (x_pos*m_pixels_per_byte)+pixelno)=palette[7]; } } } @@ -251,25 +252,6 @@ WRITE_LINE_MEMBER(bbc_state::bbc_vsync) m_trom->dew_w(state); } - -MC6845_INTERFACE( bbc_mc6845_intf ) -{ - false, /* show border area */ - 0,0,0,0, /* visarea adjustment */ - 8, /* numbers of pixels per video memory address */ - NULL, /* begin_update */ - vid_update_row, /* update_row */ - NULL, /* end_update */ - DEVCB_NULL, /* on_de_changed */ - DEVCB_NULL, /* on_cur_changed */ - DEVCB_NULL, /* on_hsync_changed */ - DEVCB_DRIVER_LINE_MEMBER(bbc_state,bbc_vsync), /* on_vsync_changed */ - NULL -}; - - - - /************************************************************************ * memory interface to BBC's 6845 ************************************************************************/ diff --git a/src/mess/video/dgn_beta.c b/src/mess/video/dgn_beta.c index 1dc294646e5..84a90cc0592 100644 --- a/src/mess/video/dgn_beta.c +++ b/src/mess/video/dgn_beta.c @@ -91,24 +91,23 @@ the access to the video memory is unclear to me at the moment. #define GCtrlFS 0x20 /* labeled F/S, not yet sure of function Fast or Slow scan ? */ #define GCtrlAddrLines 0xC0 /* Top two address lines for text mode */ -#define IsTextMode (state->m_GCtrl & GCtrlChrGfx) ? 1 : 0 // Is this text mode ? -#define IsGfx16 ((~state->m_GCtrl & GCtrlChrGfx) && (~state->m_GCtrl & GCtrlControl)) ? 1 : 0 // is this 320x256x16bpp mode -#define IsGfx2 ((state->m_GCtrl & GCtrlHiLo) && (~state->m_GCtrl & GCtrlFS)) ? 1 : 0 // Is this a 2 colour mode -#define SWChar (state->m_GCtrl & GCtrlSWChar)>>1 // Swchar bit +#define IsTextMode (m_GCtrl & GCtrlChrGfx) ? 1 : 0 // Is this text mode ? +#define IsGfx16 ((~m_GCtrl & GCtrlChrGfx) && (~m_GCtrl & GCtrlControl)) ? 1 : 0 // is this 320x256x16bpp mode +#define IsGfx2 ((m_GCtrl & GCtrlHiLo) && (~m_GCtrl & GCtrlFS)) ? 1 : 0 // Is this a 2 colour mode +#define SWChar (m_GCtrl & GCtrlSWChar)>>1 // Swchar bit -static MC6845_UPDATE_ROW( dgnbeta_update_row ) +MC6845_UPDATE_ROW( dgn_beta_state::crtc_update_row ) { - dgn_beta_state *state = device->machine().driver_data<dgn_beta_state>(); - const rgb_t *palette = state->m_palette->palette()->entry_list_raw(); - UINT8 *videoram = state->m_videoram; + const rgb_t *palette = m_palette->palette()->entry_list_raw(); + UINT8 *videoram = m_videoram; UINT32 *p = &bitmap.pix32(y); int i; if(IsTextMode) { - UINT8 *chr_gen = state->memregion("gfx1")->base(); + UINT8 *chr_gen = memregion("gfx1")->base(); for ( i = 0; i < x_count; i++ ) { - UINT32 offset = ( ( ma + i ) | ((state->m_GCtrl & GCtrlAddrLines)<<8)) << 1; + UINT32 offset = ( ( ma + i ) | ((m_GCtrl & GCtrlAddrLines)<<8)) << 1; UINT8 chr = videoram[ offset ]; UINT8 attr = videoram[ offset +1 ]; @@ -122,7 +121,7 @@ static MC6845_UPDATE_ROW( dgnbeta_update_row ) int ULActive=(UnderLine && (ra==9) && ~SWChar); /* Invert forground and background if flashing char and flash acive */ - int Invert=(FlashChar & state->m_FlashBit); + int Invert=(FlashChar & m_FlashBit); /* Underline inverts flash */ if (ULActive) @@ -215,7 +214,7 @@ static MC6845_UPDATE_ROW( dgnbeta_update_row ) { for (Dot=0;Dot<16;Dot=Dot+1) { - Colour=state->m_ColourRAM[((Word&0x8000)>>15)]; + Colour=m_ColourRAM[((Word&0x8000)>>15)]; *p = palette[Colour]; p++; @@ -227,7 +226,7 @@ static MC6845_UPDATE_ROW( dgnbeta_update_row ) { for (Dot=0;Dot<8;Dot++) { - Colour=state->m_ColourRAM[((Word&0x8000)>>14) | ((Word&0x80)>>7)]; + Colour=m_ColourRAM[((Word&0x8000)>>14) | ((Word&0x80)>>7)]; *p = palette[Colour]; p++; *p = palette[Colour]; p++; @@ -256,21 +255,6 @@ WRITE_LINE_MEMBER(dgn_beta_state::dgnbeta_vsync_changed) dgn_beta_frame_interrupt(state); } -MC6845_INTERFACE( dgnbeta_crtc6845_interface ) -{ - false, - 0,0,0,0, - 16 /*?*/, - NULL, - dgnbeta_update_row, - NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(dgn_beta_state,dgnbeta_vsync_changed), - NULL -}; - /* Set video control register from I28 port B, the control register is laid out as */ /* follows :- */ diff --git a/src/mess/video/kaypro.c b/src/mess/video/kaypro.c index 8e415498cd5..d4845b1b682 100644 --- a/src/mess/video/kaypro.c +++ b/src/mess/video/kaypro.c @@ -131,10 +131,9 @@ UINT32 kaypro_state::screen_update_kaypro2x(screen_device &screen, bitmap_rgb32 Not sure how the attributes interact, for example does an underline blink? */ -MC6845_UPDATE_ROW( kaypro2x_update_row ) +MC6845_UPDATE_ROW( kaypro_state::kaypro2x_update_row ) { - kaypro_state *state = device->machine().driver_data<kaypro_state>(); - const rgb_t *palette = state->m_palette->palette()->entry_list_raw(); + const rgb_t *palette = m_palette->palette()->entry_list_raw(); UINT32 *p = &bitmap.pix32(y); UINT16 x; UINT8 gfx,fg,bg; @@ -144,8 +143,8 @@ MC6845_UPDATE_ROW( kaypro2x_update_row ) UINT8 inv=0; // if (x == cursor_x) inv=0xff; /* uncomment when mame fixed */ UINT16 mem = (ma + x) & 0x7ff; - UINT8 chr = state->m_p_videoram[mem]; - UINT8 attr = state->m_p_videoram[mem | 0x800]; + UINT8 chr = m_p_videoram[mem]; + UINT8 attr = m_p_videoram[mem | 0x800]; if ((attr & 3) == 3) { @@ -171,18 +170,18 @@ MC6845_UPDATE_ROW( kaypro2x_update_row ) } /* Take care of flashing characters */ - if ( (BIT(attr, 2)) & (BIT(state->m_framecnt, 3)) ) + if ( (BIT(attr, 2)) & (BIT(m_framecnt, 3)) ) fg = bg; /* process cursor */ if (x == cursor_x) - inv ^= state->m_mc6845_cursor[ra]; + inv ^= m_mc6845_cursor[ra]; /* get pattern of pixels for that character scanline */ if ( (ra == 15) & (BIT(attr, 3)) ) /* underline */ gfx = 0xff; else - gfx = state->m_p_chargen[(chr<<4) | ra ] ^ inv; + gfx = m_p_chargen[(chr<<4) | ra ] ^ inv; /* Display a scanline of a character (8 pixels) */ *p++ = palette[BIT( gfx, 7 ) ? fg : bg]; diff --git a/src/mess/video/mbc55x.c b/src/mess/video/mbc55x.c index bc48ae654d1..5d9eb0bc3be 100644 --- a/src/mess/video/mbc55x.c +++ b/src/mess/video/mbc55x.c @@ -71,7 +71,7 @@ give the leftmost column of the rectangle, the next four give the next column, a #define DEBUG_LINES 1 #define DEBUG_VSYNC 2 -#define DEBUG_SET(flags) ((mstate->m_debug_video & (flags))==(flags)) +#define DEBUG_SET(flags) ((m_debug_video & (flags))==(flags)) static void video_debug(running_machine &machine, int ref, int params, const char *param[]) { @@ -87,14 +87,13 @@ static void video_debug(running_machine &machine, int ref, int params, const cha } } -static MC6845_UPDATE_ROW( vid_update_row ) +MC6845_UPDATE_ROW( mbc55x_state::crtc_update_row ) { - mbc55x_state *mstate = device->machine().driver_data<mbc55x_state>(); - const rgb_t *palette = mstate->m_palette->palette()->entry_list_raw(); + const rgb_t *palette = m_palette->palette()->entry_list_raw(); - UINT8 *ram = &mstate->m_ram->pointer()[0]; - UINT8 *red = &mstate->m_video_mem[RED_PLANE_OFFSET]; - UINT8 *blue = &mstate->m_video_mem[BLUE_PLANE_OFFSET]; + UINT8 *ram = &m_ram->pointer()[0]; + UINT8 *red = &m_video_mem[RED_PLANE_OFFSET]; + UINT8 *blue = &m_video_mem[BLUE_PLANE_OFFSET]; UINT8 *green; int offset; UINT8 rpx,gpx,bpx; @@ -106,7 +105,7 @@ static MC6845_UPDATE_ROW( vid_update_row ) UINT8 shifts; UINT8 colour; - switch(mstate->m_vram_page) + switch(m_vram_page) { case 4 : green=&ram[0x08000]; break; case 5 : green=&ram[0x1C000]; break; @@ -158,21 +157,6 @@ WRITE_LINE_MEMBER( mbc55x_state::vid_vsync_changed ) { } -MC6845_INTERFACE( mb55x_mc6845_intf ) -{ - false, /* show border area */ - 0,0,0,0, /* visarea adjustment */ - 8, /* numbers of pixels per video memory address */ - NULL, /* begin_update */ - vid_update_row, /* update_row */ - NULL, /* end_update */ - DEVCB_NULL, /* on_de_changed */ - DEVCB_NULL, /* on_cur_changed */ - DEVCB_DRIVER_LINE_MEMBER(mbc55x_state, vid_hsync_changed), /* on_hsync_changed */ - DEVCB_DRIVER_LINE_MEMBER(mbc55x_state, vid_vsync_changed), /* on_vsync_changed */ - NULL -}; - void mbc55x_state::video_start() { m_debug_video=0; diff --git a/src/mess/video/mbee.c b/src/mess/video/mbee.c index fdfd99cd5f3..c1a46682a85 100644 --- a/src/mess/video/mbee.c +++ b/src/mess/video/mbee.c @@ -149,7 +149,7 @@ WRITE8_MEMBER( mbee_state::mbeeppc_1c_w ) /* d7 extended graphics (1=allow attributes and pcg banks) d5 bankswitch basic rom d4 select attribute ram - d3..d0 select state->m_videoram bank */ + d3..d0 select m_videoram bank */ m_1c = data; membank("basic")->set_entry(BIT(data, 5)); @@ -160,7 +160,7 @@ WRITE8_MEMBER( mbee_state::mbee256_1c_w ) /* d7 extended graphics (1=allow attributes and pcg banks) d5 bankswitch basic rom d4 select attribute ram - d3..d0 select state->m_videoram bank */ + d3..d0 select m_videoram bank */ m_1c = data; } @@ -401,22 +401,21 @@ UINT32 mbee_state::screen_update_mbee(screen_device &screen, bitmap_rgb32 &bitma } -MC6845_ON_UPDATE_ADDR_CHANGED( mbee_update_addr ) +MC6845_ON_UPDATE_ADDR_CHANGED( mbee_state::mbee_update_addr ) { /* not sure what goes in here - parameters passed are device, address, strobe */ } -MC6845_ON_UPDATE_ADDR_CHANGED( mbee256_update_addr ) +MC6845_ON_UPDATE_ADDR_CHANGED( mbee_state::mbee256_update_addr ) { /* not used on 256TC */ } /* monochrome bee */ -MC6845_UPDATE_ROW( mbee_update_row ) +MC6845_UPDATE_ROW( mbee_state::mbee_update_row ) { - mbee_state *state = device->machine().driver_data<mbee_state>(); - const rgb_t *palette = state->m_palette->palette()->entry_list_raw(); + const rgb_t *palette = m_palette->palette()->entry_list_raw(); UINT8 chr,gfx; UINT16 mem,x; UINT32 *p = &bitmap.pix32(y); @@ -425,16 +424,16 @@ MC6845_UPDATE_ROW( mbee_update_row ) { UINT8 inv=0; mem = (ma + x) & 0x7ff; - chr = state->m_p_videoram[mem]; + chr = m_p_videoram[mem]; - state->mbee_video_kbd_scan(x+ma); + mbee_video_kbd_scan(x+ma); /* process cursor */ if (x == cursor_x) - inv ^= state->m_sy6545_cursor[ra]; // cursor scan row + inv ^= m_sy6545_cursor[ra]; // cursor scan row /* get pattern of pixels for that character scanline */ - gfx = state->m_p_gfxram[(chr<<4) | ra] ^ inv; + gfx = m_p_gfxram[(chr<<4) | ra] ^ inv; /* Display a scanline of a character (8 pixels) */ *p++ = palette[BIT(gfx, 7)]; @@ -449,30 +448,29 @@ MC6845_UPDATE_ROW( mbee_update_row ) } /* prom-based colours */ -MC6845_UPDATE_ROW( mbeeic_update_row ) +MC6845_UPDATE_ROW( mbee_state::mbeeic_update_row ) { - mbee_state *state = device->machine().driver_data<mbee_state>(); - const rgb_t *palette = state->m_palette->palette()->entry_list_raw(); + const rgb_t *palette = m_palette->palette()->entry_list_raw(); UINT8 chr,gfx,fg,bg; UINT16 mem,x,col; - UINT16 colourm = (state->m_08 & 0x0e) << 7; + UINT16 colourm = (m_08 & 0x0e) << 7; UINT32 *p = &bitmap.pix32(y); for (x = 0; x < x_count; x++) // for each character { UINT8 inv=0; mem = (ma + x) & 0x7ff; - chr = state->m_p_videoram[mem]; - col = state->m_p_colorram[mem] | colourm; // read a byte of colour + chr = m_p_videoram[mem]; + col = m_p_colorram[mem] | colourm; // read a byte of colour - state->mbee_video_kbd_scan(x+ma); + mbee_video_kbd_scan(x+ma); /* process cursor */ if (x == cursor_x) - inv ^= state->m_sy6545_cursor[ra]; // cursor scan row + inv ^= m_sy6545_cursor[ra]; // cursor scan row /* get pattern of pixels for that character scanline */ - gfx = state->m_p_gfxram[(chr<<4) | ra] ^ inv; + gfx = m_p_gfxram[(chr<<4) | ra] ^ inv; fg = (col & 0x001f) | 64; // map to foreground palette bg = (col & 0x07e0) >> 5; // and background palette @@ -490,10 +488,9 @@ MC6845_UPDATE_ROW( mbeeic_update_row ) /* new colours & hires2 */ -MC6845_UPDATE_ROW( mbeeppc_update_row ) +MC6845_UPDATE_ROW( mbee_state::mbeeppc_update_row ) { - mbee_state *state = device->machine().driver_data<mbee_state>(); - const rgb_t *palette = state->m_palette->palette()->entry_list_raw(); + const rgb_t *palette = m_palette->palette()->entry_list_raw(); UINT8 gfx,fg,bg; UINT16 mem,x,col,chr; UINT32 *p = &bitmap.pix32(y); @@ -502,12 +499,12 @@ MC6845_UPDATE_ROW( mbeeppc_update_row ) { UINT8 inv=0; mem = (ma + x) & 0x7ff; - chr = state->m_p_videoram[mem]; - col = state->m_p_colorram[mem]; // read a byte of colour + chr = m_p_videoram[mem]; + col = m_p_colorram[mem]; // read a byte of colour - if (state->m_1c & 0x80) // are extended features enabled? + if (m_1c & 0x80) // are extended features enabled? { - UINT8 attr = state->m_p_attribram[mem]; + UINT8 attr = m_p_attribram[mem]; if (chr & 0x80) chr += ((attr & 15) << 7); // bump chr to its particular pcg definition @@ -515,18 +512,18 @@ MC6845_UPDATE_ROW( mbeeppc_update_row ) if (attr & 0x40) inv ^= 0xff; // inverse attribute - if ((attr & 0x80) && (state->m_framecnt & 0x10)) // flashing attribute + if ((attr & 0x80) && (m_framecnt & 0x10)) // flashing attribute chr = 0x20; } - state->mbee_video_kbd_scan(x+ma); + mbee_video_kbd_scan(x+ma); /* process cursor */ if (x == cursor_x) - inv ^= state->m_sy6545_cursor[ra]; // cursor scan row + inv ^= m_sy6545_cursor[ra]; // cursor scan row /* get pattern of pixels for that character scanline */ - gfx = state->m_p_gfxram[(chr<<4) | ra] ^ inv; + gfx = m_p_gfxram[(chr<<4) | ra] ^ inv; fg = col & 15; // map to foreground palette bg = (col & 0xf0) >> 4; // and background palette diff --git a/src/mess/video/pc1512.c b/src/mess/video/pc1512.c index f51549967ca..39ae133f0a7 100644 --- a/src/mess/video/pc1512.c +++ b/src/mess/video/pc1512.c @@ -360,7 +360,7 @@ WRITE8_MEMBER( pc1512_state::vdu_w ) //------------------------------------------------- -// mc6845_interface crtc_intf +// mc6845 //------------------------------------------------- int pc1512_state::get_display_mode(UINT8 mode) @@ -394,7 +394,7 @@ offs_t pc1512_state::get_char_rom_offset() return ((m_lk->read() >> 5) & 0x03) << 11; } -void pc1512_state::draw_alpha(bitmap_rgb32 &bitmap, const rectangle &cliprect, UINT16 ma, UINT8 ra, UINT16 y, UINT8 x_count, INT8 cursor_x, int de, int hbp, int vbp, void *param) +MC6845_UPDATE_ROW( pc1512_state::draw_alpha ) { offs_t char_rom_offset = get_char_rom_offset(); UINT32 *p = &bitmap.pix32(y + vbp, hbp); @@ -463,7 +463,7 @@ int pc1512_state::get_color(UINT8 data) return color; }; -void pc1512_state::draw_graphics_1(bitmap_rgb32 &bitmap, const rectangle &cliprect, UINT16 ma, UINT8 ra, UINT16 y, UINT8 x_count, INT8 cursor_x, int de, int hbp, int vbp, void *param) +MC6845_UPDATE_ROW( pc1512_state::draw_graphics_1 ) { if (y > 199) return; @@ -483,7 +483,7 @@ void pc1512_state::draw_graphics_1(bitmap_rgb32 &bitmap, const rectangle &clipre } } -void pc1512_state::draw_graphics_2(bitmap_rgb32 &bitmap, const rectangle &cliprect, UINT16 ma, UINT8 ra, UINT16 y, UINT8 x_count, INT8 cursor_x, int de, int hbp, int vbp, void *param) +MC6845_UPDATE_ROW( pc1512_state::draw_graphics_2 ) { if (y > 199) return; @@ -506,42 +506,25 @@ void pc1512_state::draw_graphics_2(bitmap_rgb32 &bitmap, const rectangle &clipre } } -static MC6845_UPDATE_ROW( pc1512_update_row ) +MC6845_UPDATE_ROW( pc1512_state::crtc_update_row ) { - pc1512_state *state = device->machine().driver_data<pc1512_state>(); - - switch (state->get_display_mode(state->m_vdu_mode)) + switch (get_display_mode(m_vdu_mode)) { case ALPHA_40: case ALPHA_80: - state->draw_alpha(bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp, param); + draw_alpha(bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp); break; case GRAPHICS_1: - state->draw_graphics_1(bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp, param); + draw_graphics_1(bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp); break; case GRAPHICS_2: - state->draw_graphics_2(bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp, param); + draw_graphics_2(bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp); break; } } -static MC6845_INTERFACE( crtc_intf ) -{ - true, - 0,0,0,0, - 8, - NULL, - pc1512_update_row, - NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - NULL -}; - void pc1512_state::video_start() { @@ -616,5 +599,8 @@ MACHINE_CONFIG_FRAGMENT( pc1512_video ) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) MCFG_SCREEN_REFRESH_RATE(50) - MCFG_MC6845_ADD(AMS40041_TAG, AMS40041, SCREEN_TAG, XTAL_28_63636MHz/32, crtc_intf) + MCFG_MC6845_ADD(AMS40041_TAG, AMS40041, SCREEN_TAG, XTAL_28_63636MHz/32) + MCFG_MC6845_SHOW_BORDER_AREA(true) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_MC6845_UPDATE_ROW_CB(pc1512_state, crtc_update_row) MACHINE_CONFIG_END diff --git a/src/mess/video/pc8401a.c b/src/mess/video/pc8401a.c index 2d2d0889d60..835854d50f6 100644 --- a/src/mess/video/pc8401a.c +++ b/src/mess/video/pc8401a.c @@ -49,27 +49,6 @@ static ADDRESS_MAP_START( pc8500_lcdc, AS_0, 8, pc8401a_state ) AM_RANGE(0x0000, 0x3fff) AM_RAM ADDRESS_MAP_END -/* MC6845 Interface */ - -static MC6845_UPDATE_ROW( pc8441a_update_row ) -{ -} - - -static MC6845_INTERFACE( pc8441a_mc6845_interface ) -{ - false, - 0,0,0,0, - 6, - NULL, - pc8441a_update_row, - NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - NULL -}; /* Machine Drivers */ @@ -115,5 +94,7 @@ MACHINE_CONFIG_FRAGMENT( pc8500_video ) MCFG_SCREEN_REFRESH_RATE(50) MCFG_SCREEN_PALETTE("palette") - MCFG_MC6845_ADD(MC6845_TAG, MC6845, CRT_SCREEN_TAG, 400000, pc8441a_mc6845_interface) + MCFG_MC6845_ADD(MC6845_TAG, MC6845, CRT_SCREEN_TAG, 400000) + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(6) MACHINE_CONFIG_END diff --git a/src/mess/video/pc_t1t.c b/src/mess/video/pc_t1t.c index 83211353910..54c232e94d7 100644 --- a/src/mess/video/pc_t1t.c +++ b/src/mess/video/pc_t1t.c @@ -13,6 +13,17 @@ #include "machine/pic8259.h" #include "machine/ram.h" +enum +{ + T1000_TEXT_INTEN = 0, + T1000_TEXT_BLINK, + T1000_GFX_1BPP, + T1000_GFX_2BPP, + T1000_GFX_4BPP, + T1000_GFX_2BPP_TGA, + PCJX_TEXT, + PCJR_GFX_2BPP_HIGH +}; const device_type PCVIDEO_T1000 = &device_creator<pcvideo_t1000_device>; @@ -32,6 +43,7 @@ pc_t1t_device::pc_t1t_device(const machine_config &mconfig, device_type type, co m_chr_size(0), m_ra_offset(0), m_address_data_ff(0), + m_update_row_type(-1), m_display_enable(0), m_vsync(0), m_palette_base(0), @@ -55,7 +67,6 @@ pcvideo_pcjr_device::pcvideo_pcjr_device(const machine_config &mconfig, const ch void pcvideo_t1000_device::device_start() { m_chr_gen = machine().root_device().memregion("gfx1")->base(); - m_update_row = NULL; m_bank = 0; m_chr_size = 1; m_ra_offset = 256; @@ -65,7 +76,6 @@ void pcvideo_t1000_device::device_start() void pcvideo_pcjr_device::device_start() { m_chr_gen = machine().root_device().memregion("gfx1")->base(); - m_update_row = NULL; m_bank = 0; m_mode_control = 0x08; m_chr_size = 8; @@ -77,31 +87,12 @@ void pcvideo_pcjr_device::device_start() } -static MC6845_UPDATE_ROW( t1000_update_row ); - - /*************************************************************************** Static declarations ***************************************************************************/ -static MC6845_INTERFACE( mc6845_t1000_intf ) -{ - false, /* show border area */ - 0,0,0,0, /* visarea adjustment */ - 8, /* numbers of pixels per video memory address */ - NULL, /* begin_update */ - t1000_update_row, /* update_row */ - NULL, /* end_update */ - DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, pc_t1t_device, t1000_de_changed), /* on_de_changed */ - DEVCB_NULL, /* on_cur_changed */ - DEVCB_NULL, /* on_hsync_changed */ - DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, pcvideo_t1000_device, t1000_vsync_changed), /* on_vsync_changed */ - NULL, -}; - - MACHINE_CONFIG_FRAGMENT( pcvideo_t1000 ) MCFG_SCREEN_ADD(T1000_SCREEN_NAME, RASTER) MCFG_SCREEN_RAW_PARAMS(XTAL_14_31818MHz,912,0,640,262,0,200) @@ -110,7 +101,12 @@ MACHINE_CONFIG_FRAGMENT( pcvideo_t1000 ) MCFG_PALETTE_ADD( "palette", 32 ) MCFG_PALETTE_INIT_OWNER(pc_t1t_device, pcjr) - MCFG_MC6845_ADD(T1000_MC6845_NAME, MC6845, T1000_SCREEN_NAME, XTAL_14_31818MHz/8, mc6845_t1000_intf) + MCFG_MC6845_ADD(T1000_MC6845_NAME, MC6845, T1000_SCREEN_NAME, XTAL_14_31818MHz/8) + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_MC6845_UPDATE_ROW_CB(pc_t1t_device, crtc_update_row) + MCFG_MC6845_OUT_DE_CB(WRITELINE(pc_t1t_device, t1000_de_changed)) + MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(pcvideo_t1000_device, t1000_vsync_changed)) MACHINE_CONFIG_END machine_config_constructor pcvideo_t1000_device::device_mconfig_additions() const @@ -119,22 +115,6 @@ machine_config_constructor pcvideo_t1000_device::device_mconfig_additions() cons } -static MC6845_INTERFACE( mc6845_pcjr_intf ) -{ - false, /* show border area */ - 0,0,0,0, /* visarea adjustment */ - 8, /* numbers of pixels per video memory address */ - NULL, /* begin_update */ - t1000_update_row, /* update_row */ - NULL, /* end_update */ - DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, pc_t1t_device, t1000_de_changed), /* on_de_changed */ - DEVCB_NULL, /* on_cur_changed */ - DEVCB_NULL, /* on_hsync_changed */ - DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, pcvideo_pcjr_device, pcjr_vsync_changed), /* on_vsync_changed */ - NULL -}; - - MACHINE_CONFIG_FRAGMENT( pcvideo_pcjr ) MCFG_SCREEN_ADD(T1000_SCREEN_NAME, RASTER) MCFG_SCREEN_RAW_PARAMS(XTAL_14_31818MHz,912,0,640,262,0,200) @@ -143,7 +123,12 @@ MACHINE_CONFIG_FRAGMENT( pcvideo_pcjr ) MCFG_PALETTE_ADD( "palette", 32 ) MCFG_PALETTE_INIT_OWNER(pc_t1t_device, pcjr) - MCFG_MC6845_ADD(T1000_MC6845_NAME, MC6845, T1000_SCREEN_NAME, XTAL_14_31818MHz/16, mc6845_pcjr_intf) + MCFG_MC6845_ADD(T1000_MC6845_NAME, MC6845, T1000_SCREEN_NAME, XTAL_14_31818MHz/16) + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_MC6845_UPDATE_ROW_CB(pcvideo_pcjr_device, crtc_update_row) + MCFG_MC6845_OUT_DE_CB(WRITELINE(pc_t1t_device, t1000_de_changed)) + MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(pcvideo_pcjr_device, pcjr_vsync_changed)) MACHINE_CONFIG_END machine_config_constructor pcvideo_pcjr_device::device_mconfig_additions() const @@ -180,10 +165,9 @@ PALETTE_INIT_MEMBER( pc_t1t_device, pcjr ) } -static MC6845_UPDATE_ROW( t1000_text_inten_update_row ) +MC6845_UPDATE_ROW( pc_t1t_device::t1000_text_inten_update_row ) { - pc_t1t_device *t1t = downcast<pc_t1t_device *>(device->owner()); - const rgb_t *palette = t1t->m_palette->palette()->entry_list_raw(); + const rgb_t *palette = m_palette->palette()->entry_list_raw(); UINT32 *p = &bitmap.pix32(y); int i; @@ -191,13 +175,13 @@ static MC6845_UPDATE_ROW( t1000_text_inten_update_row ) for ( i = 0; i < x_count; i++ ) { UINT16 offset = ( ( ma + i ) << 1 ) & 0x3fff; - UINT8 chr = t1t->m_displayram[ offset ]; - UINT8 attr = t1t->m_displayram[ offset +1 ]; - UINT8 data = t1t->m_chr_gen[ chr * t1t->m_chr_size + ra * t1t->m_ra_offset ]; - UINT16 fg = t1t->m_palette_base + ( attr & 0x0F ); - UINT16 bg = t1t->m_palette_base + ( ( attr >> 4 ) & 0x07 ); + UINT8 chr = m_displayram[ offset ]; + UINT8 attr = m_displayram[ offset +1 ]; + UINT8 data = m_chr_gen[ chr * m_chr_size + ra * m_ra_offset ]; + UINT16 fg = m_palette_base + ( attr & 0x0F ); + UINT16 bg = m_palette_base + ( ( attr >> 4 ) & 0x07 ); - if ( i == cursor_x && ( t1t->m_pc_framecnt & 0x08 ) ) + if ( i == cursor_x && ( m_pc_framecnt & 0x08 ) ) { data = 0xFF; } @@ -214,32 +198,31 @@ static MC6845_UPDATE_ROW( t1000_text_inten_update_row ) } -static MC6845_UPDATE_ROW( t1000_text_blink_update_row ) +MC6845_UPDATE_ROW( pc_t1t_device::t1000_text_blink_update_row ) { - pc_t1t_device *t1t = downcast<pc_t1t_device *>(device->owner()); - const rgb_t *palette = t1t->m_palette->palette()->entry_list_raw(); + const rgb_t *palette = m_palette->palette()->entry_list_raw(); UINT32 *p = &bitmap.pix32(y); int i; for ( i = 0; i < x_count; i++ ) { UINT16 offset = ( ( ma + i ) << 1 ) & 0x3fff; - UINT8 chr = t1t->m_displayram[ offset ]; - UINT8 attr = t1t->m_displayram[ offset +1 ]; - UINT8 data = t1t->m_chr_gen[ chr * t1t->m_chr_size + ra * t1t->m_ra_offset ]; - UINT16 fg = t1t->m_palette_base + ( attr & 0x0F ); - UINT16 bg = t1t->m_palette_base + ( ( attr >> 4 ) & 0x07 ); + UINT8 chr = m_displayram[ offset ]; + UINT8 attr = m_displayram[ offset +1 ]; + UINT8 data = m_chr_gen[ chr * m_chr_size + ra * m_ra_offset ]; + UINT16 fg = m_palette_base + ( attr & 0x0F ); + UINT16 bg = m_palette_base + ( ( attr >> 4 ) & 0x07 ); if ( i == cursor_x ) { - if ( t1t->m_pc_framecnt & 0x08 ) + if ( m_pc_framecnt & 0x08 ) { data = 0xFF; } } else { - if ( ( attr & 0x80 ) && ( t1t->m_pc_framecnt & 0x10 ) ) + if ( ( attr & 0x80 ) && ( m_pc_framecnt & 0x10 ) ) { data = 0x00; } @@ -256,36 +239,35 @@ static MC6845_UPDATE_ROW( t1000_text_blink_update_row ) } } -static MC6845_UPDATE_ROW( pcjx_text_update_row ) +MC6845_UPDATE_ROW( pcvideo_pcjr_device::pcjx_text_update_row ) { - pcvideo_pcjr_device *pcjx = downcast<pcvideo_pcjr_device *>(device->owner()); - const rgb_t *palette = pcjx->m_palette->palette()->entry_list_raw(); + const rgb_t *palette = m_palette->palette()->entry_list_raw(); UINT32 *p = &bitmap.pix32(y); int i; for ( i = 0; i < x_count; i++ ) { UINT16 offset = ( ( ma + i ) << 1 ) & 0x3fff; - UINT8 chr = pcjx->m_displayram[ offset ]; - UINT8 attr = pcjx->m_displayram[ offset +1 ]; - UINT16 fg = pcjx->m_palette_base + ( attr & 0x07 ); - UINT16 bg = pcjx->m_palette_base + ( ( attr >> 4 ) & 0x07 ); + UINT8 chr = m_displayram[ offset ]; + UINT8 attr = m_displayram[ offset +1 ]; + UINT16 fg = m_palette_base + ( attr & 0x07 ); + UINT16 bg = m_palette_base + ( ( attr >> 4 ) & 0x07 ); UINT16 code = chr & 0x1f; if((attr & 0x88) == 0x88) { - code = pcjx->m_displayram[ offset - 2 ] & 0x1f; + code = m_displayram[ offset - 2 ] & 0x1f; code = (code << 8) + chr; } else if(attr & 0x80) - code = (code << 8) + pcjx->m_displayram[ offset + 2 ]; + code = (code << 8) + m_displayram[ offset + 2 ]; else code = chr; UINT8 data; if(ra < 16) - data = pcjx->m_jxkanji[code * 16 * 2 + (ra * 2) + ((attr & 8)?1:0)]; + data = m_jxkanji[code * 16 * 2 + (ra * 2) + ((attr & 8)?1:0)]; else - data = ((i == cursor_x) && (pcjx->m_pc_framecnt & 8)) ? 0xff: 0; + data = ((i == cursor_x) && (m_pc_framecnt & 8)) ? 0xff: 0; *p = palette[( data & 0x80 ) ? fg : bg]; p++; *p = palette[( data & 0x40 ) ? fg : bg]; p++; @@ -298,12 +280,11 @@ static MC6845_UPDATE_ROW( pcjx_text_update_row ) } } -static MC6845_UPDATE_ROW( t1000_gfx_4bpp_update_row ) +MC6845_UPDATE_ROW( pc_t1t_device::t1000_gfx_4bpp_update_row ) { - pc_t1t_device *t1t = downcast<pc_t1t_device *>(device->owner()); - const rgb_t *palette = t1t->m_palette->palette()->entry_list_raw(); + const rgb_t *palette = m_palette->palette()->entry_list_raw(); UINT32 *p = &bitmap.pix32(y); - UINT8 *vid = t1t->m_displayram + ( ra << 13 ); + UINT8 *vid = m_displayram + ( ra << 13 ); int i; for ( i = 0; i < x_count; i++ ) @@ -311,27 +292,26 @@ static MC6845_UPDATE_ROW( t1000_gfx_4bpp_update_row ) UINT16 offset = ( ( ma + i ) << 1 ) & 0x1fff; UINT8 data = vid[ offset ]; - *p = palette[t1t->m_palette_base + t1t->m_reg.data[0x10 + ( data >> 4 )]]; p++; - *p = palette[t1t->m_palette_base + t1t->m_reg.data[0x10 + ( data >> 4 )]]; p++; - *p = palette[t1t->m_palette_base + t1t->m_reg.data[0x10 + ( data & 0x0F )]]; p++; - *p = palette[t1t->m_palette_base + t1t->m_reg.data[0x10 + ( data & 0x0F )]]; p++; + *p = palette[m_palette_base + m_reg.data[0x10 + ( data >> 4 )]]; p++; + *p = palette[m_palette_base + m_reg.data[0x10 + ( data >> 4 )]]; p++; + *p = palette[m_palette_base + m_reg.data[0x10 + ( data & 0x0F )]]; p++; + *p = palette[m_palette_base + m_reg.data[0x10 + ( data & 0x0F )]]; p++; data = vid[ offset + 1 ]; - *p = palette[t1t->m_palette_base + t1t->m_reg.data[0x10 + ( data >> 4 )]]; p++; - *p = palette[t1t->m_palette_base + t1t->m_reg.data[0x10 + ( data >> 4 )]]; p++; - *p = palette[t1t->m_palette_base + t1t->m_reg.data[0x10 + ( data & 0x0F )]]; p++; - *p = palette[t1t->m_palette_base + t1t->m_reg.data[0x10 + ( data & 0x0F )]]; p++; + *p = palette[m_palette_base + m_reg.data[0x10 + ( data >> 4 )]]; p++; + *p = palette[m_palette_base + m_reg.data[0x10 + ( data >> 4 )]]; p++; + *p = palette[m_palette_base + m_reg.data[0x10 + ( data & 0x0F )]]; p++; + *p = palette[m_palette_base + m_reg.data[0x10 + ( data & 0x0F )]]; p++; } } -static MC6845_UPDATE_ROW( t1000_gfx_2bpp_update_row ) +MC6845_UPDATE_ROW( pc_t1t_device::t1000_gfx_2bpp_update_row ) { - pc_t1t_device *t1t = downcast<pc_t1t_device *>(device->owner()); - const rgb_t *palette = t1t->m_palette->palette()->entry_list_raw(); + const rgb_t *palette = m_palette->palette()->entry_list_raw(); UINT32 *p = &bitmap.pix32(y); - UINT8 *vid = t1t->m_displayram + ( ra << 13 ); + UINT8 *vid = m_displayram + ( ra << 13 ); int i; for ( i = 0; i < x_count; i++ ) @@ -339,27 +319,26 @@ static MC6845_UPDATE_ROW( t1000_gfx_2bpp_update_row ) UINT16 offset = ( ( ma + i ) << 1 ) & 0x1fff; UINT8 data = vid[ offset ]; - *p = palette[t1t->m_palette_base + t1t->m_reg.data[ 0x10 + ( ( data >> 6 ) & 0x03 ) ]]; p++; - *p = palette[t1t->m_palette_base + t1t->m_reg.data[ 0x10 + ( ( data >> 4 ) & 0x03 ) ]]; p++; - *p = palette[t1t->m_palette_base + t1t->m_reg.data[ 0x10 + ( ( data >> 2 ) & 0x03 ) ]]; p++; - *p = palette[t1t->m_palette_base + t1t->m_reg.data[ 0x10 + ( data & 0x03 ) ]]; p++; + *p = palette[m_palette_base + m_reg.data[ 0x10 + ( ( data >> 6 ) & 0x03 ) ]]; p++; + *p = palette[m_palette_base + m_reg.data[ 0x10 + ( ( data >> 4 ) & 0x03 ) ]]; p++; + *p = palette[m_palette_base + m_reg.data[ 0x10 + ( ( data >> 2 ) & 0x03 ) ]]; p++; + *p = palette[m_palette_base + m_reg.data[ 0x10 + ( data & 0x03 ) ]]; p++; data = vid[ offset+1 ]; - *p = palette[t1t->m_palette_base + t1t->m_reg.data[ 0x10 + ( ( data >> 6 ) & 0x03 ) ]]; p++; - *p = palette[t1t->m_palette_base + t1t->m_reg.data[ 0x10 + ( ( data >> 4 ) & 0x03 ) ]]; p++; - *p = palette[t1t->m_palette_base + t1t->m_reg.data[ 0x10 + ( ( data >> 2 ) & 0x03 ) ]]; p++; - *p = palette[t1t->m_palette_base + t1t->m_reg.data[ 0x10 + ( data & 0x03 ) ]]; p++; + *p = palette[m_palette_base + m_reg.data[ 0x10 + ( ( data >> 6 ) & 0x03 ) ]]; p++; + *p = palette[m_palette_base + m_reg.data[ 0x10 + ( ( data >> 4 ) & 0x03 ) ]]; p++; + *p = palette[m_palette_base + m_reg.data[ 0x10 + ( ( data >> 2 ) & 0x03 ) ]]; p++; + *p = palette[m_palette_base + m_reg.data[ 0x10 + ( data & 0x03 ) ]]; p++; } } -static MC6845_UPDATE_ROW( pcjr_gfx_2bpp_high_update_row ) +MC6845_UPDATE_ROW( pcvideo_pcjr_device::pcjr_gfx_2bpp_high_update_row ) { - pcvideo_pcjr_device *pcjr = downcast<pcvideo_pcjr_device *>(device->owner()); - const rgb_t *palette = pcjr->m_palette->palette()->entry_list_raw(); + const rgb_t *palette = m_palette->palette()->entry_list_raw(); UINT32 *p = &bitmap.pix32(y); - UINT8 *vid = pcjr->m_displayram + ( ra << 13 ); + UINT8 *vid = m_displayram + ( ra << 13 ); int i; for ( i = 0; i < x_count; i++ ) @@ -368,24 +347,23 @@ static MC6845_UPDATE_ROW( pcjr_gfx_2bpp_high_update_row ) UINT8 data0 = vid[ offset ]; UINT8 data1 = vid[ offset + 1 ]; - *p = palette[pcjr->m_palette_base + pcjr->m_reg.data[ 0x10 + ( ( ( data0 & 0x80 ) >> 7 ) | ( ( data1 & 0x80 ) >> 6 ) ) ]]; p++; - *p = palette[pcjr->m_palette_base + pcjr->m_reg.data[ 0x10 + ( ( ( data0 & 0x40 ) >> 6 ) | ( ( data1 & 0x40 ) >> 5 ) ) ]]; p++; - *p = palette[pcjr->m_palette_base + pcjr->m_reg.data[ 0x10 + ( ( ( data0 & 0x20 ) >> 5 ) | ( ( data1 & 0x20 ) >> 4 ) ) ]]; p++; - *p = palette[pcjr->m_palette_base + pcjr->m_reg.data[ 0x10 + ( ( ( data0 & 0x10 ) >> 4 ) | ( ( data1 & 0x10 ) >> 3 ) ) ]]; p++; - *p = palette[pcjr->m_palette_base + pcjr->m_reg.data[ 0x10 + ( ( ( data0 & 0x08 ) >> 3 ) | ( ( data1 & 0x08 ) >> 2 ) ) ]]; p++; - *p = palette[pcjr->m_palette_base + pcjr->m_reg.data[ 0x10 + ( ( ( data0 & 0x04 ) >> 2 ) | ( ( data1 & 0x04 ) >> 1 ) ) ]]; p++; - *p = palette[pcjr->m_palette_base + pcjr->m_reg.data[ 0x10 + ( ( ( data0 & 0x02 ) >> 1 ) | ( ( data1 & 0x02 ) ) ) ]]; p++; - *p = palette[pcjr->m_palette_base + pcjr->m_reg.data[ 0x10 + ( ( ( data0 & 0x01 ) ) | ( ( data1 & 0x01 ) << 1 ) ) ]]; p++; + *p = palette[m_palette_base + m_reg.data[ 0x10 + ( ( ( data0 & 0x80 ) >> 7 ) | ( ( data1 & 0x80 ) >> 6 ) ) ]]; p++; + *p = palette[m_palette_base + m_reg.data[ 0x10 + ( ( ( data0 & 0x40 ) >> 6 ) | ( ( data1 & 0x40 ) >> 5 ) ) ]]; p++; + *p = palette[m_palette_base + m_reg.data[ 0x10 + ( ( ( data0 & 0x20 ) >> 5 ) | ( ( data1 & 0x20 ) >> 4 ) ) ]]; p++; + *p = palette[m_palette_base + m_reg.data[ 0x10 + ( ( ( data0 & 0x10 ) >> 4 ) | ( ( data1 & 0x10 ) >> 3 ) ) ]]; p++; + *p = palette[m_palette_base + m_reg.data[ 0x10 + ( ( ( data0 & 0x08 ) >> 3 ) | ( ( data1 & 0x08 ) >> 2 ) ) ]]; p++; + *p = palette[m_palette_base + m_reg.data[ 0x10 + ( ( ( data0 & 0x04 ) >> 2 ) | ( ( data1 & 0x04 ) >> 1 ) ) ]]; p++; + *p = palette[m_palette_base + m_reg.data[ 0x10 + ( ( ( data0 & 0x02 ) >> 1 ) | ( ( data1 & 0x02 ) ) ) ]]; p++; + *p = palette[m_palette_base + m_reg.data[ 0x10 + ( ( ( data0 & 0x01 ) ) | ( ( data1 & 0x01 ) << 1 ) ) ]]; p++; } } -static MC6845_UPDATE_ROW( t1000_gfx_2bpp_tga_update_row ) +MC6845_UPDATE_ROW( pc_t1t_device::t1000_gfx_2bpp_tga_update_row ) { - pc_t1t_device *t1t = downcast<pc_t1t_device *>(device->owner()); - const rgb_t *palette = t1t->m_palette->palette()->entry_list_raw(); + const rgb_t *palette = m_palette->palette()->entry_list_raw(); UINT32 *p = &bitmap.pix32(y); - UINT8 *vid = t1t->m_displayram + ( ra << 13 ); + UINT8 *vid = m_displayram + ( ra << 13 ); int i; if ( y == 0 ) logerror("t1000_gfx_2bpp_tga_update_row\n"); @@ -395,27 +373,26 @@ static MC6845_UPDATE_ROW( t1000_gfx_2bpp_tga_update_row ) UINT8 data = vid[ offset ]; UINT16 data2 = ( vid[ offset + 1 ] ) << 1; - *p = palette[t1t->m_reg.data[ 0x10 + ( ( ( data2 & 0x100 ) | ( data & 0x80 ) ) >> 7 ) ]]; p++; - *p = palette[t1t->m_reg.data[ 0x10 + ( ( ( data2 & 0x80 ) | ( data & 0x40 ) ) >> 6 ) ]]; p++; - *p = palette[t1t->m_reg.data[ 0x10 + ( ( ( data2 & 0x40 ) | ( data & 0x20 ) ) >> 5 ) ]]; p++; - *p = palette[t1t->m_reg.data[ 0x10 + ( ( ( data2 & 0x20 ) | ( data & 0x10 ) ) >> 4 ) ]]; p++; + *p = palette[m_reg.data[ 0x10 + ( ( ( data2 & 0x100 ) | ( data & 0x80 ) ) >> 7 ) ]]; p++; + *p = palette[m_reg.data[ 0x10 + ( ( ( data2 & 0x80 ) | ( data & 0x40 ) ) >> 6 ) ]]; p++; + *p = palette[m_reg.data[ 0x10 + ( ( ( data2 & 0x40 ) | ( data & 0x20 ) ) >> 5 ) ]]; p++; + *p = palette[m_reg.data[ 0x10 + ( ( ( data2 & 0x20 ) | ( data & 0x10 ) ) >> 4 ) ]]; p++; - *p = palette[t1t->m_reg.data[ 0x10 + ( ( ( data2 & 0x10 ) | ( data & 0x08 ) ) >> 3 ) ]]; p++; - *p = palette[t1t->m_reg.data[ 0x10 + ( ( ( data2 & 0x08 ) | ( data & 0x04 ) ) >> 2 ) ]]; p++; - *p = palette[t1t->m_reg.data[ 0x10 + ( ( ( data2 & 0x04 ) | ( data & 0x02 ) ) >> 1 ) ]]; p++; - *p = palette[t1t->m_reg.data[ 0x10 + ( ( data2 & 0x02 ) | ( data & 0x01 ) ) ]]; p++; + *p = palette[m_reg.data[ 0x10 + ( ( ( data2 & 0x10 ) | ( data & 0x08 ) ) >> 3 ) ]]; p++; + *p = palette[m_reg.data[ 0x10 + ( ( ( data2 & 0x08 ) | ( data & 0x04 ) ) >> 2 ) ]]; p++; + *p = palette[m_reg.data[ 0x10 + ( ( ( data2 & 0x04 ) | ( data & 0x02 ) ) >> 1 ) ]]; p++; + *p = palette[m_reg.data[ 0x10 + ( ( data2 & 0x02 ) | ( data & 0x01 ) ) ]]; p++; } } -static MC6845_UPDATE_ROW( t1000_gfx_1bpp_update_row ) +MC6845_UPDATE_ROW( pc_t1t_device::t1000_gfx_1bpp_update_row ) { - pc_t1t_device *t1t = downcast<pc_t1t_device *>(device->owner()); - const rgb_t *palette = t1t->m_palette->palette()->entry_list_raw(); + const rgb_t *palette = m_palette->palette()->entry_list_raw(); UINT32 *p = &bitmap.pix32(y); - UINT8 *vid = t1t->m_displayram + ( ra << 13 ); - UINT8 fg = t1t->m_palette_base + t1t->m_reg.data[0x11]; - UINT8 bg = t1t->m_palette_base + t1t->m_reg.data[0x10]; + UINT8 *vid = m_displayram + ( ra << 13 ); + UINT8 fg = m_palette_base + m_reg.data[0x11]; + UINT8 bg = m_palette_base + m_reg.data[0x10]; int i; if ( y == 0 ) logerror("t1000_gfx_1bpp_update_row\n"); @@ -446,13 +423,51 @@ static MC6845_UPDATE_ROW( t1000_gfx_1bpp_update_row ) } } +MC6845_UPDATE_ROW( pc_t1t_device::crtc_update_row ) +{ + if (m_update_row_type == -1) + return; + + switch (m_update_row_type) + { + case T1000_TEXT_INTEN: + t1000_text_inten_update_row(bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp); + break; + case T1000_TEXT_BLINK: + t1000_text_blink_update_row(bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp); + break; + case T1000_GFX_1BPP: + t1000_gfx_1bpp_update_row(bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp); + break; + case T1000_GFX_2BPP: + t1000_gfx_2bpp_update_row(bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp); + break; + case T1000_GFX_2BPP_TGA: + t1000_gfx_2bpp_tga_update_row(bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp); + break; + case T1000_GFX_4BPP: + t1000_gfx_4bpp_update_row(bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp); + break; + } +} + -static MC6845_UPDATE_ROW( t1000_update_row ) +MC6845_UPDATE_ROW( pcvideo_pcjr_device::crtc_update_row ) { - pc_t1t_device *t1t = downcast<pc_t1t_device *>(device->owner()); - if ( t1t->m_update_row ) + if (m_update_row_type == -1) + return; + + switch (m_update_row_type) { - t1t->m_update_row( device, bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp, param ); + case PCJX_TEXT: + pcjx_text_update_row(bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp); + break; + case PCJR_GFX_2BPP_HIGH: + pcjr_gfx_2bpp_high_update_row(bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp); + break; + default: + pc_t1t_device::crtc_update_row(bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp); + break; } } @@ -478,10 +493,10 @@ void pcvideo_t1000_device::mode_switch( void ) switch( m_mode_control & 0x3B ) { case 0x08: case 0x09: - m_update_row = t1000_text_inten_update_row; + m_update_row_type = T1000_TEXT_INTEN; break; case 0x28: case 0x29: - m_update_row = t1000_text_blink_update_row; + m_update_row_type = T1000_TEXT_BLINK; break; case 0x0A: case 0x0B: case 0x2A: case 0x2B: switch( m_bank & 0xc0 ) @@ -489,7 +504,7 @@ void pcvideo_t1000_device::mode_switch( void ) case 0x00: case 0x40: //logerror("t1t_gfx_2bpp - 1\n"); - m_update_row = t1000_gfx_2bpp_update_row; + m_update_row_type = T1000_GFX_2BPP; if ( m_color_select ) { m_reg.data[0x10] = 0x00; @@ -508,7 +523,7 @@ void pcvideo_t1000_device::mode_switch( void ) case 0x80: case 0xc0: //logerror("t1t_gfx_4bpp\n"); - m_update_row = t1000_gfx_4bpp_update_row; + m_update_row_type = T1000_GFX_4BPP; break; } break; @@ -519,17 +534,17 @@ void pcvideo_t1000_device::mode_switch( void ) case 0x00: case 0x40: //logerror("t1t_gfx_1bpp\n"); - m_update_row = t1000_gfx_1bpp_update_row; + m_update_row_type = T1000_GFX_1BPP; break; case 0x80: case 0xc0: //logerror("t1t_gfx_2bpp - 2\n"); - m_update_row = t1000_gfx_2bpp_tga_update_row; + m_update_row_type = T1000_GFX_2BPP_TGA; break; } break; default: - m_update_row = NULL; + m_update_row_type = -1; break; } } @@ -552,40 +567,40 @@ void pcvideo_pcjr_device::pc_pcjr_mode_switch() case 0x08: /* 01x0x */ if(m_jxkanji) { - m_update_row = pcjx_text_update_row; + m_update_row_type = PCJX_TEXT; break; } if ( m_reg.data[3] & 0x02 ) { - m_update_row = t1000_text_blink_update_row; + m_update_row_type = T1000_TEXT_BLINK; } else { - m_update_row = t1000_text_inten_update_row; + m_update_row_type = T1000_TEXT_INTEN; } break; case 0x0A: /* 01x1x */ /* By default use medium resolution mode */ - m_update_row = t1000_gfx_2bpp_update_row; + m_update_row_type = T1000_GFX_2BPP; /* Check for high resolution mode */ if ( ( m_bank & 0xc0 ) == 0xc0 ) - m_update_row = pcjr_gfx_2bpp_high_update_row; + m_update_row_type = PCJR_GFX_2BPP_HIGH; /* Check for 640x200 b/w 2 shades mode */ if ( ( m_reg.data[0] & 0x04 ) && ( m_reg.data[3] & 0x08 ) ) { - m_update_row = t1000_gfx_1bpp_update_row; + m_update_row_type = T1000_GFX_1BPP; } break; case 0x18: /* 11x0x - invalid?? */ - m_update_row = NULL; + m_update_row_type = -1; break; case 0x1A: /* 11x1x */ - m_update_row = t1000_gfx_4bpp_update_row; + m_update_row_type = T1000_GFX_4BPP; break; default: - m_update_row = NULL; + m_update_row_type = -1; break; } diff --git a/src/mess/video/pc_t1t.h b/src/mess/video/pc_t1t.h index 8dd1b582b9e..9d4f2ebb02f 100644 --- a/src/mess/video/pc_t1t.h +++ b/src/mess/video/pc_t1t.h @@ -38,6 +38,14 @@ public: DECLARE_WRITE_LINE_MEMBER( t1000_de_changed ); + virtual MC6845_UPDATE_ROW( crtc_update_row ); + MC6845_UPDATE_ROW( t1000_text_inten_update_row ); + MC6845_UPDATE_ROW( t1000_text_blink_update_row ); + MC6845_UPDATE_ROW( t1000_gfx_4bpp_update_row ); + MC6845_UPDATE_ROW( t1000_gfx_2bpp_update_row ); + MC6845_UPDATE_ROW( t1000_gfx_2bpp_tga_update_row ); + MC6845_UPDATE_ROW( t1000_gfx_1bpp_update_row ); + required_device<mc6845_device> m_mc6845; UINT8 m_mode_control, m_color_select; UINT8 m_status; @@ -56,7 +64,7 @@ public: UINT8 m_address_data_ff; - mc6845_update_row_func m_update_row; + int m_update_row_type; UINT8 m_display_enable; UINT8 m_vsync; UINT8 m_palette_base; @@ -113,6 +121,10 @@ public: UINT8 *m_jxkanji; + virtual MC6845_UPDATE_ROW( crtc_update_row ); + MC6845_UPDATE_ROW( pcjx_text_update_row ); + MC6845_UPDATE_ROW( pcjr_gfx_2bpp_high_update_row ); + protected: virtual machine_config_constructor device_mconfig_additions() const; virtual void device_start(); diff --git a/src/mess/video/super80.c b/src/mess/video/super80.c index 9376231384a..d67ee220cf0 100644 --- a/src/mess/video/super80.c +++ b/src/mess/video/super80.c @@ -357,10 +357,9 @@ UINT32 super80_state::screen_update_super80v(screen_device &screen, bitmap_rgb32 return 0; } -MC6845_UPDATE_ROW( super80v_update_row ) +MC6845_UPDATE_ROW( super80_state::crtc_update_row ) { - super80_state *state = device->machine().driver_data<super80_state>(); - const rgb_t *palette = state->m_palette->palette()->entry_list_raw(); + const rgb_t *palette = m_palette->palette()->entry_list_raw(); UINT8 chr,col,gfx,fg,bg=0; UINT16 mem,x; UINT32 *p = &bitmap.pix32(y); @@ -370,21 +369,21 @@ MC6845_UPDATE_ROW( super80v_update_row ) UINT8 inv=0; // if (x == cursor_x) inv=0xff; /* uncomment when mame fixed */ mem = (ma + x) & 0xfff; - chr = state->m_p_videoram[mem]; + chr = m_p_videoram[mem]; /* get colour or b&w */ fg = 5; /* green */ - if ((state->m_s_options & 0x60) == 0x60) fg = 15; /* b&w */ + if ((m_s_options & 0x60) == 0x60) fg = 15; /* b&w */ - if (~state->m_s_options & 0x40) + if (~m_s_options & 0x40) { - col = state->m_p_colorram[mem]; /* byte of colour to display */ - fg = state->m_palette_index + (col & 0x0f); - bg = state->m_palette_index + (col >> 4); + col = m_p_colorram[mem]; /* byte of colour to display */ + fg = m_palette_index + (col & 0x0f); + bg = m_palette_index + (col >> 4); } /* if inverse mode, replace any pcgram chrs with inverse chrs */ - if ((!BIT(state->m_portf0, 4)) && (chr & 0x80)) // is it a high chr in inverse mode + if ((!BIT(m_portf0, 4)) && (chr & 0x80)) // is it a high chr in inverse mode { inv ^= 0xff; // invert the chr chr &= 0x7f; // and drop bit 7 @@ -392,10 +391,10 @@ MC6845_UPDATE_ROW( super80v_update_row ) /* process cursor */ if (x == cursor_x) - inv ^= state->m_mc6845_cursor[ra]; + inv ^= m_mc6845_cursor[ra]; /* get pattern of pixels for that character scanline */ - gfx = state->m_p_pcgram[(chr<<4) | ra] ^ inv; + gfx = m_p_pcgram[(chr<<4) | ra] ^ inv; /* Display a scanline of a character */ *p++ = palette[BIT(gfx, 7) ? fg : bg]; diff --git a/src/mess/video/v1050.c b/src/mess/video/v1050.c index 1e357e9aeae..2154b01fb42 100644 --- a/src/mess/video/v1050.c +++ b/src/mess/video/v1050.c @@ -52,17 +52,15 @@ WRITE8_MEMBER( v1050_state::videoram_w ) /* MC6845 Interface */ -static MC6845_UPDATE_ROW( v1050_update_row ) +MC6845_UPDATE_ROW( v1050_state::crtc_update_row ) { - v1050_state *state = device->machine().driver_data<v1050_state>(); - int column, bit; for (column = 0; column < x_count; column++) { UINT16 address = (((ra & 0x03) + 1) << 13) | ((ma & 0x1fff) + column); - UINT8 data = state->m_video_ram[address & V1050_VIDEORAM_MASK]; - UINT8 attr = (state->m_attr & 0xfc) | (state->m_attr_ram[address] & 0x03); + UINT8 data = m_video_ram[address & V1050_VIDEORAM_MASK]; + UINT8 attr = (m_attr & 0xfc) | (m_attr_ram[address] & 0x03); for (bit = 0; bit < 8; bit++) { @@ -81,7 +79,7 @@ static MC6845_UPDATE_ROW( v1050_update_row ) /* display blank */ if (attr & V1050_ATTR_BLANK) color = 0; - bitmap.pix32(vbp + y, hbp + x) = state->m_palette->pen(de ? color : 0); + bitmap.pix32(vbp + y, hbp + x) = m_palette->pen(de ? color : 0); data <<= 1; } @@ -95,21 +93,6 @@ WRITE_LINE_MEMBER( v1050_state::crtc_vs_w ) set_interrupt(INT_VSYNC, state); } -static MC6845_INTERFACE( crtc_intf ) -{ - true, - 0,0,0,0, - 8, - NULL, - v1050_update_row, - NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(v1050_state, crtc_vs_w), - NULL -}; - /* Video Start */ void v1050_state::video_start() @@ -124,7 +107,11 @@ void v1050_state::video_start() /* Machine Drivers */ MACHINE_CONFIG_FRAGMENT( v1050_video ) - MCFG_MC6845_ADD(H46505_TAG, H46505, SCREEN_TAG, XTAL_15_36MHz/8, crtc_intf) + MCFG_MC6845_ADD(H46505_TAG, H46505, SCREEN_TAG, XTAL_15_36MHz/8) + MCFG_MC6845_SHOW_BORDER_AREA(true) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_MC6845_UPDATE_ROW_CB(v1050_state, crtc_update_row) + MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(v1050_state, crtc_vs_w)) MCFG_SCREEN_ADD(SCREEN_TAG, RASTER) MCFG_SCREEN_UPDATE_DEVICE(H46505_TAG, h46505_device, screen_update) |