summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/junofrst.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/junofrst.c')
-rw-r--r--src/mame/drivers/junofrst.c455
1 files changed, 455 insertions, 0 deletions
diff --git a/src/mame/drivers/junofrst.c b/src/mame/drivers/junofrst.c
new file mode 100644
index 00000000000..a1e84bf7b0e
--- /dev/null
+++ b/src/mame/drivers/junofrst.c
@@ -0,0 +1,455 @@
+/***************************************************************************
+
+Juno First : memory map same as tutankham with some address changes
+Chris Hardy (chrish@kcbbs.gen.nz)
+
+Thanks to Rob Jarret for the original Tutankham memory map on which both the
+Juno First emu and the mame driver is based on.
+
+ Juno First memory map by Chris Hardy
+
+Read/Write memory
+
+$0000-$7FFF = Screen RAM (only written to)
+$8000-$800f = Palette RAM. BBGGGRRR (D7->D0)
+$8100-$8FFF = Work RAM
+
+Write memory
+
+$8030 - interrupt control register D0 = interupts on or off
+$8031 - unknown
+$8032 - unknown
+$8033 - unknown
+$8034 - flip screen x
+$8035 - flip screen y
+
+$8040 - Sound CPU req/ack data
+$8050 - Sound CPU command data
+$8060 - Banked memory page select.
+$8070/1 - Blitter source data word
+$8072/3 - Blitter destination word. Write to $8073 triggers a blit
+
+Read memory
+
+$8010 - Dipswitch 2
+$801c - Watchdog
+$8020 - Start/Credit IO
+ D2 = Credit 1
+ D3 = Start 1
+ D4 = Start 2
+$8024 - P1 IO
+ D0 = left
+ D1 = right
+ D2 = up
+ D3 = down
+ D4 = fire 2
+ D5 = fire 1
+
+$8028 - P2 IO - same as P1 IO
+$802c - Dipswitch 1
+
+
+
+$9000->$9FFF Banked Memory - see below
+$A000->$BFFF "juno\\JFA_B9.BIN",
+$C000->$DFFF "juno\\JFB_B10.BIN",
+$E000->$FFFF "juno\\JFC_A10.BIN",
+
+Banked memory - Paged into $9000->$9FFF..
+
+NOTE - In Tutankhm this only contains graphics, in Juno First it also contains code. (which
+ generally sets up the blitter)
+
+ "juno\\JFC1_A4.BIN", $0000->$1FFF
+ "juno\\JFC2_A5.BIN", $2000->$3FFF
+ "juno\\JFC3_A6.BIN", $4000->$5FFF
+ "juno\\JFC4_A7.BIN", $6000->$7FFF
+ "juno\\JFC5_A8.BIN", $8000->$9FFF
+ "juno\\JFC6_A9.BIN", $A000->$bFFF
+
+Blitter source graphics
+
+ "juno\\JFS3_C7.BIN", $C000->$DFFF
+ "juno\\JFS4_D7.BIN", $E000->$FFFF
+ "juno\\JFS5_E7.BIN", $10000->$11FFF
+
+
+***************************************************************************/
+
+
+#include "driver.h"
+#include "cpu/m6809/m6809.h"
+#include "cpu/i8039/i8039.h"
+#include "cpu/z80/z80.h"
+#include "sound/ay8910.h"
+#include "sound/dac.h"
+#include "sound/flt_rc.h"
+
+
+void konami1_decode(void);
+
+extern UINT8 *tutankhm_videoram;
+extern size_t tutankhm_videoram_size;
+extern UINT8 *tutankhm_paletteram;
+extern UINT8 *tutankhm_scroll;
+
+static int i8039_status;
+
+WRITE8_HANDLER( tutankhm_flip_screen_x_w );
+WRITE8_HANDLER( tutankhm_flip_screen_y_w );
+WRITE8_HANDLER( junofrst_blitter_w );
+VIDEO_UPDATE( tutankhm );
+
+WRITE8_HANDLER( tutankhm_sh_irqtrigger_w );
+
+
+static WRITE8_HANDLER( junofrst_bankselect_w )
+{
+ memory_set_bank(1, data & 0x0f);
+}
+
+
+static READ8_HANDLER( junofrst_portA_r )
+{
+ int timer;
+
+
+ /* main xtal 14.318MHz, divided by 8 to get the CPU clock, further */
+ /* divided by 1024 to get this timer */
+ /* (divide by (1024/2), and not 1024, because the CPU cycle counter is */
+ /* incremented every other state change of the clock) */
+ timer = (activecpu_gettotalcycles() / (1024/2)) & 0x0f;
+
+ /* low three bits come from the 8039 */
+
+ return (timer << 4) | i8039_status;
+}
+
+
+static WRITE8_HANDLER( junofrst_portB_w )
+{
+ int i;
+
+
+ for (i = 0;i < 3;i++)
+ {
+ int C;
+
+
+ C = 0;
+ if (data & 1) C += 47000; /* 47000pF = 0.047uF */
+ if (data & 2) C += 220000; /* 220000pF = 0.22uF */
+ data >>= 2;
+ filter_rc_set_RC(i,FLT_RC_LOWPASS,1000,2200,200,CAP_P(C));
+ }
+}
+
+
+static WRITE8_HANDLER( junofrst_sh_irqtrigger_w )
+{
+ static int last;
+
+
+ if (last == 0 && data == 1)
+ {
+ /* setting bit 0 low then high triggers IRQ on the sound CPU */
+ cpunum_set_input_line_and_vector(1,0,HOLD_LINE,0xff);
+ }
+
+ last = data;
+}
+
+
+static WRITE8_HANDLER( junofrst_i8039_irq_w )
+{
+ cpunum_set_input_line(2, 0, ASSERT_LINE);
+}
+
+
+static WRITE8_HANDLER( i8039_irqen_and_status_w )
+{
+ if ((data & 0x80) == 0)
+ cpunum_set_input_line(2, 0, CLEAR_LINE);
+ i8039_status = (data & 0x70) >> 4;
+}
+
+
+static WRITE8_HANDLER( flip_screen_w )
+{
+ tutankhm_flip_screen_x_w(0, data);
+ tutankhm_flip_screen_y_w(0, data);
+}
+
+
+static WRITE8_HANDLER( junofrst_coin_counter_w )
+{
+ coin_counter_w(offset,data);
+}
+
+
+
+static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 )
+ AM_RANGE(0x0000, 0x7fff) AM_RAM AM_BASE(&tutankhm_videoram) AM_SIZE(&tutankhm_videoram_size)
+ AM_RANGE(0x8000, 0x800f) AM_RAM AM_BASE(&tutankhm_paletteram)
+ AM_RANGE(0x8010, 0x8010) AM_READ(input_port_0_r) /* DSW2 (inverted bits) */
+ AM_RANGE(0x801c, 0x801c) AM_READ(watchdog_reset_r)
+ AM_RANGE(0x8020, 0x8020) AM_READ(input_port_1_r) /* IN0 I/O: Coin slots, service, 1P/2P buttons */
+ AM_RANGE(0x8024, 0x8024) AM_READ(input_port_2_r) /* IN1: Player 1 I/O */
+ AM_RANGE(0x8028, 0x8028) AM_READ(input_port_3_r) /* IN2: Player 2 I/O */
+ AM_RANGE(0x802c, 0x802c) AM_READ(input_port_4_r) /* DSW1 (inverted bits) */
+ AM_RANGE(0x8030, 0x8030) AM_WRITE(interrupt_enable_w)
+ AM_RANGE(0x8031, 0x8032) AM_WRITE(junofrst_coin_counter_w)
+ AM_RANGE(0x8033, 0x8033) AM_WRITE(MWA8_RAM) AM_BASE(&tutankhm_scroll) /* not used in Juno */
+ AM_RANGE(0x8034, 0x8035) AM_WRITE(flip_screen_w)
+ AM_RANGE(0x8040, 0x8040) AM_WRITE(junofrst_sh_irqtrigger_w)
+ AM_RANGE(0x8050, 0x8050) AM_WRITE(soundlatch_w)
+ AM_RANGE(0x8060, 0x8060) AM_WRITE(junofrst_bankselect_w)
+ AM_RANGE(0x8070, 0x8073) AM_WRITE(junofrst_blitter_w)
+ AM_RANGE(0x8100, 0x8fff) AM_RAM
+ AM_RANGE(0x9000, 0x9fff) AM_READ(MRA8_BANK1)
+ AM_RANGE(0xa000, 0xffff) AM_ROM
+ADDRESS_MAP_END
+
+
+static ADDRESS_MAP_START( audio_map, ADDRESS_SPACE_PROGRAM, 8 )
+ AM_RANGE(0x0000, 0x0fff) AM_ROM
+ AM_RANGE(0x2000, 0x23ff) AM_RAM
+ AM_RANGE(0x3000, 0x3000) AM_READ(soundlatch_r)
+ AM_RANGE(0x4000, 0x4000) AM_WRITE(AY8910_control_port_0_w)
+ AM_RANGE(0x4001, 0x4001) AM_READ(AY8910_read_port_0_r)
+ AM_RANGE(0x4002, 0x4002) AM_WRITE(AY8910_write_port_0_w)
+ AM_RANGE(0x5000, 0x5000) AM_WRITE(soundlatch2_w)
+ AM_RANGE(0x6000, 0x6000) AM_WRITE(junofrst_i8039_irq_w)
+ADDRESS_MAP_END
+
+
+static ADDRESS_MAP_START( mcu_map, ADDRESS_SPACE_PROGRAM, 8 )
+ AM_RANGE(0x0000, 0x0fff) AM_ROM
+ADDRESS_MAP_END
+
+
+static ADDRESS_MAP_START( mcu_io_map, ADDRESS_SPACE_IO, 8 )
+ AM_RANGE(0x00, 0xff) AM_READ(soundlatch2_r)
+ AM_RANGE(I8039_p1, I8039_p1) AM_WRITE(DAC_0_data_w)
+ AM_RANGE(I8039_p2, I8039_p2) AM_WRITE(i8039_irqen_and_status_w)
+ADDRESS_MAP_END
+
+
+static INPUT_PORTS_START( junofrst )
+ PORT_START_TAG("DSW2")
+ PORT_DIPNAME( 0x03, 0x03, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x03, "3" )
+ PORT_DIPSETTING( 0x02, "4" )
+ PORT_DIPSETTING( 0x01, "5" )
+ PORT_DIPSETTING( 0x00, "256 (Cheat)")
+ PORT_DIPNAME( 0x04, 0x00, DEF_STR( Cabinet ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( Cocktail ) )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x70, 0x70, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x70, "1 (Easiest)" )
+ PORT_DIPSETTING( 0x60, "2" )
+ PORT_DIPSETTING( 0x50, "3" )
+ PORT_DIPSETTING( 0x40, "4" )
+ PORT_DIPSETTING( 0x30, "5" )
+ PORT_DIPSETTING( 0x20, "6" )
+ PORT_DIPSETTING( 0x10, "7" )
+ PORT_DIPSETTING( 0x00, "8 (Hardest)" )
+ PORT_DIPNAME( 0x80, 0x00, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+
+ PORT_START_TAG("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 )
+ 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_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("DSW1")
+ PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coin_A ) )
+ 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_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_DIPSETTING( 0x00, "Disabled" )
+/* 0x00 not remmed out since the game makes the usual sound if you insert the coin */
+INPUT_PORTS_END
+
+
+
+static struct AY8910interface ay8910_interface =
+{
+ junofrst_portA_r,
+ 0,
+ 0,
+ junofrst_portB_w
+};
+
+
+static MACHINE_DRIVER_START( junofrst )
+
+ /* basic machine hardware */
+ MDRV_CPU_ADD(M6809, 1500000) /* 1.5 MHz ??? */
+ MDRV_CPU_PROGRAM_MAP(main_map,0)
+ MDRV_CPU_VBLANK_INT(irq0_line_hold,1)
+
+ MDRV_CPU_ADD(Z80,14318000/8)
+ /* audio CPU */ /* 1.78975 MHz */
+ MDRV_CPU_PROGRAM_MAP(audio_map,0)
+
+ MDRV_CPU_ADD(I8039,8000000/I8039_CLOCK_DIVIDER)
+ /* audio CPU */ /* 8MHz crystal */
+ MDRV_CPU_PROGRAM_MAP(mcu_map,0)
+ MDRV_CPU_IO_MAP(mcu_io_map,0)
+
+ MDRV_SCREEN_REFRESH_RATE(30)
+ MDRV_SCREEN_VBLANK_TIME(DEFAULT_30HZ_VBLANK_DURATION)
+
+ /* video hardware */
+ MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
+ MDRV_SCREEN_FORMAT(BITMAP_FORMAT_RGB32)
+ MDRV_SCREEN_SIZE(32*8, 32*8)
+ MDRV_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) /* not sure about the visible area */
+
+ MDRV_VIDEO_UPDATE(tutankhm)
+
+ /* sound hardware */
+ MDRV_SPEAKER_STANDARD_MONO("mono")
+
+ MDRV_SOUND_ADD(AY8910, 14318000/8)
+ MDRV_SOUND_CONFIG(ay8910_interface)
+ MDRV_SOUND_ROUTE(0, "filter.0.0", 0.30)
+ MDRV_SOUND_ROUTE(1, "filter.0.1", 0.30)
+ MDRV_SOUND_ROUTE(2, "filter.0.2", 0.30)
+
+ MDRV_SOUND_ADD(DAC, 0)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
+
+ MDRV_SOUND_ADD_TAG("filter.0.0", FILTER_RC, 0)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+ MDRV_SOUND_ADD_TAG("filter.0.1", FILTER_RC, 0)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+ MDRV_SOUND_ADD_TAG("filter.0.2", FILTER_RC, 0)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+MACHINE_DRIVER_END
+
+
+ROM_START( junofrst )
+ ROM_REGION( 0x1c000, REGION_CPU1, 0 ) /* code + space for decrypted opcodes */
+ ROM_LOAD( "jfa_b9.bin", 0x0a000, 0x2000, CRC(f5a7ab9d) SHA1(9603e797839290f8e1f93ccff9cc820604cc49ab) ) /* program ROMs */
+ ROM_LOAD( "jfb_b10.bin", 0x0c000, 0x2000, CRC(f20626e0) SHA1(46f58bdc1a613124e2c148b61f774fcc6c232868) )
+ ROM_LOAD( "jfc_a10.bin", 0x0e000, 0x2000, CRC(1e7744a7) SHA1(bee69833af886436016560295cddf0c8b4c5e771) )
+
+ ROM_LOAD( "jfc1_a4.bin", 0x10000, 0x2000, CRC(03ccbf1d) SHA1(02b45fe3c51bdc940919aac68136a121ed9bee18) ) /* graphic and code ROMs (banked) */
+ ROM_LOAD( "jfc2_a5.bin", 0x12000, 0x2000, CRC(cb372372) SHA1(a48e7de08647cbece7787c287217eac7e7a7510b) )
+ ROM_LOAD( "jfc3_a6.bin", 0x14000, 0x2000, CRC(879d194b) SHA1(3c7af8767c9ce908fa1761180c6e585823216d8a) )
+ ROM_LOAD( "jfc4_a7.bin", 0x16000, 0x2000, CRC(f28af80b) SHA1(4d0e247e729365476dd3996c7d1f2a19fc83d773) )
+ ROM_LOAD( "jfc5_a8.bin", 0x18000, 0x2000, CRC(0539f328) SHA1(c532aaed7f9e6f564e3df0dc6d8fdbee6ed721a2) )
+ ROM_LOAD( "jfc6_a9.bin", 0x1a000, 0x2000, CRC(1da2ad6e) SHA1(de997d1b2ff6671088b57192bc9f1279359fad5d) )
+
+ ROM_REGION( 0x10000 , REGION_CPU2, 0 ) /* 64k for Z80 sound CPU code */
+ ROM_LOAD( "jfs1_j3.bin", 0x0000, 0x1000, CRC(235a2893) SHA1(b90251c4971f7ba12e407f86c32723d513d6b4a0) )
+
+ ROM_REGION( 0x1000, REGION_CPU3, 0 ) /* 8039 */
+ ROM_LOAD( "jfs2_p4.bin", 0x0000, 0x1000, CRC(d0fa5d5f) SHA1(9d0730d1d037bf96b0c933a32355602bf2d735dd) )
+
+ ROM_REGION( 0x6000, REGION_GFX1, 0 ) /* BLTROM, used at runtime */
+ ROM_LOAD( "jfs3_c7.bin", 0x00000, 0x2000, CRC(aeacf6db) SHA1(f99ef9f9153d7a83e1881d9181faac99cb8c8a57) )
+ ROM_LOAD( "jfs4_d7.bin", 0x02000, 0x2000, CRC(206d954c) SHA1(65494766676f18d8b5ae9a54cee00790e7b1e67e) )
+ ROM_LOAD( "jfs5_e7.bin", 0x04000, 0x2000, CRC(1eb87a6e) SHA1(f5471b9f6f1fa6d6e5d76300d89f71da3129516a) )
+ROM_END
+
+ROM_START( junofstg )
+ ROM_REGION( 0x1c000, REGION_CPU1, 0 ) /* code + space for decrypted opcodes */
+ ROM_LOAD( "jfg_a.9b", 0x0a000, 0x2000, CRC(8f77d1c5) SHA1(d47fcdbc47673c228661a3528fff0c691c76df9e) ) /* program ROMs */
+ ROM_LOAD( "jfg_b.10b", 0x0c000, 0x2000, CRC(cd645673) SHA1(25994210a8a424bdf2eca3efa19e7eeffc097cec) )
+ ROM_LOAD( "jfg_c.10a", 0x0e000, 0x2000, CRC(47852761) SHA1(eeef814b6ad681d4c2274f0a69d1ed9c5c1b9118) )
+
+ ROM_LOAD( "jfgc1.4a", 0x10000, 0x2000, CRC(90a05ae6) SHA1(0aa835e1d33ab0433189b329b791c952e69103c1) ) /* graphic and code ROMs (banked) */
+ ROM_LOAD( "jfc2_a5.bin", 0x12000, 0x2000, CRC(cb372372) SHA1(a48e7de08647cbece7787c287217eac7e7a7510b) )
+ ROM_LOAD( "jfc3_a6.bin", 0x14000, 0x2000, CRC(879d194b) SHA1(3c7af8767c9ce908fa1761180c6e585823216d8a) )
+ ROM_LOAD( "jfgc4.7a", 0x16000, 0x2000, CRC(e8864a43) SHA1(52b04e69036622abeb6ec99ac3daeda6a2572994) )
+ ROM_LOAD( "jfc5_a8.bin", 0x18000, 0x2000, CRC(0539f328) SHA1(c532aaed7f9e6f564e3df0dc6d8fdbee6ed721a2) )
+ ROM_LOAD( "jfc6_a9.bin", 0x1a000, 0x2000, CRC(1da2ad6e) SHA1(de997d1b2ff6671088b57192bc9f1279359fad5d) )
+
+ ROM_REGION( 0x10000 , REGION_CPU2, 0 ) /* 64k for Z80 sound CPU code */
+ ROM_LOAD( "jfs1_j3.bin", 0x0000, 0x1000, CRC(235a2893) SHA1(b90251c4971f7ba12e407f86c32723d513d6b4a0) )
+
+ ROM_REGION( 0x1000, REGION_CPU3, 0 ) /* 8039 */
+ ROM_LOAD( "jfs2_p4.bin", 0x0000, 0x1000, CRC(d0fa5d5f) SHA1(9d0730d1d037bf96b0c933a32355602bf2d735dd) )
+
+ ROM_REGION( 0x6000, REGION_GFX1, 0 ) /* BLTROM, used at runtime */
+ ROM_LOAD( "jfs3_c7.bin", 0x00000, 0x2000, CRC(aeacf6db) SHA1(f99ef9f9153d7a83e1881d9181faac99cb8c8a57) )
+ ROM_LOAD( "jfs4_d7.bin", 0x02000, 0x2000, CRC(206d954c) SHA1(65494766676f18d8b5ae9a54cee00790e7b1e67e) )
+ ROM_LOAD( "jfs5_e7.bin", 0x04000, 0x2000, CRC(1eb87a6e) SHA1(f5471b9f6f1fa6d6e5d76300d89f71da3129516a) )
+ROM_END
+
+
+
+static DRIVER_INIT( junofrst )
+{
+ extern UINT8 *konami1_decrypted;
+
+ konami1_decode();
+
+ memory_configure_bank(1, 0, 16, memory_region(REGION_CPU1) + 0x10000, 0x1000);
+ memory_configure_bank_decrypted(1, 0, 16, konami1_decrypted + 0x10000, 0x1000);
+}
+
+
+GAME( 1983, junofrst, 0, junofrst, junofrst, junofrst, ROT90, "Konami", "Juno First", 0 )
+GAME( 1983, junofstg, junofrst, junofrst, junofrst, junofrst, ROT90, "Konami (Gottlieb license)", "Juno First (Gottlieb)", 0 )