Previous 199869 Revisions Next

r32274 Monday 22nd September, 2014 at 07:58:23 UTC by Fabio Priuli
(MESS) advision.c: cleaned up the driver and added support for save states. [Fabio Priuli]
[src/mess/drivers]advision.c
[src/mess/includes]advision.h
[src/mess/machine]advision.c
[src/mess/video]advision.c

trunk/src/mess/drivers/advision.c
r32273r32274
114114/* Game Driver */
115115
116116/*    YEAR  NAME        PARENT  COMPAT  MACHINE   INPUT     INIT        COMPANY                 FULLNAME            FLAGS */
117CONS( 1982, advision,   0,      0,      advision, advision, driver_device,  0,          "Entex Industries Inc", "Adventure Vision", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
117CONS( 1982, advision,   0,      0,      advision, advision, driver_device,  0,          "Entex Industries Inc", "Adventure Vision", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
trunk/src/mess/machine/advision.c
r32273r32274
3131   m_cart_rom = memregion(region_tag.cpy(m_cart->tag()).cat(GENERIC_ROM_REGION_TAG));
3232
3333   /* configure EA banking */
34   membank("bank1")->configure_entry(0, memregion(I8048_TAG)->base());
35   membank("bank1")->configure_entry(1, m_cart_rom->base());
34   m_bank1->configure_entry(0, memregion(I8048_TAG)->base());
35   m_bank1->configure_entry(1, m_cart_rom->base());
3636   m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0x0000, 0x03ff, "bank1");
37   membank("bank1")->set_entry(0);
37   m_bank1->set_entry(0);
3838
3939   /* allocate external RAM */
40   m_ext_ram = auto_alloc_array(machine(), UINT8, 0x400);
40   m_ext_ram.resize(0x400);
41   save_item(NAME(m_ext_ram));
42
43   save_item(NAME(m_ea_bank));
44   save_item(NAME(m_rambank));
45   save_item(NAME(m_frame_count));
46   save_item(NAME(m_frame_start));
47   save_item(NAME(m_video_enable));
48   save_item(NAME(m_video_bank));
49   save_item(NAME(m_led_latch));
50   save_item(NAME(m_sound_cmd));
51   save_item(NAME(m_sound_d));
52   save_item(NAME(m_sound_g));
4153}
4254
4355void advision_state::machine_reset()
4456{
57   m_ea_bank = 0;
58   m_rambank = 0x300;
59   m_frame_start = 0;
60   m_video_enable = 0;
61   m_sound_cmd = 0;
62
4563   /* enable internal ROM */
4664   m_maincpu->set_input_line(MCS48_INPUT_EA, CLEAR_LINE);
47   membank("bank1")->set_entry(0);
65   m_bank1->set_entry(m_ea_bank);
4866
4967   /* reset sound CPU */
5068   m_soundcpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
51
52   m_rambank = 0x300;
53   m_frame_start = 0;
54   m_video_enable = 0;
55   m_sound_cmd = 0;
5669}
5770
5871/* Bank Switching */
5972
6073WRITE8_MEMBER( advision_state::bankswitch_w )
6174{
62   int ea = BIT(data, 2);
75   m_ea_bank = BIT(data, 2);
76   m_rambank = (data & 0x03) << 8;
6377
64   m_maincpu->set_input_line(MCS48_INPUT_EA, ea ? ASSERT_LINE : CLEAR_LINE);
65
66   membank("bank1")->set_entry(ea);
67
68   m_rambank = (data & 0x03) << 8;
78   m_maincpu->set_input_line(MCS48_INPUT_EA, m_ea_bank ? ASSERT_LINE : CLEAR_LINE);
79   m_bank1->set_entry(m_ea_bank);
6980}
7081
7182/* External RAM */
r32273r32274
166177READ8_MEMBER( advision_state::controller_r )
167178{
168179   // Get joystick switches
169   UINT8 in = ioport("joystick")->read();
180   UINT8 in = m_joy->read();
170181   UINT8 data = in | 0x0f;
171182
172183   // Get buttons
trunk/src/mess/includes/advision.h
r32273r32274
2424         m_soundcpu(*this, COP411_TAG),
2525         m_dac(*this, "dac"),
2626         m_cart(*this, "cartslot"),
27         m_bank1(*this, "bank1"),
28         m_joy(*this, "joystick"),
2729         m_palette(*this, "palette")
2830   { }
2931
r32273r32274
3133   required_device<cpu_device> m_soundcpu;
3234   required_device<dac_device> m_dac;
3335   required_device<generic_slot_device> m_cart;
36   required_memory_bank m_bank1;
37   required_ioport m_joy;
3438   required_device<palette_device> m_palette;
3539
3640   virtual void machine_start();
r32273r32274
5660
5761   memory_region *m_cart_rom;
5862
63   int m_ea_bank;
64
5965   /* external RAM state */
60   UINT8 *m_ext_ram;
66   dynamic_buffer m_ext_ram;
6167   int m_rambank;
6268
6369   /* video state */
r32273r32274
6773   int m_video_bank;
6874   int m_video_hpos;
6975   UINT8 m_led_latch[8];
70   UINT8 *m_display;
76   dynamic_buffer m_display;
7177
7278   /* sound state */
7379   int m_sound_cmd;
trunk/src/mess/video/advision.c
r32273r32274
2121void advision_state::video_start()
2222{
2323   m_video_hpos = 0;
24   m_display = auto_alloc_array(machine(), UINT8, 8 * 8 * 256);
25   memset(m_display, 0, 8 * 8 * 256);
24   m_display.resize_and_clear(8 * 8 * 256);
25   save_item(NAME(m_display));
26   save_item(NAME(m_video_hpos));
2627}
2728
2829/***************************************************************************
r32273r32274
3334
3435PALETTE_INIT_MEMBER(advision_state, advision)
3536{
36   int i;
37
38   for( i = 0; i < 8; i++ )
37   for (int i = 0; i < 8; i++)
3938   {
4039      /* 8 shades of RED */
4140      m_palette->set_pen_color(i, i * 0x22, 0x00, 0x00);
r32273r32274
5958void advision_state::vh_update(int x)
6059{
6160   UINT8 *dst = &m_display[x];
62   int y;
6361
64   for( y = 0; y < 8; y++ )
62   for (int y = 0; y < 8; y++)
6563   {
66      UINT8 data = m_led_latch[7-y];
64      UINT8 data = m_led_latch[7 - y];
6765
68      if( (data & 0x80) == 0 ) dst[0 * 256] = 8;
69      if( (data & 0x40) == 0 ) dst[1 * 256] = 8;
70      if( (data & 0x20) == 0 ) dst[2 * 256] = 8;
71      if( (data & 0x10) == 0 ) dst[3 * 256] = 8;
72      if( (data & 0x08) == 0 ) dst[4 * 256] = 8;
73      if( (data & 0x04) == 0 ) dst[5 * 256] = 8;
74      if( (data & 0x02) == 0 ) dst[6 * 256] = 8;
75      if( (data & 0x01) == 0 ) dst[7 * 256] = 8;
66      for (int i = 0; i < 8; i++)
67      {
68         if (!BIT(data, 7 - i))
69            dst[i * 256] = 8;
70      }
7671
77      m_led_latch[7-y] = 0xff;
78
72      m_led_latch[7 - y] = 0xff;
7973      dst += 8 * 256;
8074   }
8175}
r32273r32274
8983
9084UINT32 advision_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
9185{
92   int x, y;
93
94   if( (m_frame_count++ % 4) == 0 )
86   if ((m_frame_count++ % 4) == 0)
9587   {
9688      m_frame_start = 1;
9789      m_video_hpos = 0;
9890   }
9991
100   for (x = 0; x < 150; x++)
92   for (int x = 0; x < 150; x++)
10193   {
10294      UINT8 *led = &m_display[x];
10395
104      for( y = 0; y < 128; y+=2 )
96      for (int y = 0; y < 128; y+=2)
10597      {
106         if( *led > 0 )
98         if (*led > 0)
10799            bitmap.pix16(30 + y, 85 + x) = --(*led);
108100         else
109101            bitmap.pix16(30 + y, 85 + x) = 0;

Previous 199869 Revisions Next


© 1997-2024 The MAME Team