summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/machine/namcond1.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/machine/namcond1.c')
-rw-r--r--src/mame/machine/namcond1.c113
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;
+ }
+}