Skip to content

Commit 78d2736

Browse files
committed
Merge remote-tracking branch 'upstream/master'
2 parents 5991dbc + 605eb57 commit 78d2736

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+2239
-1694
lines changed

scripts/src/bus.lua

+8-2
Original file line numberDiff line numberDiff line change
@@ -1939,16 +1939,22 @@ if (BUSES["MSX_SLOT"]~=null) then
19391939
MAME_DIR .. "src/devices/bus/msx/cart/rtype.h",
19401940
MAME_DIR .. "src/devices/bus/msx/cart/slotexpander.cpp",
19411941
MAME_DIR .. "src/devices/bus/msx/cart/slotexpander.h",
1942+
MAME_DIR .. "src/devices/bus/msx/cart/slotoptions.cpp",
1943+
MAME_DIR .. "src/devices/bus/msx/cart/slotoptions.h",
19421944
MAME_DIR .. "src/devices/bus/msx/cart/softcard.cpp",
19431945
MAME_DIR .. "src/devices/bus/msx/cart/softcard.h",
19441946
MAME_DIR .. "src/devices/bus/msx/cart/superloderunner.cpp",
19451947
MAME_DIR .. "src/devices/bus/msx/cart/superloderunner.h",
19461948
MAME_DIR .. "src/devices/bus/msx/cart/super_swangi.cpp",
19471949
MAME_DIR .. "src/devices/bus/msx/cart/super_swangi.h",
1948-
MAME_DIR .. "src/devices/bus/msx/cart/yamaha.cpp",
1949-
MAME_DIR .. "src/devices/bus/msx/cart/yamaha.h",
19501950
MAME_DIR .. "src/devices/bus/msx/cart/yamaha_ucn01.cpp",
19511951
MAME_DIR .. "src/devices/bus/msx/cart/yamaha_ucn01.h",
1952+
MAME_DIR .. "src/devices/bus/msx/minicart/minicart.cpp",
1953+
MAME_DIR .. "src/devices/bus/msx/minicart/minicart.h",
1954+
MAME_DIR .. "src/devices/bus/msx/module/module.cpp",
1955+
MAME_DIR .. "src/devices/bus/msx/module/module.h",
1956+
MAME_DIR .. "src/devices/bus/msx/module/sfg.cpp",
1957+
MAME_DIR .. "src/devices/bus/msx/module/sfg.h",
19521958
MAME_DIR .. "src/devices/bus/msx/softcard/softcard.cpp",
19531959
MAME_DIR .. "src/devices/bus/msx/softcard/softcard.h",
19541960
}

src/devices/bus/amiga/keyboard/a2000.cpp

+184-184
Large diffs are not rendered by default.

src/devices/bus/amiga/keyboard/matrix.cpp

+378-378
Large diffs are not rendered by default.

src/devices/bus/msx/cart/cartridge.cpp

+172-52
Original file line numberDiff line numberDiff line change
@@ -28,78 +28,198 @@
2828
#include "ram.h"
2929
#include "rtype.h"
3030
#include "slotexpander.h"
31+
#include "slotoptions.h"
3132
#include "softcard.h"
3233
#include "superloderunner.h"
3334
#include "super_swangi.h"
34-
#include "yamaha.h"
3535
#include "yamaha_ucn01.h"
3636

3737
#include "bus/msx/slot/cartridge.h"
3838

3939

40+
DEFINE_DEVICE_TYPE(MSX_SLOT_CARTRIDGE, msx_slot_cartridge_device, "msx_slot_cartridge", "MSX Cartridge slot")
41+
42+
4043
void msx_cart(device_slot_interface &device, bool is_in_subslot)
4144
{
45+
using namespace bus::msx::cart;
4246
msx_cart_disk_register_options(device);
4347
msx_cart_ram_register_options(device);
44-
device.option_add_internal("arc", MSX_CART_ARC);
45-
device.option_add_internal("ascii8", MSX_CART_ASCII8);
46-
device.option_add_internal("ascii8_sram", MSX_CART_ASCII8_SRAM);
47-
device.option_add_internal("ascii16", MSX_CART_ASCII16);
48-
device.option_add_internal("ascii16_sram", MSX_CART_ASCII16_SRAM);
49-
device.option_add_internal("cross_blaim", MSX_CART_CROSSBLAIM);
50-
device.option_add_internal("dooly", MSX_CART_DOOLY);
51-
device.option_add_internal("easispeech", MSX_CART_EASISPEECH);
52-
device.option_add_internal("fmpac", MSX_CART_FMPAC);
53-
device.option_add_internal("fs_sr022", MSX_CART_FS_SR022);
54-
device.option_add_internal("gamemaster2", MSX_CART_GAMEMASTER2);
55-
device.option_add_internal("halnote", MSX_CART_HALNOTE);
56-
device.option_add_internal("hfox", MSX_CART_HFOX);
57-
device.option_add_internal("holy_quran", MSX_CART_HOLY_QURAN);
58-
device.option_add_internal("ink", MSX_CART_INK);
59-
device.option_add_internal("kanji", MSX_CART_KANJI);
60-
device.option_add_internal("keyboard_master", MSX_CART_KEYBOARD_MASTER);
61-
device.option_add_internal("konami", MSX_CART_KONAMI);
62-
device.option_add_internal("konami_scc", MSX_CART_KONAMI_SCC);
63-
device.option_add_internal("korean_80in1", MSX_CART_KOREAN_80IN1);
64-
device.option_add_internal("korean_90in1", MSX_CART_KOREAN_90IN1);
65-
device.option_add_internal("korean_126in1", MSX_CART_KOREAN_126IN1);
66-
device.option_add_internal("majutsushi", MSX_CART_MAJUTSUSHI);
67-
device.option_add_internal("msxaud_fsca1", MSX_CART_MSX_AUDIO_FSCA1);
68-
device.option_add_internal("msxaud_hxmu900", MSX_CART_MSX_AUDIO_HXMU900);
69-
device.option_add_internal("msxaud_nms1205", MSX_CART_MSX_AUDIO_NMS1205);
70-
device.option_add_internal("msxdos2j", MSX_CART_MSXDOS2J);
71-
device.option_add_internal("msxdos2e", MSX_CART_MSXDOS2E);
72-
device.option_add_internal("msxwrite", MSX_CART_MSXWRITE);
73-
device.option_add_internal("nomapper", MSX_CART_NOMAPPER);
74-
device.option_add_internal("rtype", MSX_CART_RTYPE);
75-
device.option_add_internal("sound_snatcher", MSX_CART_SOUND_SNATCHER);
76-
device.option_add_internal("sound_sdsnatch", MSX_CART_SOUND_SDSNATCHER);
77-
device.option_add_internal("super_swangi", MSX_CART_SUPER_SWANGI);
78-
device.option_add_internal("superloderunner", MSX_CART_SUPERLODERUNNER);
79-
device.option_add_internal("synthesizer", MSX_CART_SYNTHESIZER);
80-
device.option_add_internal("ec701", MSX_CART_EC701);
81-
device.option_add("beepack", MSX_CART_BEEPACK);
82-
device.option_add("bm_012", MSX_CART_BM_012);
83-
device.option_add("moonsound", MSX_CART_MOONSOUND);
84-
device.option_add("ucn01", MSX_CART_UCN01);
48+
device.option_add_internal(slotoptions::ARC, MSX_CART_ARC);
49+
device.option_add_internal(slotoptions::ASCII8, MSX_CART_ASCII8);
50+
device.option_add_internal(slotoptions::ASCII8_SRAM, MSX_CART_ASCII8_SRAM);
51+
device.option_add_internal(slotoptions::ASCII16, MSX_CART_ASCII16);
52+
device.option_add_internal(slotoptions::ASCII16_SRAM, MSX_CART_ASCII16_SRAM);
53+
device.option_add_internal(slotoptions::CROSS_BLAIM, MSX_CART_CROSSBLAIM);
54+
device.option_add_internal(slotoptions::DOOLY, MSX_CART_DOOLY);
55+
device.option_add_internal(slotoptions::EASISPEECH, MSX_CART_EASISPEECH);
56+
device.option_add_internal(slotoptions::FMPAC, MSX_CART_FMPAC);
57+
device.option_add_internal(slotoptions::FS_SR022, MSX_CART_FS_SR022);
58+
device.option_add_internal(slotoptions::GAMEMASTER2, MSX_CART_GAMEMASTER2);
59+
device.option_add_internal(slotoptions::HALNOTE, MSX_CART_HALNOTE);
60+
device.option_add_internal(slotoptions::HFOX, MSX_CART_HFOX);
61+
device.option_add_internal(slotoptions::HOLY_QURAN, MSX_CART_HOLY_QURAN);
62+
device.option_add_internal(slotoptions::INK, MSX_CART_INK);
63+
device.option_add_internal(slotoptions::KANJI, MSX_CART_KANJI);
64+
device.option_add_internal(slotoptions::KEYBOARD_MASTER, MSX_CART_KEYBOARD_MASTER);
65+
device.option_add_internal(slotoptions::KONAMI, MSX_CART_KONAMI);
66+
device.option_add_internal(slotoptions::KONAMI_SCC, MSX_CART_KONAMI_SCC);
67+
device.option_add_internal(slotoptions::KOREAN_80IN1, MSX_CART_KOREAN_80IN1);
68+
device.option_add_internal(slotoptions::KOREAN_90IN1, MSX_CART_KOREAN_90IN1);
69+
device.option_add_internal(slotoptions::KOREAN_126IN1, MSX_CART_KOREAN_126IN1);
70+
device.option_add_internal(slotoptions::MAJUSTUSHI, MSX_CART_MAJUTSUSHI);
71+
device.option_add_internal(slotoptions::MSXAUD_FSCA1, MSX_CART_MSX_AUDIO_FSCA1);
72+
device.option_add_internal(slotoptions::MSXAUD_HXMU900, MSX_CART_MSX_AUDIO_HXMU900);
73+
device.option_add_internal(slotoptions::MSXAUD_NMS1205, MSX_CART_MSX_AUDIO_NMS1205);
74+
device.option_add_internal(slotoptions::MSXDOS2J, MSX_CART_MSXDOS2J);
75+
device.option_add_internal(slotoptions::MSXDOS2E, MSX_CART_MSXDOS2E);
76+
device.option_add_internal(slotoptions::MSXWRITE, MSX_CART_MSXWRITE);
77+
device.option_add_internal(slotoptions::NOMAPPER, MSX_CART_NOMAPPER);
78+
device.option_add_internal(slotoptions::RTYPE, MSX_CART_RTYPE);
79+
device.option_add_internal(slotoptions::SOUND_SNATCHER, MSX_CART_SOUND_SNATCHER);
80+
device.option_add_internal(slotoptions::SOUND_SDSNATCH, MSX_CART_SOUND_SDSNATCHER);
81+
device.option_add_internal(slotoptions::SUPER_SWANGI, MSX_CART_SUPER_SWANGI);
82+
device.option_add_internal(slotoptions::SUPERLODERUNNER, MSX_CART_SUPERLODERUNNER);
83+
device.option_add_internal(slotoptions::SYNTHESIZER, MSX_CART_SYNTHESIZER);
84+
device.option_add_internal(slotoptions::EC701, MSX_CART_EC701);
85+
device.option_add(slotoptions::BEEPACK, MSX_CART_BEEPACK);
86+
device.option_add(slotoptions::BM_012, MSX_CART_BM_012);
87+
device.option_add(slotoptions::MOONSOUND, MSX_CART_MOONSOUND);
88+
device.option_add(slotoptions::UCN01, MSX_CART_UCN01);
89+
device.option_add(slotoptions::SOFTCARD, MSX_CART_SOFTCARD);
8590
if (!is_in_subslot)
8691
{
87-
device.option_add("slotexp", MSX_CART_SLOTEXPANDER);
92+
device.option_add(slotoptions::SLOTEXP, MSX_CART_SLOTEXPANDER);
8893
}
89-
device.option_add("softcard", MSX_CART_SOFTCARD);
9094
}
9195

9296

93-
// Several yamaha machines had 60 pin expansion slots. The pinouts of these slots was
94-
// exactly the same as the regular 50 pin cartridge slots. The lowest 10 pins are simply
95-
// not connected.
96-
void msx_yamaha_60pin(device_slot_interface &device, bool is_in_subslot)
97+
msx_slot_cartridge_device::msx_slot_cartridge_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
98+
: msx_slot_cartridge_base_device(mconfig, MSX_SLOT_CARTRIDGE, tag, owner, clock)
9799
{
98-
device.option_add("sfg01", MSX_CART_SFG01);
99-
device.option_add("sfg05", MSX_CART_SFG05);
100100
}
101101

102-
void msx_yamaha_minicart(device_slot_interface &device, bool is_in_subslot)
102+
std::string msx_slot_cartridge_device::get_default_card_software(get_default_card_software_hook &hook) const
103+
{
104+
using namespace bus::msx::cart;
105+
if (hook.image_file())
106+
{
107+
// Check if there's some mapper related information in the hashfiles
108+
std::string extrainfo;
109+
if (hook.hashfile_extrainfo(extrainfo))
110+
{
111+
int extrainfo_type = -1;
112+
if (1 == sscanf(extrainfo.c_str(), "%d", &extrainfo_type))
113+
{
114+
static const struct {int extrainfo; char const *const mapper;} extrainfo_map[] = {
115+
{ 0, slotoptions::NOMAPPER },
116+
{ 1, slotoptions::MSXDOS2E },
117+
{ 2, slotoptions::KONAMI_SCC },
118+
{ 3, slotoptions::KONAMI },
119+
{ 4, slotoptions::ASCII8 },
120+
{ 5, slotoptions::ASCII16 },
121+
{ 6, slotoptions::GAMEMASTER2 },
122+
{ 7, slotoptions::ASCII8_SRAM },
123+
{ 8, slotoptions::ASCII16_SRAM },
124+
{ 9, slotoptions::RTYPE },
125+
{ 10, slotoptions::MAJUSTUSHI },
126+
{ 11, slotoptions::FMPAC },
127+
{ 12, slotoptions::SUPERLODERUNNER },
128+
{ 13, slotoptions::SYNTHESIZER },
129+
{ 14, slotoptions::CROSS_BLAIM },
130+
{ 16, slotoptions::KOREAN_80IN1 },
131+
{ 17, slotoptions::KOREAN_126IN1 }
132+
};
133+
134+
for (auto & elem : extrainfo_map)
135+
{
136+
if (elem.extrainfo == extrainfo_type)
137+
{
138+
return std::string(elem.mapper);
139+
}
140+
}
141+
}
142+
}
143+
144+
// Not identified through hashfile, try automatic detection
145+
u64 length;
146+
if (hook.image_file()->length(length))
147+
{
148+
osd_printf_warning("[%s] Error getting cartridge ROM length\n", tag());
149+
return std::string(slotoptions::NOMAPPER);
150+
}
151+
length = std::min<u64>(length, 4 * 1024 * 1024);
152+
std::vector<u8> rom(length);
153+
size_t actual;
154+
if (hook.image_file()->read(&rom[0], length, actual))
155+
{
156+
osd_printf_warning("[%s] Error reading from file\n", tag());
157+
return std::string(slotoptions::NOMAPPER);
158+
}
159+
return std::string(get_cart_type(&rom[0], length));
160+
}
161+
return software_get_default_slot(bus::msx::cart::slotoptions::NOMAPPER);
162+
}
163+
164+
165+
char const *const msx_slot_cartridge_device::get_cart_type(const u8 *rom, u32 length)
103166
{
104-
device.option_add_internal("nomapper", MSX_CART_NOMAPPER);
167+
using namespace bus::msx::cart;
168+
if (length < 0x10000)
169+
{
170+
return slotoptions::NOMAPPER;
171+
}
172+
173+
if ((rom[0x10] == 'Y') && (rom[0x11] == 'Z') && (length > 0x18000))
174+
{
175+
return slotoptions::GAMEMASTER2;
176+
}
177+
178+
int kon4 = 0, kon5 = 0, asc8 = 0, asc16 = 0;
179+
180+
for (int i=0; i < length-3; i++)
181+
{
182+
if (rom[i] == 0x32 && rom[i+1] == 0)
183+
{
184+
switch (rom[i+2])
185+
{
186+
case 0x60:
187+
case 0x70:
188+
asc16++;
189+
asc8++;
190+
break;
191+
192+
case 0x68:
193+
case 0x78:
194+
asc8++;
195+
asc16--;
196+
break;
197+
}
198+
199+
switch (rom[i+2])
200+
{
201+
case 0x60:
202+
case 0x80:
203+
case 0xa0:
204+
kon4++;
205+
break;
206+
207+
case 0x50:
208+
case 0x70:
209+
case 0x90:
210+
case 0xb0:
211+
kon5++;
212+
break;
213+
}
214+
}
215+
}
216+
217+
if (std::max(kon4, kon5) > std::max(asc8, asc16))
218+
{
219+
return (kon5 > kon4) ? slotoptions::KONAMI_SCC : slotoptions::KONAMI;
220+
}
221+
else
222+
{
223+
return (asc8 > asc16) ? slotoptions::ASCII8 : slotoptions::ASCII16;
224+
}
105225
}

src/devices/bus/msx/cart/cartridge.h

+16-2
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,24 @@
55

66
#pragma once
77

8+
#include "bus/msx/slot/cartridge.h"
9+
810

911
void msx_cart(device_slot_interface &device, bool is_in_subslot);
10-
void msx_yamaha_60pin(device_slot_interface &device, bool is_in_subslot); // 60 pin expansion slots as found in yamaha machines
11-
void msx_yamaha_minicart(device_slot_interface &device, bool is_in_subslot); // 30 pin mini cartridge slot as found in some yamaha machines
1212

1313

14+
DECLARE_DEVICE_TYPE(MSX_SLOT_CARTRIDGE, msx_slot_cartridge_device)
15+
16+
17+
class msx_slot_cartridge_device : public msx_slot_cartridge_base_device
18+
{
19+
public:
20+
msx_slot_cartridge_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
21+
22+
virtual std::string get_default_card_software(get_default_card_software_hook &hook) const override;
23+
24+
protected:
25+
static char const *const get_cart_type(const u8 *rom, u32 length);
26+
};
27+
1428
#endif // MAME_BUS_MSX_CART_CARTRIDGE_H

src/devices/bus/msx/cart/disk.cpp

+20-18
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@
103103

104104
#include "emu.h"
105105
#include "disk.h"
106+
#include "slotoptions.h"
106107

107108
#include "bus/msx/slot/cartridge.h"
108109
#include "imagedev/floppy.h"
@@ -137,24 +138,25 @@ DECLARE_DEVICE_TYPE(MSX_CART_VY0010, msx_cart_interface)
137138

138139
void msx_cart_disk_register_options(device_slot_interface &device)
139140
{
140-
device.option_add_internal("disk_avdpf550", MSX_CART_AVDPF550);
141-
device.option_add_internal("disk_cdx2", MSX_CART_CDX2);
142-
device.option_add_internal("disk_ddx3", MSX_CART_DDX3);
143-
device.option_add_internal("disk_fd03", MSX_CART_FD03);
144-
device.option_add_internal("disk_fd051", MSX_CART_FD051);
145-
device.option_add_internal("disk_fscf351", MSX_CART_FSCF351);
146-
device.option_add_internal("disk_fsfd1", MSX_CART_FSFD1);
147-
device.option_add_internal("disk_fsfd1a", MSX_CART_FSFD1A);
148-
device.option_add_internal("disk_hb3600", MSX_CART_HB3600);
149-
device.option_add_internal("disk_hbd20w", MSX_CART_HBD20W);
150-
device.option_add_internal("disk_hbd50", MSX_CART_HBD50);
151-
device.option_add_internal("disk_hbdf1", MSX_CART_HBDF1);
152-
device.option_add_internal("disk_hxf101pe", MSX_CART_HXF101PE);
153-
device.option_add_internal("disk_mfd001", MSX_CART_MFD001);
154-
device.option_add_internal("disk_ml30dc", MSX_CART_ML30DC);
155-
device.option_add_internal("disk_nms1200", MSX_CART_NMS1200);
156-
device.option_add_internal("disk_tadpf550", MSX_CART_TADPF550);
157-
device.option_add_internal("disk_vy0010", MSX_CART_VY0010);
141+
using namespace bus::msx::cart;
142+
device.option_add_internal(slotoptions::DISK_AVDPF550, MSX_CART_AVDPF550);
143+
device.option_add_internal(slotoptions::DISK_CDX2, MSX_CART_CDX2);
144+
device.option_add_internal(slotoptions::DISK_DDX3, MSX_CART_DDX3);
145+
device.option_add_internal(slotoptions::DISK_FD03, MSX_CART_FD03);
146+
device.option_add_internal(slotoptions::DISK_FD051, MSX_CART_FD051);
147+
device.option_add_internal(slotoptions::DISK_FSCF351, MSX_CART_FSCF351);
148+
device.option_add_internal(slotoptions::DISK_FSFD1, MSX_CART_FSFD1);
149+
device.option_add_internal(slotoptions::DISK_FSFD1A, MSX_CART_FSFD1A);
150+
device.option_add_internal(slotoptions::DISK_HB3600, MSX_CART_HB3600);
151+
device.option_add_internal(slotoptions::DISK_HBD20W, MSX_CART_HBD20W);
152+
device.option_add_internal(slotoptions::DISK_HBD50, MSX_CART_HBD50);
153+
device.option_add_internal(slotoptions::DISK_HBDF1, MSX_CART_HBDF1);
154+
device.option_add_internal(slotoptions::DISK_HXF101PE, MSX_CART_HXF101PE);
155+
device.option_add_internal(slotoptions::DISK_MFD001, MSX_CART_MFD001);
156+
device.option_add_internal(slotoptions::DISK_ML30DC, MSX_CART_ML30DC);
157+
device.option_add_internal(slotoptions::DISK_NMS1200, MSX_CART_NMS1200);
158+
device.option_add_internal(slotoptions::DISK_TADPF550, MSX_CART_TADPF550);
159+
device.option_add_internal(slotoptions::DISK_VY0010, MSX_CART_VY0010);
158160
}
159161

160162

0 commit comments

Comments
 (0)