mirror of
https://github.com/been-jamming/A1Emu.git
synced 2024-11-25 10:30:57 +00:00
41 lines
959 B
C
41 lines
959 B
C
|
/*
|
||
|
* 6502 Emulator
|
||
|
*
|
||
|
* Spring Break programming project
|
||
|
*
|
||
|
* 3/5/2019
|
||
|
* by Ben Jones
|
||
|
*/
|
||
|
|
||
|
#include <stdint.h>
|
||
|
|
||
|
//Bits of the status register and correseponding flags
|
||
|
#define CARRY 0
|
||
|
#define ZERO 1
|
||
|
#define INTERRUPT 2
|
||
|
#define DECIMAL 3
|
||
|
#define BREAK 4
|
||
|
#define OVERFLOW 6
|
||
|
#define NEGATIVE 7
|
||
|
|
||
|
typedef struct CPU_6502 CPU_6502;
|
||
|
|
||
|
//Store the state of cpu
|
||
|
struct CPU_6502{
|
||
|
//The ALU loads and stores to and from the accumulator
|
||
|
uint8_t A_reg;
|
||
|
//Index registers
|
||
|
uint8_t X_reg;
|
||
|
uint8_t Y_reg;
|
||
|
//The stack pointer is actually a 16 bit value but the first byte is hard-wired to 0x01, so you only need 8 bits to store it
|
||
|
uint8_t SP_reg;
|
||
|
uint16_t PC_reg;
|
||
|
//The bits status register are all of the processor flags, but it is its own register whose value can be pushed to the stack
|
||
|
uint8_t P_reg;
|
||
|
};
|
||
|
|
||
|
|
||
|
void execute_6502(CPU_6502 *cpu, uint8_t (*read)(uint16_t), void (*write)(uint16_t, uint8_t));
|
||
|
|
||
|
void reset_6502(CPU_6502 *cpu, uint8_t (*read)(uint16_t));
|