📄 screen.hpp
字号:
/* SCREEN.HPP - Header file for Screen.cpp. Declarations of functions.
*/
#ifndef _SCREEN_HPP
#define _SCREEN_HPP
extern int debugscreen;
extern int memdumpoffset, vramdumpoffset, oamdumpoffset, cgramdumpoffset;
extern int vramblitoffset, vramblitcdepth;
extern int debug_sprmin, debug_sprmax;
#pragma pack (push,4)
struct bginfo {
// Line-based info
int cdepth;
int scrollx, scrolly;
union {
boolean width64;
int dummy1;
};
union {
boolean height64;
int dummy1a;
};
union {
boolean tile16x16;
int dummy1b;
};
int width8x8, width8x8and;
int height8x8, height8x8and;
byte *tilemap;
int tcharbase;
int tcharshift;
int lastbgrow;
// Frame-based info
union { byte bgnum;
int dummy2;
};
union { byte cgoffs;
int dummy3;
};
};
#pragma pack (pop)
union cachetile {
byte pixel[64];
dword dwpixel[16];
};
#pragma pack(push,1)
struct cachetilemap {
union cachetile *tile;
byte pal_or;
byte empty, solid; // 8 bits, 1 for each scanline of the tile.
boolean prio; // priority, 0 or 1
};
#pragma pack(pop)
extern "C" {
extern struct cachetilemap ctmap[4][128][128], sprmap[128][8][8];
extern byte cstatus [4096];
extern byte csolid [2][4096], cempty [2][4096];
extern byte spr8x8size[128];
extern union cachetile ctile [4][4096];
extern struct bginfo bg[4], *curbg;
}
extern byte cstatus [4096];
// b0-1: cdepth
// b4-7: which flip settings have been cached.
extern byte csolid [2][4096], cempty [2][4096]; // 8 bits, 1 for each scanline of the tile.
// ccdepth set to 0xFF when tile is invalidated.
extern byte spr8x8size [128]; // Set to 0 when cache entry is invalidated.
extern boolean oamposchange;
void rendersnesscreen ();
void drawdebug (int x);
// Debug screens:
// 0 - Snes Screen
// 1 - Main debug trace
// 2 - Main debug--alternate
// 3 - Memory dump
// 4 - VRAM dump
// 5 - CGRAM dump
// 6 - OAM dump
// 7 - Register screen
// 8 - VRAM tile blit
void adddebugline (char *text, boolean showregs, char asterisk = ' ');
void resetscreenframe ();
void getbgframeinfo (int plane);
void getbglineinfo (int plane);
void drawnextscanline ();
void dobglinedraw (int plane, int on, boolean priority);
void updatetilemaprow (int row);
void updatetilemap32 (byte *tilemap, struct cachetilemap *ctmap, int tcharbase);
void updatetilemap64_16x16 (byte *tilemap, struct cachetilemap *ctmap, int tcharbase, boolean secondrow);
void blitbgline (int row, int offsy, int col, byte *scrstart, byte *mustcopy);
void blitmode7line (void);
void buildspritetable ();
void dospritelinedraw (byte priority);
void blitspriteline (struct cachetilemap *ctmap, int numtiles, int yoffs, byte *scrstart, byte &mustcopy);
void buildsprlinelist ();
void doframedraw();
extern "C" {
void __cdecl blitbglineasm (void);
}
extern char vramcmpfn[40];
extern byte debug_vram[65536];
// Nifty things
#define memcpy_16(dest,src,mult16) (fpucopy ? memcpy_fpu16 (dest,src,mult16) : memcpy_int16 (dest,src,mult16))
extern void memcpy_fpu16 (void *dest, void *src, int mult16);
extern void memcpy_int16 (void *dest, void *src, int mult16);
#pragma aux memcpy_fpu16 =\
"TOP: FILD QWORD PTR [ESI]"\
" FILD QWORD PTR [ESI+8]"\
" FXCH"\
" FISTP QWORD PTR [EDI]"\
" FISTP QWORD PTR [EDI+8]"\
" ADD ESI, 16"\
" ADD EDI, 16"\
" DEC ECX"\
" JNZ TOP"\
parm [esi] [edi] [ecx]\
modify [esi edi ecx];
#pragma aux memcpy_int16 =\
"TOP: mov ebx, [esi]"\
" mov eax, [esi+4]"\
" mov [edi], ebx"\
" mov [edi+4], eax"\
" mov ebx, [esi+8]"\
" mov eax, [esi+12]"\
" mov [edi+8], ebx"\
" mov [edi+12], eax"\
" add esi, 16"\
" add edi, 16"\
" dec ecx"\
" jnz TOP"\
parm [esi] [edi] [ecx]\
modify [esi edi ecx];
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -