diff --git a/src/mame/drivers/dec0.cpp b/src/mame/drivers/dec0.cpp index f28fd4e6719..98bf701cf73 100644 --- a/src/mame/drivers/dec0.cpp +++ b/src/mame/drivers/dec0.cpp @@ -350,11 +350,11 @@ WRITE16_MEMBER(dec0_state::dec0_control_w) switch (offset << 1) { case 0: /* Playfield & Sprite priority */ - dec0_priority_w(space, 0, data, mem_mask); + priority_w(space, 0, data, mem_mask); break; case 2: /* DMA flag */ - dec0_update_sprites_w(space, 0, 0, mem_mask); + m_spriteram->copy(); break; case 4: /* 6502 sound cpu */ @@ -399,7 +399,7 @@ WRITE16_MEMBER(dec0_automat_state::automat_control_w) break; case 12: /* DMA flag */ - //dec0_update_sprites_w(space, 0, 0, mem_mask); + //m_spriteram->copy(); break; #if 0 case 8: /* Interrupt ack (VBL - IRQ 6) */ @@ -625,7 +625,7 @@ void dec0_state::slyspy_map(address_map &map) map(0x308000, 0x3087ff).ram().share("spriteram"); /* Sprites */ map(0x310000, 0x3107ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); map(0x314001, 0x314001).w(m_soundlatch, FUNC(generic_latch_8_device::write)); - map(0x314002, 0x314003).w(FUNC(dec0_state::dec0_priority_w)); + map(0x314002, 0x314003).w(FUNC(dec0_state::priority_w)); map(0x314008, 0x31400f).r(FUNC(dec0_state::slyspy_controls_r)); map(0x31c000, 0x31c00f).r(FUNC(dec0_state::slyspy_protection_r)).nopw(); } @@ -637,7 +637,7 @@ void dec0_state::midres_map(address_map &map) map(0x100000, 0x103fff).ram().share("ram"); map(0x120000, 0x1207ff).ram().share("spriteram"); map(0x140000, 0x1407ff).w(m_palette, FUNC(palette_device::write16)).share("palette"); - map(0x160000, 0x160001).w(FUNC(dec0_state::dec0_priority_w)); + map(0x160000, 0x160001).w(FUNC(dec0_state::priority_w)); map(0x180000, 0x18000f).r(FUNC(dec0_state::midres_controls_r)); map(0x180008, 0x18000f).nopw(); /* ?? watchdog ?? */ map(0x1a0001, 0x1a0001).w(m_soundlatch, FUNC(generic_latch_8_device::write)); @@ -665,7 +665,7 @@ void dec0_state::midres_map(address_map &map) void dec0_state::midresb_map(address_map &map) { midres_map(map); - map(0x160010, 0x160011).w(FUNC(dec0_state::dec0_priority_w)); + map(0x160010, 0x160011).w(FUNC(dec0_state::priority_w)); map(0x180000, 0x18000f).r(FUNC(dec0_state::dec0_controls_r)); map(0x180012, 0x180013).noprw(); map(0x180014, 0x180015).w(FUNC(dec0_state::midres_sound_w)); @@ -814,7 +814,7 @@ void dec0_automat_state::automat_map(address_map &map) // video regs are moved to here.. map(0x400000, 0x400007).w(FUNC(dec0_automat_state::automat_scroll_w)); - map(0x400008, 0x400009).w(FUNC(dec0_automat_state::dec0_priority_w)); + map(0x400008, 0x400009).w(FUNC(dec0_automat_state::priority_w)); map(0x500000, 0x500001).nopw(); // ??? @@ -1516,8 +1516,8 @@ static const gfx_layout charlayout = RGN_FRAC(1,4), 4, /* 4 bits per pixel */ { RGN_FRAC(0,4), RGN_FRAC(2,4), RGN_FRAC(1,4), RGN_FRAC(3,4) }, - { 0, 1, 2, 3, 4, 5, 6, 7 }, - { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, + { STEP8(0,1) }, + { STEP8(0,8) }, 8*8 /* every char takes 8 consecutive bytes */ }; @@ -1527,10 +1527,8 @@ static const gfx_layout tilelayout = RGN_FRAC(1,4), 4, { RGN_FRAC(1,4), RGN_FRAC(3,4), RGN_FRAC(0,4), RGN_FRAC(2,4) }, - { 16*8+0, 16*8+1, 16*8+2, 16*8+3, 16*8+4, 16*8+5, 16*8+6, 16*8+7, - 0, 1, 2, 3, 4, 5, 6, 7 }, - { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, - 8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 }, + { STEP8(16*8,1), STEP8(0,1) }, + { STEP16(0,8) }, 16*16 }; @@ -1540,9 +1538,8 @@ static const gfx_layout automat_spritelayout = RGN_FRAC(1,4), 4, { RGN_FRAC(1,4), RGN_FRAC(3,4), RGN_FRAC(0,4), RGN_FRAC(2,4) }, - { 16*8+7, 16*8+6,16*8+5,16*8+4,16*8+3,16*8+2,16*8+1,16*8+0,7,6,5,4,3,2,1,0}, - { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, - 8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 }, + { STEP8(16*8+7,-1), STEP8(7,-1) }, + { STEP16(0,8) }, 16*16 }; @@ -1611,6 +1608,8 @@ GFXDECODE_END MACHINE_CONFIG_START(dec0_state::dec0_base) /* video hardware */ + BUFFERED_SPRITERAM16(config, m_spriteram); + MCFG_SCREEN_ADD("screen", RASTER) //MCFG_SCREEN_REFRESH_RATE(57.41) //MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529) /* 57.41 Hz, 529us Vblank */) @@ -1746,6 +1745,8 @@ MACHINE_CONFIG_START(dec0_automat_state::automat) /* video hardware */ MCFG_VIDEO_START_OVERRIDE(dec0_state,dec0_nodma) + BUFFERED_SPRITERAM16(config, m_spriteram); + MCFG_SCREEN_ADD("screen", RASTER) // MCFG_SCREEN_REFRESH_RATE(57.41) // MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529) /* 57.41 Hz, 529us Vblank */) @@ -1821,6 +1822,8 @@ MACHINE_CONFIG_START(dec0_automat_state::secretab) /* video hardware */ MCFG_VIDEO_START_OVERRIDE(dec0_state,dec0_nodma) + BUFFERED_SPRITERAM16(config, m_spriteram); + MCFG_SCREEN_ADD("screen", RASTER) // MCFG_SCREEN_REFRESH_RATE(57.41) // MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529) /* 57.41 Hz, 529us Vblank */) diff --git a/src/mame/includes/dec0.h b/src/mame/includes/dec0.h index 7992836f726..0f6be920e96 100644 --- a/src/mame/includes/dec0.h +++ b/src/mame/includes/dec0.h @@ -4,6 +4,7 @@ #include "cpu/h6280/h6280.h" #include "machine/bankdev.h" #include "machine/gen_latch.h" +#include "video/bufsprite.h" #include "video/decbac06.h" #include "video/decmxc06.h" #include "sound/msm5205.h" @@ -71,7 +72,7 @@ protected: DECLARE_READ16_MEMBER(dec0_controls_r); DECLARE_READ16_MEMBER(slyspy_controls_r); - DECLARE_WRITE16_MEMBER(dec0_priority_w); + DECLARE_WRITE16_MEMBER(priority_w); private: enum class mcu_type { @@ -85,7 +86,7 @@ private: optional_device m_pfprotect; optional_device m_sndprotect; required_shared_ptr m_ram; - required_shared_ptr m_spriteram; + required_device m_spriteram; optional_shared_ptr m_robocop_shared_ram; optional_shared_ptr m_hippodrm_shared_ram; @@ -116,7 +117,6 @@ private: DECLARE_WRITE16_MEMBER(sprite_mirror_w); DECLARE_READ16_MEMBER(robocop_68000_share_r); DECLARE_WRITE16_MEMBER(robocop_68000_share_w); - DECLARE_WRITE16_MEMBER(dec0_update_sprites_w); DECLARE_READ16_MEMBER(ffantasybl_242024_r); DECLARE_READ8_MEMBER(slyspy_sound_state_r); diff --git a/src/mame/machine/dec0.cpp b/src/mame/machine/dec0.cpp index 38def5ae983..8e4c153d468 100644 --- a/src/mame/machine/dec0.cpp +++ b/src/mame/machine/dec0.cpp @@ -88,29 +88,30 @@ READ16_MEMBER(dec0_state::midres_controls_r) READ8_MEMBER(dec0_state::hippodrm_prot_r) { //logerror("6280 PC %06x - Read %06x\n",cpu_getpc(),offset+0x1d0000); - if (m_hippodrm_lsb==0x45) return 0x4e; - if (m_hippodrm_lsb==0x92) return 0x15; + if (m_hippodrm_lsb == 0x45) return 0x4e; + if (m_hippodrm_lsb == 0x92) return 0x15; return 0; } WRITE8_MEMBER(dec0_state::hippodrm_prot_w) { - switch (offset) { - case 4: m_hippodrm_msb=data; break; - case 5: m_hippodrm_lsb=data; break; + switch (offset) + { + case 4: m_hippodrm_msb = data; break; + case 5: m_hippodrm_lsb = data; break; } //logerror("6280 PC %06x - Wrote %06x to %04x\n",cpu_getpc(),data,offset+0x1d0000); } READ16_MEMBER(dec0_state::hippodrm_68000_share_r) { - if (offset==0) m_maincpu->yield(); /* A wee helper */ - return m_hippodrm_shared_ram[offset]&0xff; + if (offset == 0) m_maincpu->yield(); /* A wee helper */ + return m_hippodrm_shared_ram[offset] & 0xff; } WRITE16_MEMBER(dec0_state::hippodrm_68000_share_w) { - m_hippodrm_shared_ram[offset]=data&0xff; + m_hippodrm_shared_ram[offset] = data & 0xff; } /******************************************************************************/ @@ -194,25 +195,26 @@ WRITE8_MEMBER(dec0_state::dec0_mcu_port3_w) void dec0_state::baddudes_i8751_write(int data) { - m_i8751_return=0; + m_i8751_return = 0; - switch (data&0xffff) { - case 0x714: m_i8751_return=0x700; break; - case 0x73b: m_i8751_return=0x701; break; - case 0x72c: m_i8751_return=0x702; break; - case 0x73f: m_i8751_return=0x703; break; - case 0x755: m_i8751_return=0x704; break; - case 0x722: m_i8751_return=0x705; break; - case 0x72b: m_i8751_return=0x706; break; - case 0x724: m_i8751_return=0x707; break; - case 0x728: m_i8751_return=0x708; break; - case 0x735: m_i8751_return=0x709; break; - case 0x71d: m_i8751_return=0x70a; break; - case 0x721: m_i8751_return=0x70b; break; - case 0x73e: m_i8751_return=0x70c; break; - case 0x761: m_i8751_return=0x70d; break; - case 0x753: m_i8751_return=0x70e; break; - case 0x75b: m_i8751_return=0x70f; break; + switch (data & 0xffff) + { + case 0x714: m_i8751_return = 0x700; break; + case 0x73b: m_i8751_return = 0x701; break; + case 0x72c: m_i8751_return = 0x702; break; + case 0x73f: m_i8751_return = 0x703; break; + case 0x755: m_i8751_return = 0x704; break; + case 0x722: m_i8751_return = 0x705; break; + case 0x72b: m_i8751_return = 0x706; break; + case 0x724: m_i8751_return = 0x707; break; + case 0x728: m_i8751_return = 0x708; break; + case 0x735: m_i8751_return = 0x709; break; + case 0x71d: m_i8751_return = 0x70a; break; + case 0x721: m_i8751_return = 0x70b; break; + case 0x73e: m_i8751_return = 0x70c; break; + case 0x761: m_i8751_return = 0x70d; break; + case 0x753: m_i8751_return = 0x70e; break; + case 0x75b: m_i8751_return = 0x70f; break; } if (!m_i8751_return) logerror("%s: warning - write unknown command %02x to 8571\n",machine().describe_context(),data); @@ -224,9 +226,10 @@ void dec0_state::birdtry_i8751_write(int data) static int pwr, hgt; - m_i8751_return=0; + m_i8751_return = 0; - switch(data&0xffff) { + switch (data & 0xffff) + { /*"Sprite control"*/ case 0x22a: m_i8751_return = 0x200; break; @@ -314,14 +317,14 @@ void dec0_state::dec0_i8751_write(int data) void dec0_state::dec0_i8751_reset() { - m_i8751_return=m_i8751_command=0; + m_i8751_return = m_i8751_command = 0; } /******************************************************************************/ WRITE16_MEMBER(dec0_state::sprite_mirror_w) { - COMBINE_DATA(&m_spriteram[offset]); + COMBINE_DATA(&m_spriteram->live()[offset]); } /******************************************************************************/ @@ -337,7 +340,7 @@ WRITE16_MEMBER(dec0_state::robocop_68000_share_w) { // logerror("%08x: Share write %04x %04x\n",m_maincpu->pc(),offset,data); - m_robocop_shared_ram[offset]=data&0xff; + m_robocop_shared_ram[offset] = data & 0xff; if (offset == 0x7ff) /* A control address - not standard ram */ m_subcpu->set_input_line(0, HOLD_LINE); diff --git a/src/mame/video/dec0.cpp b/src/mame/video/dec0.cpp index 5f0d15740af..0955478da7e 100644 --- a/src/mame/video/dec0.cpp +++ b/src/mame/video/dec0.cpp @@ -12,12 +12,6 @@ /******************************************************************************/ -WRITE16_MEMBER(dec0_state::dec0_update_sprites_w) -{ - memcpy(m_buffered_spriteram,m_spriteram,0x800); -} - - /******************************************************************************/ @@ -248,7 +242,7 @@ uint32_t dec0_automat_state::screen_update_secretab(screen_device &screen, bitma m_spritegen->draw_sprites_bootleg(bitmap, cliprect, m_buffered_spriteram, 0x00, 0x00, 0x0f); /* Redraw top 8 pens of top 8 palettes over sprites */ - if (m_pri&0x80) + if (m_pri & 0x80) m_tilegen[1]->deco_bac06_pf_draw(bitmap,cliprect,0,0x08,0x08,0x08,0x08); // upper 8 pens of upper 8 priority marked tiles m_tilegen[0]->deco_bac06_pf_draw(bitmap,cliprect,0, 0x00, 0x00, 0x00, 0x00); @@ -316,7 +310,7 @@ uint32_t dec0_state::screen_update_slyspy(screen_device &screen, bitmap_ind16 &b m_spritegen->draw_sprites(bitmap, cliprect, m_buffered_spriteram, 0x00, 0x00, 0x0f); /* Redraw top 8 pens of top 8 palettes over sprites */ - if (m_pri&0x80) + if (m_pri & 0x80) m_tilegen[1]->deco_bac06_pf_draw(bitmap,cliprect,0,0x08,0x08,0x08,0x08); // upper 8 pens of upper 8 priority marked tiles m_tilegen[0]->deco_bac06_pf_draw(bitmap,cliprect,0, 0x00, 0x00, 0x00, 0x00); @@ -368,7 +362,7 @@ uint32_t dec0_state::screen_update_midres(screen_device &screen, bitmap_ind16 &b } -WRITE16_MEMBER(dec0_state::dec0_priority_w) +WRITE16_MEMBER(dec0_state::priority_w) { COMBINE_DATA(&m_pri); } @@ -376,14 +370,14 @@ WRITE16_MEMBER(dec0_state::dec0_priority_w) VIDEO_START_MEMBER(dec0_state,dec0_nodma) { save_item(NAME(m_pri)); - m_buffered_spriteram = m_spriteram; + m_buffered_spriteram = m_spriteram->live(); save_pointer(NAME(m_buffered_spriteram), 0x800/2); } VIDEO_START_MEMBER(dec0_state,dec0) { save_item(NAME(m_pri)); - m_buffered_spriteram = auto_alloc_array(machine(), uint16_t, 0x800/2); + m_buffered_spriteram = m_spriteram->buffer(); save_pointer(NAME(m_buffered_spriteram), 0x800/2); }