Skip to content

Commit

Permalink
-konami/simpsons.cpp: Cleaned up code. (#13312)
Browse files Browse the repository at this point in the history
* Reduced literal tags and run-time tag lookups, use more descriptive tags.

-konami/konami_helper.cpp: Made layer sorting functions templates, reduced dependence on preprocessor.
  • Loading branch information
cam900 authored Feb 7, 2025
1 parent b128c1f commit 6f1fce3
Show file tree
Hide file tree
Showing 3 changed files with 103 additions and 123 deletions.
62 changes: 0 additions & 62 deletions src/mame/konami/konami_helper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,65 +14,3 @@ void konami_decode_gfx(device_gfx_interface &gfxdecode, int gfx_index, uint8_t *
gl.total = total;
gfxdecode.set_gfx(gfx_index, std::make_unique<gfx_element>(&palette, gl, data, 0, palette.entries() >> bpp, 0));
}


/* useful function to sort three tile layers by priority order */
void konami_sortlayers3( int *layer, int *pri )
{
#define SWAP(a,b) \
if (pri[a] < pri[b]) \
{ \
int t; \
t = pri[a]; pri[a] = pri[b]; pri[b] = t; \
t = layer[a]; layer[a] = layer[b]; layer[b] = t; \
}

SWAP(0,1)
SWAP(0,2)
SWAP(1,2)
#undef SWAP
}

/* useful function to sort four tile layers by priority order */
void konami_sortlayers4( int *layer, int *pri )
{
#define SWAP(a,b) \
if (pri[a] <= pri[b]) \
{ \
int t; \
t = pri[a]; pri[a] = pri[b]; pri[b] = t; \
t = layer[a]; layer[a] = layer[b]; layer[b] = t; \
}

SWAP(0, 1)
SWAP(0, 2)
SWAP(0, 3)
SWAP(1, 2)
SWAP(1, 3)
SWAP(2, 3)
#undef SWAP
}

/* useful function to sort five tile layers by priority order */
void konami_sortlayers5( int *layer, int *pri )
{
#define SWAP(a,b) \
if (pri[a] <= pri[b]) \
{ \
int t; \
t = pri[a]; pri[a] = pri[b]; pri[b] = t; \
t = layer[a]; layer[a] = layer[b]; layer[b] = t; \
}

SWAP(0, 1)
SWAP(0, 2)
SWAP(0, 3)
SWAP(0, 4)
SWAP(1, 2)
SWAP(1, 3)
SWAP(1, 4)
SWAP(2, 3)
SWAP(2, 4)
SWAP(3, 4)
#undef SWAP
}
40 changes: 37 additions & 3 deletions src/mame/konami/konami_helper.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,47 @@

#pragma once

#include <algorithm>
#include <functional>

void konami_decode_gfx(device_gfx_interface &gfxdecode, int gfx_index, uint8_t *data, uint32_t total, const gfx_layout *layout, int bpp);

// unrolled bubble sort helper
template <unsigned N, unsigned A = N - 2, unsigned B = N - 1, typename C, typename T, typename U>
inline void konami_sortlayers(C cmp, T *layer, U *pri)
{
if constexpr (B > (A + 1))
konami_sortlayers<N, A, B - 1>(cmp, layer, pri);
else if constexpr (A > 0)
konami_sortlayers<N, A - 1, N - 1>(cmp, layer, pri);
if (cmp(pri[A], pri[B]))
{
using std::swap;
swap(pri[A], pri[B]);
swap(layer[A], layer[B]);
}
}

// helper function to sort three tile layers by priority order
void konami_sortlayers3(int *layer, int *pri);
template <typename T, typename U>
inline void konami_sortlayers3(T *layer, U *pri)
{
konami_sortlayers<3>(std::less<U>(), layer, pri);
}

// helper function to sort four tile layers by priority order
void konami_sortlayers4(int *layer, int *pri);
template <typename T, typename U>
inline void konami_sortlayers4(T *layer, U *pri)
{
konami_sortlayers<4>(std::less_equal<U>(), layer, pri);
}

// helper function to sort five tile layers by priority order
void konami_sortlayers5(int *layer, int *pri);
template <typename T, typename U>
inline void konami_sortlayers5(T *layer, U *pri)
{
konami_sortlayers<5>(std::less_equal<U>(), layer, pri);
}


#endif // MAME_KONAMI_KONAMI_HELPER_H
Loading

0 comments on commit 6f1fce3

Please sign in to comment.