Previous 199869 Revisions Next

r29272 Friday 4th April, 2014 at 16:03:23 UTC by Osso
huc6260_device: converted to devcb2 (nw)
[src/emu/video]huc6260.c huc6260.h
[src/mame/drivers]ggconnie.c paranoia.c tourvis.c uapce.c
[src/mess/drivers]pce.c

trunk/src/mame/drivers/uapce.c
r29271r29272
311311}
312312
313313
314static const huc6260_interface pce_huc6260_config =
315{
316   DEVCB_DEVICE_MEMBER16( "huc6270", huc6270_device, next_pixel ),
317   DEVCB_DEVICE_MEMBER16( "huc6270", huc6270_device, time_until_next_event ),
318   DEVCB_DEVICE_LINE_MEMBER( "huc6270", huc6270_device, vsync_changed ),
319   DEVCB_DEVICE_LINE_MEMBER( "huc6270", huc6270_device, hsync_changed )
320};
321314static MACHINE_CONFIG_START( uapce, uapce_state )
322315   /* basic machine hardware */
323316   MCFG_CPU_ADD("maincpu", H6280, PCE_MAIN_CLOCK/3)
r29271r29272
335328   MCFG_SCREEN_UPDATE_DRIVER( pce_common_state, screen_update )
336329   MCFG_SCREEN_PALETTE("huc6260:palette")
337330
338   MCFG_HUC6260_ADD( "huc6260", PCE_MAIN_CLOCK, pce_huc6260_config )
331   MCFG_DEVICE_ADD( "huc6260", HUC6260, PCE_MAIN_CLOCK )
332   MCFG_HUC6260_NEXT_PIXEL_DATA_CB(DEVREAD16("huc6270", huc6270_device, next_pixel))
333   MCFG_HUC6260_TIME_TIL_NEXT_EVENT_CB(DEVREAD16("huc6270", huc6270_device, time_until_next_event))
334   MCFG_HUC6260_VSYNC_CHANGED_CB(DEVWRITELINE("huc6270", huc6270_device, vsync_changed))
335   MCFG_HUC6260_HSYNC_CHANGED_CB(DEVWRITELINE("huc6270", huc6270_device, hsync_changed))
339336   MCFG_DEVICE_ADD( "huc6270", HUC6270, 0 )
340337   MCFG_HUC6270_VRAM_SIZE(0x10000)
341338   MCFG_HUC6270_IRQ_CHANGED_CB(WRITELINE(uapce_state, pce_irq_changed))
trunk/src/mame/drivers/ggconnie.c
r29271r29272
197197};
198198
199199
200static const huc6260_interface sgx_huc6260_config =
201{
202   DEVCB_DEVICE_MEMBER16( "huc6202", huc6202_device, next_pixel ),
203   DEVCB_DEVICE_MEMBER16( "huc6202", huc6202_device, time_until_next_event ),
204   DEVCB_DEVICE_LINE_MEMBER( "huc6202", huc6202_device, vsync_changed ),
205   DEVCB_DEVICE_LINE_MEMBER( "huc6202", huc6202_device, hsync_changed )
206};
207
208200static MACHINE_CONFIG_START( ggconnie, ggconnie_state )
209201   /* basic machine hardware */
210202   MCFG_CPU_ADD("maincpu", H6280, PCE_MAIN_CLOCK/3)
r29271r29272
217209   MCFG_SCREEN_UPDATE_DRIVER( ggconnie_state, screen_update )
218210   MCFG_SCREEN_PALETTE("huc6260:palette")
219211
220   MCFG_HUC6260_ADD( "huc6260", PCE_MAIN_CLOCK/3, sgx_huc6260_config )
212   MCFG_DEVICE_ADD( "huc6260", HUC6260, PCE_MAIN_CLOCK/3 )
213   MCFG_HUC6260_NEXT_PIXEL_DATA_CB(DEVREAD16("huc6202", huc6202_device, next_pixel))
214   MCFG_HUC6260_TIME_TIL_NEXT_EVENT_CB(DEVREAD16("huc6202", huc6202_device, time_until_next_event))
215   MCFG_HUC6260_VSYNC_CHANGED_CB(DEVWRITELINE("huc6202", huc6202_device, vsync_changed))
216   MCFG_HUC6260_HSYNC_CHANGED_CB(DEVWRITELINE("huc6202", huc6202_device, hsync_changed))
221217   MCFG_DEVICE_ADD( "huc6270_0", HUC6270, 0 )
222218   MCFG_HUC6270_VRAM_SIZE(0x10000)
223219   MCFG_HUC6270_IRQ_CHANGED_CB(WRITELINE(pce_common_state, pce_irq_changed))
trunk/src/mame/drivers/paranoia.c
r29271r29272
174174   "maincpu"
175175};
176176
177static const huc6260_interface pce_huc6260_config =
178{
179   DEVCB_DEVICE_MEMBER16( "huc6270", huc6270_device, next_pixel ),
180   DEVCB_DEVICE_MEMBER16( "huc6270", huc6270_device, time_until_next_event ),
181   DEVCB_DEVICE_LINE_MEMBER( "huc6270", huc6270_device, vsync_changed ),
182   DEVCB_DEVICE_LINE_MEMBER( "huc6270", huc6270_device, hsync_changed )
183};
184
185177static MACHINE_CONFIG_START( paranoia, paranoia_state )
186178   /* basic machine hardware */
187179   MCFG_CPU_ADD("maincpu", H6280, PCE_MAIN_CLOCK/3)
r29271r29272
205197   MCFG_SCREEN_UPDATE_DRIVER( pce_common_state, screen_update )
206198   MCFG_SCREEN_PALETTE("huc6260:palette")
207199
208   MCFG_HUC6260_ADD( "huc6260", PCE_MAIN_CLOCK, pce_huc6260_config )
200   MCFG_DEVICE_ADD( "huc6260", HUC6260, PCE_MAIN_CLOCK )
201   MCFG_HUC6260_NEXT_PIXEL_DATA_CB(DEVREAD16("huc6270", huc6270_device, next_pixel))
202   MCFG_HUC6260_TIME_TIL_NEXT_EVENT_CB(DEVREAD16("huc6270", huc6270_device, time_until_next_event))
203   MCFG_HUC6260_VSYNC_CHANGED_CB(DEVWRITELINE("huc6270", huc6270_device, vsync_changed))
204   MCFG_HUC6260_HSYNC_CHANGED_CB(DEVWRITELINE("huc6270", huc6270_device, hsync_changed))
209205   MCFG_DEVICE_ADD( "huc6270", HUC6270, 0 )
210206   MCFG_HUC6270_VRAM_SIZE(0x10000)
211207   MCFG_HUC6270_IRQ_CHANGED_CB(WRITELINE(pce_common_state, pce_irq_changed))
trunk/src/mame/drivers/tourvis.c
r29271r29272
368368   m_maincpu->set_input_line(0, state);
369369}
370370
371
372static const huc6260_interface pce_huc6260_config =
373{
374   DEVCB_DEVICE_MEMBER16( "huc6270", huc6270_device, next_pixel ),
375   DEVCB_DEVICE_MEMBER16( "huc6270", huc6270_device, time_until_next_event ),
376   DEVCB_DEVICE_LINE_MEMBER( "huc6270", huc6270_device, vsync_changed ),
377   DEVCB_DEVICE_LINE_MEMBER( "huc6270", huc6270_device, hsync_changed )
378};
379
380371static MACHINE_CONFIG_START( tourvision, tourvision_state )
381372   /* basic machine hardware */
382373   MCFG_CPU_ADD("maincpu", H6280, PCE_MAIN_CLOCK/3)
r29271r29272
393384   MCFG_SCREEN_UPDATE_DRIVER( pce_common_state, screen_update )
394385   MCFG_SCREEN_PALETTE("huc6260:palette")
395386
396   MCFG_HUC6260_ADD( "huc6260", PCE_MAIN_CLOCK, pce_huc6260_config )
387   MCFG_DEVICE_ADD( "huc6260", HUC6260, PCE_MAIN_CLOCK )
388   MCFG_HUC6260_NEXT_PIXEL_DATA_CB(DEVREAD16("huc6270", huc6270_device, next_pixel))
389   MCFG_HUC6260_TIME_TIL_NEXT_EVENT_CB(DEVREAD16("huc6270", huc6270_device, time_until_next_event))
390   MCFG_HUC6260_VSYNC_CHANGED_CB(DEVWRITELINE("huc6270", huc6270_device, vsync_changed))
391   MCFG_HUC6260_HSYNC_CHANGED_CB(DEVWRITELINE("huc6270", huc6270_device, hsync_changed))
397392   MCFG_DEVICE_ADD( "huc6270", HUC6270, 0 )
398393   MCFG_HUC6270_VRAM_SIZE(0x10000)
399394   MCFG_HUC6270_IRQ_CHANGED_CB(WRITELINE(tourvision_state, pce_irq_changed))
trunk/src/emu/video/huc6260.c
r29271r29272
4343const device_type HUC6260 = &device_creator<huc6260_device>;
4444
4545
46void huc6260_device::device_config_complete()
47{
48   const huc6260_interface *intf = reinterpret_cast<const huc6260_interface *>(static_config());
49
50   if ( intf != NULL )
51   {
52      *static_cast<huc6260_interface *>(this) = *intf;
53   }
54   else
55   {
56      memset(&m_get_next_pixel_data, 0, sizeof(m_get_next_pixel_data));
57      memset(&m_get_time_til_next_event, 0, sizeof(m_get_time_til_next_event));
58      memset(&m_hsync_changed, 0, sizeof(m_hsync_changed));
59      memset(&m_vsync_changed, 0, sizeof(m_vsync_changed));
60   }
61}
62
63
6446huc6260_device::huc6260_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
6547   :   device_t(mconfig, HUC6260, "HuC6260 VCE", tag, owner, clock, "huc6260", __FILE__),
66      device_video_interface(mconfig, *this)
48      device_video_interface(mconfig, *this),
49      m_next_pixel_data_cb(*this),
50      m_time_til_next_event_cb(*this),
51      m_vsync_changed_cb(*this),
52      m_hsync_changed_cb(*this)
6753{
6854}
6955
r29271r29272
8268      {
8369         g_profiler.start( PROFILER_VIDEO );
8470         /* Get next pixel information */
85         m_pixel_data = m_get_next_pixel_data( 0, 0xffff );
71         m_pixel_data = m_next_pixel_data_cb( 0, 0xffff );
8672         g_profiler.stop();
8773         if ( m_greyscales )
8874         {
r29271r29272
9783      switch( h )
9884      {
9985      case HUC6260_HSYNC_START:       /* Start of HSync */
100         m_hsync_changed( 0 );
86         m_hsync_changed_cb( 0 );
10187//          if ( v == 0 )
10288//          {
10389//              /* Check if the screen should be resized */
r29271r29272
118104         break;
119105
120106      case 0:     /* End of HSync */
121         m_hsync_changed( 1 );
107         m_hsync_changed_cb( 1 );
122108         m_pixel_clock = 0;
123109         v = ( v + 1 ) % m_height;
124110         bitmap_line = &m_bmp->pix16(v);
r29271r29272
127113      case HUC6260_HSYNC_START + 30:      /* End/Start of VSync */
128114         if ( v>= m_height - 4 )
129115         {
130            m_vsync_changed( ( v >= m_height - 4 && v < m_height - 1 ) ? 0 : 1 );
116            m_vsync_changed_cb( ( v >= m_height - 4 && v < m_height - 1 ) ? 0 : 1 );
131117         }
132118         break;
133119      }
r29271r29272
158144
159145   /* Ask our slave device for time until next possible event */
160146   {
161      UINT16 next_event_clocks = m_get_time_til_next_event( 0, 0xffff );
147      UINT16 next_event_clocks = m_time_til_next_event_cb( 0, 0xffff );
162148      int event_hpos, event_vpos;
163149
164150      /* Adjust for pixel clocks per pixel */
r29271r29272
255241   m_bmp = auto_bitmap_ind16_alloc( machine(), HUC6260_WPF, HUC6260_LPF );
256242
257243   /* Resolve callbacks */
258   m_hsync_changed.resolve( hsync_changed, *this );
259   m_vsync_changed.resolve( vsync_changed, *this );
260   m_get_next_pixel_data.resolve( get_next_pixel_data, *this );
261   m_get_time_til_next_event.resolve( get_time_til_next_event, *this );
244   m_hsync_changed_cb.resolve();
245   m_vsync_changed_cb.resolve();
246   m_next_pixel_data_cb.resolve();
247   m_time_til_next_event_cb.resolve();
262248
263249   /* We want to have a valid screen and valid callbacks */
264   assert( ! m_hsync_changed.isnull() );
265   assert( ! m_vsync_changed.isnull() );
266   assert( ! m_get_next_pixel_data.isnull() );
267   assert( ! m_get_time_til_next_event.isnull() );
250   assert( ! m_hsync_changed_cb.isnull() );
251   assert( ! m_vsync_changed_cb.isnull() );
252   assert( ! m_next_pixel_data_cb.isnull() );
253   assert( ! m_time_til_next_event_cb.isnull() );
268254
269255   save_item(NAME(m_last_h));
270256   save_item(NAME(m_last_v));
trunk/src/emu/video/huc6260.h
r29271r29272
1818#define HUC6260_LPF         263     /* max number of lines in a single frame */
1919
2020
21#define MCFG_HUC6260_ADD( _tag, clock, _intrf ) \
22   MCFG_DEVICE_ADD( _tag, HUC6260, clock )     \
23   MCFG_DEVICE_CONFIG( _intrf )
21#define MCFG_HUC6260_NEXT_PIXEL_DATA_CB(_devcb) \
22   devcb = &huc6260_device::set_next_pixel_data_callback(*device, DEVCB2_##_devcb);
23   
24#define MCFG_HUC6260_TIME_TIL_NEXT_EVENT_CB(_devcb) \
25   devcb = &huc6260_device::set_time_til_next_event_callback(*device, DEVCB2_##_devcb);
26   
27#define MCFG_HUC6260_VSYNC_CHANGED_CB(_devcb) \
28   devcb = &huc6260_device::set_vsync_changed_callback(*device, DEVCB2_##_devcb);
29   
30#define MCFG_HUC6260_HSYNC_CHANGED_CB(_devcb) \
31   devcb = &huc6260_device::set_hsync_changed_callback(*device, DEVCB2_##_devcb);
32   
2433
25
26struct huc6260_interface
27{
28   /* Callback function to retrieve pixel data */
29   devcb_read16                    get_next_pixel_data;
30
31   /* TODO: Choose proper types */
32   /* Callback function to get time until next event */
33   devcb_read16                    get_time_til_next_event;
34
35   /* Callback function which gets called when vsync changes */
36   devcb_write_line                vsync_changed;
37
38   /* Callback function which gets called when hsync changes */
39   devcb_write_line                hsync_changed;
40};
41
42
4334class huc6260_device :  public device_t,
44                  public device_video_interface,
45                  public huc6260_interface
35                  public device_video_interface
4636{
4737public:
4838   // construction/destruction
4939   huc6260_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
5040
41   template<class _Object> static devcb2_base &set_next_pixel_data_callback(device_t &device, _Object object) { return downcast<huc6260_device &>(device).m_next_pixel_data_cb.set_callback(object); }
42   template<class _Object> static devcb2_base &set_time_til_next_event_callback(device_t &device, _Object object) { return downcast<huc6260_device &>(device).m_time_til_next_event_cb.set_callback(object); }
43   template<class _Object> static devcb2_base &set_vsync_changed_callback(device_t &device, _Object object) { return downcast<huc6260_device &>(device).m_vsync_changed_cb.set_callback(object); }
44   template<class _Object> static devcb2_base &set_hsync_changed_callback(device_t &device, _Object object) { return downcast<huc6260_device &>(device).m_hsync_changed_cb.set_callback(object); }
45   
5146   void video_update(bitmap_ind16 &bitmap, const rectangle &cliprect);
5247   DECLARE_READ8_MEMBER( read );
5348   DECLARE_WRITE8_MEMBER( write );
r29271r29272
5550
5651protected:
5752   // device-level overrides
58   virtual void device_config_complete();
5953   virtual void device_start();
6054   virtual void device_reset();
6155   virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
r29271r29272
6761   int     m_height;
6862
6963   /* callbacks */
70   devcb_resolved_read16       m_get_next_pixel_data;
71   devcb_resolved_read16       m_get_time_til_next_event;
72   devcb_resolved_write_line   m_hsync_changed;
73   devcb_resolved_write_line   m_vsync_changed;
64   /* Callback function to retrieve pixel data */
65   devcb2_read16                    m_next_pixel_data_cb;
7466
67   /* TODO: Choose proper types */
68   /* Callback function to get time until next event */
69   devcb2_read16                    m_time_til_next_event_cb;
70
71   /* Callback function which gets called when vsync changes */
72   devcb2_write_line                m_vsync_changed_cb;
73
74   /* Callback function which gets called when hsync changes */
75   devcb2_write_line                m_hsync_changed_cb;
76
7577   UINT16  m_palette[512];
7678   UINT16  m_address;
7779   UINT8   m_greyscales;       /* Should the HuC6260 output grey or color graphics */
trunk/src/mess/drivers/pce.c
r29271r29272
302302}
303303
304304
305static const huc6260_interface pce_huc6260_config =
306{
307   DEVCB_DEVICE_MEMBER16( "huc6270", huc6270_device, next_pixel ),
308   DEVCB_DEVICE_MEMBER16( "huc6270", huc6270_device, time_until_next_event ),
309   DEVCB_DEVICE_LINE_MEMBER( "huc6270", huc6270_device, vsync_changed ),
310   DEVCB_DEVICE_LINE_MEMBER( "huc6270", huc6270_device, hsync_changed )
311};
312
313
314305static const huc6202_interface sgx_huc6202_config =
315306{
316307   DEVCB_DEVICE_MEMBER16( "huc6270_0", huc6270_device, next_pixel ),
r29271r29272
328319};
329320
330321
331static const huc6260_interface sgx_huc6260_config =
332{
333   DEVCB_DEVICE_MEMBER16( "huc6202", huc6202_device, next_pixel ),
334   DEVCB_DEVICE_MEMBER16( "huc6202", huc6202_device, time_until_next_event ),
335   DEVCB_DEVICE_LINE_MEMBER( "huc6202", huc6202_device, vsync_changed ),
336   DEVCB_DEVICE_LINE_MEMBER( "huc6202", huc6202_device, hsync_changed )
337};
338
339
340322static SLOT_INTERFACE_START(pce_cart)
341323   SLOT_INTERFACE_INTERNAL("rom", PCE_ROM_STD)
342324   SLOT_INTERFACE_INTERNAL("cdsys3u", PCE_ROM_CDSYS3)
r29271r29272
361343   MCFG_SCREEN_UPDATE_DRIVER( pce_state, screen_update )
362344   MCFG_SCREEN_PALETTE("huc6260:palette")
363345
364   MCFG_HUC6260_ADD( "huc6260", MAIN_CLOCK, pce_huc6260_config )
346   MCFG_DEVICE_ADD( "huc6260", HUC6260, MAIN_CLOCK )
347   MCFG_HUC6260_NEXT_PIXEL_DATA_CB(DEVREAD16("huc6270", huc6270_device, next_pixel))
348   MCFG_HUC6260_TIME_TIL_NEXT_EVENT_CB(DEVREAD16("huc6270", huc6270_device, time_until_next_event))
349   MCFG_HUC6260_VSYNC_CHANGED_CB(DEVWRITELINE("huc6270", huc6270_device, vsync_changed))
350   MCFG_HUC6260_HSYNC_CHANGED_CB(DEVWRITELINE("huc6270", huc6270_device, hsync_changed))
365351   MCFG_DEVICE_ADD( "huc6270", HUC6270, 0 )
366352   MCFG_HUC6270_VRAM_SIZE(0x10000)
367353   MCFG_HUC6270_IRQ_CHANGED_CB(WRITELINE(pce_state, pce_irq_changed))
r29271r29272
406392   MCFG_SCREEN_UPDATE_DRIVER( pce_state, screen_update )
407393   MCFG_SCREEN_PALETTE("huc6260:palette")
408394
409   MCFG_HUC6260_ADD( "huc6260", MAIN_CLOCK, sgx_huc6260_config )
395   MCFG_DEVICE_ADD( "huc6260", HUC6260, MAIN_CLOCK )
396   MCFG_HUC6260_NEXT_PIXEL_DATA_CB(DEVREAD16("huc6202", huc6202_device, next_pixel))
397   MCFG_HUC6260_TIME_TIL_NEXT_EVENT_CB(DEVREAD16("huc6202", huc6202_device, time_until_next_event))
398   MCFG_HUC6260_VSYNC_CHANGED_CB(DEVWRITELINE("huc6202", huc6202_device, vsync_changed))
399   MCFG_HUC6260_HSYNC_CHANGED_CB(DEVWRITELINE("huc6202", huc6202_device, hsync_changed))
410400   MCFG_DEVICE_ADD( "huc6270_0", HUC6270, 0 )
411401   MCFG_HUC6270_VRAM_SIZE(0x10000)
412402   MCFG_HUC6270_IRQ_CHANGED_CB(WRITELINE(pce_state, pce_irq_changed))

Previous 199869 Revisions Next


© 1997-2024 The MAME Team