Previous 199869 Revisions Next

r31856 Monday 1st September, 2014 at 12:05:17 UTC by Osso
mjsister.c: fixed crash (nw)
[src/mame/drivers]mjsister.c

trunk/src/mame/drivers/mjsister.c
r31855r31856
2525   mjsister_state(const machine_config &mconfig, device_type type, const char *tag)
2626      : driver_device(mconfig, type, tag),
2727      m_maincpu(*this, "maincpu"),
28      m_palette(*this, "palette") { }
28      m_palette(*this, "palette"),
29      m_dac(*this, "dac") { }
2930
3031   /* video-related */
3132   bitmap_ind16 *m_tmpbitmap0;
r31855r31856
5253   /* devices */
5354   required_device<cpu_device> m_maincpu;
5455   required_device<palette_device> m_palette;
55   dac_device *m_dac;
56   required_device<dac_device> m_dac;
5657
5758   /* memory */
5859   UINT8 m_videoram0[0x8000];
5960   UINT8 m_videoram1[0x8000];
60   DECLARE_WRITE8_MEMBER(mjsister_videoram_w);
61   DECLARE_WRITE8_MEMBER(mjsister_dac_adr_s_w);
62   DECLARE_WRITE8_MEMBER(mjsister_dac_adr_e_w);
63   DECLARE_WRITE8_MEMBER(mjsister_banksel1_w);
64   DECLARE_WRITE8_MEMBER(mjsister_banksel2_w);
65   DECLARE_WRITE8_MEMBER(mjsister_input_sel1_w);
66   DECLARE_WRITE8_MEMBER(mjsister_input_sel2_w);
67   DECLARE_READ8_MEMBER(mjsister_keys_r);
61   DECLARE_WRITE8_MEMBER(videoram_w);
62   DECLARE_WRITE8_MEMBER(dac_adr_s_w);
63   DECLARE_WRITE8_MEMBER(dac_adr_e_w);
64   DECLARE_WRITE8_MEMBER(banksel1_w);
65   DECLARE_WRITE8_MEMBER(banksel2_w);
66   DECLARE_WRITE8_MEMBER(input_sel1_w);
67   DECLARE_WRITE8_MEMBER(input_sel2_w);
68   DECLARE_READ8_MEMBER(keys_r);
6869   TIMER_CALLBACK_MEMBER(dac_callback);
6970   virtual void machine_start();
7071   virtual void machine_reset();
7172   virtual void video_start();
72   UINT32 screen_update_mjsister(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
73   void mjsister_redraw();
74   void mjsister_plot0( int offset, UINT8 data );
75   void mjsister_plot1( int offset, UINT8 data );
73   UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
74   void redraw();
75   void plot0( int offset, UINT8 data );
76   void plot1( int offset, UINT8 data );
7677
7778protected:
7879   virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
r31855r31856
9495   save_item(NAME(m_videoram1));
9596}
9697
97void mjsister_state::mjsister_plot0( int offset, UINT8 data )
98void mjsister_state::plot0( int offset, UINT8 data )
9899{
99100   int x, y, c1, c2;
100101
r31855r31856
108109   m_tmpbitmap0->pix16(y, x * 2 + 1) = c2;
109110}
110111
111void mjsister_state::mjsister_plot1( int offset, UINT8 data )
112void mjsister_state::plot1( int offset, UINT8 data )
112113{
113114   int x, y, c1, c2;
114115
r31855r31856
127128   m_tmpbitmap1->pix16(y, x * 2 + 1) = c2;
128129}
129130
130WRITE8_MEMBER(mjsister_state::mjsister_videoram_w)
131WRITE8_MEMBER(mjsister_state::videoram_w)
131132{
132133   if (m_vrambank)
133134   {
134135      m_videoram1[offset] = data;
135      mjsister_plot1(offset, data);
136      plot1(offset, data);
136137   }
137138   else
138139   {
139140      m_videoram0[offset] = data;
140      mjsister_plot0(offset, data);
141      plot0(offset, data);
141142   }
142143}
143144
144UINT32 mjsister_state::screen_update_mjsister(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
145UINT32 mjsister_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
145146{
146147   int flip = m_flip_screen;
147148   int i, j;
r31855r31856
152153
153154      for (offs = 0; offs < 0x8000; offs++)
154155      {
155         mjsister_plot0(offs, m_videoram0[offs]);
156         mjsister_plot1(offs, m_videoram1[offs]);
156         plot0(offs, m_videoram0[offs]);
157         plot1(offs, m_videoram1[offs]);
157158      }
158159      m_screen_redraw = 0;
159160   }
r31855r31856
202203      m_dac_busy = 0;
203204}
204205
205WRITE8_MEMBER(mjsister_state::mjsister_dac_adr_s_w)
206WRITE8_MEMBER(mjsister_state::dac_adr_s_w)
206207{
207208   m_dac_adr_s = data;
208209}
209210
210WRITE8_MEMBER(mjsister_state::mjsister_dac_adr_e_w)
211WRITE8_MEMBER(mjsister_state::dac_adr_e_w)
211212{
212213   m_dac_adr_e = data;
213214   m_dac_adr = m_dac_adr_s << 8;
r31855r31856
218219   m_dac_busy = 1;
219220}
220221
221WRITE8_MEMBER(mjsister_state::mjsister_banksel1_w)
222WRITE8_MEMBER(mjsister_state::banksel1_w)
222223{
223224   int tmp = m_colorbank;
224225
r31855r31856
253254   membank("bank1")->set_entry(m_rombank0 * 2 + m_rombank1);
254255}
255256
256WRITE8_MEMBER(mjsister_state::mjsister_banksel2_w)
257WRITE8_MEMBER(mjsister_state::banksel2_w)
257258{
258259   switch (data)
259260   {
r31855r31856
270271   membank("bank1")->set_entry(m_rombank0 * 2 + m_rombank1);
271272}
272273
273WRITE8_MEMBER(mjsister_state::mjsister_input_sel1_w)
274WRITE8_MEMBER(mjsister_state::input_sel1_w)
274275{
275276   m_input_sel1 = data;
276277}
277278
278WRITE8_MEMBER(mjsister_state::mjsister_input_sel2_w)
279WRITE8_MEMBER(mjsister_state::input_sel2_w)
279280{
280281   m_input_sel2 = data;
281282}
282283
283READ8_MEMBER(mjsister_state::mjsister_keys_r)
284READ8_MEMBER(mjsister_state::keys_r)
284285{
285286   int p, i, ret = 0;
286287   static const char *const keynames[] = { "KEY0", "KEY1", "KEY2", "KEY3", "KEY4", "KEY5" };
r31855r31856
306307static ADDRESS_MAP_START( mjsister_map, AS_PROGRAM, 8, mjsister_state )
307308   AM_RANGE(0x0000, 0x77ff) AM_ROM
308309   AM_RANGE(0x7800, 0x7fff) AM_RAM
309   AM_RANGE(0x8000, 0xffff) AM_ROMBANK("bank1") AM_WRITE(mjsister_videoram_w)
310   AM_RANGE(0x8000, 0xffff) AM_ROMBANK("bank1") AM_WRITE(videoram_w)
310311ADDRESS_MAP_END
311312
312313static ADDRESS_MAP_START( mjsister_io_map, AS_IO, 8, mjsister_state )
r31855r31856
315316   AM_RANGE(0x10, 0x10) AM_DEVWRITE("aysnd", ay8910_device, address_w)
316317   AM_RANGE(0x11, 0x11) AM_DEVREAD("aysnd", ay8910_device, data_r)
317318   AM_RANGE(0x12, 0x12) AM_DEVWRITE("aysnd", ay8910_device, data_w)
318   AM_RANGE(0x20, 0x20) AM_READ(mjsister_keys_r)
319   AM_RANGE(0x20, 0x20) AM_READ(keys_r)
319320   AM_RANGE(0x21, 0x21) AM_READ_PORT("IN0")
320   AM_RANGE(0x30, 0x30) AM_WRITE(mjsister_banksel1_w)
321   AM_RANGE(0x31, 0x31) AM_WRITE(mjsister_banksel2_w)
322   AM_RANGE(0x32, 0x32) AM_WRITE(mjsister_input_sel1_w)
323   AM_RANGE(0x33, 0x33) AM_WRITE(mjsister_input_sel2_w)
324   AM_RANGE(0x34, 0x34) AM_WRITE(mjsister_dac_adr_s_w)
325   AM_RANGE(0x35, 0x35) AM_WRITE(mjsister_dac_adr_e_w)
321   AM_RANGE(0x30, 0x30) AM_WRITE(banksel1_w)
322   AM_RANGE(0x31, 0x31) AM_WRITE(banksel2_w)
323   AM_RANGE(0x32, 0x32) AM_WRITE(input_sel1_w)
324   AM_RANGE(0x33, 0x33) AM_WRITE(input_sel2_w)
325   AM_RANGE(0x34, 0x34) AM_WRITE(dac_adr_s_w)
326   AM_RANGE(0x35, 0x35) AM_WRITE(dac_adr_e_w)
326327ADDRESS_MAP_END
327328
328329
r31855r31856
449450 *
450451 *************************************/
451452
452void mjsister_state::mjsister_redraw()
453void mjsister_state::redraw()
453454{
454455   /* we can skip saving tmpbitmaps because we can redraw them from vram */
455456   m_screen_redraw = 1;
r31855r31856
474475   save_item(NAME(m_dac_bank));
475476   save_item(NAME(m_dac_adr_s));
476477   save_item(NAME(m_dac_adr_e));
477   machine().save().register_postload(save_prepost_delegate(FUNC(mjsister_state::mjsister_redraw), this));
478   machine().save().register_postload(save_prepost_delegate(FUNC(mjsister_state::redraw), this));
478479}
479480
480481void mjsister_state::machine_reset()
r31855r31856
511512   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
512513   MCFG_SCREEN_SIZE(256+4, 256)
513514   MCFG_SCREEN_VISIBLE_AREA(0, 255+4, 8, 247)
514   MCFG_SCREEN_UPDATE_DRIVER(mjsister_state, screen_update_mjsister)
515   MCFG_SCREEN_UPDATE_DRIVER(mjsister_state, screen_update)
515516   MCFG_SCREEN_PALETTE("palette")
516517
517518   MCFG_PALETTE_ADD_RRRRGGGGBBBB_PROMS("palette", 256)

Previous 199869 Revisions Next


© 1997-2024 The MAME Team