Previous 199869 Revisions Next

r20897 Sunday 10th February, 2013 at 15:11:26 UTC by Wilbert Pol
neogeo.c: removed some more tagmap lookups. (nw)
[src/mame/drivers]neogeo.c
[src/mame/includes]neogeo.h
[src/mame/video]neogeo.c

trunk/src/mame/drivers/neogeo.c
r20896r20897
13091309      machine().memory().region_free(":fixed");
13101310      machine().memory().region_alloc(":fixed",size,1, ENDIANNESS_LITTLE);
13111311      memcpy(memregion("fixed")->base(),image.get_software_region("fixed"),size);
1312      m_region_fixed.findit();
13121313
13131314      if(image.get_software_region("audiocpu") != NULL)
13141315      {
r20896r20897
13381339      machine().memory().region_free(":sprites");
13391340      machine().memory().region_alloc(":sprites",size,1, ENDIANNESS_LITTLE);
13401341      memcpy(machine().root_device().memregion("sprites")->base(),image.get_software_region("sprites"),size);
1342      // Reset the reference to the region
1343      m_region_sprites.findit();
13411344      if(image.get_software_region("audiocrypt") != NULL)  // encrypted Z80 code
13421345      {
13431346         size = image.get_software_region_length("audiocrypt");
trunk/src/mame/includes/neogeo.h
r20896r20897
4242      , m_audiocpu(*this, "audiocpu")
4343      , m_upd4990a(*this, "upd4990a")
4444      , m_region_maincpu(*this, "maincpu")
45      , m_region_sprites(*this, "sprites")
46      , m_region_fixed(*this, "fixed")
47      , m_region_fixedbios(*this, "fixedbios")
4548      , m_bank_vectors(*this, NEOGEO_BANK_VECTORS)
4649      , m_bank_bios(*this, NEOGEO_BANK_BIOS)
4750      , m_bank_cartridge(*this, NEOGEO_BANK_CARTRIDGE)
r20896r20897
262265
263266protected:
264267   required_memory_region m_region_maincpu;
268   required_memory_region m_region_sprites;
269   required_memory_region m_region_fixed;
270   required_memory_region m_region_fixedbios;
265271   required_memory_bank m_bank_vectors;
266272   required_memory_bank m_bank_bios;
267273   optional_memory_bank m_bank_cartridge;  // optional because of neocd
r20896r20897
283289   void _set_audio_cpu_rom_source();
284290   void set_audio_cpu_rom_source( UINT8 data );
285291   void _set_main_cpu_vector_table_source();
292   void optimize_sprite_data();
293   void draw_fixed_layer( bitmap_rgb32 &bitmap, int scanline );
286294};
287295
288296
trunk/src/mame/video/neogeo.c
r20896r20897
264264}
265265
266266
267static void draw_fixed_layer( running_machine &machine, bitmap_rgb32 &bitmap, int scanline )
267void neogeo_state::draw_fixed_layer( bitmap_rgb32 &bitmap, int scanline )
268268{
269   neogeo_state *state = machine.driver_data<neogeo_state>();
270269   int x;
271270
272   UINT8* gfx_base = state->memregion(state->m_fixed_layer_source ? "fixed" : "fixedbios")->base();
273   UINT32 addr_mask = state->memregion(state->m_fixed_layer_source ? "fixed" : "fixedbios")->bytes() - 1;
274   UINT16 *video_data = &state->m_videoram[0x7000 | (scanline >> 3)];
271   UINT8* gfx_base = m_fixed_layer_source ? m_region_fixed->base() : m_region_fixedbios->base();
272   UINT32 addr_mask = ( m_fixed_layer_source ? m_region_fixed->bytes() : m_region_fixedbios->bytes() ) - 1;
273   UINT16 *video_data = &m_videoram[0x7000 | (scanline >> 3)];
275274   UINT32 *pixel_addr = &bitmap.pix32(scanline, NEOGEO_HBEND);
276275
277276   int garouoffsets[32];
278   int banked = state->m_fixed_layer_source && (addr_mask > 0x1ffff);
277   int banked = m_fixed_layer_source && (addr_mask > 0x1ffff);
279278
280279   /* thanks to Mr K for the garou & kof2000 banking info */
281280   /* Build line banking table for Garou & MS3 before starting render */
282   if (banked && state->m_fixed_layer_bank_type == 1)
281   if (banked && m_fixed_layer_bank_type == 1)
283282   {
284283      int garoubank = 0;
285284      int k = 0;
286285      int y = 0;
287286      while (y < 32)
288287      {
289         if (state->m_videoram[0x7500 + k] == 0x0200 && (state->m_videoram[0x7580 + k] & 0xff00) == 0xff00)
288         if (m_videoram[0x7500 + k] == 0x0200 && (m_videoram[0x7580 + k] & 0xff00) == 0xff00)
290289         {
291            garoubank = state->m_videoram[0x7580 + k] & 3;
290            garoubank = m_videoram[0x7580 + k] & 3;
292291            garouoffsets[y++] = garoubank;
293292         }
294293         garouoffsets[y++] = garoubank;
r20896r20897
304303      if (banked)
305304      {
306305         int y = scanline >> 3;
307         switch (state->m_fixed_layer_bank_type)
306         switch (m_fixed_layer_bank_type)
308307         {
309308         case 1:
310309            /* Garou, MSlug 3 */
311310            code += 0x1000 * (garouoffsets[(y - 2) & 31] ^ 3);
312311            break;
313312         case 2:
314            code += 0x1000 * (((state->m_videoram[0x7500 + ((y - 1) & 31) + 32 * (x / 6)] >> (5 - (x % 6)) * 2) & 3) ^ 3);
313            code += 0x1000 * (((m_videoram[0x7500 + ((y - 1) & 31) + 32 * (x / 6)] >> (5 - (x % 6)) * 2) & 3) ^ 3);
315314            break;
316315         }
317316      }
r20896r20897
321320         int i;
322321
323322         UINT8 *gfx = &gfx_base[((code << 5) | (scanline & 0x07)) & addr_mask];
324         pen_t *char_pens = &state->m_pens[code_and_palette >> 12 << 4];
323         pen_t *char_pens = &m_pens[code_and_palette >> 12 << 4];
325324
326325         for (i = 0; i < 4; i++)
327326         {
r20896r20897
670669}
671670
672671
673static void optimize_sprite_data( running_machine &machine )
672void neogeo_state::optimize_sprite_data()
674673{
675   neogeo_state *state = machine.driver_data<neogeo_state>();
676
677674   /* convert the sprite graphics data into a format that
678675      allows faster blitting */
679676   int i;
r20896r20897
684681
685682   /* get mask based on the length rounded up to the nearest
686683      power of 2 */
687   state->m_sprite_gfx_address_mask = 0xffffffff;
684   m_sprite_gfx_address_mask = 0xffffffff;
688685
689   len = state->memregion("sprites")->bytes();
686   len = m_region_sprites->bytes();
690687
691688   for (bit = 0x80000000; bit != 0; bit >>= 1)
692689   {
693690      if (((len * 2) - 1) & bit)
694691         break;
695692
696      state->m_sprite_gfx_address_mask >>= 1;
693      m_sprite_gfx_address_mask >>= 1;
697694   }
698695
699   state->m_sprite_gfx = auto_alloc_array_clear(machine, UINT8, state->m_sprite_gfx_address_mask + 1);
696   m_sprite_gfx = auto_alloc_array_clear(machine(), UINT8, m_sprite_gfx_address_mask + 1);
700697
701   src = machine.root_device().memregion("sprites")->base();
702   dest = state->m_sprite_gfx;
698   src = m_region_sprites->base();
699   dest = m_sprite_gfx;
703700
704701   for (i = 0; i < len; i += 0x80, src += 0x80)
705702   {
r20896r20897
859856   compute_rgb_weights(machine());
860857   create_sprite_line_timer(machine());
861858   create_auto_animation_timer(machine());
862   optimize_sprite_data(machine());
859   optimize_sprite_data();
863860
864861   /* initialize values that are not modified on a reset */
865862   m_videoram_read_buffer = 0;
r20896r20897
902899{
903900   start_sprite_line_timer(machine());
904901   start_auto_animation_timer(machine());
905   optimize_sprite_data(machine());
902   optimize_sprite_data();
906903}
907904
908905
r20896r20897
920917
921918   if (m_has_sprite_bus) draw_sprites(machine(), bitmap, cliprect.min_y);
922919
923   if (m_has_text_bus) draw_fixed_layer(machine(), bitmap, cliprect.min_y);
920   if (m_has_text_bus) draw_fixed_layer(bitmap, cliprect.min_y);
924921
925922   return 0;
926923}

Previous 199869 Revisions Next


© 1997-2024 The MAME Team