8
8
for JAMMA use.
9
9
10
10
TODO:
11
- - remove m_input_hack functions, needed to make inputs working
12
- - lsrquiz2i, lsrquizg: access violation on microtouch_device destructor when exiting emulation
13
- Caused by microtouch_device::rcv_complete() overrunning the m_rx_buffer
14
- array space with 149 (array size=16).
15
-
11
+ - remove m_input_hack functions, needed to make inputs working;
12
+ - extra RTC device mapped on i2c bus (shared with the Akiko one?);
13
+ - later gambling games requires extra hopper devices;
16
14
17
15
Known Games:
18
16
Dumped | Title | Rev. | Year | Notes
@@ -320,6 +318,7 @@ routines :
320
318
#include " amiga.h"
321
319
#include " imagedev/cdromimg.h"
322
320
#include " machine/microtch.h"
321
+ #include " machine/nvram.h"
323
322
#include " speaker.h"
324
323
325
324
@@ -338,6 +337,7 @@ class cubo_state : public amiga_state
338
337
, m_player_ports(*this , {" P1" , " P2" })
339
338
, m_microtouch(*this , " microtouch" )
340
339
, m_akiko(*this , " akiko" )
340
+ , m_nvram(*this , " nvram" )
341
341
{ }
342
342
343
343
void handle_joystick_cia (uint8_t pra, uint8_t dra);
@@ -369,12 +369,14 @@ class cubo_state : public amiga_state
369
369
void cubo_mem (address_map &map) ATTR_COLD;
370
370
void overlay_2mb_map32 (address_map &map) ATTR_COLD;
371
371
protected:
372
+ virtual void machine_start () override ;
372
373
virtual void rs232_tx (int state) override ;
373
374
virtual void potgo_w (uint16_t data) override ;
374
375
375
376
private:
376
377
required_device<microtouch_device> m_microtouch;
377
378
required_device<akiko_device> m_akiko;
379
+ required_device<nvram_device> m_nvram;
378
380
379
381
typedef void (cubo_state::*input_hack_func)();
380
382
input_hack_func m_input_hack{};
@@ -386,8 +388,19 @@ class cubo_state : public amiga_state
386
388
void lasstixx_input_hack ();
387
389
void mgnumber_input_hack ();
388
390
void mgprem11_input_hack ();
391
+
392
+ std::unique_ptr<u8 []> m_nvram_data;
389
393
};
390
394
395
+ void cubo_state::machine_start ()
396
+ {
397
+ amiga_state::machine_start ();
398
+
399
+ m_nvram_data = make_unique_clear<u8 []>(0x800 );
400
+ subdevice<nvram_device>(" nvram" )->set_base (&m_nvram_data[0 ], 0x800 );
401
+
402
+ save_pointer (NAME (m_nvram_data), 0x800 );
403
+ }
391
404
392
405
void cubo_state::akiko_int_w (int state)
393
406
{
@@ -435,8 +448,14 @@ void cubo_state::cubo_mem(address_map &map)
435
448
{
436
449
map.unmap_value_high ();
437
450
map (0x000000 , 0x1fffff ).m (m_overlay, FUNC (address_map_bank_device::amap32));
451
+ map (0x600000 , 0x601fff ).lrw8 (
452
+ NAME ([this ] (offs_t offset) { return m_nvram_data[offset]; }),
453
+ NAME ([this ] (offs_t offset, u8 data) { m_nvram_data[offset] = data; })
454
+ ).umask32 (0x000000ff );
438
455
map (0x800000 , 0x800003 ).portr (" DIPSW1" );
456
+ map (0x800008 , 0x80000b ).portw (" OUTPUT1" );
439
457
map (0x800010 , 0x800013 ).portr (" DIPSW2" );
458
+ map (0x800018 , 0x80001b ).portw (" OUTPUT2" );
440
459
map (0xa80000 , 0xb7ffff ).noprw ();
441
460
map (0xb80000 , 0xb8003f ).rw (m_akiko, FUNC (akiko_device::read), FUNC (akiko_device::write));
442
461
map (0xbf0000 , 0xbfffff ).rw (FUNC (cubo_state::cia_r), FUNC (cubo_state::gayle_cia_w));
@@ -638,7 +657,7 @@ static INPUT_PORTS_START( cubo )
638
657
PORT_DIPNAME( 0x02 , 0x02 , " DSW2 2" )
639
658
PORT_DIPSETTING( 0x02 , " Reset" )
640
659
PORT_DIPSETTING( 0x00 , " Set" )
641
- PORT_DIPNAME( 0x04 , 0x04 , " DSW2 3" )
660
+ PORT_DIPNAME( 0x04 , 0x04 , " DSW2 3" ) // PIC data
642
661
PORT_DIPSETTING( 0x04 , " Reset" )
643
662
PORT_DIPSETTING( 0x00 , " Set" )
644
663
PORT_DIPNAME( 0x08 , 0x08 , " DSW2 4" )
@@ -647,7 +666,7 @@ static INPUT_PORTS_START( cubo )
647
666
PORT_DIPNAME( 0x10 , 0x10 , " DSW2 5" )
648
667
PORT_DIPSETTING( 0x10 , " Reset" )
649
668
PORT_DIPSETTING( 0x00 , " Set" )
650
- PORT_DIPNAME( 0x20 , 0x20 , " DSW2 6" )
669
+ PORT_DIPNAME( 0x20 , 0x20 , " DSW2 6" ) // i2c SDA for RTC
651
670
PORT_DIPSETTING( 0x20 , " Reset" )
652
671
PORT_DIPSETTING( 0x00 , " Set" )
653
672
PORT_DIPNAME( 0x40 , 0x40 , " DSW2 7" )
@@ -656,6 +675,20 @@ static INPUT_PORTS_START( cubo )
656
675
PORT_DIPNAME( 0x80 , 0x80 , " DSW2 8" )
657
676
PORT_DIPSETTING( 0x80 , " Reset" )
658
677
PORT_DIPSETTING( 0x00 , " Set" )
678
+
679
+ PORT_START(" OUTPUT1" )
680
+ // bit 1 pic clock
681
+ // bit 2 hopper related
682
+ // bit 3 pic data write
683
+ // bit 6 pic enable
684
+ // bit 7 hopper motor
685
+
686
+ PORT_START(" OUTPUT2" )
687
+ // bit 0 chip select (0) normal ticket (1) "Suzo" / "MKXX" motor, "erogatore megagettoni"
688
+ // bit 4 ticket motor out
689
+ // bit 5 i2c RTC data
690
+ // bit 6 i2c RTC CS?
691
+ // bit 7 i2c RTC clock
659
692
INPUT_PORTS_END
660
693
661
694
static INPUT_PORTS_START( cndypuzl )
@@ -1082,6 +1115,8 @@ void cubo_state::cubo(machine_config &config)
1082
1115
1083
1116
I2C_24C08 (config, " i2cmem" , 0 ); // AT24C08N
1084
1117
1118
+ NVRAM (config, " nvram" , nvram_device::DEFAULT_ALL_1); // unknown type, odeontw accesses it
1119
+
1085
1120
AKIKO (config, m_akiko, 0 );
1086
1121
m_akiko->mem_r_callback ().set (FUNC (amiga_state::chip_ram_r));
1087
1122
m_akiko->mem_w_callback ().set (FUNC (amiga_state::chip_ram_w));
@@ -1157,76 +1192,109 @@ void cubo_state::init_cubo()
1157
1192
ROM_START ( cndypuzl )
1158
1193
CD32_BIOS
1159
1194
1195
+ ROM_REGION (0x1000 , " pic" , 0 ) // unknown type
1196
+ ROM_LOAD ( " pic.bin" , 0x000000 , 0x1000 , NO_DUMP )
1197
+
1160
1198
DISK_REGION ( " akiko" )
1161
1199
DISK_IMAGE_READONLY ( " cndypuzl" , 0 , BAD_DUMP SHA1 (5f41ed3521b3e05d233ac1245b78cb0b118b2b90) )
1162
1200
ROM_END
1163
1201
1164
1202
ROM_START( haremchl )
1165
1203
CD32_BIOS
1166
1204
1205
+ ROM_REGION(0x1000 , " pic" , 0 ) // unknown type
1206
+ ROM_LOAD( " pic.bin" , 0x000000 , 0x1000 , NO_DUMP )
1207
+
1167
1208
DISK_REGION( " akiko" )
1168
1209
DISK_IMAGE_READONLY( " haremchl" , 0 , BAD_DUMP SHA1 (abbab347c0d7c5eef0465d0eee770754a452e874) )
1169
1210
ROM_END
1170
1211
1171
1212
ROM_START( lsrquiz )
1172
1213
CD32_BIOS
1173
1214
1215
+ ROM_REGION(0x1000 , " pic" , 0 ) // unknown type
1216
+ ROM_LOAD( " pic.bin" , 0x000000 , 0x1000 , NO_DUMP )
1217
+
1174
1218
DISK_REGION( " akiko" )
1175
1219
DISK_IMAGE_READONLY( " lsrquiz" , 0 , BAD_DUMP SHA1 (41fb6cd0c9d36bd77e9c3db69d36801edc791e96) )
1176
1220
ROM_END
1177
1221
1178
1222
ROM_START( lsrquiz2i )
1179
1223
CD32_BIOS
1180
1224
1225
+ ROM_REGION(0x1000 , " pic" , 0 ) // unknown type
1226
+ ROM_LOAD( " pic.bin" , 0x000000 , 0x1000 , NO_DUMP )
1227
+
1181
1228
DISK_REGION( " akiko" )
1182
1229
DISK_IMAGE_READONLY( " lsrquiz2" , 0 , BAD_DUMP SHA1 (78e261df1c548fa492e6cf37a9469640bb8816bf) )
1183
1230
ROM_END
1184
1231
1185
1232
ROM_START( lsrquizg )
1186
1233
CD32_BIOS
1187
1234
1235
+ ROM_REGION(0x1000 , " pic" , 0 ) // unknown type
1236
+ ROM_LOAD( " pic.bin" , 0x000000 , 0x1000 , NO_DUMP )
1237
+
1188
1238
DISK_REGION( " akiko" )
1189
1239
DISK_IMAGE_READONLY( " laserquizgreek2pro" , 0 , BAD_DUMP SHA1 (8538915b4a0078f19197a5562e37ed3e6d0429a4) )
1190
1240
ROM_END
1191
1241
1192
1242
ROM_START( mgprem11 )
1193
1243
CD32_BIOS
1194
1244
1245
+ ROM_REGION(0x1000 , " pic" , 0 ) // unknown type
1246
+ ROM_LOAD( " pic.bin" , 0x000000 , 0x1000 , NO_DUMP )
1247
+
1195
1248
DISK_REGION( " akiko" )
1196
1249
DISK_IMAGE_READONLY( " mgprem11" , 0 , BAD_DUMP SHA1 (7808db33d5949f6c86d12b32bc388c12377e7038) )
1197
1250
ROM_END
1198
1251
1199
1252
ROM_START( lasstixx )
1200
1253
CD32_BIOS
1201
1254
1255
+ ROM_REGION(0x1000 , " pic" , 0 ) // unknown type
1256
+ ROM_LOAD( " pic.bin" , 0x000000 , 0x1000 , NO_DUMP )
1257
+
1202
1258
DISK_REGION( " akiko" )
1203
1259
DISK_IMAGE_READONLY( " lasstixx" , 0 , BAD_DUMP SHA1 (b8f6138e1f1840c193e786c56dab03c512f3e21f) )
1204
1260
ROM_END
1205
1261
1206
1262
ROM_START( mgnumber )
1207
1263
CD32_BIOS
1208
1264
1265
+ ROM_REGION(0x1000 , " pic" , 0 ) // unknown type
1266
+ ROM_LOAD( " pic.bin" , 0x000000 , 0x1000 , NO_DUMP )
1267
+
1209
1268
DISK_REGION( " akiko" )
1210
1269
DISK_IMAGE_READONLY( " magicnumber" , 0 , BAD_DUMP SHA1 (60e1fadc42694742d19cc0ac2b6e99e9e33faa3d) )
1211
1270
ROM_END
1212
1271
1213
1272
ROM_START( odeontw )
1214
1273
CD32_BIOS
1215
1274
1275
+ ROM_REGION(0x1000 , " pic" , 0 ) // unknown type
1276
+ ROM_LOAD( " pic.bin" , 0x000000 , 0x1000 , NO_DUMP )
1277
+
1216
1278
DISK_REGION( " akiko" )
1217
1279
DISK_IMAGE_READONLY( " twister32_17_3" , 0 , BAD_DUMP SHA1 (a40ec484708e22059f7186415283084ebf01323e) ) // has its audio cut a little, worth to mark as redump needed
1218
1280
ROM_END
1219
1281
1220
1282
ROM_START( odeontw2 )
1221
1283
CD32_BIOS
1222
1284
1285
+ ROM_REGION(0x1000 , " pic" , 0 ) // unknown type
1286
+ ROM_LOAD( " pic.bin" , 0x000000 , 0x1000 , NO_DUMP )
1287
+
1223
1288
DISK_REGION( " akiko" )
1224
1289
DISK_IMAGE_READONLY( " odeontw2" , 0 , BAD_DUMP SHA1 (f39e09f35b65a6ae9f1eba4a22f970626b7d3b71) )
1225
1290
ROM_END
1226
1291
1227
1292
ROM_START( eldoralg )
1228
1293
CD32_BIOS
1229
1294
1295
+ ROM_REGION(0x1000 , " pic" , 0 ) // unknown type
1296
+ ROM_LOAD( " pic.bin" , 0x000000 , 0x1000 , NO_DUMP )
1297
+
1230
1298
DISK_REGION( " akiko" )
1231
1299
DISK_IMAGE_READONLY( " eldorado" , 0 , BAD_DUMP SHA1 (bc1617c2e3438b729421c1d8b1bf88840b12f030) )
1232
1300
ROM_END
@@ -1372,9 +1440,9 @@ GAME( 1995, lsrquiz2i, cubo, cubo, lsrquiz2, cubo_state, init_lsrquiz2, ROT0, "C
1372
1440
GAME( 1995 , lasstixx, cubo, cubo, lasstixx, cubo_state, init_lasstixx, ROT0, " CD Express" , " Laser Strixx 2" , MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
1373
1441
GAME( 1995 , mgnumber, cubo, cubo, mgnumber, cubo_state, init_mgnumber, ROT0, " CD Express" , " Magic Number" , MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
1374
1442
GAME( 1996 , mgprem11, cubo, cubo, mgprem11, cubo_state, init_mgprem11, ROT0, " CD Express" , " Magic Premium (v1.1)" , MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
1375
- GAME( 1997 , eldoralg, cubo, cubo, eldoralg, cubo_state, init_cubo, ROT0, " Shangai Games" , " Eldorado (4.2)" , MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // touchscreen is offset and cannot be calibrated , joystick buttons aren't recognized properly, has slight GFX bug with roulette ball
1376
- GAME( 1998 , odeontw, cubo, cubo, eldoralg, cubo_state, init_cubo, ROT0, " CD Express" , " Odeon Twister (v1.4)" , MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // "Invalid NVRAM", accesses area $6xxxxx and claims invalid RAM config if bypassed
1377
- GAME( 1998 , odeontw2, cubo, cubo, eldoralg, cubo_state, init_cubo, ROT0, " CD Express" , " Odeon Twister 2 (v202.19)" , MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // Resets halfway thru "please wait" in service mode, therefore NVRAM cannot be inited
1443
+ GAME( 1997 , eldoralg, cubo, cubo, eldoralg, cubo_state, init_cubo, ROT0, " Shangai Games" , " Eldorado (4.2)" , MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // touchscreen is offset and throws errors in calibration menu , joystick buttons aren't recognized properly in places, uses SPRES=3 (SHRES) for roulette ball in attract
1444
+ GAME( 1998 , odeontw, cubo, cubo, eldoralg, cubo_state, init_cubo, ROT0, " CD Express" , " Odeon Twister (v1.4)" , MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // claims invalid RAM config once intialized (i2c RTC?), hangs with NVRAM viewer in service mode
1445
+ GAME( 1998 , odeontw2, cubo, cubo, eldoralg, cubo_state, init_cubo, ROT0, " CD Express" , " Odeon Twister 2 (v202.19)" , MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // "Security checking failed" once initialized
1378
1446
// Laser Gate 2, alt title for Eldorado?
1379
1447
// Lucky Five
1380
1448
// Greyhound Race
0 commit comments