(Question regarding screen macro)
How do i specify a second, totally independent graphical screen from within the rainbow. driver?
First screen is reserved for the on-board output (vt100 video, text only; working).
The 2nd (new) screen should be driven exclusively by the NEC 7220 display controller (accessed in several drivers like QX10, DMV, IF800 and VT240).
I now have implemented some of the extra logic on the Rainbow color graphics board, as well as the mandatory
UPD7220_DISPLAY_PIXELS_MEMBER( hgdc_display_pixels );...and now cant figure out how to "set the screen". Is it
MCFG_UPD7220_SET_SCREEN("screen2")
or
MCFG_VIDEO_SET_SCREEN("screen2")
I'd also like to have a callback to set and clear the video interrupt on VSYNCs, similar to the VT100 (text only) video driver. For the vt100 video driver, it used to be something like
MCFG_CPU_VBLANK_INT_DRIVER("screen", rainbow_state, vblank_irq)
MCFG_VT_VIDEO_CLEAR_VIDEO_INTERRUPT_CALLBACK(WRITELINE(rainbow_state, clear_video_interrupt))
Can you help me? Is there something obvious i overlooked?
Thank you very much,
Karl.
Errors i copied over from previous attempts:
Driver rainbow (file rainbow.cpp): 1 errors, 0 warnings
Errors:
uPD7220 device 'upd7220': No screen specified for device ':upd7220', but multiple screens found
------------
On another occasion (different macro config):
MCFG_VIDEO_SET_SCREEN called on device ':screen2' with no video interface
Macro code for screen 1 and screen 2 (= preliminary):
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_SIZE(132 * 10, 49 * 10)
MCFG_SCREEN_VISIBLE_AREA(0, 80 * 10 - 1, 0, 48 * 10 - 1)
MCFG_SCREEN_UPDATE_DRIVER(rainbow_state, screen_update_rainbow)
MCFG_SCREEN_PALETTE("vt100_video:palette")
MCFG_GFXDECODE_ADD("gfxdecode", "vt100_video:palette", rainbow)
MCFG_DEVICE_ADD("vt100_video", RAINBOW_VIDEO, 0)
MCFG_VT_SET_SCREEN("screen")
MCFG_VT_CHARGEN("chargen")
MCFG_VT_VIDEO_RAM_CALLBACK(READ8(rainbow_state, read_video_ram_r))
MCFG_VT_VIDEO_CLEAR_VIDEO_INTERRUPT_CALLBACK(WRITELINE(rainbow_state, clear_video_interrupt))
// ************************************************ SECOND video hardware (GDC-NEW)
/* Devices (GDC-NEW) */
MCFG_DEVICE_ADD("upd7220", UPD7220, 8000000/6) // unk clock
// MCFG_DEVICE_ADDRESS_MAP(AS_0, upd7220_map)
MCFG_UPD7220_DISPLAY_PIXELS_CALLBACK_OWNER(rainbow_state, hgdc_display_pixels)
MCFG_SCREEN_ADD("screen2", RASTER)
MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_AFTER_VBLANK | VIDEO_ALWAYS_UPDATE)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) // not accurate
MCFG_SCREEN_SIZE(800, 240)
MCFG_SCREEN_VISIBLE_AREA(0, 800-1, 0, 240-1)
MCFG_SCREEN_UPDATE_DEVICE("upd7220", upd7220_device, screen_update)