/************************************************************************
 *									*
 *	スター フォックス の ＤＭＡ					*
 *				1996年 9月13日(金曜日) 09時10分57秒 JST	*
 ************************************************************************/
#ifndef _FOX_STD_DMA_H_
#define _FOX_STD_DMA_H_

#ifdef __cplusplus
extern "C" {
#endif

/*======================================================================*
 *									*
 *	セグメント 宣言							*
 *									*
 *======================================================================*/
EXTERN_DEFSEG(dmadata);
EXTERN_DEFSEG(msgusa);

EXTERN_DEFSEG(i1prog);
EXTERN_DEFSEG(i2prog);
EXTERN_DEFSEG(i3prog);
EXTERN_DEFSEG(i4prog);
EXTERN_DEFSEG(i5prog);
EXTERN_DEFSEG(i6prog);
/*
EXTERN_DEFSEG(cnprog);
EXTERN_DEFSEG(asprog);
EXTERN_DEFSEG(sxprog);
EXTERN_DEFSEG(zoprog);
EXTERN_DEFSEG(clprog);
EXTERN_DEFSEG(foprog);
*/
EXTERN_DEFSEG(tomprog);   /* TITLE & OPTION & MAP */
EXTERN_DEFSEG(endprog);   /* エンディング */
EXTERN_DEFSEG(shpprog);   /* シェイプを見る */

EXTERN_DEFSEG(jtshape);
EXTERN_DEFSEG(jtsshape);
EXTERN_DEFSEG(jtgshape);
EXTERN_DEFSEG(awshape);
EXTERN_DEFSEG(tkshape);
EXTERN_DEFSEG(subshape);
EXTERN_DEFSEG(wtshape);
EXTERN_DEFSEG(npcshape);
EXTERN_DEFSEG(e1shape);
EXTERN_DEFSEG(e2shape);
EXTERN_DEFSEG(gfshape);
EXTERN_DEFSEG(cnshape);
EXTERN_DEFSEG(asshape);
EXTERN_DEFSEG(tijshape);
EXTERN_DEFSEG(tishape);
EXTERN_DEFSEG(tib1shape);
EXTERN_DEFSEG(tib2shape);
EXTERN_DEFSEG(tib3shape);
EXTERN_DEFSEG(tib4shape);
EXTERN_DEFSEG(sxshape);
EXTERN_DEFSEG(szshape);
EXTERN_DEFSEG(acshape);
EXTERN_DEFSEG(mpshape);
EXTERN_DEFSEG(dmshape);
EXTERN_DEFSEG(vsshape);
EXTERN_DEFSEG(sbshape);
EXTERN_DEFSEG(bmshape);
EXTERN_DEFSEG(bm03shape);
EXTERN_DEFSEG(bbshape);
EXTERN_DEFSEG(boshape);
EXTERN_DEFSEG(foshape);
EXTERN_DEFSEG(swshape);
EXTERN_DEFSEG(snshape);
EXTERN_DEFSEG(zoshape);
EXTERN_DEFSEG(ktshape);
EXTERN_DEFSEG(mcshape);
EXTERN_DEFSEG(wpshape);
EXTERN_DEFSEG(txtshape);
EXTERN_DEFSEG(mojishape);
EXTERN_DEFSEG(mojipshape);
EXTERN_DEFSEG(andshape);
EXTERN_DEFSEG(vtxshape);
EXTERN_DEFSEG(onshape);
EXTERN_DEFSEG(endshape);
EXTERN_DEFSEG(end1shape);
EXTERN_DEFSEG(end2shape);
EXTERN_DEFSEG(end3shape);
EXTERN_DEFSEG(trshape);

/*======================================================================*
 *									*
 *	ＤＭＡ ステージ ＆ ナンバー					*
 *									*
 *======================================================================*/
/* コース種類 */
#define DMA_DEMO    0
#define DMA_OPTION  1
#define DMA_MAP     2
#define DMA_OVER    3
#define DMA_END     4

#define DMA_CN      5
#define DMA_AS      6
#define DMA_TI      7
#define DMA_SX      8
#define DMA_AC      9
#define DMA_CL     10
#define DMA_FO     11
#define DMA_SB     12
#define DMA_SW     13
#define DMA_SN     14
#define DMA_ZO     15
#define DMA_AND    16
#define DMA_TR     17
#define DMA_BM     18
#define DMA_KT     19
#define DMA_BB     20
#define DMA_MC     21
#define DMA_BO     22
#define DMA_SZ     23
#define DMA_BM03   24

#define DMA_VS     50

#define DMA_ON     99

#define DMA_LKS    100

/*======================================================================*
 *									*
 *	ＤＭＡ ＤＡＴＡ 構造体						*
 *									*
 *======================================================================*/
typedef struct dma_rom_s {
    char		*rom_a;
    char		*rom_s;
    char		*rom_e;
    unsigned long	flg;
} dma_rom_t;

typedef struct dma_s {
    char	*ds;
    char	*de;
} dma_t;

typedef struct dma_bloc_s {
    dma_t	pr[0x4];
    dma_t	dt[0xf];
} dma_bloc_t;

/*======================================================================*
 *									*
 *	ＲＯＭアドレス ---> 圧縮ＲＯＭアドレス				*
 *									*
 *======================================================================*/
extern dma_rom_t dma_rom_ad[];

/*======================================================================*
 *									*
 *	ステージ データ ＤＭＡ 処理					*
 *									*
 *======================================================================*/
char dma_data(
    char	,
    char
);

/*======================================================================*
 *									*
 *	ＤＭＡ ＲＯＭ アドレス テーブル ＤＭＡ 処理			*
 *									*
 *======================================================================*/
void dma_rom_tbl(void);

#ifdef __cplusplus
}
#endif

#endif
