Skip to content

Instantly share code, notes, and snippets.

@hwei
Created January 29, 2012 13:24
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hwei/1698804 to your computer and use it in GitHub Desktop.
Save hwei/1698804 to your computer and use it in GitHub Desktop.
cave sh3 driver for mame 0144u6 mame plus r4973
/*
Cave CV1000 hardware
Games by Cave ID number:
CA011 Mushihime-Sama
CA012 Ibara
CA012B Ibara Kuro Black Label
CA013 Espgaluda II
CA014 Pink Sweets: Ibara Sorekara
CA015 Mushihime-Sama Futari
CA015B Mushihime-Sama Futari Black Label
CA016 Muchi Muchi Pork!
CA017 Deathsmiles
CA017B Deathsmiles Mega Black Label
CA019 Do-Don-Pachi Dai-Fukkatsu
CA019B Do-Don-Pachi Dai-Fukkatsu Black Label
CA021 Akai Katana
CMDL01 Medal Mahjong Moukari Bancho
Note: CA018 - DoDonPachi Dai-Ou-Jou Tamashii on PGM2 platform
CA020 - Deathsmiles II: Makai no Merry Christmas on unknown custom platform
PCB CV1000-B / CV1000-D
+--------------------------------------------+
| |
| |
| |
| VOL |
| |
+-+ +-----+ +-----+ X3 |
| | U24 | | U23 | |
+-+ +-----+ +-----+ +------+ |
| |Yamaha| |
| U25* U26* |YMZ770| |
| | | |
|J D5 +------+ |
|A D2 |
|M D3 +-----+ +-----+ |
|M D4 P2* | U7 | | U6 | |
|A D1 +-----+ +-----+ |
| +-------+ |
|C |P4 JTAG| |
|o +-------+ +-------+ |
|n |Altera | +--+ |
|n D6 |Cyclone| | | |
|e X1 S1 | | |U1| |
|c S3 +---------+ +-------+ | | |
|t | | +--+ |
|e | Hitachi | |
|r | | S2 |
| | SH3 | +-----------------+ |
| | | | P3 | |
| +---------+ +-----------------+ |
+-+ X2 |
| +--+ +--+ +---+ U27 |
+-+ | | | | |U13| |
|+-+ |U2| |U4| +---+ |
||P| | | | | __ |
||8| U12* +--+ +--+ U10 / \ |
|+-+ |C126| |
| P5* P7* \__/ |
+--------------------------------------------+
* Denotes not populated
CPU: Hitachi 6417709S SH3 clocked at 102.4MHz (12.800MHz * 8)
Sound: Yamaha YMZ770C-F clocked at 16.384MHz
Other: Altera Cyclone EP1C12 FPGA
Altera EPM7032 (MAX 7000 Series) at U13
OSC:
X1 12.800MHz (SH3 clock derived from this)
X2 32.768kHz (Used by the RTC)
X3 16.384MHz (Yamaha YMZ770C-F clock)
Memory:
U6 (SDRAM) MT46V16M16 ? 4 MBit x 16 x 4 banks, RAM (256 MBit)
U7 (SDRAM) MT46V16M16 ? 4 MBit x 16 x 4 banks, RAM (256 MBit)
U1 (SDRAM) MT48LC2M32 ? 512K x 32 x 4 banks, (64 MBit) for CV1000-B
U1 (SDRAM) IS42S32400 - 1024K x 32 x 4 banks, (128 MBit) for CV1000-D
Roms:
U4 (FLASH) 29LV160BB 16M-Bit CMOS 3.0V, Boot device, FPGA bit file, main program code for CV1000-B
U4 (FLASH) S29JL032H 32M-Bit CMOS 3.0V, Boot device, FPGA bit file, main program code for CV1000-D
U2 (FLASH) K9F1G08U0M 128M x 8 Bit / 64M x 16 Bit NAND. Graphics data.
U23-U24 (FLASH) MBM 29DL321, 32M-Bit CMOS 3.0V. Sound data.
U25-U26 (FLASH) MBM 29DL321, not populated
Battery:
C126 CR2450, Powers the RTC (Real Time Clock) U10. Look at the garden clock in Ibara. NOT present on CV1000-D
Dipswitches & Push Buttons:
S1 (DIL SWITCH) Half Pitch DIL Switch x 1, function unknown
S2 (DIL SWITCH) Half Pitch DIL Switch x 4, SW1=Setup, other switches unknown
S3 (MICRO PUSH BUTTON) Test switch, same as on the JAMMA connector
.
Connectors:
P2 (IDC CONNECTOR 20 PIN) function unknown, P2 is not always mounted
P4 (IDC CONNECTOR 14 PIN) JTAG connector
P8 (IDC CONNECTOR 10 PIN) Advanced User Debugger
P3 (CONNECTOR) Most likely an expansion port, P3 is not always mounted
P5 (CONNECTOR) D9 serial connector. Used for the mahjong Touchscreen titles. Also mounted on early Mushihime-Sama PCB's
P7 (CONNECTOR) Network port pinout. Never seen mounted on any PCB.
Misc:
U27 (SUPERVISOR) MAX 690S 3.0V Microprocessor Supervisory Circuit.
U10 (RTC & EEPROM) RTC 9701, Serial RTC Module with EEPROM 4 kbit (256x16 bit), controlled by Altera EPM7032 U13.
U12 (RS-232 TRANCEIVER) MAX 3244E RS-232 Tranceiver, only mounted when P5 is mounted.
D1-D6 (LED) Status LED's. D6 lights up at power on then shuts off, D2 indicates coinage.
Note: * The Altera EPM7032 usually stamped / labeled with the Cave game ID number as listed above.
* Actual flash ROMs will vary by manufacturer but will be compatible with flash ROM listed.
* The CV1000-D revision PCB has double the RAM at U1, double the ROM at U4 and no battery.
The CV1000-D is used for Dodonpachi Daifukkatsu and later games. Commonly referred to as SH3B PCB.
Information by The Sheep, rtw, Ex-Cyber, BrianT & Guru
------------------------------------------------------
To enter service mode in most cases hold down 0 (Service 2) for a few seconds
(I believe it's the test button on the PCB)
Some games also use the test dipswitch as an alternative method.
ToDo:
Improve Blending precision?
- I'm not sure what precision the original HW mixes with, source data is 555 RGB with 1 bit transparency (16-bits)
and the real VRAM is also clearly in this format. The Alpha values supplied however are 8bpp, and the 'Tint'
values use 0x20 for 'normal' (not 0x1f)
Overall screen brightness / contrast (see test mode)
- Could convert ram back to 16-bit and use a palette lookup at the final blit.. probably easiest / quickest.
Touchscreen
- Used for mmmbanc, needs SH3 serial support.
Remaining Video issues
- mmpork startup screen flicker - the FOR USE IN JAPAN screen doesn't appear on the real PCB until after the graphics are fully loaded, it still displays 'please wait' until that point.
- is the use of the 'scroll' registers 100% correct? (related to above?)
- Sometimes the 'sprites' in mushisam lag by a frame vs the 'backgrounds' is this a timing problem, does the real game do it?
Speedups
- Blitter is already tightly optimized
- Need SH3 recompiler?
*/
#include "emu.h"
#include "cpu/sh4/sh4.h"
#include "cpu/sh4/sh3comn.h"
#include "profiler.h"
#include "machine/rtc9701.h"
#include "sound/ymz770.h"
static UINT64* cavesh3_ram;
//static UINT64* cavesh3_ram_copy;
static UINT16* cavesh3_ram16;
static UINT16* cavesh3_ram16_copy = 0;
class cavesh3_state : public driver_device
{
public:
cavesh3_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag) { }
UINT8* flashregion;
UINT8* flashwritemap;
osd_work_queue * queue; /* work queue */
osd_work_item * blitter_request;
// blit timing
emu_timer *cavesh3_blitter_delay_timer;
int blitter_busy;
};
/***************************************************************************
Video Hardware
***************************************************************************/
UINT8 cavesh3_colrtable[0x20][0x40];
UINT8 cavesh3_colrtable_rev[0x20][0x40];
UINT8 cavesh3_colrtable_add[0x20][0x20];
struct _clr_t
{
UINT8 b,g,r,t;
};
typedef struct _clr_t clr_t;
union colour_t
{
clr_t trgb;
UINT32 u32;
};
// r5g5b5 ro clr_t
INLINE void pen_to_clr(UINT32 pen, clr_t *clr)
{
// --t- ---- rrrr r--- gggg g--- bbbb b--- format
clr->r = (pen >> (16+3));// & 0x1f;
clr->g = (pen >> (8+3));// & 0x1f;
clr->b = (pen >> 3);// & 0x1f;
// --t- ---- ---r rrrr ---g gggg ---b bbbb format
// clr->r = (pen >> 16) & 0x1f;
// clr->g = (pen >> 8) & 0x1f;
// clr->b = (pen >> 0) & 0x1f;
}
// convert separate r,g,b biases (0..80..ff) to clr_t (-1f..0..1f)
INLINE void tint_to_clr(UINT8 r, UINT8 g, UINT8 b, clr_t *clr)
{
clr->r = r>>2;
clr->g = g>>2;
clr->b = b>>2;
}
#if 0
INLINE void clamp_clr(clr_t *clr)
{
if (clr->r > 0x1f) clr->r = 0x1f;
if (clr->g > 0x1f) clr->g = 0x1f;
if (clr->b > 0x1f) clr->b = 0x1f;
}
#endif
// clr_t to r5g5b5
INLINE UINT32 clr_to_pen(const clr_t *clr)
{
// --t- ---- rrrr r--- gggg g--- bbbb b--- format
return (clr->r << (16+3)) | (clr->g << (8+3)) | (clr->b << 3);
// --t- ---- ---r rrrr ---g gggg ---b bbbb format
// return (clr->r << (16)) | (clr->g << (8)) | (clr->b);
}
// add clrs
INLINE void clr_add_with_clr_mul_fixed(clr_t *clr, const clr_t *clr0, const UINT8 mulfixed_val, const clr_t *mulfixed_clr0)
{
clr->r = cavesh3_colrtable_add[clr0->r][cavesh3_colrtable[(mulfixed_clr0->r)][mulfixed_val]];
clr->g = cavesh3_colrtable_add[clr0->g][cavesh3_colrtable[(mulfixed_clr0->g)][mulfixed_val]];
clr->b = cavesh3_colrtable_add[clr0->b][cavesh3_colrtable[(mulfixed_clr0->b)][mulfixed_val]];
}
INLINE void clr_add_with_clr_mul_3param(clr_t *clr, const clr_t *clr0, const clr_t *clr1, const clr_t *clr2)
{
clr->r = cavesh3_colrtable_add[clr0->r][cavesh3_colrtable[(clr2->r)][(clr1->r)]];
clr->g = cavesh3_colrtable_add[clr0->g][cavesh3_colrtable[(clr2->g)][(clr1->g)]];
clr->b = cavesh3_colrtable_add[clr0->b][cavesh3_colrtable[(clr2->b)][(clr1->b)]];
}
INLINE void clr_add_with_clr_square(clr_t *clr, const clr_t *clr0, const clr_t *clr1)
{
clr->r = cavesh3_colrtable_add[clr0->r][cavesh3_colrtable[(clr1->r)][(clr1->r)]];
clr->g = cavesh3_colrtable_add[clr0->r][cavesh3_colrtable[(clr1->g)][(clr1->g)]];
clr->b = cavesh3_colrtable_add[clr0->r][cavesh3_colrtable[(clr1->b)][(clr1->b)]];
}
INLINE void clr_add_with_clr_mul_fixed_rev(clr_t *clr, const clr_t *clr0, const UINT8 val, const clr_t *clr1)
{
clr->r = cavesh3_colrtable_add[clr0->r][cavesh3_colrtable_rev[val][(clr1->r)]];
clr->g = cavesh3_colrtable_add[clr0->g][cavesh3_colrtable_rev[val][(clr1->g)]];
clr->b = cavesh3_colrtable_add[clr0->b][cavesh3_colrtable_rev[val][(clr1->b)]];
}
INLINE void clr_add_with_clr_mul_rev_3param(clr_t *clr, const clr_t *clr0, const clr_t *clr1, const clr_t *clr2)
{
clr->r = cavesh3_colrtable_add[clr0->r][cavesh3_colrtable_rev[(clr2->r)][(clr1->r)]];
clr->g = cavesh3_colrtable_add[clr0->g][cavesh3_colrtable_rev[(clr2->g)][(clr1->g)]];
clr->b = cavesh3_colrtable_add[clr0->b][cavesh3_colrtable_rev[(clr2->b)][(clr1->b)]];
}
INLINE void clr_add_with_clr_mul_rev_square(clr_t *clr, const clr_t *clr0, const clr_t *clr1)
{
clr->r = cavesh3_colrtable_add[clr0->r][cavesh3_colrtable_rev[(clr1->r)][(clr1->r)]];
clr->g = cavesh3_colrtable_add[clr0->g][cavesh3_colrtable_rev[(clr1->g)][(clr1->g)]];
clr->b = cavesh3_colrtable_add[clr0->b][cavesh3_colrtable_rev[(clr1->b)][(clr1->b)]];
}
INLINE void clr_add(clr_t *clr, const clr_t *clr0, const clr_t *clr1)
{
/*
clr->r = clr0->r + clr1->r;
clr->g = clr0->g + clr1->g;
clr->b = clr0->b + clr1->b;
*/
// use pre-clamped lookup table
clr->r = cavesh3_colrtable_add[clr0->r][clr1->r];
clr->g = cavesh3_colrtable_add[clr0->g][clr1->g];
clr->b = cavesh3_colrtable_add[clr0->b][clr1->b];
}
// multiply clrs
INLINE void clr_mul(clr_t *clr0, const clr_t *clr1)
{
clr0->r = cavesh3_colrtable[(clr0->r)][(clr1->r)];
clr0->g = cavesh3_colrtable[(clr0->g)][(clr1->g)];
clr0->b = cavesh3_colrtable[(clr0->b)][(clr1->b)];
}
INLINE void clr_square(clr_t *clr0, const clr_t *clr1)
{
clr0->r = cavesh3_colrtable[(clr1->r)][(clr1->r)];
clr0->g = cavesh3_colrtable[(clr1->g)][(clr1->g)];
clr0->b = cavesh3_colrtable[(clr1->b)][(clr1->b)];
}
INLINE void clr_mul_3param(clr_t *clr0, const clr_t *clr1, const clr_t *clr2)
{
clr0->r = cavesh3_colrtable[(clr2->r)][(clr1->r)];
clr0->g = cavesh3_colrtable[(clr2->g)][(clr1->g)];
clr0->b = cavesh3_colrtable[(clr2->b)][(clr1->b)];
}
INLINE void clr_mul_rev(clr_t *clr0, const clr_t *clr1)
{
clr0->r = cavesh3_colrtable_rev[(clr0->r)][(clr1->r)];
clr0->g = cavesh3_colrtable_rev[(clr0->g)][(clr1->g)];
clr0->b = cavesh3_colrtable_rev[(clr0->b)][(clr1->b)];
}
INLINE void clr_mul_rev_square(clr_t *clr0, const clr_t *clr1)
{
clr0->r = cavesh3_colrtable_rev[(clr1->r)][(clr1->r)];
clr0->g = cavesh3_colrtable_rev[(clr1->g)][(clr1->g)];
clr0->b = cavesh3_colrtable_rev[(clr1->b)][(clr1->b)];
}
INLINE void clr_mul_rev_3param(clr_t *clr0, const clr_t *clr1, const clr_t *clr2)
{
clr0->r = cavesh3_colrtable_rev[(clr2->r)][(clr1->r)];
clr0->g = cavesh3_colrtable_rev[(clr2->g)][(clr1->g)];
clr0->b = cavesh3_colrtable_rev[(clr2->b)][(clr1->b)];
}
INLINE void clr_mul_fixed(clr_t *clr, const UINT8 val, const clr_t *clr0)
{
clr->r = cavesh3_colrtable[val][(clr0->r)];
clr->g = cavesh3_colrtable[val][(clr0->g)];
clr->b = cavesh3_colrtable[val][(clr0->b)];
}
INLINE void clr_mul_fixed_rev(clr_t *clr, const UINT8 val, const clr_t *clr0)
{
clr->r = cavesh3_colrtable_rev[val][(clr0->r)];
clr->g = cavesh3_colrtable_rev[val][(clr0->g)];
clr->b = cavesh3_colrtable_rev[val][(clr0->b)];
}
INLINE void clr_copy(clr_t *clr, const clr_t *clr0)
{
clr->r = clr0->r;
clr->g = clr0->g;
clr->b = clr0->b;
}
// (1|s|d) * s_factor * s + (1|s|d) * d_factor * d
// 0: +alpha
// 1: +source
// 2: +dest
// 3: *
// 4: -alpha
// 5: -source
// 6: -dest
// 7: *
static UINT32 cavesh_gfx_addr;
static UINT32 cavesh_gfx_scroll_0_x, cavesh_gfx_scroll_0_y;
static UINT32 cavesh_gfx_scroll_1_x, cavesh_gfx_scroll_1_y;
static UINT32 cavesh_gfx_addr_shadowcopy;
static UINT32 cavesh_gfx_scroll_0_x_shadowcopy, cavesh_gfx_scroll_0_y_shadowcopy;
static UINT32 cavesh_gfx_scroll_1_x_shadowcopy, cavesh_gfx_scroll_1_y_shadowcopy;
static UINT64 cave_blit_delay;
static int cavesh_gfx_size;
static bitmap_rgb32 *cavesh_bitmaps;
static rectangle cavesh_clip;
static VIDEO_START( cavesh3 )
{
cavesh_gfx_size = 0x2000 * 0x1000;
//cavesh_bitmaps = auto_bitmap_alloc(machine, 0x2000, 0x1000, BITMAP_FORMAT_RGB32);
cavesh_bitmaps = auto_bitmap_rgb32_alloc(machine, 0x2000, 0x1000);
cavesh_clip = cavesh_bitmaps->cliprect();
}
#define TRANSPARENT 1
#define FUNCNAME draw_sprite_notint_plain
#include "csh3blit.c"
#undef FUNCNAME
#define BLENDED
#define _SMODE 0
#define _DMODE 0
#define FUNCNAME draw_sprite_notint_s0_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 0
#define FUNCNAME draw_sprite_notint_s1_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 0
#define FUNCNAME draw_sprite_notint_s2_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 0
#define FUNCNAME draw_sprite_notint_s3_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 0
#define FUNCNAME draw_sprite_notint_s4_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 0
#define FUNCNAME draw_sprite_notint_s5_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 0
#define FUNCNAME draw_sprite_notint_s6_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 0
#define FUNCNAME draw_sprite_notint_s7_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///////
#define _SMODE 0
#define _DMODE 1
#define FUNCNAME draw_sprite_notint_s0_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 1
#define FUNCNAME draw_sprite_notint_s1_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 1
#define FUNCNAME draw_sprite_notint_s2_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 1
#define FUNCNAME draw_sprite_notint_s3_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 1
#define FUNCNAME draw_sprite_notint_s4_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 1
#define FUNCNAME draw_sprite_notint_s5_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 1
#define FUNCNAME draw_sprite_notint_s6_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 1
#define FUNCNAME draw_sprite_notint_s7_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
////
#define _SMODE 0
#define _DMODE 2
#define FUNCNAME draw_sprite_notint_s0_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 2
#define FUNCNAME draw_sprite_notint_s1_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 2
#define FUNCNAME draw_sprite_notint_s2_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 2
#define FUNCNAME draw_sprite_notint_s3_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 2
#define FUNCNAME draw_sprite_notint_s4_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 2
#define FUNCNAME draw_sprite_notint_s5_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 2
#define FUNCNAME draw_sprite_notint_s6_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 2
#define FUNCNAME draw_sprite_notint_s7_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///
#define _SMODE 0
#define _DMODE 3
#define FUNCNAME draw_sprite_notint_s0_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 3
#define FUNCNAME draw_sprite_notint_s1_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 3
#define FUNCNAME draw_sprite_notint_s2_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 3
#define FUNCNAME draw_sprite_notint_s3_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 3
#define FUNCNAME draw_sprite_notint_s4_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 3
#define FUNCNAME draw_sprite_notint_s5_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 3
#define FUNCNAME draw_sprite_notint_s6_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 3
#define FUNCNAME draw_sprite_notint_s7_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///
#define _SMODE 0
#define _DMODE 4
#define FUNCNAME draw_sprite_notint_s0_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 4
#define FUNCNAME draw_sprite_notint_s1_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 4
#define FUNCNAME draw_sprite_notint_s2_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 4
#define FUNCNAME draw_sprite_notint_s3_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 4
#define FUNCNAME draw_sprite_notint_s4_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 4
#define FUNCNAME draw_sprite_notint_s5_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 4
#define FUNCNAME draw_sprite_notint_s6_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 4
#define FUNCNAME draw_sprite_notint_s7_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///
#define _SMODE 0
#define _DMODE 5
#define FUNCNAME draw_sprite_notint_s0_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 5
#define FUNCNAME draw_sprite_notint_s1_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 5
#define FUNCNAME draw_sprite_notint_s2_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 5
#define FUNCNAME draw_sprite_notint_s3_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 5
#define FUNCNAME draw_sprite_notint_s4_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 5
#define FUNCNAME draw_sprite_notint_s5_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 5
#define FUNCNAME draw_sprite_notint_s6_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 5
#define FUNCNAME draw_sprite_notint_s7_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///
#define _SMODE 0
#define _DMODE 6
#define FUNCNAME draw_sprite_notint_s0_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 6
#define FUNCNAME draw_sprite_notint_s1_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 6
#define FUNCNAME draw_sprite_notint_s2_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 6
#define FUNCNAME draw_sprite_notint_s3_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 6
#define FUNCNAME draw_sprite_notint_s4_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 6
#define FUNCNAME draw_sprite_notint_s5_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 6
#define FUNCNAME draw_sprite_notint_s6_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 6
#define FUNCNAME draw_sprite_notint_s7_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///
#define _SMODE 0
#define _DMODE 7
#define FUNCNAME draw_sprite_notint_s0_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 7
#define FUNCNAME draw_sprite_notint_s1_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 7
#define FUNCNAME draw_sprite_notint_s2_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 7
#define FUNCNAME draw_sprite_notint_s3_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 7
#define FUNCNAME draw_sprite_notint_s4_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 7
#define FUNCNAME draw_sprite_notint_s5_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 7
#define FUNCNAME draw_sprite_notint_s6_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 7
#define FUNCNAME draw_sprite_notint_s7_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#undef BLENDED
#undef TRANSPARENT
#define TRANSPARENT 0
#define FUNCNAME draw_sprite_notint_opaque_plain
#include "csh3blit.c"
#undef FUNCNAME
#define BLENDED
#define _SMODE 0
#define _DMODE 0
#define FUNCNAME draw_sprite_notint_opaque_s0_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 0
#define FUNCNAME draw_sprite_notint_opaque_s1_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 0
#define FUNCNAME draw_sprite_notint_opaque_s2_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 0
#define FUNCNAME draw_sprite_notint_opaque_s3_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 0
#define FUNCNAME draw_sprite_notint_opaque_s4_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 0
#define FUNCNAME draw_sprite_notint_opaque_s5_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 0
#define FUNCNAME draw_sprite_notint_opaque_s6_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 0
#define FUNCNAME draw_sprite_notint_opaque_s7_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///////
#define _SMODE 0
#define _DMODE 1
#define FUNCNAME draw_sprite_notint_opaque_s0_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 1
#define FUNCNAME draw_sprite_notint_opaque_s1_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 1
#define FUNCNAME draw_sprite_notint_opaque_s2_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 1
#define FUNCNAME draw_sprite_notint_opaque_s3_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 1
#define FUNCNAME draw_sprite_notint_opaque_s4_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 1
#define FUNCNAME draw_sprite_notint_opaque_s5_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 1
#define FUNCNAME draw_sprite_notint_opaque_s6_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 1
#define FUNCNAME draw_sprite_notint_opaque_s7_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
////
#define _SMODE 0
#define _DMODE 2
#define FUNCNAME draw_sprite_notint_opaque_s0_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 2
#define FUNCNAME draw_sprite_notint_opaque_s1_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 2
#define FUNCNAME draw_sprite_notint_opaque_s2_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 2
#define FUNCNAME draw_sprite_notint_opaque_s3_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 2
#define FUNCNAME draw_sprite_notint_opaque_s4_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 2
#define FUNCNAME draw_sprite_notint_opaque_s5_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 2
#define FUNCNAME draw_sprite_notint_opaque_s6_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 2
#define FUNCNAME draw_sprite_notint_opaque_s7_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///
#define _SMODE 0
#define _DMODE 3
#define FUNCNAME draw_sprite_notint_opaque_s0_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 3
#define FUNCNAME draw_sprite_notint_opaque_s1_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 3
#define FUNCNAME draw_sprite_notint_opaque_s2_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 3
#define FUNCNAME draw_sprite_notint_opaque_s3_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 3
#define FUNCNAME draw_sprite_notint_opaque_s4_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 3
#define FUNCNAME draw_sprite_notint_opaque_s5_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 3
#define FUNCNAME draw_sprite_notint_opaque_s6_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 3
#define FUNCNAME draw_sprite_notint_opaque_s7_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///
#define _SMODE 0
#define _DMODE 4
#define FUNCNAME draw_sprite_notint_opaque_s0_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 4
#define FUNCNAME draw_sprite_notint_opaque_s1_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 4
#define FUNCNAME draw_sprite_notint_opaque_s2_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 4
#define FUNCNAME draw_sprite_notint_opaque_s3_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 4
#define FUNCNAME draw_sprite_notint_opaque_s4_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 4
#define FUNCNAME draw_sprite_notint_opaque_s5_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 4
#define FUNCNAME draw_sprite_notint_opaque_s6_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 4
#define FUNCNAME draw_sprite_notint_opaque_s7_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///
#define _SMODE 0
#define _DMODE 5
#define FUNCNAME draw_sprite_notint_opaque_s0_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 5
#define FUNCNAME draw_sprite_notint_opaque_s1_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 5
#define FUNCNAME draw_sprite_notint_opaque_s2_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 5
#define FUNCNAME draw_sprite_notint_opaque_s3_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 5
#define FUNCNAME draw_sprite_notint_opaque_s4_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 5
#define FUNCNAME draw_sprite_notint_opaque_s5_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 5
#define FUNCNAME draw_sprite_notint_opaque_s6_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 5
#define FUNCNAME draw_sprite_notint_opaque_s7_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///
#define _SMODE 0
#define _DMODE 6
#define FUNCNAME draw_sprite_notint_opaque_s0_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 6
#define FUNCNAME draw_sprite_notint_opaque_s1_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 6
#define FUNCNAME draw_sprite_notint_opaque_s2_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 6
#define FUNCNAME draw_sprite_notint_opaque_s3_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 6
#define FUNCNAME draw_sprite_notint_opaque_s4_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 6
#define FUNCNAME draw_sprite_notint_opaque_s5_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 6
#define FUNCNAME draw_sprite_notint_opaque_s6_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 6
#define FUNCNAME draw_sprite_notint_opaque_s7_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///
#define _SMODE 0
#define _DMODE 7
#define FUNCNAME draw_sprite_notint_opaque_s0_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 7
#define FUNCNAME draw_sprite_notint_opaque_s1_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 7
#define FUNCNAME draw_sprite_notint_opaque_s2_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 7
#define FUNCNAME draw_sprite_notint_opaque_s3_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 7
#define FUNCNAME draw_sprite_notint_opaque_s4_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 7
#define FUNCNAME draw_sprite_notint_opaque_s5_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 7
#define FUNCNAME draw_sprite_notint_opaque_s6_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 7
#define FUNCNAME draw_sprite_notint_opaque_s7_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#undef BLENDED
#undef TRANSPARENT
// flipped X cases
#define FLIPX 1
#define TRANSPARENT 1
#define FUNCNAME draw_sprite_notint_flipx_plain
#include "csh3blit.c"
#undef FUNCNAME
#define BLENDED
#define _SMODE 0
#define _DMODE 0
#define FUNCNAME draw_sprite_notint_flipx_s0_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 0
#define FUNCNAME draw_sprite_notint_flipx_s1_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 0
#define FUNCNAME draw_sprite_notint_flipx_s2_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 0
#define FUNCNAME draw_sprite_notint_flipx_s3_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 0
#define FUNCNAME draw_sprite_notint_flipx_s4_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 0
#define FUNCNAME draw_sprite_notint_flipx_s5_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 0
#define FUNCNAME draw_sprite_notint_flipx_s6_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 0
#define FUNCNAME draw_sprite_notint_flipx_s7_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///////
#define _SMODE 0
#define _DMODE 1
#define FUNCNAME draw_sprite_notint_flipx_s0_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 1
#define FUNCNAME draw_sprite_notint_flipx_s1_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 1
#define FUNCNAME draw_sprite_notint_flipx_s2_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 1
#define FUNCNAME draw_sprite_notint_flipx_s3_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 1
#define FUNCNAME draw_sprite_notint_flipx_s4_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 1
#define FUNCNAME draw_sprite_notint_flipx_s5_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 1
#define FUNCNAME draw_sprite_notint_flipx_s6_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 1
#define FUNCNAME draw_sprite_notint_flipx_s7_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
////
#define _SMODE 0
#define _DMODE 2
#define FUNCNAME draw_sprite_notint_flipx_s0_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 2
#define FUNCNAME draw_sprite_notint_flipx_s1_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 2
#define FUNCNAME draw_sprite_notint_flipx_s2_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 2
#define FUNCNAME draw_sprite_notint_flipx_s3_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 2
#define FUNCNAME draw_sprite_notint_flipx_s4_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 2
#define FUNCNAME draw_sprite_notint_flipx_s5_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 2
#define FUNCNAME draw_sprite_notint_flipx_s6_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 2
#define FUNCNAME draw_sprite_notint_flipx_s7_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///
#define _SMODE 0
#define _DMODE 3
#define FUNCNAME draw_sprite_notint_flipx_s0_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 3
#define FUNCNAME draw_sprite_notint_flipx_s1_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 3
#define FUNCNAME draw_sprite_notint_flipx_s2_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 3
#define FUNCNAME draw_sprite_notint_flipx_s3_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 3
#define FUNCNAME draw_sprite_notint_flipx_s4_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 3
#define FUNCNAME draw_sprite_notint_flipx_s5_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 3
#define FUNCNAME draw_sprite_notint_flipx_s6_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 3
#define FUNCNAME draw_sprite_notint_flipx_s7_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///
#define _SMODE 0
#define _DMODE 4
#define FUNCNAME draw_sprite_notint_flipx_s0_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 4
#define FUNCNAME draw_sprite_notint_flipx_s1_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 4
#define FUNCNAME draw_sprite_notint_flipx_s2_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 4
#define FUNCNAME draw_sprite_notint_flipx_s3_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 4
#define FUNCNAME draw_sprite_notint_flipx_s4_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 4
#define FUNCNAME draw_sprite_notint_flipx_s5_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 4
#define FUNCNAME draw_sprite_notint_flipx_s6_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 4
#define FUNCNAME draw_sprite_notint_flipx_s7_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///
#define _SMODE 0
#define _DMODE 5
#define FUNCNAME draw_sprite_notint_flipx_s0_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 5
#define FUNCNAME draw_sprite_notint_flipx_s1_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 5
#define FUNCNAME draw_sprite_notint_flipx_s2_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 5
#define FUNCNAME draw_sprite_notint_flipx_s3_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 5
#define FUNCNAME draw_sprite_notint_flipx_s4_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 5
#define FUNCNAME draw_sprite_notint_flipx_s5_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 5
#define FUNCNAME draw_sprite_notint_flipx_s6_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 5
#define FUNCNAME draw_sprite_notint_flipx_s7_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///
#define _SMODE 0
#define _DMODE 6
#define FUNCNAME draw_sprite_notint_flipx_s0_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 6
#define FUNCNAME draw_sprite_notint_flipx_s1_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 6
#define FUNCNAME draw_sprite_notint_flipx_s2_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 6
#define FUNCNAME draw_sprite_notint_flipx_s3_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 6
#define FUNCNAME draw_sprite_notint_flipx_s4_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 6
#define FUNCNAME draw_sprite_notint_flipx_s5_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 6
#define FUNCNAME draw_sprite_notint_flipx_s6_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 6
#define FUNCNAME draw_sprite_notint_flipx_s7_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///
#define _SMODE 0
#define _DMODE 7
#define FUNCNAME draw_sprite_notint_flipx_s0_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 7
#define FUNCNAME draw_sprite_notint_flipx_s1_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 7
#define FUNCNAME draw_sprite_notint_flipx_s2_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 7
#define FUNCNAME draw_sprite_notint_flipx_s3_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 7
#define FUNCNAME draw_sprite_notint_flipx_s4_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 7
#define FUNCNAME draw_sprite_notint_flipx_s5_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 7
#define FUNCNAME draw_sprite_notint_flipx_s6_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 7
#define FUNCNAME draw_sprite_notint_flipx_s7_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#undef BLENDED
#undef TRANSPARENT
#define TRANSPARENT 0
#define FUNCNAME draw_sprite_notint_flipx_opaque_plain
#include "csh3blit.c"
#undef FUNCNAME
#define BLENDED
#define _SMODE 0
#define _DMODE 0
#define FUNCNAME draw_sprite_notint_flipx_opaque_s0_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 0
#define FUNCNAME draw_sprite_notint_flipx_opaque_s1_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 0
#define FUNCNAME draw_sprite_notint_flipx_opaque_s2_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 0
#define FUNCNAME draw_sprite_notint_flipx_opaque_s3_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 0
#define FUNCNAME draw_sprite_notint_flipx_opaque_s4_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 0
#define FUNCNAME draw_sprite_notint_flipx_opaque_s5_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 0
#define FUNCNAME draw_sprite_notint_flipx_opaque_s6_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 0
#define FUNCNAME draw_sprite_notint_flipx_opaque_s7_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///////
#define _SMODE 0
#define _DMODE 1
#define FUNCNAME draw_sprite_notint_flipx_opaque_s0_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 1
#define FUNCNAME draw_sprite_notint_flipx_opaque_s1_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 1
#define FUNCNAME draw_sprite_notint_flipx_opaque_s2_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 1
#define FUNCNAME draw_sprite_notint_flipx_opaque_s3_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 1
#define FUNCNAME draw_sprite_notint_flipx_opaque_s4_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 1
#define FUNCNAME draw_sprite_notint_flipx_opaque_s5_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 1
#define FUNCNAME draw_sprite_notint_flipx_opaque_s6_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 1
#define FUNCNAME draw_sprite_notint_flipx_opaque_s7_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
////
#define _SMODE 0
#define _DMODE 2
#define FUNCNAME draw_sprite_notint_flipx_opaque_s0_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 2
#define FUNCNAME draw_sprite_notint_flipx_opaque_s1_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 2
#define FUNCNAME draw_sprite_notint_flipx_opaque_s2_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 2
#define FUNCNAME draw_sprite_notint_flipx_opaque_s3_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 2
#define FUNCNAME draw_sprite_notint_flipx_opaque_s4_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 2
#define FUNCNAME draw_sprite_notint_flipx_opaque_s5_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 2
#define FUNCNAME draw_sprite_notint_flipx_opaque_s6_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 2
#define FUNCNAME draw_sprite_notint_flipx_opaque_s7_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///
#define _SMODE 0
#define _DMODE 3
#define FUNCNAME draw_sprite_notint_flipx_opaque_s0_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 3
#define FUNCNAME draw_sprite_notint_flipx_opaque_s1_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 3
#define FUNCNAME draw_sprite_notint_flipx_opaque_s2_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 3
#define FUNCNAME draw_sprite_notint_flipx_opaque_s3_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 3
#define FUNCNAME draw_sprite_notint_flipx_opaque_s4_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 3
#define FUNCNAME draw_sprite_notint_flipx_opaque_s5_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 3
#define FUNCNAME draw_sprite_notint_flipx_opaque_s6_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 3
#define FUNCNAME draw_sprite_notint_flipx_opaque_s7_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///
#define _SMODE 0
#define _DMODE 4
#define FUNCNAME draw_sprite_notint_flipx_opaque_s0_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 4
#define FUNCNAME draw_sprite_notint_flipx_opaque_s1_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 4
#define FUNCNAME draw_sprite_notint_flipx_opaque_s2_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 4
#define FUNCNAME draw_sprite_notint_flipx_opaque_s3_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 4
#define FUNCNAME draw_sprite_notint_flipx_opaque_s4_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 4
#define FUNCNAME draw_sprite_notint_flipx_opaque_s5_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 4
#define FUNCNAME draw_sprite_notint_flipx_opaque_s6_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 4
#define FUNCNAME draw_sprite_notint_flipx_opaque_s7_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///
#define _SMODE 0
#define _DMODE 5
#define FUNCNAME draw_sprite_notint_flipx_opaque_s0_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 5
#define FUNCNAME draw_sprite_notint_flipx_opaque_s1_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 5
#define FUNCNAME draw_sprite_notint_flipx_opaque_s2_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 5
#define FUNCNAME draw_sprite_notint_flipx_opaque_s3_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 5
#define FUNCNAME draw_sprite_notint_flipx_opaque_s4_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 5
#define FUNCNAME draw_sprite_notint_flipx_opaque_s5_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 5
#define FUNCNAME draw_sprite_notint_flipx_opaque_s6_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 5
#define FUNCNAME draw_sprite_notint_flipx_opaque_s7_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///
#define _SMODE 0
#define _DMODE 6
#define FUNCNAME draw_sprite_notint_flipx_opaque_s0_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 6
#define FUNCNAME draw_sprite_notint_flipx_opaque_s1_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 6
#define FUNCNAME draw_sprite_notint_flipx_opaque_s2_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 6
#define FUNCNAME draw_sprite_notint_flipx_opaque_s3_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 6
#define FUNCNAME draw_sprite_notint_flipx_opaque_s4_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 6
#define FUNCNAME draw_sprite_notint_flipx_opaque_s5_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 6
#define FUNCNAME draw_sprite_notint_flipx_opaque_s6_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 6
#define FUNCNAME draw_sprite_notint_flipx_opaque_s7_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///
#define _SMODE 0
#define _DMODE 7
#define FUNCNAME draw_sprite_notint_flipx_opaque_s0_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 7
#define FUNCNAME draw_sprite_notint_flipx_opaque_s1_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 7
#define FUNCNAME draw_sprite_notint_flipx_opaque_s2_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 7
#define FUNCNAME draw_sprite_notint_flipx_opaque_s3_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 7
#define FUNCNAME draw_sprite_notint_flipx_opaque_s4_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 7
#define FUNCNAME draw_sprite_notint_flipx_opaque_s5_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 7
#define FUNCNAME draw_sprite_notint_flipx_opaque_s6_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 7
#define FUNCNAME draw_sprite_notint_flipx_opaque_s7_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#undef BLENDED
#undef TRANSPARENT
#undef FLIPX
// really simple cases
#define REALLY_SIMPLE
#define TRANSPARENT 1
#define FUNCNAME draw_sprite_notint_simple
#include "csh3blit.c"
#undef FUNCNAME
#define FLIPX
#define FUNCNAME draw_sprite_notint_flipx_simple
#include "csh3blit.c"
#undef FUNCNAME
#undef FLIPX
#undef TRANSPARENT
#define TRANSPARENT 0
#define FUNCNAME draw_sprite_notint_opaque_simple
#include "csh3blit.c"
#undef FUNCNAME
#define FLIPX
#define FUNCNAME draw_sprite_notint_flipx_opaque_simple
#include "csh3blit.c"
#undef FUNCNAME
#undef FLIPX
#undef TRANSPARENT
#undef REALLY_SIMPLE
////////// TINT
#define TINT
#define TRANSPARENT 1
#define FUNCNAME draw_sprite_plain
#include "csh3blit.c"
#undef FUNCNAME
#define BLENDED
#define _SMODE 0
#define _DMODE 0
#define FUNCNAME draw_sprite_s0_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 0
#define FUNCNAME draw_sprite_s1_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 0
#define FUNCNAME draw_sprite_s2_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 0
#define FUNCNAME draw_sprite_s3_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 0
#define FUNCNAME draw_sprite_s4_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 0
#define FUNCNAME draw_sprite_s5_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 0
#define FUNCNAME draw_sprite_s6_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 0
#define FUNCNAME draw_sprite_s7_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///////
#define _SMODE 0
#define _DMODE 1
#define FUNCNAME draw_sprite_s0_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 1
#define FUNCNAME draw_sprite_s1_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 1
#define FUNCNAME draw_sprite_s2_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 1
#define FUNCNAME draw_sprite_s3_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 1
#define FUNCNAME draw_sprite_s4_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 1
#define FUNCNAME draw_sprite_s5_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 1
#define FUNCNAME draw_sprite_s6_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 1
#define FUNCNAME draw_sprite_s7_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
////
#define _SMODE 0
#define _DMODE 2
#define FUNCNAME draw_sprite_s0_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 2
#define FUNCNAME draw_sprite_s1_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 2
#define FUNCNAME draw_sprite_s2_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 2
#define FUNCNAME draw_sprite_s3_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 2
#define FUNCNAME draw_sprite_s4_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 2
#define FUNCNAME draw_sprite_s5_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 2
#define FUNCNAME draw_sprite_s6_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 2
#define FUNCNAME draw_sprite_s7_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///
#define _SMODE 0
#define _DMODE 3
#define FUNCNAME draw_sprite_s0_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 3
#define FUNCNAME draw_sprite_s1_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 3
#define FUNCNAME draw_sprite_s2_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 3
#define FUNCNAME draw_sprite_s3_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 3
#define FUNCNAME draw_sprite_s4_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 3
#define FUNCNAME draw_sprite_s5_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 3
#define FUNCNAME draw_sprite_s6_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 3
#define FUNCNAME draw_sprite_s7_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///
#define _SMODE 0
#define _DMODE 4
#define FUNCNAME draw_sprite_s0_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 4
#define FUNCNAME draw_sprite_s1_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 4
#define FUNCNAME draw_sprite_s2_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 4
#define FUNCNAME draw_sprite_s3_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 4
#define FUNCNAME draw_sprite_s4_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 4
#define FUNCNAME draw_sprite_s5_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 4
#define FUNCNAME draw_sprite_s6_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 4
#define FUNCNAME draw_sprite_s7_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///
#define _SMODE 0
#define _DMODE 5
#define FUNCNAME draw_sprite_s0_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 5
#define FUNCNAME draw_sprite_s1_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 5
#define FUNCNAME draw_sprite_s2_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 5
#define FUNCNAME draw_sprite_s3_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 5
#define FUNCNAME draw_sprite_s4_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 5
#define FUNCNAME draw_sprite_s5_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 5
#define FUNCNAME draw_sprite_s6_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 5
#define FUNCNAME draw_sprite_s7_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///
#define _SMODE 0
#define _DMODE 6
#define FUNCNAME draw_sprite_s0_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 6
#define FUNCNAME draw_sprite_s1_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 6
#define FUNCNAME draw_sprite_s2_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 6
#define FUNCNAME draw_sprite_s3_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 6
#define FUNCNAME draw_sprite_s4_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 6
#define FUNCNAME draw_sprite_s5_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 6
#define FUNCNAME draw_sprite_s6_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 6
#define FUNCNAME draw_sprite_s7_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///
#define _SMODE 0
#define _DMODE 7
#define FUNCNAME draw_sprite_s0_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 7
#define FUNCNAME draw_sprite_s1_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 7
#define FUNCNAME draw_sprite_s2_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 7
#define FUNCNAME draw_sprite_s3_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 7
#define FUNCNAME draw_sprite_s4_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 7
#define FUNCNAME draw_sprite_s5_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 7
#define FUNCNAME draw_sprite_s6_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 7
#define FUNCNAME draw_sprite_s7_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#undef BLENDED
#undef TRANSPARENT
#define TRANSPARENT 0
#define FUNCNAME draw_sprite_opaque_plain
#include "csh3blit.c"
#undef FUNCNAME
#define BLENDED
#define _SMODE 0
#define _DMODE 0
#define FUNCNAME draw_sprite_opaque_s0_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 0
#define FUNCNAME draw_sprite_opaque_s1_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 0
#define FUNCNAME draw_sprite_opaque_s2_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 0
#define FUNCNAME draw_sprite_opaque_s3_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 0
#define FUNCNAME draw_sprite_opaque_s4_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 0
#define FUNCNAME draw_sprite_opaque_s5_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 0
#define FUNCNAME draw_sprite_opaque_s6_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 0
#define FUNCNAME draw_sprite_opaque_s7_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///////
#define _SMODE 0
#define _DMODE 1
#define FUNCNAME draw_sprite_opaque_s0_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 1
#define FUNCNAME draw_sprite_opaque_s1_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 1
#define FUNCNAME draw_sprite_opaque_s2_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 1
#define FUNCNAME draw_sprite_opaque_s3_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 1
#define FUNCNAME draw_sprite_opaque_s4_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 1
#define FUNCNAME draw_sprite_opaque_s5_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 1
#define FUNCNAME draw_sprite_opaque_s6_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 1
#define FUNCNAME draw_sprite_opaque_s7_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
////
#define _SMODE 0
#define _DMODE 2
#define FUNCNAME draw_sprite_opaque_s0_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 2
#define FUNCNAME draw_sprite_opaque_s1_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 2
#define FUNCNAME draw_sprite_opaque_s2_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 2
#define FUNCNAME draw_sprite_opaque_s3_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 2
#define FUNCNAME draw_sprite_opaque_s4_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 2
#define FUNCNAME draw_sprite_opaque_s5_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 2
#define FUNCNAME draw_sprite_opaque_s6_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 2
#define FUNCNAME draw_sprite_opaque_s7_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///
#define _SMODE 0
#define _DMODE 3
#define FUNCNAME draw_sprite_opaque_s0_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 3
#define FUNCNAME draw_sprite_opaque_s1_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 3
#define FUNCNAME draw_sprite_opaque_s2_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 3
#define FUNCNAME draw_sprite_opaque_s3_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 3
#define FUNCNAME draw_sprite_opaque_s4_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 3
#define FUNCNAME draw_sprite_opaque_s5_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 3
#define FUNCNAME draw_sprite_opaque_s6_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 3
#define FUNCNAME draw_sprite_opaque_s7_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///
#define _SMODE 0
#define _DMODE 4
#define FUNCNAME draw_sprite_opaque_s0_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 4
#define FUNCNAME draw_sprite_opaque_s1_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 4
#define FUNCNAME draw_sprite_opaque_s2_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 4
#define FUNCNAME draw_sprite_opaque_s3_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 4
#define FUNCNAME draw_sprite_opaque_s4_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 4
#define FUNCNAME draw_sprite_opaque_s5_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 4
#define FUNCNAME draw_sprite_opaque_s6_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 4
#define FUNCNAME draw_sprite_opaque_s7_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///
#define _SMODE 0
#define _DMODE 5
#define FUNCNAME draw_sprite_opaque_s0_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 5
#define FUNCNAME draw_sprite_opaque_s1_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 5
#define FUNCNAME draw_sprite_opaque_s2_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 5
#define FUNCNAME draw_sprite_opaque_s3_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 5
#define FUNCNAME draw_sprite_opaque_s4_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 5
#define FUNCNAME draw_sprite_opaque_s5_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 5
#define FUNCNAME draw_sprite_opaque_s6_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 5
#define FUNCNAME draw_sprite_opaque_s7_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///
#define _SMODE 0
#define _DMODE 6
#define FUNCNAME draw_sprite_opaque_s0_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 6
#define FUNCNAME draw_sprite_opaque_s1_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 6
#define FUNCNAME draw_sprite_opaque_s2_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 6
#define FUNCNAME draw_sprite_opaque_s3_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 6
#define FUNCNAME draw_sprite_opaque_s4_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 6
#define FUNCNAME draw_sprite_opaque_s5_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 6
#define FUNCNAME draw_sprite_opaque_s6_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 6
#define FUNCNAME draw_sprite_opaque_s7_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///
#define _SMODE 0
#define _DMODE 7
#define FUNCNAME draw_sprite_opaque_s0_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 7
#define FUNCNAME draw_sprite_opaque_s1_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 7
#define FUNCNAME draw_sprite_opaque_s2_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 7
#define FUNCNAME draw_sprite_opaque_s3_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 7
#define FUNCNAME draw_sprite_opaque_s4_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 7
#define FUNCNAME draw_sprite_opaque_s5_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 7
#define FUNCNAME draw_sprite_opaque_s6_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 7
#define FUNCNAME draw_sprite_opaque_s7_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#undef BLENDED
#undef TRANSPARENT
// flipped X cases
#define FLIPX 1
#define TRANSPARENT 1
#define FUNCNAME draw_sprite_flipx_plain
#include "csh3blit.c"
#undef FUNCNAME
#define BLENDED
#define _SMODE 0
#define _DMODE 0
#define FUNCNAME draw_sprite_flipx_s0_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 0
#define FUNCNAME draw_sprite_flipx_s1_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 0
#define FUNCNAME draw_sprite_flipx_s2_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 0
#define FUNCNAME draw_sprite_flipx_s3_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 0
#define FUNCNAME draw_sprite_flipx_s4_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 0
#define FUNCNAME draw_sprite_flipx_s5_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 0
#define FUNCNAME draw_sprite_flipx_s6_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 0
#define FUNCNAME draw_sprite_flipx_s7_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///////
#define _SMODE 0
#define _DMODE 1
#define FUNCNAME draw_sprite_flipx_s0_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 1
#define FUNCNAME draw_sprite_flipx_s1_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 1
#define FUNCNAME draw_sprite_flipx_s2_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 1
#define FUNCNAME draw_sprite_flipx_s3_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 1
#define FUNCNAME draw_sprite_flipx_s4_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 1
#define FUNCNAME draw_sprite_flipx_s5_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 1
#define FUNCNAME draw_sprite_flipx_s6_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 1
#define FUNCNAME draw_sprite_flipx_s7_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
////
#define _SMODE 0
#define _DMODE 2
#define FUNCNAME draw_sprite_flipx_s0_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 2
#define FUNCNAME draw_sprite_flipx_s1_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 2
#define FUNCNAME draw_sprite_flipx_s2_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 2
#define FUNCNAME draw_sprite_flipx_s3_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 2
#define FUNCNAME draw_sprite_flipx_s4_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 2
#define FUNCNAME draw_sprite_flipx_s5_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 2
#define FUNCNAME draw_sprite_flipx_s6_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 2
#define FUNCNAME draw_sprite_flipx_s7_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///
#define _SMODE 0
#define _DMODE 3
#define FUNCNAME draw_sprite_flipx_s0_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 3
#define FUNCNAME draw_sprite_flipx_s1_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 3
#define FUNCNAME draw_sprite_flipx_s2_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 3
#define FUNCNAME draw_sprite_flipx_s3_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 3
#define FUNCNAME draw_sprite_flipx_s4_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 3
#define FUNCNAME draw_sprite_flipx_s5_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 3
#define FUNCNAME draw_sprite_flipx_s6_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 3
#define FUNCNAME draw_sprite_flipx_s7_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///
#define _SMODE 0
#define _DMODE 4
#define FUNCNAME draw_sprite_flipx_s0_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 4
#define FUNCNAME draw_sprite_flipx_s1_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 4
#define FUNCNAME draw_sprite_flipx_s2_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 4
#define FUNCNAME draw_sprite_flipx_s3_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 4
#define FUNCNAME draw_sprite_flipx_s4_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 4
#define FUNCNAME draw_sprite_flipx_s5_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 4
#define FUNCNAME draw_sprite_flipx_s6_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 4
#define FUNCNAME draw_sprite_flipx_s7_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///
#define _SMODE 0
#define _DMODE 5
#define FUNCNAME draw_sprite_flipx_s0_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 5
#define FUNCNAME draw_sprite_flipx_s1_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 5
#define FUNCNAME draw_sprite_flipx_s2_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 5
#define FUNCNAME draw_sprite_flipx_s3_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 5
#define FUNCNAME draw_sprite_flipx_s4_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 5
#define FUNCNAME draw_sprite_flipx_s5_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 5
#define FUNCNAME draw_sprite_flipx_s6_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 5
#define FUNCNAME draw_sprite_flipx_s7_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///
#define _SMODE 0
#define _DMODE 6
#define FUNCNAME draw_sprite_flipx_s0_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 6
#define FUNCNAME draw_sprite_flipx_s1_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 6
#define FUNCNAME draw_sprite_flipx_s2_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 6
#define FUNCNAME draw_sprite_flipx_s3_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 6
#define FUNCNAME draw_sprite_flipx_s4_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 6
#define FUNCNAME draw_sprite_flipx_s5_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 6
#define FUNCNAME draw_sprite_flipx_s6_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 6
#define FUNCNAME draw_sprite_flipx_s7_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///
#define _SMODE 0
#define _DMODE 7
#define FUNCNAME draw_sprite_flipx_s0_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 7
#define FUNCNAME draw_sprite_flipx_s1_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 7
#define FUNCNAME draw_sprite_flipx_s2_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 7
#define FUNCNAME draw_sprite_flipx_s3_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 7
#define FUNCNAME draw_sprite_flipx_s4_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 7
#define FUNCNAME draw_sprite_flipx_s5_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 7
#define FUNCNAME draw_sprite_flipx_s6_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 7
#define FUNCNAME draw_sprite_flipx_s7_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#undef BLENDED
#undef TRANSPARENT
#define TRANSPARENT 0
#define FUNCNAME draw_sprite_flipx_opaque_plain
#include "csh3blit.c"
#undef FUNCNAME
#define BLENDED
#define _SMODE 0
#define _DMODE 0
#define FUNCNAME draw_sprite_flipx_opaque_s0_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 0
#define FUNCNAME draw_sprite_flipx_opaque_s1_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 0
#define FUNCNAME draw_sprite_flipx_opaque_s2_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 0
#define FUNCNAME draw_sprite_flipx_opaque_s3_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 0
#define FUNCNAME draw_sprite_flipx_opaque_s4_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 0
#define FUNCNAME draw_sprite_flipx_opaque_s5_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 0
#define FUNCNAME draw_sprite_flipx_opaque_s6_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 0
#define FUNCNAME draw_sprite_flipx_opaque_s7_d0
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///////
#define _SMODE 0
#define _DMODE 1
#define FUNCNAME draw_sprite_flipx_opaque_s0_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 1
#define FUNCNAME draw_sprite_flipx_opaque_s1_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 1
#define FUNCNAME draw_sprite_flipx_opaque_s2_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 1
#define FUNCNAME draw_sprite_flipx_opaque_s3_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 1
#define FUNCNAME draw_sprite_flipx_opaque_s4_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 1
#define FUNCNAME draw_sprite_flipx_opaque_s5_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 1
#define FUNCNAME draw_sprite_flipx_opaque_s6_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 1
#define FUNCNAME draw_sprite_flipx_opaque_s7_d1
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
////
#define _SMODE 0
#define _DMODE 2
#define FUNCNAME draw_sprite_flipx_opaque_s0_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 2
#define FUNCNAME draw_sprite_flipx_opaque_s1_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 2
#define FUNCNAME draw_sprite_flipx_opaque_s2_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 2
#define FUNCNAME draw_sprite_flipx_opaque_s3_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 2
#define FUNCNAME draw_sprite_flipx_opaque_s4_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 2
#define FUNCNAME draw_sprite_flipx_opaque_s5_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 2
#define FUNCNAME draw_sprite_flipx_opaque_s6_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 2
#define FUNCNAME draw_sprite_flipx_opaque_s7_d2
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///
#define _SMODE 0
#define _DMODE 3
#define FUNCNAME draw_sprite_flipx_opaque_s0_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 3
#define FUNCNAME draw_sprite_flipx_opaque_s1_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 3
#define FUNCNAME draw_sprite_flipx_opaque_s2_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 3
#define FUNCNAME draw_sprite_flipx_opaque_s3_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 3
#define FUNCNAME draw_sprite_flipx_opaque_s4_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 3
#define FUNCNAME draw_sprite_flipx_opaque_s5_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 3
#define FUNCNAME draw_sprite_flipx_opaque_s6_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 3
#define FUNCNAME draw_sprite_flipx_opaque_s7_d3
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///
#define _SMODE 0
#define _DMODE 4
#define FUNCNAME draw_sprite_flipx_opaque_s0_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 4
#define FUNCNAME draw_sprite_flipx_opaque_s1_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 4
#define FUNCNAME draw_sprite_flipx_opaque_s2_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 4
#define FUNCNAME draw_sprite_flipx_opaque_s3_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 4
#define FUNCNAME draw_sprite_flipx_opaque_s4_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 4
#define FUNCNAME draw_sprite_flipx_opaque_s5_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 4
#define FUNCNAME draw_sprite_flipx_opaque_s6_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 4
#define FUNCNAME draw_sprite_flipx_opaque_s7_d4
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///
#define _SMODE 0
#define _DMODE 5
#define FUNCNAME draw_sprite_flipx_opaque_s0_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 5
#define FUNCNAME draw_sprite_flipx_opaque_s1_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 5
#define FUNCNAME draw_sprite_flipx_opaque_s2_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 5
#define FUNCNAME draw_sprite_flipx_opaque_s3_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 5
#define FUNCNAME draw_sprite_flipx_opaque_s4_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 5
#define FUNCNAME draw_sprite_flipx_opaque_s5_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 5
#define FUNCNAME draw_sprite_flipx_opaque_s6_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 5
#define FUNCNAME draw_sprite_flipx_opaque_s7_d5
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///
#define _SMODE 0
#define _DMODE 6
#define FUNCNAME draw_sprite_flipx_opaque_s0_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 6
#define FUNCNAME draw_sprite_flipx_opaque_s1_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 6
#define FUNCNAME draw_sprite_flipx_opaque_s2_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 6
#define FUNCNAME draw_sprite_flipx_opaque_s3_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 6
#define FUNCNAME draw_sprite_flipx_opaque_s4_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 6
#define FUNCNAME draw_sprite_flipx_opaque_s5_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 6
#define FUNCNAME draw_sprite_flipx_opaque_s6_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 6
#define FUNCNAME draw_sprite_flipx_opaque_s7_d6
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
///
#define _SMODE 0
#define _DMODE 7
#define FUNCNAME draw_sprite_flipx_opaque_s0_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 1
#define _DMODE 7
#define FUNCNAME draw_sprite_flipx_opaque_s1_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 2
#define _DMODE 7
#define FUNCNAME draw_sprite_flipx_opaque_s2_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 3
#define _DMODE 7
#define FUNCNAME draw_sprite_flipx_opaque_s3_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 4
#define _DMODE 7
#define FUNCNAME draw_sprite_flipx_opaque_s4_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 5
#define _DMODE 7
#define FUNCNAME draw_sprite_flipx_opaque_s5_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 6
#define _DMODE 7
#define FUNCNAME draw_sprite_flipx_opaque_s6_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#define _SMODE 7
#define _DMODE 7
#define FUNCNAME draw_sprite_flipx_opaque_s7_d7
#include "csh3blit.c"
#undef FUNCNAME
#undef _SMODE
#undef _DMODE
#undef BLENDED
#undef TRANSPARENT
#undef FLIPX
#undef TINT
INLINE UINT16 READ_NEXT_WORD(offs_t *addr)
{
// UINT16 data = space.read_word(*addr); // going through the memory system is 'more correct' but noticably slower
UINT16 data = cavesh3_ram16_copy[((*addr&(0x7fffff))>>1)^3]; // this probably needs to be made endian safe tho
*addr += 2;
// printf("data %04x\n", data);
return data;
}
INLINE UINT16 COPY_NEXT_WORD(address_space &space, offs_t *addr)
{
// UINT16 data = space.read_word(*addr); // going through the memory system is 'more correct' but noticably slower
UINT16 data = cavesh3_ram16[((*addr&(0x7fffff))>>1)^3]; // this probably needs to be made endian safe tho
cavesh3_ram16_copy[((*addr&(0x7fffff))>>1)^3] = data;
*addr += 2;
// printf("data %04x\n", data);
return data;
}
INLINE void cavesh_gfx_upload_shadow_copy(address_space &space, offs_t *addr)
{
UINT32 x,y, dimx,dimy;
COPY_NEXT_WORD(space, addr);
COPY_NEXT_WORD(space, addr);
COPY_NEXT_WORD(space, addr);
COPY_NEXT_WORD(space, addr);
COPY_NEXT_WORD(space, addr);
COPY_NEXT_WORD(space, addr);
dimx = (COPY_NEXT_WORD(space, addr) & 0x1fff) + 1;
dimy = (COPY_NEXT_WORD(space, addr) & 0x0fff) + 1;
for (y = 0; y < dimy; y++)
{
for (x = 0; x < dimx; x++)
{
COPY_NEXT_WORD(space, addr);
}
}
}
INLINE void cavesh_gfx_upload(offs_t *addr)
{
UINT32 x,y, dst_p,dst_x_start,dst_y_start, dimx,dimy;
UINT32 *dst;
// 0x20000000
READ_NEXT_WORD(addr);
READ_NEXT_WORD(addr);
// 0x99999999
READ_NEXT_WORD(addr);
READ_NEXT_WORD(addr);
dst_x_start = READ_NEXT_WORD(addr);
dst_y_start = READ_NEXT_WORD(addr);
dst_p = 0;
dst_x_start &= 0x1fff;
dst_y_start &= 0x0fff;
dimx = (READ_NEXT_WORD(addr) & 0x1fff) + 1;
dimy = (READ_NEXT_WORD(addr) & 0x0fff) + 1;
logerror("GFX COPY: DST %02X,%02X,%03X DIM %02X,%03X\n", dst_p,dst_x_start,dst_y_start, dimx,dimy);
for (y = 0; y < dimy; y++)
{
//dst = BITMAP_ADDR32(cavesh_bitmaps, dst_y_start + y, 0);
dst = &cavesh_bitmaps->pix32(dst_y_start + y);
dst += dst_x_start;
for (x = 0; x < dimx; x++)
{
UINT16 pendat = READ_NEXT_WORD(addr);
// real hw would upload the gfxword directly, but our VRAM is 32-bit, so convert it.
//dst[dst_x_start + x] = pendat;
*dst++ = ((pendat&0x8000)<<14) | ((pendat&0x7c00)<<9) | ((pendat&0x03e0)<<6) | ((pendat&0x001f)<<3); // --t- ---- rrrr r--- gggg g--- bbbb b--- format
//dst[dst_x_start + x] = ((pendat&0x8000)<<14) | ((pendat&0x7c00)<<6) | ((pendat&0x03e0)<<3) | ((pendat&0x001f)<<0); // --t- ---- ---r rrrr ---g gggg ---b bbbb format
}
}
}
//#define draw_params cavesh_bitmaps, &cavesh_bitmaps->cliprect, BITMAP_ADDR32(cavesh_bitmaps, 0,0),src_x,src_y, x,y, dimx,dimy, flipy, s_alpha, d_alpha, &tint_clr
#define draw_params cavesh_bitmaps, &cavesh_clip, &cavesh_bitmaps->pix32(0,0), src_x,src_y, x,y, dimx,dimy, flipy, s_alpha, d_alpha, &tint_clr
typedef const void (*caveblitfunction)(bitmap_rgb32 *,
const rectangle *,
UINT32 *, /* gfx */
int , /* src_x */
int , /* src_y */
int , /* dst_x_start */
int , /* dst_y_start */
int , /* dimx */
int , /* dimy */
int , /* flipy */
const UINT8 , /* s_alpha */
const UINT8 , /* d_alpha */
//int , /* tint */
clr_t * );
caveblitfunction cave_blit_funcs[] =
{
draw_sprite_s0_d0, draw_sprite_s1_d0, draw_sprite_s2_d0, draw_sprite_s3_d0, draw_sprite_s4_d0, draw_sprite_s5_d0, draw_sprite_s6_d0, draw_sprite_s7_d0,
draw_sprite_s0_d1, draw_sprite_s1_d1, draw_sprite_s2_d1, draw_sprite_s3_d1, draw_sprite_s4_d1, draw_sprite_s5_d1, draw_sprite_s6_d1, draw_sprite_s7_d1,
draw_sprite_s0_d2, draw_sprite_s1_d2, draw_sprite_s2_d2, draw_sprite_s3_d2, draw_sprite_s4_d2, draw_sprite_s5_d2, draw_sprite_s6_d2, draw_sprite_s7_d2,
draw_sprite_s0_d3, draw_sprite_s1_d3, draw_sprite_s2_d3, draw_sprite_s3_d3, draw_sprite_s4_d3, draw_sprite_s5_d3, draw_sprite_s6_d3, draw_sprite_s7_d3,
draw_sprite_s0_d4, draw_sprite_s1_d4, draw_sprite_s2_d4, draw_sprite_s3_d4, draw_sprite_s4_d4, draw_sprite_s5_d4, draw_sprite_s6_d4, draw_sprite_s7_d4,
draw_sprite_s0_d5, draw_sprite_s1_d5, draw_sprite_s2_d5, draw_sprite_s3_d5, draw_sprite_s4_d5, draw_sprite_s5_d5, draw_sprite_s6_d5, draw_sprite_s7_d5,
draw_sprite_s0_d6, draw_sprite_s1_d6, draw_sprite_s2_d6, draw_sprite_s3_d6, draw_sprite_s4_d6, draw_sprite_s5_d6, draw_sprite_s6_d6, draw_sprite_s7_d6,
draw_sprite_s0_d7, draw_sprite_s1_d7, draw_sprite_s2_d7, draw_sprite_s3_d7, draw_sprite_s4_d7, draw_sprite_s5_d7, draw_sprite_s6_d7, draw_sprite_s7_d7,
};
caveblitfunction cave_opaque_blit_funcs[] =
{
draw_sprite_opaque_s0_d0, draw_sprite_opaque_s1_d0, draw_sprite_opaque_s2_d0, draw_sprite_opaque_s3_d0, draw_sprite_opaque_s4_d0, draw_sprite_opaque_s5_d0, draw_sprite_opaque_s6_d0, draw_sprite_opaque_s7_d0,
draw_sprite_opaque_s0_d1, draw_sprite_opaque_s1_d1, draw_sprite_opaque_s2_d1, draw_sprite_opaque_s3_d1, draw_sprite_opaque_s4_d1, draw_sprite_opaque_s5_d1, draw_sprite_opaque_s6_d1, draw_sprite_opaque_s7_d1,
draw_sprite_opaque_s0_d2, draw_sprite_opaque_s1_d2, draw_sprite_opaque_s2_d2, draw_sprite_opaque_s3_d2, draw_sprite_opaque_s4_d2, draw_sprite_opaque_s5_d2, draw_sprite_opaque_s6_d2, draw_sprite_opaque_s7_d2,
draw_sprite_opaque_s0_d3, draw_sprite_opaque_s1_d3, draw_sprite_opaque_s2_d3, draw_sprite_opaque_s3_d3, draw_sprite_opaque_s4_d3, draw_sprite_opaque_s5_d3, draw_sprite_opaque_s6_d3, draw_sprite_opaque_s7_d3,
draw_sprite_opaque_s0_d4, draw_sprite_opaque_s1_d4, draw_sprite_opaque_s2_d4, draw_sprite_opaque_s3_d4, draw_sprite_opaque_s4_d4, draw_sprite_opaque_s5_d4, draw_sprite_opaque_s6_d4, draw_sprite_opaque_s7_d4,
draw_sprite_opaque_s0_d5, draw_sprite_opaque_s1_d5, draw_sprite_opaque_s2_d5, draw_sprite_opaque_s3_d5, draw_sprite_opaque_s4_d5, draw_sprite_opaque_s5_d5, draw_sprite_opaque_s6_d5, draw_sprite_opaque_s7_d5,
draw_sprite_opaque_s0_d6, draw_sprite_opaque_s1_d6, draw_sprite_opaque_s2_d6, draw_sprite_opaque_s3_d6, draw_sprite_opaque_s4_d6, draw_sprite_opaque_s5_d6, draw_sprite_opaque_s6_d6, draw_sprite_opaque_s7_d6,
draw_sprite_opaque_s0_d7, draw_sprite_opaque_s1_d7, draw_sprite_opaque_s2_d7, draw_sprite_opaque_s3_d7, draw_sprite_opaque_s4_d7, draw_sprite_opaque_s5_d7, draw_sprite_opaque_s6_d7, draw_sprite_opaque_s7_d7,
};
caveblitfunction cave_flipx_blit_funcs[] =
{
draw_sprite_flipx_s0_d0, draw_sprite_flipx_s1_d0, draw_sprite_flipx_s2_d0, draw_sprite_flipx_s3_d0, draw_sprite_flipx_s4_d0, draw_sprite_flipx_s5_d0, draw_sprite_flipx_s6_d0, draw_sprite_flipx_s7_d0,
draw_sprite_flipx_s0_d1, draw_sprite_flipx_s1_d1, draw_sprite_flipx_s2_d1, draw_sprite_flipx_s3_d1, draw_sprite_flipx_s4_d1, draw_sprite_flipx_s5_d1, draw_sprite_flipx_s6_d1, draw_sprite_flipx_s7_d1,
draw_sprite_flipx_s0_d2, draw_sprite_flipx_s1_d2, draw_sprite_flipx_s2_d2, draw_sprite_flipx_s3_d2, draw_sprite_flipx_s4_d2, draw_sprite_flipx_s5_d2, draw_sprite_flipx_s6_d2, draw_sprite_flipx_s7_d2,
draw_sprite_flipx_s0_d3, draw_sprite_flipx_s1_d3, draw_sprite_flipx_s2_d3, draw_sprite_flipx_s3_d3, draw_sprite_flipx_s4_d3, draw_sprite_flipx_s5_d3, draw_sprite_flipx_s6_d3, draw_sprite_flipx_s7_d3,
draw_sprite_flipx_s0_d4, draw_sprite_flipx_s1_d4, draw_sprite_flipx_s2_d4, draw_sprite_flipx_s3_d4, draw_sprite_flipx_s4_d4, draw_sprite_flipx_s5_d4, draw_sprite_flipx_s6_d4, draw_sprite_flipx_s7_d4,
draw_sprite_flipx_s0_d5, draw_sprite_flipx_s1_d5, draw_sprite_flipx_s2_d5, draw_sprite_flipx_s3_d5, draw_sprite_flipx_s4_d5, draw_sprite_flipx_s5_d5, draw_sprite_flipx_s6_d5, draw_sprite_flipx_s7_d5,
draw_sprite_flipx_s0_d6, draw_sprite_flipx_s1_d6, draw_sprite_flipx_s2_d6, draw_sprite_flipx_s3_d6, draw_sprite_flipx_s4_d6, draw_sprite_flipx_s5_d6, draw_sprite_flipx_s6_d6, draw_sprite_flipx_s7_d6,
draw_sprite_flipx_s0_d7, draw_sprite_flipx_s1_d7, draw_sprite_flipx_s2_d7, draw_sprite_flipx_s3_d7, draw_sprite_flipx_s4_d7, draw_sprite_flipx_s5_d7, draw_sprite_flipx_s6_d7, draw_sprite_flipx_s7_d7,
};
caveblitfunction cave_flipx_opaque_blit_funcs[] =
{
draw_sprite_flipx_opaque_s0_d0, draw_sprite_flipx_opaque_s1_d0, draw_sprite_flipx_opaque_s2_d0, draw_sprite_flipx_opaque_s3_d0, draw_sprite_flipx_opaque_s4_d0, draw_sprite_flipx_opaque_s5_d0, draw_sprite_flipx_opaque_s6_d0, draw_sprite_flipx_opaque_s7_d0,
draw_sprite_flipx_opaque_s0_d1, draw_sprite_flipx_opaque_s1_d1, draw_sprite_flipx_opaque_s2_d1, draw_sprite_flipx_opaque_s3_d1, draw_sprite_flipx_opaque_s4_d1, draw_sprite_flipx_opaque_s5_d1, draw_sprite_flipx_opaque_s6_d1, draw_sprite_flipx_opaque_s7_d1,
draw_sprite_flipx_opaque_s0_d2, draw_sprite_flipx_opaque_s1_d2, draw_sprite_flipx_opaque_s2_d2, draw_sprite_flipx_opaque_s3_d2, draw_sprite_flipx_opaque_s4_d2, draw_sprite_flipx_opaque_s5_d2, draw_sprite_flipx_opaque_s6_d2, draw_sprite_flipx_opaque_s7_d2,
draw_sprite_flipx_opaque_s0_d3, draw_sprite_flipx_opaque_s1_d3, draw_sprite_flipx_opaque_s2_d3, draw_sprite_flipx_opaque_s3_d3, draw_sprite_flipx_opaque_s4_d3, draw_sprite_flipx_opaque_s5_d3, draw_sprite_flipx_opaque_s6_d3, draw_sprite_flipx_opaque_s7_d3,
draw_sprite_flipx_opaque_s0_d4, draw_sprite_flipx_opaque_s1_d4, draw_sprite_flipx_opaque_s2_d4, draw_sprite_flipx_opaque_s3_d4, draw_sprite_flipx_opaque_s4_d4, draw_sprite_flipx_opaque_s5_d4, draw_sprite_flipx_opaque_s6_d4, draw_sprite_flipx_opaque_s7_d4,
draw_sprite_flipx_opaque_s0_d5, draw_sprite_flipx_opaque_s1_d5, draw_sprite_flipx_opaque_s2_d5, draw_sprite_flipx_opaque_s3_d5, draw_sprite_flipx_opaque_s4_d5, draw_sprite_flipx_opaque_s5_d5, draw_sprite_flipx_opaque_s6_d5, draw_sprite_flipx_opaque_s7_d5,
draw_sprite_flipx_opaque_s0_d6, draw_sprite_flipx_opaque_s1_d6, draw_sprite_flipx_opaque_s2_d6, draw_sprite_flipx_opaque_s3_d6, draw_sprite_flipx_opaque_s4_d6, draw_sprite_flipx_opaque_s5_d6, draw_sprite_flipx_opaque_s6_d6, draw_sprite_flipx_opaque_s7_d6,
draw_sprite_flipx_opaque_s0_d7, draw_sprite_flipx_opaque_s1_d7, draw_sprite_flipx_opaque_s2_d7, draw_sprite_flipx_opaque_s3_d7, draw_sprite_flipx_opaque_s4_d7, draw_sprite_flipx_opaque_s5_d7, draw_sprite_flipx_opaque_s6_d7, draw_sprite_flipx_opaque_s7_d7,
};
caveblitfunction cave_notint_blit_funcs[] =
{
draw_sprite_notint_s0_d0, draw_sprite_notint_s1_d0, draw_sprite_notint_s2_d0, draw_sprite_notint_s3_d0, draw_sprite_notint_s4_d0, draw_sprite_notint_s5_d0, draw_sprite_notint_s6_d0, draw_sprite_notint_s7_d0,
draw_sprite_notint_s0_d1, draw_sprite_notint_s1_d1, draw_sprite_notint_s2_d1, draw_sprite_notint_s3_d1, draw_sprite_notint_s4_d1, draw_sprite_notint_s5_d1, draw_sprite_notint_s6_d1, draw_sprite_notint_s7_d1,
draw_sprite_notint_s0_d2, draw_sprite_notint_s1_d2, draw_sprite_notint_s2_d2, draw_sprite_notint_s3_d2, draw_sprite_notint_s4_d2, draw_sprite_notint_s5_d2, draw_sprite_notint_s6_d2, draw_sprite_notint_s7_d2,
draw_sprite_notint_s0_d3, draw_sprite_notint_s1_d3, draw_sprite_notint_s2_d3, draw_sprite_notint_s3_d3, draw_sprite_notint_s4_d3, draw_sprite_notint_s5_d3, draw_sprite_notint_s6_d3, draw_sprite_notint_s7_d3,
draw_sprite_notint_s0_d4, draw_sprite_notint_s1_d4, draw_sprite_notint_s2_d4, draw_sprite_notint_s3_d4, draw_sprite_notint_s4_d4, draw_sprite_notint_s5_d4, draw_sprite_notint_s6_d4, draw_sprite_notint_s7_d4,
draw_sprite_notint_s0_d5, draw_sprite_notint_s1_d5, draw_sprite_notint_s2_d5, draw_sprite_notint_s3_d5, draw_sprite_notint_s4_d5, draw_sprite_notint_s5_d5, draw_sprite_notint_s6_d5, draw_sprite_notint_s7_d5,
draw_sprite_notint_s0_d6, draw_sprite_notint_s1_d6, draw_sprite_notint_s2_d6, draw_sprite_notint_s3_d6, draw_sprite_notint_s4_d6, draw_sprite_notint_s5_d6, draw_sprite_notint_s6_d6, draw_sprite_notint_s7_d6,
draw_sprite_notint_s0_d7, draw_sprite_notint_s1_d7, draw_sprite_notint_s2_d7, draw_sprite_notint_s3_d7, draw_sprite_notint_s4_d7, draw_sprite_notint_s5_d7, draw_sprite_notint_s6_d7, draw_sprite_notint_s7_d7,
};
caveblitfunction cave_notint_opaque_blit_funcs[] =
{
draw_sprite_notint_opaque_s0_d0, draw_sprite_notint_opaque_s1_d0, draw_sprite_notint_opaque_s2_d0, draw_sprite_notint_opaque_s3_d0, draw_sprite_notint_opaque_s4_d0, draw_sprite_notint_opaque_s5_d0, draw_sprite_notint_opaque_s6_d0, draw_sprite_notint_opaque_s7_d0,
draw_sprite_notint_opaque_s0_d1, draw_sprite_notint_opaque_s1_d1, draw_sprite_notint_opaque_s2_d1, draw_sprite_notint_opaque_s3_d1, draw_sprite_notint_opaque_s4_d1, draw_sprite_notint_opaque_s5_d1, draw_sprite_notint_opaque_s6_d1, draw_sprite_notint_opaque_s7_d1,
draw_sprite_notint_opaque_s0_d2, draw_sprite_notint_opaque_s1_d2, draw_sprite_notint_opaque_s2_d2, draw_sprite_notint_opaque_s3_d2, draw_sprite_notint_opaque_s4_d2, draw_sprite_notint_opaque_s5_d2, draw_sprite_notint_opaque_s6_d2, draw_sprite_notint_opaque_s7_d2,
draw_sprite_notint_opaque_s0_d3, draw_sprite_notint_opaque_s1_d3, draw_sprite_notint_opaque_s2_d3, draw_sprite_notint_opaque_s3_d3, draw_sprite_notint_opaque_s4_d3, draw_sprite_notint_opaque_s5_d3, draw_sprite_notint_opaque_s6_d3, draw_sprite_notint_opaque_s7_d3,
draw_sprite_notint_opaque_s0_d4, draw_sprite_notint_opaque_s1_d4, draw_sprite_notint_opaque_s2_d4, draw_sprite_notint_opaque_s3_d4, draw_sprite_notint_opaque_s4_d4, draw_sprite_notint_opaque_s5_d4, draw_sprite_notint_opaque_s6_d4, draw_sprite_notint_opaque_s7_d4,
draw_sprite_notint_opaque_s0_d5, draw_sprite_notint_opaque_s1_d5, draw_sprite_notint_opaque_s2_d5, draw_sprite_notint_opaque_s3_d5, draw_sprite_notint_opaque_s4_d5, draw_sprite_notint_opaque_s5_d5, draw_sprite_notint_opaque_s6_d5, draw_sprite_notint_opaque_s7_d5,
draw_sprite_notint_opaque_s0_d6, draw_sprite_notint_opaque_s1_d6, draw_sprite_notint_opaque_s2_d6, draw_sprite_notint_opaque_s3_d6, draw_sprite_notint_opaque_s4_d6, draw_sprite_notint_opaque_s5_d6, draw_sprite_notint_opaque_s6_d6, draw_sprite_notint_opaque_s7_d6,
draw_sprite_notint_opaque_s0_d7, draw_sprite_notint_opaque_s1_d7, draw_sprite_notint_opaque_s2_d7, draw_sprite_notint_opaque_s3_d7, draw_sprite_notint_opaque_s4_d7, draw_sprite_notint_opaque_s5_d7, draw_sprite_notint_opaque_s6_d7, draw_sprite_notint_opaque_s7_d7,
};
caveblitfunction cave_notint_flipx_blit_funcs[] =
{
draw_sprite_notint_flipx_s0_d0, draw_sprite_notint_flipx_s1_d0, draw_sprite_notint_flipx_s2_d0, draw_sprite_notint_flipx_s3_d0, draw_sprite_notint_flipx_s4_d0, draw_sprite_notint_flipx_s5_d0, draw_sprite_notint_flipx_s6_d0, draw_sprite_notint_flipx_s7_d0,
draw_sprite_notint_flipx_s0_d1, draw_sprite_notint_flipx_s1_d1, draw_sprite_notint_flipx_s2_d1, draw_sprite_notint_flipx_s3_d1, draw_sprite_notint_flipx_s4_d1, draw_sprite_notint_flipx_s5_d1, draw_sprite_notint_flipx_s6_d1, draw_sprite_notint_flipx_s7_d1,
draw_sprite_notint_flipx_s0_d2, draw_sprite_notint_flipx_s1_d2, draw_sprite_notint_flipx_s2_d2, draw_sprite_notint_flipx_s3_d2, draw_sprite_notint_flipx_s4_d2, draw_sprite_notint_flipx_s5_d2, draw_sprite_notint_flipx_s6_d2, draw_sprite_notint_flipx_s7_d2,
draw_sprite_notint_flipx_s0_d3, draw_sprite_notint_flipx_s1_d3, draw_sprite_notint_flipx_s2_d3, draw_sprite_notint_flipx_s3_d3, draw_sprite_notint_flipx_s4_d3, draw_sprite_notint_flipx_s5_d3, draw_sprite_notint_flipx_s6_d3, draw_sprite_notint_flipx_s7_d3,
draw_sprite_notint_flipx_s0_d4, draw_sprite_notint_flipx_s1_d4, draw_sprite_notint_flipx_s2_d4, draw_sprite_notint_flipx_s3_d4, draw_sprite_notint_flipx_s4_d4, draw_sprite_notint_flipx_s5_d4, draw_sprite_notint_flipx_s6_d4, draw_sprite_notint_flipx_s7_d4,
draw_sprite_notint_flipx_s0_d5, draw_sprite_notint_flipx_s1_d5, draw_sprite_notint_flipx_s2_d5, draw_sprite_notint_flipx_s3_d5, draw_sprite_notint_flipx_s4_d5, draw_sprite_notint_flipx_s5_d5, draw_sprite_notint_flipx_s6_d5, draw_sprite_notint_flipx_s7_d5,
draw_sprite_notint_flipx_s0_d6, draw_sprite_notint_flipx_s1_d6, draw_sprite_notint_flipx_s2_d6, draw_sprite_notint_flipx_s3_d6, draw_sprite_notint_flipx_s4_d6, draw_sprite_notint_flipx_s5_d6, draw_sprite_notint_flipx_s6_d6, draw_sprite_notint_flipx_s7_d6,
draw_sprite_notint_flipx_s0_d7, draw_sprite_notint_flipx_s1_d7, draw_sprite_notint_flipx_s2_d7, draw_sprite_notint_flipx_s3_d7, draw_sprite_notint_flipx_s4_d7, draw_sprite_notint_flipx_s5_d7, draw_sprite_notint_flipx_s6_d7, draw_sprite_notint_flipx_s7_d7,
};
caveblitfunction cave_notint_flipx_opaque_blit_funcs[] =
{
draw_sprite_notint_flipx_opaque_s0_d0, draw_sprite_notint_flipx_opaque_s1_d0, draw_sprite_notint_flipx_opaque_s2_d0, draw_sprite_notint_flipx_opaque_s3_d0, draw_sprite_notint_flipx_opaque_s4_d0, draw_sprite_notint_flipx_opaque_s5_d0, draw_sprite_notint_flipx_opaque_s6_d0, draw_sprite_notint_flipx_opaque_s7_d0,
draw_sprite_notint_flipx_opaque_s0_d1, draw_sprite_notint_flipx_opaque_s1_d1, draw_sprite_notint_flipx_opaque_s2_d1, draw_sprite_notint_flipx_opaque_s3_d1, draw_sprite_notint_flipx_opaque_s4_d1, draw_sprite_notint_flipx_opaque_s5_d1, draw_sprite_notint_flipx_opaque_s6_d1, draw_sprite_notint_flipx_opaque_s7_d1,
draw_sprite_notint_flipx_opaque_s0_d2, draw_sprite_notint_flipx_opaque_s1_d2, draw_sprite_notint_flipx_opaque_s2_d2, draw_sprite_notint_flipx_opaque_s3_d2, draw_sprite_notint_flipx_opaque_s4_d2, draw_sprite_notint_flipx_opaque_s5_d2, draw_sprite_notint_flipx_opaque_s6_d2, draw_sprite_notint_flipx_opaque_s7_d2,
draw_sprite_notint_flipx_opaque_s0_d3, draw_sprite_notint_flipx_opaque_s1_d3, draw_sprite_notint_flipx_opaque_s2_d3, draw_sprite_notint_flipx_opaque_s3_d3, draw_sprite_notint_flipx_opaque_s4_d3, draw_sprite_notint_flipx_opaque_s5_d3, draw_sprite_notint_flipx_opaque_s6_d3, draw_sprite_notint_flipx_opaque_s7_d3,
draw_sprite_notint_flipx_opaque_s0_d4, draw_sprite_notint_flipx_opaque_s1_d4, draw_sprite_notint_flipx_opaque_s2_d4, draw_sprite_notint_flipx_opaque_s3_d4, draw_sprite_notint_flipx_opaque_s4_d4, draw_sprite_notint_flipx_opaque_s5_d4, draw_sprite_notint_flipx_opaque_s6_d4, draw_sprite_notint_flipx_opaque_s7_d4,
draw_sprite_notint_flipx_opaque_s0_d5, draw_sprite_notint_flipx_opaque_s1_d5, draw_sprite_notint_flipx_opaque_s2_d5, draw_sprite_notint_flipx_opaque_s3_d5, draw_sprite_notint_flipx_opaque_s4_d5, draw_sprite_notint_flipx_opaque_s5_d5, draw_sprite_notint_flipx_opaque_s6_d5, draw_sprite_notint_flipx_opaque_s7_d5,
draw_sprite_notint_flipx_opaque_s0_d6, draw_sprite_notint_flipx_opaque_s1_d6, draw_sprite_notint_flipx_opaque_s2_d6, draw_sprite_notint_flipx_opaque_s3_d6, draw_sprite_notint_flipx_opaque_s4_d6, draw_sprite_notint_flipx_opaque_s5_d6, draw_sprite_notint_flipx_opaque_s6_d6, draw_sprite_notint_flipx_opaque_s7_d6,
draw_sprite_notint_flipx_opaque_s0_d7, draw_sprite_notint_flipx_opaque_s1_d7, draw_sprite_notint_flipx_opaque_s2_d7, draw_sprite_notint_flipx_opaque_s3_d7, draw_sprite_notint_flipx_opaque_s4_d7, draw_sprite_notint_flipx_opaque_s5_d7, draw_sprite_notint_flipx_opaque_s6_d7, draw_sprite_notint_flipx_opaque_s7_d7,
};
INLINE void cavesh_gfx_draw_shadow_copy(address_space &space, offs_t *addr, int cliptype)
{
COPY_NEXT_WORD(space, addr);
COPY_NEXT_WORD(space, addr);
COPY_NEXT_WORD(space, addr);
COPY_NEXT_WORD(space, addr);
COPY_NEXT_WORD(space, addr); // UINT16 dst_x_start = COPY_NEXT_WORD(space, addr);
COPY_NEXT_WORD(space, addr); // UINT16 dst_y_start = COPY_NEXT_WORD(space, addr);
UINT16 w = COPY_NEXT_WORD(space, addr);
UINT16 h = COPY_NEXT_WORD(space, addr);
COPY_NEXT_WORD(space, addr);
COPY_NEXT_WORD(space, addr);
// todo, calcualte clipping.
cave_blit_delay += w*h;
}
INLINE void cavesh_gfx_draw(offs_t *addr)
{
int x,y, dimx,dimy, flipx,flipy;//, src_p;
int trans,blend, s_mode, d_mode;
clr_t tint_clr;
int tinted = 0;
UINT16 attr = READ_NEXT_WORD(addr);
UINT16 alpha = READ_NEXT_WORD(addr);
UINT16 src_x = READ_NEXT_WORD(addr);
UINT16 src_y = READ_NEXT_WORD(addr);
UINT16 dst_x_start = READ_NEXT_WORD(addr);
UINT16 dst_y_start = READ_NEXT_WORD(addr);
UINT16 w = READ_NEXT_WORD(addr);
UINT16 h = READ_NEXT_WORD(addr);
UINT16 tint_r = READ_NEXT_WORD(addr);
UINT16 tint_gb = READ_NEXT_WORD(addr);
// 0: +alpha
// 1: +source
// 2: +dest
// 3: *
// 4: -alpha
// 5: -source
// 6: -dest
// 7: *
d_mode = attr & 0x0007;
s_mode = (attr & 0x0070) >> 4;
trans = attr & 0x0100;
blend = attr & 0x0200;
flipy = attr & 0x0400;
flipx = attr & 0x0800;
const UINT8 d_alpha = ((alpha & 0x00ff) )>>3;
const UINT8 s_alpha = ((alpha & 0xff00) >> 8 )>>3;
// src_p = 0;
src_x = src_x & 0x1fff;
src_y = src_y & 0x0fff;
x = (dst_x_start & 0x7fff) - (dst_x_start & 0x8000);
y = (dst_y_start & 0x7fff) - (dst_y_start & 0x8000);
dimx = (w & 0x1fff) + 1;
dimy = (h & 0x0fff) + 1;
// convert parameters to clr
tint_to_clr(tint_r & 0x00ff, (tint_gb >> 8) & 0xff, tint_gb & 0xff, &tint_clr);
/* interestingly this gets set to 0x20 for 'normal' not 0x1f */
if (tint_clr.r!=0x20)
tinted = 1;
if (tint_clr.g!=0x20)
tinted = 1;
if (tint_clr.b!=0x20)
tinted = 1;
// surprisingly frequent, need to verify if it produces a worthwhile speedup tho.
if ((s_mode==0 && s_alpha==0x1f) && (d_mode==4 && d_alpha==0x1f))
blend = 0;
if (tinted)
{
if (!flipx)
{
if (trans)
{
if (!blend)
{
draw_sprite_plain(draw_params);
}
else
{
cave_blit_funcs[s_mode | (d_mode<<3)](draw_params);
}
}
else
{
if (!blend)
{
draw_sprite_opaque_plain(draw_params);
}
else
{
cave_opaque_blit_funcs[s_mode | (d_mode<<3)](draw_params);
}
}
}
else // flipx
{
if (trans)
{
if (!blend)
{
draw_sprite_flipx_plain(draw_params);
}
else
{
cave_flipx_blit_funcs[s_mode | (d_mode<<3)](draw_params);
}
}
else
{
if (!blend)
{
draw_sprite_flipx_opaque_plain(draw_params);
}
else
{
cave_flipx_opaque_blit_funcs[s_mode | (d_mode<<3)](draw_params);
}
}
}
}
else
{
if (blend==0 && tinted==0)
{
if (!flipx)
{
if (trans)
{
draw_sprite_notint_simple(draw_params);
}
else
{
draw_sprite_notint_opaque_simple(draw_params);
}
}
else
{
if (trans)
{
draw_sprite_notint_flipx_simple(draw_params);
}
else
{
draw_sprite_notint_flipx_opaque_simple(draw_params);
}
}
return;
}
//printf("smode %d dmode %d\n", s_mode, d_mode);
if (!flipx)
{
if (trans)
{
if (!blend)
{
draw_sprite_notint_plain(draw_params);
}
else
{
cave_notint_blit_funcs[s_mode | (d_mode<<3)](draw_params);
}
}
else
{
if (!blend)
{
draw_sprite_notint_opaque_plain(draw_params);
}
else
{
cave_notint_opaque_blit_funcs[s_mode | (d_mode<<3)](draw_params);
}
}
}
else // flipx
{
if (trans)
{
if (!blend)
{
draw_sprite_notint_flipx_plain(draw_params);
}
else
{
cave_notint_flipx_blit_funcs[s_mode | (d_mode<<3)](draw_params);
}
}
else
{
if (!blend)
{
draw_sprite_notint_flipx_opaque_plain(draw_params);
}
else
{
cave_notint_flipx_opaque_blit_funcs[s_mode | (d_mode<<3)](draw_params);
}
}
}
}
}
static void cavesh_gfx_create_shadow_copy(address_space &space)
{
offs_t addr = cavesh_gfx_addr & 0x1fffffff;
UINT16 cliptype = 0;
cavesh_clip.min_x = cavesh_gfx_scroll_1_x_shadowcopy;
cavesh_clip.min_y = cavesh_gfx_scroll_1_y_shadowcopy;
cavesh_clip.max_x = cavesh_clip.min_x + 320-1;
cavesh_clip.max_y = cavesh_clip.min_y + 240-1;
while (1)
{
UINT16 data = COPY_NEXT_WORD(space, &addr);
switch( data & 0xf000 )
{
case 0x0000:
case 0xf000:
return;
case 0xc000:
data = COPY_NEXT_WORD(space, &addr);
cliptype = data ? 1 : 0;
if (cliptype)
{
cavesh_clip.min_x = cavesh_gfx_scroll_1_x_shadowcopy;
cavesh_clip.min_y = cavesh_gfx_scroll_1_y_shadowcopy;
cavesh_clip.max_x = cavesh_clip.min_x + 320-1;
cavesh_clip.max_y = cavesh_clip.min_y + 240-1;
}
else
{
cavesh_clip.min_x = 0;
cavesh_clip.min_y = 0;
cavesh_clip.max_x = 0x2000-1;
cavesh_clip.max_y = 0x1000-1;
}
break;
case 0x2000:
addr -= 2;
cavesh_gfx_upload_shadow_copy(space, &addr);
break;
case 0x1000:
addr -= 2;
cavesh_gfx_draw_shadow_copy(space, &addr, cliptype);
break;
default:
popmessage("GFX op = %04X", data);
return;
}
}
}
// Deathsmiles has bad text with wrong clip sizes, must clip to screen size.
static void cavesh_gfx_exec(void)
{
UINT16 cliptype = 0;
offs_t addr = cavesh_gfx_addr_shadowcopy & 0x1fffffff;
// logerror("GFX EXEC: %08X\n", addr);
cavesh_clip.min_x = cavesh_gfx_scroll_1_x_shadowcopy;
cavesh_clip.min_y = cavesh_gfx_scroll_1_y_shadowcopy;
cavesh_clip.max_x = cavesh_clip.min_x + 320-1;
cavesh_clip.max_y = cavesh_clip.min_y + 240-1;
while (1)
{
UINT16 data = READ_NEXT_WORD(&addr);
switch( data & 0xf000 )
{
case 0x0000:
case 0xf000:
return;
case 0xc000:
data = READ_NEXT_WORD(&addr);
cliptype = data ? 1 : 0;
if (cliptype)
{
cavesh_clip.min_x = cavesh_gfx_scroll_1_x_shadowcopy;
cavesh_clip.min_y = cavesh_gfx_scroll_1_y_shadowcopy;
cavesh_clip.max_x = cavesh_clip.min_x + 320-1;
cavesh_clip.max_y = cavesh_clip.min_y + 240-1;
}
else
{
cavesh_clip.min_x = 0;
cavesh_clip.min_y = 0;
cavesh_clip.max_x = 0x2000-1;
cavesh_clip.max_y = 0x1000-1;
}
break;
case 0x2000:
addr -= 2;
cavesh_gfx_upload(&addr);
break;
case 0x1000:
addr -= 2;
cavesh_gfx_draw(&addr);
break;
default:
popmessage("GFX op = %04X", data);
return;
}
}
}
static void *blit_request_callback(void *param, int threadid)
{
cavesh_gfx_exec();
// printf("blah\n");
return NULL;
}
static READ32_HANDLER( cavesh_gfx_ready_r )
{
// ideally we want a recompiler for the CPU before we attempt to do this
// otherwise the games get stuck in more loops waiting for the blitter and we'd
// have to add even more idle skips all over the place ;-)
// cavesh3_state *state = space->machine().driver_data<cavesh3_state>();
// int pc = cpu_get_pc(&space->device());
// if we're waiting for the blitter.. spin otherwise it becomes CPU intensive again
/// if ( pc == 0xc0512d0 ) device_spin_until_time(&space->device(), attotime::from_usec(10)); // espgal2
// if (state->blitter_busy) return 0x00000000;
// else
return 0x00000010;
}
static WRITE32_HANDLER( cavesh_gfx_exec_w )
{
cavesh3_state *state = space->machine().driver_data<cavesh3_state>();
if ( ACCESSING_BITS_0_7 )
{
if (data & 1)
{
//g_profiler.start(PROFILER_USER1);
// make sure we've not already got a request running
if (state->blitter_request)
{
int result;
do
{
result = osd_work_item_wait(state->blitter_request, 1000);
} while (result==0);
osd_work_item_release(state->blitter_request);
}
cave_blit_delay = 0;
cavesh_gfx_create_shadow_copy(*space); // create a copy of the blit list so we can safely thread it.
if (cave_blit_delay)
{
state->blitter_busy = 1;
state->cavesh3_blitter_delay_timer->adjust(attotime::from_nsec(cave_blit_delay*8)); // NOT accurate timing (currently ignored anyway)
}
cavesh_gfx_addr_shadowcopy = cavesh_gfx_addr;
cavesh_gfx_scroll_0_x_shadowcopy = cavesh_gfx_scroll_0_x;
cavesh_gfx_scroll_0_y_shadowcopy = cavesh_gfx_scroll_0_y;
cavesh_gfx_scroll_1_x_shadowcopy = cavesh_gfx_scroll_1_x;
cavesh_gfx_scroll_1_y_shadowcopy = cavesh_gfx_scroll_1_y;
state->blitter_request = osd_work_item_queue(state->queue, blit_request_callback, 0, 0);
//g_profiler.stop();
}
}
}
static SCREEN_UPDATE_RGB32( cavesh3 )
{
cavesh3_state *state = screen.machine().driver_data<cavesh3_state>();
if (state->blitter_request)
{
int result;
do
{
result = osd_work_item_wait(state->blitter_request, 1000);
} while (result==0);
osd_work_item_release(state->blitter_request);
}
int scroll_0_x, scroll_0_y;
// int scroll_1_x, scroll_1_y;
//bitmap_fill(bitmap, cliprect, 0);
bitmap.fill(0, cliprect);
scroll_0_x = -cavesh_gfx_scroll_0_x;
scroll_0_y = -cavesh_gfx_scroll_0_y;
// scroll_1_x = -cavesh_gfx_scroll_1_x;
// scroll_1_y = -cavesh_gfx_scroll_1_y;
//printf("SCREEN UPDATE\n %d %d %d %d\n", scroll_0_x, scroll_0_y, scroll_1_x, scroll_1_y);
copyscrollbitmap(bitmap, *cavesh_bitmaps, 1,&scroll_0_x, 1,&scroll_0_y, cliprect);
return 0;
}
static READ32_HANDLER( cavesh3_blitter_r )
{
switch (offset*4)
{
case 0x10:
return cavesh_gfx_ready_r(space,offset,mem_mask);
case 0x24:
return 0xffffffff;
case 0x28:
return 0xffffffff;
case 0x50:
return input_port_read(space->machine(), "DSW");
default:
logerror("unknowncavesh3_blitter_r %08x %08x\n", offset*4, mem_mask);
break;
}
return 0;
}
static WRITE32_HANDLER( cavesh3_blitter_w )
{
switch (offset*4)
{
case 0x04:
cavesh_gfx_exec_w(space,offset,data,mem_mask);
break;
case 0x08:
COMBINE_DATA(&cavesh_gfx_addr);
break;
case 0x14:
COMBINE_DATA(&cavesh_gfx_scroll_0_x);
break;
case 0x18:
COMBINE_DATA(&cavesh_gfx_scroll_0_y);
break;
case 0x40:
COMBINE_DATA(&cavesh_gfx_scroll_1_x);
break;
case 0x44:
COMBINE_DATA(&cavesh_gfx_scroll_1_y);
break;
}
}
// FLASH
#define FLASH_PAGE_SIZE (2048+64)
UINT8 flash_page_data[FLASH_PAGE_SIZE];
typedef enum { STATE_IDLE = 0, STATE_READ, STATE_READ_ID, STATE_READ_STATUS, STATE_BLOCK_ERASE, STATE_PAGE_PROGRAM } flash_state_t;
static const char *flash_state_name[] = { "IDLE", "READ", "READ_ID", "READ_STATUS", "BLOCK ERASE", "PAGE PROGRAM" };
static flash_state_t flash_state;
static UINT8 flash_enab;
static UINT8 flash_cmd_seq;
static UINT32 flash_cmd_prev;
static UINT8 flash_addr_seq;
static UINT8 flash_read_seq;
static UINT16 flash_row, flash_col;
static UINT16 flash_page_addr;
static UINT16 flash_page_index;
static void flash_hard_reset(running_machine &machine)
{
// logerror("%08x FLASH: RESET\n", cpuexec_describe_context(machine));
flash_state = STATE_READ;
flash_cmd_prev = -1;
flash_cmd_seq = 0;
flash_addr_seq = 0;
flash_read_seq = 0;
flash_row = 0;
flash_col = 0;
memset(flash_page_data, 0, FLASH_PAGE_SIZE);
flash_page_addr = 0;
flash_page_index = 0;
}
static WRITE8_HANDLER( flash_enab_w )
{
//logerror("%08x FLASH: enab = %02X\n", cpu_get_pc(&space->device()), data);
flash_enab = data;
//flash_enab = 1; // todo, why does it get turned off again instantly?
}
static void flash_change_state(running_machine &machine, flash_state_t state)
{
flash_state = state;
flash_cmd_prev = -1;
flash_cmd_seq = 0;
flash_read_seq = 0;
flash_addr_seq = 0;
//logerror("flash_change_state - FLASH: state = %s\n", flash_state_name[state]);
}
static WRITE8_HANDLER( flash_cmd_w )
{
cavesh3_state *state = space->machine().driver_data<cavesh3_state>();
if (!flash_enab)
return;
//logerror("%08x FLASH: cmd = %02X (prev = %02X)\n", cpu_get_pc(&space->device()), data, flash_cmd_prev);
if (flash_cmd_prev == -1)
{
flash_cmd_prev = data;
switch (data)
{
case 0x00: // READ
flash_addr_seq = 0;
break;
case 0x60: // BLOCK ERASE
flash_addr_seq = 0;
break;
case 0x70: // READ STATUS
flash_change_state( space->machine(), STATE_READ_STATUS );
break;
case 0x80: // PAGE / CACHE PROGRAM
flash_addr_seq = 0;
// this actually seems to be set with the next 2 writes?
flash_page_addr = 0;
break;
case 0x90: // READ ID
flash_change_state( space->machine(), STATE_READ_ID );
break;
case 0xff: // RESET
flash_change_state( space->machine(), STATE_IDLE );
break;
default:
{
//logerror("%08x FLASH: unknown cmd1 = %02X\n", cpu_get_pc(&space->device()), data);
}
}
}
else
{
switch (flash_cmd_prev)
{
case 0x00: // READ
if (data == 0x30)
{
memcpy(flash_page_data, state->flashregion + flash_row * FLASH_PAGE_SIZE, FLASH_PAGE_SIZE);
flash_page_addr = flash_col;
flash_page_index = flash_row;
flash_change_state( space->machine(), STATE_READ );
//logerror("%08x FLASH: caching page = %04X\n", cpu_get_pc(&space->device()), flash_row);
}
break;
case 0x60: // BLOCK ERASE
if (data==0xd0)
{
flash_change_state( space->machine(), STATE_BLOCK_ERASE );
state->flashwritemap[flash_col] |= 1;
memset(state->flashregion + flash_col * FLASH_PAGE_SIZE, 0xff, FLASH_PAGE_SIZE);
//logerror("erased block %04x (%08x - %08x)\n", flash_col, flash_col * FLASH_PAGE_SIZE, ((flash_col+1) * FLASH_PAGE_SIZE)-1);
}
else
{
//logerror("unexpected 2nd command after BLOCK ERASE\n");
}
break;
case 0x80:
if (data==0x10)
{
flash_change_state( space->machine(), STATE_PAGE_PROGRAM );
state->flashwritemap[flash_row] |= (memcmp(state->flashregion + flash_row * FLASH_PAGE_SIZE, flash_page_data, FLASH_PAGE_SIZE) != 0);
memcpy(state->flashregion + flash_row * FLASH_PAGE_SIZE, flash_page_data, FLASH_PAGE_SIZE);
//logerror("re-written block %04x (%08x - %08x)\n", flash_row, flash_row * FLASH_PAGE_SIZE, ((flash_row+1) * FLASH_PAGE_SIZE)-1);
}
else
{
//logerror("unexpected 2nd command after SPAGE PROGRAM\n");
}
break;
default:
{
//logerror("%08x FLASH: unknown cmd2 = %02X (cmd1 = %02X)\n", cpu_get_pc(&space->device()), data, flash_cmd_prev);
}
}
}
}
static WRITE8_HANDLER( flash_data_w ) // Deathsmiles
{
if (!flash_enab)
return;
//logerror("flash data write %04x\n", flash_page_addr);
flash_page_data[flash_page_addr] = data;
flash_page_addr++;
}
static WRITE8_HANDLER( flash_addr_w )
{
if (!flash_enab)
return;
//logerror("%08x FLASH: addr = %02X (seq = %02X)\n", cpu_get_pc(&space->device()), data, flash_addr_seq);
switch( flash_addr_seq++ )
{
case 0:
flash_col = (flash_col & 0xff00) | data;
break;
case 1:
flash_col = (flash_col & 0x00ff) | (data << 8);
break;
case 2:
flash_row = (flash_row & 0xff00) | data;
break;
case 3:
flash_row = (flash_row & 0x00ff) | (data << 8);
flash_addr_seq = 0;
break;
}
}
static READ8_HANDLER( flash_io_r )
{
UINT8 data = 0x00;
// UINT32 old;
if (!flash_enab)
return 0xff;
switch (flash_state)
{
case STATE_READ_ID:
//old = flash_read_seq;
switch( flash_read_seq++ )
{
case 0:
data = 0xEC; // Manufacturer
break;
case 1:
data = 0xF1; // Device
break;
case 2:
data = 0x00; // XX
break;
case 3:
data = 0x15; // Flags
flash_read_seq = 0;
break;
}
//logerror("%08x FLASH: read %02X from id(%02X)\n", cpu_get_pc(&space->device()), data, old);
break;
case STATE_READ:
if (flash_page_addr > FLASH_PAGE_SIZE-1)
flash_page_addr = FLASH_PAGE_SIZE-1;
//old = flash_page_addr;
data = flash_page_data[flash_page_addr++];
//logerror("%08x FLASH: read data %02X from addr %03X (page %04X)\n", cpu_get_pc(&space->device()), data, old, flash_page_index);
break;
case STATE_READ_STATUS:
// bit 7 = writeable, bit 6 = ready, bit 5 = ready/true ready, bit 1 = fail(N-1), bit 0 = fail
data = 0xe0;
//logerror("%08x FLASH: read status %02X\n", cpu_get_pc(&space->device()), data);
break;
default:
{
logerror("%08x FLASH: unknown read in state %s\n", cpu_get_pc(&space->device()), flash_state_name[flash_state]);
}
}
return data;
}
static READ8_HANDLER( flash_ready_r )
{
return 1;
}
// FLASH interface
static READ64_HANDLER( ibara_flash_port_e_r )
{
return ((flash_ready_r(space, offset) ? 0x20 : 0x00)) | 0xdf;
}
static READ8_HANDLER( ibara_flash_io_r )
{
switch (offset)
{
default:
case 0x01:
case 0x02:
case 0x03:
case 0x04:
case 0x05:
case 0x06:
case 0x07:
// logerror("ibara_flash_io_r offset %04x\n", offset);
return 0xff;
case 0x00:
return flash_io_r(space,offset);
}
}
static WRITE8_HANDLER( ibara_flash_io_w )
{
switch (offset)
{
default:
case 0x03:
logerror("unknown ibara_flash_io_w offset %04x data %02x\n", offset, data); // 03 enable/disable fgpa access?
break;
case 0x00:
flash_data_w(space, offset, data);
break;
case 0x01:
flash_cmd_w(space, offset, data);
break;
case 0x2:
flash_addr_w(space, offset, data);
break;
}
}
// ibarablk uses the rtc to render the clock in the first attract demo
// if this code returns bad values it has gfx corruption. the ibarablka set doesn't do this?!
static READ8_HANDLER( serial_rtc_eeprom_r )
{
rtc9701_device* dev = space->machine().device<rtc9701_device>("eeprom");
switch (offset)
{
case 1:
// return 0xfe | (input_port_read(space->machine(), "EEPROMIN") & 0x1);
return 0xfe | dev->read_bit();
default:
//logerror("%08x unknown serial_rtc_eeprom_r access offset %02x\n", cpu_get_pc(&space->device()), offset);
return 0;
}
}
static WRITE8_HANDLER( serial_rtc_eeprom_w )
{
switch (offset)
{
case 0x01:
// logerror("serial_rtc_eeprom_w access offset %02x data %02x\n",offset, data);
input_port_write(space->machine(), "EEPROMOUT", data, 0xff);
// data & 0x00010000 = DATA
// data & 0x00020000 = CLK
// data & 0x00040000 = CE
break;
case 0x03:
//logerror("flashenable serial_rtc_eeprom_w access offset %02x data %02x\n",offset, data);
flash_enab_w(space,offset,data);
return;
default:
logerror("unknown serial_rtc_eeprom_w access offset %02x data %02x\n",offset, data);
break;
}
}
static WRITE64_HANDLER( cavesh3_nop_write )
{
}
static ADDRESS_MAP_START( cavesh3_map, AS_PROGRAM, 64 )
AM_RANGE(0x00000000, 0x003fffff) AM_ROM AM_REGION("maincpu", 0) AM_WRITE(cavesh3_nop_write) // mmmbanc writes here on startup for some reason..
/* 0x04000000, 0x07ffffff SH3 Internal Regs (including ports) */
AM_RANGE(0x0c000000, 0x0cffffff) AM_RAM AM_BASE(&cavesh3_ram)// AM_SHARE("mainram")// work RAM
// AM_RANGE(0x0c800000, 0x0cffffff) AM_RAM// AM_SHARE("mainram") // mirror of above on type B boards, extra ram on type D
AM_RANGE(0x10000000, 0x10000007) AM_READWRITE8(ibara_flash_io_r, ibara_flash_io_w, U64(0xffffffffffffffff))
AM_RANGE(0x10400000, 0x10400007) AM_DEVREADWRITE8_MODERN("ymz770", ymz770_device, read, write, U64(0xffffffffffffffff))
AM_RANGE(0x10C00000, 0x10C00007) AM_READWRITE8(serial_rtc_eeprom_r, serial_rtc_eeprom_w, U64(0xffffffffffffffff))
AM_RANGE(0x18000000, 0x18000057) AM_READWRITE32(cavesh3_blitter_r, cavesh3_blitter_w, U64(0xffffffffffffffff))
AM_RANGE(0xf0000000, 0xf0ffffff) AM_RAM // mem mapped cache (sh3 internal?)
/* 0xffffe000, 0xffffffff SH3 Internal Regs 2 */
ADDRESS_MAP_END
static READ64_HANDLER( ibara_fpga_r )
{
return 0xff;
}
static WRITE64_HANDLER( ibara_fpga_w )
{
if (ACCESSING_BITS_24_31)
{
// data & 0x08 = CE
// data & 0x10 = CLK
// data & 0x20 = DATA
}
}
static ADDRESS_MAP_START( cavesh3_port, AS_IO, 64 )
AM_RANGE(SH3_PORT_C, SH3_PORT_C+7) AM_READ_PORT("PORT_C")
AM_RANGE(SH3_PORT_D, SH3_PORT_D+7) AM_READ_PORT("PORT_D")
AM_RANGE(SH3_PORT_E, SH3_PORT_E+7) AM_READ( ibara_flash_port_e_r )
AM_RANGE(SH3_PORT_F, SH3_PORT_F+7) AM_READ_PORT("PORT_F")
AM_RANGE(SH3_PORT_L, SH3_PORT_L+7) AM_READ_PORT("PORT_L")
AM_RANGE(SH3_PORT_J, SH3_PORT_J+7) AM_READWRITE( ibara_fpga_r, ibara_fpga_w )
ADDRESS_MAP_END
static INPUT_PORTS_START( cavesh3 )
PORT_START("DSW") // 18000050.l (18000050.b + 3 i.e. MSB + 3, is shown as DIPSW)
// PORT_BIT( 0xfcfffffc, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_DIPNAME( 0x00000002, 0x00000000, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x00000000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00000002, DEF_STR( On ) )
PORT_SERVICE( 0x00000001, IP_ACTIVE_HIGH )
PORT_START("PORT_C")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE1 ) // Service coin
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE3 ) // Test button copied here
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 ) // IMPLEMENT COIN ERROR!
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("PORT_D")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1)
PORT_START("PORT_F")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE2 ) // Test Push Button
PORT_BIT( 0xfd, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("PORT_L") // 4000134.b, 4000136.b
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2)
PORT_START( "EEPROMOUT" )
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", rtc9701_device, write_bit)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", rtc9701_device, set_clock_line)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", rtc9701_device, set_cs_line)
PORT_START( "EEPROMIN" )
// PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", rtc9701_device, read_bit)
INPUT_PORTS_END
#define CAVE_CPU_CLOCK 12800000 * 8
// none of this is verified for cave sh3
// (the sh3 is different to the sh4 anyway, should be changed)
static const struct sh4_config sh4cpu_config = {
0, // md2 (clock divders)
0, // md1 (clock divders)
0, // md0 (clock divders)
0,
0,
0,
1,
1, // md7 (master?)
0,
CAVE_CPU_CLOCK
};
// 1166666 pixels per frame
// 1 frame is 0.01666666666666666666666666666667 seconds
// 1 frame is 16.666666666666666666666666666667 milliseconds
// 1 frame is 16666666.666666666666666666666667 nanoseconds
static INTERRUPT_GEN(cavesh3_interrupt)
{
device_set_input_line(device, 2, HOLD_LINE);
}
static TIMER_CALLBACK( cavesh3_blitter_delay_callback )
{
cavesh3_state *state = machine.driver_data<cavesh3_state>();
state->blitter_busy = 0;
}
static MACHINE_START( cavesh3 )
{
size_t size = machine.region( "game" )->bytes();
cavesh3_state *state = machine.driver_data<cavesh3_state>();
state->flashwritemap = auto_alloc_array(machine, UINT8, size / FLASH_PAGE_SIZE);
memset(state->flashwritemap, 0, size / FLASH_PAGE_SIZE);
cavesh3_ram16_copy = auto_alloc_array(machine, UINT16, 0x7ffffff);
state->cavesh3_blitter_delay_timer = machine.scheduler().timer_alloc(FUNC(cavesh3_blitter_delay_callback));
state->cavesh3_blitter_delay_timer->adjust(attotime::never);
state->queue = osd_work_queue_alloc(WORK_QUEUE_FLAG_HIGH_FREQ);
}
static MACHINE_RESET( cavesh3 )
{
cavesh3_state *state = machine.driver_data<cavesh3_state>();
flash_enab = 0;
flash_hard_reset(machine);
cavesh3_ram16 = (UINT16*)cavesh3_ram;
state->flashregion = machine.region( "game" )->base();
// cache table to avoid divides in blit code, also pre-clamped
int x,y;
for (y=0;y<0x40;y++)
{
for (x=0;x<0x20;x++)
{
cavesh3_colrtable[x][y] = (x*y) / 0x1f;
if (cavesh3_colrtable[x][y]>0x1f) cavesh3_colrtable[x][y] = 0x1f;
cavesh3_colrtable_rev[x^0x1f][y] = (x*y) / 0x1f;
if (cavesh3_colrtable_rev[x^0x1f][y]>0x1f) cavesh3_colrtable_rev[x^0x1f][y] = 0x1f;
}
}
// preclamped add table
for (y=0;y<0x20;y++)
{
for (x=0;x<0x20;x++)
{
cavesh3_colrtable_add[x][y] = (x+y);
if (cavesh3_colrtable_add[x][y]>0x1f) cavesh3_colrtable_add[x][y] = 0x1f;
}
}
state->blitter_busy = 0;
}
static NVRAM_HANDLER( cavesh3 )
{
/* Yes we have to crawl through the entire ~128MB flash because some games
(eg. Deathsmiles) save data there on top of to the actual EEPROM */
UINT8 *region = machine.region( "game" )->base();
size_t size = machine.region( "game" )->bytes();
cavesh3_state *state = machine.driver_data<cavesh3_state>();
if (size % FLASH_PAGE_SIZE) return; // region size must be multiple of flash page size
size /= FLASH_PAGE_SIZE;
if (read_or_write)
{
UINT32 page = 0;
while (page < size)
{
if (state->flashwritemap[page])
{
file->write(&page, 4);
file->write(region + page * FLASH_PAGE_SIZE, FLASH_PAGE_SIZE);
}
page++;
}
file->write(&page, 4);
}
else
{
if (file)
{
UINT32 page;
file->read(&page, 4);
while (page < size)
{
state->flashwritemap[page] = 1;
file->read(region + page * FLASH_PAGE_SIZE, FLASH_PAGE_SIZE);
file->read(&page, 4);
}
}
}
}
static MACHINE_CONFIG_START( cavesh3, cavesh3_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", SH3BE, CAVE_CPU_CLOCK)
MCFG_CPU_CONFIG(sh4cpu_config)
MCFG_CPU_PROGRAM_MAP(cavesh3_map)
MCFG_CPU_IO_MAP(cavesh3_port)
MCFG_CPU_VBLANK_INT("screen", cavesh3_interrupt)
MCFG_RTC9701_ADD("eeprom")//, XTAL_32_768kHz)
MCFG_NVRAM_HANDLER(cavesh3)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
//MCFG_SCREEN_FORMAT(BITMAP_FORMAT_RGB32)
MCFG_SCREEN_SIZE(0x200, 0x200)
MCFG_SCREEN_VISIBLE_AREA(0, 0x140-1, 0, 0xf0-1)
MCFG_PALETTE_LENGTH(0x10000)
MCFG_SCREEN_UPDATE_STATIC(cavesh3)
MCFG_MACHINE_START(cavesh3)
MCFG_MACHINE_RESET(cavesh3)
MCFG_VIDEO_START(cavesh3)
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MCFG_YMZ770_ADD("ymz770", 16384000)
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
MACHINE_CONFIG_END
/**************************************************
All roms are flash roms with no labels, so keep the
version numbers attached to the roms that differ
- roms which differ have also been prefixed with
the MAME set names to aid readability and prevent
accidental misloading of sets with the wrong
CRCs which causes issues with the speedups.
**************************************************/
ROM_START( mushisam )
ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD16_WORD_SWAP("mushisam_u4", 0x000000, 0x200000, CRC(0b5b30b2) SHA1(35fd1bb1561c30b311b4325bc8f4628f2fccd20b) ) /* (2004/10/12 MASTER VER.) */
ROM_RELOAD(0x200000,0x200000)
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
ROM_LOAD("mushisam_u2", 0x000000, 0x8400000, CRC(b1f826dc) SHA1(c287bd9f571d0df03d7fcbcf3c57c74ce564ab05) ) /* (2004/10/12 MASTER VER.) */
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
ROM_LOAD16_WORD_SWAP("u23", 0x000000, 0x400000, CRC(138e2050) SHA1(9e86489a4e65af5efb5495adf6d4b3e01d5b2816) )
ROM_LOAD16_WORD_SWAP("u24", 0x400000, 0x400000, CRC(e3d05c9f) SHA1(130c3d62317da1729c85bd178bd51500edd73ada) )
ROM_END
ROM_START( mushisama )
ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD16_WORD_SWAP("mushisama_u4", 0x000000, 0x200000, CRC(9f1c7f51) SHA1(f82ae72ec03687904ca7516887080be92365a5f3) ) /* (2004/10/12 MASTER VER) */
ROM_RELOAD(0x200000,0x200000)
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
ROM_LOAD("mushisama_u2", 0x000000, 0x8400000, CRC(2cd13810) SHA1(40e45e201b60e63a060b68d4cc767eb64cfb99c2) ) /* (2004/10/12 MASTER VER) */
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
ROM_LOAD16_WORD_SWAP("u23", 0x000000, 0x400000, CRC(138e2050) SHA1(9e86489a4e65af5efb5495adf6d4b3e01d5b2816) )
ROM_LOAD16_WORD_SWAP("u24", 0x400000, 0x400000, CRC(e3d05c9f) SHA1(130c3d62317da1729c85bd178bd51500edd73ada) )
ROM_END
ROM_START( espgal2 )
ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD16_WORD_SWAP( "u4", 0x000000, 0x200000, CRC(09c908bb) SHA1(7d6031fd3542b3e1d296ff218feb40502fd78694) ) /* (2005/11/14 MASTER VER) */
ROM_RELOAD(0x200000,0x200000)
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
ROM_LOAD( "u2", 0x000000, 0x8400000, CRC(222f58c7) SHA1(d47a5085a1debd9cb8c61d88cd39e4f5036d1797) ) /* (2005/11/14 MASTER VER) */
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
ROM_LOAD16_WORD_SWAP( "u23", 0x000000, 0x400000, CRC(b9a10c22) SHA1(4561f95c6018c9716077224bfe9660e61fb84681) )
ROM_LOAD16_WORD_SWAP( "u24", 0x400000, 0x400000, CRC(c76b1ec4) SHA1(b98a53d41a995d968e0432ed824b0b06d93dcea8) )
ROM_END
ROM_START( mushitam )
ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD16_WORD_SWAP("u4", 0x000000, 0x200000, CRC(4a23e6c8) SHA1(d44c287bb88e6d413a8d35d75bc1b4928ad52cdf) ) /* (2005/09/09 MASTER VER) */
ROM_RELOAD(0x200000,0x200000)
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
ROM_LOAD("u2", 0x000000, 0x8400000, CRC(3f93ff82) SHA1(6f6c250aa7134016ffb288d056bc937ea311f538) ) /* (2005/09/09 MASTER VER) */
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
ROM_LOAD16_WORD_SWAP("u23", 0x000000, 0x400000, CRC(701a912a) SHA1(85c198946fb693d99928ea2595c84ba4d9dc8157) )
ROM_LOAD16_WORD_SWAP("u24", 0x400000, 0x400000, CRC(6feeb9a1) SHA1(992711c80e660c32f97b343c2ce8184fddd7364e) )
ROM_END
ROM_START( futari15 )
ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD16_WORD_SWAP("futari15_u4", 0x000000, 0x200000, CRC(e8c5f128) SHA1(45fb8066fdbecb83fdc2e14555c460d0c652cd5f) ) /* (2006/12/8.MAST VER. 1.54.) */
ROM_RELOAD(0x200000,0x200000)
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
ROM_LOAD("futari15_u2", 0x000000, 0x8400000, CRC(b9eae1fc) SHA1(410f8e7cfcbfd271b41fb4f8d049a13a3191a1f9) ) /* (2006/12/8.MAST VER. 1.54.) */
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
ROM_LOAD16_WORD_SWAP("u23", 0x000000, 0x400000, CRC(39f1e1f4) SHA1(53d12f59a56df35c705408c76e6e02118da656f1) )
ROM_LOAD16_WORD_SWAP("u24", 0x400000, 0x400000, CRC(c631a766) SHA1(8bb6934a2f5b8a9841c3dcf85192b1743773dd8b) )
ROM_END
ROM_START( futari15a )
ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD16_WORD_SWAP("futari15a_u4", 0x000000, 0x200000, CRC(a609cf89) SHA1(56752fae9f42fa852af8ee2eae79e25ec7f17953) ) /* (2006/12/8 MAST VER 1.54) */
ROM_RELOAD(0x200000,0x200000)
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
ROM_LOAD("futari15a_u2", 0x000000, 0x8400000, CRC(b9d815f9) SHA1(6b6f668b0bbb087ffac65e4f0d8bd9d5b28eeb28) ) /* (2006/12/8 MAST VER 1.54) */
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
ROM_LOAD16_WORD_SWAP("u23", 0x000000, 0x400000, CRC(39f1e1f4) SHA1(53d12f59a56df35c705408c76e6e02118da656f1) )
ROM_LOAD16_WORD_SWAP("u24", 0x400000, 0x400000, CRC(c631a766) SHA1(8bb6934a2f5b8a9841c3dcf85192b1743773dd8b) )
ROM_END
ROM_START( futari10 )
ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD16_WORD_SWAP( "futari10_u4", 0x000000, 0x200000, CRC(b127dca7) SHA1(e1f518bc72fc1cdf69aefa89eafa4edaf4e84778) ) /* (2006/10/23 MASTER VER.) */
ROM_RELOAD(0x200000,0x200000)
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
ROM_LOAD( "futari10_u2", 0x000000, 0x8400000, CRC(78ffcd0c) SHA1(0e2937edec15ce3f5741b72ebd3bbaaefffb556e) ) /* (2006/10/23 MASTER VER.) */
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
ROM_LOAD16_WORD_SWAP( "u23", 0x000000, 0x400000, CRC(39f1e1f4) SHA1(53d12f59a56df35c705408c76e6e02118da656f1) )
ROM_LOAD16_WORD_SWAP( "u24", 0x400000, 0x400000, CRC(c631a766) SHA1(8bb6934a2f5b8a9841c3dcf85192b1743773dd8b) )
ROM_END
ROM_START( futariblk )
ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD16_WORD_SWAP( "futariblk_u4", 0x000000, 0x200000, CRC(6db13c62) SHA1(6a53ce7f70b754936ccbb3a4674d4b2f03979644) ) /* (2007/12/11 BLACK LABEL VER) */
ROM_RELOAD(0x200000,0x200000)
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
ROM_LOAD( "futariblk_u2", 0x000000, 0x8400000, CRC(08c6fd62) SHA1(e1fc386b2b0e41906c724287cbf82304297e0150) ) /* (2007/12/11 BLACK LABEL VER) */
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
ROM_LOAD16_WORD_SWAP( "u23", 0x000000, 0x400000, CRC(39f1e1f4) SHA1(53d12f59a56df35c705408c76e6e02118da656f1) )
ROM_LOAD16_WORD_SWAP( "u24", 0x400000, 0x400000, CRC(c631a766) SHA1(8bb6934a2f5b8a9841c3dcf85192b1743773dd8b) )
ROM_END
ROM_START( ibara )
ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD16_WORD_SWAP( "u4", 0x000000, 0x200000, CRC(8e6c155d) SHA1(38ac2107dc7824836e2b4e04c7180d5ae43c9b79) ) /* (2005/03/22 MASTER VER..) */
ROM_RELOAD(0x200000,0x200000)
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
ROM_LOAD( "u2", 0x000000, 0x8400000, CRC(55840976) SHA1(4982bdce84f9603adfed7a618f18bc80359ab81e) ) /* (2005/03/22 MASTER VER..) */
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
ROM_LOAD16_WORD_SWAP( "u23", 0x000000, 0x400000, CRC(ee5e585d) SHA1(7eeba4ee693060e927f8c46b16e39227c6a62392) )
ROM_LOAD16_WORD_SWAP( "u24", 0x400000, 0x400000, CRC(f0aa3cb6) SHA1(f9d137cd879e718811b2d21a0af2a9c6b7dca2f9) )
ROM_END
ROM_START( ibarablk ) /* Title screen shows (c) 2005 despite the 2006 "master" date */
ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD16_WORD_SWAP( "ibarablk_u4", 0x000000, 0x200000, CRC(ee1f1f77) SHA1(ac276f3955aa4dde2544af4912819a7ae6bcf8dd) ) /* (2006/02/06. MASTER VER.) */
ROM_RELOAD(0x200000,0x200000)
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
ROM_LOAD( "ibarablk_u2", 0x000000, 0x8400000, CRC(5e46be44) SHA1(bed5f1bf452f2cac58747ecabec3c4392566a3a7) ) /* (2006/02/06. MASTER VER.) */
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
ROM_LOAD16_WORD_SWAP( "u23", 0x000000, 0x400000, CRC(a436bb22) SHA1(0556e771cc02638bf8814315ba671c2d442594f1) ) /* (2006/02/06 MASTER VER.) */
ROM_LOAD16_WORD_SWAP( "u24", 0x400000, 0x400000, CRC(d11ab6b6) SHA1(2132191cbe847e2560423e4545c969f21f8ff825) ) /* (2006/02/06 MASTER VER.) */
ROM_END
ROM_START( ibarablka ) /* Title screen shows (c) 2005 despite the 2006 "master" date */
ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD16_WORD_SWAP( "ibarablka_u4", 0x000000, 0x200000, CRC(a9d43839) SHA1(507696e616608c05893c7ac2814b3365e9cb0720) ) /* (2006/02/06 MASTER VER.) */
ROM_RELOAD(0x200000,0x200000)
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
ROM_LOAD( "ibarablka_u2", 0x000000, 0x8400000, CRC(33400d96) SHA1(09c22b5431ac3726bf88c56efd970f56793f825a) ) /* (2006/02/06 MASTER VER.) */
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
ROM_LOAD16_WORD_SWAP( "u23", 0x000000, 0x400000, CRC(a436bb22) SHA1(0556e771cc02638bf8814315ba671c2d442594f1) ) /* (2006/02/06 MASTER VER.) */
ROM_LOAD16_WORD_SWAP( "u24", 0x400000, 0x400000, CRC(d11ab6b6) SHA1(2132191cbe847e2560423e4545c969f21f8ff825) ) /* (2006/02/06 MASTER VER.) */
ROM_END
ROM_START( deathsml )
ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD16_WORD_SWAP( "u4", 0x000000, 0x200000, CRC(1a7b98bf) SHA1(07798a4a846e5802756396b34df47d106895c1f1) ) /* (2007/10/09 MASTER VER) */
ROM_RELOAD(0x200000,0x200000)
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
ROM_LOAD( "u2", 0x000000, 0x8400000, CRC(d45b0698) SHA1(7077b9445f5ed4749c7f683191ccd312180fac38) ) /* (2007/10/09 MASTER VER) */
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
ROM_LOAD16_WORD_SWAP( "u23", 0x000000, 0x400000, CRC(aab718c8) SHA1(0e636c46d06151abd6f73232bc479dafcafe5327) )
ROM_LOAD16_WORD_SWAP( "u24", 0x400000, 0x400000, CRC(83881d84) SHA1(6e2294b247dfcbf0ced155dc45c706f29052775d) )
ROM_END
ROM_START( mmpork )
ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD16_WORD_SWAP( "u4", 0x000000, 0x200000, CRC(d06cfa42) SHA1(5707feb4b3e5265daf5926f38c38612b24106f1f) ) /* (2007/ 4/17 MASTER VER.) */
ROM_RELOAD(0x200000,0x200000)
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
ROM_LOAD( "u2", 0x000000, 0x8400000, CRC(1ee961b8) SHA1(81a2eba704ac1cf7fc44fa7c6a3f50e3570c104f) ) /* (2007/ 4/17 MASTER VER.) */
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
ROM_LOAD16_WORD_SWAP( "u23", 0x000000, 0x400000, CRC(4a4b36df) SHA1(5db5ce6fa47e5ca3263d4bd19315890c6d29df66) )
ROM_LOAD16_WORD_SWAP( "u24", 0x400000, 0x400000, CRC(ce83d07b) SHA1(a5947467c8f5b7c4b0ad8e32df2ee29b787e355f) )
ROM_END
ROM_START( mmmbanc )
ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD16_WORD_SWAP( "u4", 0x0000, 0x200000, CRC(5589d8c6) SHA1(43fbdb0effe2bc0e7135698757b6ee50200aecde) ) /* (2007/06/05 MASTER VER.) */
ROM_RELOAD(0x200000,0x200000)
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
ROM_LOAD( "u2", 0x000000, 0x8400000, CRC(f3b50c30) SHA1(962327798081b292b2d3fd3b7845c0197f9f2d8a) ) /* (2007/06/05 MASTER VER.) */
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
ROM_LOAD16_WORD_SWAP( "u23", 0x000000, 0x400000, CRC(4caaa1bf) SHA1(9b92c13eac05601da4d9bb3eb727c156974e9f0c) )
ROM_LOAD16_WORD_SWAP( "u24", 0x400000, 0x400000, CRC(8e3a51ba) SHA1(e34cf9acb13c3d8ca6cd1306b060b1d429872abd) )
ROM_END
ROM_START( pinkswts )
ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD16_WORD_SWAP( "pinkswts_u4", 0x0000, 0x200000, CRC(5d812c9e) SHA1(db821ec3892fd150513749d64a8b60bf147f3275) ) /* (2006/04/06 MASTER VER....) */
ROM_RELOAD(0x200000,0x200000)
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
ROM_LOAD( "pinkswts_u2", 0x000000, 0x8400000, CRC(92d3243a) SHA1(e9d20c62f642fb2f62ef83ed5caeee6b3f67fef9) ) /* (2006/04/06 MASTER VER....) */
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
ROM_LOAD16_WORD_SWAP( "u23", 0x000000, 0x400000, CRC(4b82d250) SHA1(ee98dbc3f791efb6d58f3945bcb2044667ae7978) )
ROM_LOAD16_WORD_SWAP( "u24", 0x400000, 0x400000, CRC(e93f0627) SHA1(6f5ec0ade87f7fc42a58a8f125557a4d1f3f187d) )
ROM_END
ROM_START( pinkswtsa )
ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD16_WORD_SWAP( "pnkswtsa_u4", 0x0000, 0x200000, CRC(ee3339b2) SHA1(995988d370731a7074b49ce8752525dadf06a954) ) /* (2006/04/06 MASTER VER...) */
ROM_RELOAD(0x200000,0x200000)
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
ROM_LOAD( "pnkswtsa_u2", 0x000000, 0x8400000, CRC(829a862e) SHA1(8c0ee2a0eb33b68869252fd68aed74820a904287) ) /* (2006/04/06 MASTER VER...) */
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
ROM_LOAD16_WORD_SWAP( "u23", 0x000000, 0x400000, CRC(4b82d250) SHA1(ee98dbc3f791efb6d58f3945bcb2044667ae7978) )
ROM_LOAD16_WORD_SWAP( "u24", 0x400000, 0x400000, CRC(e93f0627) SHA1(6f5ec0ade87f7fc42a58a8f125557a4d1f3f187d) )
ROM_END
ROM_START( pinkswtsb )
ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD16_WORD_SWAP( "pnkswtsb_u4", 0x0000, 0x200000, CRC(68bcc009) SHA1(2fef544b93c61161a37365f868b431d8262e4b21) ) /* (2006/04/06 MASTER VER.) */
ROM_RELOAD(0x200000,0x200000)
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
ROM_LOAD( "pnkswtsb_u2", 0x000000, 0x8400000, CRC(a5666ed9) SHA1(682e06c84990225bc6bb0c9f38b5f46c4e36b430) ) /* (2006/04/06 MASTER VER.) */
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
ROM_LOAD16_WORD_SWAP( "u23", 0x000000, 0x400000, CRC(4b82d250) SHA1(ee98dbc3f791efb6d58f3945bcb2044667ae7978) )
ROM_LOAD16_WORD_SWAP( "u24", 0x400000, 0x400000, CRC(e93f0627) SHA1(6f5ec0ade87f7fc42a58a8f125557a4d1f3f187d) )
ROM_END
static READ64_HANDLER( mushisam_speedup_r )
{
int pc = cpu_get_pc(&space->device());
if ( pc == 0xc04a0aa ) device_spin_until_time(&space->device(), attotime::from_usec(10)); // mushisam
else if (pc == 0xc04a0da) device_spin_until_time(&space->device(), attotime::from_usec(10)); // mushitam
// else printf("read %08x\n", cpu_get_pc(&space->device()));
return cavesh3_ram[0x0022f0/8];
}
DRIVER_INIT( mushisam )
{
machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0xc0022f0, 0xc0022f7, FUNC(mushisam_speedup_r) );
}
static READ64_HANDLER( mushisama_speedup_r )
{
if ( cpu_get_pc(&space->device())== 0xc04a2aa ) device_spin_until_time(&space->device(), attotime::from_usec(10)); // mushisam
// else printf("read %08x\n", cpu_get_pc(&space->device()));
return cavesh3_ram[0x00024d8/8];
}
DRIVER_INIT( mushisama )
{
machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0xc0024d8, 0xc0024df, FUNC(mushisama_speedup_r) );
}
static READ64_HANDLER( espgal2_speedup_r )
{
int pc = cpu_get_pc(&space->device());
if ( pc == 0xc05177a ) device_spin_until_time(&space->device(), attotime::from_usec(10)); // espgal2
if ( pc == 0xc05176a ) device_spin_until_time(&space->device(), attotime::from_usec(10)); // futari15 / futari15a / futari10 / futariblk / ibarablk / ibarablka / mmpork / mmmbanc
if ( pc == 0xc0519a2 ) device_spin_until_time(&space->device(), attotime::from_usec(10)); // deathsml
// else printf("read %08x\n", cpu_get_pc(&space->device()));
return cavesh3_ram[0x002310/8];
}
DRIVER_INIT( espgal2 )
{
machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0xc002310, 0xc002317, FUNC(espgal2_speedup_r) );
}
GAME( 2004, mushisam, 0, cavesh3, cavesh3, mushisam, ROT270, "Cave", "Mushihime-Sama (2004/10/12 MASTER VER.)", 0 )
GAME( 2004, mushisama, mushisam, cavesh3, cavesh3, mushisama, ROT270, "Cave", "Mushihime-Sama (2004/10/12 MASTER VER)", 0 )
GAME( 2005, espgal2, 0, cavesh3, cavesh3, espgal2, ROT270, "Cave", "Espgaluda II (2005/11/14 MASTER VER)", 0 )
GAME( 2005, ibara, 0, cavesh3, cavesh3, mushisam, ROT270, "Cave", "Ibara (2005/03/22 MASTER VER..)", 0 )
GAME( 2006, ibarablk, 0, cavesh3, cavesh3, espgal2, ROT270, "Cave", "Ibara Kuro Black Label (2006/02/06. MASTER VER.)", 0 )
GAME( 2006, ibarablka, ibarablk, cavesh3, cavesh3, espgal2, ROT270, "Cave", "Ibara Kuro Black Label (2006/02/06 MASTER VER.)", 0 )
GAME( 2005, mushitam, 0, cavesh3, cavesh3, mushisam, ROT0, "Cave", "Puzzle! Mushihime-Tama (2005/09/09 MASTER VER)", 0 )
GAME( 2006, futari15, 0, cavesh3, cavesh3, espgal2, ROT270, "Cave", "Mushihime-Sama Futari Ver 1.5 (2006/12/8.MASTER VER. 1.54.)", 0 )
GAME( 2006, futari15a, futari15, cavesh3, cavesh3, espgal2, ROT270, "Cave", "Mushihime-Sama Futari Ver 1.5 (2006/12/8 MASTER VER 1.54)", 0 )
GAME( 2006, futari10, futari15, cavesh3, cavesh3, espgal2, ROT270, "Cave", "Mushihime-Sama Futari Ver 1.0 (2006/10/23 MASTER VER.)", 0 )
GAME( 2007, futariblk, futari15, cavesh3, cavesh3, espgal2, ROT270, "Cave", "Mushihime-Sama Futari Black Label (2007/12/11 BLACK LABEL VER)", 0 )
GAME( 2006, pinkswts, 0, cavesh3, cavesh3, espgal2, ROT270, "Cave", "Pink Sweets: Ibara Sorekara (2006/04/06 MASTER VER....)", 0 )
GAME( 2006, pinkswtsa, pinkswts, cavesh3, cavesh3, espgal2, ROT270, "Cave", "Pink Sweets: Ibara Sorekara (2006/04/06 MASTER VER...)", 0 )
GAME( 2006, pinkswtsb, pinkswts, cavesh3, cavesh3, espgal2, ROT270, "Cave", "Pink Sweets: Ibara Sorekara (2006/04/06 MASTER VER.)", 0 )
GAME( 2007, deathsml, 0, cavesh3, cavesh3, espgal2, ROT0, "Cave", "Deathsmiles (2007/10/09 MASTER VER)", 0 )
GAME( 2007, mmpork, 0, cavesh3, cavesh3, espgal2, ROT270, "Cave", "Muchi Muchi Pork! (2007/ 4/17 MASTER VER.)", 0 )
GAME( 2007, mmmbanc, 0, cavesh3, cavesh3, espgal2, ROT0, "Cave", "Medal Mahjong Moukari Bancho (2007/06/05 MASTER VER.)", GAME_NOT_WORKING )
/*
Known versions of games on this hardware (* denotes undumped):
Mushihime-Sama
"2004/10/12 MASTER VER" - broken
"2004/10/12 MASTER VER." - fixed 1
* "2004/10/12.MASTER VER." - fixed 2
Puzzle! Mushihime-Tama
"2005/09/09 MASTER VER"
Espgaluda II
"2005/11/14 MASTER VER"
Ibara
"2005/03/22 MASTER VER.."
Ibara Kuro Black Label
"2006/02/06 MASTER VER."
"2006/02/06. MASTER VER."
Pink Sweets: Ibara Sorekara
"2006/04/06 MASTER VER."
"2006/04/06 MASTER VER..."
"2006/04/06 MASTER VER...."
* "2006/05/18 MASTER VER." - Removes infinite lives trick, fixes some bugs
* "2006/xx/xx MASTER VER"
"2006/xx/xx MASTER VER."
Mushihime-Sama Futari Ver 1.0
* "2006/10/23 MASTER VER" - Ultra unlockable
"2006/10/23 MASTER VER." - Ultra unlockable
* "2006/10/23.MASTER VER." - Cannot unlock ultra
Mushihime-Sama Futari Ver 1.5
"2006/12/8 MASTER VER 1.54"
"2006/12/8.MASTER VER.1.54."
Mushihime-Sama Futari Black Label
"2007/12/11 BLACK LABEL VER"
* "2009/11/17 INTERNATIONAL BL" ("Another Ver" on title screen)
Muchi Muchi Pork!
"2007/ 4/17 MASTER VER."
* "2007/ 4/17 MASTER VER.."
Medal Mahjong Moukari Bancho
"2007/06/05 MASTER VER."
Deathsmiles
"2007/10/09 MASTER VER"
Deathsmiles Mega Black Label
* "2008/10/06 MEGABLACK LABEL VER"
Do-Don-Pachi Dai-Fukkatsu Ver 1.0
* "2008/05/16 MASTER VER"
Do-Don-Pachi Dai-Fukkatsu Ver 1.5
* "2008/06/23 MASTER VER 1.5"
Do-Don-Pachi Dai-Fukkatsu Black Label
* "2010/1/18 BLACK LABEL"
Akai Katana
* "2010/ 8/13 MASTER VER."
* Home/Limited version, unknown date line, different gameplay from regular version, doesn't accept coins - permanent freeplay
Mushihime-Sama Ver 1.5 Matsuri Version
* 2011/5/23 CAVEMATSURI VER 1.5
--- Titles below are known versions from Cave's fan festivals and are likely in house only versions. Dates are the Cave festival shown ---
Shown Title Notes
-----------------------------------------------------------------------------------------------------------------------
12/28/06 Mushihime-Sama Ver 1.5 ~Blue Label~ No Maniac mode.
12/28/06 Mushihime-Sama Futari Ver 1.5 ~Red Label~ 3 PCBs were given away to top scorers.
12/28/06 Mushihime-Sama Futari Ver 1.01
12/30/07 Muchi Muchi Pork! Dai Cave Festival ~Special Version~ Includes Pink Sweets bosses at the end of each stage.
12/30/07 Deathsmiles: Dai Cave Festival ~Special Version~ Inclueds a rank 99 difficulty. Prototype for DSMBL.
08/15/08 Do-Don-Pachi Dai-Fukkatsu Ver 1.5 ~Special~ Power-style only.
10/20/10 Do-Don-Pachi Dai-Fukkatsu Ver 1.51
*/
// #included multiple times from cavesh3.c
#ifdef FLIPX
#define LOOP_INCREMENTS \
bmp++; \
gfx2--; \
#else
#define LOOP_INCREMENTS \
bmp++; \
gfx2++; \
#endif
const void FUNCNAME(bitmap_rgb32 *bitmap,
const rectangle *clip,
UINT32 *gfx,
int src_x,
int src_y,
int dst_x_start,
int dst_y_start,
int dimx,
int dimy,
int flipy,
const UINT8 s_alpha,
const UINT8 d_alpha,
// int tint,
clr_t *tint_clr )
{
UINT32* gfx2;
int y, yf;
#ifndef REALLY_SIMPLE
colour_t s_clr;
#endif
#ifdef BLENDED
colour_t d_clr;
#if _SMODE == 2
#if _DMODE != 0
colour_t clr0;
#endif
#elif _SMODE == 0
#if _DMODE != 0
#if _DMODE != 5
#if _DMODE != 1
colour_t clr0;
#endif
#endif
#endif
#else
colour_t clr0;
#endif
#endif
#ifdef REALLY_SIMPLE
#if TRANSPARENT == 1
UINT32 pen;
#endif
#else
UINT32 pen;
#endif
UINT32 *bmp;
#ifdef FLIPX
src_x += (dimx-1);
#endif
if (flipy) { yf = -1; src_y += (dimy-1); }
else { yf = +1; }
int starty = 0;
int dst_y_end = dst_y_start+dimy;
if (dst_y_start < clip->min_y)
starty = clip->min_y - dst_y_start;
if (dst_y_end > clip->max_y)
dimy -= (dst_y_end-1) - clip->max_y;
// check things are safe to draw (note, if the source would wrap round an edge of the 0x2000*0x1000 vram we don't draw.. not sure what the hw does anyway)
#ifdef FLIPX
if ((src_x &0x1fff) < ((src_x-(dimx-1))&0x1fff))
{
printf("sprite gets clipped off src_x %04x dimx %04x\n", src_x, dimx);
return;
}
#else
if ((src_x &0x1fff) > ((src_x+(dimx-1))&0x1fff))
{
printf("sprite gets clipped off src_x %04x dimx %04x\n", src_x, dimx);
return;
}
#endif
int startx = 0;
int dst_x_end = dst_x_start+dimx;
if (dst_x_start < clip->min_x)
startx = clip->min_x - dst_x_start;
if (dst_x_end > clip->max_x)
dimx -= (dst_x_end-1) - clip->max_x;
#ifdef BLENDED
#if _SMODE == 0
#if _DMODE == 0
UINT8* salpha_table = cavesh3_colrtable[s_alpha];
UINT8* dalpha_table = cavesh3_colrtable[d_alpha];
#endif
#if _DMODE == 5
UINT8* salpha_table = cavesh3_colrtable[s_alpha];
#endif
#if _DMODE == 1
UINT8* salpha_table = cavesh3_colrtable[s_alpha];
#endif
#endif
#if _SMODE == 2
#if _DMODE == 0
UINT8* dalpha_table = cavesh3_colrtable[d_alpha];
#endif
#endif
#endif
for (y = starty; y < dimy; y++)
{
//bmp = BITMAP_ADDR32(bitmap, dst_y_start + y, dst_x_start+startx);
bmp = &bitmap->pix32(dst_y_start + y, dst_x_start+startx);
int ysrc_index = ((src_y + yf * y) & 0x0fff) * 0x2000;
gfx2 = gfx + ysrc_index;
#ifdef FLIPX
gfx2 += (src_x-startx);
#else
gfx2 += (src_x+startx);
#endif
const UINT32* end = bmp+(dimx-startx);
while (bmp<end)
{
/*************** REALLY SIMPLE INNER LOOP, NON-BLENDED, NON-TINTED, SIMPLEST CASE ****************/
#ifdef REALLY_SIMPLE
#if TRANSPARENT == 1
pen = *gfx2;
if (pen & 0x20000000)
{
*bmp = pen;
#else
*bmp = *gfx2;
#endif
/*************** REGULAR INNER LOOPS ****************/
#else // NOT REALLY_SIMPLE
pen = *gfx2;
#if TRANSPARENT == 1
if (pen & 0x20000000)
{
#endif
// convert source to clr
pen_to_clr(pen, &s_clr.trgb);
//s_clr.u32 = (pen >> 3); // using the union is actually significantly slower than our pen_to_clr to function!
// source * intesity and clamp
#ifdef TINT
clr_mul(&s_clr.trgb, tint_clr);
#endif
#ifdef BLENDED
// convert destination to clr
pen_to_clr(*bmp, &d_clr.trgb);
//d_clr.u32 = *bmp >> 3; // using the union is actually significantly slower than our pen_to_clr to function!
#if _SMODE == 0
//g_profiler.start(PROFILER_USER7);
#if _DMODE == 0
//g_profiler.start(PROFILER_USER1);
// this is used extensively in the games (ingame, futari title screens etc.)
s_clr.trgb.r = cavesh3_colrtable_add[salpha_table[(s_clr.trgb.r)]][dalpha_table[(d_clr.trgb.r)]];
s_clr.trgb.g = cavesh3_colrtable_add[salpha_table[(s_clr.trgb.g)]][dalpha_table[(d_clr.trgb.g)]];
s_clr.trgb.b = cavesh3_colrtable_add[salpha_table[(s_clr.trgb.b)]][dalpha_table[(d_clr.trgb.b)]];
#elif _DMODE == 1
//g_profiler.start(PROFILER_USER2);
// futari ~7%
s_clr.trgb.r = cavesh3_colrtable_add[salpha_table[(s_clr.trgb.r)]][cavesh3_colrtable[(s_clr.trgb.r)][(d_clr.trgb.r)]];
s_clr.trgb.g = cavesh3_colrtable_add[salpha_table[(s_clr.trgb.g)]][cavesh3_colrtable[(s_clr.trgb.g)][(d_clr.trgb.g)]];
s_clr.trgb.b = cavesh3_colrtable_add[salpha_table[(s_clr.trgb.b)]][cavesh3_colrtable[(s_clr.trgb.b)][(d_clr.trgb.b)]];
#elif _DMODE == 2
//g_profiler.start(PROFILER_USER3);
clr_mul_fixed(&clr0.trgb, s_alpha, &s_clr.trgb);
clr_add_with_clr_square(&s_clr.trgb, &clr0.trgb, &d_clr.trgb);
#elif _DMODE == 3
//g_profiler.start(PROFILER_USER4);
clr_mul_fixed(&clr0.trgb, s_alpha, &s_clr.trgb);
clr_add(&s_clr.trgb, &clr0.trgb, &d_clr.trgb);
#elif _DMODE == 4
//g_profiler.start(PROFILER_USER5);
clr_mul_fixed(&clr0.trgb, s_alpha, &s_clr.trgb);
clr_add_with_clr_mul_fixed_rev(&s_clr.trgb, &clr0.trgb, d_alpha, &d_clr.trgb);
#elif _DMODE == 5
// futari black character select ~13%
//g_profiler.start(PROFILER_USER6);
s_clr.trgb.r = cavesh3_colrtable_add[salpha_table[(s_clr.trgb.r)]][cavesh3_colrtable_rev[(s_clr.trgb.r)][(d_clr.trgb.r)]];
s_clr.trgb.g = cavesh3_colrtable_add[salpha_table[(s_clr.trgb.g)]][cavesh3_colrtable_rev[(s_clr.trgb.g)][(d_clr.trgb.g)]];
s_clr.trgb.b = cavesh3_colrtable_add[salpha_table[(s_clr.trgb.b)]][cavesh3_colrtable_rev[(s_clr.trgb.b)][(d_clr.trgb.b)]];
#elif _DMODE == 6
//g_profiler.start(PROFILER_USER7);
clr_mul_fixed(&clr0.trgb, s_alpha, &s_clr.trgb);
clr_add_with_clr_mul_rev_square(&s_clr.trgb, &clr0.trgb, &d_clr.trgb);
#elif _DMODE == 7
//g_profiler.start(PROFILER_USER8);
clr_mul_fixed(&clr0.trgb, s_alpha, &s_clr.trgb);
clr_add(&s_clr.trgb, &clr0.trgb, &d_clr.trgb);
#endif
//g_profiler.stop();
#elif _SMODE == 1
//g_profiler.start(PROFILER_USER6);
clr_square(&clr0.trgb, &s_clr.trgb);
#elif _SMODE == 2
// g_profiler.start(PROFILER_USER4);
#if _DMODE == 0
// this is used heavily on espgal2 highscore screen (~28%) optimized to avoid use of temp clr0 variable
s_clr.trgb.r = cavesh3_colrtable_add[cavesh3_colrtable[(d_clr.trgb.r)][(s_clr.trgb.r)]][dalpha_table[(d_clr.trgb.r)]];
s_clr.trgb.g = cavesh3_colrtable_add[cavesh3_colrtable[(d_clr.trgb.g)][(s_clr.trgb.g)]][dalpha_table[(d_clr.trgb.g)]];
s_clr.trgb.b = cavesh3_colrtable_add[cavesh3_colrtable[(d_clr.trgb.b)][(s_clr.trgb.b)]][dalpha_table[(d_clr.trgb.b)]];
#elif _DMODE == 1
clr_mul_3param(&clr0.trgb, &s_clr.trgb, &d_clr.trgb);
clr_add_with_clr_mul_3param(&s_clr.trgb, &clr0.trgb, &d_clr.trgb, &s_clr.trgb);
#elif _DMODE == 2
clr_mul_3param(&clr0.trgb, &s_clr.trgb, &d_clr.trgb);
clr_add_with_clr_square(&s_clr.trgb, &clr0.trgb, &d_clr.trgb);
#elif _DMODE == 3
clr_mul_3param(&clr0.trgb, &s_clr.trgb, &d_clr.trgb);
clr_add(&s_clr.trgb, &clr0.trgb, &d_clr.trgb);
#elif _DMODE == 4
clr_mul_3param(&clr0.trgb, &s_clr.trgb, &d_clr.trgb);
clr_add_with_clr_mul_fixed_rev(&s_clr.trgb, &clr0.trgb, d_alpha, &d_clr.trgb);
#elif _DMODE == 5
clr_mul_3param(&clr0.trgb, &s_clr.trgb, &d_clr.trgb);
clr_add_with_clr_mul_rev_3param(&s_clr.trgb, &clr0.trgb, &d_clr.trgb, &s_clr.trgb);
#elif _DMODE == 6
clr_mul_3param(&clr0.trgb, &s_clr.trgb, &d_clr.trgb);
clr_add_with_clr_mul_rev_square(&s_clr.trgb, &clr0.trgb, &d_clr.trgb);
#elif _DMODE == 7
clr_mul_3param(&clr0.trgb, &s_clr.trgb, &d_clr.trgb);
clr_add(&s_clr.trgb, &clr0.trgb, &d_clr.trgb);
#endif
//g_profiler.stop();
#elif _SMODE == 3
//g_profiler.start(PROFILER_USER1);
clr_copy(&clr0.trgb, &s_clr.trgb);
#elif _SMODE == 4
//g_profiler.start(PROFILER_USER2);
clr_mul_fixed_rev(&clr0.trgb, s_alpha, &s_clr.trgb);
#elif _SMODE == 5
//g_profiler.start(PROFILER_USER3);
clr_mul_rev_square(&clr0.trgb, &s_clr.trgb);
#elif _SMODE == 6
//g_profiler.start(PROFILER_USER4);
clr_mul_rev_3param(&clr0.trgb, &s_clr.trgb, &d_clr.trgb);
#elif _SMODE == 7
//g_profiler.start(PROFILER_USER5);
clr_copy(&clr0.trgb, &s_clr.trgb);
#endif
// smode 0/2 cases are already split up and handled above.
#if _SMODE != 2
#if _SMODE != 0
#if _DMODE == 0
clr_add_with_clr_mul_fixed(&s_clr.trgb, &clr0.trgb, d_alpha, &d_clr.trgb);
#elif _DMODE == 1
clr_add_with_clr_mul_3param(&s_clr.trgb, &clr0.trgb, &d_clr.trgb, &s_clr.trgb);
#elif _DMODE == 2
clr_add_with_clr_square(&s_clr.trgb, &clr0.trgb, &d_clr.trgb);
#elif _DMODE == 3
clr_add(&s_clr.trgb, &clr0.trgb, &d_clr.trgb);
#elif _DMODE == 4
clr_add_with_clr_mul_fixed_rev(&s_clr.trgb, &clr0.trgb, d_alpha, &d_clr.trgb);
#elif _DMODE == 5
clr_add_with_clr_mul_rev_3param(&s_clr.trgb, &clr0.trgb, &d_clr.trgb, &s_clr.trgb);
#elif _DMODE == 6
clr_add_with_clr_mul_rev_square(&s_clr.trgb, &clr0.trgb, &d_clr.trgb);
#elif _DMODE == 7
clr_add(&s_clr.trgb, &clr0.trgb, &d_clr.trgb);
#endif
//g_profiler.stop();
#endif
#endif
#endif
// write result
*bmp = clr_to_pen(&s_clr.trgb)|(pen&0x20000000);
//*bmp = (s_clr.u32<<3)|(pen&0x20000000); // using the union is actually significantly slower than our clr_to_pen function!
#endif // END NOT REALLY SIMPLE
#if TRANSPARENT == 1
}
#endif
LOOP_INCREMENTS
}
}
// g_profiler.stop();
}
#undef LOOP_INCREMENTS
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment