/*
 * $Id: ks_nes.h,v 1.2 2004/02/12 22:54:41 tong Exp $
 */
/*
 * ファミコンエミュレータシステム CPU メモリマップ
 * 動物の森 スペースワールド暫定版 (アドレス固定あり)
 * 暫定!! 暫定!! 暫定!! 暫定!! 暫定!! 暫定!! 暫定!! 暫定!!
 *
 * 本体内蔵メモリに、emu-code + emu-data + audio-code + audio-data などを relocatable でロード。
 * 拡張メモリ部分には、noise data + header + nes_rom_data + bss とする。
 *
 */

/* 情開サイドで 単体のエミュレータ実験を行う場合、EAD_KAWASEDO を定義する。
 * SRD 動物の森 システムへの組み込みのときには 定義しない。
 */

#ifndef __KS_NES_H_
#define __KS_NES_H_

#include "sched.h"
#ifndef INCLUDED_KS_RFC_H
#define INCLUDED_KS_RFC_H
//#if defined(U_hayakawa_U)
//#include "../forest_lib/MFC/Test/ks_rfc.inc"	/* SIZEOF_UCODEWK */
//#else /* defined(U_hayakawa_U) */
#include "../forest_lib/MFC/ks_rfc.inc"	/* SIZEOF_UCODEWK */
//#endif /* defined(U_hayakawa_U) */
#endif

#ifdef _LANGUAGE_C_PLUS_PLUS
extern "C" {
#endif
#if 0
}
#endif

extern void ks_nes_wait_rsp(void);
extern void ks_nes_audio_cleanup(void);
extern void ks_nes_cleanup(void);
extern void ks_nes_audio_main(void);
extern void ks_nes_handshake(u16 *n64_buttons);
extern void ks_nes_maketask(OSTask *taskp, u16 *cfbp);
extern void ks_nes_audio_init(u8 *noise_ptr);
extern void ks_nes_init(rfcstate_object *rfcstate_objectp, u8 *headerp, u8 *ucode_workp, u8 *nesromstartp);
extern void ks_nes_reset(void);
extern void ks_nes_clear_wram(void);
extern void ks_nes_clear_bbram(void);

#define SIZEOF_RFCSTATE		((sizeof(rfcstate_object) + 0xf) & ~0xf)	/* 念のため 16bytes align しておく。*/
#define SIZEOF_EMUHEADER	(0x10 + 0x200) /* 用途不明 */

extern s8 ks_nes_speed;		/* １フレームでの動作回数 */
extern u8 ks_nes_speed_x2_alt; /* !0:倍速モードの動作を１倍＋３倍にする */
extern u8 ks_nes_no9over_mode;	/* !0:９オーバーでも表示する */
extern u8 ks_nes_wram_fill_data;

extern void
ks_nes_autofire_change(
    int padno,                  /* コントローラ番号 */
    u32 button,                 /* 変更するボタン論理和 */
    u32 maxfire                 /* 最高連射 0:30 1:15 2:7.5 3:なし */
    );
extern void
ks_nes_autofire_set(
    int padno,                  /* コントローラ番号 */
    u32 button,                 /* 変更するボタン論理和 */
    u32 maxfire                 /* 連射 0:30 1:15 2:7.5 3:なし */
    );

#if 0
{
#endif
#ifdef _LANGUAGE_C_PLUS_PLUS
} /* extern "C" */
#endif

#endif /* __KS_NES_H_ */
