src/mess/drivers/gba.c
| r9846 | r9847 | |
| 1891 | 1891 | state->gba_oam[offset] = COMBINE_DATA32_16(state->gba_oam[offset], data, mem_mask); |
| 1892 | 1892 | } |
| 1893 | 1893 | |
| 1894 | static READ32_HANDLER(gba_bios_r) |
| 1895 | { |
| 1896 | running_machine *machine = space->machine; |
| 1897 | gba_state *state = machine->driver_data<gba_state>(); |
| 1898 | UINT32 *rom = (UINT32 *)memory_region(space->machine, "maincpu"); |
| 1899 | if (state->bios_protected != 0) |
| 1900 | { |
| 1901 | offset = (state->bios_last_address + 8) / 4; |
| 1902 | } |
| 1903 | return rom[offset&0x3fff]; |
| 1904 | } |
| 1905 | |
| 1894 | 1906 | static ADDRESS_MAP_START( gbadvance_map, ADDRESS_SPACE_PROGRAM, 32 ) |
| 1895 | | AM_RANGE(0x00000000, 0x00003fff) AM_ROMBANK("bank1") |
| 1907 | AM_RANGE(0x00000000, 0x00003fff) AM_ROM AM_READ(gba_bios_r) |
| 1896 | 1908 | AM_RANGE(0x02000000, 0x0203ffff) AM_RAM AM_MIRROR(0xfc0000) |
| 1897 | 1909 | AM_RANGE(0x03000000, 0x03007fff) AM_RAM AM_MIRROR(0xff8000) |
| 1898 | 1910 | AM_RANGE(0x04000000, 0x040003ff) AM_READWRITE( gba_io_r, gba_io_w ) |
| r9846 | r9847 | |
| 2091 | 2103 | } |
| 2092 | 2104 | |
| 2093 | 2105 | ROM_START( gba ) |
| 2094 | | ROM_REGION( 0x8000, "bios", ROMREGION_ERASE00 ) |
| 2106 | ROM_REGION( 0x4000, "maincpu", 0 ) |
| 2095 | 2107 | ROM_LOAD( "gba.bin", 0x000000, 0x004000, CRC(81977335) ) |
| 2096 | 2108 | |
| 2097 | 2109 | /* cartridge region - 32 MBytes (128 Mbit) */ |
| r9846 | r9847 | |
| 2471 | 2483 | and some games verify that as a protection check (notably Metroid Fusion) */ |
| 2472 | 2484 | DIRECT_UPDATE_HANDLER( gba_direct ) |
| 2473 | 2485 | { |
| 2486 | gba_state *state = machine->driver_data<gba_state>(); |
| 2474 | 2487 | if (address > 0x4000) |
| 2475 | 2488 | { |
| 2476 | | memory_set_bankptr(machine, "bank1", memory_region(machine, "bios")+0x4000); |
| 2489 | state->bios_protected = 1; |
| 2477 | 2490 | } |
| 2478 | 2491 | else |
| 2479 | 2492 | { |
| 2480 | | memory_set_bankptr(machine, "bank1", memory_region(machine, "bios")); |
| 2493 | state->bios_protected = 0; |
| 2494 | state->bios_last_address = address; |
| 2481 | 2495 | } |
| 2482 | | |
| 2483 | 2496 | return address; |
| 2484 | 2497 | } |
| 2485 | 2498 | |