Previous 199869 Revisions Next

r33913 Monday 15th December, 2014 at 21:24:12 UTC by Olivier Galibert
Add a pretty pink bow on the gift (nw)
[src/mess/drivers]hp16500.c

trunk/src/mess/drivers/hp16500.c
r242424r242425
2727public:
2828   hp16500_state(const machine_config &mconfig, device_type type, const char *tag)
2929      : driver_device(mconfig, type, tag),
30      m_maincpu(*this, "maincpu"),
31      m_vram(*this, "vram")
30      m_maincpu(*this, "maincpu")
3231    { }                                     
3332
3433   virtual void video_start();
3534   UINT32 screen_update_hp16500(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
3635
3736   required_device<cpu_device> m_maincpu;
38   required_shared_ptr<UINT32> m_vram;
37   dynamic_array<UINT8> m_vram;
3938
39   UINT8 m_mask, m_val;
4040
4141   DECLARE_WRITE32_MEMBER(palette_w);
4242
43   DECLARE_WRITE8_MEMBER(vram_w);
44   DECLARE_READ8_MEMBER (vram_r);
45   DECLARE_WRITE8_MEMBER(mask_w);
46   DECLARE_WRITE8_MEMBER(val_w);
47
4348private:
4449   UINT32 m_palette[256], m_colors[3], m_count, m_clutoffs;
4550};
r242424r242425
4752static ADDRESS_MAP_START(hp16500_map, AS_PROGRAM, 32, hp16500_state)
4853   AM_RANGE(0x00000000, 0x0001ffff) AM_ROM AM_REGION("bios", 0)
4954   AM_RANGE(0x0020f000, 0x0020f003) AM_WRITE(palette_w)
50   AM_RANGE(0x00600000, 0x0063ffff) AM_RAM AM_SHARE("vram")
55   AM_RANGE(0x00600000, 0x0061ffff) AM_WRITE8(vram_w, 0x00ff00ff)
56   AM_RANGE(0x00600000, 0x0067ffff) AM_READ8 (vram_r, 0x00ff00ff)
57   AM_RANGE(0x00700000, 0x00700003) AM_WRITE8(mask_w, 0xff000000)
58   AM_RANGE(0x00740000, 0x00740003) AM_WRITE8(val_w,  0xff000000)
5159   AM_RANGE(0x00800000, 0x009fffff) AM_RAM     // 284e end of test - d0 = 0 for pass
5260ADDRESS_MAP_END
5361
r242424r242425
5664   m_count = 0;
5765   m_clutoffs = 0;
5866   memset(m_palette, 0, sizeof(m_palette));
67   m_vram.resize(0x40000);
68   m_mask = 0;
69   m_val = 0;
5970}
6071
72WRITE8_MEMBER(hp16500_state::vram_w)
73{
74   for(int i=0; i<4; i++) {
75      int off = offset + i * 0x10000;
76      if(data & (8 >> i))
77         m_vram[off] = (m_vram[off] & ~m_mask) | (m_val & m_mask);
78      else
79         m_vram[off] = (m_vram[off] & ~m_mask);
80   }
81}
82
83READ8_MEMBER (hp16500_state::vram_r)
84{
85   return m_vram[offset];
86}
87
88WRITE8_MEMBER(hp16500_state::mask_w)
89{
90   m_mask = data;
91}
92
93WRITE8_MEMBER(hp16500_state::val_w)
94{
95   m_val = data;
96}
97
6198WRITE32_MEMBER(hp16500_state::palette_w)
6299{
63100   if (mem_mask == 0xff000000)
r242424r242425
92129// addr = ((Y * 0xfc0) + 0x360) + (X * 4)
93130UINT32 hp16500_state::screen_update_hp16500(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
94131{
95   UINT32 *scanline;
96   int x, y;
97   UINT32 pixels;
98
99   for (y = 0; y < 400; y++)
132   int pos = 0;
133   for (int y = 0; y < 384; y++)
100134   {
101      scanline = &bitmap.pix32(y);
135      UINT32 *scanline = &bitmap.pix32(y);
102136
103      for (x = 0; x < 576/8; x++)
137      for (int x = 0; x < 576; x+=4)
104138      {
105         pixels = m_vram[(y * (288/4)) + x];
106
107         UINT8 gfx = ((pixels & 0xf0000) >> 12) | (pixels & 15);
108         *scanline++ = m_palette[BIT(gfx, 7) ? 2 : 0];
109         *scanline++ = m_palette[BIT(gfx, 6) ? 2 : 0];
110         *scanline++ = m_palette[BIT(gfx, 5) ? 2 : 0];
111         *scanline++ = m_palette[BIT(gfx, 4) ? 2 : 0];
112         *scanline++ = m_palette[BIT(gfx, 3) ? 2 : 0];
113         *scanline++ = m_palette[BIT(gfx, 2) ? 2 : 0];
114         *scanline++ = m_palette[BIT(gfx, 1) ? 2 : 0];
115         *scanline++ = m_palette[BIT(gfx, 0) ? 2 : 0];
116#if 0
117         *scanline++ = m_palette[((pixels&0xf0000000)>>28)];
118         *scanline++ = m_palette[((pixels&0xf000000)>>24)];
119         *scanline++ = m_palette[((pixels&0xf00000)>>20)];
120         *scanline++ = m_palette[((pixels&0xf0000)>>16)];
121         *scanline++ = m_palette[((pixels&0xf000)>>12)];
122         *scanline++ = m_palette[((pixels&0xf00)>>8)];
123         *scanline++ = m_palette[((pixels&0xf0)>>4)];
124         *scanline++ = m_palette[(pixels&0xf)];
125#endif
139         *scanline++ = m_palette[m_vram[pos+0x00000]];
140         *scanline++ = m_palette[m_vram[pos+0x10000]];
141         *scanline++ = m_palette[m_vram[pos+0x20000]];
142         *scanline++ = m_palette[m_vram[pos+0x30000]];
143         pos++;
126144      }
127145   }
128146
r242424r242425
136154
137155   MCFG_SCREEN_ADD("screen", RASTER)
138156   MCFG_SCREEN_UPDATE_DRIVER(hp16500_state, screen_update_hp16500)
139   MCFG_SCREEN_SIZE(576,400)
140   MCFG_SCREEN_VISIBLE_AREA(0, 576-1, 0, 400-1)
157   MCFG_SCREEN_SIZE(576,384)
158   MCFG_SCREEN_VISIBLE_AREA(0, 576-1, 0, 384-1)
141159   MCFG_SCREEN_REFRESH_RATE(60)
142160
143161   MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")


Previous 199869 Revisions Next


© 1997-2024 The MAME Team