trunk/src/mess/machine/snescart.c
| r21739 | r21740 | |
| 795 | 795 | { |
| 796 | 796 | int st_bios = 0, slot_id = 0; |
| 797 | 797 | UINT32 offset; |
| 798 | | UINT8 *ROM = machine().root_device().memregion(image.device().tag())->base(); |
| 799 | 798 | |
| 800 | 799 | if (strcmp(image.device().tag(), ":slot_a") == 0) |
| 801 | 800 | slot_id = 0; |
| r21739 | r21740 | |
| 808 | 807 | else |
| 809 | 808 | m_cart_size = image.get_software_region_length("rom"); |
| 810 | 809 | |
| 811 | | /* Check for a header (512 bytes), and skip it if found */ |
| 810 | // Check for a header (512 bytes), and skip it if found |
| 812 | 811 | offset = snes_skip_header(image, m_cart_size); |
| 813 | 812 | |
| 813 | // Allocate rom pointer |
| 814 | m_cart[slot_id].m_rom_size = m_cart_size; |
| 815 | m_cart[slot_id].m_rom = auto_alloc_array_clear(machine(), UINT8, m_cart[0].m_rom_size); |
| 816 | |
| 814 | 817 | if (image.software_entry() == NULL) |
| 815 | 818 | { |
| 816 | 819 | image.fseek(offset, SEEK_SET); |
| 817 | | image.fread(ROM, m_cart_size - offset); |
| 820 | image.fread(m_cart[slot_id].m_rom, m_cart_size - offset); |
| 818 | 821 | } |
| 819 | 822 | else |
| 820 | | memcpy(ROM, image.get_software_region("rom") + offset, m_cart_size - offset); |
| 823 | memcpy(m_cart[slot_id].m_rom, image.get_software_region("rom") + offset, m_cart_size - offset); |
| 821 | 824 | |
| 822 | 825 | if (SNES_CART_DEBUG) mame_printf_error("size %08X\n", m_cart_size - offset); |
| 823 | 826 | |
| 824 | | /* Detect Sufami Turbo carts */ |
| 825 | | if (!memcmp(ROM, "BANDAI SFC-ADX", 14)) |
| 827 | // Setup the bank map to handle mirroring of ROM |
| 828 | rom_map_setup(m_cart[slot_id].m_rom_size); |
| 829 | |
| 830 | // Detect Sufami Turbo carts |
| 831 | if (!memcmp(m_cart[slot_id].m_rom, "BANDAI SFC-ADX", 14)) |
| 826 | 832 | { |
| 827 | 833 | m_cart[slot_id].mode = SNES_MODE_ST; |
| 828 | | if (!memcmp(ROM + 16, "SFC-ADX BACKUP", 14)) |
| 834 | if (!memcmp(m_cart[slot_id].m_rom + 16, "SFC-ADX BACKUP", 14)) |
| 829 | 835 | st_bios = 1; |
| 830 | 836 | } |
| 831 | 837 | else |
| r21739 | r21740 | |
| 842 | 848 | return IMAGE_INIT_FAIL; |
| 843 | 849 | } |
| 844 | 850 | |
| 845 | | |
| 846 | | m_cart[slot_id].m_rom_size = m_cart_size; |
| 847 | | m_cart[slot_id].m_rom = auto_alloc_array_clear(machine(), UINT8, m_cart[0].m_rom_size); |
| 848 | | memcpy(m_cart[slot_id].m_rom, ROM, m_cart[slot_id].m_rom_size - offset); |
| 849 | | rom_map_setup(m_cart[slot_id].m_rom_size); |
| 850 | | |
| 851 | 851 | m_cart[slot_id].m_nvram_size = 0x20000; |
| 852 | 852 | m_cart[slot_id].m_nvram = auto_alloc_array_clear(machine(), UINT8, m_cart[slot_id].m_nvram_size); |
| 853 | 853 | |
| 854 | 854 | sufami_load_sram(machine(), image.device().tag()); |
| 855 | 855 | |
| 856 | | m_cart[slot_id].slot_in_use = 1; // aknowledge the cart in this slot, for saving sram at exit |
| 856 | m_cart[slot_id].slot_in_use = 1; // acknowledge the cart in this slot |
| 857 | 857 | |
| 858 | 858 | return IMAGE_INIT_PASS; |
| 859 | 859 | } |