diff --git a/src/mame/drivers/gunpey.cpp b/src/mame/drivers/gunpey.cpp index d17bef7bf78..3104f460e37 100644 --- a/src/mame/drivers/gunpey.cpp +++ b/src/mame/drivers/gunpey.cpp @@ -1,12 +1,10 @@ // license:LGPL-2.1+ -// copyright-holders:Angelo Salese, Tomasz Slanina, David Haywood, Luca Elia +// copyright-holders:Angelo Salese, Tomasz Slanina, David Haywood, Luca Elia, Morten Shearman Kirkegaard /******************************************************************************************** Gunpey (c) 2000 Banpresto TODO: - - Implement correct Axell video chip decompression scheme, currently using decompressed - data extracted from the PCB (for reference) - Framebuffer is actually in the same DRAM as the blitter data gets copied to, not a separate RAM. It (and the double buffered copy) appear near the top right of the framebuffer, so there are likely registers to control this that need finding. @@ -211,11 +209,25 @@ public: m_maincpu(*this, "maincpu"), m_oki(*this, "oki"), m_wram(*this, "wram"), - m_palette(*this, "palette"), - m_pre_index(*this, "pre_index"), - m_pre_data(*this, "pre_data") + m_palette(*this, "palette") { } + // TODO: make these non-static and private + static void set_o(struct state_s *s, unsigned char v); + static unsigned char get_o(struct state_s *s, int x, int y); + static void hn_bytes_new_colour(struct state_s *s, unsigned char v, int n); + static void hn_bytes_prev_colour(struct state_s *s, unsigned char v, int n); + static void hn_copy_directly(struct state_s *s, unsigned char v, int n); + static void hn_copy_plus_one(struct state_s *s, unsigned char v, int n); + static void hn_copy_minus_one(struct state_s *s, unsigned char v, int n); + + void gunpey(machine_config &config); + void io_map(address_map &map); + void mem_map(address_map &map); + + DECLARE_DRIVER_INIT(gunpey); +private: + DECLARE_WRITE8_MEMBER(status_w); DECLARE_READ8_MEMBER(status_r); DECLARE_READ8_MEMBER(inputs_r); @@ -225,25 +237,17 @@ public: DECLARE_WRITE8_MEMBER(output_w); DECLARE_WRITE16_MEMBER(vram_bank_w); DECLARE_WRITE16_MEMBER(vregs_addr_w); - DECLARE_DRIVER_INIT(gunpey); virtual void video_start() override; uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); TIMER_DEVICE_CALLBACK_MEMBER(scanline); TIMER_CALLBACK_MEMBER(blitter_end); - void gunpey(machine_config &config); - void io_map(address_map &map); - void mem_map(address_map &map); -private: - void irq_check(uint8_t irq_type); uint8_t draw_gfx(bitmap_ind16 &bitmap, const rectangle &cliprect, int count, uint8_t scene_gradient); uint16_t m_vram_bank; uint16_t m_vreg_addr; uint8_t* m_blit_rom; - uint8_t* m_blit_rom2; - uint8_t* m_vram; emu_timer *m_blitter_end_timer; @@ -262,40 +266,28 @@ private: int m_dstxbase; int m_dstxcount; int m_dstycount; - bool m_out_of_data; - - int m_latched_bits_left; - uint8_t m_latched_byte; - int m_zero_bit_count; - - void get_stream_next_byte(void); - int get_stream_bit(void); - uint32_t get_stream_bits(int bits); - - int write_dest_byte(uint8_t usedata); - //uint16_t main_m_vram[0x800][0x800]; - uint16_t m_blit_ram[0x10]; + + uint8_t get_vrom_byte(int x, int y); + int write_dest_byte(uint8_t usedata); + int decompress_sprite(unsigned char *buf, int ix, int iy, int ow, int oh, int dx, int dy); + int next_node(struct huffman_node_s **res, struct state_s *s); + int get_next_bit(struct state_s *s); + + uint8_t m_irq_cause, m_irq_mask; std::unique_ptr m_blit_buffer; - required_device m_maincpu; required_device m_oki; required_shared_ptr m_wram; required_device m_palette; - - // compression workaround - void replace_decompressed_sprite(void); - required_region_ptr m_pre_index; - required_region_ptr m_pre_data; }; void gunpey_state::video_start() { m_blit_buffer = std::make_unique(512*512); - m_blitter_end_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gunpey_state::blitter_end), this)); } @@ -356,20 +348,20 @@ uint8_t gunpey_state::draw_gfx(bitmap_ind16 &bitmap,const rectangle &cliprect,in if (zoomheight) heightstep = sourceheight / zoomheight; uint16_t unused; - if (debug) printf("sprite %04x %04x %04x %04x %04x %04x %04x %04x\n", m_wram[count+0], m_wram[count+1], m_wram[count+2], m_wram[count+3], m_wram[count+4], m_wram[count+5], m_wram[count+6], m_wram[count+7]); + if (debug) logerror("sprite %04x %04x %04x %04x %04x %04x %04x %04x\n", m_wram[count+0], m_wram[count+1], m_wram[count+2], m_wram[count+3], m_wram[count+4], m_wram[count+5], m_wram[count+6], m_wram[count+7]); - unused = m_wram[count+0]&~0xff98; if (unused) printf("unused bits set in word 0 - %04x\n", unused); - unused = m_wram[count+1]&~0xf89f; if (unused) printf("unused bits set in word 1 - %04x\n", unused); - unused = m_wram[count+2]&~0xfc3f; if (unused) printf("unused bits set in word 2 - %04x\n", unused); - unused = m_wram[count+3]&~0xff1f; if (unused) printf("unused bits set in word 3 - %04x\n", unused); - unused = m_wram[count+4]&~0xff77; if (unused) printf("unused bits set in word 4 - %04x\n", unused); - unused = m_wram[count+5]&~0xffff; if (unused) printf("unused bits set in word 5 - %04x\n", unused); - unused = m_wram[count+6]&~0x00ff; if (unused) printf("unused bits set in word 6 - %04x\n", unused); - unused = m_wram[count+7]&~0xff00; if (unused) printf("unused bits set in word 7 - %04x\n", unused); + unused = m_wram[count+0]&~0xff98; if (unused) logerror("unused bits set in word 0 - %04x\n", unused); + unused = m_wram[count+1]&~0xf89f; if (unused) logerror("unused bits set in word 1 - %04x\n", unused); + unused = m_wram[count+2]&~0xfc3f; if (unused) logerror("unused bits set in word 2 - %04x\n", unused); + unused = m_wram[count+3]&~0xff1f; if (unused) logerror("unused bits set in word 3 - %04x\n", unused); + unused = m_wram[count+4]&~0xff77; if (unused) logerror("unused bits set in word 4 - %04x\n", unused); + unused = m_wram[count+5]&~0xffff; if (unused) logerror("unused bits set in word 5 - %04x\n", unused); + unused = m_wram[count+6]&~0x00ff; if (unused) logerror("unused bits set in word 6 - %04x\n", unused); + unused = m_wram[count+7]&~0xff00; if (unused) logerror("unused bits set in word 7 - %04x\n", unused); if (((zoomwidth<> (7-m_latched_bits_left))&1; - - if (bit==0) m_zero_bit_count++; - else m_zero_bit_count=0; - - return bit; -} - -uint32_t gunpey_state::get_stream_bits(int bits) -{ - uint32_t output = 0; - for (int i=0;inum_bits == 0) { - uint16_t lookupx, lookupy; - uint32_t lookupoffset; - - lookupx = (m_pre_index[i + 0] << 8) | (m_pre_index[i + 1] << 0); - lookupy = (m_pre_index[i + 2] << 8) | (m_pre_index[i + 3] << 0); - lookupoffset = (m_pre_index[i + 4] << 24) | (m_pre_index[i + 5] << 16) | (m_pre_index[i + 6] << 8) | (m_pre_index[i + 7] << 0); - - // reached end up list without finding anything (shouldn't happen) - if ((lookupx == 0xffff) && (lookupy == 0xffff) && (lookupoffset == 0xffffffff)) + if (s->ix >= s->basex + s->iw) { - //fatalerror("sprite replacement not found"); + s->ix = s->basex; + s->iy++; + } + s->bits = get_vrom_byte(s->ix, s->iy); + s->ix++; + s->num_bits = 8; + } + + int res = 1 & s->bits; + + s->bits >>= 1; + s->num_bits--; + + return res; +} + + +void gunpey_state::set_o(struct state_s *s, unsigned char v) +{ + assert(s->ox >= 0); + assert(s->ox < s->ow); + assert(s->ox < 256); + assert(s->oy >= 0); + assert(s->oy < s->oh); + assert(s->oy < 256); + + unsigned char a = v; + for (int i = 0; i < sizeof(s->colour) / sizeof(*s->colour); i++) + { + unsigned char b = s->colour[i]; + s->colour[i] = a; + a = b; + if (a == v) break; + } + + s->buf[((s->dx + s->ox++) & 0x7ff) + (((s->dy + s->oy) & 0x7ff) * 0x800)] = v; +} + + +unsigned char gunpey_state::get_o(struct state_s *s, int x, int y) +{ + assert(x >= 0); + assert(x < s->ow); + assert(x < 256); + assert(y >= 0); + assert(y < s->oh); + assert(y < 256); + + return s->buf[((s->dx + x) & 0x7ff) + (((s->dy + y) & 0x7ff) * 0x800)]; +} + + +void gunpey_state::hn_bytes_new_colour(struct state_s *s, unsigned char v, int n) +{ + for (int i = 0; i < n; i++) + { + set_o(s, v); + } +} + + +void gunpey_state::hn_bytes_prev_colour(struct state_s *s, unsigned char v, int n) +{ + int c = s->colour[v]; + + for (int i = 0; i < n; i++) + { + set_o(s, c); + } +} + + +void gunpey_state::hn_copy_directly(struct state_s *s, unsigned char v, int n) +{ + for (int i = 0; i < n; i++) + { + if ((s->ox / 12) & 1) + { + set_o(s, get_o(s, s->ox, s->oy + 1)); + } + else + { + set_o(s, get_o(s, s->ox, s->oy - 1)); + } + } +} + + + +void gunpey_state::hn_copy_plus_one(struct state_s *s, unsigned char v, int n) +{ + for (int i = 0; i < n; i++) + { + if ((s->ox / 12) & 1) + { + set_o(s, get_o(s, s->ox + 1, s->oy + 1)); + } + else + { + set_o(s, get_o(s, s->ox + 1, s->oy - 1)); + } + } +} + + +void gunpey_state::hn_copy_minus_one(struct state_s *s, unsigned char v, int n) +{ + for (int i = 0; i < n; i++) + { + if ((s->ox / 12) & 1) + { + set_o(s, get_o(s, s->ox - 1, s->oy + 1)); + } + else + { + set_o(s, get_o(s, s->ox - 1, s->oy - 1)); + } + } +} + + +static struct huffman_node_s +{ + const char *bits; + void (*func)(struct state_s *, unsigned char, int); + int arg0_bits; + int arg1_val; +} hn[] = { + { "11", gunpey_state::hn_bytes_new_colour, 8, 1 }, + { "10111", gunpey_state::hn_bytes_new_colour, 8, 2 }, + { "10110011", gunpey_state::hn_bytes_new_colour, 8, 3 }, + { "1010011000", gunpey_state::hn_bytes_new_colour, 8, 4 }, + { "1010101010000", gunpey_state::hn_bytes_new_colour, 8, 5 }, + { "101010001011110", gunpey_state::hn_bytes_new_colour, 8, 6 }, + { "101010010101110", gunpey_state::hn_bytes_new_colour, 8, 7 }, + { "101010010101111", gunpey_state::hn_bytes_new_colour, 8, 8 }, + { "101010010101100", gunpey_state::hn_bytes_new_colour, 8, 9 }, + { "10101000101100", gunpey_state::hn_bytes_new_colour, 8, 10 }, + { "101010010101101", gunpey_state::hn_bytes_new_colour, 8, 11 }, + { "10101000101101", gunpey_state::hn_bytes_new_colour, 8, 12 }, + { "0", gunpey_state::hn_bytes_prev_colour, 4, 1 }, + { "100", gunpey_state::hn_bytes_prev_colour, 4, 2 }, + { "101011", gunpey_state::hn_bytes_prev_colour, 4, 3 }, + { "1010010", gunpey_state::hn_bytes_prev_colour, 4, 4 }, + { "101010100", gunpey_state::hn_bytes_prev_colour, 4, 5 }, + { "1010100100", gunpey_state::hn_bytes_prev_colour, 4, 6 }, + { "10101010110", gunpey_state::hn_bytes_prev_colour, 4, 7 }, + { "10100111000", gunpey_state::hn_bytes_prev_colour, 4, 8 }, + { "101010101001", gunpey_state::hn_bytes_prev_colour, 4, 9 }, + { "101001111000", gunpey_state::hn_bytes_prev_colour, 4, 10 }, + { "101010010100", gunpey_state::hn_bytes_prev_colour, 4, 11 }, + { "1010011001", gunpey_state::hn_bytes_prev_colour, 4, 12 }, + { "101101", gunpey_state::hn_copy_directly, 0, 2 }, + { "10101011", gunpey_state::hn_copy_directly, 0, 3 }, + { "101010011", gunpey_state::hn_copy_directly, 0, 4 }, + { "101001101", gunpey_state::hn_copy_directly, 0, 5 }, + { "1010011111", gunpey_state::hn_copy_directly, 0, 6 }, + { "1010100011", gunpey_state::hn_copy_directly, 0, 7 }, + { "10101000100", gunpey_state::hn_copy_directly, 0, 8 }, + { "101010101111", gunpey_state::hn_copy_directly, 0, 9 }, + { "101001110010", gunpey_state::hn_copy_directly, 0, 10 }, + { "1010011100111", gunpey_state::hn_copy_directly, 0, 11 }, + { "101100101", gunpey_state::hn_copy_directly, 0, 12 }, + { "1011000", gunpey_state::hn_copy_plus_one, 0, 2 }, + { "101010000", gunpey_state::hn_copy_plus_one, 0, 3 }, + { "10101001011", gunpey_state::hn_copy_plus_one, 0, 4 }, + { "101010001010", gunpey_state::hn_copy_plus_one, 0, 5 }, + { "1010101011101", gunpey_state::hn_copy_plus_one, 0, 6 }, + { "1010101011100", gunpey_state::hn_copy_plus_one, 0, 7 }, + { "1010011110010", gunpey_state::hn_copy_plus_one, 0, 8 }, + { "10101000101110", gunpey_state::hn_copy_plus_one, 0, 9 }, + { "101010001011111", gunpey_state::hn_copy_plus_one, 0, 10 }, + { "1010011110011", gunpey_state::hn_copy_plus_one, 0, 11 }, + { "101000", gunpey_state::hn_copy_minus_one, 0, 2 }, + { "101100100", gunpey_state::hn_copy_minus_one, 0, 3 }, + { "1010011101", gunpey_state::hn_copy_minus_one, 0, 4 }, + { "10101010101", gunpey_state::hn_copy_minus_one, 0, 5 }, + { "101001111011", gunpey_state::hn_copy_minus_one, 0, 6 }, + { "101001111010", gunpey_state::hn_copy_minus_one, 0, 7 }, + { "1010101010001", gunpey_state::hn_copy_minus_one, 0, 8 }, + { "1010011100110", gunpey_state::hn_copy_minus_one, 0, 9 }, + { "10101001010101", gunpey_state::hn_copy_minus_one, 0, 10 }, + { "10101001010100", gunpey_state::hn_copy_minus_one, 0, 11 }, + { NULL }, +}; + + +int gunpey_state::next_node(struct huffman_node_s **res, struct state_s *s) +{ + char bits[128]; + + memset(bits, 0, sizeof(bits)); + + for (int i = 0; i < sizeof(bits) - 1; i++) + { + bits[i] = '0' + get_next_bit(s); + + for (int j = 0;; j++) + { + if (!hn[j].bits) return -1; + + if (strncmp(bits, hn[j].bits, i + 1) == 0) + { + if (!hn[j].bits[i + 1]) + { + *res = &hn[j]; + return 0; + } + break; + } + } + } + + return -1; +} + +int gunpey_state::decompress_sprite(unsigned char *buf, int ix, int iy, int ow, int oh, int dx, int dy) +{ + struct huffman_node_s *n; + struct state_s s; + unsigned char v; + int eol; + + s.buf = buf; + s.num_bits = 0; + + memset(s.colour, 0, sizeof(s.colour)); + + s.basex = ix; + + s.ix = ix; + s.iy = iy; + s.iw = get_vrom_byte(s.ix++, s.iy) + 1; + s.dx = dx; + s.dy = dy; + + s.ow = ow; + s.oh = oh; + s.ox = 0; + s.oy = 0; + + int temp; + temp = get_next_bit(&s); + temp |= get_next_bit(&s) << 1; + temp |= get_next_bit(&s) << 2; + assert(temp == 0); + + while (s.ox < s.ow) + { + if (next_node(&n, &s)) + return -1; + + v = 0; + for (int i = 0; i < n->arg0_bits; i++) + { + v |= get_next_bit(&s) << i; } - if ((lookupx == m_srcx) && (lookupy == m_srcy)) + n->func(&s, v, n->arg1_val); + + if ((s.ox % 12) == 0) { - m_dstxbase = m_dstx; - m_dstxcount = 0; - m_dstycount = 0; - m_srcxbase = m_srcx; - m_scrxcount = 0; - m_srcycount = 0; - - for (;;) + s.ox -= 12; + if ((s.ox / 12) & 1) { - uint8_t usedata = 0; + s.oy -= 1; + } + else + { + s.oy += 1; + } + eol = 1; - if (lookupoffset < 0x4c110a) + } + else if (s.ox == s.ow) + { + s.ox -= s.ow % 12; + if ((s.ox / 12) & 1) + { + s.oy -= 1; + } + else + { + s.oy += 1; + } + eol = 1; + + } + else + { + eol = 0; + } + + if (eol) + { + if ((s.oy == s.oh) || (s.oy == -1)) + { + s.ox += 12; + if ((s.ox / 12) & 1) { - usedata = m_pre_data[lookupoffset++]; + s.oy -= 1; } else { - //fatalerror("out of data\n"); + s.oy += 1; } - - m_srcx++; m_scrxcount++; - if (m_scrxcount == m_xsize) - { - m_scrxcount = 0; - m_srcx = m_srcxbase; - m_srcy++; m_srcycount++; - } - - if ((write_dest_byte(usedata)) == -1) - break; } - - break; } - - i += 8; } + + return 0; } WRITE8_MEMBER(gunpey_state::blitter_w) { uint16_t *blit_ram = m_blit_ram; - //printf("gunpey_blitter_w offset %01x data %02x\n", offset,data); + //logerror("gunpey_blitter_w offset %01x data %02x\n", offset,data); blit_ram[offset] = data; @@ -1157,126 +1013,14 @@ WRITE8_MEMBER(gunpey_state::blitter_w) if(compression) { if(compression == 8) - { - // compressed stream format: - // - // byte 0 = source width (data is often stored in fairly narrow columns) - -#ifdef SHOW_COMPRESSED_DATA_DEBUG - printf("%02x %02x %02x %02x|%02x %02x %02x %02x|%02x %02x %02x %02x|%02x %02x %02x %02x\n" - ,blit_ram[0],blit_ram[1],blit_ram[2],blit_ram[3] - ,blit_ram[4],blit_ram[5],blit_ram[6],blit_ram[7] - ,blit_ram[8],blit_ram[9],blit_ram[0xa],blit_ram[0xb] - ,blit_ram[0xc],blit_ram[0xd],blit_ram[0xe],blit_ram[0xf]); - int count = 0; - printf("data: "); - int linespacer = 0; -#endif - - - m_dstxbase = m_dstx; - m_dstxcount = 0; - m_dstycount = 0; - m_srcxbase = m_srcx; - m_scrxcount = 0; - m_srcycount = 0; - - m_sourcewide = m_blit_rom[(((m_srcy)&0x7ff)*0x800)+((m_srcx)&0x7ff)]+1; - m_srcx++;m_scrxcount++; // we don't want to decode the width as part of the data stream.. - m_latched_bits_left = 0; - m_zero_bit_count = 0; - - m_out_of_data = false; - - for (;;) + { + if (decompress_sprite(m_vram, m_srcx, m_srcy, m_xsize, m_ysize, m_dstx, m_dsty)) { - int test = get_stream_bits(2); - int data; - int getbits = 1; - // don't think this is right.. just keeps some streams in alignment, see 959 in char test for example - if (test==0x0) - { - getbits = 4; - } - else if (test==0x1) - { - getbits = 1; - } - else if (test==0x2) - { - getbits = 2; - } - else if (test==0x3) - { - getbits = 7; - } - data = get_stream_bits(getbits); - - // hack, really I imagine there is exactly enough compressed data to fill the dest bitmap area when decompressed, but to stop us - // overrunning into reading other data we terminate on a 0000, which doesn't seem likely to be compressed data. - if (m_zero_bit_count>=16) - m_out_of_data = true; - - - - uint8_t usedata = 0xff; - if (!m_out_of_data) - { - #ifdef SHOW_COMPRESSED_DATA_DEBUG - //if (count<512) - { - { - if (test==0x0) - { - printf("00"); - } - else if (test==0x1) - { - printf("01"); - } - else if (test==0x2) - { - printf("10"); - } - else if (test==0x3) - { - printf("11"); - } - - for (int z=0;z>((getbits-1)-z))&1); - } - - linespacer++; - if ((linespacer%16) == 0) printf("\n"); - - printf(" "); - - } - count++; - } - #endif - - usedata = data; - } - else - usedata = 0x44; - - if ((write_dest_byte(usedata))==-1) - break; - + logerror("[-] Failed to decompress sprite at %04x %04x\n", m_srcx, m_srcy); } - -#ifdef SHOW_COMPRESSED_DATA_DEBUG - printf("\n"); -#endif - - replace_decompressed_sprite(); - } else - printf("unknown compression mode %02x\n",compression); + logerror("unknown compression mode %02x\n",compression); } else { @@ -1290,7 +1034,6 @@ WRITE8_MEMBER(gunpey_state::blitter_w) for (;;) { uint8_t usedata = m_blit_rom[(((m_srcy)&0x7ff)*0x800)+((m_srcx)&0x7ff)]; - m_blit_rom2[(((m_srcy)&0x7ff)*0x800)+((m_srcx)&0x7ff)] = 0x44; // debug m_srcx++; m_scrxcount++; if (m_scrxcount==m_xsize) { @@ -1305,23 +1048,18 @@ WRITE8_MEMBER(gunpey_state::blitter_w) } m_blitter_end_timer->adjust(m_maincpu->cycles_to_attotime(m_xsize*m_ysize)); - - -/* - -*/ } } WRITE8_MEMBER(gunpey_state::blitter_upper_w) { - //printf("gunpey_blitter_upper_w %02x %02x\n", offset, data); + //logerror("gunpey_blitter_upper_w %02x %02x\n", offset, data); } WRITE8_MEMBER(gunpey_state::blitter_upper2_w) { - //printf("gunpey_blitter_upper2_w %02x %02x\n", offset, data); + //logerror("gunpey_blitter_upper2_w %02x %02x\n", offset, data); } @@ -1473,27 +1211,11 @@ TIMER_DEVICE_CALLBACK_MEMBER(gunpey_state::scanline) if(scanline == 240) { - //printf("frame\n"); + //logerror("frame\n"); irq_check(0x50); } } - - - - -// this isn't a real decode as such, but the graphic data is all stored in pages 2048 bytes wide at varying BPP levels, some (BG data) compressed with what is likely a lossy scheme -// palette data is in here too, the blocks at the bottom right of all this? -static GFXLAYOUT_RAW( gunpey, 2048, 1, 2048*8, 2048*8 ) - -static GFXDECODE_START( gunpey ) - GFXDECODE_ENTRY( "blit_data", 0, gunpey, 0x0000, 0x1 ) - GFXDECODE_ENTRY( "blit_data2", 0, gunpey, 0x0000, 0x1 ) - GFXDECODE_ENTRY( "vram", 0, gunpey, 0x0000, 0x1 ) -GFXDECODE_END - - - /***************************************************************************************/ MACHINE_CONFIG_START(gunpey_state::gunpey) @@ -1510,7 +1232,6 @@ MACHINE_CONFIG_START(gunpey_state::gunpey) MCFG_SCREEN_PALETTE("palette") MCFG_PALETTE_ADD_RRRRRGGGGGBBBBB("palette") - MCFG_GFXDECODE_ADD("gfxdecode", "palette", gunpey) MCFG_SPEAKER_STANDARD_STEREO("lspeaker","rspeaker") @@ -1523,7 +1244,6 @@ MACHINE_CONFIG_START(gunpey_state::gunpey) MCFG_SOUND_ROUTE(1, "rspeaker", 0.25) MACHINE_CONFIG_END - /***************************************************************************************/ ROM_START( gunpey ) @@ -1533,9 +1253,6 @@ ROM_START( gunpey ) ROM_REGION( 0x400000, "blit_data", 0 ) ROM_LOAD( "gp_rom3.025", 0x00000, 0x400000, CRC(f2d1f9f0) SHA1(0d20301fd33892074508b9d127456eae80cc3a1c) ) - ROM_REGION( 0x400000, "blit_data2", 0 ) // debug test - ROM_COPY( "blit_data", 0x00000, 0x00000, 0x400000 ) - ROM_REGION( 0x400000, "vram", ROMREGION_ERASEFF ) @@ -1544,23 +1261,12 @@ ROM_START( gunpey ) ROM_REGION( 0x400000, "oki", 0 ) ROM_LOAD( "gp_rom5.622", 0x000000, 0x400000, CRC(f79903e0) SHA1(4fd50b4138e64a48ec1504eb8cd172a229e0e965)) // 1xxxxxxxxxxxxxxxxxxxxx = 0xFF - - - ROM_REGION( 0x3088, "pre_index", 0 ) - ROM_LOAD( "tableoutput.bin", 0x000000, 0x3088, CRC(39c6dd4f) SHA1(61697ad9167e75f321d0cbd1cc98a3aeefb8370f) ) - - ROM_REGION( 0x4c110a, "pre_data", 0 ) - ROM_LOAD( "dataoutput.bin", 0x000000, 0x4c110a, CRC(eaff7bb8) SHA1(83afdcabb59d202398b1793f1f60052556dd1811) ) ROM_END - DRIVER_INIT_MEMBER(gunpey_state,gunpey) { m_blit_rom = memregion("blit_data")->base(); - m_blit_rom2 = memregion("blit_data2")->base(); - m_vram = memregion("vram")->base(); - // ... } GAME( 2000, gunpey, 0, gunpey, gunpey, gunpey_state, gunpey, ROT0, "Bandai / Banpresto", "Gunpey (Japan)", 0 )