improved debug
[fceu.git] / ncpu.h
1 #ifndef NES_H
2 #define NES_H
3
4 //#define SECTION_FAST //.section emu.fast, "awx"
5 //#define SECTION_SLOW //.section emu.slow, "awx"
6 //#define SECTION_HEAD //.section emu.head, "awx"
7
8 #define ALIGN .align 4
9 #define SECTION_DATA .data
10 #define SECTION_TEXT .text
11
12 /*
13  * 6502 ¤Î¥ì¥¸¥¹¥¿
14  *
15  * A ¤Ï¾ï¤Ë 24 ¥Ó¥Ã¥È¥·¥Õ¥È¤·¤Æ¤ª¤¯
16  * P ¤Ï2¤Ä¤Ëʬ¤±¤ë¡£
17  * NZ¤Ï¤Û¤È¤ó¤É¤ÎÌ¿Î᤬Êѹ¹¤¹¤ë¤Î¤Ç¡¤NZ¤Î¸µ¤Ë¤Ê¤ëÃͤòÊݸ
18  * »Ä¤ê¤Ï¾¤Î¾ì½ê¤ËÃÖ¤¯
19  *
20  * S ¤Ï24¥Ó¥Ã¥È¥·¥Õ¥È¤·¤Æ¤ª¤¯
21  * ¤³¤ì¤Ç;¤Ã¤Æ²¼¤Î¥Ó¥Ã¥È¤Ë P ¤Î»Ä¤ê¤òÃÖ¤¯(VBDI)
22  * ¤µ¤é¤Ë;¤Ã¤Æ¤ë¤È¤³¤í¤Ë¤Ï³ä¤ê¹þ¤ß¤Ë´Ø¤¹¤ë¥Õ¥é¥°¤òÃÖ¤¯
23  *
24  * PC ¤ÏROMÆâ¤Î¥¢¥É¥ì¥¹¤ËÊÑ´¹¤·¤Æ¤ª¤¯
25  * ¤³¤Î¾ì¹ç¤Ï¶­³¦¥Á¥§¥Ã¥¯¤ò¤·¤¿¤Û¤¦¤¬¤¤¤¤¤Î¤À¤¬¡¤´Êñ¤Ç¤Ï¤Ê¤¤
26  * ËÜÅö¤Î PC ¤òÆÀ¤ë¤¿¤á¤Ë¤Ï¸½ºß¤Î¥Ð¥ó¥¯¤ÎÀèƬ¥¢¥É¥ì¥¹¤ò°ú¤±¤Ð¤è¤¤
27  *
28  * I just love the above comments :)
29  */
30
31 //                              // offs in nes_registers
32 #define REG_A  r4               // 00
33 #define REG_X  r5               // 04
34 #define REG_Y  r6               // 08
35 #define REG_PC r7               // 0c
36 #define REG_S  r8               // 10
37 #define REG_P_REST r8
38 #define REG_NZ  r9              // 14
39 #define REG_ADDR r10            // 18
40 #define REG_CYCLE r11           // 1c
41 #define REG_OP_TABLE r12        // 20
42
43
44 /*
45  * REG_P_REST ¤Ë¤Ï³Æ¼ï¥Õ¥é¥°¤òÃÖ¤¯
46  *
47  * 0
48  * FEDCBA98 76543210
49  * |||||||| |||||||+---C ¥­¥ã¥ê¡¼¤Þ¤¿¤Ï¥Ü¥í¡¼¤Ê¤·
50  * |||||||| ||||||+---NMI¤ÎȯÀ¸
51  * |||||||| |||||+---I ³ä¤ê¹þ¤ßµö²Ä
52  * |||||||| ||||+---D ½½¿Ê¥â¡¼¥É
53  * |||||||| |||+---B
54  * |||||||| ||+---IRQ¤ÎȯÀ¸
55  * |||||||| |+---V ¥ª¡¼¥Ð¡¼¥Õ¥í¡¼
56  * |||||||| +---$2005/$2006 ¥È¥°¥ë¥Õ¥é¥°
57  * ||||||||
58  * |||||||+---$2000[2] 32¥¤¥ó¥¯¥ê¥á¥ó¥È
59  * ||||||+---$2000[3] ¥¹¥×¥é¥¤¥È¥¢¥É¥ì¥¹ÁªÂò
60  * |||||+---$2000[4] ¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É¥¢¥É¥ì¥¹ÁªÂò
61  * ||||+---$2000[5] ¥¹¥×¥é¥¤¥È¥µ¥¤¥º
62  * |||+---̤»ÈÍÑ
63  * ||+---$2000[7] NMIµö²Ä
64  * |+---$2001[3] ¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É¤òÉÁ²è
65  * +---$2001[4] ¥¹¥×¥é¥¤¥È¤òÉÁ²è
66  *
67  * 1
68  * FEDCBA9876543210
69  * |||||||||||||||+---$2002[4] VRAM¤Ë½ñ¤­¹þ¤ß²Ä¡©
70  * ||||||||||||||+---$2002[5] ¥¹¥×¥é¥¤¥È¤¬Â¿¤¹¤®
71  * |||||||||||||+---$2002[6] ¥¹¥×¥é¥¤¥È¥Ò¥Ã¥È(¼ÂÁõ¤Ç¤­¤ë¤Î¤«¡©)
72  * ||||||||||||+---$2002[7] VBL
73  * |||||||||||+---DMC³ä¤ê¹þ¤ßȯÀ¸
74  * ||||||||||+---VRAM¤ò»ý¤Ã¤Æ¤¤¤ë
75  * ||||||||++---̤»ÈÍÑ
76  * ++++++++---S ¥¹¥¿¥Ã¥¯¥Ý¥¤¥ó¥¿
77  *
78  * note: fceu uses this differently
79  * [7:0]   - interrupt flags (same as above)
80  * [15:8]  - FCEU IRQ pending sources
81  * [16]    - a flag which indicates that MapIRQHook is not null
82  * [23:17] - unused
83  * [31:24] - stack pointer
84  */
85
86
87 /*
88  * REG_P_REST ¤Ç»È¤¦¥Õ¥é¥°¡£´ðËÜŪ¤ËP¤ÈƱ¤¸°ÌÃ֤ˤ¢¤ë
89  */
90 #define P_REST_V_FLAG 0x40
91 #define P_REST_B_FLAG 0x10
92 #define P_REST_D_FLAG 0x08
93 #define P_REST_I_FLAG 0x04
94 #define P_REST_C_FLAG 0x01
95 #define P_REST_FLAGS  0x5D
96
97 /*
98  * ³ä¤ê¹þ¤ß¤¬È¯À¸¤¹¤ë¤È¥»¥Ã¥È¤µ¤ì¤ë
99  */
100 // will be using FCE flags instead of this
101 // #define P_REST_INT_PENDING 0x20
102 // #define P_REST_NMI_PENDING 0x02
103
104 // #define ASSERT_NMI   orr     REG_P_REST, REG_P_REST, #P_REST_NMI_PENDING
105 // #define ASSERT_INT   orr     REG_P_REST, REG_P_REST, #P_REST_INT_PENDING
106
107
108 /*
109  * 6502 ¤ÎËÜÅö¤Î¥Õ¥é¥°
110  */
111 #define P_N_FLAG 0x80
112 #define P_V_FLAG 0x40
113 #define P_R_FLAG 0x20
114 #define P_B_FLAG 0x10
115 #define P_D_FLAG 0x08
116 #define P_I_FLAG 0x04
117 #define P_Z_FLAG 0x02
118 #define P_C_FLAG 0x01
119
120 #define NMI_VECTOR   6
121 #define RESET_VECTOR 4
122 #define IRQ_VECTOR   2
123
124 #endif
125