extern u16int pc, curpc;
extern u8int rA, rX, rY, rS, rP;
+extern u8int irq, nmi;
extern uchar mem[32768], ppuram[16384], oam[256];
extern u16int pput, ppuv;
-extern u8int ppusx;
-extern int mirr;
+extern u8int ppusx, vrambuf;
+extern int mirr, ppux, ppuy, odd, vramlatch, keylatch, keylatch2;
-extern int map, scale;
+extern int map, scale, mmc3hack, oflag;
extern uchar *prg, *chr;
-extern int nprg, nchr, nmi, map;
+extern int nprg, nchr, map, chrram;
-extern int keys;
+extern u8int apuseq, apuctr[13];
+extern u16int dmcaddr, dmccnt;
+
+extern int keys, keys2, clock, ppuclock, apuclock, dmcclock, dmcfreq, saveclock, paused;
+
+extern void (*mapper[])(int, u8int);
enum {
FLAGC = 1<<0,
PPUMASK = 0x2001,
PPUSTATUS = 0x2002,
PPUSCROLL = 0x2005,
+ DMCCTRL = 0x4010,
+ DMCBUF = 0x4011,
+ DMCADDR = 0x4012,
+ DMCLEN = 0x4013,
+ APUSTATUS = 0x4015,
+ APUFRAME = 0x4017,
PPUNMI = 1<<7,
BIGSPRITE = 1<<5,
GRAYSCALE = 1<<0,
BG8DISP = 1<<1,
- BG8SPRITE = 1<<2,
+ SPRITE8DISP = 1<<2,
BGDISP = 1<<3,
SPRITEDISP = 1<<4,
FREQ = 21477272,
MILLION = 1000000,
BILLION = 1000000000,
+ APUDIV = 89490,
+ RATE = 44100,
+ SAMPDIV = FREQ / RATE,
+ SAVEFREQ = FREQ/5,
};
enum {
MSINGB,
MFOUR
};
+
+enum {
+ INIT = -1,
+ SAVE = -2,
+ RSTR = -3,
+ SCAN = -4,
+};
+
+enum {
+ IRQFRAME = 1,
+ IRQDMC = 2,
+ IRQMMC = 4,
+};