@@ -21,6 +21,7 @@ class spg2xx_lexizeus_game_state : public spg2xx_game_state
2121 void lexizeus (machine_config &config);
2222
2323 void init_zeus ();
24+ void init_cybrtvfe ();
2425
2526protected:
2627 // virtual void machine_start() override ATTR_COLD;
@@ -55,6 +56,18 @@ class spg2xx_cybrtvfe_game_state : public spg2xx_lexiseal_game_state
5556 virtual void portb_w (offs_t offset, uint16_t data, uint16_t mem_mask = ~0 ) override ;
5657};
5758
59+ class spg2xx_cybrtvbb_game_state : public spg2xx_cybrtvfe_game_state
60+ {
61+ public:
62+ spg2xx_cybrtvbb_game_state (const machine_config &mconfig, device_type type, const char *tag) :
63+ spg2xx_cybrtvfe_game_state (mconfig, type, tag)
64+ { }
65+
66+ void cybrtvbb (machine_config& config);
67+
68+ protected:
69+ virtual void portc_w (offs_t offset, uint16_t data, uint16_t mem_mask = ~0 ) override ;
70+ };
5871
5972class spg2xx_vsplus_game_state : public spg2xx_lexizeus_game_state
6073{
@@ -233,6 +246,13 @@ static INPUT_PORTS_START( lexiseal )
233246 PORT_BIT( 0xfffc , IP_ACTIVE_LOW, IPT_UNUSED )
234247INPUT_PORTS_END
235248
249+ static INPUT_PORTS_START( cybrtvbb )
250+ PORT_INCLUDE( lexiseal )
251+
252+ PORT_MODIFY(" P3" )
253+ PORT_BIT( 0x80 , IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER(" i2cmem" , FUNC(i2cmem_device::read_sda))
254+ INPUT_PORTS_END
255+
236256static INPUT_PORTS_START( vsplus )
237257 PORT_START(" P1" )
238258 PORT_BIT( 0x0001 , IP_ACTIVE_LOW, IPT_JOYSTICK_UP )
@@ -288,6 +308,15 @@ void spg2xx_vsplus_game_state::portb_w(offs_t offset, uint16_t data, uint16_t me
288308 }
289309}
290310
311+ void spg2xx_cybrtvbb_game_state::portc_w (offs_t offset, uint16_t data, uint16_t mem_mask)
312+ {
313+ logerror (" %s: portc_w %04x %04x masked %04x\n " , machine ().describe_context (), data, mem_mask, data & mem_mask);
314+
315+ m_i2cmem->write_sda (BIT (mem_mask, 7 ) ? BIT (data, 7 ) : 1 );
316+ m_i2cmem->write_scl (BIT (mem_mask, 8 ) ? BIT (data, 8 ) : 0 );
317+ }
318+
319+
291320void spg2xx_lexiseal_game_state::lexiseal (machine_config &config)
292321{
293322 non_spg_base (config);
@@ -297,6 +326,15 @@ void spg2xx_lexiseal_game_state::lexiseal(machine_config &config)
297326 m_maincpu->portc_in ().set_ioport (" P3" );
298327}
299328
329+ void spg2xx_cybrtvbb_game_state::cybrtvbb (machine_config &config)
330+ {
331+ lexiseal (config);
332+ m_maincpu->portc_out ().set (FUNC (spg2xx_cybrtvbb_game_state::portc_w));
333+
334+ // cybrtvfe has a position for this too, but it's unpopulated
335+ I2C_24C02 (config, " i2cmem" , 0 );
336+ }
337+
300338void spg2xx_lexizeus_game_state::lexizeus (machine_config &config)
301339{
302340 non_spg_base (config);
@@ -348,6 +386,13 @@ void spg2xx_lexizeus_game_state::init_zeus()
348386 }
349387}
350388
389+ void spg2xx_lexizeus_game_state::init_cybrtvfe ()
390+ {
391+ init_zeus ();
392+ int size = memregion (" maincpu" )->bytes ();
393+ init_crc (size / 0x800000 , 0xc00 );
394+ }
395+
351396void spg2xx_vsplus_game_state::init_vsplus ()
352397{
353398 uint16_t *ROM = (uint16_t *)memregion (" maincpu" )->base ();
@@ -388,9 +433,27 @@ ROM_END
388433
389434ROM_START ( cybrtvfe )
390435 ROM_REGION ( 0x4000000 , " maincpu" , ROMREGION_ERASE00 )
436+ // Block 0 Calculated Byte Sum of bytes from 0x00000c10 to 0x007fffff is 3482e6f7, in header 3482E6F7
437+ // Block 1 Calculated Byte Sum of bytes from 0x00800c10 to 0x00ffffff is 2f5fab76, in header 2F5FAB76
438+ // Block 2 Calculated Byte Sum of bytes from 0x01000c10 to 0x017fffff is 29dcb774, in header 29DCB774
439+ // Block 3 Calculated Byte Sum of bytes from 0x01800c10 to 0x01ffffff is 2ac8e204, in header 2AC8E204
440+ // Block 4 Calculated Byte Sum of bytes from 0x02000c10 to 0x027fffff is 2eb7963d, in header 2EB7963D
441+ // Block 5 Calculated Byte Sum of bytes from 0x02800c10 to 0x02ffffff is 372ddefe, in header 372DDEFE
442+ // Block 6 Calculated Byte Sum of bytes from 0x03000c10 to 0x037fffff is 129dee7c, in header 129DEE7C
443+ // Block 7 Calculated Byte Sum of bytes from 0x03800c10 to 0x03ffffff is 129dee7c, in header 129DEE7C
391444 ROM_LOAD16_WORD_SWAP ( " jl2500fe.u6" , 0x0000 , 0x4000000 , CRC(2fce6685) SHA1(6fc329204fdb401c72884349f29201fb783fe2ea) )
392445ROM_END
393446
447+ ROM_START ( cybrtvbb )
448+ ROM_REGION ( 0x4000000 , " maincpu" , ROMREGION_ERASE00 )
449+ // Block 0 Calculated Byte Sum of bytes from 0x00000c10 to 0x007fffff is 2bd64edb, in header 2BD64EDB
450+ // Block 1 Calculated Byte Sum of bytes from 0x00800c10 to 0x00ffffff is 30f4f3f0, in header 30F4F3F0
451+ // Block 2 Calculated Byte Sum of bytes from 0x01000c10 to 0x017fffff is 2c24e8d5, in header 2C24E8D5
452+ // Block 3 Calculated Byte Sum of bytes from 0x01800c10 to 0x01ffffff is 320d1f5a, in header 320D1F5A
453+ ROM_LOAD16_WORD_SWAP ( " jl2500bb.u6" , 0x0000 , 0x2000000 , CRC(8d6e0c99) SHA1(e54660381ff20ecf9b023da7703802f256f7fba5) )
454+ ROM_RELOAD (0x2000000 ,0x2000000 )
455+ ROM_END
456+
394457/*
395458
396459VG Caplet ROM pinout from Sean Riddle (2 ROMs in single package)
@@ -461,7 +524,9 @@ CONS( 200?, arcade3d, 0, 0, lexizeus, lexiseal, spg2xx_lexizeu
461524CONS( 200 ?, vsplus, 0 , 0 , vsplus, vsplus, spg2xx_vsplus_game_state, init_vsplus, " <unknown> / JungleTac" , " Vs Power Plus 30-in-1" , MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
462525
463526// marked as SPG260
464- CONS( 2010 , cybrtvfe, 0 , 0 , lexiseal, lexiseal, spg2xx_cybrtvfe_game_state, init_zeus, " Lexibook" , " Cyber Arcade TV - Ferrari (JL2500FE)" , MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
527+ CONS( 2010 , cybrtvfe, 0 , 0 , lexiseal, lexiseal, spg2xx_cybrtvfe_game_state, init_cybrtvfe, " Lexibook" , " Cyber Arcade TV - Ferrari 105-in-1 (JL2500FE)" , MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
528+ // need to hook up seeprom
529+ CONS( 2010 , cybrtvbb, 0 , 0 , cybrtvbb, cybrtvbb, spg2xx_cybrtvbb_game_state, init_cybrtvfe, " Lexibook" , " Cyber Arcade TV - Barbie 75-in-1 (JL2500BB)" , MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
465530
466531CONS( 200 ?, lexiseal, 0 , 0 , lexiseal, lexiseal, spg2xx_lexiseal_game_state, init_zeus, " Lexibook / Sit Up Limited / JungleTac" , " Seal 50-in-1" , MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // also has bad sound in Tiger Rescue, but no corrupt tilemap
467532// There are versions of the Seal 50-in-1 that actually show Lexibook on the boot screen rather than it just being on the unit. The Seal name was also used for some VT systems
0 commit comments