diff --git a/Assets/dll/MSXHawk.dll b/Assets/dll/MSXHawk.dll index 1cf940095b..91d89b2c5e 100644 Binary files a/Assets/dll/MSXHawk.dll and b/Assets/dll/MSXHawk.dll differ diff --git a/Assets/gamedb/gamedb_msx_msx1_rom.txt b/Assets/gamedb/gamedb_msx_msx1_rom.txt index b15d491134..d44aae672f 100644 --- a/Assets/gamedb/gamedb_msx_msx1_rom.txt +++ b/Assets/gamedb/gamedb_msx_msx1_rom.txt @@ -840,10 +840,10 @@ ABBCFC00F71051434E0E82E29B6EA1EF Gradius 2. Nemesis 2 (1987)(Konami)(JP)[a][RC- 648E923715E4B54CBECE186F098E0956 Gradius 2. Nemesis 2 (1987)(Konami)(JP)[penguin version][RC-751] MSX mapper=2 JP EE3E6A50E3DE131D217E5DAB55519011 Gradius 2. Nemesis 2 (1987)(Konami)(JP)[RC-751] MSX mapper=2 JP C1EAEAF5F0B432D2C6A53735B6F53B6D Gradius 2. Nemesis 2 (1987)(Konami)(JP)[SCC][RC-751] MSX mapper=2 JP -797016FDBF2B23138C543FEE5C8CC34B Gradius. Nemesis (1986)(Konami)(JP)[a][RC-742] MSX JP -1D19E90B3DF492F0F1956747279FBBAC Gradius. Nemesis (1986)(Konami)(JP)[a][SCC][RC-742] MSX JP -25C0349164616A7540FAA04DCC90237A Gradius. Nemesis (1986)(Konami)(JP)[SCC][RC-742] MSX JP -CD78EBEB472FD24AC0F569D262BB2BD4 Gradius. Nemesis (1986)(Konami)(JP)[SCC+][RC-742] MSX JP +797016FDBF2B23138C543FEE5C8CC34B Gradius. Nemesis (1986)(Konami)(JP)[a][RC-742] MSX mapper=1 JP +1D19E90B3DF492F0F1956747279FBBAC Gradius. Nemesis (1986)(Konami)(JP)[a][SCC][RC-742] MSX mapper=1 JP +25C0349164616A7540FAA04DCC90237A Gradius. Nemesis (1986)(Konami)(JP)[SCC][RC-742] MSX mapper=1 JP +CD78EBEB472FD24AC0F569D262BB2BD4 Gradius. Nemesis (1986)(Konami)(JP)[SCC+][RC-742] MSX mapper=1 JP 697F6A318B187510655A28F3A0FE698D Green Beret (1986)(Konami)(JP) MSX JP F0653353E486843B0C827746E0CFA078 Green Beret (1986)(Konami)(JP)[a] MSX JP 19C599289767DB875F21B6165A1DF0CF Green Beret (1987)(Zemina)(KR) MSX KR @@ -978,13 +978,13 @@ F485D4C28102F3C5E7FB1EBA8520382C King's Valley (1985)(Konami)(JP)[RC-727] MSX 46051F8A0AAEFAA012B8783ADA3DA4FD Kinnikuman. Muscle Man (1985)(Bandai)(JP) MSX JP 1CD39F900EDF496A967E4FC8E48D1451 Kinnikuman. Muscle Man (1985)(Bandai)(JP)[a] MSX JP 489075D5E2F3B9B60C41FBF8AD27AC7E Knight Lore (1985)(Nippon Dexter)(JP) MSX JP -FE12D44A5C06199394AD022AF7BB88E8 Knightmare II - The Maze of Galious (1987)(Konami)(JP)[a][RC-749] MSX JP -0924CF4480C9A4F3FBD922449900C913 Knightmare II - The Maze of Galious (1987)(Konami)(JP)[RC-749] MSX JP -3653C9AD32CA363DBA0FA81F707EA428 Knightmare II - The Maze of Galious (1987)(Zemina)(KR)[RC-749] MSX KR -845F200E4A101ED52685CAFEA9B9ED3F Knightmare III - Shalom (1987)(Konami)(JP)[a][RC-754] MSX JP -2A2A47925227A82F3C614F85C0A21CC7 Knightmare III - Shalom (1987)(Konami)(JP)[a2][RC-754] MSX JP -9A9E8E4FC95A15AAF5E0A40C498CF0DA Knightmare III - Shalom (1987)(Konami)(JP)[a3][RC-754] MSX JP -355F48B2A181880E60314F69752F9084 Knightmare III - Shalom (1987)(Konami)(JP)[RC-754] MSX JP +FE12D44A5C06199394AD022AF7BB88E8 Knightmare II - The Maze of Galious (1987)(Konami)(JP)[a][RC-749] MSX mapper=1 JP +0924CF4480C9A4F3FBD922449900C913 Knightmare II - The Maze of Galious (1987)(Konami)(JP)[RC-749] MSX mapper=1 JP +3653C9AD32CA363DBA0FA81F707EA428 Knightmare II - The Maze of Galious (1987)(Zemina)(KR)[RC-749] MSX mapper=1 KR +845F200E4A101ED52685CAFEA9B9ED3F Knightmare III - Shalom (1987)(Konami)(JP)[a][RC-754] MSX mapper=1 JP +2A2A47925227A82F3C614F85C0A21CC7 Knightmare III - Shalom (1987)(Konami)(JP)[a2][RC-754] MSX mapper=1 JP +9A9E8E4FC95A15AAF5E0A40C498CF0DA Knightmare III - Shalom (1987)(Konami)(JP)[a3][RC-754] MSX mapper=1 JP +355F48B2A181880E60314F69752F9084 Knightmare III - Shalom (1987)(Konami)(JP)[RC-754] MSX mapper=1 JP 2F4E87CC751D116EA996AD4A2118F4AC Knightmare. Majyo Densetsu (1986)(Konami)(JP)[a][RC-739] MSX JP EBFCABA358D7CECA95C7385276321F78 Knightmare. Majyo Densetsu (1986)(Konami)(JP)[a2][RC-739] MSX JP 3B46F970FD4BD442737E41CAAB527390 Knightmare. Majyo Densetsu (1986)(Konami)(JP)[RC-739] MSX JP @@ -1464,10 +1464,10 @@ B591BB62CEC12FCC13F54885CF3C7DF6 Yie Ar Kung-Fu II - The Emperor Yie-Gah (1985) BCEC9FDAC121E3EE668946CDBEDF63CF Youkai Yashiki. Boynight. Haunted House (1986)(Casio)(JP) MSX JP F5DA7659FF2A76D94341F4BAB84BEAE3 Young Sherlock - The Legacy of Doyle (1985)(Pack In Video)(JP) MSX JP 4C0D373E999CE241B8D5F41FFE379205 Young Sherlock - The Legacy of Doyle (1985)(Pack In Video)(JP)[a] MSX JP -9C3B9492F2B565CBDDF562195F540993 Yume Tairiku Adventure. Penguin Adventure (1986)(Konami)(JP)[a][RC-743] MSX JP -B078834ABE5659A3EB32560F88B19F36 Yume Tairiku Adventure. Penguin Adventure (1986)(Konami)(JP)[a2][RC-743] MSX JP -3A705B83FF05999D924007126993A390 Yume Tairiku Adventure. Penguin Adventure (1986)(Konami)(JP)[RC-743] MSX JP -DD85486474983645D0576C76C7267415 Yume Tairiku Adventure. Penguin Adventure (1987)(Zemina)(KR)[RC-743] MSX KR +9C3B9492F2B565CBDDF562195F540993 Yume Tairiku Adventure. Penguin Adventure (1986)(Konami)(JP)[a][RC-743] MSX mapper=1 JP +B078834ABE5659A3EB32560F88B19F36 Yume Tairiku Adventure. Penguin Adventure (1986)(Konami)(JP)[a2][RC-743] MSX mapper=1 JP +3A705B83FF05999D924007126993A390 Yume Tairiku Adventure. Penguin Adventure (1986)(Konami)(JP)[RC-743] MSX mapper=1 JP +DD85486474983645D0576C76C7267415 Yume Tairiku Adventure. Penguin Adventure (1987)(Zemina)(KR)[RC-743] MSX mapper=1 KR 21E0D73E03755E0F773E6056DCCDB702 Zaider - Battle of Peguss (1986)(Cosmos Computer)(JP) MSX JP B115607552685656F43F324868D200A8 Zaider - Battle of Peguss (1986)(Cosmos Computer)(JP)[a] MSX JP 8500BD6A80B4355C11AF6084710A75C9 Zanac - 2nd Version (1987)(Pony Canyon)(JP) MSX JP diff --git a/libHawk/MSXHawk/MSXHawk/Memory.cpp b/libHawk/MSXHawk/MSXHawk/Memory.cpp index 408628342d..5ad0e59684 100644 --- a/libHawk/MSXHawk/MSXHawk/Memory.cpp +++ b/libHawk/MSXHawk/MSXHawk/Memory.cpp @@ -363,6 +363,57 @@ namespace MSXHawk } } } + else if (rom_mapper_1 == 3) // Ascii 8kb + { + if (base_addr == 0) + { + if (segment < 8) + { + return &rom_1[rom1_konami_page_2 * 0x2000 + (0x400 * segment)]; + } + else + { + segment -= 8; + return &rom_1[rom1_konami_page_3 * 0x2000 + (0x400 * segment)]; + } + } + else if (base_addr == 0x4000) + { + if (segment < 8) + { + return &rom_1[rom1_konami_page_0 * 0x2000 + (0x400 * segment)]; + } + else + { + segment -= 8; + return &rom_1[rom1_konami_page_1 * 0x2000 + (0x400 * segment)]; + } + } + else if (base_addr == 0x8000) + { + if (segment < 8) + { + return &rom_1[rom1_konami_page_2 * 0x2000 + (0x400 * segment)]; + } + else + { + segment -= 8; + return &rom_1[rom1_konami_page_3 * 0x2000 + (0x400 * segment)]; + } + } + else + { + if (segment < 8) + { + return &rom_1[rom1_konami_page_0 * 0x2000 + (0x400 * segment)]; + } + else + { + segment -= 8; + return &rom_1[rom1_konami_page_1 * 0x2000 + (0x400 * segment)]; + } + } + } else { return &unmapped[0]; @@ -488,6 +539,57 @@ namespace MSXHawk } } } + else if (rom_mapper_2 == 3) // Ascii 8kb + { + if (base_addr == 0) + { + if (segment < 8) + { + return &rom_2[rom2_konami_page_2 * 0x2000 + (0x400 * segment)]; + } + else + { + segment -= 8; + return &rom_2[rom2_konami_page_3 * 0x2000 + (0x400 * segment)]; + } + } + else if (base_addr == 0x4000) + { + if (segment < 8) + { + return &rom_2[rom2_konami_page_0 * 0x2000 + (0x400 * segment)]; + } + else + { + segment -= 8; + return &rom_2[rom2_konami_page_1 * 0x2000 + (0x400 * segment)]; + } + } + else if (base_addr == 0x8000) + { + if (segment < 8) + { + return &rom_2[rom2_konami_page_2 * 0x2000 + (0x400 * segment)]; + } + else + { + segment -= 8; + return &rom_2[rom2_konami_page_3 * 0x2000 + (0x400 * segment)]; + } + } + else + { + if (segment < 8) + { + return &rom_2[rom2_konami_page_0 * 0x2000 + (0x400 * segment)]; + } + else + { + segment -= 8; + return &rom_2[rom2_konami_page_1 * 0x2000 + (0x400 * segment)]; + } + } + } else { return &unmapped[0]; @@ -547,5 +649,23 @@ namespace MSXHawk if (addr >= 0xB000 && addr < 0xB800 && slot_2_has_rom == 2) { rom2_konami_page_3 = (uint8_t)(value & rom_size_2); remap(); } } */ + + // Ascii 8kb + if (rom_mapper_1 == 3) + { + if (addr >= 0x6000 && addr < 0x6800 && slot_1_has_rom == 1) { rom1_konami_page_0 = (uint8_t)(value & rom_size_1); remap(); } + if (addr >= 0x6800 && addr < 0x7000 && slot_1_has_rom == 1) { rom1_konami_page_1 = (uint8_t)(value & rom_size_1); remap(); } + if (addr >= 0x7000 && addr < 0x7800 && slot_1_has_rom == 1) { rom1_konami_page_2 = (uint8_t)(value & rom_size_1); remap(); } + if (addr >= 0x7800 && addr < 0x8000 && slot_1_has_rom == 1) { rom1_konami_page_3 = (uint8_t)(value & rom_size_1); remap(); } + } + /* + if (rom_mapper_2 == 3) + { + if (addr >= 0x6000 && addr < 0x6800 && slot_1_has_rom == 2) { rom2_konami_page_0 = (uint8_t)(value & rom_size_2); remap(); } + if (addr >= 0x6800 && addr < 0x7000 && slot_1_has_rom == 2) { rom2_konami_page_1 = (uint8_t)(value & rom_size_2); remap(); } + if (addr >= 0x7000 && addr < 0x7800 && slot_1_has_rom == 2) { rom2_konami_page_2 = (uint8_t)(value & rom_size_2); remap(); } + if (addr >= 0x7800 && addr < 0x8000 && slot_1_has_rom == 2) { rom2_konami_page_3 = (uint8_t)(value & rom_size_2); remap(); } + } + */ } } \ No newline at end of file diff --git a/libHawk/MSXHawk/MSXHawk/Memory.h b/libHawk/MSXHawk/MSXHawk/Memory.h index 88aa90e3c0..bcd18ef9c7 100644 --- a/libHawk/MSXHawk/MSXHawk/Memory.h +++ b/libHawk/MSXHawk/MSXHawk/Memory.h @@ -103,8 +103,8 @@ namespace MSXHawk // page size 0x2000 for konami games if (rom_mapper_1 == 1 || rom_mapper_1 == 2) { rom_size_1 = ext_rom_size_1 / 0x2000 - 1; } if (rom_mapper_2 == 1 || rom_mapper_2 == 2) { rom_size_2 = ext_rom_size_2 / 0x2000 - 1; } - + // initial state if (rom_mapper_1 == 1 || rom_mapper_1 == 2) { rom1_konami_page_0 = 0; @@ -120,6 +120,26 @@ namespace MSXHawk rom2_konami_page_3 = 3; } + // page size 0x2000 for generic ascii 8kb mapper + if (rom_mapper_1 == 3) { rom_size_1 = ext_rom_size_1 / 0x2000 - 1; } + if (rom_mapper_2 == 3) { rom_size_2 = ext_rom_size_2 / 0x2000 - 1; } + + // reuse konami page names (same size) however different initial state + if (rom_mapper_1 == 3) + { + rom1_konami_page_0 = 0; + rom1_konami_page_1 = 0; + rom1_konami_page_2 = 0; + rom1_konami_page_3 = 0; + } + if (rom_mapper_2 == 3) + { + rom2_konami_page_0 = 0; + rom2_konami_page_1 = 0; + rom2_konami_page_2 = 0; + rom2_konami_page_3 = 0; + } + // default memory map setup PortA8 = 0; diff --git a/src/BizHawk.Emulation.Cores/Computers/MSX/MSX.cs b/src/BizHawk.Emulation.Cores/Computers/MSX/MSX.cs index 9897071a38..38c359f53e 100644 --- a/src/BizHawk.Emulation.Cores/Computers/MSX/MSX.cs +++ b/src/BizHawk.Emulation.Cores/Computers/MSX/MSX.cs @@ -48,15 +48,22 @@ namespace BizHawk.Emulation.Cores.Computers.MSX // Assume default konami style mapper if (gi == null) { - + mapper_1 = 3; + Console.WriteLine("Using Ascii 8 KB Mapper"); } else if (!dict.TryGetValue("mapper", out s_mapper)) { - mapper_1 = 1; - Console.WriteLine("Using Konami Mapper"); + mapper_1 = 3; + Console.WriteLine("Using Ascii 8 KB Mapper"); } else { + if (s_mapper == "1") + { + mapper_1 = 1; + Console.WriteLine("Using Konami Mapper"); + } + if (s_mapper == "2") { mapper_1 = 2;