mirror of
https://github.com/holub/mame
synced 2025-04-25 17:56:43 +03:00
Rewritten DECO222 encryption for ghostb, oscar and srdarwin to use the new model [Olivier Galibert]
This commit is contained in:
parent
ee2fa104f6
commit
d8779b6201
@ -55,6 +55,49 @@ To do:
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
class deco_222_device : public m6502_device {
|
||||
public:
|
||||
deco_222_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
protected:
|
||||
class mi_decrypt : public mi_default_normal {
|
||||
public:
|
||||
bool had_written;
|
||||
|
||||
virtual ~mi_decrypt() {}
|
||||
virtual UINT8 read_decrypted(UINT16 adr);
|
||||
};
|
||||
|
||||
virtual void device_start();
|
||||
virtual void device_reset();
|
||||
|
||||
};
|
||||
|
||||
static const device_type DECO_222 = &device_creator<deco_222_device>;
|
||||
|
||||
deco_222_device::deco_222_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
||||
m6502_device(mconfig, DECO_222, "DECO 222", tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
void deco_222_device::device_start()
|
||||
{
|
||||
mintf = new mi_decrypt;
|
||||
init();
|
||||
}
|
||||
|
||||
void deco_222_device::device_reset()
|
||||
{
|
||||
m6502_device::device_reset();
|
||||
static_cast<mi_decrypt *>(mintf)->had_written = false;
|
||||
}
|
||||
|
||||
UINT8 deco_222_device::mi_decrypt::read_decrypted(UINT16 adr)
|
||||
{
|
||||
return BITSWAP8(direct->read_raw_byte(adr) ,7,5,6,4,3,2,1,0);;
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(dec8_state::dec8_mxc06_karn_buffer_spriteram_w)
|
||||
{
|
||||
UINT8* spriteram = m_spriteram->live();
|
||||
@ -458,7 +501,7 @@ WRITE8_MEMBER(dec8_state::ghostb_bank_w)
|
||||
membank("bank1")->set_entry(data >> 4);
|
||||
|
||||
if ((data&1)==0) m_maincpu->set_input_line(M6809_IRQ_LINE, CLEAR_LINE);
|
||||
m_nmi_enable = (data & 2) >> 1;
|
||||
if (data & 2) m_nmi_enable =1; else m_nmi_enable = 0;
|
||||
flip_screen_set(data & 0x08);
|
||||
}
|
||||
|
||||
@ -533,6 +576,10 @@ WRITE8_MEMBER(dec8_state::oscar_int_w)
|
||||
/* Used by Shackled, Last Mission, Captain Silver */
|
||||
WRITE8_MEMBER(dec8_state::shackled_int_w)
|
||||
{
|
||||
#if 0
|
||||
/* This is correct, but the cpus in Shackled need an interleave of about 5000!
|
||||
With lower interleave CPU 0 misses an interrupt at the start of the game
|
||||
(The last interrupt has not finished and been ack'd when the new one occurs */
|
||||
switch (offset)
|
||||
{
|
||||
case 0: /* CPU 2 - IRQ acknowledge */
|
||||
@ -550,6 +597,23 @@ WRITE8_MEMBER(dec8_state::shackled_int_w)
|
||||
m_subcpu->set_input_line(M6809_IRQ_LINE, ASSERT_LINE);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
switch (offset)
|
||||
{
|
||||
case 0: /* CPU 2 - IRQ acknowledge */
|
||||
return;
|
||||
case 1: /* CPU 1 - IRQ acknowledge */
|
||||
return;
|
||||
case 2: /* i8751 - FIRQ acknowledge */
|
||||
return;
|
||||
case 3: /* IRQ 1 */
|
||||
m_maincpu->set_input_line(M6809_IRQ_LINE, HOLD_LINE);
|
||||
return;
|
||||
case 4: /* IRQ 2 */
|
||||
m_subcpu->set_input_line(M6809_IRQ_LINE, HOLD_LINE);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
@ -2004,16 +2068,6 @@ void dec8_state::machine_reset()
|
||||
}
|
||||
}
|
||||
|
||||
// MCFG_SCREEN_RAW_PARAMS(DEC8_PIXEL_CLOCK, DEC8_HTOTAL, DEC8_HBEND, DEC8_HBSTART, DEC8_VTOTAL, DEC8_VBEND, DEC8_VBSTART)
|
||||
|
||||
/* TODO: These are raw guesses, only to get ~57,41 Hz, assume to be the same as dec0 */
|
||||
#define DEC8_PIXEL_CLOCK XTAL_20MHz/4
|
||||
#define DEC8_HTOTAL 256+74
|
||||
#define DEC8_HBEND 0
|
||||
#define DEC8_HBSTART 256
|
||||
#define DEC8_VTOTAL 264
|
||||
#define DEC8_VBEND 8
|
||||
#define DEC8_VBSTART 256-8
|
||||
|
||||
static MACHINE_CONFIG_START( lastmisn, dec8_state )
|
||||
|
||||
@ -2027,9 +2081,9 @@ static MACHINE_CONFIG_START( lastmisn, dec8_state )
|
||||
MCFG_CPU_ADD("audiocpu", M6502, 1500000)
|
||||
MCFG_CPU_PROGRAM_MAP(ym3526_s_map)
|
||||
/* NMIs are caused by the main CPU */
|
||||
|
||||
MCFG_QUANTUM_TIME(attotime::from_hz(12000))
|
||||
|
||||
|
||||
/* video hardware */
|
||||
MCFG_BUFFERED_SPRITERAM8_ADD("spriteram")
|
||||
|
||||
@ -2037,11 +2091,10 @@ static MACHINE_CONFIG_START( lastmisn, dec8_state )
|
||||
deco_karnovsprites_device::set_gfx_region(*device, 1);
|
||||
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
// MCFG_SCREEN_REFRESH_RATE(58)
|
||||
// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* 58Hz, 529ms Vblank duration */)
|
||||
// MCFG_SCREEN_SIZE(32*8, 32*8)
|
||||
// MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
|
||||
MCFG_SCREEN_RAW_PARAMS(DEC8_PIXEL_CLOCK, DEC8_HTOTAL, DEC8_HBEND, DEC8_HBSTART, DEC8_VTOTAL, DEC8_VBEND, DEC8_VBSTART)
|
||||
MCFG_SCREEN_REFRESH_RATE(58)
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* 58Hz, 529ms Vblank duration */)
|
||||
MCFG_SCREEN_SIZE(32*8, 32*8)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(dec8_state, screen_update_lastmisn)
|
||||
|
||||
MCFG_GFXDECODE(shackled)
|
||||
@ -2075,9 +2128,8 @@ static MACHINE_CONFIG_START( shackled, dec8_state )
|
||||
MCFG_CPU_ADD("audiocpu", M6502, 1500000)
|
||||
MCFG_CPU_PROGRAM_MAP(ym3526_s_map)
|
||||
/* NMIs are caused by the main CPU */
|
||||
MCFG_QUANTUM_TIME(attotime::from_hz(4800))
|
||||
|
||||
// MCFG_QUANTUM_TIME(attotime::from_hz(100000))
|
||||
MCFG_QUANTUM_PERFECT_CPU("maincpu") // needs heavy sync, otherwise one of the two CPUs will miss an irq and makes the game to hang
|
||||
|
||||
/* video hardware */
|
||||
MCFG_BUFFERED_SPRITERAM8_ADD("spriteram")
|
||||
@ -2086,11 +2138,10 @@ static MACHINE_CONFIG_START( shackled, dec8_state )
|
||||
deco_karnovsprites_device::set_gfx_region(*device, 1);
|
||||
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
// MCFG_SCREEN_REFRESH_RATE(58)
|
||||
// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* 58Hz, 529ms Vblank duration */)
|
||||
// MCFG_SCREEN_SIZE(32*8, 32*8)
|
||||
// MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
|
||||
MCFG_SCREEN_RAW_PARAMS(DEC8_PIXEL_CLOCK, DEC8_HTOTAL, DEC8_HBEND, DEC8_HBSTART, DEC8_VTOTAL, DEC8_VBEND, DEC8_VBSTART)
|
||||
MCFG_SCREEN_REFRESH_RATE(58)
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* 58Hz, 529ms Vblank duration */)
|
||||
MCFG_SCREEN_SIZE(32*8, 32*8)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(dec8_state, screen_update_shackled)
|
||||
|
||||
MCFG_GFXDECODE(shackled)
|
||||
@ -2134,11 +2185,10 @@ static MACHINE_CONFIG_START( gondo, dec8_state )
|
||||
deco_karnovsprites_device::set_gfx_region(*device, 1);
|
||||
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
// MCFG_SCREEN_REFRESH_RATE(58)
|
||||
// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529) /* 58Hz, 529ms Vblank duration */)
|
||||
// MCFG_SCREEN_SIZE(32*8, 32*8)
|
||||
// MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
|
||||
MCFG_SCREEN_RAW_PARAMS(DEC8_PIXEL_CLOCK, DEC8_HTOTAL, DEC8_HBEND, DEC8_HBSTART, DEC8_VTOTAL, DEC8_VBEND, DEC8_VBSTART)
|
||||
MCFG_SCREEN_REFRESH_RATE(58)
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529) /* 58Hz, 529ms Vblank duration */)
|
||||
MCFG_SCREEN_SIZE(32*8, 32*8)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(dec8_state, screen_update_gondo)
|
||||
MCFG_SCREEN_VBLANK_DRIVER(dec8_state, screen_eof_dec8)
|
||||
|
||||
@ -2183,11 +2233,10 @@ static MACHINE_CONFIG_START( garyoret, dec8_state )
|
||||
deco_karnovsprites_device::set_gfx_region(*device, 1);
|
||||
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
// MCFG_SCREEN_REFRESH_RATE(58)
|
||||
// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529) /* 58Hz, 529ms Vblank duration */)
|
||||
// MCFG_SCREEN_SIZE(32*8, 32*8)
|
||||
// MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
|
||||
MCFG_SCREEN_RAW_PARAMS(DEC8_PIXEL_CLOCK, DEC8_HTOTAL, DEC8_HBEND, DEC8_HBSTART, DEC8_VTOTAL, DEC8_VBEND, DEC8_VBSTART)
|
||||
MCFG_SCREEN_REFRESH_RATE(58)
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529) /* 58Hz, 529ms Vblank duration */)
|
||||
MCFG_SCREEN_SIZE(32*8, 32*8)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(dec8_state, screen_update_garyoret)
|
||||
MCFG_SCREEN_VBLANK_DRIVER(dec8_state, screen_eof_dec8)
|
||||
|
||||
@ -2217,7 +2266,7 @@ static MACHINE_CONFIG_START( ghostb, dec8_state )
|
||||
MCFG_CPU_PROGRAM_MAP(meikyuh_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", dec8_state, gondo_interrupt)
|
||||
|
||||
MCFG_CPU_ADD("audiocpu", M6502, 1500000)
|
||||
MCFG_CPU_ADD("audiocpu", DECO_222, 1500000)
|
||||
MCFG_CPU_PROGRAM_MAP(dec8_s_map)
|
||||
/* NMIs are caused by the main CPU */
|
||||
|
||||
@ -2235,11 +2284,10 @@ static MACHINE_CONFIG_START( ghostb, dec8_state )
|
||||
deco_karnovsprites_device::set_gfx_region(*device, 1);
|
||||
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
// MCFG_SCREEN_REFRESH_RATE(58)
|
||||
// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* 58Hz, 529ms Vblank duration */)
|
||||
// MCFG_SCREEN_SIZE(32*8, 32*8)
|
||||
// MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
|
||||
MCFG_SCREEN_RAW_PARAMS(DEC8_PIXEL_CLOCK, DEC8_HTOTAL, DEC8_HBEND, DEC8_HBSTART, DEC8_VTOTAL, DEC8_VBEND, DEC8_VBSTART)
|
||||
MCFG_SCREEN_REFRESH_RATE(58)
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* 58Hz, 529ms Vblank duration */)
|
||||
MCFG_SCREEN_SIZE(32*8, 32*8)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(dec8_state, screen_update_ghostb)
|
||||
MCFG_SCREEN_VBLANK_DRIVER(dec8_state, screen_eof_dec8)
|
||||
|
||||
@ -2276,9 +2324,9 @@ static MACHINE_CONFIG_START( csilver, dec8_state )
|
||||
MCFG_CPU_ADD("audiocpu", M6502, XTAL_12MHz/8) /* verified on pcb */
|
||||
MCFG_CPU_PROGRAM_MAP(csilver_s_map)
|
||||
/* NMIs are caused by the main CPU */
|
||||
|
||||
MCFG_QUANTUM_TIME(attotime::from_hz(6000))
|
||||
|
||||
|
||||
/* video hardware */
|
||||
MCFG_BUFFERED_SPRITERAM8_ADD("spriteram")
|
||||
|
||||
@ -2286,11 +2334,10 @@ static MACHINE_CONFIG_START( csilver, dec8_state )
|
||||
deco_karnovsprites_device::set_gfx_region(*device, 1);
|
||||
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
// MCFG_SCREEN_REFRESH_RATE(58)
|
||||
// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529) /* 58Hz, 529ms Vblank duration */)
|
||||
// MCFG_SCREEN_SIZE(32*8, 32*8)
|
||||
// MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
|
||||
MCFG_SCREEN_RAW_PARAMS(DEC8_PIXEL_CLOCK, DEC8_HTOTAL, DEC8_HBEND, DEC8_HBSTART, DEC8_VTOTAL, DEC8_VBEND, DEC8_VBSTART)
|
||||
MCFG_SCREEN_REFRESH_RATE(58)
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529) /* 58Hz, 529ms Vblank duration */)
|
||||
MCFG_SCREEN_SIZE(32*8, 32*8)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(dec8_state, screen_update_lastmisn)
|
||||
|
||||
MCFG_GFXDECODE(shackled)
|
||||
@ -2326,7 +2373,7 @@ static MACHINE_CONFIG_START( oscar, dec8_state )
|
||||
MCFG_CPU_ADD("sub", HD6309, XTAL_12MHz/2) /* verified on pcb */
|
||||
MCFG_CPU_PROGRAM_MAP(oscar_sub_map)
|
||||
|
||||
MCFG_CPU_ADD("audiocpu", M6502, XTAL_12MHz/8)
|
||||
MCFG_CPU_ADD("audiocpu", DECO_222, XTAL_12MHz/8)
|
||||
MCFG_CPU_PROGRAM_MAP(oscar_s_map)
|
||||
/* NMIs are caused by the main CPU */
|
||||
MCFG_QUANTUM_TIME(attotime::from_hz(2400)) /* 40 CPU slices per frame */
|
||||
@ -2342,11 +2389,10 @@ static MACHINE_CONFIG_START( oscar, dec8_state )
|
||||
deco_mxc06_device::set_gfx_region(*device, 1);
|
||||
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
// MCFG_SCREEN_REFRESH_RATE(58)
|
||||
// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* 58Hz, 529ms Vblank duration */)
|
||||
// MCFG_SCREEN_SIZE(32*8, 32*8)
|
||||
// MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
|
||||
MCFG_SCREEN_RAW_PARAMS(DEC8_PIXEL_CLOCK, DEC8_HTOTAL, DEC8_HBEND, DEC8_HBSTART, DEC8_VTOTAL, DEC8_VBEND, DEC8_VBSTART)
|
||||
MCFG_SCREEN_REFRESH_RATE(58)
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* 58Hz, 529ms Vblank duration */)
|
||||
MCFG_SCREEN_SIZE(32*8, 32*8)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(dec8_state, screen_update_oscar)
|
||||
|
||||
MCFG_GFXDECODE(oscar)
|
||||
@ -2375,7 +2421,7 @@ static MACHINE_CONFIG_START( srdarwin, dec8_state )
|
||||
MCFG_CPU_PROGRAM_MAP(srdarwin_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", dec8_state, nmi_line_pulse)
|
||||
|
||||
MCFG_CPU_ADD("audiocpu", M6502, 1500000)
|
||||
MCFG_CPU_ADD("audiocpu", DECO_222, 1500000)
|
||||
MCFG_CPU_PROGRAM_MAP(dec8_s_map)
|
||||
/* NMIs are caused by the main CPU */
|
||||
|
||||
@ -2384,11 +2430,10 @@ static MACHINE_CONFIG_START( srdarwin, dec8_state )
|
||||
MCFG_BUFFERED_SPRITERAM8_ADD("spriteram")
|
||||
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
// MCFG_SCREEN_REFRESH_RATE(58)
|
||||
// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529) /* 58Hz, 529ms Vblank duration */)
|
||||
// MCFG_SCREEN_SIZE(32*8, 32*8)
|
||||
// MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
|
||||
MCFG_SCREEN_RAW_PARAMS(DEC8_PIXEL_CLOCK, DEC8_HTOTAL, DEC8_HBEND, DEC8_HBSTART, DEC8_VTOTAL, DEC8_VBEND, DEC8_VBSTART)
|
||||
MCFG_SCREEN_REFRESH_RATE(58)
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529) /* 58Hz, 529ms Vblank duration */)
|
||||
MCFG_SCREEN_SIZE(32*8, 32*8)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(dec8_state, screen_update_srdarwin)
|
||||
|
||||
MCFG_GFXDECODE(srdarwin)
|
||||
@ -2435,11 +2480,10 @@ static MACHINE_CONFIG_START( cobracom, dec8_state )
|
||||
|
||||
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
// MCFG_SCREEN_REFRESH_RATE(58)
|
||||
// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529) /* 58Hz, 529ms Vblank duration */)
|
||||
// MCFG_SCREEN_SIZE(32*8, 32*8)
|
||||
// MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
|
||||
MCFG_SCREEN_RAW_PARAMS(DEC8_PIXEL_CLOCK, DEC8_HTOTAL, DEC8_HBEND, DEC8_HBSTART, DEC8_VTOTAL, DEC8_VBEND, DEC8_VBSTART)
|
||||
MCFG_SCREEN_REFRESH_RATE(58)
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529) /* 58Hz, 529ms Vblank duration */)
|
||||
MCFG_SCREEN_SIZE(32*8, 32*8)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(dec8_state, screen_update_cobracom)
|
||||
|
||||
MCFG_GFXDECODE(cobracom)
|
||||
@ -3519,26 +3563,6 @@ DRIVER_INIT_MEMBER(dec8_state,dec8)
|
||||
m_latch = 0;
|
||||
}
|
||||
|
||||
/* Ghostbusters, Darwin, Oscar use a "Deco 222" custom 6502 for sound. */
|
||||
DRIVER_INIT_MEMBER(dec8_state,deco222)
|
||||
{
|
||||
address_space &space = machine().device("audiocpu")->memory().space(AS_PROGRAM);
|
||||
int A;
|
||||
UINT8 *decrypt;
|
||||
UINT8 *rom;
|
||||
|
||||
/* bits 5 and 6 of the opcodes are swapped */
|
||||
rom = memregion("audiocpu")->base();
|
||||
decrypt = auto_alloc_array(machine(), UINT8, 0x8000);
|
||||
|
||||
space.set_decrypted_region(0x8000, 0xffff, decrypt);
|
||||
|
||||
for (A = 0x8000; A < 0x10000; A++)
|
||||
decrypt[A - 0x8000] = (rom[A] & 0x9f) | ((rom[A] & 0x20) << 1) | ((rom[A] & 0x40) >> 1);
|
||||
|
||||
m_latch = 1;
|
||||
}
|
||||
|
||||
/* Below, I set up the correct number of banks depending on the "maincpu" region size */
|
||||
DRIVER_INIT_MEMBER(dec8_state,lastmisn)
|
||||
{
|
||||
@ -3577,7 +3601,7 @@ DRIVER_INIT_MEMBER(dec8_state,ghostb)
|
||||
memset(RAM + 0x20, 0, 0xe0);
|
||||
|
||||
machine().root_device().membank("bank1")->configure_entries(0, 16, &ROM[0x10000], 0x4000);
|
||||
DRIVER_INIT_CALL(deco222);
|
||||
DRIVER_INIT_CALL(dec8);
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(dec8_state,meikyuh)
|
||||
@ -3606,14 +3630,14 @@ DRIVER_INIT_MEMBER(dec8_state,oscar)
|
||||
{
|
||||
UINT8 *ROM = machine().root_device().memregion("maincpu")->base();
|
||||
machine().root_device().membank("bank1")->configure_entries(0, 4, &ROM[0x10000], 0x4000);
|
||||
DRIVER_INIT_CALL(deco222);
|
||||
DRIVER_INIT_CALL(dec8);
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(dec8_state,srdarwin)
|
||||
{
|
||||
UINT8 *ROM = machine().root_device().memregion("maincpu")->base();
|
||||
machine().root_device().membank("bank1")->configure_entries(0, 6, &ROM[0x10000], 0x4000);
|
||||
DRIVER_INIT_CALL(deco222);
|
||||
DRIVER_INIT_CALL(dec8);
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(dec8_state,cobracom)
|
||||
|
@ -77,14 +77,22 @@ static UPD7220_DRAW_TEXT_LINE( hgdc_draw_text )
|
||||
|
||||
static ADDRESS_MAP_START( apc_map, AS_PROGRAM, 16, apc_state )
|
||||
AM_RANGE(0x00000, 0x1ffff) AM_RAM
|
||||
AM_RANGE(0xa0000, 0xaffff) AM_ROM AM_REGION("file", 0)
|
||||
AM_RANGE(0xfe000, 0xfffff) AM_ROM AM_REGION("ipl", 0)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( apc_io, AS_IO, 16, apc_state )
|
||||
// ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
// AM_RANGE(0x28, 0x2b) i8259 master
|
||||
// AM_RANGE(0x20, 0x23) i8259 master
|
||||
// AM_RANGE(0x28, 0x2b) i8259 slave
|
||||
// 0x2f RTC it_mode
|
||||
AM_RANGE(0x40, 0x43) AM_DEVREADWRITE8("upd7220_chr", upd7220_device, read, write, 0x00ff)
|
||||
// 0x46 RTC CRT_IRST
|
||||
// AM_RANGE(0x50, 0x53) AM_DEVREADWRITE8("upd7220_btm", upd7220_device, read, write, 0x00ff)
|
||||
// AM_RANGE(0x60, 0x??) "melody"
|
||||
// AM_RANGE(0x68, 0x6f) i8255 (0x6a par_data 0x6e par_stat ... printer port)
|
||||
// 0x2920? RTC IT_CNT0
|
||||
// ??? serial port
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static INPUT_PORTS_START( apc )
|
||||
@ -244,6 +252,9 @@ ROM_START( apc )
|
||||
ROM_LOAD16_BYTE( "pfbu2j.bin", 0x00000, 0x001000, CRC(86970df5) SHA1(be59c5dad3bd8afc21e9f2f1404553d4371978be) )
|
||||
ROM_LOAD16_BYTE( "pfbu2l.bin", 0x00001, 0x001000, CRC(38df2e70) SHA1(a37ccaea00c2b290610d354de08b489fa897ec48) )
|
||||
|
||||
ROM_REGION( 0x10000, "file", ROMREGION_ERASE00 )
|
||||
// ROM_LOAD( "sioapc.o", 0, 0x10000, CRC(1) SHA1(1) )
|
||||
|
||||
ROM_REGION( 0x2000, "gfx", ROMREGION_ERASE00 )
|
||||
ROM_LOAD( "pfcu1r.bin", 0x000000, 0x002000, CRC(683efa94) SHA1(43157984a1746b2e448f3236f571011af9a3aa73) )
|
||||
ROM_END
|
||||
|
Loading…
Reference in New Issue
Block a user