/*****************************************************************************/
/* */
-/* 6502.h */
+/* 6502.h */
/* */
-/* 6502 specific declarations */
+/* 6502 specific declarations */
/* */
/* */
/* */
+/* We need size_t */
+#ifndef _HAVE_size_t
+#define _HAVE_size_t
+typedef unsigned size_t;
+#endif
+
+
+
/* Possible returns of getcpu() */
-#define CPU_6502 0
-#define CPU_65C02 1
-#define CPU_65816 2
+#define CPU_6502 0
+#define CPU_65C02 1
+#define CPU_65816 2
unsigned char getcpu (void);
/* Detect the CPU the program is running on */
/* Macros for CPU instructions */
-#define BRK() __asm__ ("brk")
-#define CLI() __asm__ ("cli")
-#define SEI() __asm__ ("sei")
+#define BRK() __asm__ ("brk")
+#define CLI() __asm__ ("cli")
+#define SEI() __asm__ ("sei")
/* Struct that holds the registers for the sys function */
struct regs {
- unsigned char a; /* A register value */
- unsigned char x; /* X register value */
- unsigned char y; /* Y register value */
- unsigned char flags; /* Flags value */
- unsigned pc; /* Program counter */
+ unsigned char a; /* A register value */
+ unsigned char x; /* X register value */
+ unsigned char y; /* Y register value */
+ unsigned char flags; /* Flags value */
+ unsigned pc; /* Program counter */
};
/* Defines for the flags in the regs structure */
-#define F6502_N 0x80 /* N flag */
-#define F6502_V 0x40 /* V flag */
-#define F6502_B 0x10 /* B flag */
-#define F6502_D 0x08 /* D flag */
-#define F6502_I 0x04 /* I flag */
-#define F6502_Z 0x02 /* Z flag */
-#define F6502_C 0x01 /* C flag */
+#define F6502_N 0x80 /* N flag */
+#define F6502_V 0x40 /* V flag */
+#define F6502_B 0x10 /* B flag */
+#define F6502_D 0x08 /* D flag */
+#define F6502_I 0x04 /* I flag */
+#define F6502_Z 0x02 /* Z flag */
+#define F6502_C 0x01 /* C flag */
/* Function to call any machine language subroutine. All registers in the
- * regs structure are passed into the routine and the results are passed
- * out. The B flag is ignored on input. The called routine must end with
- * an RTS.
- */
+** regs structure are passed into the routine and the results are passed
+** out. The B flag is ignored on input. The called routine must end with
+** an RTS.
+*/
void __fastcall__ _sys (struct regs* r);
/* Set and reset the break vector. The given user function is called if
- * a break occurs. The values of the registers may be read from the brk_...
- * variables. The value in brk_pc will point to the address that contains
- * the brk instruction.
- * The set_brk function will install an exit handler that will reset the
- * vector if the program ends.
- */
-
-extern unsigned char brk_a; /* A register value */
-extern unsigned char brk_x; /* X register value */
-extern unsigned char brk_y; /* Y register value */
-extern unsigned char brk_sr; /* Status register */
-extern unsigned brk_pc; /* PC value */
+** a break occurs. The values of the registers may be read from the brk_...
+** variables. The value in brk_pc will point to the address that contains
+** the brk instruction.
+** The set_brk function will install an exit handler that will reset the
+** vector if the program ends.
+*/
+
+extern unsigned char brk_a; /* A register value */
+extern unsigned char brk_x; /* X register value */
+extern unsigned char brk_y; /* Y register value */
+extern unsigned char brk_sr; /* Status register */
+extern unsigned brk_pc; /* PC value */
typedef void (*brk_handler) (void);
/* Type of the break handler */
/* Possible returns for irq_handler() */
-#define IRQ_NOT_HANDLED 0
-#define IRQ_HANDLED 1
+#define IRQ_NOT_HANDLED 0
+#define IRQ_HANDLED 1
-typedef unsigned (*irq_handler) (void);
+typedef unsigned char (*irq_handler) (void);
/* Type of the C level interrupt request handler */
void __fastcall__ set_irq (irq_handler f, void *stack_addr, size_t stack_size);