trunk/src/mess/machine/gb.c
| r18424 | r18425 | |
| 4 | 4 | |
| 5 | 5 | Machine file to handle emulation of the Nintendo Game Boy. |
| 6 | 6 | |
| 7 | TODO: |
| 8 | - YongYong mapper: |
| 9 | - During start there are 2 writes to 5000 and 5003, it is still unknown what these do. |
| 10 | |
| 7 | 11 | Changes: |
| 8 | 12 | |
| 9 | 13 | 13/2/2002 AK - MBC2 and MBC3 support and added NVRAM support. |
| r18424 | r18425 | |
| 58 | 62 | MBC_MBC7, /* ?? ROM, ?? RAM */ |
| 59 | 63 | MBC_WISDOM, /* ?? ROM, ?? RAM - Wisdom tree controller */ |
| 60 | 64 | MBC_MBC1_KOR, /* 1MB ROM, ?? RAM - Korean MBC1 variant */ |
| 65 | MBC_YONGYONG, /* ?? ROM, ?? RAM - Appears in Sonic 3D Blast 5 pirate */ |
| 61 | 66 | MBC_MEGADUCK, /* MEGADUCK style banking */ |
| 62 | 67 | MBC_UNKNOWN, /* Unknown mapper */ |
| 63 | 68 | }; |
| r18424 | r18425 | |
| 231 | 236 | space.install_write_handler( 0x4000, 0x5fff, write8_delegate(FUNC(gb_state::gb_ram_bank_select_mbc1_kor),state) ); |
| 232 | 237 | space.install_write_handler( 0x6000, 0x7fff, write8_delegate(FUNC(gb_state::gb_mem_mode_select_mbc1_kor),state) ); |
| 233 | 238 | break; |
| 239 | case MBC_YONGYONG: |
| 240 | space.install_write_handler( 0x2000, 0x2000, write8_delegate(FUNC(gb_state::gb_rom_bank_yongyong_2000),state) ); |
| 241 | //space.install_write_handler( 0x5000, 0x5003, write8_delegate(FUNC(gb_state::gb_rom_back_yongyong_5000),state) ); |
| 242 | break; |
| 234 | 243 | |
| 235 | 244 | case MBC_MEGADUCK: |
| 236 | 245 | space.install_write_handler( 0x0001, 0x0001, write8_delegate(FUNC(gb_state::megaduck_rom_bank_select_type1),state) ); |
| r18424 | r18425 | |
| 773 | 782 | gb_set_mbc1_kor_banks(machine()); |
| 774 | 783 | } |
| 775 | 784 | |
| 785 | WRITE8_MEMBER(gb_state::gb_rom_bank_yongyong_2000) |
| 786 | { |
| 787 | m_ROMBank = data; |
| 788 | gb_rom16_4000( machine(), m_ROMMap[m_ROMBank] ); |
| 789 | } |
| 790 | |
| 776 | 791 | WRITE8_MEMBER(gb_state::gb_io_w) |
| 777 | 792 | { |
| 778 | 793 | static const UINT8 timer_shifts[4] = {10, 4, 6, 8}; |
| r18424 | r18425 | |
| 1648 | 1663 | { "MBC7", MBC_MBC7 }, |
| 1649 | 1664 | { "WISDOM", MBC_WISDOM }, |
| 1650 | 1665 | { "MBC1_KOR", MBC_MBC1_KOR }, |
| 1666 | { "YONGYONG", MBC_YONGYONG }, |
| 1651 | 1667 | }; |
| 1652 | 1668 | |
| 1653 | 1669 | for (int i = 0; i < ARRAY_LENGTH(mapper_types) && state->m_MBCType == MBC_UNKNOWN; i++) |
| r18424 | r18425 | |
| 1739 | 1755 | case 0x20: state->m_MBCType = MBC_MBC6; state->m_CartType = SRAM; break; |
| 1740 | 1756 | case 0x22: state->m_MBCType = MBC_MBC7; state->m_CartType = SRAM | BATTERY; break; |
| 1741 | 1757 | case 0xBE: state->m_MBCType = MBC_NONE; state->m_CartType = 0; break; /* used in Flash2Advance GB Bridge boot program */ |
| 1758 | case 0xEA: state->m_MBCType = MBC_YONGYONG; state->m_CartType = 0; break; /* Found in Sonic 3D Blast 5 pirate */ |
| 1742 | 1759 | case 0xFD: state->m_MBCType = MBC_TAMA5; state->m_CartType = 0 /*RTC | BATTERY?*/; break; |
| 1743 | 1760 | case 0xFE: state->m_MBCType = MBC_HUC3; state->m_CartType = 0; break; |
| 1744 | 1761 | case 0xFF: state->m_MBCType = MBC_HUC1; state->m_CartType = 0; break; |
| 1745 | | default: state->m_MBCType = MBC_UNKNOWN; state->m_CartType = UNKNOWN; break; |
| 1746 | 1762 | } |
| 1747 | 1763 | |
| 1748 | 1764 | /* Check whether we're dealing with a (possible) Wisdom Tree game here */ |