mirror of
https://github.com/holub/mame
synced 2025-06-30 07:58:56 +03:00
efo/cedar_magnet.cpp: Add a new game, ordered the games on the driver... (#11543)
* efo/cedar_magnet.cpp: Add a new game, ordered the games on the driver, and reformatted comments New WORKING clone ------------------------ Booby Kids (Magnet System) [Hugo Benedet, Recreativas.org]
This commit is contained in:
parent
f1dd0d0651
commit
86c6e83b4c
@ -3,26 +3,26 @@
|
||||
// thanks to: Ricky2001, ArcadeHacker, IFW
|
||||
|
||||
/*
|
||||
todo:
|
||||
- fix sound emulation (speed needs verifying + sample playback)
|
||||
- fix sprite communication / banking
|
||||
TODO:
|
||||
- Fix sound emulation (speed needs verifying + sample playback)
|
||||
- Fix sprite communication / banking
|
||||
* bit "output bit 0x02 %d (IC21)" at 0x42 might be important
|
||||
* mag_exzi currently requires a gross hack to stop the sprite CPU crashing on startup
|
||||
* mag_xain sometimes leaves old sprites on the screen, probably due to a lost clear
|
||||
command
|
||||
- fix flipscreen
|
||||
- verify behavior of unknown / unused ports / interrupt sources etc.
|
||||
- verify the disk images, convert to a better format that can natively store protection
|
||||
- Fix flipscreen
|
||||
- Verify behavior of unknown / unused ports / interrupt sources etc.
|
||||
- Verify the disk images, convert to a better format that can natively store protection
|
||||
* RAW data also available if required
|
||||
* as mentioned, the disks are copy protected, see notes below
|
||||
- Use proper floppy drive emulation code that originally came from MESS (tied with above)
|
||||
- verify all clocks and screen params (50hz seems to match original videos)
|
||||
- work out why we need a protection hack and replace it with proper emulation
|
||||
- Verify all clocks and screen params (50hz seems to match original videos)
|
||||
- Work out why we need a protection hack and replace it with proper emulation
|
||||
* there are no per-game protection devices, so it's something to do with the base hardware
|
||||
* there seem to be 2 checks, one based on a weird sector on the discs, the other based on
|
||||
a port read
|
||||
- add additional hardware notes from ArcadeHacker
|
||||
- layer enables on War Mission? (transitions from title screen etc.)
|
||||
- Add additional hardware notes from ArcadeHacker
|
||||
- Layer enables on War Mission? (transitions from title screen etc.)
|
||||
|
||||
notes:
|
||||
- high scores will be defaulted if the data in the table is corrupt, the games give no
|
||||
@ -31,50 +31,49 @@
|
||||
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
|
||||
Magnet System by
|
||||
|
||||
EFO SA (Electrónica Funcional Operativa SA).
|
||||
based on Cedar hardware
|
||||
|
||||
Magnet System by EFO SA (Electrónica Funcional Operativa SA).
|
||||
Based on Cedar hardware
|
||||
|
||||
http://retrolaser.es/cedar-computer-el-ordenador-profesional-de-efo-sa/
|
||||
http://www.recreativas.org/magnet-system-2427-efosa
|
||||
|
||||
A number of original games as well as conversions were advertised for this system, it is however
|
||||
believed that EFO went bankrupt before anything hit the market. The only 3 dumped games are
|
||||
conversions and appear to be in incomplete states (it is rather easy to break Time Scanner for
|
||||
example, the ball simply gets stuck in some places) These are not simply bootlegs, they're
|
||||
completely original pieces of code more akin to home computer ports.
|
||||
believed that EFO went bankrupt before anything hit the market. The conversions are not simply
|
||||
bootlegs, they're completely original pieces of code more akin to home computer ports.
|
||||
|
||||
The following were advertised
|
||||
Original Games
|
||||
- A Day in Space ** *
|
||||
- Crazy Driver
|
||||
- Jungle Trophy
|
||||
- Quadrum
|
||||
- War Mission ** *
|
||||
- The Burning Cave *
|
||||
- Scorpio
|
||||
- Paris Dakar ** *
|
||||
- Sailing Race
|
||||
- Formula
|
||||
- Jungle Trophy
|
||||
- Paris Dakar ** *
|
||||
- Quadrum
|
||||
- Sailing Race
|
||||
- Scorpio
|
||||
- The Burning Cavern *
|
||||
- War Mission ** *
|
||||
|
||||
Ports / Conversions
|
||||
- Exzisus *
|
||||
- Booby Kids *
|
||||
- Cocomania (Pacmania)
|
||||
- Dodge Ball
|
||||
- Double Dragon
|
||||
- Dracula's Castle (Haunted House)
|
||||
- Exzisus *
|
||||
- Flying Shark
|
||||
- Super Contra
|
||||
- Time Scanner *
|
||||
- Twin Eagle
|
||||
- World Wars (Bermuda Triangle)
|
||||
- Xain d'Sleena *
|
||||
- Boody Kids (Booby Kids?)
|
||||
|
||||
** screenshots present on flyer
|
||||
* dumps exist
|
||||
|
||||
|
||||
|
||||
Disk Protection
|
||||
|
||||
Sectors are 1024 (0x400) bytes long but marked on the disc as 512 bytes as a copy protection
|
||||
@ -100,7 +99,7 @@ The hardware consists of 5 main PCBs in a cage.
|
||||
1x Sprite PCB
|
||||
|
||||
On some systems, there are small memory sub-boards on the Master PCB and Sprite PCB; due to the awkwardness of
|
||||
the banking at times (and the fact that even with 4 banks of 256 colours, only one can be active)
|
||||
the banking at times (and the fact that even with 4 banks of 256 colours, only one can be active).
|
||||
I suspect the additional memory was an afterthought.
|
||||
|
||||
SOUND BOARD
|
||||
@ -171,6 +170,8 @@ MASTER BOARD
|
||||
|__ CONN |
|
||||
|________________________________________________________________________|
|
||||
|
||||
Xtal 1 = 16.000 MHz
|
||||
Xtal 2 = 20.000 MHz
|
||||
|
||||
PLANES BOARD
|
||||
___________________________________________________________________________
|
||||
@ -265,7 +266,6 @@ MASTER BOARD
|
||||
| __________ |
|
||||
| |MC74HC157| |
|
||||
|________________________________________________________________________|
|
||||
|
||||
*/
|
||||
|
||||
#include "emu.h"
|
||||
@ -463,18 +463,18 @@ void cedar_magnet_state::cedar_magnet_io(address_map &map)
|
||||
|
||||
void cedar_magnet_state::cedar_bank0(address_map &map)
|
||||
{
|
||||
/* memory configuration 0 */
|
||||
// Memory configuration 0
|
||||
map(0x00000, 0x0ffff).m(m_sub_ram_bankdev, FUNC(address_map_bank_device::amap8));
|
||||
|
||||
/* memory configuration 1 */
|
||||
// Memory configuration 1
|
||||
map(0x10000, 0x1dfff).m(m_sub_ram_bankdev, FUNC(address_map_bank_device::amap8));
|
||||
map(0x1e000, 0x1ffff).rom().region("maincpu", 0x0000);
|
||||
|
||||
/* memory configuration 2*/
|
||||
// memory configuration 2
|
||||
map(0x20000, 0x2bfff).m(m_sub_ram_bankdev, FUNC(address_map_bank_device::amap8));
|
||||
map(0x2c000, 0x2ffff).rw(FUNC(cedar_magnet_state::other_cpu_r), FUNC(cedar_magnet_state::other_cpu_w));
|
||||
|
||||
/* memory configuration 3*/
|
||||
// memory configuration 3
|
||||
map(0x30000, 0x31fff).rom().region("maincpu", 0x0000).mirror(0x0e000);
|
||||
}
|
||||
|
||||
@ -865,7 +865,6 @@ void cedar_magnet_state::ic49_pio_pb_w(u8 data) // 0x42
|
||||
LOGMASKED(LOG_IC49_PIO_PB, "output bit 0x01 (LED) %d\n", (data >> 0)&1); // B0 -> LED LD1
|
||||
|
||||
|
||||
|
||||
int soundselect = (m_ic49_pio_pb_val & 0x70) >> 4;
|
||||
|
||||
handle_sub_board_cpu_lines(*m_cedsound, oldsoundselect, soundselect);
|
||||
@ -937,8 +936,8 @@ INTERRUPT_GEN_MEMBER(cedar_magnet_state::irq)
|
||||
|
||||
void cedar_magnet_state::cedar_magnet(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
Z80(config, m_maincpu, 4000000); /* ? MHz */
|
||||
// Basic machine hardware
|
||||
Z80(config, m_maincpu, 4000000); // ? MHz
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &cedar_magnet_state::cedar_magnet_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &cedar_magnet_state::cedar_magnet_io);
|
||||
m_maincpu->set_vblank_int("screen", FUNC(cedar_magnet_state::irq));
|
||||
@ -961,7 +960,7 @@ void cedar_magnet_state::cedar_magnet(machine_config &config)
|
||||
m_ic49_pio->in_pb_callback().set(FUNC(cedar_magnet_state::ic49_pio_pb_r));
|
||||
m_ic49_pio->out_pb_callback().set(FUNC(cedar_magnet_state::ic49_pio_pb_w));
|
||||
|
||||
/* video hardware */
|
||||
// Video hardware
|
||||
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
|
||||
screen.set_refresh_hz(50);
|
||||
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
|
||||
@ -982,146 +981,19 @@ void cedar_magnet_state::cedar_magnet(machine_config &config)
|
||||
config.set_perfect_quantum(m_maincpu);
|
||||
}
|
||||
|
||||
|
||||
#define BIOS_ROM \
|
||||
ROM_REGION( 0x10000, "maincpu", 0 ) \
|
||||
ROM_LOAD( "magnet-master-vid-e03.bin", 0x00000, 0x02000, CRC(86c4a4f0) SHA1(6db1a006b2e0b2a7cc9748ade881debb098b6757) )
|
||||
|
||||
|
||||
|
||||
ROM_START( cedmag )
|
||||
BIOS_ROM
|
||||
|
||||
ROM_REGION( 0x100000, "flop:disk", ROMREGION_ERASE00 )
|
||||
// no disk inserted
|
||||
ROM_END
|
||||
|
||||
ROM_START( mag_time )
|
||||
BIOS_ROM
|
||||
|
||||
ROM_REGION( 0x100000, "flop:disk", 0 )
|
||||
ROM_LOAD( "timescanner.img", 0x00000, 0xf0000, CRC(214c558c) SHA1(9c71fce35acaf17ac685f77aebb1b0a930060f0b) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( mag_exzi )
|
||||
BIOS_ROM
|
||||
|
||||
ROM_REGION( 0x100000, "flop:disk", ROMREGION_ERASE00 )
|
||||
ROM_LOAD( "exzisus.img", 0x00000, 0xf0000, CRC(3705e9dc) SHA1(78c8010d224f5deb202a29bd273ea7dc85ddcdb4) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( mag_xain )
|
||||
BIOS_ROM
|
||||
|
||||
ROM_REGION( 0x100000, "flop:disk", ROMREGION_ERASE00 )
|
||||
ROM_LOAD( "xain.img", 0x00000, 0xf0000, CRC(5647849f) SHA1(edd2f3f6359424583bf526bf4601476dc849e617) )
|
||||
ROM_END
|
||||
|
||||
|
||||
/*
|
||||
Data after 0xd56b0 would not read consistently, however the game only appears to use the first 24 tracks (up to 0x48fff)
|
||||
as it loads once on startup, not during gameplay, and all tracks before that gave consistent reads. There is data after this
|
||||
point but it is likely leftovers from another game / whatever was on the disk before, so for our purposes this should be fine.
|
||||
Protection? (Time Scanner note)
|
||||
|
||||
Some bullets do seem to spawn from locations where there are no enemies, but I think this is just annoying game design.
|
||||
*/
|
||||
ROM_START( mag_war )
|
||||
BIOS_ROM
|
||||
One part of the code is a weird loop checking values from port 0x7c while doing other nonsensical stuff, a flag gets set to 0xff if it fails.
|
||||
|
||||
ROM_REGION( 0x100000, "flop:disk", ROMREGION_ERASE00 )
|
||||
ROM_LOAD( "war mission wm 4_6_87.img", 0x00000, 0xf0000, CRC(7c813520) SHA1(2ba5999709a52302aa367fb46199b331421a0d56) )
|
||||
ROM_END
|
||||
|
||||
/*
|
||||
Data read 100% consistently with multiple drives
|
||||
*/
|
||||
ROM_START( mag_wara )
|
||||
BIOS_ROM
|
||||
|
||||
ROM_REGION( 0x100000, "flop:disk", ROMREGION_ERASE00 )
|
||||
ROM_LOAD( "war mission wm 9_4_87.img", 0x00000, 0xf0000, CRC(6296ea6f) SHA1(c0aaf51362bfa3362ef39c3fb1e1c848b73fd780) )
|
||||
ROM_END
|
||||
|
||||
/*
|
||||
Data read 100% consistently with multiple drives
|
||||
*/
|
||||
ROM_START( mag_burn )
|
||||
BIOS_ROM
|
||||
|
||||
ROM_REGION( 0x100000, "flop:disk", ROMREGION_ERASE00 ) //
|
||||
ROM_LOAD( "theburningcavern 31_3_87.img", 0x00000, 0xf0000, CRC(c95911f8) SHA1(eda3bdbbcc3e00a7da83253209e832855c2968b1) )
|
||||
ROM_END
|
||||
|
||||
/*
|
||||
Data read 100% consistently with non-original drive (usually gives worse results)
|
||||
later tracks showed differences with original drive on each read (around 0xeef80 onwards, doesn't seem to be game data)
|
||||
|
||||
weirdly there's was a single byte in an earlier track that read consistently, but in a different way for each drive
|
||||
0x2480e: 9d (non-original) vs 1d (original drive)
|
||||
1d seems to be correct as the same data is also elsewhere on the disc
|
||||
*/
|
||||
ROM_START( mag_day )
|
||||
BIOS_ROM
|
||||
|
||||
ROM_REGION( 0x100000, "flop:disk", ROMREGION_ERASE00 )
|
||||
ROM_LOAD( "adayinspace 31_3_87.img", 0x00000, 0xf0000, CRC(bc65302d) SHA1(6ace68a0b5f7a07a8f5c318c5359011074e7f2ec) )
|
||||
ROM_END
|
||||
|
||||
// track 79 side 1 (file offset 0x0ee800) would not read, but it appears to be outside of the used data
|
||||
// this also has many scores stored on the disk at offset 0x01cc00, invalidating these does reset the
|
||||
// score table to 'EFO 100000' scores, but then it never writes new scores?
|
||||
ROM_START( mag_pdak )
|
||||
BIOS_ROM
|
||||
|
||||
ROM_REGION( 0x100000, "flop:disk", ROMREGION_ERASE00 )
|
||||
ROM_LOAD( "paris.dsk 31_3_87.img", 0x00000, 0xf0000, BAD_DUMP CRC(2c4ee9e1) SHA1(22c2b75c16aca95ecf2199451c1bd12dd3a3844c) )
|
||||
ROM_END
|
||||
|
||||
/*
|
||||
The following tracks/sides failed to read (bad disk)
|
||||
|
||||
track:68:0 (file offset:0x0cc000 - 0x0cd7ff)
|
||||
track:69:0 (file offset:0x0cf000 - 0x0d07ff)
|
||||
track:70:0 (file offset:0x0d2000 - 0x0d37ff)
|
||||
track:71:0 (file offset:0x0d5000 - 0x0d67ff)
|
||||
track:72:0 (file offset:0x0d8000 - 0x0d97ff)
|
||||
track:73:0 (file offset:0x0db000 - 0x0dc7ff)
|
||||
track:74:0 (file offset:0x0de000 - 0x0df7ff)
|
||||
track:75:0 (file offset:0x0e1000 - 0x0e27ff)
|
||||
track:76:0 (file offset:0x0e4000 - 0x0e57ff)
|
||||
|
||||
these areas aren't read by the code that currently loads, but other areas also didn't read consistently
|
||||
|
||||
the 3 dumps in the set below contain different reads of tracks 0-67
|
||||
|
||||
*/
|
||||
|
||||
ROM_START( mag_drac )
|
||||
BIOS_ROM
|
||||
|
||||
ROM_REGION( 0x100000, "flop:disk", ROMREGION_ERASE00 )
|
||||
ROM_LOAD( "drac.dsk", 0x00000, 0xf0000, BAD_DUMP CRC(2b5ca6f8) SHA1(063ea3b55bf95d05c866c0fcdb41c307c484a4f8) )
|
||||
ROM_LOAD( "drac2.dsk", 0x00000, 0xf0000, BAD_DUMP CRC(cf6c1dd2) SHA1(7adb5146b050172090556927bf6d30ba8265107a) )
|
||||
ROM_LOAD( "drac3.dsk", 0x00000, 0xf0000, BAD_DUMP CRC(7060e4a2) SHA1(b8e5437afff11d57a40c092d005d6b075819537a))
|
||||
ROM_END
|
||||
|
||||
|
||||
|
||||
/*
|
||||
protection? (Time Scanner note)
|
||||
|
||||
one part of the code is a weird loop checking values from port 0x7c while doing other nonsensical stuff, a flag gets set to 0xff if it fails
|
||||
|
||||
the other part is after reading the weird extra block on the disk (score / protection data at 0xea400 in the disk image*) and again a flag
|
||||
The other part is after reading the weird extra block on the disk (score / protection data at 0xea400 in the disk image*) and again a flag
|
||||
gets set to 0xff in certain conditions there's then a check after inserting a coin, these values can't be 0xff at that point, and there
|
||||
doesn't appear to be any code to reset them.
|
||||
|
||||
*0xea400 is/was track 4e, side 00, sector 01 for future reference if the floppy format changes
|
||||
|
||||
all games have the same code in them but at different addresses
|
||||
All games have the same code in them but at different addresses
|
||||
*/
|
||||
|
||||
|
||||
void cedar_magnet_state::kludge_protection()
|
||||
{
|
||||
const int max_addr = 0x3ffff;
|
||||
@ -1161,25 +1033,144 @@ void cedar_magnet_state::kludge_protection()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#define BIOS_ROM \
|
||||
ROM_REGION( 0x10000, "maincpu", 0 ) \
|
||||
ROM_LOAD( "magnet-master-vid-e03.bin", 0x00000, 0x02000, CRC(86c4a4f0) SHA1(6db1a006b2e0b2a7cc9748ade881debb098b6757) )
|
||||
|
||||
|
||||
ROM_START( cedmag )
|
||||
BIOS_ROM
|
||||
|
||||
ROM_REGION( 0x100000, "flop:disk", ROMREGION_ERASE00 )
|
||||
// no disk inserted
|
||||
ROM_END
|
||||
|
||||
// Marked as BAD_DUMP because of the missing tracks (hence the different size).
|
||||
ROM_START( mag_boob )
|
||||
BIOS_ROM
|
||||
|
||||
ROM_REGION( 0x100000, "flop:disk", ROMREGION_ERASE00 )
|
||||
ROM_LOAD( "boobykid.img", 0x00000, 0xde000, BAD_DUMP CRC(3196ffb4) SHA1(99732f74bb907ed6a93ed097c7b211c709d8bf85) ) // Floppy labeled "BOOBY KID CC / TUBO VERTICAL / 1 joystick, 2 pulsadores"
|
||||
ROM_END
|
||||
|
||||
// Data read 100% consistently with multiple drives
|
||||
ROM_START( mag_burn )
|
||||
BIOS_ROM
|
||||
|
||||
ROM_REGION( 0x100000, "flop:disk", ROMREGION_ERASE00 ) //
|
||||
ROM_LOAD( "theburningcavern 31_3_87.img", 0x00000, 0xf0000, CRC(c95911f8) SHA1(eda3bdbbcc3e00a7da83253209e832855c2968b1) )
|
||||
ROM_END
|
||||
|
||||
/*
|
||||
Data read 100% consistently with non-original drive (usually gives worse results)
|
||||
later tracks showed differences with original drive on each read (around 0xeef80 onwards, doesn't seem to be game data)
|
||||
|
||||
weirdly there's was a single byte in an earlier track that read consistently, but in a different way for each drive
|
||||
0x2480e: 9d (non-original) vs 1d (original drive)
|
||||
1d seems to be correct as the same data is also elsewhere on the disc
|
||||
*/
|
||||
ROM_START( mag_day )
|
||||
BIOS_ROM
|
||||
|
||||
ROM_REGION( 0x100000, "flop:disk", ROMREGION_ERASE00 )
|
||||
ROM_LOAD( "adayinspace 31_3_87.img", 0x00000, 0xf0000, CRC(bc65302d) SHA1(6ace68a0b5f7a07a8f5c318c5359011074e7f2ec) )
|
||||
ROM_END
|
||||
|
||||
/*
|
||||
The following tracks/sides failed to read (bad disk)
|
||||
|
||||
track:68:0 (file offset:0x0cc000 - 0x0cd7ff)
|
||||
track:69:0 (file offset:0x0cf000 - 0x0d07ff)
|
||||
track:70:0 (file offset:0x0d2000 - 0x0d37ff)
|
||||
track:71:0 (file offset:0x0d5000 - 0x0d67ff)
|
||||
track:72:0 (file offset:0x0d8000 - 0x0d97ff)
|
||||
track:73:0 (file offset:0x0db000 - 0x0dc7ff)
|
||||
track:74:0 (file offset:0x0de000 - 0x0df7ff)
|
||||
track:75:0 (file offset:0x0e1000 - 0x0e27ff)
|
||||
track:76:0 (file offset:0x0e4000 - 0x0e57ff)
|
||||
|
||||
These areas aren't read by the code that currently loads, but other areas also didn't read consistently.
|
||||
|
||||
The 3 dumps in the set below contain different reads of tracks 0-67.
|
||||
*/
|
||||
ROM_START( mag_drac )
|
||||
BIOS_ROM
|
||||
|
||||
ROM_REGION( 0x100000, "flop:disk", ROMREGION_ERASE00 )
|
||||
ROM_LOAD( "drac.dsk", 0x00000, 0xf0000, BAD_DUMP CRC(2b5ca6f8) SHA1(063ea3b55bf95d05c866c0fcdb41c307c484a4f8) )
|
||||
ROM_LOAD( "drac2.dsk", 0x00000, 0xf0000, BAD_DUMP CRC(cf6c1dd2) SHA1(7adb5146b050172090556927bf6d30ba8265107a) )
|
||||
ROM_LOAD( "drac3.dsk", 0x00000, 0xf0000, BAD_DUMP CRC(7060e4a2) SHA1(b8e5437afff11d57a40c092d005d6b075819537a))
|
||||
ROM_END
|
||||
|
||||
ROM_START( mag_exzi )
|
||||
BIOS_ROM
|
||||
|
||||
ROM_REGION( 0x100000, "flop:disk", ROMREGION_ERASE00 )
|
||||
ROM_LOAD( "exzisus.img", 0x00000, 0xf0000, CRC(3705e9dc) SHA1(78c8010d224f5deb202a29bd273ea7dc85ddcdb4) )
|
||||
ROM_END
|
||||
|
||||
/*
|
||||
Track 79 side 1 (file offset 0x0ee800) would not read, but it appears to be outside of the used data
|
||||
this also has many scores stored on the disk at offset 0x01cc00, invalidating these does reset the
|
||||
score table to 'EFO 100000' scores, but then it never writes new scores?
|
||||
*/
|
||||
ROM_START( mag_pdak )
|
||||
BIOS_ROM
|
||||
|
||||
ROM_REGION( 0x100000, "flop:disk", ROMREGION_ERASE00 )
|
||||
ROM_LOAD( "paris.dsk 31_3_87.img", 0x00000, 0xf0000, BAD_DUMP CRC(2c4ee9e1) SHA1(22c2b75c16aca95ecf2199451c1bd12dd3a3844c) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( mag_time )
|
||||
BIOS_ROM
|
||||
|
||||
ROM_REGION( 0x100000, "flop:disk", 0 )
|
||||
ROM_LOAD( "timescanner.img", 0x00000, 0xf0000, CRC(214c558c) SHA1(9c71fce35acaf17ac685f77aebb1b0a930060f0b) )
|
||||
ROM_END
|
||||
|
||||
/*
|
||||
Data after 0xd56b0 would not read consistently, however the game only appears to use the first 24 tracks (up to 0x48fff)
|
||||
as it loads once on startup, not during gameplay, and all tracks before that gave consistent reads. There is data after this
|
||||
point but it is likely leftovers from another game / whatever was on the disk before, so for our purposes this should be fine.
|
||||
|
||||
Some bullets do seem to spawn from locations where there are no enemies, but I think this is just annoying game design.
|
||||
*/
|
||||
ROM_START( mag_war )
|
||||
BIOS_ROM
|
||||
|
||||
ROM_REGION( 0x100000, "flop:disk", ROMREGION_ERASE00 )
|
||||
ROM_LOAD( "war mission wm 4_6_87.img", 0x00000, 0xf0000, CRC(7c813520) SHA1(2ba5999709a52302aa367fb46199b331421a0d56) )
|
||||
ROM_END
|
||||
|
||||
// Data read 100% consistently with multiple drives
|
||||
ROM_START( mag_wara )
|
||||
BIOS_ROM
|
||||
|
||||
ROM_REGION( 0x100000, "flop:disk", ROMREGION_ERASE00 )
|
||||
ROM_LOAD( "war mission wm 9_4_87.img", 0x00000, 0xf0000, CRC(6296ea6f) SHA1(c0aaf51362bfa3362ef39c3fb1e1c848b73fd780) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( mag_xain )
|
||||
BIOS_ROM
|
||||
|
||||
ROM_REGION( 0x100000, "flop:disk", ROMREGION_ERASE00 )
|
||||
ROM_LOAD( "xain.img", 0x00000, 0xf0000, CRC(5647849f) SHA1(edd2f3f6359424583bf526bf4601476dc849e617) )
|
||||
ROM_END
|
||||
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
|
||||
GAME( 1987, cedmag, 0, cedar_magnet, cedar_magnet, cedar_magnet_state, empty_init, ROT0, "EFO SA / Cedar", "Magnet System", MACHINE_IS_BIOS_ROOT )
|
||||
|
||||
GAME( 1987, mag_time, cedmag, cedar_magnet, cedar_magnet, cedar_magnet_state, empty_init, ROT90, "EFO SA / Cedar", "Time Scanner (TS 2.0, Magnet System)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // original game was by Sega
|
||||
|
||||
GAME( 1987, mag_exzi, cedmag, cedar_magnet, cedar_magnet, cedar_magnet_state, empty_init, ROT0, "EFO SA / Cedar", "Exzisus (EX 1.0, Magnet System)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // original game was by Taito
|
||||
|
||||
GAME( 1987, mag_xain, cedmag, cedar_magnet, cedar_magnet, cedar_magnet_state, empty_init, ROT0, "EFO SA / Cedar", "Xain'd Sleena (SC 3.0, Magnet System)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // original game was by Technos
|
||||
|
||||
GAME( 1987, mag_war, cedmag, cedar_magnet, cedar_magnet, cedar_magnet_state, empty_init, ROT90, "EFO SA / Cedar", "War Mission (WM 04/06/87)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // date in program
|
||||
GAME( 1987, mag_wara, mag_war,cedar_magnet, cedar_magnet, cedar_magnet_state, empty_init, ROT90, "EFO SA / Cedar", "War Mission (WM 09/04/87)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // the '9' was handwritten over a printed letter on disk label, date not in program
|
||||
|
||||
GAME( 1987, mag_burn, cedmag, cedar_magnet, cedar_magnet, cedar_magnet_state, empty_init, ROT0, "EFO SA / Cedar", "The Burning Cavern (31/03/87)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // date on label
|
||||
|
||||
GAME( 1987, mag_day, cedmag, cedar_magnet, cedar_magnet, cedar_magnet_state, empty_init, ROT90, "EFO SA / Cedar", "A Day In Space (31/03/87)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // date on label
|
||||
|
||||
// has unemulated 'handlebar' option that can be enabled in service mode
|
||||
GAME( 1987, mag_pdak, cedmag, cedar_magnet, cedar_magnet, cedar_magnet_state, empty_init, ROT0, "EFO SA / Cedar", "Paris Dakar (31/03/87, Spanish)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // date on label
|
||||
|
||||
GAME( 1987, mag_drac, cedmag, cedar_magnet, cedar_magnet, cedar_magnet_state, empty_init, ROT0, "EFO SA / Cedar", "Dracula's Castle (Magnet System)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
|
||||
GAME( 1987, cedmag, 0, cedar_magnet, cedar_magnet, cedar_magnet_state, empty_init, ROT0, "EFO SA / Cedar", "Magnet System", MACHINE_IS_BIOS_ROOT )
|
||||
GAME( 1987, mag_boob, cedmag, cedar_magnet, cedar_magnet, cedar_magnet_state, empty_init, ROT90, "EFO SA / Cedar", "Booby Kids (Magnet System)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // Original game (Kid no Hore Hore Daisakusen) by Nichibutsu
|
||||
GAME( 1987, mag_burn, cedmag, cedar_magnet, cedar_magnet, cedar_magnet_state, empty_init, ROT0, "EFO SA / Cedar", "The Burning Cavern (31/03/87)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // Date on label
|
||||
GAME( 1987, mag_day, cedmag, cedar_magnet, cedar_magnet, cedar_magnet_state, empty_init, ROT90, "EFO SA / Cedar", "A Day In Space (31/03/87)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // Date on label
|
||||
GAME( 1987, mag_drac, cedmag, cedar_magnet, cedar_magnet, cedar_magnet_state, empty_init, ROT0, "EFO SA / Cedar", "Dracula's Castle (Magnet System)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
|
||||
GAME( 1987, mag_exzi, cedmag, cedar_magnet, cedar_magnet, cedar_magnet_state, empty_init, ROT0, "EFO SA / Cedar", "Exzisus (EX 1.0, Magnet System)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // Original game was by Taito
|
||||
GAME( 1987, mag_pdak, cedmag, cedar_magnet, cedar_magnet, cedar_magnet_state, empty_init, ROT0, "EFO SA / Cedar", "Paris Dakar (31/03/87, Spanish)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // Date on label, has unemulated 'handlebar' option that can be enabled in service mode
|
||||
GAME( 1987, mag_time, cedmag, cedar_magnet, cedar_magnet, cedar_magnet_state, empty_init, ROT90, "EFO SA / Cedar", "Time Scanner (TS 2.0, Magnet System)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // Original game was by Sega
|
||||
GAME( 1987, mag_war, cedmag, cedar_magnet, cedar_magnet, cedar_magnet_state, empty_init, ROT90, "EFO SA / Cedar", "War Mission (WM 04/06/87)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // Date in program
|
||||
GAME( 1987, mag_wara, mag_war, cedar_magnet, cedar_magnet, cedar_magnet_state, empty_init, ROT90, "EFO SA / Cedar", "War Mission (WM 09/04/87)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // The '9' was handwritten over a printed letter on disk label, date not in program
|
||||
GAME( 1987, mag_xain, cedmag, cedar_magnet, cedar_magnet, cedar_magnet_state, empty_init, ROT0, "EFO SA / Cedar", "Xain'd Sleena (SC 3.0, Magnet System)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // Original game was by Technos
|
||||
|
@ -17402,6 +17402,7 @@ twinsed2 // (c) 1994 Electronic Devices
|
||||
|
||||
@source:efo/cedar_magnet.cpp
|
||||
cedmag
|
||||
mag_boob
|
||||
mag_burn
|
||||
mag_day
|
||||
mag_drac
|
||||
|
Loading…
Reference in New Issue
Block a user