Previous 199869 Revisions Next

r30731 Friday 30th May, 2014 at 22:40:20 UTC by Carl
x68k: make screen rgb and split palette (nw)
mongoose: mingw-gcc 4.8 compile fix (nw)
[src/lib/web]mongoose.c
[src/mess/drivers]x68k.c
[src/mess/includes]x68k.h
[src/mess/video]x68k.c

trunk/src/lib/web/mongoose.c
r30730r30731
10921092#define STR(x) STRX(x)
10931093#define __func__ __FILE__ ":" STR(__LINE__)
10941094#endif
1095#if defined _MSC_VER
10951096#define INT64_FMT  "I64d"
1097#else
1098#define INT64_FMT  "lld"
1099#endif
10961100#define stat(x, y) mg_stat((x), (y))
10971101#define fopen(x, y) mg_fopen((x), (y))
10981102#define open(x, y) mg_open((x), (y))
trunk/src/mess/drivers/x68k.c
r30730r30731
921921   {
922922      COMBINE_DATA(m_video.gfx_pal+offset);
923923      val = m_video.gfx_pal[offset];
924      m_palette->set_pen_color(offset,(val & 0x07c0) >> 3,(val & 0xf800) >> 8,(val & 0x003e) << 2);
924      m_gfxpalette->set_pen_color(offset, pal555(val, 6, 11, 1));
925925      return;
926926   }
927927
928928   if(offset >= 0x100 && offset < 0x200)  // Text / Sprites / Tilemap palette
929929   {
930      COMBINE_DATA(m_video.text_pal+(offset-0x100));
931      val = m_video.text_pal[offset-0x100];
932      m_palette->set_pen_color(offset,(val & 0x07c0) >> 3,(val & 0xf800) >> 8,(val & 0x003e) << 2);
930      offset -= 0x100;
931      COMBINE_DATA(m_video.text_pal + offset);
932      val = m_video.text_pal[offset];
933      m_pcgpalette->set_pen_color(offset, pal555(val, 6, 11, 1));
933934      return;
934935   }
935936
r30730r30731
16491650
16501651   m_sysport.cputype = 0xff;  // 68000, 10MHz
16511652   m_is_32bit = false;
1653
1654   save_item(NAME(m_tvram));
1655   save_item(NAME(m_gvram));
1656   save_item(NAME(m_spritereg));
16521657}
16531658
16541659DRIVER_INIT_MEMBER(x68k_state,x68kxvi)
r30730r30731
17241729   /* video hardware */
17251730   MCFG_SCREEN_ADD("screen", RASTER)
17261731   MCFG_SCREEN_REFRESH_RATE(55.45)
1727   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
1732//   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
17281733//  MCFG_GFXDECODE_ADD("gfxdecode", "palette", x68k)
17291734   MCFG_SCREEN_SIZE(1096, 568)  // inital setting
17301735   MCFG_SCREEN_VISIBLE_AREA(0, 767, 0, 511)
17311736   MCFG_SCREEN_UPDATE_DRIVER(x68k_state, screen_update_x68000)
1732   MCFG_SCREEN_PALETTE("palette")
1737//   MCFG_SCREEN_PALETTE("palette")
17331738
1734   MCFG_GFXDECODE_ADD("gfxdecode", "palette", empty)
1739   MCFG_GFXDECODE_ADD("gfxdecode", "pcgpalette", empty)
17351740
1736   MCFG_PALETTE_ADD("palette", 65536)
1737   MCFG_PALETTE_INIT_OWNER(x68k_state, x68000 )
1741   MCFG_PALETTE_ADD("gfxpalette", 256)
1742   MCFG_PALETTE_FORMAT(GGGGGRRRRRBBBBBx)
1743   MCFG_PALETTE_ADD("pcgpalette", 256)
1744   MCFG_PALETTE_FORMAT(GGGGGRRRRRBBBBBx)
17381745
17391746   MCFG_VIDEO_START_OVERRIDE(x68k_state, x68000 )
17401747
trunk/src/mess/includes/x68k.h
r30730r30731
5353         m_hd63450(*this, "hd63450"),
5454         m_ram(*this, RAM_TAG),
5555         m_gfxdecode(*this, "gfxdecode"),
56         m_palette(*this, "palette"),
56         m_gfxpalette(*this, "gfxpalette"),
57         m_pcgpalette(*this, "pcgpalette"),
5758         m_mfpdev(*this, MC68901_TAG),
5859         m_rtc(*this, RP5C15_TAG),
5960         m_scc(*this, "scc"),
r30730r30731
8182   required_device<hd63450_device> m_hd63450;
8283   required_device<ram_device> m_ram;
8384   required_device<gfxdecode_device> m_gfxdecode;
84   required_device<palette_device> m_palette;
85   required_device<palette_device> m_gfxpalette;
86   required_device<palette_device> m_pcgpalette;
8587   required_device<mc68901_device> m_mfpdev;
8688   required_device<rp5c15_device> m_rtc;
8789   required_device<scc8530_t> m_scc;
r30730r30731
250252   DECLARE_MACHINE_START(x68000);
251253   DECLARE_VIDEO_START(x68000);
252254   DECLARE_PALETTE_INIT(x68000);
253   UINT32 screen_update_x68000(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
255   UINT32 screen_update_x68000(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
254256   TIMER_CALLBACK_MEMBER(x68k_led_callback);
255257   TIMER_CALLBACK_MEMBER(x68k_scc_ack);
256258   TIMER_CALLBACK_MEMBER(md_6button_port1_timeout);
r30730r30731
330332   IRQ_CALLBACK_MEMBER(x68k_int_ack);
331333
332334private:
333   inline void x68k_plot_pixel(bitmap_ind16 &bitmap, int x, int y, UINT32 color);
335   inline void x68k_plot_pixel(bitmap_rgb32 &bitmap, int x, int y, UINT32 color);
334336   void x68k_crtc_text_copy(int src, int dest);
335337   void x68k_crtc_refresh_mode();
336   void x68k_draw_text(bitmap_ind16 &bitmap, int xscr, int yscr, rectangle rect);
337   void x68k_draw_gfx_scanline(bitmap_ind16 &bitmap, rectangle cliprect, UINT8 priority);
338   void x68k_draw_gfx(bitmap_ind16 &bitmap,rectangle cliprect);
339   void x68k_draw_sprites(bitmap_ind16 &bitmap, int priority, rectangle cliprect);
338   void x68k_draw_text(bitmap_rgb32 &bitmap, int xscr, int yscr, rectangle rect);
339   void x68k_draw_gfx_scanline(bitmap_rgb32 &bitmap, rectangle cliprect, UINT8 priority);
340   void x68k_draw_gfx(bitmap_rgb32 &bitmap,rectangle cliprect);
341   void x68k_draw_sprites(bitmap_rgb32 &bitmap, int priority, rectangle cliprect);
340342
341343public:
342   bitmap_ind16* x68k_get_gfx_page(int pri,int type);
344   bitmap_rgb32* x68k_get_gfx_page(int pri,int type);
343345   attotime prescale(int val);
344346   void mfp_trigger_irq(int irq);
345347   void mfp_set_timer(int timer, unsigned char data);
trunk/src/mess/video/x68k.c
r30730r30731
3333
3434
3535
36inline void x68k_state::x68k_plot_pixel(bitmap_ind16 &bitmap, int x, int y, UINT32 color)
36inline void x68k_state::x68k_plot_pixel(bitmap_rgb32 &bitmap, int x, int y, UINT32 color)
3737{
38   bitmap.pix16(y, x) = (UINT16)color;
38   bitmap.pix32(y, x) = (UINT16)color;
3939}
4040/*
41bitmap_ind16* ::x68k_get_gfx_page(int pri,int type)
41bitmap_rgb32* ::x68k_get_gfx_page(int pri,int type)
4242{
4343    if(type == GFX16)
4444    {
r30730r30731
696696   return m_spriteram[offset];
697697}
698698
699void x68k_state::x68k_draw_text(bitmap_ind16 &bitmap, int xscr, int yscr, rectangle rect)
699void x68k_state::x68k_draw_text(bitmap_rgb32 &bitmap, int xscr, int yscr, rectangle rect)
700700{
701701   unsigned int line,pixel; // location on screen
702702   UINT32 loc;  // location in TVRAM
r30730r30731
720720         {
721721            // Colour 0 is displayable if the text layer is at the priority level 2
722722            if(colour == 0 && (m_video.reg[1] & 0x0c00) == 0x0800)
723               bitmap.pix16(line, pixel) = 512 + (m_video.text_pal[colour] >> 1);
723               bitmap.pix32(line, pixel) = m_pcgpalette->pen(colour);
724724            else
725725               if(colour != 0)
726                  bitmap.pix16(line, pixel) = 512 + (m_video.text_pal[colour] >> 1);
726                  bitmap.pix32(line, pixel) = m_pcgpalette->pen(colour);
727727         }
728728         bit--;
729729         if(bit < 0)
r30730r30731
736736   }
737737}
738738
739void x68k_state::x68k_draw_gfx_scanline( bitmap_ind16 &bitmap, rectangle cliprect, UINT8 priority)
739void x68k_state::x68k_draw_gfx_scanline( bitmap_rgb32 &bitmap, rectangle cliprect, UINT8 priority)
740740{
741741   int pixel;
742742   int page;
r30730r30731
776776                  break;
777777               }
778778               if(colour != 0)
779                  bitmap.pix16(scanline, pixel) = 512 + (m_video.gfx_pal[colour] >> 1);
779               {
780                  bitmap.pix32(scanline, pixel) = m_gfxpalette->pen(colour);
781               }
780782               loc++;
781783               loc &= 0x3ff;
782784            }
r30730r30731
800802               {
801803                  colour = ((m_gvram[lineoffset + loc] >> page*shift) & 0x000f);
802804                  if(colour != 0)
803                     bitmap.pix16(scanline, pixel) = 512 + (m_video.gfx_pal[colour & 0x0f] >> 1);
805                  {
806                     bitmap.pix32(scanline, pixel) = m_gfxpalette->pen(colour);
807                  }
804808                  loc++;
805809                  loc &= 0x1ff;
806810               }
r30730r30731
817821                  {
818822                     colour = ((m_gvram[lineoffset + loc] >> page*shift) & 0x00ff);
819823                     if(colour != 0)
820                        bitmap.pix16(scanline, pixel) = 512 + (m_video.gfx_pal[colour & 0xff] >> 1);
824                     {
825                        bitmap.pix32(scanline, pixel) = m_gfxpalette->pen(colour);
826                     }
821827                     loc++;
822828                     loc &= 0x1ff;
823829                  }
r30730r30731
832838               {
833839                  colour = m_gvram[lineoffset + loc];
834840                  if(colour != 0)
835                     bitmap.pix16(scanline, pixel) = 512 + (colour >> 1);
841                  {
842                     bitmap.pix32(scanline, pixel) = pal555(colour, 6, 11, 1);
843                  }
836844                  loc++;
837845                  loc &= 0x1ff;
838846               }
r30730r30731
843851   }
844852}
845853
846void x68k_state::x68k_draw_gfx(bitmap_ind16 &bitmap,rectangle cliprect)
854void x68k_state::x68k_draw_gfx(bitmap_rgb32 &bitmap,rectangle cliprect)
847855{
848856   int priority;
849857   //rectangle rect;
r30730r30731
860868}
861869
862870// Sprite controller "Cynthia" at 0xeb0000
863void x68k_state::x68k_draw_sprites(bitmap_ind16 &bitmap, int priority, rectangle cliprect)
871void x68k_state::x68k_draw_sprites(bitmap_rgb32 &bitmap, int priority, rectangle cliprect)
864872{
865873   /*
866874      0xeb0000 - 0xeb07ff - Sprite registers (up to 128)
r30730r30731
917925         sx += m_crtc.bg_hshift;
918926         sx += m_sprite_shift;
919927
920         m_gfxdecode->gfx(1)->zoom_transpen(bitmap,cliprect,code,colour+0x10,xflip,yflip,m_crtc.hbegin+sx,m_crtc.vbegin+(sy*m_crtc.bg_double),0x10000,0x10000*m_crtc.bg_double,0x00);
928         m_gfxdecode->gfx(1)->zoom_transpen(bitmap,cliprect,code,colour,xflip,yflip,m_crtc.hbegin+sx,m_crtc.vbegin+(sy*m_crtc.bg_double),0x10000,0x10000*m_crtc.bg_double,0x00);
921929      }
922930   }
923931}
924932
925PALETTE_INIT_MEMBER(x68k_state,x68000)
926{
927   int pal;
928   int r,g,b;
929
930   for(pal=0;pal<32768;pal++)
931   {  // create 64k colour lookup
932      g = (pal & 0x7c00) >> 7;
933      r = (pal & 0x03e0) >> 2;
934      b = (pal & 0x001f) << 3;
935      palette.set_pen_color(pal+512,r,g,b);
936   }
937}
938
939933static const gfx_layout x68k_pcg_8 =
940934{
941935   8,8,
r30730r30731
964958   int code = m_spriteram[0x3000+tile_index] & 0x00ff;
965959   int colour = (m_spriteram[0x3000+tile_index] & 0x0f00) >> 8;
966960   int flags = (m_spriteram[0x3000+tile_index] & 0xc000) >> 14;
967   SET_TILE_INFO_MEMBER(0,code,colour+16,flags);
961   SET_TILE_INFO_MEMBER(0,code,colour,flags);
968962}
969963
970964TILE_GET_INFO_MEMBER(x68k_state::x68k_get_bg1_tile)
r30730r30731
972966   int code = m_spriteram[0x2000+tile_index] & 0x00ff;
973967   int colour = (m_spriteram[0x2000+tile_index] & 0x0f00) >> 8;
974968   int flags = (m_spriteram[0x2000+tile_index] & 0xc000) >> 14;
975   SET_TILE_INFO_MEMBER(0,code,colour+16,flags);
969   SET_TILE_INFO_MEMBER(0,code,colour,flags);
976970}
977971
978972TILE_GET_INFO_MEMBER(x68k_state::x68k_get_bg0_tile_16)
r30730r30731
980974   int code = m_spriteram[0x3000+tile_index] & 0x00ff;
981975   int colour = (m_spriteram[0x3000+tile_index] & 0x0f00) >> 8;
982976   int flags = (m_spriteram[0x3000+tile_index] & 0xc000) >> 14;
983   SET_TILE_INFO_MEMBER(1,code,colour+16,flags);
977   SET_TILE_INFO_MEMBER(1,code,colour,flags);
984978}
985979
986980TILE_GET_INFO_MEMBER(x68k_state::x68k_get_bg1_tile_16)
r30730r30731
988982   int code = m_spriteram[0x2000+tile_index] & 0x00ff;
989983   int colour = (m_spriteram[0x2000+tile_index] & 0x0f00) >> 8;
990984   int flags = (m_spriteram[0x2000+tile_index] & 0xc000) >> 14;
991   SET_TILE_INFO_MEMBER(1,code,colour+16,flags);
985   SET_TILE_INFO_MEMBER(1,code,colour,flags);
992986}
993987
994988VIDEO_START_MEMBER(x68k_state,x68000)
r30730r30731
1000994         break;
1001995
1002996   /* create the char set (gfx will then be updated dynamically from RAM) */
1003   m_gfxdecode->set_gfx(gfx_index, global_alloc(gfx_element(m_palette, x68k_pcg_8, memregion("user1")->base(), 0, 32, 0)));
997   m_gfxdecode->set_gfx(gfx_index, global_alloc(gfx_element(m_pcgpalette, x68k_pcg_8, memregion("user1")->base(), 0, 32, 0)));
1004998
1005999   gfx_index++;
10061000
1007   m_gfxdecode->set_gfx(gfx_index, global_alloc(gfx_element(m_palette, x68k_pcg_16, memregion("user1")->base(), 0, 32, 0)));
1001   m_gfxdecode->set_gfx(gfx_index, global_alloc(gfx_element(m_pcgpalette, x68k_pcg_16, memregion("user1")->base(), 0, 32, 0)));
10081002   m_gfxdecode->gfx(gfx_index)->set_colors(32);
10091003
10101004   /* Tilemaps */
r30730r30731
10211015//  m_scanline_timer->adjust(attotime::zero, 0, attotime::from_hz(55.45)/568);
10221016}
10231017
1024UINT32 x68k_state::screen_update_x68000(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
1018UINT32 x68k_state::screen_update_x68000(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
10251019{
10261020   rectangle rect(0,0,0,0);
10271021   int priority;

Previous 199869 Revisions Next


© 1997-2024 The MAME Team