;
;	clipw65a.h
;
;	P/ECE W65C02 Emulator
;
;	CLiP - Common Library for P/ECE
;	Copyright (C) 2001-2005 Naoyuki Sawa
;
;	* Sun Apr 10 06:09:00 JST 2005 Naoyuki Sawa
;	- 作成開始。
;

; clipw65a.s、framw65a.sにインクルードして使います。

;****************************************************************************
;	W65C02構造体
;****************************************************************************

				; typedef struct _W65C02 {
#define _A_		 0	; 	unsigned char a;	/* + 0,1          AAAAAAAA */
#define C		 1	; 	unsigned char c;	/* + 1,1          -------C */
#define _NZ_		 2	; 	unsigned short nz;	/* + 2,2 N------- NZZZZZZZ */
#define DI		 4	; 	unsigned char di;	/* + 4,1          ----DI-- */
#define V		 5	; 	unsigned char v;	/* + 5,1          V------- */
#define _Y_		 6	; 	unsigned char y;	/* + 6,1          YYYYYYYY */
#define _X_		 7	; 	unsigned char x;	/* + 7,1          XXXXXXXX */
#define _PC_		 8	; 	unsigned short pc;	/* + 8,2 PCPCPCPC PCPCPCPC */
#define _S_		10	; 	unsigned char s;	/* +10,1          SSSSSSSS */
#define WI		11	; 	unsigned char wi;	/* +11,1          ------WI */
#define _CYCLE_		12	; 	int cycle;		/* +12,4 残りサイクル数    */
#define SIZEOF_W65C02	16	; } W65C02;			/* =16 */

#define CA		 0					/* + 0,2 -------C AAAAAAAA */

/* W65C02.wi */
#define IRQ_BIT		 0	; IRQフラグのビット位置
#define WAI_BIT		 1	; WAIフラグのビット位置

;****************************************************************************
;	レジスタ割り当て
;****************************************************************************

#define addr	r0	; 現在の命令のAddressModeを解決した、アドレスを保持します。
			; AddressMode()が設定し、Action()が参照します。
			; Operation()、その他のルーチンからは、原則として使用不可です。(例外あり)
			; AddressModeを伴わない命令においては、ワークレジスタとして使用可能です。
#define data	r1	; 現在の命令へ渡すデータ、命令からの戻りデータを保持します。
			; メモリ読み込みを伴う命令の場合、Action()が設定し、Operation()が参照します。
			; メモリ書き込みを伴う命令の場合、Operation()が設定し、Action()が参照します。
			; メモリ読み書き伴わない命令においては、ワークレジスタとして使用可能です。
#define pseq	r2	; 現在の命令に対応するw65c02seqエントリ内の走査ポインタです。
			; w65c02_run()が初期化し、w65c02_run()とAction()が使用します。
			; AddressMode()、Operation()、その他のルーチンからは、使用不可です。
#define s0	r3	; 汎用ワークレジスタです。
			; 一時的に実行コンテキストを抜けても、値が保持されます。
#define A	r4	; Aレジスタの値を保持します。($00..$FF)
#define Y	r5	; Xレジスタの値を保持します。($00..$FF)
#define X	r6	; Yレジスタの値を保持します。($00..$FF)
#define NZ	r7	; P(N,~Z)を表す値を保持します。(N------- NZZZZZZZ)
			; P(N)=NZ[15]|NZ[7], P(Z)=(NZ[6:0]==0?1:0)
;		r8	; 
;		r9	; 
#define PC	r10	; PCレジスタの値を保持します。($0000..$FFFF)
#define S	r11	; Sレジスタの値を保持します。($00..$FF)
#define t0	r12	; 汎用ワークレジスタです。
			; 一時的に実行コンテキストを抜けると、値は破壊されます。
#define t1	r13	; 汎用ワークレジスタです。
			; 一時的に実行コンテキストを抜けると、値は破壊されます。
#define CPU	r14	; w65c02構造体の先頭アドレスを保持します。
#define CYCLE	r15	; 残り実行サイクル数を保持します。

;****************************************************************************
;	
;****************************************************************************
