first debug version of ncpu
[fceu.git] / ncpu.h
diff --git a/ncpu.h b/ncpu.h
new file mode 100644 (file)
index 0000000..015320a
--- /dev/null
+++ b/ncpu.h
@@ -0,0 +1,124 @@
+#ifndef NES_H
+#define NES_H
+
+//#define SECTION_FAST //.section emu.fast, "awx"
+//#define SECTION_SLOW //.section emu.slow, "awx"
+//#define SECTION_HEAD //.section emu.head, "awx"
+
+#define ALIGN .align 4
+#define SECTION_DATA .data
+#define SECTION_TEXT .text
+
+/*
+ * 6502 ¤Î¥ì¥¸¥¹¥¿
+ *
+ * A ¤Ï¾ï¤Ë 24 ¥Ó¥Ã¥È¥·¥Õ¥È¤·¤Æ¤ª¤¯
+ * P ¤Ï2¤Ä¤Ëʬ¤±¤ë¡£
+ * NZ¤Ï¤Û¤È¤ó¤É¤ÎÌ¿Î᤬Êѹ¹¤¹¤ë¤Î¤Ç¡¤NZ¤Î¸µ¤Ë¤Ê¤ëÃͤòÊݸ
+ * »Ä¤ê¤Ï¾¤Î¾ì½ê¤ËÃÖ¤¯
+ *
+ * S ¤Ï24¥Ó¥Ã¥È¥·¥Õ¥È¤·¤Æ¤ª¤¯
+ * ¤³¤ì¤Ç;¤Ã¤Æ²¼¤Î¥Ó¥Ã¥È¤Ë P ¤Î»Ä¤ê¤òÃÖ¤¯(VBDI)
+ * ¤µ¤é¤Ë;¤Ã¤Æ¤ë¤È¤³¤í¤Ë¤Ï³ä¤ê¹þ¤ß¤Ë´Ø¤¹¤ë¥Õ¥é¥°¤òÃÖ¤¯
+ *
+ * PC ¤ÏROMÆâ¤Î¥¢¥É¥ì¥¹¤ËÊÑ´¹¤·¤Æ¤ª¤¯
+ * ¤³¤Î¾ì¹ç¤Ï¶­³¦¥Á¥§¥Ã¥¯¤ò¤·¤¿¤Û¤¦¤¬¤¤¤¤¤Î¤À¤¬¡¤´Êñ¤Ç¤Ï¤Ê¤¤
+ * ËÜÅö¤Î PC ¤òÆÀ¤ë¤¿¤á¤Ë¤Ï¸½ºß¤Î¥Ð¥ó¥¯¤ÎÀèƬ¥¢¥É¥ì¥¹¤ò°ú¤±¤Ð¤è¤¤
+ *
+ * I just love the above comments :)
+ */
+
+//                             // offs in nes_registers
+#define REG_A  r4              // 00
+#define REG_X  r5              // 04
+#define REG_Y  r6              // 08
+#define REG_PC r7              // 0c
+#define REG_S  r8              // 10
+#define REG_P_REST r8
+#define REG_NZ  r9             // 14
+#define REG_ADDR r10           // 18
+#define REG_CYCLE r11          // 1c
+#define REG_OP_TABLE r12       // 20
+
+
+/*
+ * REG_P_REST ¤Ë¤Ï³Æ¼ï¥Õ¥é¥°¤òÃÖ¤¯
+ *
+ * 0
+ * FEDCBA98 76543210
+ * |||||||| |||||||+---C ¥­¥ã¥ê¡¼¤Þ¤¿¤Ï¥Ü¥í¡¼¤Ê¤·
+ * |||||||| ||||||+---NMI¤ÎȯÀ¸
+ * |||||||| |||||+---I ³ä¤ê¹þ¤ßµö²Ä
+ * |||||||| ||||+---D ½½¿Ê¥â¡¼¥É
+ * |||||||| |||+---B
+ * |||||||| ||+---IRQ¤ÎȯÀ¸
+ * |||||||| |+---V ¥ª¡¼¥Ð¡¼¥Õ¥í¡¼
+ * |||||||| +---$2005/$2006 ¥È¥°¥ë¥Õ¥é¥°
+ * ||||||||
+ * |||||||+---$2000[2] 32¥¤¥ó¥¯¥ê¥á¥ó¥È
+ * ||||||+---$2000[3] ¥¹¥×¥é¥¤¥È¥¢¥É¥ì¥¹ÁªÂò
+ * |||||+---$2000[4] ¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É¥¢¥É¥ì¥¹ÁªÂò
+ * ||||+---$2000[5] ¥¹¥×¥é¥¤¥È¥µ¥¤¥º
+ * |||+---̤»ÈÍÑ
+ * ||+---$2000[7] NMIµö²Ä
+ * |+---$2001[3] ¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É¤òÉÁ²è
+ * +---$2001[4] ¥¹¥×¥é¥¤¥È¤òÉÁ²è
+ *
+ * 1
+ * FEDCBA9876543210
+ * |||||||||||||||+---$2002[4] VRAM¤Ë½ñ¤­¹þ¤ß²Ä¡©
+ * ||||||||||||||+---$2002[5] ¥¹¥×¥é¥¤¥È¤¬Â¿¤¹¤®
+ * |||||||||||||+---$2002[6] ¥¹¥×¥é¥¤¥È¥Ò¥Ã¥È(¼ÂÁõ¤Ç¤­¤ë¤Î¤«¡©)
+ * ||||||||||||+---$2002[7] VBL
+ * |||||||||||+---DMC³ä¤ê¹þ¤ßȯÀ¸
+ * ||||||||||+---VRAM¤ò»ý¤Ã¤Æ¤¤¤ë
+ * ||||||||++---̤»ÈÍÑ
+ * ++++++++---S ¥¹¥¿¥Ã¥¯¥Ý¥¤¥ó¥¿
+ *
+ * note: fceu uses this differently
+ * [7:0]   - interrupt flags (same as above)
+ * [15:8]  - FCEU IRQ pending sources
+ * [23:16] - unused
+ * [31:24] - stack pointer
+ */
+
+
+/*
+ * REG_P_REST ¤Ç»È¤¦¥Õ¥é¥°¡£´ðËÜŪ¤ËP¤ÈƱ¤¸°ÌÃ֤ˤ¢¤ë
+ */
+#define P_REST_V_FLAG 0x40
+#define P_REST_B_FLAG 0x10
+#define P_REST_D_FLAG 0x08
+#define P_REST_I_FLAG 0x04
+#define P_REST_C_FLAG 0x01
+#define P_REST_FLAGS  0x5D
+
+/*
+ * ³ä¤ê¹þ¤ß¤¬È¯À¸¤¹¤ë¤È¥»¥Ã¥È¤µ¤ì¤ë
+ */
+// will be using FCE flags instead of this
+// #define P_REST_INT_PENDING 0x20
+// #define P_REST_NMI_PENDING 0x02
+
+// #define ASSERT_NMI  orr     REG_P_REST, REG_P_REST, #P_REST_NMI_PENDING
+// #define ASSERT_INT  orr     REG_P_REST, REG_P_REST, #P_REST_INT_PENDING
+
+
+/*
+ * 6502 ¤ÎËÜÅö¤Î¥Õ¥é¥°
+ */
+#define P_N_FLAG 0x80
+#define P_V_FLAG 0x40
+#define P_R_FLAG 0x20
+#define P_B_FLAG 0x10
+#define P_D_FLAG 0x08
+#define P_I_FLAG 0x04
+#define P_Z_FLAG 0x02
+#define P_C_FLAG 0x01
+
+#define NMI_VECTOR   6
+#define RESET_VECTOR 4
+#define IRQ_VECTOR   2
+
+#endif
+