diff options
Diffstat (limited to 'src/mame/drivers/angelkds.cpp')
-rw-r--r-- | src/mame/drivers/angelkds.cpp | 694 |
1 files changed, 0 insertions, 694 deletions
diff --git a/src/mame/drivers/angelkds.cpp b/src/mame/drivers/angelkds.cpp deleted file mode 100644 index cd11bb7e64d..00000000000 --- a/src/mame/drivers/angelkds.cpp +++ /dev/null @@ -1,694 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:David Haywood -/* Angel Kids / Space Position hardware driver - - driver by David Haywood - with some help from Steph (DSWs, Inputs, other - bits here and there) - -2 Board System, Uses Boards X090-PC-A & X090-PC-B - -Both games appear to be joint Sega / Nasco efforts -(although all I see in Angel Kids is 'Exa Planning' - but I think that has something to do with Nasco ) - -Space Position is encrypted, the main processor is -D317-0005 (NEC Z80 Custom), see machine/segacrpt.cpp -for details on this encryption scheme - -*/ - -/* started 23/01/2002 */ - -/* notes / todo: - -Unknown Reads / Writes -Whats the Prom for? nothing important? -the progress sprite on the side of the screen re-appears at the bottom when you get -to the top, but the wrap-around is needed for other things, actual game bug? -Angel Kids service mode doesn't seem to work, did it ever? - -*/ - -/* readme's - ------------------------------------------------------------------------- - -Angel Kids -833-6599-01 -Sega 1988 - -Nasco X090-PC-A (Sega 837-6600) - - SW1 SW2 - - - 8255 - - 8255 - - 11429 6116 Z80 YM2203 YM2203 - - - 11424 11425 11426 11427 - - - - 5M5165 11428 Z80 - 4MHz - - 6MHz - - -Nasco X090-PC-B - - 2016-55 -11437 11445 2016-55 2016-55 U5 -11436 11444 -11435 11443 -11434 11442 -11433 11441 2016-55 2016-55 -11432 11440 -11431 11439 11446 2016-55 - - 11148 - 11147 - 2016-55 2016-55 2016-55 - - 18.432MHz - -11430 11438 - ------------------------------------------------------------------------- - -Space Position (JPN Ver.) -(c)1986 Sega / Nasco -X090-PC-A 171-5383 -X090-PC-B 171-5384 -834-6089 SPACE POSITION -Sticker reading 860723.0883E - - -CPU :D317-0005 (NEC Z80 Custom) -Sound :NEC D780C-1 - :YM2203C x 2 -OSC :4.000MHz 6.000MHz - :18.432MHz - - -EPR-10120.C1 prg -EPR-10121.C2 | -EPR-10122.C3 | -EPR-10123.C4 | -EPR-10124.C5 | -EPR-10125.C10/ - -EPR-10126.D4 snd - -EPR-10127.06 -EPR-10128.07 -EPR-10129.08 -EPR-10130.14 -EPR-10131.15 -EPR-10132.16 - -EPR-10133.17 - -EPR-10134.18 -EPR-10135.19 - -63S081N.U5 - - ---- Team Japump!!! --- -Dumped by Chackn -02/25/2000 - ------------------------------------------------------------------------- - -*/ - - -#include "emu.h" -#include "includes/angelkds.h" - -#include "cpu/z80/z80.h" -#include "machine/i8255.h" -#include "machine/segacrp2_device.h" -#include "sound/ym2203.h" - -#include "emupal.h" -#include "screen.h" -#include "speaker.h" - - - -/*** CPU Banking - -*/ - -void angelkds_state::angelkds_cpu_bank_write(uint8_t data) -{ - membank("bank1")->set_entry(data & 0x0f); // shall we check (data & 0x0f) < # of available banks (8 or 10 resp.)? -} - - - - - -/*** Memory Structures - -Angel Kids: -I would have expected f003 to be the scroll register for the bottom -part of the screen, in the attract mode this works fine, but in the -game it doesn't, so maybe it wasn't really hooked up and instead -only one of the register (f001) is used for both part? - - update, it is correct, the screen is meant to split in two when - the kid goes what would be offscreen, just looked kinda odd - -Interesting note, each Bank in the 0x8000 - 0xbfff appears to -contain a level. - -*/ - -void angelkds_state::main_map(address_map &map) -{ - map(0x0000, 0x7fff).rom(); - map(0x8000, 0xbfff).bankr("bank1"); - map(0xc000, 0xdfff).ram(); - map(0xe000, 0xe3ff).ram().w(FUNC(angelkds_state::angelkds_bgtopvideoram_w)).share("bgtopvideoram"); /* Top Half of Screen */ - map(0xe400, 0xe7ff).ram().w(FUNC(angelkds_state::angelkds_bgbotvideoram_w)).share("bgbotvideoram"); /* Bottom Half of Screen */ - map(0xe800, 0xebff).ram().w(FUNC(angelkds_state::angelkds_txvideoram_w)).share("txvideoram"); - map(0xec00, 0xecff).ram().share("spriteram"); - map(0xed00, 0xedff).ram().w("palette", FUNC(palette_device::write8)).share("palette"); - map(0xee00, 0xeeff).ram().w("palette", FUNC(palette_device::write8_ext)).share("palette_ext"); - map(0xef00, 0xefff).ram(); - map(0xf000, 0xf000).w(FUNC(angelkds_state::angelkds_bgtopbank_write)); - map(0xf001, 0xf001).w(FUNC(angelkds_state::angelkds_bgtopscroll_write)); - map(0xf002, 0xf002).w(FUNC(angelkds_state::angelkds_bgbotbank_write)); - map(0xf003, 0xf003).w(FUNC(angelkds_state::angelkds_bgbotscroll_write)); - map(0xf004, 0xf004).w(FUNC(angelkds_state::angelkds_txbank_write)); - map(0xf005, 0xf005).w(FUNC(angelkds_state::angelkds_layer_ctrl_write)); -} - -void angelkds_state::decrypted_opcodes_map(address_map &map) -{ - map(0x0000, 0x7fff).rom().share("decrypted_opcodes"); - map(0x8000, 0xbfff).bankr("bank1"); -} - -void angelkds_state::main_portmap(address_map &map) -{ - map.global_mask(0xff); - map(0x00, 0x00).nopw(); // 00 on start-up, not again - - map(0x40, 0x43).rw("ppi8255_0", FUNC(i8255_device::read), FUNC(i8255_device::write)); - map(0x80, 0x83).rw("ppi8255_1", FUNC(i8255_device::read), FUNC(i8255_device::write)); - - map(0xc0, 0xc3).rw(FUNC(angelkds_state::angelkds_main_sound_r), FUNC(angelkds_state::angelkds_main_sound_w)); // 02 various points -} - - - - - -/* sub cpu */ - -void angelkds_state::sub_map(address_map &map) -{ - map(0x0000, 0x7fff).rom(); - map(0x8000, 0x87ff).ram(); - map(0xaaa9, 0xaaa9).nopr(); - map(0xaaab, 0xaaab).nopr(); - map(0xaaac, 0xaaac).nopr(); -} - -void angelkds_state::sub_portmap(address_map &map) -{ - map.global_mask(0xff); - map(0x00, 0x01).rw("ym1", FUNC(ym2203_device::read), FUNC(ym2203_device::write)); - map(0x40, 0x41).rw("ym2", FUNC(ym2203_device::read), FUNC(ym2203_device::write)); - map(0x80, 0x83).rw(FUNC(angelkds_state::angelkds_sub_sound_r), FUNC(angelkds_state::angelkds_sub_sound_w)); // spcpostn -} - - -/* Input Ports */ - -#define ANGELDSK_PLAYERS_INPUT( player ) \ - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_UP ) PORT_PLAYER(player) PORT_8WAY \ - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_DOWN ) PORT_PLAYER(player) PORT_8WAY \ - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_LEFT ) PORT_PLAYER(player) PORT_8WAY \ - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_RIGHT ) PORT_PLAYER(player) PORT_8WAY \ - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_UP ) PORT_PLAYER(player) PORT_8WAY \ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_DOWN ) PORT_PLAYER(player) PORT_8WAY \ - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_LEFT ) PORT_PLAYER(player) PORT_8WAY \ - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_RIGHT ) PORT_PLAYER(player) PORT_8WAY - - -static INPUT_PORTS_START( angelkds ) - /* - Free Play: Set SW1:1-8 ON (A:Free Play & B:Free Play). - Sound Test: Set SW1:1-8 ON (A:Free Play & B:Free Play), hold test switch and reboot. - Joystick Test: Set SW1:1-7 ON & SW1:8 OFF (A:Free Play & B:3C_1C), hold test switch and reboot. - Joystick Test Coin_A & Coin_B seem to be switched, only works when setting A to 3C_1C and B to Free Play. - */ - PORT_START("I40") /* inport $40 */ - PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2,3,4") - PORT_DIPSETTING( 0x70, DEF_STR( 4C_1C ) ) - PORT_DIPSETTING( 0x80, DEF_STR( 3C_1C ) ) - PORT_DIPSETTING( 0x90, DEF_STR( 2C_1C ) ) -// PORT_DIPSETTING( 0x60, DEF_STR( 2C_1C ) ) -// PORT_DIPSETTING( 0x50, DEF_STR( 2C_1C ) ) -// PORT_DIPSETTING( 0x40, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0xf0, DEF_STR( 1C_1C ) ) -// PORT_DIPSETTING( 0x30, DEF_STR( 1C_1C ) ) -// PORT_DIPSETTING( 0x20, DEF_STR( 1C_1C ) ) -// PORT_DIPSETTING( 0x10, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0xe0, DEF_STR( 1C_2C ) ) - PORT_DIPSETTING( 0xd0, DEF_STR( 1C_3C ) ) - PORT_DIPSETTING( 0xc0, DEF_STR( 1C_4C ) ) - PORT_DIPSETTING( 0xb0, DEF_STR( 1C_5C ) ) - PORT_DIPSETTING( 0xa0, DEF_STR( 1C_6C ) ) - PORT_DIPSETTING( 0x00, DEF_STR( Free_Play ) ) - - PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:5,6,7,8") - PORT_DIPSETTING( 0x07, DEF_STR( 4C_1C ) ) - PORT_DIPSETTING( 0x08, DEF_STR( 3C_1C ) ) - PORT_DIPSETTING( 0x09, DEF_STR( 2C_1C ) ) -// PORT_DIPSETTING( 0x06, DEF_STR( 2C_1C ) ) -// PORT_DIPSETTING( 0x05, DEF_STR( 2C_1C ) ) -// PORT_DIPSETTING( 0x04, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0x0f, DEF_STR( 1C_1C ) ) -// PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) -// PORT_DIPSETTING( 0x02, DEF_STR( 1C_1C ) ) -// PORT_DIPSETTING( 0x01, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0x0e, DEF_STR( 1C_2C ) ) - PORT_DIPSETTING( 0x0d, DEF_STR( 1C_3C ) ) - PORT_DIPSETTING( 0x0c, DEF_STR( 1C_4C ) ) - PORT_DIPSETTING( 0x0b, DEF_STR( 1C_5C ) ) - PORT_DIPSETTING( 0x0a, DEF_STR( 1C_6C ) ) - PORT_DIPSETTING( 0x00, DEF_STR( Free_Play ) ) - - PORT_START("I41") /* inport $41 */ - PORT_DIPNAME( 0x01, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW2:1") - PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) - PORT_DIPSETTING( 0x01, DEF_STR( Cocktail ) ) - PORT_DIPNAME( 0x02, 0x00, "High Score Characters" ) PORT_DIPLOCATION("SW2:2") - PORT_DIPSETTING( 0x00, "3" ) - PORT_DIPSETTING( 0x02, "10" ) - PORT_DIPNAME( 0x0c, 0x08, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:3,4") - PORT_DIPSETTING( 0x0c, "20k, 50k, 100k, 200k and 500k" ) - PORT_DIPSETTING( 0x08, "50k, 100k, 200k and 500k" ) - PORT_DIPSETTING( 0x04, "100k, 200k and 500k" ) - PORT_DIPSETTING( 0x00, DEF_STR( None ) ) - PORT_DIPNAME( 0x30, 0x30, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:5,6") - PORT_DIPSETTING( 0x30, "3" ) - PORT_DIPSETTING( 0x20, "4" ) - PORT_DIPSETTING( 0x10, "5" ) - PORT_DIPSETTING( 0x00, "99 (Cheat)" ) - PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:7,8") /* Stored at 0xc023 */ - PORT_DIPSETTING( 0xc0, DEF_STR( Very_Easy ) ) - PORT_DIPSETTING( 0x40, DEF_STR( Easy ) ) - PORT_DIPSETTING( 0x80, DEF_STR( Hard ) ) - PORT_DIPSETTING( 0x00, DEF_STR( Very_Hard ) ) - - - PORT_START("I80") /* inport $80 */ - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE1 ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_SERVICE( 0x80, IP_ACTIVE_LOW ) - - PORT_START("I81") /* inport $81 */ - ANGELDSK_PLAYERS_INPUT( 1 ) - - PORT_START("I82") /* inport $82 */ - ANGELDSK_PLAYERS_INPUT( 2 ) - -INPUT_PORTS_END - -static INPUT_PORTS_START( spcpostn ) - PORT_START("I40") /* inport $40 */ - PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2,3,4") - PORT_DIPSETTING( 0x02, DEF_STR( 4C_1C ) ) - PORT_DIPSETTING( 0x05, DEF_STR( 3C_1C ) ) - PORT_DIPSETTING( 0x08, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0x04, DEF_STR( 3C_2C ) ) - PORT_DIPSETTING( 0x01, DEF_STR( 4C_3C ) ) - PORT_DIPSETTING( 0x0f, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0x03, DEF_STR( 3C_4C ) ) - PORT_DIPSETTING( 0x07, DEF_STR( 2C_3C ) ) - PORT_DIPSETTING( 0x0e, DEF_STR( 1C_2C ) ) - PORT_DIPSETTING( 0x06, DEF_STR( 2C_5C ) ) - PORT_DIPSETTING( 0x0d, DEF_STR( 1C_3C ) ) - PORT_DIPSETTING( 0x0c, DEF_STR( 1C_4C ) ) - PORT_DIPSETTING( 0x0b, DEF_STR( 1C_5C ) ) - PORT_DIPSETTING( 0x0a, DEF_STR( 1C_6C ) ) - PORT_DIPSETTING( 0x09, DEF_STR( 1C_7C ) ) - PORT_DIPSETTING( 0x00, DEF_STR( Free_Play ) ) - PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:5,6,7,8") - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x20, DEF_STR( 4C_1C ) ) - PORT_DIPSETTING( 0x50, DEF_STR( 3C_1C ) ) - PORT_DIPSETTING( 0x80, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0x40, DEF_STR( 3C_2C ) ) - PORT_DIPSETTING( 0x10, DEF_STR( 4C_3C ) ) - PORT_DIPSETTING( 0xf0, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0x30, DEF_STR( 3C_4C ) ) - PORT_DIPSETTING( 0x70, DEF_STR( 2C_3C ) ) - PORT_DIPSETTING( 0xe0, DEF_STR( 1C_2C ) ) - PORT_DIPSETTING( 0x60, DEF_STR( 2C_5C ) ) - PORT_DIPSETTING( 0xd0, DEF_STR( 1C_3C ) ) - PORT_DIPSETTING( 0xc0, DEF_STR( 1C_4C ) ) - PORT_DIPSETTING( 0xb0, DEF_STR( 1C_5C ) ) - PORT_DIPSETTING( 0xa0, DEF_STR( 1C_6C ) ) - PORT_DIPSETTING( 0x90, DEF_STR( 1C_7C ) ) - - PORT_START("I41") /* inport $41 */ - PORT_DIPNAME( 0x01, 0x01, DEF_STR(Allow_Continue ) ) PORT_DIPLOCATION("SW2:1") - PORT_DIPSETTING( 0x01, DEF_STR( No ) ) - PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) - PORT_DIPNAME( 0x02, 0x02, "Obstruction Car" ) PORT_DIPLOCATION("SW2:2") - PORT_DIPSETTING( 0x02, DEF_STR( Normal ) ) - PORT_DIPSETTING( 0x00, DEF_STR( Hard ) ) - PORT_DIPNAME( 0x0c, 0x08, "Time Limit" ) PORT_DIPLOCATION("SW2:3,4") - PORT_DIPSETTING( 0x00, "1:10" ) - PORT_DIPSETTING( 0x04, "1:20" ) - PORT_DIPSETTING( 0x08, "1:30" ) - PORT_DIPSETTING( 0x0c, "1:40" ) - PORT_DIPNAME( 0x30, 0x20, "Power Down" ) PORT_DIPLOCATION("SW2:5,6") - PORT_DIPSETTING( 0x30, "Slow" ) - PORT_DIPSETTING( 0x20, DEF_STR( Normal ) ) - PORT_DIPSETTING( 0x10, "Fast" ) - PORT_DIPSETTING( 0x00, "Fastest" ) - PORT_DIPNAME( 0x40, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:7") - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW2:8" ) /* Listed as "Unused" */ - - PORT_START("I80") /* inport $80 */ - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE1 ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_SERVICE( 0x80, IP_ACTIVE_LOW ) - - PORT_START("I81") /* inport $81 */ - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) PORT_8WAY - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) PORT_8WAY - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) PORT_8WAY - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) PORT_8WAY - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_PLAYER(1) // probably unused - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_PLAYER(1) // probably unused - - PORT_START("I82") /* inport $82 */ - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) PORT_8WAY - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) PORT_8WAY - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) PORT_8WAY - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) PORT_8WAY - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_PLAYER(2) // probably unused - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_PLAYER(2) // probably unused - -INPUT_PORTS_END - -/*** Sound Hardware - -todo: verify / correct things -seems a bit strange are all the addresses really -sound related ? - -*/ - -void angelkds_state::angelkds_main_sound_w(offs_t offset, uint8_t data) -{ - m_sound[offset] = data; -} - -uint8_t angelkds_state::angelkds_main_sound_r(offs_t offset) -{ - return m_sound2[offset]; -} - -void angelkds_state::angelkds_sub_sound_w(offs_t offset, uint8_t data) -{ - m_sound2[offset] = data; -} - -uint8_t angelkds_state::angelkds_sub_sound_r(offs_t offset) -{ - return m_sound[offset]; -} - - -/*** Graphics Decoding - -all the 8x8 tiles are in one format, the 16x16 sprites in another - -*/ - -static const gfx_layout angelkds_charlayout = -{ - 8,8, - RGN_FRAC(1,1), - 4, - { 0,1,2,3 }, - { 0, 4, 8, 12, 16, 20, 24, 28 }, - { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 }, - 8*32 -}; - - -static const gfx_layout angelkds_spritelayout = -{ - 16,16, - RGN_FRAC(1,2), - 4, - { 0,4, RGN_FRAC(1,2)+0, RGN_FRAC(1,2)+4 }, - { 0, 1, 2, 3, 8, 9, 10, 11, 16,17,18,19, 24,25,26,27 }, - { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32, 8*32, 9*32, 10*32, 11*32, 12*32, 13*32, 14*32, 15*32 }, - 16*32 -}; - -static GFXDECODE_START( gfx_angelkds ) - GFXDECODE_ENTRY( "gfx1", 0, angelkds_charlayout, 0x30, 1 ) - GFXDECODE_ENTRY( "gfx3", 0, angelkds_charlayout, 0, 16 ) - GFXDECODE_ENTRY( "gfx4", 0, angelkds_charlayout, 0, 16 ) - GFXDECODE_ENTRY( "gfx2", 0, angelkds_spritelayout, 0x20, 0x0d ) -GFXDECODE_END - -/*** Machine Driver - - 2 x z80 (one for game, one for sound) - 2 x YM2203 (for sound) - - all fairly straightforward - -*/ - -void angelkds_state::machine_start() -{ - save_item(NAME(m_layer_ctrl)); - save_item(NAME(m_txbank)); - save_item(NAME(m_bgbotbank)); - save_item(NAME(m_bgtopbank)); - save_item(NAME(m_sound)); - save_item(NAME(m_sound2)); -} - -void angelkds_state::machine_reset() -{ - int i; - - for (i = 0; i < 4; i++) - { - m_sound[i] = 0; - m_sound2[i] = 0; - } - - m_layer_ctrl = 0; - m_txbank = 0; - m_bgbotbank = 0; - m_bgtopbank = 0; -} - -void angelkds_state::angelkds(machine_config &config) -{ - Z80(config, m_maincpu, XTAL(6'000'000)); - m_maincpu->set_addrmap(AS_PROGRAM, &angelkds_state::main_map); - m_maincpu->set_addrmap(AS_IO, &angelkds_state::main_portmap); - m_maincpu->set_vblank_int("screen", FUNC(angelkds_state::irq0_line_hold)); - - Z80(config, m_subcpu, XTAL(4'000'000)); - m_subcpu->set_addrmap(AS_PROGRAM, &angelkds_state::sub_map); - m_subcpu->set_addrmap(AS_IO, &angelkds_state::sub_portmap); - - i8255_device &ppi0(I8255A(config, "ppi8255_0")); - ppi0.in_pa_callback().set_ioport("I40"); - ppi0.in_pb_callback().set_ioport("I41"); - ppi0.in_pc_callback().set(FUNC(angelkds_state::angeklds_ff_r)); // or left inputs don't work - ppi0.out_pc_callback().set(FUNC(angelkds_state::angelkds_cpu_bank_write)); - - i8255_device &ppi1(I8255A(config, "ppi8255_1")); - ppi1.in_pa_callback().set_ioport("I80"); - ppi1.in_pb_callback().set_ioport("I81"); - ppi1.in_pc_callback().set_ioport("I82"); - - config.set_maximum_quantum(attotime::from_hz(6000)); - - /* video hardware */ - screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); - screen.set_refresh_hz(60); - screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); - screen.set_size(32*8, 32*8); - screen.set_visarea(0*8, 32*8-1, 1*8, 31*8-1); - screen.set_screen_update(FUNC(angelkds_state::screen_update_angelkds)); - screen.set_palette("palette"); - - GFXDECODE(config, m_gfxdecode, "palette", gfx_angelkds); - PALETTE(config, "palette").set_format(palette_device::xBGR_444, 0x100); - - SPEAKER(config, "mono").front_center(); - - ym2203_device &ym1(YM2203(config, "ym1", XTAL(4'000'000))); - ym1.irq_handler().set_inputline(m_subcpu, 0); - ym1.add_route(0, "mono", 0.65); - ym1.add_route(1, "mono", 0.65); - ym1.add_route(2, "mono", 0.65); - ym1.add_route(3, "mono", 0.45); - - ym2203_device &ym2(YM2203(config, "ym2", XTAL(4'000'000))); - ym2.add_route(0, "mono", 0.65); - ym2.add_route(1, "mono", 0.65); - ym2.add_route(2, "mono", 0.65); - ym2.add_route(3, "mono", 0.45); -} - -void angelkds_state::spcpostn(machine_config &config) -{ - angelkds(config); - - /* encryption */ - sega_317_0005_device &maincpu(SEGA_317_0005(config.replace(), m_maincpu, XTAL(6'000'000))); - maincpu.set_addrmap(AS_PROGRAM, &angelkds_state::main_map); - maincpu.set_addrmap(AS_IO, &angelkds_state::main_portmap); - maincpu.set_vblank_int("screen", FUNC(angelkds_state::irq0_line_hold)); - maincpu.set_addrmap(AS_OPCODES, &angelkds_state::decrypted_opcodes_map); - maincpu.set_decrypted_tag(m_decrypted_opcodes); -} - -/*** Rom Loading - - "maincpu" for the main code - "user1" for the banked data - "sub" for the sound cpu code - "gfx1" for the 8x8 Txt Layer Tiles - "gfx2" for the 16x16 Sprites - "gfx3" for the 8x8 Bg Layer Tiles (top tilemap) - "gfx4" for the 8x8 Bg Layer Tiles (bottom tilemap) - "proms" for the Prom (same between games) - -*/ - -ROM_START( angelkds ) - /* Nasco X090-PC-A (Sega 837-6600) */ - ROM_REGION( 0x8000, "maincpu", 0 ) - ROM_LOAD( "epr-11428.c10", 0x00000, 0x08000, CRC(90daacd2) SHA1(7e50ad1cbed0c1e6bad04ef1611cad25538c905f) ) - - ROM_REGION( 0x40000, "user1", 0 ) /* Banked Code */ - ROM_LOAD( "epr-11424.c1", 0x00000, 0x08000, CRC(b55997f6) SHA1(7ed746becac1851f39591f1fdbeff64aa97d6206) ) - ROM_LOAD( "epr-11425.c2", 0x08000, 0x08000, CRC(299359de) SHA1(f531dd3bfe6f64e9e043cb4f85d5657455241dc7) ) - ROM_LOAD( "epr-11426.c3", 0x10000, 0x08000, CRC(5fad8bd3) SHA1(4d865342eb10dcfb779eee4ac1e159bb9ec140cb) ) - ROM_LOAD( "epr-11427.c4", 0x18000, 0x08000, CRC(ef920c74) SHA1(81c0fbe4ace5441e4cd99ba423e0190cc541da31) ) - - ROM_REGION( 0x10000, "sub", 0 ) - ROM_LOAD( "epr-11429.d4", 0x00000, 0x08000, CRC(0ca50a66) SHA1(cccb081b447419138b1ebd309e7f291e392a44d5) ) - - /* Nasco X090-PC-B */ - ROM_REGION( 0x08000, "gfx1", 0 ) - ROM_LOAD( "epr-11446", 0x00000, 0x08000, CRC(45052470) SHA1(c2312a9f814d6dbe42aa465147a04a2bd9b2aa1b) ) - - ROM_REGION( 0x10000, "gfx2", 0 ) - ROM_LOAD( "epr-11447.f7", 0x08000, 0x08000, CRC(b3afc5b3) SHA1(376d527f60e9044f18d19a5535bca77606efbd4c) ) - ROM_LOAD( "epr-11448.h7", 0x00000, 0x08000, CRC(05dab626) SHA1(73feaca6e23c673a7d8c9e972714b20bd8f2d51e) ) - - /* both tilemaps on angelkds use the same gfx */ - ROM_REGION( 0x40000, "gfx3", 0 ) - ROM_LOAD( "epr-11437", 0x00000, 0x08000, CRC(a520b628) SHA1(2b51f59e760e740e5e6b06dad61bbc23fc84a72b) ) - ROM_LOAD( "epr-11436", 0x08000, 0x08000, CRC(469ab216) SHA1(8223f072a6f9135ff84841c95410368bcea073d8) ) - ROM_LOAD( "epr-11435", 0x10000, 0x08000, CRC(b0f8c245) SHA1(882e27eaceac46c397fdae8427a082caa7d6b7dc) ) - ROM_LOAD( "epr-11434", 0x18000, 0x08000, CRC(cbde81f5) SHA1(5d5b8e709c9dd09a45dfced6f3d4a9c52500da6b) ) - ROM_LOAD( "epr-11433", 0x20000, 0x08000, CRC(b63fa414) SHA1(25adcafd7e17ab0be0fed2ec44245124febd74b3) ) - ROM_LOAD( "epr-11432", 0x28000, 0x08000, CRC(00dc747b) SHA1(041b73aa48b45162af33b5f416ccc0c0dbbd995b) ) - ROM_LOAD( "epr-11431", 0x30000, 0x08000, CRC(ac2025af) SHA1(2aba145df3ccdb1a7f0fec524bd2de3f9aab4161) ) - ROM_LOAD( "epr-11430", 0x38000, 0x08000, CRC(d640f89e) SHA1(38fb67bcb2a3d1ad614fc62e42f22a66bc757137) ) - - ROM_REGION( 0x40000, "gfx4", 0 ) - ROM_LOAD( "epr-11445", 0x00000, 0x08000, CRC(a520b628) SHA1(2b51f59e760e740e5e6b06dad61bbc23fc84a72b) ) - ROM_LOAD( "epr-11444", 0x08000, 0x08000, CRC(469ab216) SHA1(8223f072a6f9135ff84841c95410368bcea073d8) ) - ROM_LOAD( "epr-11443", 0x10000, 0x08000, CRC(b0f8c245) SHA1(882e27eaceac46c397fdae8427a082caa7d6b7dc) ) - ROM_LOAD( "epr-11442", 0x18000, 0x08000, CRC(cbde81f5) SHA1(5d5b8e709c9dd09a45dfced6f3d4a9c52500da6b) ) - ROM_LOAD( "epr-11441", 0x20000, 0x08000, CRC(b63fa414) SHA1(25adcafd7e17ab0be0fed2ec44245124febd74b3) ) - ROM_LOAD( "epr-11440", 0x28000, 0x08000, CRC(00dc747b) SHA1(041b73aa48b45162af33b5f416ccc0c0dbbd995b) ) - ROM_LOAD( "epr-11439", 0x30000, 0x08000, CRC(ac2025af) SHA1(2aba145df3ccdb1a7f0fec524bd2de3f9aab4161) ) - ROM_LOAD( "epr-11438", 0x38000, 0x08000, CRC(d640f89e) SHA1(38fb67bcb2a3d1ad614fc62e42f22a66bc757137) ) - - ROM_REGION( 0x20, "proms", 0 ) - ROM_LOAD( "63s081n.u5", 0x00, 0x20, CRC(36b98627) SHA1(d2d54d92d1d47e7cc85104989ee421ce5d80a42a) ) -ROM_END - -ROM_START( spcpostn ) - /* X090-PC-A 171-5383 (Sega 834-6089 SPACE POSITION) */ - ROM_REGION( 0x8000, "maincpu", 0 ) /* D317-0005 (NEC Z80 Custom) */ - ROM_LOAD( "epr-10125.c10", 0x00000, 0x08000, CRC(bffd38c6) SHA1(af02907124343ddecd21439d25f1ebb81ef9f51a) ) /* encrypted */ - - ROM_REGION( 0x40000, "user1", 0 ) /* Banked Code */ - ROM_LOAD( "epr-10120.c1", 0x00000, 0x08000, CRC(d6399f99) SHA1(4c7d19a8798e5a10b688bf793ca74f5170fd9b51) ) - ROM_LOAD( "epr-10121.c2", 0x08000, 0x08000, CRC(d4861560) SHA1(74d28c36a08880abbd3c398cc3e990e8986caccb) ) - ROM_LOAD( "epr-10122.c3", 0x10000, 0x08000, CRC(7a1bff1b) SHA1(e1bda8430fd632c1813dd78e0f210a358e1b0d2f) ) - ROM_LOAD( "epr-10123.c4", 0x18000, 0x08000, CRC(6aed2925) SHA1(75848c8086c460b72494da2367f592d7d5dcf9f1) ) - ROM_LOAD( "epr-10124.c5", 0x20000, 0x08000, CRC(a1d7ae6b) SHA1(ec81fecf63e0515cae2077e2623262227adfdf37) ) - - ROM_REGION( 0x10000, "sub", 0 ) /* NEC D780C-1 */ - ROM_LOAD( "epr-10126.d4", 0x00000, 0x08000, CRC(ab17f852) SHA1(dc0db427ddb4df97bb40dfb6fc65cb9354a6b9ad) ) - - /* X090-PC-B 171-5384 */ - ROM_REGION( 0x08000, "gfx1", 0 ) - ROM_LOAD( "epr-10133.17", 0x00000, 0x08000, CRC(642e6609) SHA1(2dfb4cc66f89543b55ed2a5b914e2c9304e821ca) ) - - ROM_REGION( 0x10000, "gfx2", 0 ) - ROM_LOAD( "epr-10134.18", 0x08000, 0x08000, CRC(c674ff88) SHA1(9f240910a1ffb7c9e09d2326de280e6a5dd84565) ) - ROM_LOAD( "epr-10135.19", 0x00000, 0x08000, CRC(0685c4fa) SHA1(6950d9ad9ec13236cf24e83e87adb62aa53af7bb) ) - - ROM_REGION( 0x30000, "gfx3", 0 ) - ROM_LOAD( "epr-10130.14", 0x10000, 0x08000, CRC(b68fcb36) SHA1(3943dd550b13f2911d56d8dad675410da79196e6) ) - ROM_LOAD( "epr-10131.15", 0x08000, 0x08000, CRC(de223817) SHA1(1860db0a19c926fcfaabe676cb57fff38c4df8e6) ) - ROM_LOAD( "epr-10132.16", 0x00000, 0x08000, CRC(2df8b1bd) SHA1(cad8befa3f2c158d2aa74073066ccd2b54e68825) ) - - ROM_REGION( 0x18000, "gfx4", 0 ) - ROM_LOAD( "epr-10127.06", 0x10000, 0x08000, CRC(b68fcb36) SHA1(3943dd550b13f2911d56d8dad675410da79196e6) ) - ROM_LOAD( "epr-10128.07", 0x08000, 0x08000, CRC(de223817) SHA1(1860db0a19c926fcfaabe676cb57fff38c4df8e6) ) - ROM_LOAD( "epr-10129.08", 0x00000, 0x08000, CRC(a6f21023) SHA1(8d573446a2d3d3428409707d0c59b118d1463131) ) - - ROM_REGION( 0x20, "proms", 0 ) - ROM_LOAD( "63s081n.u5", 0x00, 0x20, CRC(36b98627) SHA1(d2d54d92d1d47e7cc85104989ee421ce5d80a42a) ) -ROM_END - - -void angelkds_state::init_angelkds() -{ - uint8_t *RAM = memregion("user1")->base(); - membank("bank1")->configure_entries(0, 16, &RAM[0x0000], 0x4000); -} - - - -GAME( 1988, angelkds, 0, angelkds, angelkds, angelkds_state, init_angelkds, ROT90, "Sega / Nasco?", "Angel Kids (Japan)" , MACHINE_SUPPORTS_SAVE) /* Nasco not displayed but 'Exa Planning' is */ -GAME( 1986, spcpostn, 0, spcpostn, spcpostn, angelkds_state, init_angelkds, ROT90, "Sega / Nasco", "Space Position (Japan)" , MACHINE_SUPPORTS_SAVE) /* encrypted */ |