Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
RishiRecon
GitHub Repository: RishiRecon/exploits
Path: blob/main/misc/emulator/xnes/snem/snes.h
28550 views
1
#ifndef SNEM_H
2
#define SNEM_H
3
int stage;
4
#include <stdio.h>
5
#include <stdlib.h>
6
#include <string.h>
7
#define uint32 unsigned
8
#define uint16 unsigned short
9
#ifdef EMCCHACK
10
#define RGB555toRGB24(t) \
11
( (((t)&0x1f)<<3) | (((t)&0x3e0)<<6) | (((t)&0x7c00)<<9)|0xff000000 )
12
#else
13
#define RGB555toRGB24(t) \
14
( (((t)&0x1f)<<19) | (((t)&0x3e0)<<6) | (((t)&0x7c00)>>7)|0xff000000 )
15
#endif
16
/*65816*/
17
typedef union
18
{
19
unsigned short w;
20
struct { unsigned char l,h; } b;
21
} reg;
22
23
reg reg_A,reg_X,reg_Y,reg_S;
24
unsigned short pc,dp;
25
unsigned char pbr,dbr;
26
int mode;
27
int nmiena;
28
int setzf;
29
30
struct
31
{
32
int c,z,i,d,v,n,x,m,e;
33
} struct_p;
34
35
/*I/O*/
36
void writeio(unsigned short addr, unsigned char val);
37
int nmiocc;
38
struct
39
{
40
unsigned short src[8],size[8];
41
unsigned char srcbank[8],ctrl[8],dest[8];
42
} dma;
43
int vertint,vertline;
44
int horint;
45
46
/*Memory*/
47
unsigned char *mempoint[256][8];
48
int mempointv[256][8],mempointw[256][8];
49
#define readmem(b,a) ((mempointv[b&255][((a)&0xFFFF)>>13])?mempoint[b&255][((a)&0xFFFF)>>13][(a)&0x1FFF]:readmeml(b,a))
50
#define writemem(b,a,v) {if (mempointw[b&255][((a)&0xFFFF)>>13]) {mempoint[b&255][((a)&0xFFFF)>>13][(a)&0x1FFF]=v; } else {writememl(b,a,v);} }
51
/*if (a==0x163B || a==0x22A) printf("%04X write %02X %02X:%04X %06X\n",a,v,pbr,pc,(ram[reg_S.w+1]|(ram[reg_S.w+2]<<8)|(ram[reg_S.w+3]<<16))+1); if (b==0x7F && (a&0xFFFF)==0x49) printf("7F0049 write %02X %02X:%04X %04X\n",v,pbr,pc,(ram[reg_S.w+1]|(ram[reg_S.w+2]<<8))+1); */
52
/*PPU*/
53
void writeppu(unsigned short addr, unsigned char val);
54
void initppu();
55
int vbl;
56
57
unsigned char hdmaena;
58
int curline;
59
60
unsigned short sprchraddr;
61
unsigned char objram[1024];
62
unsigned short objaddr;
63
int firstobjwrite;
64
struct
65
{
66
int hdmaon[8];
67
int hdmacount[8];
68
uint32 hdmaval[8];
69
unsigned char srcbank[8];
70
unsigned short src[8];
71
int repeat[8];
72
unsigned char ibank[8];
73
unsigned short ta[8];
74
} hdma;
75
76
77
/*DSP*/
78
unsigned char dspregs[128];
79
int dspaddr;
80
unsigned char readdsp(int a);
81
void vblankhdma();
82
void decodesprites();
83
unsigned char readmeml(unsigned char b, unsigned short addr);
84
unsigned char readspcl(unsigned short a);
85
void doline(int line);
86
void updatespuaccess(int page);
87
void writedsp(int a, unsigned char v);
88
void int65816();
89
unsigned char readio(unsigned short addr);
90
unsigned char readppu(unsigned short a);
91
void nmi65816();
92
void dumpregs();
93
void mainloop(int) __attribute__((used));
94
void reset65816();
95
void resetspc();
96
void resetppu();
97
void dumpspcregs();
98
void makeopcodetable();
99
void makeromtable();
100
void makespctables();
101
void maketables();
102
int loadsmc(char *fn);
103
void renderscreen() __attribute__((used));
104
void native_hardware_init(int);
105
uint32 *native_bitmap_pointer(int x, int y) __attribute__((used));
106
void native_bitmap_clear_line(int line, uint32);
107
void native_bitmap_to_screen();
108
void native_tick_callback( int (*func)(void), int fps);
109
int native_poll_keyboard() __attribute__((used));
110
uint32* native_set_joypad_state(uint32 state) __attribute__((used));
111
uint32 native_joypad_state(int num);
112
#ifdef SOUND
113
#define UPDATE_SOUND if (soundupdate && spcemu) { soundupdate=0; updatesound();}
114
#else
115
#define UPDATE_SOUND
116
#endif
117
#ifdef USE_SDL
118
extern Uint8 *keystates;
119
extern uint32 *bitmap;
120
#else
121
extern uint32 bitmap[288*256];
122
#endif
123
#endif
124
125