summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Angelo Salese <angelosa@users.noreply.github.com>2011-04-22 19:46:20 +0000
committer Angelo Salese <angelosa@users.noreply.github.com>2011-04-22 19:46:20 +0000
commit62335e3a06143ac036bba07405ee23103740f145 (patch)
treeb60cbcd39a3a886e4506bb284ebc31859a0fb114
parent5025909c81dfabb1e5f7cc8df233066816ca5321 (diff)
Refactored command 0x600
-rw-r--r--src/mame/machine/armedf.c182
1 files changed, 88 insertions, 94 deletions
diff --git a/src/mame/machine/armedf.c b/src/mame/machine/armedf.c
index 3c79881e776..800b5330924 100644
--- a/src/mame/machine/armedf.c
+++ b/src/mame/machine/armedf.c
@@ -58,19 +58,6 @@ static void legion_layer_clear(address_space *space,UINT16 dst,UINT8 tile,UINT8
}
}
-static void terrafu_sm_onoff(address_space *space,UINT16 dst,UINT8 condition)
-{
- armedf_state *state = space->machine().driver_data<armedf_state>();
- UINT8 * data = (UINT8 *)space->machine().region("gfx5")->base();
- int i;
-
- for(i=0;i<3;i++)
- {
- state->m_text_videoram[i+dst+0x000] = (condition) ? (data[i+0x0+0x316] & 0xff) : (data[i+0x0+0x310] & 0xff);
- state->m_text_videoram[i+dst+0x400] = (condition) ? (data[i+0x0+0x319] & 0xff) : (data[i+0x0+0x313] & 0xff);
- }
-}
-
static void insert_coin_msg(address_space *space)
{
armedf_state *state = space->machine().driver_data<armedf_state>();
@@ -171,99 +158,106 @@ static void kozure_score_msg(address_space *space,UINT16 dst,UINT8 src_base)
}
-static void service_mode(address_space *space, UINT8 is2p)
+static void nichibutsu_1414m4_0200(address_space *space, UINT16 mcu_cmd)
+{
+ UINT8 * data = (UINT8 *)space->machine().region("gfx5")->base();
+ UINT16 dst;
+
+ dst = (data[0x330+((mcu_cmd & 0xf)*2)]<<8)|(data[0x331+((mcu_cmd & 0xf)*2)]&0xff);
+
+ dst &= 0x3fff;
+
+ if(dst & 0x7ff) // fill
+ legion_layer_clear(space,0x0000,data[dst & 0x3fff],data[dst+1]);
+ else // src -> dst
+ terrafu_sm_transfer(space,dst & 0x3fff,0x0000,0x400,1);
+}
+
+/*
+[0x02] & 0x01 p1 up
+[0x02] & 0x02 p1 down
+[0x02] & 0x04 p1 left
+[0x02] & 0x08 p1 right
+[0x02] & 0x10 p1 button 1
+[0x02] & 0x20 p1 button 2
+[0x02] & 0x40 p1 button 3
+[0x03] & 0x01 p2 up
+[0x03] & 0x02 p2 down
+[0x03] & 0x04 p2 left
+[0x03] & 0x08 p2 right
+[0x03] & 0x10 p2 button 1
+[0x03] & 0x20 p2 button 2
+[0x03] & 0x40 p2 button 3
+[0x04] & 0x10 service
+[0x04] & 0x04 coin A
+[0x04] & 0x08 coin B
+[0x04] & 0x01 start 1
+[0x04] & 0x02 start 2
+[0x05] DSW1
+[0x06] DSW2
+[0x07] & 0x40 demo sounds ON / OFF
+[0x07] & 0x7 lives setting
+[0x07] & 0x80 cabinet (upright / table)
+[0x07] & 0x30 difficulty (easy / normal / hard / hardest)
+[0x0f] coinage A
+[0x10] coinage B
+[0x11] sound test num
+*/
+static void nichibutsu_1414m4_0600(address_space *space, UINT8 is2p)
{
armedf_state *state = space->machine().driver_data<armedf_state>();
UINT8 * data = (UINT8 *)space->machine().region("gfx5")->base();
int i;
+ UINT16 dst;
- for(i=0;i<0x400;i++)
- {
- if(i < 18 || i == 0x377 || i == 0x357) // params and digits for bonus lives doesn't get overwritten
- continue;
+ dst = ((data[0x1f5]<<8)|(data[0x1f6]&0xff)) & 0x3fff;
+ state->m_text_videoram[dst] = (state->m_text_videoram[7] & 0x7) + 0x30;//data[0x1f7];
- state->m_text_videoram[i+0x000+0x0000] = data[i+0x000+0x3000] & 0xff;
- state->m_text_videoram[i+0x000+0x0400] = data[i+0x400+0x3000] & 0xff;
- }
+ dst = ((data[0x1f8]<<8)|(data[0x1f9]&0xff)) & 0x3fff;
+ terrafu_sm_transfer(space,0x1fa + (((state->m_text_videoram[7] & 0x30) >> 4) * 0x18),dst,12,1);
- state->m_text_videoram[0x252+0x000] = ((state->m_text_videoram[0x11] & 0xf0) >> 4) + 0x30;
- state->m_text_videoram[0x253+0x000] = (state->m_text_videoram[0x11] & 0x0f) + 0x30;
- //state->m_text_videoram[0x252+0x400] = (0x40);
- //state->m_text_videoram[0x253+0x400] = (0x40);
-
- /*
- [0x02] & 0x01 p1 up
- [0x02] & 0x02 p1 down
- [0x02] & 0x04 p1 left
- [0x02] & 0x08 p1 right
- [0x02] & 0x10 p1 button 1
- [0x02] & 0x20 p1 button 2
- [0x02] & 0x40 p1 button 3
- [0x03] & 0x01 p2 up
- [0x03] & 0x02 p2 down
- [0x03] & 0x04 p2 left
- [0x03] & 0x08 p2 right
- [0x03] & 0x10 p2 button 1
- [0x03] & 0x20 p2 button 2
- [0x03] & 0x40 p2 button 3
- [0x04] & 0x10 service
- [0x04] & 0x04 coin A
- [0x04] & 0x08 coin B
- [0x04] & 0x01 start 1
- [0x04] & 0x02 start 2
- [0x05] DSW1
- [0x06] DSW2
- [0x07] & 0x40 demo sounds ON / OFF
- [0x07] & 0x7 lives setting
- [0x07] & 0x80 cabinet (upright / table)
- [0x07] & 0x30 difficulty (easy / normal / hard / hardest)
- [0x0f] coinage A
- [0x10] coinage B
- */
- state->m_text_videoram[0x3bb|0x000] = (state->m_text_videoram[7] & 0x7) + 0x30;
- //state->m_text_videoram[0x3bb|0x400] = (0x40);
-
- terrafu_sm_transfer(space,0x1fa + (((state->m_text_videoram[7] & 0x30) >> 4) * 0x18),0x390,12,1);
- terrafu_sm_transfer(space,0x264 + (((state->m_text_videoram[7] & 0x80) >> 7) * 0x18),0x330,12,1);
- terrafu_sm_transfer(space,0x296 + (((state->m_text_videoram[7] & 0x40) >> 6) * 0x18),0x310,12,1);
-
- state->m_text_videoram[0x2ee|0x000] = ((state->m_text_videoram[0xf] & 0xf0) >> 4) + 0x30;
- //state->m_text_videoram[0x2ee|0x400] = (0x40);
- state->m_text_videoram[0x2f5|0x000] = ((state->m_text_videoram[0xf] & 0x0f) >> 0) + 0x30;
- //state->m_text_videoram[0x2f5|0x400] = (0x40);
- state->m_text_videoram[0x2ce|0x000] = ((state->m_text_videoram[0x10] & 0xf0) >> 4) + 0x30;
- //state->m_text_videoram[0x2ce|0x400] = (0x40);
- state->m_text_videoram[0x2d5|0x000] = ((state->m_text_videoram[0x10] & 0x0f) >> 0) + 0x30;
- //state->m_text_videoram[0x2d5|0x400] = (0x40);
+ // 0x25a - 0x261 unknown meaning
- for(i=0;i<8;i++) /* dips */
- {
- terrafu_sm_onoff(space,0x074 + (i * 0x20),(state->m_text_videoram[0x05] >> (7-i)) & 1);
- terrafu_sm_onoff(space,0x079 + (i * 0x20),(state->m_text_videoram[0x06] >> (7-i)) & 1);
- }
+ dst = ((data[0x262]<<8)|(data[0x263]&0xff)) & 0x3fff;
+ terrafu_sm_transfer(space,0x264 + (((state->m_text_videoram[7] & 0x80) >> 7) * 0x18),dst,12,1);
- terrafu_sm_transfer(space,0x2d8 + (is2p * 0x18),0x1e4,12,1); // 1p / 2p
+ dst = ((data[0x294]<<8)|(data[0x295]&0xff)) & 0x3fff;
+ terrafu_sm_transfer(space,0x296 + (((state->m_text_videoram[7] & 0x40) >> 6) * 0x18),dst,12,1);
- for(i=0;i<5;i++) /* coin inputs */
- terrafu_sm_onoff(space,0x06c + (i * 0x20),(state->m_text_videoram[0x04] >> (4-i)) & 1);
+ dst = ((data[0x2c6]<<8)|(data[0x2c7]&0xff)) & 0x3fff;
+ state->m_text_videoram[dst] = ((state->m_text_videoram[0xf] & 0xf0) >> 4) + 0x30;//data[0x2c8];
- for(i=0;i<7;i++) /* 1p inputs */
- terrafu_sm_onoff(space,0x10c + (i * 0x20),(state->m_text_videoram[0x02 + is2p] >> (6-i)) & 1);
-}
+ dst = ((data[0x2c9]<<8)|(data[0x2ca]&0xff)) & 0x3fff;
+ state->m_text_videoram[dst] = ((state->m_text_videoram[0xf] & 0x0f) >> 0) + 0x30;//data[0x2cb];
-static void nichibutsu_1414m4_0200(address_space *space, UINT16 mcu_cmd)
-{
- UINT8 * data = (UINT8 *)space->machine().region("gfx5")->base();
- UINT16 dst;
+ dst = ((data[0x2cc]<<8)|(data[0x2cd]&0xff)) & 0x3fff;
+ state->m_text_videoram[dst] = ((state->m_text_videoram[0x10] & 0xf0) >> 4) + 0x30;//data[0x2ce];
- dst = (data[0x330+((mcu_cmd & 0xf)*2)]<<8)|(data[0x331+((mcu_cmd & 0xf)*2)]&0xff);
+ dst = ((data[0x2cf]<<8)|(data[0x2d0]&0xff)) & 0x3fff;
+ state->m_text_videoram[dst] = ((state->m_text_videoram[0x10] & 0x0f) >> 0) + 0x30;//data[0x2d1];
- dst &= 0x3fff;
+ dst = ((data[0x2d2]<<8)|(data[0x2d3]&0xff)) & 0x3fff;
+ state->m_text_videoram[dst+0] = ((state->m_text_videoram[0x11] & 0xf0) >> 4) + 0x30;//data[0x2d4];
+ state->m_text_videoram[dst+1] = (state->m_text_videoram[0x11] & 0x0f) + 0x30;//data[0x2d5];
- if(dst & 0x7ff) // fill
- legion_layer_clear(space,0x0000,data[dst & 0x3fff],data[dst+1]);
- else // src -> dst
- terrafu_sm_transfer(space,dst & 0x3fff,0x0000,0x400,1);
+ dst = ((data[0x2d6]<<8)|(data[0x2d7]&0xff)) & 0x3fff;
+ terrafu_sm_transfer(space,0x2d8 + (is2p * 0x18),dst,12,1); // 1p / 2p string
+
+ dst = ((data[0x308]<<8)|(data[0x309]&0xff)) & 0x3fff;
+ for(i=0;i<5;i++) /* system inputs */
+ terrafu_sm_transfer(space,0x310 + (((state->m_text_videoram[0x04] >> (4-i)) & 1) * 6),dst + (i * 0x20),0x3,1);
+
+ dst = ((data[0x30a]<<8)|(data[0x30b]&0xff)) & 0x3fff;
+ for(i=0;i<7;i++) /* 1p / 2p inputs */
+ terrafu_sm_transfer(space,0x310 + (((state->m_text_videoram[0x02 + is2p] >> (6-i)) & 1) * 6),dst + (i * 0x20),0x3,1);
+
+ dst = ((data[0x30c]<<8)|(data[0x30d]&0xff)) & 0x3fff;
+ for(i=0;i<8;i++) /* dips */
+ terrafu_sm_transfer(space,0x310 + (((state->m_text_videoram[0x05] >> (7-i)) & 1) * 6),dst + (i * 0x20),0x3,1);
+
+ dst = ((data[0x30e]<<8)|(data[0x30f]&0xff)) & 0x3fff;
+ for(i=0;i<8;i++) /* dips */
+ terrafu_sm_transfer(space,0x310 + (((state->m_text_videoram[0x06] >> (7-i)) & 1) * 6),dst + (i * 0x20),0x3,1);
}
void terrafu_mcu_exec(address_space *space,UINT16 mcu_cmd)
@@ -280,7 +274,7 @@ void terrafu_mcu_exec(address_space *space,UINT16 mcu_cmd)
break;
case 0x0600: /* service mode */
- service_mode(space,mcu_cmd & 1);
+ nichibutsu_1414m4_0600(space,mcu_cmd & 1);
break;
case 0x0e00:
@@ -311,7 +305,7 @@ void kozure_mcu_exec(address_space *space,UINT16 mcu_cmd)
break;
case 0x0600:
- service_mode(space,mcu_cmd & 1);
+ nichibutsu_1414m4_0600(space,mcu_cmd & 1);
break;
case 0x0e00: /* 1p / hi-score msg / 2p + points */
@@ -353,7 +347,7 @@ void legion_mcu_exec(address_space *space,UINT16 mcu_cmd)
break;
case 0x0600:
- service_mode(space,mcu_cmd & 1);
+ nichibutsu_1414m4_0600(space,mcu_cmd & 1);
break;
case 0x0e00: /* 1p / hi-score msg / 2p + points */