/* * 6502.h * * Ullrich von Bassewitz, 20.09.1998 */ #ifndef _6502_H #define _6502_H /* Possible returns of getcpu() */ #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__ ("\tbrk") #define CLI() __asm__ ("\tcli") #define SEI() __asm__ ("\tsei") #define JAM() __asm__ ("\t.byte\t$02") /* 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 */ }; /* Defines for the flags in the regs structure */ #define F_NEG 0x80 /* N flag */ #define F_OVF 0x40 /* V flag */ #define F_BRK 0x10 /* B flag */ #define F_DEC 0x08 /* D flag */ #define F_IEN 0x04 /* I flag */ #define F_ZERO 0x02 /* Z flag */ #define F_CARRY 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. Some of the flags are 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 */ typedef void (*brk_handler) (void); /* Type of the break handler */ void __fastcall__ set_brk (brk_handler f); /* Set the break vector to the given address, return the old address */ void reset_brk (void); /* Reset the break vector to the original value */ /* End of 6502.h */ #endif