trunk/src/mame/drivers/asteroid.c
| r242629 | r242630 | |
| 237 | 237 | static ADDRESS_MAP_START( asteroid_map, AS_PROGRAM, 8, asteroid_state ) |
| 238 | 238 | ADDRESS_MAP_GLOBAL_MASK(0x7fff) |
| 239 | 239 | AM_RANGE(0x0000, 0x01ff) AM_RAM |
| 240 | | AM_RANGE(0x0200, 0x02ff) AM_RAMBANK("bank1") AM_SHARE("ram1") |
| 241 | | AM_RANGE(0x0300, 0x03ff) AM_RAMBANK("bank2") AM_SHARE("ram2") |
| 240 | AM_RANGE(0x0200, 0x02ff) AM_RAMBANK("ram1") AM_SHARE("ram1") |
| 241 | AM_RANGE(0x0300, 0x03ff) AM_RAMBANK("ram2") AM_SHARE("ram2") |
| 242 | 242 | AM_RANGE(0x2000, 0x2007) AM_READ(asteroid_IN0_r) /* IN0 */ |
| 243 | 243 | AM_RANGE(0x2400, 0x2407) AM_READ(asteroid_IN1_r) /* IN1 */ |
| 244 | 244 | AM_RANGE(0x2800, 0x2803) AM_READ(asteroid_DSW1_r) /* DSW1 */ |
| r242629 | r242630 | |
| 258 | 258 | static ADDRESS_MAP_START( astdelux_map, AS_PROGRAM, 8, asteroid_state ) |
| 259 | 259 | ADDRESS_MAP_GLOBAL_MASK(0x7fff) |
| 260 | 260 | AM_RANGE(0x0000, 0x01ff) AM_RAM |
| 261 | | AM_RANGE(0x0200, 0x02ff) AM_RAMBANK("bank1") AM_SHARE("ram1") |
| 262 | | AM_RANGE(0x0300, 0x03ff) AM_RAMBANK("bank2") AM_SHARE("ram2") |
| 261 | AM_RANGE(0x0200, 0x02ff) AM_RAMBANK("ram1") AM_SHARE("ram1") |
| 262 | AM_RANGE(0x0300, 0x03ff) AM_RAMBANK("ram2") AM_SHARE("ram2") |
| 263 | 263 | AM_RANGE(0x2000, 0x2007) AM_READ(asteroid_IN0_r) /* IN0 */ |
| 264 | 264 | AM_RANGE(0x2400, 0x2407) AM_READ(asteroid_IN1_r) /* IN1 */ |
| 265 | 265 | AM_RANGE(0x2800, 0x2803) AM_READ(asteroid_DSW1_r) /* DSW1 */ |
| r242629 | r242630 | |
| 699 | 699 | MCFG_CPU_PROGRAM_MAP(llander_map) |
| 700 | 700 | MCFG_CPU_PERIODIC_INT_DRIVER(asteroid_state, llander_interrupt, (double)MASTER_CLOCK/4096/12) |
| 701 | 701 | |
| 702 | | MCFG_MACHINE_RESET_OVERRIDE(asteroid_state, llander) |
| 703 | | |
| 704 | 702 | MCFG_SCREEN_MODIFY("screen") |
| 705 | 703 | MCFG_SCREEN_REFRESH_RATE(CLOCK_3KHZ/12/6) |
| 706 | 704 | MCFG_SCREEN_VISIBLE_AREA(522, 1566, 270, 1070) |
| r242629 | r242630 | |
| 1013 | 1011 | m_maincpu->space(AS_PROGRAM).install_read_handler(0x2000, 0x2007, read8_delegate(FUNC(asteroid_state::asterock_IN0_r),this)); |
| 1014 | 1012 | } |
| 1015 | 1013 | |
| 1016 | | DRIVER_INIT_MEMBER(asteroid_state,astdelux) |
| 1017 | | { |
| 1018 | | save_item(NAME(m_astdelux_bankswitch)); |
| 1019 | | machine().save().register_postload(save_prepost_delegate(FUNC(asteroid_state::astdelux_bankswitch_restore), this)); |
| 1020 | | } |
| 1021 | | |
| 1022 | 1014 | /************************************* |
| 1023 | 1015 | * |
| 1024 | 1016 | * Game drivers |
| r242629 | r242630 | |
| 1036 | 1028 | GAME( 1979, meteorho, asteroid, asteroid, asteroid, driver_device, 0, ROT0, "bootleg (Hoei)", "Meteor (bootleg of Asteroids)", GAME_SUPPORTS_SAVE ) |
| 1037 | 1029 | GAME( 1979, hyperspc, asteroid, asteroid, asteroid, driver_device, 0, ROT0, "bootleg (Rumiano)", "Hyperspace (bootleg of Asteroids)", GAME_SUPPORTS_SAVE ) |
| 1038 | 1030 | |
| 1039 | | GAMEL(1980, astdelux, 0, astdelux, astdelux, asteroid_state, astdelux, ROT0, "Atari", "Asteroids Deluxe (rev 3)", GAME_SUPPORTS_SAVE, layout_astdelux ) |
| 1040 | | GAMEL(1980, astdelux2, astdelux, astdelux, astdelux, asteroid_state, astdelux, ROT0, "Atari", "Asteroids Deluxe (rev 2)", GAME_SUPPORTS_SAVE, layout_astdelux ) |
| 1041 | | GAMEL(1980, astdelux1, astdelux, astdelux, astdelux, asteroid_state, astdelux, ROT0, "Atari", "Asteroids Deluxe (rev 1)", GAME_SUPPORTS_SAVE, layout_astdelux ) |
| 1031 | GAMEL(1980, astdelux, 0, astdelux, astdelux, driver_device, 0, ROT0, "Atari", "Asteroids Deluxe (rev 3)", GAME_SUPPORTS_SAVE, layout_astdelux ) |
| 1032 | GAMEL(1980, astdelux2, astdelux, astdelux, astdelux, driver_device, 0, ROT0, "Atari", "Asteroids Deluxe (rev 2)", GAME_SUPPORTS_SAVE, layout_astdelux ) |
| 1033 | GAMEL(1980, astdelux1, astdelux, astdelux, astdelux, driver_device, 0, ROT0, "Atari", "Asteroids Deluxe (rev 1)", GAME_SUPPORTS_SAVE, layout_astdelux ) |
| 1042 | 1034 | |
| 1043 | 1035 | GAME( 1979, llander, 0, llander, llander, driver_device, 0, ROT0, "Atari", "Lunar Lander (rev 2)", GAME_SUPPORTS_SAVE ) |
| 1044 | 1036 | GAME( 1979, llander1, llander, llander, llander1, driver_device, 0, ROT0, "Atari", "Lunar Lander (rev 1)", GAME_SUPPORTS_SAVE ) |
trunk/src/mame/machine/asteroid.c
| r242629 | r242630 | |
| 94 | 94 | |
| 95 | 95 | WRITE8_MEMBER(asteroid_state::asteroid_bank_switch_w) |
| 96 | 96 | { |
| 97 | | if (data & 4) |
| 98 | | { |
| 99 | | membank("bank1")->set_base(m_ram2); |
| 100 | | membank("bank2")->set_base(m_ram1); |
| 101 | | } |
| 102 | | else |
| 103 | | { |
| 104 | | membank("bank1")->set_base(m_ram1); |
| 105 | | membank("bank2")->set_base(m_ram2); |
| 106 | | } |
| 97 | int bank = BIT(data, 2); |
| 98 | m_ram1->set_entry(bank); |
| 99 | m_ram2->set_entry(bank); |
| 107 | 100 | |
| 108 | 101 | set_led_status (machine(), 0, ~data & 0x02); |
| 109 | 102 | set_led_status (machine(), 1, ~data & 0x01); |
| r242629 | r242630 | |
| 112 | 105 | |
| 113 | 106 | WRITE8_MEMBER(asteroid_state::astdelux_bank_switch_w) |
| 114 | 107 | { |
| 115 | | m_astdelux_bankswitch = data; |
| 116 | | astdelux_bankswitch_restore(); |
| 108 | int bank = BIT(data, 7); |
| 109 | m_ram1->set_entry(bank); |
| 110 | m_ram2->set_entry(bank); |
| 117 | 111 | } |
| 118 | 112 | |
| 119 | | void asteroid_state::astdelux_bankswitch_restore() |
| 120 | | { |
| 121 | | if (m_astdelux_bankswitch & 0x80) |
| 122 | | { |
| 123 | | membank("bank1")->set_base(m_ram2); |
| 124 | | membank("bank2")->set_base(m_ram1); |
| 125 | | } |
| 126 | | else |
| 127 | | { |
| 128 | | membank("bank1")->set_base(m_ram1); |
| 129 | | membank("bank2")->set_base(m_ram2); |
| 130 | | } |
| 131 | | } |
| 132 | | |
| 133 | 113 | WRITE8_MEMBER(asteroid_state::astdelux_led_w) |
| 134 | 114 | { |
| 135 | 115 | set_led_status(machine(), offset, (data & 0x80) ? 0 : 1); |
| 136 | 116 | } |
| 137 | 117 | |
| 138 | | void asteroid_state::machine_reset() |
| 118 | void asteroid_state::machine_start() |
| 139 | 119 | { |
| 140 | | asteroid_bank_switch_w(m_maincpu->space(AS_PROGRAM), 0, 0); |
| 141 | | m_dvg->reset_w(m_maincpu->space(AS_PROGRAM), 0, 0); |
| 120 | /* configure RAM banks if present (not on llander) */ |
| 121 | if (m_ram1.target() != NULL) |
| 122 | { |
| 123 | UINT8 *ram1 = reinterpret_cast<UINT8 *>(memshare("ram1")->ptr()); |
| 124 | UINT8 *ram2 = reinterpret_cast<UINT8 *>(memshare("ram2")->ptr()); |
| 125 | |
| 126 | /* swapped */ |
| 127 | m_ram1->configure_entry(1, ram2); |
| 128 | m_ram2->configure_entry(1, ram1); |
| 129 | /* normal */ |
| 130 | m_ram1->configure_entry(0, ram1); |
| 131 | m_ram2->configure_entry(0, ram2); |
| 132 | } |
| 142 | 133 | } |
| 143 | 134 | |
| 144 | | MACHINE_RESET_MEMBER(asteroid_state, llander) |
| 135 | void asteroid_state::machine_reset() |
| 145 | 136 | { |
| 146 | 137 | m_dvg->reset_w(m_maincpu->space(AS_PROGRAM), 0, 0); |
| 138 | |
| 139 | /* reset RAM banks if present */ |
| 140 | if (m_ram1.target() != NULL) |
| 141 | { |
| 142 | m_ram1->set_entry(0); |
| 143 | m_ram2->set_entry(0); |
| 144 | } |
| 147 | 145 | } |