// fix sprite order static int decode_sprite32(int region) { static const gfx_layout spr32_layout = { 32, 32, 1024, 4, { 0x000000, 0x000004, 0x200000, 0x200004 }, { 0*8, 0*8+1, 0*8+2, 0*8+3, 1*8, 1*8+1, 1*8+2, 1*8+3, 2*8, 2*8+1, 2*8+2, 2*8+3, 3*8, 3*8+1, 3*8+2, 3*8+3, 4*8, 4*8+1, 4*8+2, 4*8+3, 5*8, 5*8+1, 5*8+2, 5*8+3, 6*8, 6*8+1, 6*8+2, 6*8+3, 7*8, 7*8+1, 7*8+2, 7*8+3 }, { 0*2*32, 1*2*32, 2*2*32, 3*2*32, 4*2*32, 5*2*32, 6*2*32, 7*2*32, 8*2*32, 9*2*32, 10*2*32, 11*2*32, 12*2*32, 13*2*32, 14*2*32, 15*2*32, 16*2*32, 17*2*32, 18*2*32, 19*2*32, 20*2*32, 21*2*32, 22*2*32, 23*2*32, 24*2*32, 25*2*32, 26*2*32, 27*2*32, 28*2*32, 29*2*32, 30*2*32, 31*2*32 }, 2*32*32 }; UINT8 *src = memory_region(region); int len = memory_region_length(region); int total = spr32_layout.total; int size = spr32_layout.charincrement / 8; UINT8 *dst; int i; dst = (UINT8 *)malloc(len); if (!src || !dst) return 1; memset(dst, 0, len); for (i = 0; i < total; i++) { int code; code = (i & 0x07f) | ((i & 0x180) << 1) | 0x80; code &= ~((i & 0x200) >> 2); memcpy(&dst[size * (i + 0)], &src[size * (code + 0)], size); memcpy(&dst[size * (i + total)], &src[size * (code + total)], size); } if (decode_sprite(sprite32, &spr32_layout, dst)) return 1; free(dst); return 0; }
// fix sprite order static int decode_sprite16(int region) { static const gfx_layout spr16_layout = { 16, 16, 512, 4, { 0x00000, 0x00004, 0x40000, 0x40004 }, { 0*8, 0*8+1, 0*8+2, 0*8+3, 1*8, 1*8+1, 1*8+2, 1*8+3, 2*8, 2*8+1, 2*8+2, 2*8+3, 3*8, 3*8+1, 3*8+2, 3*8+3 }, { 0*2*16, 1*2*16, 2*2*16, 3*2*16, 4*2*16, 5*2*16, 6*2*16, 7*2*16, 8*2*16, 9*2*16, 10*2*16, 11*2*16, 12*2*16, 13*2*16, 14*2*16, 15*2*16 }, 2*16*16 }; UINT8 *src = memory_region(region); int len = memory_region_length(region); UINT8 *dst; int i, y; dst = (UINT8 *)malloc(len); if (!src || !dst) return 1; for (i = 0; i < len / (4*4*16); i++) for (y = 0; y < 16; y++) { memcpy(&dst[(i*4 + 0) * (2*16*16/8) + y * (2*16/8)], &src[i * (2*32*32/8) + y * (2*32/8)], 4); memcpy(&dst[(i*4 + 1) * (2*16*16/8) + y * (2*16/8)], &src[i * (2*32*32/8) + y * (2*32/8) + (4*8/8)], 4); memcpy(&dst[(i*4 + 2) * (2*16*16/8) + y * (2*16/8)], &src[i * (2*32*32/8) + y * (2*32/8) + (16*2*32/8)], 4); memcpy(&dst[(i*4 + 3) * (2*16*16/8) + y * (2*16/8)], &src[i * (2*32*32/8) + y * (2*32/8) + (4*8/8) + (16*2*32/8)], 4); } if (decode_sprite(sprite16, &spr16_layout, dst)) return 1; free(dst); return 0; }
// fix sprite order static void decode_sprite32(running_machine &machine, const char * region) { tceptor_state *state = machine.driver_data<tceptor_state>(); static const gfx_layout spr32_layout = { 32, 32, 1024, 4, { 0x000000, 0x000004, 0x200000, 0x200004 }, { 0*8, 0*8+1, 0*8+2, 0*8+3, 1*8, 1*8+1, 1*8+2, 1*8+3, 2*8, 2*8+1, 2*8+2, 2*8+3, 3*8, 3*8+1, 3*8+2, 3*8+3, 4*8, 4*8+1, 4*8+2, 4*8+3, 5*8, 5*8+1, 5*8+2, 5*8+3, 6*8, 6*8+1, 6*8+2, 6*8+3, 7*8, 7*8+1, 7*8+2, 7*8+3 }, { 0*2*32, 1*2*32, 2*2*32, 3*2*32, 4*2*32, 5*2*32, 6*2*32, 7*2*32, 8*2*32, 9*2*32, 10*2*32, 11*2*32, 12*2*32, 13*2*32, 14*2*32, 15*2*32, 16*2*32, 17*2*32, 18*2*32, 19*2*32, 20*2*32, 21*2*32, 22*2*32, 23*2*32, 24*2*32, 25*2*32, 26*2*32, 27*2*32, 28*2*32, 29*2*32, 30*2*32, 31*2*32 }, 2*32*32 }; UINT8 *src = machine.region(region)->base(); int len = machine.region(region)->bytes(); int total = spr32_layout.total; int size = spr32_layout.charincrement / 8; UINT8 *dst; int i; dst = auto_alloc_array(machine, UINT8, len); memset(dst, 0, len); for (i = 0; i < total; i++) { int code; code = (i & 0x07f) | ((i & 0x180) << 1) | 0x80; code &= ~((i & 0x200) >> 2); memcpy(&dst[size * (i + 0)], &src[size * (code + 0)], size); memcpy(&dst[size * (i + total)], &src[size * (code + total)], size); } decode_sprite(machine, state->m_sprite32, &spr32_layout, dst); }
// fix sprite order static void decode_sprite16(running_machine &machine, const char * region) { tceptor_state *state = machine.driver_data<tceptor_state>(); static const gfx_layout spr16_layout = { 16, 16, 512, 4, { 0x00000, 0x00004, 0x40000, 0x40004 }, { 0*8, 0*8+1, 0*8+2, 0*8+3, 1*8, 1*8+1, 1*8+2, 1*8+3, 2*8, 2*8+1, 2*8+2, 2*8+3, 3*8, 3*8+1, 3*8+2, 3*8+3 }, { 0*2*16, 1*2*16, 2*2*16, 3*2*16, 4*2*16, 5*2*16, 6*2*16, 7*2*16, 8*2*16, 9*2*16, 10*2*16, 11*2*16, 12*2*16, 13*2*16, 14*2*16, 15*2*16 }, 2*16*16 }; UINT8 *src = machine.region(region)->base(); int len = machine.region(region)->bytes(); UINT8 *dst; int i, y; dst = auto_alloc_array(machine, UINT8, len); for (i = 0; i < len / (4*4*16); i++) for (y = 0; y < 16; y++) { memcpy(&dst[(i*4 + 0) * (2*16*16/8) + y * (2*16/8)], &src[i * (2*32*32/8) + y * (2*32/8)], 4); memcpy(&dst[(i*4 + 1) * (2*16*16/8) + y * (2*16/8)], &src[i * (2*32*32/8) + y * (2*32/8) + (4*8/8)], 4); memcpy(&dst[(i*4 + 2) * (2*16*16/8) + y * (2*16/8)], &src[i * (2*32*32/8) + y * (2*32/8) + (16*2*32/8)], 4); memcpy(&dst[(i*4 + 3) * (2*16*16/8) + y * (2*16/8)], &src[i * (2*32*32/8) + y * (2*32/8) + (4*8/8) + (16*2*32/8)], 4); } decode_sprite(machine, state->m_sprite16, &spr16_layout, dst); }