trunk/src/mess/drivers/advision.c
| r32273 | r32274 | |
| 114 | 114 | /* Game Driver */ |
| 115 | 115 | |
| 116 | 116 | /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */ |
| 117 | | CONS( 1982, advision, 0, 0, advision, advision, driver_device, 0, "Entex Industries Inc", "Adventure Vision", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 117 | CONS( 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
| r32273 | r32274 | |
| 31 | 31 | m_cart_rom = memregion(region_tag.cpy(m_cart->tag()).cat(GENERIC_ROM_REGION_TAG)); |
| 32 | 32 | |
| 33 | 33 | /* 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()); |
| 36 | 36 | m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0x0000, 0x03ff, "bank1"); |
| 37 | | membank("bank1")->set_entry(0); |
| 37 | m_bank1->set_entry(0); |
| 38 | 38 | |
| 39 | 39 | /* 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)); |
| 41 | 53 | } |
| 42 | 54 | |
| 43 | 55 | void advision_state::machine_reset() |
| 44 | 56 | { |
| 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 | |
| 45 | 63 | /* enable internal ROM */ |
| 46 | 64 | m_maincpu->set_input_line(MCS48_INPUT_EA, CLEAR_LINE); |
| 47 | | membank("bank1")->set_entry(0); |
| 65 | m_bank1->set_entry(m_ea_bank); |
| 48 | 66 | |
| 49 | 67 | /* reset sound CPU */ |
| 50 | 68 | 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; |
| 56 | 69 | } |
| 57 | 70 | |
| 58 | 71 | /* Bank Switching */ |
| 59 | 72 | |
| 60 | 73 | WRITE8_MEMBER( advision_state::bankswitch_w ) |
| 61 | 74 | { |
| 62 | | int ea = BIT(data, 2); |
| 75 | m_ea_bank = BIT(data, 2); |
| 76 | m_rambank = (data & 0x03) << 8; |
| 63 | 77 | |
| 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); |
| 69 | 80 | } |
| 70 | 81 | |
| 71 | 82 | /* External RAM */ |
| r32273 | r32274 | |
| 166 | 177 | READ8_MEMBER( advision_state::controller_r ) |
| 167 | 178 | { |
| 168 | 179 | // Get joystick switches |
| 169 | | UINT8 in = ioport("joystick")->read(); |
| 180 | UINT8 in = m_joy->read(); |
| 170 | 181 | UINT8 data = in | 0x0f; |
| 171 | 182 | |
| 172 | 183 | // Get buttons |
trunk/src/mess/includes/advision.h
| r32273 | r32274 | |
| 24 | 24 | m_soundcpu(*this, COP411_TAG), |
| 25 | 25 | m_dac(*this, "dac"), |
| 26 | 26 | m_cart(*this, "cartslot"), |
| 27 | m_bank1(*this, "bank1"), |
| 28 | m_joy(*this, "joystick"), |
| 27 | 29 | m_palette(*this, "palette") |
| 28 | 30 | { } |
| 29 | 31 | |
| r32273 | r32274 | |
| 31 | 33 | required_device<cpu_device> m_soundcpu; |
| 32 | 34 | required_device<dac_device> m_dac; |
| 33 | 35 | required_device<generic_slot_device> m_cart; |
| 36 | required_memory_bank m_bank1; |
| 37 | required_ioport m_joy; |
| 34 | 38 | required_device<palette_device> m_palette; |
| 35 | 39 | |
| 36 | 40 | virtual void machine_start(); |
| r32273 | r32274 | |
| 56 | 60 | |
| 57 | 61 | memory_region *m_cart_rom; |
| 58 | 62 | |
| 63 | int m_ea_bank; |
| 64 | |
| 59 | 65 | /* external RAM state */ |
| 60 | | UINT8 *m_ext_ram; |
| 66 | dynamic_buffer m_ext_ram; |
| 61 | 67 | int m_rambank; |
| 62 | 68 | |
| 63 | 69 | /* video state */ |
| r32273 | r32274 | |
| 67 | 73 | int m_video_bank; |
| 68 | 74 | int m_video_hpos; |
| 69 | 75 | UINT8 m_led_latch[8]; |
| 70 | | UINT8 *m_display; |
| 76 | dynamic_buffer m_display; |
| 71 | 77 | |
| 72 | 78 | /* sound state */ |
| 73 | 79 | int m_sound_cmd; |
trunk/src/mess/video/advision.c
| r32273 | r32274 | |
| 21 | 21 | void advision_state::video_start() |
| 22 | 22 | { |
| 23 | 23 | 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)); |
| 26 | 27 | } |
| 27 | 28 | |
| 28 | 29 | /*************************************************************************** |
| r32273 | r32274 | |
| 33 | 34 | |
| 34 | 35 | PALETTE_INIT_MEMBER(advision_state, advision) |
| 35 | 36 | { |
| 36 | | int i; |
| 37 | | |
| 38 | | for( i = 0; i < 8; i++ ) |
| 37 | for (int i = 0; i < 8; i++) |
| 39 | 38 | { |
| 40 | 39 | /* 8 shades of RED */ |
| 41 | 40 | m_palette->set_pen_color(i, i * 0x22, 0x00, 0x00); |
| r32273 | r32274 | |
| 59 | 58 | void advision_state::vh_update(int x) |
| 60 | 59 | { |
| 61 | 60 | UINT8 *dst = &m_display[x]; |
| 62 | | int y; |
| 63 | 61 | |
| 64 | | for( y = 0; y < 8; y++ ) |
| 62 | for (int y = 0; y < 8; y++) |
| 65 | 63 | { |
| 66 | | UINT8 data = m_led_latch[7-y]; |
| 64 | UINT8 data = m_led_latch[7 - y]; |
| 67 | 65 | |
| 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 | } |
| 76 | 71 | |
| 77 | | m_led_latch[7-y] = 0xff; |
| 78 | | |
| 72 | m_led_latch[7 - y] = 0xff; |
| 79 | 73 | dst += 8 * 256; |
| 80 | 74 | } |
| 81 | 75 | } |
| r32273 | r32274 | |
| 89 | 83 | |
| 90 | 84 | UINT32 advision_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 91 | 85 | { |
| 92 | | int x, y; |
| 93 | | |
| 94 | | if( (m_frame_count++ % 4) == 0 ) |
| 86 | if ((m_frame_count++ % 4) == 0) |
| 95 | 87 | { |
| 96 | 88 | m_frame_start = 1; |
| 97 | 89 | m_video_hpos = 0; |
| 98 | 90 | } |
| 99 | 91 | |
| 100 | | for (x = 0; x < 150; x++) |
| 92 | for (int x = 0; x < 150; x++) |
| 101 | 93 | { |
| 102 | 94 | UINT8 *led = &m_display[x]; |
| 103 | 95 | |
| 104 | | for( y = 0; y < 128; y+=2 ) |
| 96 | for (int y = 0; y < 128; y+=2) |
| 105 | 97 | { |
| 106 | | if( *led > 0 ) |
| 98 | if (*led > 0) |
| 107 | 99 | bitmap.pix16(30 + y, 85 + x) = --(*led); |
| 108 | 100 | else |
| 109 | 101 | bitmap.pix16(30 + y, 85 + x) = 0; |