MSX: implement ascii 8kb mapper and make it the default for large games
This commit is contained in:
parent
658123435c
commit
76faa7c835
Binary file not shown.
|
@ -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
|
||||
|
|
|
@ -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(); }
|
||||
}
|
||||
*/
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue