Steve2/A2Mac/6502.h

77 lines
1.7 KiB
Objective-C

//
// 6502.h
// 6502
//
// Created by Tamas Rudnai on 7/22/19.
// Copyright © 2019 GameAlloy. All rights reserved.
//
#ifndef __6502_H__
#define __6502_H__
#import "stdint.h"
#ifdef DEBUG
#define dbgPrintf(format, ...) printf (format, ## __VA_ARGS__)
#define dbgPrintf2(format, ...) printf (format, ## __VA_ARGS__)
#else
#define dbgPrintf(format, ...)
#define dbgPrintf2(format, ...)
#endif
typedef enum {
NO_INT,
HLT,
NMI,
HARDRESET,
SOFTRESET,
} interrupt_t;
typedef struct m6502_s {
uint8_t A; // Accumulator
uint8_t X; // X index register
uint8_t Y; // Y index register
// union {
// uint8_t instr; // Instruction
// struct {
// uint8_t cc:2;
// uint8_t bbb:3;
// uint8_t aaa:3;
// };
// };
union {
uint8_t SR; // Status Register
struct {
uint8_t C:1; // Carry Flag
uint8_t Z:1; // Zero Flag
uint8_t I:1; // Interrupt Flag
uint8_t D:1; // Decimal Flag
uint8_t B:1; // B Flag
uint8_t res:1; // reserved -- should be always 1
uint8_t V:1; // Overflow Flag ???
uint8_t N:1; // Negative Flag
};
};
uint16_t PC; // Program Counter
uint8_t SP; // Stack Pointer ( stack addr = 0x01 + sp )
unsigned clk; // Clock Counter
union {
unsigned int IF; // interrut flag
interrupt_t interrupt;
};
} m6502_t;
extern m6502_t m6502;
extern uint8_t RAM[ 64 * 1024 ];
extern double mips;
extern double mhz;
extern void tst6502();
extern void m6502_Reset();
extern void m6502_Run();
#endif /* __6502_H__ */