From d6dd621aa98e0f747516f29fa51a17708c61454a Mon Sep 17 00:00:00 2001 From: sakman55 Date: Tue, 5 Nov 2024 07:49:24 -1000 Subject: [PATCH] Update MSX.ino Added support for the Hudson Soft Bee Pack and Bee Cards. Requires a Hudson Soft Bee Pack inserted into the MSX Adapter. Be sure to fully insert the Bee Card into the Bee Pack. Select Mapper 14 "Hudson Soft Bee Pack" and set the ROM size (16K/32K). --- Cart_Reader/MSX.ino | 52 +++++++++++++++++++++++++++++---------------- 1 file changed, 34 insertions(+), 18 deletions(-) diff --git a/Cart_Reader/MSX.ino b/Cart_Reader/MSX.ino index a361c51..e9752f7 100644 --- a/Cart_Reader/MSX.ino +++ b/Cart_Reader/MSX.ino @@ -87,6 +87,7 @@ static const byte PROGMEM msxmapsize[] = { 11, 0, 4, 2, 2, // PAC 0K/FM-PAC 64K [sram r/w] 8K 12, 7, 7, 0, 0, // R-Type 384K 13, 5, 5, 0, 0, // Super Lode Runner (Irem) 128K + 14, 2, 3, 0, 0, // Hudson Soft Bee Pack }; // MSX1 = 8,16,32,128,256 @@ -99,7 +100,7 @@ byte MSXRAM[] = { 0, 2, 8, 16, 32 }; byte msxramlo = 0; // Lowest Entry byte msxramhi = 4; // Highest Entry -byte msxmapcount = 14; // (sizeof(mapsize)/sizeof(mapsize[0])) / 5; +byte msxmapcount = 15; // (sizeof(mapsize)/sizeof(mapsize[0])) / 5; boolean msxmapfound = false; byte msxmapselect; int msxindex; @@ -400,7 +401,7 @@ void readROM_MSX() { CS2_DISABLE; break; - case 4: // Game Master 2 (128K) + case 4: // Game Master 2 (128K) readSegment_MSX(0x4000, 0x6000); // 8K Fixed Bank 0 writeData_MSX(0x6000, 1); // Set Bank 1 for subsequent reads readSegment_MSX(0x6000, 0x8000); // 8K Init Bank 1 @@ -450,7 +451,7 @@ void readROM_MSX() { CS2_DISABLE; break; - case 8: // Konami MegaROM without SCC + case 8: // Konami MegaROM without SCC readSegment_MSX(0x4000, 0x6000); // 8K Fixed Bank 0 readSegment_MSX(0x6000, 0x8000); // 8K Init Bank 1 msxbanks = int_pow(2, msxsize - 1); @@ -514,6 +515,17 @@ void readROM_MSX() { CS2_DISABLE; MERQ_DISABLE; break; + + case 14: // Hudson Soft Bee Pack (16K/32K) + CS1_ENABLE; + readSegment_MSX(0x4000,0x8000); // 16K Bank 0 + CS1_DISABLE; + if (msxsize == 3) { // 32K + CS2_ENABLE; + readSegment_MSX(0x8000, 0xC000); // +16K Bank 1 + CS2_DISABLE; + } + break; } myFile.close(); @@ -618,7 +630,7 @@ void readRAM_MSX() { writeData_MSX(0x7000, 0); // SRAM Disable break; - case 2: // ASCII16 (2K/8K) + case 2: // ASCII16 (2K/8K) writeData_MSX(0x7000, 0x10); // Bit 4 Enable readSegment_MSX(0x8000, 0x8800); // 2K - Hydlide 2 & Daisenryaku (2K) if (msxramsize == 2) // A-Train (8K) @@ -626,7 +638,7 @@ void readRAM_MSX() { writeData_MSX(0x7000, 0); // SRAM Disable break; - case 4: // Game Master 2 (8K) + case 4: // Game Master 2 (8K) writeData_MSX(0xA000, 0x10); // Bit 4 Enable, Bit 5 SRAM Segment 0 readSegment_MSX(0xB000, 0xC000); // 4K writeData_MSX(0xA000, 0x30); // Bit 4 Enable, Bit 5 SRAM Segment 1 @@ -667,7 +679,7 @@ void readRAM_MSX() { writeData_MSX(0x7000, 0); // SRAM Disable break; - case 11: // PAC/FM-PAC (8K) + case 11: // PAC/FM-PAC (8K) writeData_MSX(0x5FFE, 0x4D); // SRAM Enable Step 1 writeData_MSX(0x5FFF, 0x69); // SRAM Enable Step 2 readSegment_MSX(0x4000, 0x6000); // 8K @@ -708,7 +720,7 @@ void writeRAM_MSX() { if (myFile.open(filePath, O_READ)) { switch (msxmapper) { - case 1: // ASCII8 (2K/8K) + case 1: // ASCII8 (2K/8K) for (word address = 0x0; address < (0x800 * msxramsize * msxramsize); address += 512) { // 2K/8K if (msxramsize == 1) writeData_MSX(0x7000, 0x10); // Bit 4 @@ -722,8 +734,8 @@ void writeRAM_MSX() { writeData_MSX(0x7000, 0); // SRAM Disable break; - case 2: // ASCII16 (2K/8K) - writeData_MSX(0x7000, 0x10); // Bit 4 Enable + case 2: // ASCII16 (2K/8K) + writeData_MSX(0x7000, 0x10); // Bit 4 Enable for (word address = 0x0; address < (0x800 * msxramsize * msxramsize); address += 512) { // 2K/8K myFile.read(sdBuffer, 512); for (int x = 0; x < 512; x++) { @@ -735,7 +747,7 @@ void writeRAM_MSX() { case 4: // Game Master 2 (8K) for (int y = 0; y < 2; y++) { - writeData_MSX(0xA000, 0x10 + (y * 0x20)); // Bit 4 Enable, Bit 5 SRAM Segment 0/1 + writeData_MSX(0xA000, 0x10 + (y * 0x20)); // Bit 4 Enable, Bit 5 SRAM Segment 0/1 for (word address = 0x0; address < 0x1000; address += 512) { // 4K myFile.read(sdBuffer, 512); for (int x = 0; x < 512; x++) { @@ -748,7 +760,7 @@ void writeRAM_MSX() { case 5: // HAL Note (16K) MERQ_ENABLE; - writeData_MSX(0x4FFF, 0x80); // Bit 7 Enable + writeData_MSX(0x4FFF, 0x80); // Bit 7 Enable for (word address = 0; address < 0x4000; address += 512) { // 16K myFile.read(sdBuffer, 512); for (int x = 0; x < 512; x++) { @@ -764,7 +776,7 @@ void writeRAM_MSX() { if (srambit6) writeData_MSX(0x7000, 0xC0); // Bit 6 + Bit 7 Enable else - writeData_MSX(0x7000, 0xA0); // Bit 5 + Bit 7 Enable + writeData_MSX(0x7000, 0xA0); // Bit 5 + Bit 7 Enable for (word address = 0x0; address < 0x2000; address += 512) { // 8K myFile.read(sdBuffer, 512); for (int x = 0; x < 512; x++) { @@ -776,7 +788,7 @@ void writeRAM_MSX() { if (srambit6) writeData_MSX(0x7000, 0xC0 + y); // Bit 6 + Bit 7 Enable else - writeData_MSX(0x7000, 0xA0 + y); // Bit 5 + Bit 7 Enable + writeData_MSX(0x7000, 0xA0 + y); // Bit 5 + Bit 7 Enable for (word address = 0x0; address < 0x2000; address += 512) { // 8K myFile.read(sdBuffer, 512); for (int x = 0; x < 512; x++) { @@ -788,9 +800,9 @@ void writeRAM_MSX() { writeData_MSX(0x7000, 0); // SRAM Disable break; - case 11: // PAC/FM-PAC (8K) - writeData_MSX(0x5FFE, 0x4D); // SRAM Enable Step 1 - writeData_MSX(0x5FFF, 0x69); // SRAM Enable Step 2 + case 11: // PAC/FM-PAC (8K) + writeData_MSX(0x5FFE, 0x4D); // SRAM Enable Step 1 + writeData_MSX(0x5FFF, 0x69); // SRAM Enable Step 2 for (word address = 0x0; address < 0x2000; address += 512) { // 8K myFile.read(sdBuffer, 512); for (int x = 0; x < 512; x++) { @@ -846,7 +858,7 @@ setmapper: String newmap; msxmapfound = false; printMapper(0); - Serial.print(F("Enter Mapper [0-13]: ")); + Serial.print(F("Enter Mapper [0-14]: ")); while (Serial.available() == 0) {} newmap = Serial.readStringUntil('\n'); Serial.println(newmap); @@ -1122,7 +1134,7 @@ void checkStatus_MSX() { EEPROM_readAnything(7, msxmapper); EEPROM_readAnything(8, msxsize); EEPROM_readAnything(10, msxramsize); - if (msxmapper > 13) { + if (msxmapper > 14) { msxmapper = 0; EEPROM_writeAnything(7, msxmapper); } @@ -1215,6 +1227,9 @@ void printMapper(byte msxmaplabel) { case 13: println_Msg(F("SUPER LODE RUNNER")); break; + case 14: + println_Msg(F("HUDSON SOFT BEE PACK")); + break; } #else Serial.println(F("0 = NONE")); @@ -1231,6 +1246,7 @@ void printMapper(byte msxmaplabel) { Serial.println(F("11 = PAC/FM-PAC")); Serial.println(F("12 = R-TYPE")); Serial.println(F("13 = SUPER LODE RUNNER")); + Serial.println(F("14 = HUDSON SOFT BEE PACK")); #endif }