summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/video/megasys1.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/video/megasys1.c')
-rw-r--r--src/mame/video/megasys1.c50
1 files changed, 48 insertions, 2 deletions
diff --git a/src/mame/video/megasys1.c b/src/mame/video/megasys1.c
index 3abd0c191d8..fa654fc8364 100644
--- a/src/mame/video/megasys1.c
+++ b/src/mame/video/megasys1.c
@@ -447,7 +447,49 @@ WRITE16_MEMBER(megasys1_state::megasys1_vregs_A_w)
}
+/* Used by monkelf */
+WRITE16_MEMBER(megasys1_state::megasys1_vregs_monkelf_w)
+{
+ UINT16 new_data = COMBINE_DATA(&m_vregs[offset]);
+
+ switch (offset)
+ {
+ case 0x000/2 : m_active_layers = new_data; break;
+
+ case 0x008/2+0 : m_scrollx[2] = new_data; break;
+ case 0x008/2+1 : m_scrolly[2] = new_data; break;
+ case 0x008/2+2 : megasys1_set_vreg_flag(2, new_data); break;
+
+ // code in routine $280 does this. protection?
+ case 0x200/2+0 : m_scrollx[0] = new_data - (((new_data & 0x0f) > 0x0d) ? 0x10 : 0); break;
+ case 0x200/2+1 : m_scrolly[0] = new_data; break;
+ case 0x200/2+2 : megasys1_set_vreg_flag(0, new_data); break;
+
+ // code in routine $280 does this. protection?
+ case 0x208/2+0 : m_scrollx[1] = new_data - (((new_data & 0x0f) > 0x0b) ? 0x10 : 0); break;
+ case 0x208/2+1 : m_scrolly[1] = new_data; break;
+ case 0x208/2+2 : megasys1_set_vreg_flag(1, new_data); break;
+
+ case 0x100/2 : m_sprite_flag = new_data; break;
+
+ case 0x300/2 : m_screen_flag = new_data;
+ if (m_audiocpu)
+ {
+ if (new_data & 0x10)
+ m_audiocpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
+ else
+ m_audiocpu->set_input_line(INPUT_LINE_RESET, CLEAR_LINE);
+ }
+ break;
+ case 0x308/2 : soundlatch_word_w(space,0,new_data,0xffff);
+ m_audiocpu->set_input_line(4, HOLD_LINE);
+ break;
+
+ default : SHOW_WRITE_ERROR("vreg %04X <- %04X",offset*2,data);
+ }
+
+}
/* Used by MS1-C only */
@@ -739,8 +781,7 @@ static const struct priority priorities[] =
the bottom layer's opaque pens, but above its transparent
pens.
*/
-
-PALETTE_INIT_MEMBER(megasys1_state,megasys1)
+void megasys1_state::megasys1_priority_create()
{
const UINT8 *color_prom = memregion("proms")->base();
int pri_code, offset, i, order;
@@ -900,6 +941,11 @@ PALETTE_INIT_MEMBER(megasys1_state,megasys1)
}
+PALETTE_INIT_MEMBER(megasys1_state,megasys1)
+{
+ megasys1_priority_create();
+}
+