diff options
Diffstat (limited to 'src/mame/machine/namcond1.c')
-rw-r--r-- | src/mame/machine/namcond1.c | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/src/mame/machine/namcond1.c b/src/mame/machine/namcond1.c new file mode 100644 index 00000000000..fea7a38cc6f --- /dev/null +++ b/src/mame/machine/namcond1.c @@ -0,0 +1,113 @@ +/*************************************************************************** + + Namco ND-1 + + machine.c + + Functions to emulate general aspects of the machine + (RAM, ROM, interrupts, I/O ports) + +***************************************************************************/ + +#include "driver.h" +#include "cpu/m6809/m6809.h" +#include "namcond1.h" + +/* Perform basic machine initialisation */ + +UINT8 namcond1_h8_irq5_enabled; +UINT8 namcond1_gfxbank; + +MACHINE_START( namcond1 ) +{ + state_save_register_global(namcond1_h8_irq5_enabled); + state_save_register_global(namcond1_gfxbank); +} + +MACHINE_RESET( namcond1 ) +{ +#ifdef MAME_DEBUG + /*UINT8 *ROM = memory_region(REGION_CPU1);*/ + /*UINT32 debug_trigger_addr;*/ + /*int i;*/ + +#if 0 + // debug trigger patch + // insert a "move.b $B0000000,D2" into the code + debug_trigger_addr = 0x152d4; // after ygv_init + ROM[debug_trigger_addr++] = 0x39; + ROM[debug_trigger_addr++] = 0x14; + ROM[debug_trigger_addr++] = 0xB0; + ROM[debug_trigger_addr++] = 0x00; + ROM[debug_trigger_addr++] = 0x00; + ROM[debug_trigger_addr++] = 0x00; +#endif +#endif + + // initialise MCU states + namcond1_h8_irq5_enabled = 0; + + // halt the MCU + cpunum_set_input_line(1,INPUT_LINE_RESET,ASSERT_LINE); +} + +// instance of the shared ram pointer +UINT16 *namcond1_shared_ram; + +READ16_HANDLER( namcond1_shared_ram_r ) +{ + return namcond1_shared_ram[offset]; +} + +// $c3ff00-$c3ffff +READ16_HANDLER( namcond1_cuskey_r ) +{ + switch( offset ) + { + // this address returns a jump vector inside ISR2 + // - if zero then the ISR returns without jumping + case (0x2e>>1): + return( 0x0000 ); + case (0x30>>1): + return( 0x0000 ); + + default : + logerror( "offset $%X accessed from $%X\n", + offset<<1, activecpu_get_pc() ); + return( 0 ); + } +} + +WRITE16_HANDLER( namcond1_shared_ram_w ) +{ + + switch( offset ) + { + default : + COMBINE_DATA( namcond1_shared_ram + offset ); + break; + } +} + +WRITE16_HANDLER( namcond1_cuskey_w ) +{ + switch( offset ) + { + case (0x0a>>1): + // this is a kludge until we emulate the h8 + if ((namcond1_h8_irq5_enabled == 0) && (data != 0x0000)) + { + cpunum_set_input_line(1, INPUT_LINE_RESET, CLEAR_LINE); + } + namcond1_h8_irq5_enabled = ( data != 0x0000 ); + break; + + case (0x0c>>1): + namcond1_gfxbank = (data & 0x0002) >>1; // i think + // should mark tilemaps dirty but i think they already are + break; + + default : + break; + } +} |