1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
|
// license:BSD-3-Clause
// copyright-holders:David Haywood
/*
GPL16250 / GPAC800 / GMC384 / GCM420 related support
GPL16250 is the GeneralPlus / SunPlus part number
GPAC800 is the JAKKS Pacific codename
GMC384 / GCM420 is what is printed on the die
----
GPL16250 Mobigo support
the original Mobigo is ROM+RAM config
the Mobigo 2 is NAND+RAM config
cartridges are compatible
*/
#include "emu.h"
#include "includes/generalplus_gpl16250_nand.h"
#include "includes/generalplus_gpl16250_romram.h"
#include "bus/generic/slot.h"
#include "bus/generic/carts.h"
#include "softlist_dev.h"
#include "screen.h"
class mobigo2_state : public generalplus_gpac800_game_state
{
public:
mobigo2_state(const machine_config &mconfig, device_type type, const char *tag) :
generalplus_gpac800_game_state(mconfig, type, tag),
m_cart(*this, "cartslot")
{ }
void mobigo2(machine_config &config);
protected:
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cart_load);
required_device<generic_slot_device> m_cart;
};
class mobigo_state : public wrlshunt_game_state
{
public:
mobigo_state(const machine_config &mconfig, device_type type, const char *tag) :
wrlshunt_game_state(mconfig, type, tag),
m_cart(*this, "cartslot")
{ }
void mobigo(machine_config &config);
void init_mobigo();
protected:
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cart_load);
required_device<generic_slot_device> m_cart;
};
static INPUT_PORTS_START( mobigo )
PORT_START("IN0")
PORT_START("IN1")
PORT_START("IN2")
INPUT_PORTS_END
DEVICE_IMAGE_LOAD_MEMBER(mobigo2_state::cart_load)
{
uint32_t size = m_cart->common_get_size("rom");
m_cart->rom_alloc(size, GENERIC_ROM16_WIDTH, ENDIANNESS_LITTLE);
m_cart->common_load_rom(m_cart->get_rom_base(), size, "rom");
return image_init_result::PASS;
}
DEVICE_IMAGE_LOAD_MEMBER(mobigo_state::cart_load)
{
uint32_t size = m_cart->common_get_size("rom");
m_cart->rom_alloc(size, GENERIC_ROM16_WIDTH, ENDIANNESS_LITTLE);
m_cart->common_load_rom(m_cart->get_rom_base(), size, "rom");
return image_init_result::PASS;
}
void mobigo_state::mobigo(machine_config &config)
{
gcm394_game_state::base(config);
GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "mobigo_cart");
m_cart->set_width(GENERIC_ROM16_WIDTH);
m_cart->set_device_load(FUNC(mobigo_state::cart_load));
//m_cart->set_must_be_loaded(true);
SOFTWARE_LIST(config, "cart_list").set_original("mobigo_cart");
}
void mobigo2_state::mobigo2(machine_config &config)
{
GPAC800(config, m_maincpu, 96000000/2, m_screen); // Doesn't have GPnandnand header in NAND tho, so non-standard bootloader
m_maincpu->porta_in().set(FUNC(mobigo2_state::porta_r));
m_maincpu->portb_in().set(FUNC(mobigo2_state::portb_r));
m_maincpu->portc_in().set(FUNC(mobigo2_state::portc_r));
m_maincpu->porta_out().set(FUNC(mobigo2_state::porta_w));
m_maincpu->space_read_callback().set(FUNC(mobigo2_state::read_external_space));
m_maincpu->space_write_callback().set(FUNC(mobigo2_state::write_external_space));
m_maincpu->set_irq_acknowledge_callback(m_maincpu, FUNC(sunplus_gcm394_base_device::irq_vector_cb));
m_maincpu->add_route(ALL_OUTPUTS, "lspeaker", 0.5);
m_maincpu->add_route(ALL_OUTPUTS, "rspeaker", 0.5);
m_maincpu->set_bootmode(0); // boot from internal ROM (NAND bootstrap)
m_maincpu->set_cs_config_callback(FUNC(mobigo2_state::cs_callback));
m_maincpu->nand_read_callback().set(FUNC(mobigo2_state::read_nand));
FULL_MEMORY(config, m_memory).set_map(&mobigo2_state::cs_map_base);
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_refresh_hz(60);
m_screen->set_size(320*2, 262*2);
m_screen->set_visarea(0, (320*2)-1, 0, (240*2)-1);
m_screen->set_screen_update("maincpu", FUNC(sunplus_gcm394_device::screen_update));
m_screen->screen_vblank().set(m_maincpu, FUNC(sunplus_gcm394_device::vblank));
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "mobigo_cart");
m_cart->set_width(GENERIC_ROM16_WIDTH);
m_cart->set_device_load(FUNC(mobigo2_state::cart_load));
//m_cart->set_must_be_loaded(true);
SOFTWARE_LIST(config, "cart_list").set_original("mobigo_cart");
}
void mobigo_state::init_mobigo()
{
m_sdram.resize(0x400000); // 0x400000 bytes, 0x800000 words (needs verifying)
}
ROM_START( mobigo )
//ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 ) // not on this model? (or at least not this size, as CS base is different)
//ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP )
ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00)
ROM_LOAD16_WORD_SWAP("mobigo.bin", 0x0000, 0x800000, CRC(49479bad) SHA1(4ee82c7ba13072cf25a34893cf6272f2da5d8928) )
ROM_END
ROM_START( mobigos )
//ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 ) // not on this model? (or at least not this size, as CS base is different)
//ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP )
ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00)
ROM_LOAD16_WORD_SWAP("mobigospanish.bin", 0x0000, 0x200000, CRC(462b4f9d) SHA1(1541152f1a359bc18de4d4f3d5038a954c9a3ad4))
ROM_END
ROM_START( mobigo2 )
ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 )
ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP ) // doesn't have GPnandnand header in NAND, so bootstrap is likely custom
ROM_REGION( 0x8400000, "nandrom", ROMREGION_ERASE00 )
ROM_LOAD( "mobigo2_bios_ger.bin", 0x00000, 0x8400000, CRC(d5ab613d) SHA1(6fb104057dc3484fa958e2cb20c5dd0c19589f75) ) // SPANSION S34ML01G100TF100
ROM_END
CONS( 2010, mobigo, 0, 0, mobigo, mobigo, mobigo_state, init_mobigo , "VTech", "MobiGo", MACHINE_IS_SKELETON )
CONS( 2010, mobigos, mobigo, 0, mobigo, mobigo, mobigo_state, init_mobigo , "VTech", "MobiGo (Spain)", MACHINE_IS_SKELETON )
CONS( 2012, mobigo2, 0, 0, mobigo2, mobigo, mobigo2_state, nand_init840, "VTech", "MobiGo 2 (Germany)", MACHINE_IS_SKELETON )
|