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> |