#define REG_X 0x0002U
#define REG_Y 0x0004U
#define REG_TMP1 0x0008U
-#define REG_TMP2 0x0010U
-#define REG_TMP3 0x0020U
-#define REG_TMP4 0x0040U
-#define REG_PTR1 0x0080U
-#define REG_PTR2 0x0100U
-#define REG_PTR3 0x0200U
-#define REG_PTR4 0x0400U
-#define REG_SREG_LO 0x0800U
-#define REG_SREG_HI 0x1000U
-#define REG_SP 0x2000U
-#define REG_SAVE 0x4000U
-#define REG_BANK 0x8000U
+#define REG_PTR1_LO 0x0010U
+#define REG_PTR1_HI 0x0020U
+#define REG_PTR2_LO 0x0040U
+#define REG_PTR2_HI 0x0080U
+#define REG_SREG_LO 0x0100U
+#define REG_SREG_HI 0x0200U
+#define REG_SAVE_LO 0x0400U
+#define REG_SAVE_HI 0x0800U
+#define REG_SP_LO 0x1000U
+#define REG_SP_HI 0x2000U
+
/* Combined register defines */
+#define REG_PTR1 (REG_PTR1_LO | REG_PTR1_HI)
+#define REG_PTR2 (REG_PTR2_LO | REG_PTR2_HI)
#define REG_SREG (REG_SREG_LO | REG_SREG_HI)
+#define REG_SAVE (REG_SAVE_LO | REG_SAVE_HI)
+#define REG_SP (REG_SP_LO | REG_SP_HI)
#define REG_AX (REG_A | REG_X)
#define REG_AY (REG_A | REG_Y)
#define REG_XY (REG_X | REG_Y)
#define REG_AXY (REG_AX | REG_Y)
#define REG_EAX (REG_AX | REG_SREG)
#define REG_EAXY (REG_EAX | REG_Y)
-#define REG_ZP 0xFFF0U
+#define REG_ZP 0xFFF8U
#define REG_ALL 0xFFFFU
+/* Zero page register info */
+typedef struct ZPInfo ZPInfo;
+struct ZPInfo {
+ unsigned char Len; /* Length of the following string */
+ char Name[11]; /* Name of zero page symbol */
+ unsigned short ByteUse; /* Register info for this symbol */
+ unsigned short WordUse; /* Register info for 16 bit access */
+};
+
+
+
/*****************************************************************************/
/* Code */
/*****************************************************************************/
* load all registers.
*/
-int IsZPName (const char* Name, unsigned short* RegInfo);
-/* Return true if the given name is a zero page symbol. If the RegInfo
- * pointer is not NULL, it is filled with the register info for the
- * zero page location found.
+const ZPInfo* GetZPInfo (const char* Name);
+/* If the given name is a zero page symbol, return a pointer to the info
+ * struct for this symbol, otherwise return NULL.
*/
unsigned GetRegInfo (struct CodeSeg* S, unsigned Index, unsigned Wanted);
int RegYUsed (struct CodeSeg* S, unsigned Index);
/* Check if the value in Y is used. */
+int RegAXUsed (struct CodeSeg* S, unsigned Index);
+/* Check if the value in A or(!) the value in X are used. */
+
/* End of codeinfo.h */