trunk/src/mess/drivers/a2600.c
| r18336 | r18337 | |
| 2 | 2 | |
| 3 | 3 | Atari VCS 2600 driver |
| 4 | 4 | |
| 5 | TODO: |
| 6 | - Move the 2 32-in-1 rom dumps into their own driver |
| 7 | - Add 128-in-1 driver |
| 8 | |
| 5 | 9 | ***************************************************************************/ |
| 6 | 10 | |
| 7 | 11 | #include "emu.h" |
| r18336 | r18337 | |
| 193 | 197 | modeFV, |
| 194 | 198 | modeDPC, |
| 195 | 199 | mode32in1, |
| 196 | | modeJVP |
| 200 | modeJVP, |
| 201 | mode8in1 |
| 197 | 202 | }; |
| 198 | 203 | |
| 199 | 204 | static const UINT16 supported_screen_heights[4] = { 262, 312, 328, 342 }; |
| r18336 | r18337 | |
| 591 | 596 | state->m_current_bank = 0; |
| 592 | 597 | |
| 593 | 598 | if (image.software_entry() == NULL) |
| 599 | { |
| 594 | 600 | image.fread(cart, state->m_cart_size); |
| 601 | } |
| 595 | 602 | else |
| 603 | { |
| 596 | 604 | memcpy(cart, image.get_software_region("rom"), state->m_cart_size); |
| 597 | 605 | |
| 606 | const char *mapper = software_part_get_feature((software_part*)image.part_entry(), "mapper"); |
| 607 | |
| 608 | if ( mapper != NULL ) |
| 609 | { |
| 610 | static const struct { const char *mapper_name; int mapper_type; } mapper_types[] = |
| 611 | { |
| 612 | { "8in1", mode8in1 }, |
| 613 | }; |
| 614 | |
| 615 | for (int i = 0; i < ARRAY_LENGTH(mapper_types) && state->m_banking_mode == 0xff; i++) |
| 616 | { |
| 617 | if (!mame_stricmp(mapper, mapper_types[i].mapper_name)) |
| 618 | { |
| 619 | state->m_banking_mode = mapper_types[i].mapper_type; |
| 620 | } |
| 621 | } |
| 622 | } |
| 623 | } |
| 624 | |
| 598 | 625 | if (!(state->m_cart_size == 0x4000 && detect_modef6(image.device().machine()))) |
| 599 | 626 | { |
| 600 | 627 | while (state->m_cart_size > 0x00800) |
| r18336 | r18337 | |
| 616 | 643 | |
| 617 | 644 | void a2600_state::modeF8_switch(UINT16 offset, UINT8 data) |
| 618 | 645 | { |
| 619 | | m_bank_base[1] = m_cart + 0x1000 * offset; |
| 646 | m_bank_base[1] = m_cart + 0x2000 * m_current_reset_bank_counter + 0x1000 * offset; |
| 620 | 647 | membank("bank1")->set_base(m_bank_base[1]); |
| 621 | 648 | } |
| 622 | 649 | |
| r18336 | r18337 | |
| 1879 | 1906 | install_banks(1, 0x0000); |
| 1880 | 1907 | break; |
| 1881 | 1908 | |
| 1909 | case mode8in1: |
| 1910 | m_current_reset_bank_counter = m_current_reset_bank_counter & 0x07; |
| 1911 | if ( m_current_reset_bank_counter == 7 ) |
| 1912 | { |
| 1913 | /* Special case for Yar's Revenge */ |
| 1914 | install_banks(1, 0x2000 * m_current_reset_bank_counter + 0x0000); |
| 1915 | } |
| 1916 | else |
| 1917 | { |
| 1918 | install_banks(1, 0x2000 * m_current_reset_bank_counter + 0x1000); |
| 1919 | } |
| 1920 | break; |
| 1921 | |
| 1882 | 1922 | case modeF8: |
| 1923 | m_current_reset_bank_counter = 0; |
| 1883 | 1924 | if (!memcmp(&CART_MEMBER[0x1ffc],snowwhite,sizeof(snowwhite))) |
| 1884 | 1925 | { |
| 1885 | 1926 | install_banks(1, 0x0000); |
| r18336 | r18337 | |
| 1976 | 2017 | switch (m_banking_mode) |
| 1977 | 2018 | { |
| 1978 | 2019 | case modeF8: |
| 2020 | case mode8in1: |
| 1979 | 2021 | space.install_write_handler(0x1ff8, 0x1ff9, write8_delegate(FUNC(a2600_state::modeF8_switch_w),this)); |
| 1980 | 2022 | space.install_read_handler(0x1ff8, 0x1ff9, read8_delegate(FUNC(a2600_state::modeF8_switch_r),this)); |
| 1981 | 2023 | break; |
trunk/hash/a2600.xml
| r18336 | r18337 | |
| 247 | 247 | </part> |
| 248 | 248 | </software> |
| 249 | 249 | |
| 250 | | <software name="8in1" supported="no"> |
| 250 | <!-- Known 'feature': Centipede doesn't work --> |
| 251 | <software name="8in1"> |
| 251 | 252 | <description>8 in 1 - Asteroids + Centipede + BattleZone + SwordQuest - EarthWorld + SwordQuest - FireWorld + RealSports Soccer + RealSports Tennis + Yars' Revenge (Prototype 19920116)</description> |
| 252 | 253 | <year>1988</year> |
| 253 | 254 | <publisher>Atari</publisher> |
| 254 | 255 | <info name="serial" value="CX26193" /> |
| 255 | 256 | <part name="cart" interface="a2600_cart"> |
| 257 | <feature name="mapper" value="8in1" /> |
| 256 | 258 | <dataarea name="rom" size="65536"> |
| 257 | 259 | <rom name="8 in 1 (prototype).bin" size="65536" crc="5ddf79f5" sha1="c066942446c3fc7075ee8430a381d5da4adaec41" offset="0" /> |
| 258 | 260 | </dataarea> |
| r18336 | r18337 | |
| 16938 | 16940 | </dataarea> |
| 16939 | 16941 | </part> |
| 16940 | 16942 | </software> |
| 16941 | | </softwarelist> |
| | No newline at end of file |
| 16943 | </softwarelist> |