summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/angelkds.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/angelkds.cpp')
-rw-r--r--src/mame/drivers/angelkds.cpp694
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 638202663d2..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/2203intf.h"
-
-#include "emupal.h"
-#include "screen.h"
-#include "speaker.h"
-
-
-
-/*** CPU Banking
-
-*/
-
-WRITE8_MEMBER(angelkds_state::angelkds_cpu_bank_write)
-{
- 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 ?
-
-*/
-
-WRITE8_MEMBER(angelkds_state::angelkds_main_sound_w)
-{
- m_sound[offset] = data;
-}
-
-READ8_MEMBER(angelkds_state::angelkds_main_sound_r)
-{
- return m_sound2[offset];
-}
-
-WRITE8_MEMBER(angelkds_state::angelkds_sub_sound_w)
-{
- m_sound2[offset] = data;
-}
-
-READ8_MEMBER(angelkds_state::angelkds_sub_sound_r)
-{
- 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 */