| 1 | #pragma once | 
|---|
| 2 | #include "common.hpp" | 
|---|
| 3 | #include <Nes_Apu.h> | 
|---|
| 4 |  | 
|---|
| 5 | namespace CPU { | 
|---|
| 6 |  | 
|---|
| 7 |  | 
|---|
| 8 | enum IntType { NMI, RESET, IRQ, BRK };  // Interrupt type. | 
|---|
| 9 | typedef u16 (*Mode)(void);              // Addressing mode. | 
|---|
| 10 |  | 
|---|
| 11 | /* Processor flags */ | 
|---|
| 12 | enum Flag {C, Z, I, D, V, N}; | 
|---|
| 13 | class Flags | 
|---|
| 14 | { | 
|---|
| 15 | bool f[6]; | 
|---|
| 16 |  | 
|---|
| 17 | public: | 
|---|
| 18 | bool& operator[] (const int i) { return f[i]; } | 
|---|
| 19 |  | 
|---|
| 20 | u8 get() { return f[C] | f[Z] << 1 | f[I] << 2 | f[D] << 3 | 1 << 5 | f[V] << 6 | f[N] << 7; } | 
|---|
| 21 | void set(u8 p) { f[C] = NTH_BIT(p, 0); f[Z] = NTH_BIT(p, 1); f[I] = NTH_BIT(p, 2); | 
|---|
| 22 | f[D] = NTH_BIT(p, 3); f[V] = NTH_BIT(p, 6); f[N] = NTH_BIT(p, 7); } | 
|---|
| 23 | }; | 
|---|
| 24 |  | 
|---|
| 25 | void set_nmi(bool v = true); | 
|---|
| 26 | void set_irq(bool v = true); | 
|---|
| 27 | int dmc_read(void*, cpu_addr_t addr); | 
|---|
| 28 | void power(); | 
|---|
| 29 | void run_frame(); | 
|---|
| 30 |  | 
|---|
| 31 |  | 
|---|
| 32 | } | 
|---|
| 33 |  | 
|---|