/* namcoic.h

Custom Chips:                       Final Lap   Assault     LuckyWld    System21    NA1/2       NB1/2
    C45     Land Generator            *                       *
    C65     I/O Controller            *           *
    C68                                                       *           *
    C70                                                                               *
    C95                               *           *
    C102    ROZ:Memory Access Control             *
    C106    OBJ:X-Axis Zoom Control   *           *
    C107    Land Line Buffer          *
    C116    Screen Waveform Generator *           *           *                                   *
    C121    Yamaha YM2151 Sound Gen   *           *           *
    C123    GFX:Tile Mem Decoder      *           *           *                                   *
    C134    OBJ:Address Generator     *           *
    C135    OBJ:Line matching         *           *
    C137    Clock Generator IC        *           *           *           *                       *
    C138                                                                  *
    C139    Serial I/F Controller     *           *           *           *
    C140    24 Channel PCM            *           *           *
    C145    GFX:Tile Memory Access    *           *           *                                   *
    C146    OBJ:Line Buf Steering     *           *
    C148    CPU Bus Manager           *           *           *           *
    C149    Mouse/Trackball Decoder   *           *           *           *
    C156    Pixel Stream Combo        *           *           *                                   *
    C160    Control                                                                               *
    C165                                                                  *
    C169    ROZ(B)                                            *                                   *
    C187                                                      *           *                       *
    C210                                                                              *
    C215                                                                              *
    C218                                                                              *
    C219                                                                              *
    C329    CPU?                                                                                  *
    C347    GfxObj                                                                                *
    C352    PCM                                                                                   *
    C355    Motion Obj(B)                                     *           *                       *
    C373    LAND-related                                      *
    C382                                                                                          *
    C383                                                                                          *
    C384    GFX(3)                                                                                *
    C385                                                                                          *
    C390    Key Custom                                                                            *


General Support
---------------
C65  - This is the I/O Microcontroller, handles all input/output devices. 63705 uC, CPU4 in Namco System2.
C137 - Takes System clock and generates all sub-system clocks, doesnt need emulation, not accessed via CPU
C139 - Serial Interface Controller
C148 - Does some Memory Decode, Interrupt Handling, 3 bit PIO port, Bus Controller
C149 - Does decoding of mouse/trackball input streams for the I/O Controller. (Offset Square wave)


Tile Fields Static/Scrolled
---------------------------
Combination of these two devices and associated RAM & TileGFX produces a pixel stream that is fed
into the Pixel stream decoder.

C145 - Tile Screen Memory Access controller
C123 - Tile Memory decoder Part 1, converts X,Y,Tile into character ROM address index


Pixel Stream Decode
-------------------
These two devices take the pixel streams from the tilefield generator and the associated graphics board
and combine them to form an RGB data stream that is fed to the monitor.

C156 - Pixel stream combiner
Takes tile field & graphics board streams and generates the priorisied pixel, then does the lookup to
go from palettised to 24bit RGB pixel.

C116 - Screen Waveform Generator
Takes RGB24 pixel stream from C156 and generates the waveform signals for the monitor, also generates
the line interrupt and controls screen blanking,shift, etc.

Object Control
--------------
C106 - Generates memory output clocks to generate X-Axis Zoom for Line Buffer Writes
C134 - Object Memory Address Generator. Sequences the sprite memory contents to the hardware.
C135 - Checks is object is displayed on Current output line.
C146 - Steers the Decode Object Pixel data to the correct line buffer A or B

ROZ
---
C102 - Controls CPU access to ROZ Memory Area.
*/

/***********************************************************************************/

/*----------- defined in drivers/namcoic.c -----------*/

int namco_tilemap_init(
		int gfxbank, void *pMaskROM,
		void (*cb)( UINT16 code, int *gfx, int *mask) );
void namco_tilemap_draw( mame_bitmap *bitmap, const rectangle *cliprect, int pri );
void namco_tilemap_invalidate( void );
WRITE16_HANDLER( namco_tilemapvideoram16_w );
READ16_HANDLER( namco_tilemapvideoram16_r );
WRITE16_HANDLER( namco_tilemapcontrol16_w );
READ16_HANDLER( namco_tilemapcontrol16_r );

READ32_HANDLER( namco_tilemapvideoram32_r );
WRITE32_HANDLER( namco_tilemapvideoram32_w );
READ32_HANDLER( namco_tilemapcontrol32_r );
WRITE32_HANDLER( namco_tilemapcontrol32_w );

READ32_HANDLER( namco_tilemapvideoram32_le_r );
WRITE32_HANDLER( namco_tilemapvideoram32_le_w );
READ32_HANDLER( namco_tilemapcontrol32_le_r );
WRITE32_HANDLER( namco_tilemapcontrol32_le_w );

/***********************************************************************************/

/* Namco System II Sprite Rendering */
void namcos2_draw_sprites( mame_bitmap *bitmap, const rectangle *cliprect, int pri, int control );

void namcos2_draw_sprites_metalhawk( mame_bitmap *bitmap, const rectangle *cliprect, int pri );

/***********************************************************************************/
/* C355 Motion Object Emulation */

/* for palXOR, supply either 0x0 (normal) or 0xf (palette mapping reversed) */
void namco_obj_init( int gfxbank, int palXOR, int (*code2tile)( int code ) );
void namco_obj_draw( mame_bitmap *bitmap, const rectangle *cliprect, int pri );

WRITE16_HANDLER( namco_obj16_w );
READ16_HANDLER( namco_obj16_r );

WRITE32_HANDLER( namco_obj32_w );
READ32_HANDLER( namco_obj32_r );
WRITE32_HANDLER( namco_obj32_le_w );
READ32_HANDLER( namco_obj32_le_r );

WRITE16_HANDLER( namco_spritepos16_w );
READ16_HANDLER( namco_spritepos16_r );

WRITE32_HANDLER( namco_spritepos32_w );
READ32_HANDLER( namco_spritepos32_r );

/***********************************************************************************/
/* C169 ROZ Layer Emulation */

int namco_roz_init( int gfxbank, int maskregion );
void namco_roz_draw( mame_bitmap *bitmap, const rectangle *cliprect, int pri );

READ16_HANDLER( namco_rozcontrol16_r );
WRITE16_HANDLER( namco_rozcontrol16_w );
READ16_HANDLER( namco_rozbank16_r );
WRITE16_HANDLER( namco_rozbank16_w );
READ16_HANDLER( namco_rozvideoram16_r );
WRITE16_HANDLER( namco_rozvideoram16_w );

READ32_HANDLER( namco_rozcontrol32_r );
WRITE32_HANDLER( namco_rozcontrol32_w );
READ32_HANDLER( namco_rozcontrol32_le_r );
WRITE32_HANDLER( namco_rozcontrol32_le_w );
READ32_HANDLER( namco_rozbank32_r );
WRITE32_HANDLER( namco_rozbank32_w );
READ32_HANDLER( namco_rozvideoram32_r );
WRITE32_HANDLER( namco_rozvideoram32_w );
READ32_HANDLER( namco_rozvideoram32_le_r );
WRITE32_HANDLER( namco_rozvideoram32_le_w );

/***********************************************************************************/
/* C45 Land (Road) Emulation */

int namco_road_init( int gfxbank );
void namco_road_set_transparent_color(pen_t pen);
void namco_road_draw( mame_bitmap *bitmap, const rectangle *cliprect, int pri );

READ16_HANDLER( namco_road16_r );
WRITE16_HANDLER( namco_road16_w );

/***********************************************************************************/
