整理代码
This commit is contained in:
@@ -1,143 +1,128 @@
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ye781205<30><35>NESģ<53><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// ALIENTEK STM32F407<30><37><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// NES APU <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2014/7/1
|
||||
// <20>汾<EFBFBD><E6B1BE>V1.0
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef __NES_PPU_H
|
||||
#define __NES_PPU_H
|
||||
#define __NES_PPU_H
|
||||
|
||||
#include "nes_main.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ye781205<30><35>NESģ<53><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//ALIENTEK STM32F407<30><37><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//NES APU <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2014/7/1
|
||||
//<2F>汾<EFBFBD><E6B1BE>V1.0
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#undef NULL
|
||||
#define NULL 0
|
||||
|
||||
#undef NULL
|
||||
#define NULL 0
|
||||
|
||||
#ifndef TRUE
|
||||
#define TRUE 1
|
||||
#ifndef TRUE
|
||||
#define TRUE 1
|
||||
#endif
|
||||
#ifndef FALSE
|
||||
#define FALSE 0
|
||||
#ifndef FALSE
|
||||
#define FALSE 0
|
||||
#endif
|
||||
|
||||
static const unsigned int NES_Palette[64]=
|
||||
{
|
||||
0x73AE,0x20D1,0x0015,0x4013,0x880E,0xA802,0xA000,0x7840,
|
||||
0x4160,0x0220,0x0280,0x01E2,0x19EB,0x0000,0x0000,0x0000,
|
||||
0xBDF7,0x039D,0x21DD,0x801E,0xB817,0xE00B,0xD940,0xCA61,
|
||||
0x8B80,0x04A0,0x0540,0x0487,0x0411,0x0000,0x0000,0x0000,
|
||||
0xF79E,0x3DFF,0x5CBF,0xA45F,0xF3DF,0xFBB6,0xFBAC,0xFCC7,
|
||||
0xF5E7,0x8682,0x4EE9,0x5FD3,0x075B,0x0000,0x0000,0x0000,
|
||||
0xF79E,0xAF3F,0xC6BF,0xD65F,0xFE3F,0xFE3B,0xFDF6,0xFED5,
|
||||
0xFF34,0xE7F4,0xAF97,0xB7F9,0x9FFE,0x0000,0x0000,0x0000
|
||||
};
|
||||
static const unsigned int NES_Palette[64] = {
|
||||
0x73AE, 0x20D1, 0x0015, 0x4013, 0x880E, 0xA802, 0xA000, 0x7840,
|
||||
0x4160, 0x0220, 0x0280, 0x01E2, 0x19EB, 0x0000, 0x0000, 0x0000,
|
||||
0xBDF7, 0x039D, 0x21DD, 0x801E, 0xB817, 0xE00B, 0xD940, 0xCA61,
|
||||
0x8B80, 0x04A0, 0x0540, 0x0487, 0x0411, 0x0000, 0x0000, 0x0000,
|
||||
0xF79E, 0x3DFF, 0x5CBF, 0xA45F, 0xF3DF, 0xFBB6, 0xFBAC, 0xFCC7,
|
||||
0xF5E7, 0x8682, 0x4EE9, 0x5FD3, 0x075B, 0x0000, 0x0000, 0x0000,
|
||||
0xF79E, 0xAF3F, 0xC6BF, 0xD65F, 0xFE3F, 0xFE3B, 0xFDF6, 0xFED5,
|
||||
0xFF34, 0xE7F4, 0xAF97, 0xB7F9, 0x9FFE, 0x0000, 0x0000, 0x0000};
|
||||
|
||||
/*
|
||||
static unsigned int NES_Palette[64]=
|
||||
{
|
||||
0x73AE,0x20D1,0x0015,0x4013,0x880E,0xA802,0xA000,0x7840,
|
||||
0x4160,0x0220,0x0280,0x01E2,0x19EB,0x0000,0x0000,0x0000,
|
||||
0xBDF7,0x039D,0x21DD,0x801E,0xB817,0xE00B,0xD940,0xCA61,
|
||||
0x8B80,0x04A0,0x0540,0x0487,0x0411,0x0000,0x0000,0x0000,
|
||||
0xF79E,0x3DFF,0x5CBF,0xA45F,0xF3DF,0xFBB6,0xFBAC,0xFCC7,
|
||||
0xF5E7,0x8682,0x4EE9,0x5FD3,0x075B,0x0000,0x0000,0x0000,
|
||||
0xF79E,0xAF3F,0xC6BF,0xD65F,0xFE3F,0xFE3B,0xFDF6,0xFED5,
|
||||
0xFF34,0xE7F4,0xAF97,0xB7F9,0x9FFE,0x0000,0x0000,0x0000
|
||||
0x73AE,0x20D1,0x0015,0x4013,0x880E,0xA802,0xA000,0x7840,
|
||||
0x4160,0x0220,0x0280,0x01E2,0x19EB,0x0000,0x0000,0x0000,
|
||||
0xBDF7,0x039D,0x21DD,0x801E,0xB817,0xE00B,0xD940,0xCA61,
|
||||
0x8B80,0x04A0,0x0540,0x0487,0x0411,0x0000,0x0000,0x0000,
|
||||
0xF79E,0x3DFF,0x5CBF,0xA45F,0xF3DF,0xFBB6,0xFBAC,0xFCC7,
|
||||
0xF5E7,0x8682,0x4EE9,0x5FD3,0x075B,0x0000,0x0000,0x0000,
|
||||
0xF79E,0xAF3F,0xC6BF,0xD65F,0xFE3F,0xFE3B,0xFDF6,0xFED5,
|
||||
0xFF34,0xE7F4,0xAF97,0xB7F9,0x9FFE,0x0000,0x0000,0x0000
|
||||
};
|
||||
*/
|
||||
|
||||
extern uint8_t
|
||||
*VROM_banks; // VROM<4F><4D>ʼ<EFBFBD><CABC>ַ ͼ<><CDBC><EFBFBD><EFBFBD>*************************************
|
||||
extern uint8_t *VROM_tiles;
|
||||
extern uint8_t *PPU_VRAM_banks[12];
|
||||
extern uint8_t *PPU_tile_banks[8];
|
||||
extern uint8_t *PPU_patterntables; // 8192//VROM<4F><4D>ʼ<EFBFBD><CABC>ַ
|
||||
// ͼ<><CDBC><EFBFBD><EFBFBD>*************************************
|
||||
extern uint8_t *spr_ram; // sprite ram
|
||||
|
||||
|
||||
extern u8* VROM_banks; //VROM<4F><4D>ʼ<EFBFBD><CABC>ַ ͼ<><CDBC><EFBFBD><EFBFBD>*************************************
|
||||
extern u8* VROM_tiles;
|
||||
extern uint8* PPU_VRAM_banks[12];
|
||||
extern uint8* PPU_tile_banks[8];
|
||||
extern uint8* PPU_patterntables; //8192//VROM<4F><4D>ʼ<EFBFBD><CABC>ַ ͼ<><CDBC><EFBFBD><EFBFBD>*************************************
|
||||
extern uint8* spr_ram; //sprite ram
|
||||
|
||||
enum
|
||||
{
|
||||
NES_SCREEN_WIDTH = 256,
|
||||
NES_SCREEN_HEIGHT = 240,
|
||||
SIDE_MARGIN = 8,
|
||||
NES_SCREEN_WIDTH_VIEWABLE = NES_SCREEN_WIDTH,
|
||||
NES_BACKBUF_WIDTH = NES_SCREEN_WIDTH + (2*SIDE_MARGIN)
|
||||
enum {
|
||||
NES_SCREEN_WIDTH = 256,
|
||||
NES_SCREEN_HEIGHT = 240,
|
||||
SIDE_MARGIN = 8,
|
||||
NES_SCREEN_WIDTH_VIEWABLE = NES_SCREEN_WIDTH,
|
||||
NES_BACKBUF_WIDTH = NES_SCREEN_WIDTH + (2 * SIDE_MARGIN)
|
||||
};
|
||||
enum
|
||||
{
|
||||
BG_WRITTEN_FLAG = 0x01,
|
||||
SPR_WRITTEN_FLAG = 0x02
|
||||
};
|
||||
enum { BG_WRITTEN_FLAG = 0x01, SPR_WRITTEN_FLAG = 0x02 };
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32 in_vblank;
|
||||
uint32 current_frame_line;
|
||||
uint16 bg_pattern_table_addr;
|
||||
uint16 spr_pattern_table_addr;
|
||||
uint16 ppu_addr_inc;
|
||||
uint16 loopy_v; // vram address -- used for reading/writing through $2007
|
||||
// see loopy-2005.txt
|
||||
uint16 loopy_t; // temp vram address
|
||||
uint8 loopy_x; // 3-bit subtile x-offset
|
||||
uint8 toggle_2005_2006;
|
||||
uint8 spr_ram_rw_ptr; // sprite ram read/write pointer<65>ڴ<EFBFBD><DAB4><EFBFBD>/дָ<D0B4><D6B8>
|
||||
uint8 read_2007_buffer;
|
||||
uint8 LowRegs[0x08];
|
||||
uint8 bg_pal[0x10]; //extern BYTE BGPal[0x20]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB>
|
||||
uint8 spr_pal[0x10]; //extern BYTE SPPal[0x20]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB>
|
||||
typedef struct {
|
||||
uint32_t in_vblank;
|
||||
uint32_t current_frame_line;
|
||||
uint16_t bg_pattern_table_addr;
|
||||
uint16_t spr_pattern_table_addr;
|
||||
uint16_t ppu_addr_inc;
|
||||
uint16_t loopy_v; // vram address -- used for reading/writing through $2007
|
||||
// see loopy-2005.txt
|
||||
uint16_t loopy_t; // temp vram address
|
||||
uint8_t loopy_x; // 3-bit subtile x-offset
|
||||
uint8_t toggle_2005_2006;
|
||||
uint8_t spr_ram_rw_ptr; // sprite ram read/write pointer<65>ڴ<EFBFBD><DAB4><EFBFBD>/дָ<D0B4><D6B8>
|
||||
uint8_t read_2007_buffer;
|
||||
uint8_t LowRegs[0x08];
|
||||
uint8_t bg_pal[0x10]; // extern BYTE BGPal[0x20];
|
||||
// //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB>
|
||||
uint8_t spr_pal[0x10]; // extern BYTE SPPal[0x20];
|
||||
// //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB>
|
||||
|
||||
uint8 PPU_nametables[4*0x400]; //4096 PPU<50><55><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>RAM
|
||||
// Rick
|
||||
uint8* PPU_VRAM_banks[12];
|
||||
uint8* PPU_tile_banks[8];
|
||||
uint8* PPU_tile_tables;
|
||||
uint8 solid_buf[NES_BACKBUF_WIDTH]; // <20><>ǰ<EFBFBD><C7B0><EFBFBD>ص<EFBFBD>λ<EFBFBD><CEBB>־<EFBFBD><D6BE>
|
||||
uint8 dummy_buffer[NES_BACKBUF_WIDTH]; // used to do sprite 0 hit detection when we aren't supposed to draw
|
||||
|
||||
|
||||
} ppu_data;
|
||||
uint8_t PPU_nametables[4 * 0x400]; // 4096 PPU<50><55><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>RAM
|
||||
// Rick
|
||||
uint8_t *PPU_VRAM_banks[12];
|
||||
uint8_t *PPU_tile_banks[8];
|
||||
uint8_t *PPU_tile_tables;
|
||||
uint8_t solid_buf[NES_BACKBUF_WIDTH]; // <20><>ǰ<EFBFBD><C7B0><EFBFBD>ص<EFBFBD>λ<EFBFBD><CEBB>־<EFBFBD><D6BE>
|
||||
uint8_t dummy_buffer[NES_BACKBUF_WIDTH]; // used to do sprite 0 hit detection
|
||||
// when we aren't supposed to draw
|
||||
|
||||
} ppu_data;
|
||||
|
||||
extern ppu_data *ppu;
|
||||
extern u8 *spr_ram;
|
||||
|
||||
extern ppu_data *ppu;
|
||||
extern uint8_t *spr_ram;
|
||||
|
||||
|
||||
uint32 spr_enabled(void);
|
||||
uint32 bg_enabled(void);
|
||||
void set_name_table(uint8 bank, int bank_num);
|
||||
void set_tile_bank(int i, uint8 *bank);
|
||||
void compile(int count, uint8 *src, uint8 *dest);
|
||||
void set_tile_banks(uint8 *bank0, uint8 *bank1, uint8 *bank2, uint8 *bank3,
|
||||
uint8 *bank4, uint8 *bank5, uint8 *bank6, uint8 *bank7);
|
||||
uint32_t spr_enabled(void);
|
||||
uint32_t bg_enabled(void);
|
||||
void set_name_table(uint8_t bank, int bank_num);
|
||||
void set_tile_bank(int i, uint8_t *bank);
|
||||
void compile(int count, uint8_t *src, uint8_t *dest);
|
||||
void set_tile_banks(uint8_t *bank0, uint8_t *bank1, uint8_t *bank2, uint8_t *bank3,
|
||||
uint8_t *bank4, uint8_t *bank5, uint8_t *bank6, uint8_t *bank7);
|
||||
void PPU_reset(void *lcd_addr);
|
||||
void PPU_start_frame(void);
|
||||
void set_mirroring(uint32 nt0, uint32 nt1, uint32 nt2, uint32 nt3);//<2F><><EFBFBD>ô<EFBFBD>ֱˮƽ<CBAE><C6BD><EFBFBD><EFBFBD>
|
||||
uint8 ReadLowRegs(uint32 addr);
|
||||
void WriteLowRegs(uint32 addr, uint8 data);
|
||||
void set_mirroring(uint32_t nt0, uint32_t nt1, uint32_t nt2,
|
||||
uint32_t nt3); // <20><><EFBFBD>ô<EFBFBD>ֱˮƽ<CBAE><C6BD><EFBFBD><EFBFBD>
|
||||
uint8_t ReadLowRegs(uint32_t addr);
|
||||
void WriteLowRegs(uint32_t addr, uint8_t data);
|
||||
void scanline_draw(int LineNo);
|
||||
void do_scanline_and_draw(uint8* buf);
|
||||
void do_scanline_and_draw(uint8_t *buf);
|
||||
|
||||
// Rick
|
||||
void start_frame(uint8 *buf, int ypitch);
|
||||
void end_frame(uint8 *buf);
|
||||
void start_frame(uint8_t *buf, int ypitch);
|
||||
void end_frame(uint8_t *buf);
|
||||
void do_scanline_and_dont_draw(int LineNo);
|
||||
uint32 NMI_enabled(void);
|
||||
uint32_t NMI_enabled(void);
|
||||
void start_vblank(void);
|
||||
void end_vblank(void);
|
||||
void render_bg(uint8* buf);
|
||||
void render_spr(uint8* buf);
|
||||
void update_tile(int byteOffset, uint8 data);
|
||||
void render_bg(uint8_t *buf);
|
||||
void render_spr(uint8_t *buf);
|
||||
void update_tile(int byteOffset, uint8_t data);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user