Previous 199869 Revisions Next

r32597 Thursday 9th October, 2014 at 12:15:17 UTC by Osso
atarisy4.c: converted from polylgcy.h to poly.h (nw)
[src/mame/drivers]atarisy4.c

trunk/src/mame/drivers/atarisy4.c
r32596r32597
1717#include "emu.h"
1818#include "cpu/m68000/m68000.h"
1919#include "cpu/tms32010/tms32010.h"
20#include "video/polylgcy.h"
20#include "video/poly.h"
2121
2222
23struct atarisy4_polydata
24{
25   UINT16 color;
26   UINT16 *screen_ram;
27};
28
29class atarisy4_state;
30
31class atarisy4_renderer : public poly_manager<float, atarisy4_polydata, 2, 8192>
32{
33public:
34   atarisy4_renderer(atarisy4_state &state, screen_device &screen);
35   ~atarisy4_renderer() {}
36   
37   void draw_scanline(INT32 scanline, const extent_t &extent, const atarisy4_polydata &extradata, int threadid);
38   void draw_polygon(UINT16 color);
39   
40   atarisy4_state &m_state;
41};
42
2343class atarisy4_state : public driver_device
2444{
2545public:
2646   atarisy4_state(const machine_config &mconfig, device_type type, const char *tag)
2747      : driver_device(mconfig, type, tag),
28      m_m68k_ram(*this, "m68k_ram"),
29      m_screen_ram(*this, "screen_ram"),
3048      m_maincpu(*this, "maincpu"),
3149      m_dsp0(*this, "dsp0"),
3250      m_dsp1(*this, "dsp1"),
33      m_palette(*this, "palette") { }
51      m_palette(*this, "palette"),
52      m_screen(*this, "screen"),
53      m_m68k_ram(*this, "m68k_ram"),
54      m_screen_ram(*this, "screen_ram"),
55      m_dsp0_bank1(*this, "dsp0_bank1"),
56      m_dsp1_bank1(*this, "dsp1_bank1") { }
57     
58   required_device<cpu_device> m_maincpu;
59   required_device<cpu_device> m_dsp0;
60   optional_device<cpu_device> m_dsp1;
61   required_device<palette_device> m_palette;
62   required_device<screen_device> m_screen;
63   
64   required_shared_ptr<UINT16> m_m68k_ram;
65   required_shared_ptr<UINT16> m_screen_ram;
66   
67   required_memory_bank m_dsp0_bank1;
68   optional_memory_bank m_dsp1_bank1;
3469
70   atarisy4_renderer *m_renderer;
71   
3572   UINT8 m_r_color_table[256];
3673   UINT8 m_g_color_table[256];
3774   UINT8 m_b_color_table[256];
3875   UINT16 m_dsp_bank[2];
3976   UINT8 m_csr[2];
40   required_shared_ptr<UINT16> m_m68k_ram;
4177   UINT16 *m_shared_ram[2];
42   required_shared_ptr<UINT16> m_screen_ram;
43   legacy_poly_manager *m_poly;
78   
4479   DECLARE_WRITE16_MEMBER(gpu_w);
4580   DECLARE_READ16_MEMBER(gpu_r);
4681   DECLARE_READ16_MEMBER(m68k_shared_0_r);
r32596r32597
65100   UINT32 screen_update_atarisy4(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
66101   INTERRUPT_GEN_MEMBER(vblank_int);
67102   void image_mem_to_screen( bool clip);
68   void draw_polygon(UINT16 color);
69103   void execute_gpu_command();
70104   inline UINT8 hex_to_ascii(UINT8 in);
71105   void load_ldafile(address_space &space, const UINT8 *file);
72106   void load_hexfile(address_space &space, const UINT8 *file);
73   required_device<cpu_device> m_maincpu;
74   required_device<cpu_device> m_dsp0;
75   optional_device<cpu_device> m_dsp1;
76   required_device<palette_device> m_palette;
77107};
78108
79109
r32596r32597
135165} gpu;
136166
137167
138
139
140struct poly_extra_data
141{
142   UINT16 color;
143   UINT16 *screen_ram;
144};
145
146
147168/*************************************
148169 *
149 *  Forward declarations
150 *
151 *************************************/
152
153
154
155
156
157
158/*************************************
159 *
160170 *  Video hardware
161171 *
162172 *************************************/
163173
164void atarisy4_state::video_start()
174atarisy4_renderer::atarisy4_renderer(atarisy4_state &state, screen_device &screen)
175   : poly_manager<float, atarisy4_polydata, 2, 8192>(screen, POLYFLAG_NO_WORK_QUEUE),
176      m_state(state)
165177{
166   m_poly = poly_alloc(machine(), 1024, sizeof(poly_extra_data), POLYFLAG_NO_WORK_QUEUE);
167178}
168179
180 void atarisy4_state::video_start()
181{
182   m_renderer = auto_alloc(machine(), atarisy4_renderer(*this, *m_screen));
183}
184
169185void atarisy4_state::video_reset()
170186{
171187   gpu.vblank_wait = 0;
r32596r32597
260276   }
261277}
262278
263static void draw_scanline(void *dest, INT32 scanline, const poly_extent *extent, const void *extradata, int threadid)
279void atarisy4_renderer::draw_scanline(INT32 scanline, const extent_t &extent, const atarisy4_polydata &extradata, int threadid)
264280{
265   const poly_extra_data *extra = (const poly_extra_data *)extradata;
266   UINT16 color = extra->color;
281   UINT16 color = extradata.color;
267282   int x;
268283
269   for (x = extent->startx; x < extent->stopx; ++x)
284   for (x = extent.startx; x < extent.stopx; ++x)
270285   {
271286      UINT32 addr = xy_to_screen_addr(x, scanline);
272      UINT16 pix = extra->screen_ram[addr >> 1];
287      UINT16 pix = extradata.screen_ram[addr >> 1];
273288
274289      if (x & 1)
275290         pix = (pix & (0x00ff)) | color << 8;
276291      else
277292         pix = (pix & (0xff00)) | color;
278293
279      extra->screen_ram[addr >> 1] = pix;
294      extradata.screen_ram[addr >> 1] = pix;
280295   }
281296}
282297
283void atarisy4_state::draw_polygon(UINT16 color)
298void atarisy4_renderer::draw_polygon(UINT16 color)
284299{
285   int i;
286300   rectangle clip;
287   poly_vertex v1, v2, v3;
288   poly_extra_data *extra = (poly_extra_data *)poly_get_extra_data(m_poly);
301   vertex_t v1, v2, v3;
302   atarisy4_polydata &extradata = object_data_alloc();
303   render_delegate rd_scan = render_delegate(FUNC(atarisy4_renderer::draw_scanline), this);
289304
290305   clip.set(0, 511, 0, 511);
291306
292   extra->color = color;
293   extra->screen_ram = m_screen_ram;
307   extradata.color = color;
308   extradata.screen_ram = m_state.m_screen_ram;
294309
295310   v1.x = gpu.points[0].x;
296311   v1.y = gpu.points[0].y;
r32596r32597
299314   v2.y = gpu.points[1].y;
300315
301316   /* Draw a triangle fan */
302   for (i = 2; i <= gpu.pt_idx; ++i)
317   for (int i = 2; i <= gpu.pt_idx; ++i)
303318   {
304319      v3.x = gpu.points[i].x;
305320      v3.y = gpu.points[i].y;
306321
307      poly_render_triangle(m_poly, 0, clip, draw_scanline, 1, &v1, &v2, &v3);
322      render_triangle(clip, rd_scan, 1, v1, v2, v3);
308323      v2 = v3;
309324   }
310325}
r32596r32597
452467      }
453468      case 0x2c:
454469      {
455         draw_polygon(gpu.gr[2]);
456         poly_wait(m_poly, "Normal");
470         m_renderer->draw_polygon(gpu.gr[2]);
471         m_renderer->wait();
457472         break;
458473      }
459474      default:
r32596r32597
601616   }
602617
603618   data &= 0x3800;
604   membank("dsp0_bank1")->set_base(&m_shared_ram[0][data]);
619   m_dsp0_bank1->set_base(&m_shared_ram[0][data]);
605620   m_dsp_bank[0] = data;
606621}
607622
r32596r32597
635650   }
636651
637652   data &= 0x3800;
638   membank("dsp1_bank1")->set_base(&m_shared_ram[1][data]);
653   m_dsp1_bank1->set_base(&m_shared_ram[1][data]);
639654   m_dsp_bank[1] = data;
640655}
641656
r32596r32597
9881003
9891004   /* Set up the DSP */
9901005   membank("dsp0_bank0")->set_base(m_shared_ram[0]);
991   membank("dsp0_bank1")->set_base(&m_shared_ram[0][0x800]);
1006   m_dsp0_bank1->set_base(&m_shared_ram[0][0x800]);
9921007   load_ldafile(m_dsp0->space(AS_PROGRAM), memregion("dsp")->base());
9931008}
9941009
r32596r32597
10031018
10041019   /* Set up the first DSP */
10051020   membank("dsp0_bank0")->set_base(m_shared_ram[0]);
1006   membank("dsp0_bank1")->set_base(&m_shared_ram[0][0x800]);
1021   m_dsp0_bank1->set_base(&m_shared_ram[0][0x800]);
10071022   load_ldafile(m_dsp0->space(AS_PROGRAM), memregion("dsp")->base());
10081023
10091024   /* Set up the second DSP */
10101025   membank("dsp1_bank0")->set_base(m_shared_ram[1]);
1011   membank("dsp1_bank1")->set_base(&m_shared_ram[1][0x800]);
1026   m_dsp1_bank1->set_base(&m_shared_ram[1][0x800]);
10121027   load_ldafile(m_dsp1->space(AS_PROGRAM), memregion("dsp")->base());
10131028}
10141029

Previous 199869 Revisions Next


© 1997-2024 The MAME Team