整理代码
This commit is contained in:
		| @@ -3,8 +3,7 @@ | |||||||
|  |  | ||||||
| #include "stm32f4xx.h" | #include "stm32f4xx.h" | ||||||
|  |  | ||||||
|  | #define LCD_CLK 9 // <20><><EFBFBD><EFBFBD>LCD<43><44><EFBFBD><EFBFBD>ʱ<EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>˷<EFBFBD><CBB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵӦ<D6B5><D3A6>10-70֮<30>䣬<EFBFBD><E4A3AC>λΪM | ||||||
| #define LCD_CLK   9		//<2F><><EFBFBD><EFBFBD>LCD<43><44><EFBFBD><EFBFBD>ʱ<EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>˷<EFBFBD><CBB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵӦ<D6B5><D3A6>10-70֮<30>䣬<EFBFBD><E4A3AC>λΪM |  | ||||||
|  |  | ||||||
| #define HBP 40 | #define HBP 40 | ||||||
| #define VBP 8 | #define VBP 8 | ||||||
| @@ -13,29 +12,30 @@ | |||||||
| #define HFP 5 | #define HFP 5 | ||||||
| #define VFP 8 | #define VFP 8 | ||||||
|  |  | ||||||
| #define LCD_Width     480				//LCD<43><44><EFBFBD><EFBFBD><EFBFBD>س<EFBFBD><D8B3><EFBFBD> | #define LCD_Width 480                       // LCD<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>س<EFBFBD><EFBFBD><EFBFBD> | ||||||
| #define LCD_Height    272				//LCD<43><44><EFBFBD><EFBFBD><EFBFBD>ؿ<EFBFBD><D8BF><EFBFBD> | #define LCD_Height 272                      // LCD<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؿ<EFBFBD><EFBFBD><EFBFBD> | ||||||
| #define LCD_Pixels    (LCD_Width*LCD_Height) 		//<2F>ֱ<EFBFBD><D6B1><EFBFBD> | #define LCD_Pixels (LCD_Width * LCD_Height) // <EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD> | ||||||
| #define LCD_MemoryAdd   0xD0000000 	//<2F>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ   | #define LCD_MemoryAdd 0xD0000000            // <EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>ַ | ||||||
|  |  | ||||||
| //	<09>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ƫ<EFBFBD>Ƶ<EFBFBD>ַ | //	<09>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ƫ<EFBFBD>Ƶ<EFBFBD>ַ | ||||||
| //	<09><><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD>emWinʹ<6E><CAB9>32λɫ<CEBB><C9AB>ʽʱ<CABD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀռ<C4BF> | //	<09><><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD>emWinʹ<6E><CAB9>32λɫ<CEBB><C9AB>ʽʱ<CABD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀռ<C4BF> | ||||||
| //	<09><><EFBFBD>㷽<EFBFBD><E3B7BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>32λ<32><CEBB>ɫ<EFBFBD><C9AB>ʽΪ<CABD><CEAA><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>ռ4<D5BC>ֽڣ<D6BD>ʹ<EFBFBD><CAB9>emWin<69><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>Ϊ<EFBFBD><CEAA>480*272*4*3 | //	<09><><EFBFBD>㷽<EFBFBD><E3B7BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>32λ<32><CEBB>ɫ<EFBFBD><C9AB>ʽΪ<CABD><CEAA><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>ռ4<D5BC>ֽڣ<D6BD>ʹ<EFBFBD><CAB9>emWin<69><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>Ϊ<EFBFBD><CEAA>480*272*4*3 | ||||||
| // | // | ||||||
| #define LCD_MemoryAdd_OFFSET    ((uint32_t)LCD_Width*LCD_Height*4*3)     | #define LCD_MemoryAdd_OFFSET ((uint32_t)LCD_Width * LCD_Height * 4 * 3) | ||||||
|  |  | ||||||
|  |  | ||||||
| /*---------------------- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> -------------------------*/ | /*---------------------- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> -------------------------*/ | ||||||
| void LCD_Init(void); | void LCD_Init(void); | ||||||
| void LCD_Backlight (u8 power); | void LCD_Backlight(u8 power); | ||||||
|  |  | ||||||
| /*-----------------------<2D><><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD>--------------------------*/ | /*-----------------------<2D><><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD>--------------------------*/ | ||||||
|  |  | ||||||
| //IO<49><4F>ʱ<EFBFBD><CAB1> | // IO<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD> | ||||||
| #define LCD_GPIO_CLK	 RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD \ | #define LCD_GPIO_CLK                                                           \ | ||||||
| 							 | RCC_AHB1Periph_GPIOJ | RCC_AHB1Periph_GPIOK | RCC_AHB1Periph_GPIOI |   RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC |         \ | ||||||
|  |       RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOJ | RCC_AHB1Periph_GPIOK |     \ | ||||||
|  |       RCC_AHB1Periph_GPIOI | ||||||
|  |  | ||||||
| //<2F><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | // <EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | ||||||
| #define LTDC_R0_PORT GPIOI | #define LTDC_R0_PORT GPIOI | ||||||
| #define LTDC_R0_PIN GPIO_Pin_15 | #define LTDC_R0_PIN GPIO_Pin_15 | ||||||
| #define LTDC_R0_PINSOURCE GPIO_PinSource15 | #define LTDC_R0_PINSOURCE GPIO_PinSource15 | ||||||
| @@ -68,7 +68,7 @@ void LCD_Backlight (u8 power); | |||||||
| #define LTDC_R7_PIN GPIO_Pin_6 | #define LTDC_R7_PIN GPIO_Pin_6 | ||||||
| #define LTDC_R7_PINSOURCE GPIO_PinSource6 | #define LTDC_R7_PINSOURCE GPIO_PinSource6 | ||||||
|  |  | ||||||
| //<2F><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | // <EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | ||||||
| #define LTDC_G0_PORT GPIOJ | #define LTDC_G0_PORT GPIOJ | ||||||
| #define LTDC_G0_PIN GPIO_Pin_7 | #define LTDC_G0_PIN GPIO_Pin_7 | ||||||
| #define LTDC_G0_PINSOURCE GPIO_PinSource7 | #define LTDC_G0_PINSOURCE GPIO_PinSource7 | ||||||
| @@ -101,7 +101,7 @@ void LCD_Backlight (u8 power); | |||||||
| #define LTDC_G7_PIN GPIO_Pin_2 | #define LTDC_G7_PIN GPIO_Pin_2 | ||||||
| #define LTDC_G7_PINSOURCE GPIO_PinSource2 | #define LTDC_G7_PINSOURCE GPIO_PinSource2 | ||||||
|  |  | ||||||
| //<2F><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | // <EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | ||||||
| #define LTDC_B0_PORT GPIOJ | #define LTDC_B0_PORT GPIOJ | ||||||
| #define LTDC_B0_PIN GPIO_Pin_12 | #define LTDC_B0_PIN GPIO_Pin_12 | ||||||
| #define LTDC_B0_PINSOURCE GPIO_PinSource12 | #define LTDC_B0_PINSOURCE GPIO_PinSource12 | ||||||
| @@ -134,197 +134,146 @@ void LCD_Backlight (u8 power); | |||||||
| #define LTDC_B7_PIN GPIO_Pin_6 | #define LTDC_B7_PIN GPIO_Pin_6 | ||||||
| #define LTDC_B7_PINSOURCE GPIO_PinSource6 | #define LTDC_B7_PINSOURCE GPIO_PinSource6 | ||||||
|  |  | ||||||
| //<2F><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><C5BA><EFBFBD> | // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><EFBFBD><EFBFBD> | ||||||
| #define LTDC_CLK_PORT         GPIOI					//LCDʱ<44><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | #define LTDC_CLK_PORT GPIOI // LCDʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | ||||||
| #define LTDC_CLK_PIN GPIO_Pin_14 | #define LTDC_CLK_PIN GPIO_Pin_14 | ||||||
| #define LTDC_CLK_PINSOURCE GPIO_PinSource14 | #define LTDC_CLK_PINSOURCE GPIO_PinSource14 | ||||||
|  |  | ||||||
| #define LTDC_HSYNC_PORT       GPIOI					//<2F><>ͬ<EFBFBD><CDAC> | #define LTDC_HSYNC_PORT GPIOI // <EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD> | ||||||
| #define LTDC_HSYNC_PIN GPIO_Pin_12 | #define LTDC_HSYNC_PIN GPIO_Pin_12 | ||||||
| #define LTDC_HSYNC_PINSOURCE GPIO_PinSource12 | #define LTDC_HSYNC_PINSOURCE GPIO_PinSource12 | ||||||
|  |  | ||||||
| #define LTDC_VSYNC_PORT       GPIOI					//֡ͬ<D6A1><CDAC> | #define LTDC_VSYNC_PORT GPIOI // ֡ͬ<EFBFBD><EFBFBD> | ||||||
| #define LTDC_VSYNC_PIN GPIO_Pin_13 | #define LTDC_VSYNC_PIN GPIO_Pin_13 | ||||||
| #define LTDC_VSYNC_PINSOURCE GPIO_PinSource13 | #define LTDC_VSYNC_PINSOURCE GPIO_PinSource13 | ||||||
|  |  | ||||||
| #define LTDC_DE_PORT          GPIOK					//<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9> | #define LTDC_DE_PORT GPIOK // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD> | ||||||
| #define LTDC_DE_PIN GPIO_Pin_7 | #define LTDC_DE_PIN GPIO_Pin_7 | ||||||
| #define LTDC_DE_PINSOURCE GPIO_PinSource7 | #define LTDC_DE_PINSOURCE GPIO_PinSource7 | ||||||
|  |  | ||||||
| #define LTDC_Black_PORT       GPIOD					//<2F><><EFBFBD><EFBFBD> | #define LTDC_Black_PORT GPIOD // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> | ||||||
| #define LTDC_Black_PIN GPIO_Pin_13 | #define LTDC_Black_PIN GPIO_Pin_13 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #define COLOR565TO888(color) ((((color)&0xf800)<<8)|((color)&0x07e0)<<5|(((color)&0x001f)<<3)) | typedef struct { | ||||||
| #define COLOR888TO565(color)	((((color)>>8)&0xf800)|(((color)>>5)&0x07e0)|(((color)>>3)&0x001f)) |  | ||||||
| //<2F><>RGBת<42><D7AA>Ϊ565<36><35>ʽ |  | ||||||
| #define RGB(r,g,b)		((((r)>>3)<<11)|(((g)>>2)<<5)|((b)>>3)) |  | ||||||
| //RGBת<42>Ҷ<EFBFBD> |  | ||||||
| #define RGB2GRAY(rgb16) (((((rgb16)&0xf800)>>8)+(((rgb16)&0x07e0)>>3)+(((rgb16)&0x001f)<<3))/3) |  | ||||||
| //<2F>Ҷ<EFBFBD>תRGB |  | ||||||
| #define GRAY2RGB(gray) ((((gray)>>3)<<11)|(((gray)>>2)<<5)|((gray)>>3)) |  | ||||||
|  |  | ||||||
| //#define U8    unsigned char |  | ||||||
| //#define U16   unsigned short |  | ||||||
| //#define U32   unsigned |  | ||||||
|  |  | ||||||
|  |  | ||||||
| //extern u32* LCD_ADDR; |  | ||||||
| //extern u32* LCD_ADDR1; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| //typedef struct |  | ||||||
| //{ |  | ||||||
| //	u32 BackColor;			//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ |  | ||||||
| //	u32 Color;					//ǰ<><C7B0><EFBFBD><EFBFBD>ɫ |  | ||||||
| //	u32 ScreenDis;			//<2F><>Ļ<EFBFBD><C4BB>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30>1 |  | ||||||
| //	u32 DrawMode;				//<2F><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>ɫʱ<C9AB><CAB1><EFBFBD>Ʊ<EFBFBD><C6B1><EFBFBD>ɫ<EFBFBD><C9AB>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>ɫʱ<C9AB><CAB1><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD><C6B1><EFBFBD>ɫ |  | ||||||
| //	u16 *DrawAddr;			//<2F><><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ַ |  | ||||||
| //	u32	LcdAddr;				//<2F><>ǰָ<C7B0><D6B8><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD>л<EFBFBD> |  | ||||||
| //	u32 LcdSwitchEn;		//1,<2C><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD>LcdAddrָ<72><D6B8><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ַ<EFBFBD><D6B7>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD> |  | ||||||
| //	int LayerBuffEnter;	//<2F><><EFBFBD>뻺<EFBFBD><EBBBBA><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD> |  | ||||||
| //	int WindowSrcX;			//<2F><><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD> |  | ||||||
| //	int WindowSrcY;			// |  | ||||||
| //	int WindowDstX; |  | ||||||
| //	int WindowDstY; |  | ||||||
| //} LCD_Struct; |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   int xs; |   int xs; | ||||||
|   int ys; |   int ys; | ||||||
|   int xe; |   int xe; | ||||||
|   int ye; |   int ye; | ||||||
| }LCD_WindowStruct; | } LCD_WindowStruct; | ||||||
|  |  | ||||||
|  | typedef struct { | ||||||
|  |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   int x_size; |   int x_size; | ||||||
|   int y_size; |   int y_size; | ||||||
|   int color; |   int color; | ||||||
|   int bkColor; |   int bkColor; | ||||||
| 	int effective;		//1<><31><EFBFBD><EFBFBD><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD><EFBFBD><EFBFBD>Ч |   int effective; // 1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч | ||||||
|   LCD_WindowStruct win; |   LCD_WindowStruct win; | ||||||
|   LCD_WindowStruct realwin; |   LCD_WindowStruct realwin; | ||||||
|   u16 *draw; |   u16 *draw; | ||||||
|   u16 *show; |   u16 *show; | ||||||
| 	void(*fresh)(void); |   void (*fresh)(void); | ||||||
|   int LcdSwitchEn; |   int LcdSwitchEn; | ||||||
|   int LayerBuffEnter; |   int LayerBuffEnter; | ||||||
| }LCD_Struct; | } LCD_Struct; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>LCD<43><44><EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD>ʼ<EFBFBD><CABC> | // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>LCD<43><44><EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD>ʼ<EFBFBD><CABC> | ||||||
| //	 |  | ||||||
| void LCD_LayerInit(void); | void LCD_LayerInit(void); | ||||||
|  |  | ||||||
|  | // <20><>ȡͼ<C8A1><CDBC><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ַ | ||||||
|  | u32 *LCD_GetShowAddr(void); | ||||||
|  |  | ||||||
| //<2F><>ȡͼ<C8A1><CDBC><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>ַ | // <EFBFBD><EFBFBD>ȡͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>ַ | ||||||
| u32 *LCD_GetShowAddr (void); | u32 *LCD_GetDrawAddr(void); | ||||||
|  |  | ||||||
| //<2F><>ȡͼ<C8A1><CDBC><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>ַ | u32 LCD_SetLayer(u32 AddrIndex); | ||||||
| u32 *LCD_GetDrawAddr (void); |  | ||||||
|  |  | ||||||
|  | u32 LCD_SetDrawLayer(u32 Index); | ||||||
|  |  | ||||||
| u32 LCD_SetLayer (u32 AddrIndex); | u32 LCD_SetLcdColor(u32 color); | ||||||
|  |  | ||||||
| u32 LCD_SetDrawLayer (u32 Index); | u32 LCD_SetLcdBkColor(u32 color); | ||||||
|  |  | ||||||
| u32 LCD_SetLcdColor (u32 color); | u32 LCD_SetLcdColor16(u32 color); | ||||||
|  |  | ||||||
| u32 LCD_SetLcdBkColor (u32 color); | u32 LCD_SetLcdBkColor16(u32 color); | ||||||
|  |  | ||||||
| u32 LCD_SetLcdColor16 (u32 color); | u32 LCD_GetLcdColor(void); | ||||||
|  |  | ||||||
| u32 LCD_SetLcdBkColor16 (u32 color); | u32 LCD_GetLcdBkColor(void); | ||||||
|  |  | ||||||
| u32 LCD_GetLcdColor (void); | u32 LCD_GetLcdColor16(void); | ||||||
|  |  | ||||||
| u32 LCD_GetLcdBkColor (void); | u32 LCD_GetLcdBkColor16(void); | ||||||
|  |  | ||||||
| u32 LCD_GetLcdColor16 (void); | // <20>㸴<EFBFBD><E3B8B4> | ||||||
|  | void LCD_LayerCopy(int dst, int src); | ||||||
|  |  | ||||||
| u32 LCD_GetLcdBkColor16 (void); | // <20><>ʼ<EFBFBD>ڻ<EFBFBD><DABB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | ||||||
|  | void LCD_LayerBufferOn(void); | ||||||
|  |  | ||||||
| //<2F>㸴<EFBFBD><EFBFBD> | // <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | ||||||
| void LCD_LayerCopy (int dst,int src); | void LCD_LayerBuffShow(void); | ||||||
|  |  | ||||||
| //<2F><>ʼ<EFBFBD>ڻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | // <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>Ļˢ<EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD>1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˢ<EFBFBD><EFBFBD> | ||||||
| void LCD_LayerBufferOn (void); | int LCD_GetLayerUpdataStat(void); | ||||||
|  |  | ||||||
| //<2F><>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | // <EFBFBD><EFBFBD><EFBFBD>뻺<EFBFBD><EFBFBD><EFBFBD><EFBFBD> | ||||||
| void LCD_LayerBuffShow (void); | void LCD_EnterLayerBuff(void); | ||||||
|  |  | ||||||
| //<2F><>ȡ<EFBFBD><EFBFBD>Ļˢ<EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD>1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˢ<EFBFBD><EFBFBD> | // <20>л<EFBFBD><D0BB>㣬<EFBFBD><E3A3AC><EFBFBD>ø<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶʱ<EFBFBD><EFBFBD> | ||||||
| int LCD_GetLayerUpdataStat (void); | void LCD_SwitchLayerBuff(void); | ||||||
|  |  | ||||||
| //<2F><><EFBFBD>뻺<EFBFBD><EFBFBD><EFBFBD><EFBFBD> | // <20>˳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | ||||||
| void LCD_EnterLayerBuff (void); | void LCD_ExitLayerBuff(void); | ||||||
|  |  | ||||||
| //<EFBFBD>л<EFBFBD><EFBFBD>㣬<EFBFBD><EFBFBD><EFBFBD>ø<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶʱ<EFBFBD><EFBFBD> | // <20><><EFBFBD>û<C3BB><EEB6AF><EFBFBD><EFBFBD> | ||||||
| void LCD_SwitchLayerBuff (void); | void LCD_SetWindow(int x_s, int y_s, int x_size, int y_size); | ||||||
|  |  | ||||||
| //<2F>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | int LCD_GetWindowSizeX(void); | ||||||
| void LCD_ExitLayerBuff (void); |  | ||||||
|  |  | ||||||
|  | int LCD_GetWindowSizeY(void); | ||||||
| //<2F><><EFBFBD>û<C3BB><EEB6AF><EFBFBD><EFBFBD> |  | ||||||
| void LCD_SetWindow (int x_s,int y_s,int x_size,int y_size); |  | ||||||
|  |  | ||||||
| int LCD_GetWindowSizeX (void); |  | ||||||
|  |  | ||||||
| int LCD_GetWindowSizeY (void); |  | ||||||
|  |  | ||||||
| int LCD_GetLcdSizeX(void); | int LCD_GetLcdSizeX(void); | ||||||
|  |  | ||||||
| int LCD_GetLcdSizeY (void); | int LCD_GetLcdSizeY(void); | ||||||
|  |  | ||||||
| //<2F><><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ģʽ<C4A3><CABD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD><C6B1><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD><C6B1><EFBFBD> | // <EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD>1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD><EFBFBD><EFBFBD> | ||||||
| void LCD_SetLcdDrawMode (int mode); | void LCD_SetLcdDrawMode(int mode); | ||||||
|  |  | ||||||
| void LCD_Clear (void); | void LCD_Clear(void); | ||||||
|  |  | ||||||
| //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD>ʾ | // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD>ʾ | ||||||
| void LCD_ClearRect (int x,int y,int x_size,int y_size); | void LCD_ClearRect(int x, int y, int x_size, int y_size); | ||||||
|  |  | ||||||
| void LCD_DrawPoint (int x,int y,u32 mode); | void LCD_DrawPoint(int x, int y, u32 mode); | ||||||
|  |  | ||||||
| void LCD_DrawPointSafe (int x,int y,u32 mode); | void LCD_DrawPointSafe(int x, int y, u32 mode); | ||||||
|  |  | ||||||
| //<2F><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD>㣬<EFBFBD><E3A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>ɫ | // <EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD><EFBFBD>㣬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD>ɫ | ||||||
| void LCD_DrawPointSafeColor (int x,int y,u16 color); | void LCD_DrawPointSafeColor(int x, int y, u16 color); | ||||||
|  |  | ||||||
| //<2F><>ָ<EFBFBD><D6B8>ɫ<C9AB><CDB8><EFBFBD>Ȼ<EFBFBD><C8BB><EFBFBD>0~32 | // <EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><EFBFBD><EFBFBD>0~32 | ||||||
| void LCD_DrawPointSafeColorAlpha (int x,int y,u16 color,u8 alpha); | void LCD_DrawPointSafeColorAlpha(int x, int y, u16 color, u8 alpha); | ||||||
|  |  | ||||||
| //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Σ<EFBFBD><CEA3>Ѵ<EFBFBD><D1B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊԭ<CEAA><D4AD> | // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Σ<EFBFBD><EFBFBD>Ѵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊԭ<EFBFBD><EFBFBD> | ||||||
| void LCD_FillRectByColor (int x,int y,int x_size,int y_size); | void LCD_FillRectByColor(int x, int y, int x_size, int y_size); | ||||||
|  |  | ||||||
| //<2F><><EFBFBD><CDB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Σ<EFBFBD><CEA3>Ѵ<EFBFBD><D1B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊԭ<CEAA><D4AD> | // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Σ<EFBFBD><EFBFBD>Ѵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊԭ<EFBFBD><EFBFBD> | ||||||
| void LCD_FillRectByColorAlpha (int x,int y,int x_size,int y_size,u8 alpha); | void LCD_FillRectByColorAlpha(int x, int y, int x_size, int y_size, u8 alpha); | ||||||
|  |  | ||||||
| //void LCD_FillRect16 (u16 *buff,int xsize,int ysize); | // void LCD_FillRect16 (u16 *buff,int xsize,int ysize); | ||||||
|  |  | ||||||
| //void LCD_FillRectOff16 (u16 *buff,int x_s,int y_s,int xsize,int ysize); | // void LCD_FillRectOff16 (u16 *buff,int x_s,int y_s,int xsize,int ysize); | ||||||
|  |  | ||||||
| void LCD_FillRectOff16At (int s_x,int s_y,int s_xsize,int s_ysize,u16 *buff,int x_s,int y_s,int xsize,int ysize); | void LCD_FillRectOff16At(int s_x, int s_y, int s_xsize, int s_ysize, u16 *buff, | ||||||
|  |                          int x_s, int y_s, int xsize, int ysize); | ||||||
|  |  | ||||||
| //<2F><><EFBFBD><EFBFBD><EFBFBD><CDB8><EFBFBD>ȵ<EFBFBD>ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD> | // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȵ<EFBFBD>ͼƬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> | ||||||
| void LCD_FillRectOffAtAlpha (int s_x,int s_y,int s_xsize,int s_ysize,void *buff,int x_s,int y_s,int xsize,int ysize); | void LCD_FillRectOffAtAlpha(int s_x, int s_y, int s_xsize, int s_ysize, | ||||||
|  |                             void *buff, int x_s, int y_s, int xsize, int ysize); | ||||||
|  |  | ||||||
| void LCD_GetColors (u16 *buff,int x_s,int y_s,int x_size,int y_size); | void LCD_GetColors(u16 *buff, int x_s, int y_s, int x_size, int y_size); | ||||||
|  |  | ||||||
| #endif | #endif | ||||||
|   | |||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,110 +1,111 @@ | |||||||
| #include "main.h" | ////////////////////////////////////////////////////////////////////////////////// | ||||||
| #include "stm32f4xx.h"  | // <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<45><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><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 | ||||||
|  | ////////////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
| #include "nes_main.h" | #include "nes_main.h" | ||||||
| #include "nes_ppu.h" |  | ||||||
| #include "nes_mapper.h" |  | ||||||
| #include "nes_apu.h" |  | ||||||
| #include "mymem.h" |  | ||||||
| #include "dac.h" | #include "dac.h" | ||||||
|  | #include "main.h" | ||||||
|  | #include "mymem.h" | ||||||
|  | #include "nes_apu.h" | ||||||
|  | #include "nes_mapper.h" | ||||||
|  | #include "nes_ppu.h" | ||||||
|  | #include "stm32f4xx.h" | ||||||
|  |  | ||||||
| #include "ff.h" | #include "ff.h" | ||||||
| #include "string.h" | #include "string.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<45><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><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  			   |  | ||||||
| ////////////////////////////////////////////////////////////////////////////////// 	  |  | ||||||
|  |  | ||||||
|  | uint8_t nes_frame_cnt; // nes֡<73><D6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | ||||||
| u8 nes_frame_cnt;		//nes֡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>  | int MapperNo;     // map<EFBFBD><EFBFBD><EFBFBD><EFBFBD> | ||||||
| int MapperNo;			//map<EFBFBD><EFBFBD><EFBFBD><EFBFBD> | int NES_scanline; // nesɨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> | ||||||
| int NES_scanline;		//nesɨ<73><C9A8><EFBFBD><EFBFBD> |  | ||||||
| int VROM_1K_SIZE; | int VROM_1K_SIZE; | ||||||
| int VROM_8K_SIZE; | int VROM_8K_SIZE; | ||||||
|  |  | ||||||
| u8 PADdata;   			//<2F>ֱ<EFBFBD>1<EFBFBD><31>ֵ [7:0]<5D><>7 <20><>6 <20><>5 <20><>4 Start3 Select2 B1 A0   | uint8_t PADdata;  // <EFBFBD>ֱ<EFBFBD>1<EFBFBD><EFBFBD>ֵ [7:0]<5D><>7 <20><>6 <20><>5 <20><>4 Start3 Select2 B1 A0 | ||||||
| u8 PADdata1;   			//<2F>ֱ<EFBFBD>2<EFBFBD><32>ֵ [7:0]<5D><>7 <20><>6 <20><>5 <20><>4 Start3 Select2 B1 A0   | uint8_t PADdata1; // <EFBFBD>ֱ<EFBFBD>2<EFBFBD><EFBFBD>ֵ [7:0]<5D><>7 <20><>6 <20><>5 <20><>4 Start3 Select2 B1 A0 | ||||||
| u8 *NES_RAM;			//<2F><><EFBFBD><EFBFBD>1024<32>ֽڶ<D6BD><DAB6><EFBFBD> | uint8_t *NES_RAM; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>1024<EFBFBD>ֽڶ<EFBFBD><EFBFBD><EFBFBD> | ||||||
| u8 *NES_SRAM;   | uint8_t *NES_SRAM; | ||||||
| NES_header *RomHeader; 	//rom<6F>ļ<EFBFBD>ͷ | NES_header *RomHeader; // rom<EFBFBD>ļ<EFBFBD>ͷ | ||||||
| MAPPER *NES_Mapper; | MAPPER *NES_Mapper; | ||||||
| MapperCommRes *MAPx; | MapperCommRes *MAPx; | ||||||
|  |  | ||||||
|  | uint8_t *spr_ram;   // <20><><EFBFBD><EFBFBD>RAM,256<35>ֽ<EFBFBD> | ||||||
|  | ppu_data *ppu; // ppuָ<75><D6B8> | ||||||
|  | uint8_t *VROM_banks; | ||||||
|  | uint8_t *VROM_tiles; | ||||||
|  |  | ||||||
| u8* spr_ram;			//<2F><><EFBFBD><EFBFBD>RAM,256<35>ֽ<EFBFBD> | apu_t *apu; // apuָ<75><EFBFBD> | ||||||
| ppu_data* ppu;			//ppuָ<75><D6B8> | uint16_t *wave_buffers; | ||||||
| u8* VROM_banks; | uint16_t *i2sbuf1; // <20><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>֡,ռ<><D5BC><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD> 367*4 <20>ֽ<EFBFBD>@22050Hz | ||||||
| u8* VROM_tiles; | uint16_t *i2sbuf2; // <20><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>֡,ռ<><D5BC><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD> 367*4 <20>ֽ<EFBFBD>@22050Hz | ||||||
|  |  | ||||||
| apu_t *apu; 			//apuָ<75><D6B8> | uint8_t *romfile; // nes<65>ļ<EFBFBD>ָ<EFBFBD><D6B8>,ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>nes<65>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ. | ||||||
| u16 *wave_buffers; 		 |  | ||||||
| u16 *i2sbuf1; 			//<2F><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>֡,ռ<><D5BC><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD> 367*4 <20>ֽ<EFBFBD>@22050Hz |  | ||||||
| u16 *i2sbuf2; 			//<2F><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>֡,ռ<><D5BC><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD> 367*4 <20>ֽ<EFBFBD>@22050Hz |  | ||||||
|  |  | ||||||
| u8* romfile;			//nes<65>ļ<EFBFBD>ָ<EFBFBD><D6B8>,ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>nes<65>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ. |  | ||||||
| ////////////////////////////////////////////////////////////////////////////////////// | ////////////////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
| //<2F><>¼nes<65>Ƿ<EFBFBD><C7B7><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD> | // <EFBFBD><EFBFBD>¼nes<EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> | ||||||
| static u8 g_nes_break=0; | static uint8_t g_nes_break = 0; | ||||||
|  |  | ||||||
|  | // <20><><EFBFBD><EFBFBD>ROM | ||||||
|  | // <20><><EFBFBD><EFBFBD>ֵ:0,<2C>ɹ<EFBFBD> | ||||||
|   |  | ||||||
| //<2F><><EFBFBD><EFBFBD>ROM |  | ||||||
| //<2F><><EFBFBD><EFBFBD>ֵ:0,<2C>ɹ<EFBFBD> |  | ||||||
| //     1,<2C>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD> | //     1,<2C>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD> | ||||||
| //     3,map<61><70><EFBFBD><EFBFBD> | //     3,map<61><70><EFBFBD><EFBFBD> | ||||||
| u8 nes_load_rom(void) | uint8_t nes_load_rom(void) { | ||||||
| {   |   uint8_t *p; | ||||||
|     u8* p;   |   uint8_t i; | ||||||
| 	u8 i; |   uint8_t res = 0; | ||||||
| 	u8 res=0; |   p = (uint8_t *)romfile; | ||||||
| 	p=(u8*)romfile;	 |   if (strncmp((char *)p, "NES", 3) == 0) { | ||||||
| 	if(strncmp((char*)p,"NES",3)==0) |     RomHeader->ctrl_z = p[3]; | ||||||
|  |     RomHeader->num_16k_rom_banks = p[4]; | ||||||
|  |     RomHeader->num_8k_vrom_banks = p[5]; | ||||||
|  |     RomHeader->flags_1 = p[6]; | ||||||
|  |     RomHeader->flags_2 = p[7]; | ||||||
|  |     if (RomHeader->flags_1 & 0x04) | ||||||
|  |       p += 512;                           // <20><>512<31>ֽڵ<D6BD>trainer: | ||||||
|  |     if (RomHeader->num_8k_vrom_banks > 0) // <20><><EFBFBD><EFBFBD>VROM,<2C><><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD> | ||||||
|     { |     { | ||||||
| 		RomHeader->ctrl_z=p[3]; |       VROM_banks = p + 16 + (RomHeader->num_16k_rom_banks * 0x4000); | ||||||
| 		RomHeader->num_16k_rom_banks=p[4]; | #if NES_RAM_SPEED == 1 // 1:<3A>ڴ<EFBFBD>ռ<EFBFBD><D5BC>С 0:<3A>ٶȿ<D9B6> | ||||||
| 		RomHeader->num_8k_vrom_banks=p[5]; |       VROM_tiles = VROM_banks; | ||||||
| 		RomHeader->flags_1=p[6]; |  | ||||||
| 		RomHeader->flags_2=p[7];  |  | ||||||
| 		if(RomHeader->flags_1&0x04)p+=512;		//<2F><>512<31>ֽڵ<D6BD>trainer: |  | ||||||
| 		if(RomHeader->num_8k_vrom_banks>0)		//<2F><><EFBFBD><EFBFBD>VROM,<2C><><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD> |  | ||||||
| 		{		 |  | ||||||
| 			VROM_banks=p+16+(RomHeader->num_16k_rom_banks*0x4000); |  | ||||||
| #if	NES_RAM_SPEED==1	//1:<3A>ڴ<EFBFBD>ռ<EFBFBD><D5BC>С 0:<3A>ٶȿ<D9B6>	  |  | ||||||
| 			VROM_tiles=VROM_banks;	  |  | ||||||
| #else | #else | ||||||
| 			VROM_tiles=mymalloc(RomHeader->num_8k_vrom_banks*8*1024);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1MB<4D>ڴ<EFBFBD>!!! |       VROM_tiles = mymalloc(RomHeader->num_8k_vrom_banks * 8 * | ||||||
| 			if(VROM_tiles==0)VROM_tiles=VROM_banks;//<2F>ڴ治<EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<EFBFBD><EFBFBD><EFBFBD><EFBFBD>VROM_titles<EFBFBD><EFBFBD>VROM_banks<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>			 |                             1024); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1MB<EFBFBD>ڴ<EFBFBD>!!! | ||||||
| 			compile(RomHeader->num_8k_vrom_banks*8*1024/16,VROM_banks,VROM_tiles);   |       if (VROM_tiles == 0) | ||||||
|  |         VROM_tiles = | ||||||
|  |             VROM_banks; // <20>ڴ治<DAB4><E6B2BB><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>VROM_titles<65><73>VROM_banks<6B><73><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD> | ||||||
|  |       compile(RomHeader->num_8k_vrom_banks * 8 * 1024 / 16, VROM_banks, | ||||||
|  |               VROM_tiles); | ||||||
| #endif | #endif | ||||||
| 		}else  |     } else { | ||||||
| 		{ |       VROM_banks = mymalloc(8 * 1024); | ||||||
| 			VROM_banks=mymalloc(8*1024); |       VROM_tiles = mymalloc(8 * 1024); | ||||||
| 			VROM_tiles=mymalloc(8*1024); |       if (!VROM_banks || !VROM_tiles) | ||||||
| 			if(!VROM_banks||!VROM_tiles)res=1; |         res = 1; | ||||||
|     } |     } | ||||||
|     VROM_1K_SIZE = RomHeader->num_8k_vrom_banks * 8; |     VROM_1K_SIZE = RomHeader->num_8k_vrom_banks * 8; | ||||||
|     VROM_8K_SIZE = RomHeader->num_8k_vrom_banks; |     VROM_8K_SIZE = RomHeader->num_8k_vrom_banks; | ||||||
| 		MapperNo=(RomHeader->flags_1>>4)|(RomHeader->flags_2&0xf0); |     MapperNo = (RomHeader->flags_1 >> 4) | (RomHeader->flags_2 & 0xf0); | ||||||
| 		if(RomHeader->flags_2 & 0x0E)MapperNo=RomHeader->flags_1>>4;//<2F><><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>  |     if (RomHeader->flags_2 & 0x0E) | ||||||
| 		//printf("use map:%d\r\n",MapperNo); |       MapperNo = RomHeader->flags_1 >> 4; // <20><><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | ||||||
| 		for(i=0;i<255;i++)  // <20><><EFBFBD><EFBFBD>֧<EFBFBD>ֵ<EFBFBD>Mapper<EFBFBD><EFBFBD> |     // printf("use map:%d\r\n",MapperNo); | ||||||
|  |     for (i = 0; i < 255; i++) // <20><><EFBFBD><EFBFBD>֧<EFBFBD>ֵ<EFBFBD>Mapper<65><72> | ||||||
|     { |     { | ||||||
| 			if (MapTab[i]==MapperNo)break;		 |       if (MapTab[i] == MapperNo) | ||||||
| 			if (MapTab[i]==-1)res=3;  |         break; | ||||||
|  |       if (MapTab[i] == -1) | ||||||
|  |         res = 3; | ||||||
|     } |     } | ||||||
| 		if(res==0) |     if (res == 0) { | ||||||
| 		{ |       switch (MapperNo) { | ||||||
| 			switch(MapperNo) |  | ||||||
| 			{ |  | ||||||
|       case 1: |       case 1: | ||||||
| 					MAP1=mymalloc(sizeof(Mapper1Res));  |         MAP1 = mymalloc(sizeof(Mapper1Res)); | ||||||
| 					if(!MAP1)res=1; |         if (!MAP1) | ||||||
|  |           res = 1; | ||||||
|         break; |         break; | ||||||
|       case 4: |       case 4: | ||||||
|       case 6: |       case 6: | ||||||
| @@ -122,22 +123,22 @@ u8 nes_load_rom(void) | |||||||
|       case 69: |       case 69: | ||||||
|       case 85: |       case 85: | ||||||
|       case 189: |       case 189: | ||||||
| 					MAPx=mymalloc(sizeof(MapperCommRes));  |         MAPx = mymalloc(sizeof(MapperCommRes)); | ||||||
| 					if(!MAPx)res=1; |         if (!MAPx) | ||||||
|  |           res = 1; | ||||||
|         break; |         break; | ||||||
|       default: |       default: | ||||||
|         break; |         break; | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| 	return res;	//<2F><><EFBFBD><EFBFBD>ִ<EFBFBD>н<EFBFBD><D0BD><EFBFBD> |   return res; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>н<EFBFBD><EFBFBD><EFBFBD> | ||||||
| } | } | ||||||
| //<2F><><EFBFBD><EFBFBD>NES_RAM<41><4D><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>ʱ<EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD>ָ<EFBFBD><D6B8> | // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>NES_RAM<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>ʱ<EFBFBD>ĸ<EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD> | ||||||
| void *nes_ram_alignment; | void *nes_ram_alignment; | ||||||
| //<2F>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>  | // <EFBFBD>ͷ<EFBFBD><EFBFBD>ڴ<EFBFBD> | ||||||
| void nes_sram_free(void) | void nes_sram_free(void) { | ||||||
| {  |   // myfree(NES_RAM); | ||||||
| 	//myfree(NES_RAM);		 |  | ||||||
|   myfree(nes_ram_alignment); |   myfree(nes_ram_alignment); | ||||||
|   myfree(NES_SRAM); |   myfree(NES_SRAM); | ||||||
|   myfree(RomHeader); |   myfree(RomHeader); | ||||||
| @@ -149,14 +150,15 @@ void nes_sram_free(void) | |||||||
|   myfree(i2sbuf1); |   myfree(i2sbuf1); | ||||||
|   myfree(i2sbuf2); |   myfree(i2sbuf2); | ||||||
|   myfree(romfile); |   myfree(romfile); | ||||||
| 	if((VROM_tiles!=VROM_banks)&&VROM_banks&&VROM_tiles)//<2F><><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>ΪVROM_banks<6B><73>VROM_tiles<65><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>,<2C><><EFBFBD>ͷ<EFBFBD> |   if ((VROM_tiles != VROM_banks) && VROM_banks && | ||||||
|  |       VROM_tiles) // <20><><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>ΪVROM_banks<6B><73>VROM_tiles<65><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>,<2C><><EFBFBD>ͷ<EFBFBD> | ||||||
|   { |   { | ||||||
|     myfree(VROM_banks); |     myfree(VROM_banks); | ||||||
|     myfree(VROM_tiles); |     myfree(VROM_tiles); | ||||||
|   } |   } | ||||||
| 	switch (MapperNo)//<2F>ͷ<EFBFBD>map<61>ڴ<EFBFBD> |   switch (MapperNo) // <EFBFBD>ͷ<EFBFBD>map<EFBFBD>ڴ<EFBFBD> | ||||||
|   { |   { | ||||||
| 		case 1: 			//<2F>ͷ<EFBFBD><CDB7>ڴ<EFBFBD> |   case 1: // <EFBFBD>ͷ<EFBFBD><EFBFBD>ڴ<EFBFBD> | ||||||
|     myfree(MAP1); |     myfree(MAP1); | ||||||
|     break; |     break; | ||||||
|   case 4: |   case 4: | ||||||
| @@ -175,360 +177,271 @@ void nes_sram_free(void) | |||||||
|   case 69: |   case 69: | ||||||
|   case 85: |   case 85: | ||||||
|   case 189: |   case 189: | ||||||
| 			myfree(MAPx);break;	 		//<2F>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>  |     myfree(MAPx); | ||||||
| 		default:break;  |     break; // <20>ͷ<EFBFBD><CDB7>ڴ<EFBFBD> | ||||||
|  |   default: | ||||||
|  |     break; | ||||||
|   } |   } | ||||||
| 	NES_RAM=0;	 |   NES_RAM = 0; | ||||||
| 	NES_SRAM=0; |   NES_SRAM = 0; | ||||||
| 	RomHeader=0; |   RomHeader = 0; | ||||||
| 	NES_Mapper=0; |   NES_Mapper = 0; | ||||||
| 	spr_ram=0; |   spr_ram = 0; | ||||||
| 	ppu=0; |   ppu = 0; | ||||||
| 	apu=0; |   apu = 0; | ||||||
| 	wave_buffers=0; |   wave_buffers = 0; | ||||||
| 	i2sbuf1=0; |   i2sbuf1 = 0; | ||||||
| 	i2sbuf2=0; |   i2sbuf2 = 0; | ||||||
| 	romfile=0;  |   romfile = 0; | ||||||
| 	VROM_banks=0; |   VROM_banks = 0; | ||||||
| 	VROM_tiles=0;  |   VROM_tiles = 0; | ||||||
| 	MAP1=0; |   MAP1 = 0; | ||||||
| 	MAPx=0; |   MAPx = 0; | ||||||
| } | } | ||||||
| //ΪNES<45><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD> | // ΪNES<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD> | ||||||
| //romsize:nes<65>ļ<EFBFBD><C4BC><EFBFBD>С | // romsize:nes<65>ļ<EFBFBD><C4BC><EFBFBD>С | ||||||
| //<2F><><EFBFBD><EFBFBD>ֵ:0,<2C><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD> | // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ:0,<2C><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD> | ||||||
| //        1,<2C><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7> | //        1,<2C><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7> | ||||||
| u8 nes_sram_malloc(u32 romsize) | uint8_t nes_sram_malloc(uint32_t romsize) { | ||||||
| { |   uint16_t i = 0; | ||||||
| 	u16 i=0; |  | ||||||
|  |  | ||||||
| 	//NES_RAM<41><4D>Ҫ0x800<30><30>С<EFBFBD><D0A1><EFBFBD>ڴ棬<DAB4><E6A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x400<30><30><EFBFBD>ڴ棬<DAB4><E6A3AC><EFBFBD><EFBFBD>1024<32>ֽڶ<D6BD><DAB6><EFBFBD> |   // NES_RAM<EFBFBD><EFBFBD>Ҫ0x800<EFBFBD><EFBFBD>С<EFBFBD><EFBFBD><EFBFBD>ڴ棬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x400<EFBFBD><EFBFBD><EFBFBD>ڴ棬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>1024<EFBFBD>ֽڶ<EFBFBD><EFBFBD><EFBFBD> | ||||||
| 	nes_ram_alignment=mymalloc(0x800+0x400); |   nes_ram_alignment = mymalloc(0x800 + 0x400); | ||||||
| 	NES_RAM=(void*)(((u32)nes_ram_alignment+0x400)&0xfffffc00); |   NES_RAM = (void *)(((uint32_t)nes_ram_alignment + 0x400) & 0xfffffc00); | ||||||
|  |  | ||||||
|  	NES_SRAM=mymalloc(0X2000); |   NES_SRAM = mymalloc(0X2000); | ||||||
| 	RomHeader=mymalloc(sizeof(NES_header)); |   RomHeader = mymalloc(sizeof(NES_header)); | ||||||
| 	NES_Mapper=mymalloc(sizeof(MAPPER)); |   NES_Mapper = mymalloc(sizeof(MAPPER)); | ||||||
| 	spr_ram=mymalloc(0X100);		 |   spr_ram = mymalloc(0X100); | ||||||
| 	ppu=mymalloc(sizeof(ppu_data));   |   ppu = mymalloc(sizeof(ppu_data)); | ||||||
| 	apu=mymalloc(sizeof(apu_t));		//sizeof(apu_t)=  12588 |   apu = mymalloc(sizeof(apu_t)); // sizeof(apu_t)=  12588 | ||||||
| 	wave_buffers=mymalloc(APU_PCMBUF_SIZE*2); |   wave_buffers = mymalloc(APU_PCMBUF_SIZE * 2); | ||||||
| 	i2sbuf1=mymalloc(APU_PCMBUF_SIZE*4+10); |   i2sbuf1 = mymalloc(APU_PCMBUF_SIZE * 4 + 10); | ||||||
| 	i2sbuf2=mymalloc(APU_PCMBUF_SIZE*4+10); |   i2sbuf2 = mymalloc(APU_PCMBUF_SIZE * 4 + 10); | ||||||
|  	romfile=mymalloc(romsize);			//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸrom<6F>ռ<EFBFBD>,<2C><><EFBFBD><EFBFBD>nes<65>ļ<EFBFBD><C4BC><EFBFBD>С  |   romfile = mymalloc(romsize); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸrom<EFBFBD>ռ<EFBFBD>,<2C><><EFBFBD><EFBFBD>nes<65>ļ<EFBFBD><C4BC><EFBFBD>С | ||||||
| 	if(i==64||!NES_RAM||!NES_SRAM||!RomHeader||!NES_Mapper||!spr_ram||!ppu||!apu||!wave_buffers||!i2sbuf1||!i2sbuf2||!romfile) |   if (i == 64 || !NES_RAM || !NES_SRAM || !RomHeader || !NES_Mapper || | ||||||
| 	{ |       !spr_ram || !ppu || !apu || !wave_buffers || !i2sbuf1 || !i2sbuf2 || | ||||||
|  |       !romfile) { | ||||||
|     nes_sram_free(); |     nes_sram_free(); | ||||||
|     return 1; |     return 1; | ||||||
|   } |   } | ||||||
| 	memset(NES_SRAM,0,0X2000);				//<2F><><EFBFBD><EFBFBD> |   memset(NES_SRAM, 0, 0X2000);                  // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> | ||||||
| 	memset(RomHeader,0,sizeof(NES_header));	//<2F><><EFBFBD><EFBFBD> |   memset(RomHeader, 0, sizeof(NES_header));     // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> | ||||||
| 	memset(NES_Mapper,0,sizeof(MAPPER));	//<2F><><EFBFBD><EFBFBD> |   memset(NES_Mapper, 0, sizeof(MAPPER));        // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> | ||||||
| 	memset(spr_ram,0,0X100);				//<2F><><EFBFBD><EFBFBD> |   memset(spr_ram, 0, 0X100);                    // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> | ||||||
| 	memset(ppu,0,sizeof(ppu_data));			//<2F><><EFBFBD><EFBFBD> |   memset(ppu, 0, sizeof(ppu_data));             // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> | ||||||
| 	memset(apu,0,sizeof(apu_t));			//<2F><><EFBFBD><EFBFBD> |   memset(apu, 0, sizeof(apu_t));                // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> | ||||||
| 	memset(wave_buffers,0,APU_PCMBUF_SIZE*2);//<2F><><EFBFBD><EFBFBD> |   memset(wave_buffers, 0, APU_PCMBUF_SIZE * 2); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> | ||||||
| 	memset(i2sbuf1,0,APU_PCMBUF_SIZE*4+10);	//<2F><><EFBFBD><EFBFBD> |   memset(i2sbuf1, 0, APU_PCMBUF_SIZE * 4 + 10); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> | ||||||
| 	memset(i2sbuf2,0,APU_PCMBUF_SIZE*4+10);	//<2F><><EFBFBD><EFBFBD> |   memset(i2sbuf2, 0, APU_PCMBUF_SIZE * 4 + 10); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> | ||||||
| 	memset(romfile,0,romsize);				//<2F><><EFBFBD><EFBFBD>  |   memset(romfile, 0, romsize);                  // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> | ||||||
|   return 0; |   return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | int nes_xoff = 0; // <20><>ʾ<EFBFBD><CABE>x<EFBFBD>᷽<EFBFBD><E1B7BD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>(ʵ<><CAB5><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>=256-2*nes_xoff) | ||||||
|  | int nes_yoff = 0; | ||||||
|  |  | ||||||
|  | // <20><>ʼnes<65><73>Ϸ | ||||||
|  | // pname:nes<65><73>Ϸ·<CFB7><C2B7> | ||||||
|  | // <20><><EFBFBD><EFBFBD>ֵ: | ||||||
|  | // 0,<2C><><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD> | ||||||
|  | // 1,<2C>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD> | ||||||
|  | // 2,<2C>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> | ||||||
|  | // 3,<2C><>֧<EFBFBD>ֵ<EFBFBD>map | ||||||
|  | uint8_t nes_load(uint8_t *pname, void *lcd_addr, int x, int y) { | ||||||
|  |   nes_xoff = x; | ||||||
|  |   nes_yoff = y; | ||||||
|  |  | ||||||
|  |  | ||||||
| int nes_xoff=0;	//<2F><>ʾ<EFBFBD><CABE>x<EFBFBD>᷽<EFBFBD><E1B7BD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>(ʵ<><CAB5><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>=256-2*nes_xoff) |  | ||||||
| int nes_yoff=0; |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| //<2F><>ʼnes<65><73>Ϸ |  | ||||||
| //pname:nes<65><73>Ϸ·<CFB7><C2B7> |  | ||||||
| //<2F><><EFBFBD><EFBFBD>ֵ: |  | ||||||
| //0,<2C><><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD> |  | ||||||
| //1,<2C>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| //2,<2C>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| //3,<2C><>֧<EFBFBD>ֵ<EFBFBD>map  |  | ||||||
| u8 nes_load(u8* pname,void *lcd_addr,int x,int y) |  | ||||||
| { |  | ||||||
| 	nes_xoff=x; |  | ||||||
| 	nes_yoff=y; |  | ||||||
|   FIL *file; |   FIL *file; | ||||||
|   FILINFO *file_info; |   FILINFO *file_info; | ||||||
|   UINT br; |   UINT br; | ||||||
| 	u8 res=0;   |   uint8_t res = 0; | ||||||
| //	app_wm8978_volset(wm8978set.mvol);	  |   g_nes_break = 0; | ||||||
| //	WM8978_ADDA_Cfg(1,0);	//<2F><><EFBFBD><EFBFBD>DAC |   file = mymalloc(sizeof(FIL)); | ||||||
| //	WM8978_Input_Cfg(0,0,0);//<2F>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8> |   file_info = mymalloc(sizeof(FILINFO)); | ||||||
| //	WM8978_Output_Cfg(1,0);	//<2F><><EFBFBD><EFBFBD>DAC<41><43><EFBFBD><EFBFBD> |   if (file == 0) | ||||||
| 	g_nes_break=0; |     return 1; // <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>. | ||||||
| 	file=mymalloc(sizeof(FIL));  |  | ||||||
| 	file_info=	mymalloc(sizeof(FILINFO));  |  | ||||||
| 	if(file==0)return 1;						//<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>.   |  | ||||||
|  |  | ||||||
| 	res=f_stat((char*)pname,file_info); |   res = f_stat((char *)pname, file_info); | ||||||
| 	if(res!=FR_OK)	//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ʧ<EFBFBD><CAA7> |   if (res != FR_OK) // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ʧ<EFBFBD><EFBFBD> | ||||||
|   { |   { | ||||||
|     myfree(file); |     myfree(file); | ||||||
|     myfree(file_info); |     myfree(file_info); | ||||||
|     return 2; |     return 2; | ||||||
|   } |   } | ||||||
| 	res=nes_sram_malloc(file_info->fsize);			//<2F><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>  |   res = nes_sram_malloc(file_info->fsize); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD> | ||||||
| 	if(res==0) |   if (res == 0) { | ||||||
| 	{ |     f_open(file, (char *)pname, FA_READ); | ||||||
| 		f_open(file,(char*)pname,FA_READ); |     f_read(file, romfile, file_info->fsize, &br); // <20><>ȡnes<65>ļ<EFBFBD> | ||||||
| 		f_read(file,romfile,file_info->fsize,&br);	//<2F><>ȡnes<EFBFBD>ļ<EFBFBD> |     res = nes_load_rom();                         // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ROM | ||||||
| 		res=nes_load_rom();						//<2F><><EFBFBD><EFBFBD>ROM |     if (res == 0) { | ||||||
| 		if(res==0) 					 |       Mapper_Init();                      // map<61><70>ʼ<EFBFBD><CABC> | ||||||
| 		{    |       cpu6502_init();                     // <20><>ʼ<EFBFBD><CABC>6502,<2C><><EFBFBD><EFBFBD>λ | ||||||
| 			Mapper_Init();						//map<61><70>ʼ<EFBFBD><EFBFBD> |       PPU_reset(lcd_addr);                // ppu<EFBFBD><EFBFBD>λ | ||||||
| 			cpu6502_init();						//<2F><>ʼ<EFBFBD><CABC>6502,<2C><><EFBFBD><EFBFBD>λ	  	  |       apu_init();                         // apu<70><75>ʼ<EFBFBD><CABC> | ||||||
| 			PPU_reset(lcd_addr);						//ppu<70><75>λ |       nes_sound_open(0, APU_SAMPLE_RATE); // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸 | ||||||
| 			apu_init(); 						//apu<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>  |       nes_emulate_frame();                // <20><><EFBFBD><EFBFBD>NESģ<53><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><EFBFBD> | ||||||
| 			nes_sound_open(0,APU_SAMPLE_RATE);	//<2F><>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸 |       nes_sound_close();                  // <20>ر<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | ||||||
| 			nes_emulate_frame();				//<2F><><EFBFBD><EFBFBD>NESģ<53><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>  |  | ||||||
| 			nes_sound_close();					//<2F>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|   f_close(file); |   f_close(file); | ||||||
| 	myfree(file);//<2F>ͷ<EFBFBD><CDB7>ڴ<EFBFBD> |   myfree(file); // <EFBFBD>ͷ<EFBFBD><EFBFBD>ڴ<EFBFBD> | ||||||
|   myfree(file_info); |   myfree(file_info); | ||||||
| 	nes_sram_free();	//<2F>ͷ<EFBFBD><CDB7>ڴ<EFBFBD> |   nes_sram_free(); // <EFBFBD>ͷ<EFBFBD><EFBFBD>ڴ<EFBFBD> | ||||||
|   return res; |   return res; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // <20><><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>е<EFBFBD><D0B5><EFBFBD>Ϸ | ||||||
|  | uint8_t nes_start(uint8_t *file, int fileSize, void *lcd_addr, int x, int y) { | ||||||
|  |   nes_xoff = x; | ||||||
|  |   nes_yoff = y; | ||||||
|  |   uint8_t res = 0; | ||||||
|  |   g_nes_break = 0; | ||||||
|  |   res = nes_sram_malloc(fileSize); // <20><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD> | ||||||
|  |  | ||||||
|  |   if (res == 0) { | ||||||
|  |     mymemcpy(romfile, file, fileSize); // <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>пռ<D0BF> | ||||||
|  |     res = nes_load_rom();              // <20><><EFBFBD><EFBFBD>ROM | ||||||
|  |     if (res == 0) { | ||||||
|  |       Mapper_Init();                      // map<61><70>ʼ<EFBFBD><CABC> | ||||||
| //<2F><><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD>Ϸ |       cpu6502_init();                     // <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>6502,<2C><><EFBFBD><EFBFBD>λ | ||||||
| u8 nes_start(u8* file,int fileSize,void *lcd_addr,int x,int y) |       PPU_reset(lcd_addr);                // ppu<70><75>λ | ||||||
| { |       apu_init();                         // apu<70><75>ʼ<EFBFBD><CABC> | ||||||
| 	nes_xoff=x; |       nes_sound_open(0, APU_SAMPLE_RATE); // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸 | ||||||
| 	nes_yoff=y; |       nes_emulate_frame();                // <20><><EFBFBD><EFBFBD>NESģ<53><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD> | ||||||
| 	u8 res=0;   |       nes_sound_close();                  // <20>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | ||||||
| 	g_nes_break=0; |  | ||||||
| 	res=nes_sram_malloc(fileSize);			//<2F><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>  |  | ||||||
| 	 |  | ||||||
| 	if(res==0) |  | ||||||
| 	{ |  | ||||||
| 		mymemcpy (romfile,file,fileSize);//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>пռ<D0BF> |  | ||||||
| 		res=nes_load_rom();						//<2F><><EFBFBD><EFBFBD>ROM |  | ||||||
| 		if(res==0) 					 |  | ||||||
| 		{    |  | ||||||
| 			Mapper_Init();						//map<61><70>ʼ<EFBFBD><CABC> |  | ||||||
| 			cpu6502_init();						//<2F><>ʼ<EFBFBD><CABC>6502,<2C><><EFBFBD><EFBFBD>λ	  	  |  | ||||||
| 			PPU_reset(lcd_addr);						//ppu<70><75>λ |  | ||||||
| 			apu_init(); 						//apu<70><75>ʼ<EFBFBD><CABC>  |  | ||||||
| 			nes_sound_open(0,APU_SAMPLE_RATE);	//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸 |  | ||||||
| 			nes_emulate_frame();				//<2F><><EFBFBD><EFBFBD>NESģ<53><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>  |  | ||||||
| 			nes_sound_close();					//<2F>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| 	nes_sram_free();	//<2F>ͷ<EFBFBD><CDB7>ڴ<EFBFBD> |   nes_sram_free(); // <EFBFBD>ͷ<EFBFBD><EFBFBD>ڴ<EFBFBD> | ||||||
|   return res; |   return res; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD> | ||||||
|  | void nes_set_window(void) {} | ||||||
|  |  | ||||||
|  | // <20><>ȡ<EFBFBD><C8A1>Ϸ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD> | ||||||
|  | void nes_get_gamepadval(void) { | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD> |  | ||||||
| void nes_set_window(void) |  | ||||||
| {	 |  | ||||||
| } |  | ||||||
| //<2F><>ȡ<EFBFBD><C8A1>Ϸ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| void nes_get_gamepadval(void) |  | ||||||
| {   |  | ||||||
| #include "usart.h" | #include "usart.h" | ||||||
| 		PADdata=USART3_GetKey(); |   PADdata = USART3_GetKey(); | ||||||
| 		PADdata1=0;  |   PADdata1 = 0; | ||||||
| } | } | ||||||
| //nesģ<73><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD> |  | ||||||
| void nes_emulate_frame(void) | // nesģ<73><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD> | ||||||
| {   | void nes_emulate_frame(void) { | ||||||
| 	u8 nes_frame; |   uint8_t nes_frame; | ||||||
| 	//TIM3_Int_Init(10000-1,8400-1);//<2F><><EFBFBD><EFBFBD>TIM3 ,1s<31>ж<EFBFBD>һ<EFBFBD><D2BB>	 |   // TIM3_Int_Init(10000-1,8400-1);//<2F><><EFBFBD><EFBFBD>TIM3 ,1s<31>ж<EFBFBD>һ<EFBFBD><D2BB> | ||||||
| 	nes_set_window();//<2F><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD> |   nes_set_window(); // <EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD> | ||||||
| 	while(1) |   while (1) { | ||||||
| 	{	 |  | ||||||
|     // LINES 0-239 |     // LINES 0-239 | ||||||
|     PPU_start_frame(); |     PPU_start_frame(); | ||||||
| 		//LCD_SwitchLayerBuff();//<2F>л<EFBFBD>֡ |     // LCD_SwitchLayerBuff();//<2F>л<EFBFBD>֡ | ||||||
| 		for(NES_scanline = 0; NES_scanline< 240; NES_scanline++) |     for (NES_scanline = 0; NES_scanline < 240; NES_scanline++) { | ||||||
| 		{ |       run6502(113 * 256); | ||||||
| 			run6502(113*256); |  | ||||||
|       NES_Mapper->HSync(NES_scanline); |       NES_Mapper->HSync(NES_scanline); | ||||||
| 			//ɨ<><C9A8>һ<EFBFBD><D2BB>		   |       // ɨ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD> | ||||||
| 			if(nes_frame==0)scanline_draw(NES_scanline); |       if (nes_frame == 0) | ||||||
| 			else do_scanline_and_dont_draw(NES_scanline);  |         scanline_draw(NES_scanline); | ||||||
|  |       else | ||||||
|  |         do_scanline_and_dont_draw(NES_scanline); | ||||||
|     } |     } | ||||||
| 		//LCD_ExitLayerBuff (); |     // LCD_ExitLayerBuff (); | ||||||
|  |  | ||||||
| 		NES_scanline=240; |     NES_scanline = 240; | ||||||
| 		run6502(113*256);//<2F><><EFBFBD><EFBFBD>1<EFBFBD><31> |     run6502(113 * 256); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><EFBFBD> | ||||||
|     NES_Mapper->HSync(NES_scanline); |     NES_Mapper->HSync(NES_scanline); | ||||||
|     start_vblank(); |     start_vblank(); | ||||||
| 		if(NMI_enabled())  |     if (NMI_enabled()) { | ||||||
| 		{ |       cpunmi = 1; | ||||||
| 			cpunmi=1; |       run6502(7 * 256); // <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD> | ||||||
| 			run6502(7*256);//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD> |  | ||||||
|     } |     } | ||||||
|     NES_Mapper->VSync(); |     NES_Mapper->VSync(); | ||||||
|     // LINES 242-261 |     // LINES 242-261 | ||||||
| 		for(NES_scanline=241;NES_scanline<262;NES_scanline++) |     for (NES_scanline = 241; NES_scanline < 262; NES_scanline++) { | ||||||
| 		{ |       run6502(113 * 256); | ||||||
| 			run6502(113*256);	   |  | ||||||
|       NES_Mapper->HSync(NES_scanline); |       NES_Mapper->HSync(NES_scanline); | ||||||
|     } |     } | ||||||
|     end_vblank(); |     end_vblank(); | ||||||
| 		nes_get_gamepadval();//ÿ3֡<33><D6A1>ѯһ<D1AF><D2BB>USB |     nes_get_gamepadval(); // ÿ3֡<EFBFBD><EFBFBD>ѯһ<EFBFBD><EFBFBD>USB | ||||||
| 		apu_soundoutput();//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>	  |     apu_soundoutput();    // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> | ||||||
|     nes_frame_cnt++; |     nes_frame_cnt++; | ||||||
|     nes_frame++; |     nes_frame++; | ||||||
| 		if(nes_frame>NES_SKIP_FRAME)nes_frame=0;//<2F><>֡  |     if (nes_frame > NES_SKIP_FRAME) | ||||||
| 		u8 nesBreak (void); |       nes_frame = 0; // <20><>֡ | ||||||
| 		if (nesBreak()) break; |     uint8_t nesBreak(void); | ||||||
| 		if (Touch_GetState()->x[1]!=0) break; |     if (nesBreak()) | ||||||
|  |       break; | ||||||
|  |     if (Touch_GetState()->x[1] != 0) | ||||||
|  |       break; | ||||||
|   } |   } | ||||||
| 	//TIM3->CR1&=~(1<<0);//<2F>رն<D8B1>ʱ<EFBFBD><CAB1>3 |   // TIM3->CR1&=~(1<<0);//<2F>رն<D8B1>ʱ<EFBFBD><CAB1>3 | ||||||
| } | } | ||||||
|  |  | ||||||
|  | uint8_t nesBreak(void) { | ||||||
|  |   uint8_t t = 0; | ||||||
|  |   if ((PADdata & 0x0c) == 0x0c) { | ||||||
| u8 nesBreak (void) |     g_nes_break = 0x0c; | ||||||
| { |  | ||||||
| 	u8 t=0; |  | ||||||
| 	if ((PADdata&0x0c)==0x0c) |  | ||||||
| 	{ |  | ||||||
| 		g_nes_break=0x0c; |  | ||||||
|   } |   } | ||||||
| 	if ((g_nes_break)&&(t=USART3_GetKeyPressed(),t&0x0c)) |   if ((g_nes_break) && (t = USART3_GetKeyPressed(), t & 0x0c)) { | ||||||
| 	{ |     g_nes_break &= ~t; | ||||||
| 		g_nes_break&=~t; |     if (g_nes_break == 0) | ||||||
| 		if (g_nes_break==0) |  | ||||||
|       return 1; |       return 1; | ||||||
|   } |   } | ||||||
|   return 0; |   return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // <20><>6502.s<><73><EFBFBD>汻<EFBFBD><E6B1BB><EFBFBD><EFBFBD> | ||||||
|  | void debug_6502(uint16_t reg0, uint8_t reg1) { | ||||||
|  |   // printf("6502 error:%x,%d\r\n",reg0,reg1); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| //<2F><>6502.s<><73><EFBFBD>汻<EFBFBD><E6B1BB><EFBFBD><EFBFBD> |  | ||||||
| void debug_6502(u16 reg0,u8 reg1) |  | ||||||
| { |  | ||||||
| 	//printf("6502 error:%x,%d\r\n",reg0,reg1); |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ////////////////////////////////////////////////////////////////////////////////// | ////////////////////////////////////////////////////////////////////////////////// | ||||||
| //nes,<2C><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>֧<EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD> | // nes,<2C><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>֧<EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD> | ||||||
|  |  | ||||||
|  | static vu8 g_buff_Invalid = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ЧʱҪ<CAB1><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | ||||||
|  | static vu8 g_buff_useing;      // <20><>ǰDMA<4D><41>ʹ<EFBFBD><CAB9><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | ||||||
| static vu8 g_buff_Invalid=0;		//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ЧʱҪ<CAB1><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| static vu8 g_buff_useing;				//<2F><>ǰDMA<4D><41>ʹ<EFBFBD><CAB9><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| static DAC_UserStruct g_dac; | static DAC_UserStruct g_dac; | ||||||
|  |  | ||||||
|  | static void dma_tx_callback(DAC_UserStruct *dac) { | ||||||
|  |   uint16_t i; | ||||||
| static void dma_tx_callback(DAC_UserStruct *dac)  |   g_buff_useing = dac->buff_useing; | ||||||
| {     |   g_buff_Invalid = 1; | ||||||
| 	u16 i; |  | ||||||
| 	g_buff_useing=dac->buff_useing; |  | ||||||
| 	g_buff_Invalid=1;	 |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // NES<45><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD> | ||||||
|  | int nes_sound_open(int samples_per_sync, int sample_rate) { | ||||||
|  |  | ||||||
|  |   // <20><>ʼ<EFBFBD><CABC>DAC | ||||||
|  |   g_dac.buff1 = (uint32_t *)i2sbuf1; | ||||||
|  |   g_dac.buff2 = (uint32_t *)i2sbuf2; | ||||||
| //NES<45><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD> |   g_dac.buff_size = APU_PCMBUF_SIZE * 4; | ||||||
| int nes_sound_open(int samples_per_sync,int sample_rate)  |   g_dac.rate = RATE22050; | ||||||
| { |   g_dac.call_back = dma_tx_callback; | ||||||
| 	 |   DAC_NormalInit(&g_dac); | ||||||
| 	//<2F><>ʼ<EFBFBD><CABC>DAC |  | ||||||
| 	g_dac.buff1=(u32 *)i2sbuf1; |  | ||||||
| 	g_dac.buff2=(u32 *)i2sbuf2; |  | ||||||
| 	g_dac.buff_size=APU_PCMBUF_SIZE*4; |  | ||||||
| 	g_dac.rate=RATE22050; |  | ||||||
| 	g_dac.call_back=dma_tx_callback; |  | ||||||
| 	DAC_NormalInit (&g_dac); |  | ||||||
|   return 1; |   return 1; | ||||||
| } | } | ||||||
| //NES<45>ر<EFBFBD><D8B1><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD> |  | ||||||
| void nes_sound_close(void)  |  | ||||||
| {  |  | ||||||
| 	DAC_NormalDeInit (&g_dac); |  | ||||||
| }  |  | ||||||
| //NES<45><53>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>I2S<32><53><EFBFBD><EFBFBD> |  | ||||||
| void nes_apu_fill_buffer(int samples,u16* wavebuf) |  | ||||||
| {	 |  | ||||||
|  |  | ||||||
| 	if (DAC_GetDacHander()!=&g_dac) return; | // NES<45>ر<EFBFBD><D8B1><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD> | ||||||
| 	u16 i;  | void nes_sound_close(void) { DAC_NormalDeInit(&g_dac); } | ||||||
| 	u16 *p; |  | ||||||
| 	while(g_buff_Invalid==0)//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | void nes_apu_fill_buffer(int samples, uint16_t *wavebuf) { | ||||||
|  |   if (DAC_GetDacHander() != &g_dac) | ||||||
|  |     return; | ||||||
|  |   uint16_t i; | ||||||
|  |   uint16_t *p; | ||||||
|  |   while (g_buff_Invalid == 0) // <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | ||||||
|   { |   { | ||||||
| 		rt_thread_delay(5);// |     rt_thread_delay(5); | ||||||
|   }; |   }; | ||||||
| 	if(g_buff_useing==0) |   if (g_buff_useing == 0) { | ||||||
| 	{ |     p = (uint16_t *)i2sbuf2; | ||||||
| 		p=(u16*)i2sbuf2; |   } else { | ||||||
| 	}else  |     p = (uint16_t *)i2sbuf1; | ||||||
| 	{ |  | ||||||
| 		p=(u16*)i2sbuf1; |  | ||||||
|   } |   } | ||||||
|   { |   { | ||||||
| 		for(i=0;i<APU_PCMBUF_SIZE;i++) |     for (i = 0; i < APU_PCMBUF_SIZE; i++) { | ||||||
| 		{ |       p[2 * i] = ((wavebuf[i] + 0x8000) >> 4); | ||||||
| 			p[2*i]=((wavebuf[i]+0x8000)>>4); |       p[2 * i + 1] = p[2 * i]; | ||||||
| 			p[2*i+1]=p[2*i]; |  | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| 	//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>Ч |   // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>Ч | ||||||
| 	g_buff_Invalid=0; |   g_buff_Invalid = 0; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,33 +1,25 @@ | |||||||
|  | ////////////////////////////////////////////////////////////////////////////////// | ||||||
|  | // <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<45><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><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_MAIN_H | #ifndef __NES_MAIN_H | ||||||
| #define __NES_MAIN_H | #define __NES_MAIN_H | ||||||
|  |  | ||||||
| //////////////////////////////////////////////////////////////////////////////////	  | #include "stdint.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<45><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><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  			   |  | ||||||
| ////////////////////////////////////////////////////////////////////////////////// 	  |  | ||||||
|   |  | ||||||
| #define NES_SKIP_FRAME 	2		//<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1>,Ĭ<><C4AC><EFBFBD><EFBFBD>2֡ |  | ||||||
|  |  | ||||||
|  | #define NES_SKIP_FRAME 2 // <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1>,Ĭ<><C4AC><EFBFBD><EFBFBD>2֡ | ||||||
|  |  | ||||||
| #define INLINE static inline | #define INLINE static inline | ||||||
| #define int8 	char | #define boolean uint8_t | ||||||
| #define int16 	short |  | ||||||
| #define int32 	int |  | ||||||
| #define uint8 	unsigned char |  | ||||||
| #define uint16 	unsigned short |  | ||||||
| #define uint32 	unsigned int |  | ||||||
| #define boolean uint8  |  | ||||||
|  |  | ||||||
|  | // nes<65><73>Ϣͷ<CFA2>ṹ<EFBFBD><E1B9B9> | ||||||
|  | typedef struct { | ||||||
| //nes<65><73>Ϣͷ<CFA2>ṹ<EFBFBD><E1B9B9> |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   unsigned char id[3];  // 'NES' |   unsigned char id[3];  // 'NES' | ||||||
|   unsigned char ctrl_z; // control-z |   unsigned char ctrl_z; // control-z | ||||||
|   unsigned char num_16k_rom_banks; |   unsigned char num_16k_rom_banks; | ||||||
| @@ -35,51 +27,42 @@ typedef struct | |||||||
|   unsigned char flags_1; |   unsigned char flags_1; | ||||||
|   unsigned char flags_2; |   unsigned char flags_2; | ||||||
|   unsigned char reserved[8]; |   unsigned char reserved[8]; | ||||||
| }NES_header;    | } NES_header; | ||||||
|  |  | ||||||
| extern u8 nes_frame_cnt;		//nes֡<73><D6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | extern uint8_t nes_frame_cnt; // nes֡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | ||||||
| extern int MapperNo;			//map<61><70><EFBFBD><EFBFBD> | extern int MapperNo;          // map<EFBFBD><EFBFBD><EFBFBD><EFBFBD> | ||||||
| extern int NES_scanline;		//ɨ<><C9A8><EFBFBD><EFBFBD> | extern int NES_scanline;      // ɨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> | ||||||
| extern NES_header *RomHeader;	//rom<6F>ļ<EFBFBD>ͷ  | extern NES_header *RomHeader; // rom<EFBFBD>ļ<EFBFBD>ͷ | ||||||
| extern int VROM_1K_SIZE; | extern int VROM_1K_SIZE; | ||||||
| extern int VROM_8K_SIZE; | extern int VROM_8K_SIZE; | ||||||
| extern u8 cpunmi;  				//cpu<70>жϱ<D0B6>־  <20><> 6502.s<><73><EFBFBD><EFBFBD> | extern uint8_t cpunmi; // cpu<EFBFBD>жϱ<EFBFBD>־  <20><> 6502.s<><73><EFBFBD><EFBFBD> | ||||||
| extern u8 cpuirq;			 | extern uint8_t cpuirq; | ||||||
| extern u8 PADdata;   			//<2F>ֱ<EFBFBD>1<EFBFBD><31>ֵ  | extern uint8_t PADdata;     // <EFBFBD>ֱ<EFBFBD>1<EFBFBD><EFBFBD>ֵ | ||||||
| extern u8 PADdata1;   			//<2F>ֱ<EFBFBD>1<EFBFBD><31>ֵ  | extern uint8_t PADdata1;    // <EFBFBD>ֱ<EFBFBD>1<EFBFBD><EFBFBD>ֵ | ||||||
| extern u8 lianan_biao;			//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־  | extern uint8_t lianan_biao; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־ | ||||||
| #define  CPU_NMI  cpunmi=1; | #define CPU_NMI cpunmi = 1; | ||||||
| #define  CPU_IRQ  cpuirq=1; | #define CPU_IRQ cpuirq = 1; | ||||||
| #define  NES_RAM_SPEED	0 	 	//1:<3A>ڴ<EFBFBD>ռ<EFBFBD><D5BC>С  0:<3A>ٶȿ<D9B6> | #define NES_RAM_SPEED 0 // 1:<3A>ڴ<EFBFBD>ռ<EFBFBD><D5BC>С  0:<3A>ٶȿ<D9B6> | ||||||
|  |  | ||||||
|  | // ʹ<><CAB9><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ | ||||||
|  | uint8_t nes_load(uint8_t *pname, void *lcd_addr, int x, int y); | ||||||
|  |  | ||||||
| //ʹ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ | // <20><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD>Ϸ | ||||||
| u8 nes_load(u8* pname,void *lcd_addr,int x,int y); | uint8_t nes_start(uint8_t *file, int fileSize, void *lcd_addr, int x, int y); | ||||||
|  |  | ||||||
| //<2F><><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>е<EFBFBD><D0B5><EFBFBD>Ϸ | void cpu6502_init(void); // <20><> cart.s | ||||||
| u8 nes_start(u8* file,int fileSize,void *lcd_addr,int x,int y); | void run6502(uint32_t);  // <20><> 6502.s | ||||||
|  | uint8_t nes_load_rom(void); | ||||||
|  |  | ||||||
|  |  | ||||||
| void cpu6502_init(void);		//<2F><> cart.s |  | ||||||
| void run6502(u32); 		   		//<2F><> 6502.s  |  | ||||||
| u8 nes_load_rom(void); |  | ||||||
| void nes_sram_free(void); | void nes_sram_free(void); | ||||||
| u8 nes_sram_malloc(u32 romsize); | uint8_t nes_sram_malloc(uint32_t romsize); | ||||||
| void nes_set_window(void); | void nes_set_window(void); | ||||||
| void nes_get_gamepadval(void); | void nes_get_gamepadval(void); | ||||||
| void nes_emulate_frame(void); | void nes_emulate_frame(void); | ||||||
| void debug_6502(u16 reg0,u8 reg1); | void debug_6502(uint16_t reg0, uint8_t reg1); | ||||||
|  |  | ||||||
| void nes_i2s_dma_tx_callback(void); | void nes_i2s_dma_tx_callback(void); | ||||||
| int nes_sound_open(int samples_per_sync,int sample_rate); | int nes_sound_open(int samples_per_sync, int sample_rate); | ||||||
| void nes_sound_close(void); | void nes_sound_close(void); | ||||||
| void nes_apu_fill_buffer(int samples,u16* wavebuf);  | void nes_apu_fill_buffer(int samples, uint16_t *wavebuf); | ||||||
|  |  | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,18 +1,42 @@ | |||||||
| #include "stm32f4xx.h"  |  | ||||||
| #include "nes_main.h" |  | ||||||
| #include "nes_ppu.h"  |  | ||||||
| #include "nes_mapper.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> | // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ye781205<EFBFBD><EFBFBD>NESģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | ||||||
| //ALIENTEK STM32F407<30><37><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | // ALIENTEK STM32F407<30><37><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | ||||||
| //NES MAP <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>	    | // NES MAP <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | ||||||
| //<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK | // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD>@ALIENTEK | ||||||
| //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com | // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com | ||||||
| //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2014/7/1 | // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2014/7/1 | ||||||
| //<2F>汾<EFBFBD><E6B1BE>V1.0  			   | // <EFBFBD>汾<EFBFBD><EFBFBD>V1.0 | ||||||
| ////////////////////////////////////////////////////////////////////////////////// | ////////////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
| //<2F><><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>map<61>ļ<EFBFBD><C4BC><EFBFBD>.   | #include "nes_mapper.h" | ||||||
|  | #include "nes_main.h" | ||||||
|  | #include "nes_ppu.h" | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #ifndef u8 | ||||||
|  | #define u8 uint8_t | ||||||
|  | #endif | ||||||
|  | #ifndef u16 | ||||||
|  | #define u16 uint16_t | ||||||
|  | #endif | ||||||
|  | #ifndef u32 | ||||||
|  | #define u32 uint32_t | ||||||
|  | #endif | ||||||
|  | #ifndef uint8 | ||||||
|  | #define uint8 uint8_t | ||||||
|  | #endif | ||||||
|  | #ifndef uint16 | ||||||
|  | #define uint16 uint16_t | ||||||
|  | #endif | ||||||
|  | #ifndef uint32 | ||||||
|  | #define uint32 uint32_t | ||||||
|  | #endif | ||||||
|  | #ifndef int32 | ||||||
|  | #define int32 int32_t | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
|  | // <20><><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>map<61>ļ<EFBFBD><C4BC><EFBFBD>. | ||||||
| #include "mapper/000.cpp" | #include "mapper/000.cpp" | ||||||
| #include "mapper/001.cpp" | #include "mapper/001.cpp" | ||||||
| #include "mapper/002.cpp" | #include "mapper/002.cpp" | ||||||
| @@ -61,33 +85,31 @@ | |||||||
| #include "mapper/245.cpp" | #include "mapper/245.cpp" | ||||||
|  |  | ||||||
|  |  | ||||||
| //֧<>ֵ<EFBFBD>Mapper<65><72>,<2C>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD> | // ֧<EFBFBD>ֵ<EFBFBD>Mapper<EFBFBD><EFBFBD>,<2C>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD> | ||||||
| const int MapTab[] =   | const int MapTab[] = { | ||||||
| { |     0,  1,  2,  3,  4,  6,  7,  8,  11,  13,  15,  16,  17,  18,  19, 21, | ||||||
| 	0,1,2,3,4,6,7,8,11,13,15,16,17,18,19,21,22,23,24,25,32,33,34, |     22, 23, 24, 25, 32, 33, 34, 64, 65,  66,  67,  69,  70,  71,  72, 73, | ||||||
| 	64,65,66,67,69,70,71,72,73,75,76,78,79,85,87,88,99,113, |     75, 76, 78, 79, 85, 87, 88, 99, 113, 189, 225, 227, 240, 245, | ||||||
| 	189,225,227,240,245, |     -1, // <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>,-1,<2C><>ʾ<EFBFBD><CABE>֧<EFBFBD>ֵ<EFBFBD>map<61><70> | ||||||
| 	-1,//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>,-1,<2C><>ʾ<EFBFBD><CABE>֧<EFBFBD>ֵ<EFBFBD>map<61><70> |  | ||||||
| }; | }; | ||||||
| #define MASK_BANK(bank,mask) (bank) = ((bank) & (mask)) | #define MASK_BANK(bank, mask) (bank) = ((bank) & (mask)) | ||||||
| #define VALIDATE_VROM_BANK(bank)                                               \ | #define VALIDATE_VROM_BANK(bank)                                               \ | ||||||
| 		MASK_BANK(bank,VROM_mask); \ |   MASK_BANK(bank, VROM_mask);                                                  \ | ||||||
| 		if((bank) >= VROM_1K_SIZE) return; |   if ((bank) >= VROM_1K_SIZE)                                                  \ | ||||||
|  |     return; | ||||||
|  |  | ||||||
|  | uint32_t VROM_mask; | ||||||
|  |  | ||||||
| uint32 VROM_mask;   | void Mapper_Reset(void) {} | ||||||
|  | uint8_t Mapper_ReadLow(uint16_t addr) { return 0; } | ||||||
| void Mapper_Reset(void){}  | void Mapper_WriteLow(uint16_t addr, uint8_t data) {} | ||||||
| uint8 Mapper_ReadLow(uint16 addr){	return 0;}   | void Mapper_Write(uint16_t addr, uint8_t data) {} | ||||||
| void Mapper_WriteLow(uint16 addr,uint8 data){} | void Mapper_Read(uint8_t data, uint16_t addr) {} | ||||||
| void Mapper_Write( uint16 addr , uint8 data){} | void Mapper_HSync(int scanline) {} | ||||||
| void Mapper_Read( uint8 data,uint16 addr ){} |  | ||||||
| void Mapper_HSync( int scanline ){}   |  | ||||||
| void Mapper_VSync(void) {} | void Mapper_VSync(void) {} | ||||||
|  |  | ||||||
|  void Mapper_Init(void) | void Mapper_Init(void) { | ||||||
| { |   uint32_t probe; | ||||||
| 	uint32 probe;  |  | ||||||
|   NES_Mapper->Reset = Mapper_Reset; |   NES_Mapper->Reset = Mapper_Reset; | ||||||
|   NES_Mapper->Write = Mapper_Write; |   NES_Mapper->Write = Mapper_Write; | ||||||
|   NES_Mapper->Read = Mapper_Read; |   NES_Mapper->Read = Mapper_Read; | ||||||
| @@ -96,94 +118,181 @@ void Mapper_VSync(void)  {} | |||||||
|   NES_Mapper->HSync = Mapper_HSync; |   NES_Mapper->HSync = Mapper_HSync; | ||||||
|   NES_Mapper->VSync = Mapper_VSync; |   NES_Mapper->VSync = Mapper_VSync; | ||||||
|   VROM_mask = 0xFFFF; |   VROM_mask = 0xFFFF; | ||||||
| 	for(probe = 0x8000; probe; probe >>= 1) |   for (probe = 0x8000; probe; probe >>= 1) { | ||||||
| 	{ |     if ((VROM_1K_SIZE - 1) & probe) | ||||||
| 		if((VROM_1K_SIZE-1) & probe) break; |       break; | ||||||
|     VROM_mask >>= 1; |     VROM_mask >>= 1; | ||||||
|   } |   } | ||||||
|  |  | ||||||
| 	switch (MapperNo) |   switch (MapperNo) { | ||||||
| 	{ |   case 0: | ||||||
| 		case 0 :MAP0_Init();break; |     MAP0_Init(); | ||||||
| 		case 1 :MAP1_Init();break; |     break; | ||||||
|  		case 2 :MAP2_Init();break; |   case 1: | ||||||
|  		case 3 :MAP3_Init();break; |     MAP1_Init(); | ||||||
|  		case 4 :MAP4_Init();break; |     break; | ||||||
|  		case 6 :MAP6_Init();break; |   case 2: | ||||||
|  		case 7 :MAP7_Init();break; |     MAP2_Init(); | ||||||
|  		case 8 :MAP8_Init();break; |     break; | ||||||
|  		case 11:MAP11_Init();break; |   case 3: | ||||||
|  		case 13:MAP13_Init();break; |     MAP3_Init(); | ||||||
|  		case 15:MAP15_Init();break; |     break; | ||||||
|  		case 16:MAP16_Init();break; |   case 4: | ||||||
|  		case 17:MAP17_Init();break; |     MAP4_Init(); | ||||||
|  		case 18:MAP18_Init();break; |     break; | ||||||
|  		case 19:MAP19_Init();break; |   case 6: | ||||||
|  		case 21:MAP21_Init();break; |     MAP6_Init(); | ||||||
|  		case 22:MAP22_Init();break; |     break; | ||||||
|  		case 23:MAP23_Init();break; |   case 7: | ||||||
|  		case 24:MAP24_Init();break; |     MAP7_Init(); | ||||||
|  		case 25:MAP25_Init();break; |     break; | ||||||
|  		case 32:MAP32_Init();break; |   case 8: | ||||||
|  		case 33:MAP33_Init();break; |     MAP8_Init(); | ||||||
|  		case 34:MAP34_Init();break; |     break; | ||||||
|  		case 64:MAP64_Init();break; |   case 11: | ||||||
|  		case 65:MAP65_Init();break; |     MAP11_Init(); | ||||||
|  		case 66:MAP66_Init();break; |     break; | ||||||
|  		case 67:MAP67_Init();break;  |   case 13: | ||||||
|  		case 69:MAP69_Init();break;  |     MAP13_Init(); | ||||||
|  		case 70:MAP70_Init();break;  |     break; | ||||||
|  		case 71:MAP71_Init();break; |   case 15: | ||||||
|  		case 72:MAP72_Init();break; |     MAP15_Init(); | ||||||
|  		case 73:MAP73_Init();break; |     break; | ||||||
|  		case 75:MAP75_Init();break; |   case 16: | ||||||
|  		case 76:MAP76_Init();break; |     MAP16_Init(); | ||||||
|  		case 78:MAP78_Init();break; |     break; | ||||||
|  		case 79:MAP79_Init();break; |   case 17: | ||||||
|  		case 85:MAP85_Init();break; |     MAP17_Init(); | ||||||
|  		case 87:MAP87_Init();break; |     break; | ||||||
|  		case 88:MAP88_Init();break; |   case 18: | ||||||
|  		case 99:MAP99_Init();break; |     MAP18_Init(); | ||||||
|  		case 113:MAP113_Init();break; |     break; | ||||||
|  		case 189:MAP189_Init();break; |   case 19: | ||||||
|  		case 225:MAP225_Init();break; |     MAP19_Init(); | ||||||
|  		case 227:MAP227_Init();break; |     break; | ||||||
|  		case 240:MAP240_Init();break; |   case 21: | ||||||
|  		case 245:MAP245_Init();break;  |     MAP21_Init(); | ||||||
| 		default:break; |     break; | ||||||
|  |   case 22: | ||||||
|  |     MAP22_Init(); | ||||||
|  |     break; | ||||||
|  |   case 23: | ||||||
|  |     MAP23_Init(); | ||||||
|  |     break; | ||||||
|  |   case 24: | ||||||
|  |     MAP24_Init(); | ||||||
|  |     break; | ||||||
|  |   case 25: | ||||||
|  |     MAP25_Init(); | ||||||
|  |     break; | ||||||
|  |   case 32: | ||||||
|  |     MAP32_Init(); | ||||||
|  |     break; | ||||||
|  |   case 33: | ||||||
|  |     MAP33_Init(); | ||||||
|  |     break; | ||||||
|  |   case 34: | ||||||
|  |     MAP34_Init(); | ||||||
|  |     break; | ||||||
|  |   case 64: | ||||||
|  |     MAP64_Init(); | ||||||
|  |     break; | ||||||
|  |   case 65: | ||||||
|  |     MAP65_Init(); | ||||||
|  |     break; | ||||||
|  |   case 66: | ||||||
|  |     MAP66_Init(); | ||||||
|  |     break; | ||||||
|  |   case 67: | ||||||
|  |     MAP67_Init(); | ||||||
|  |     break; | ||||||
|  |   case 69: | ||||||
|  |     MAP69_Init(); | ||||||
|  |     break; | ||||||
|  |   case 70: | ||||||
|  |     MAP70_Init(); | ||||||
|  |     break; | ||||||
|  |   case 71: | ||||||
|  |     MAP71_Init(); | ||||||
|  |     break; | ||||||
|  |   case 72: | ||||||
|  |     MAP72_Init(); | ||||||
|  |     break; | ||||||
|  |   case 73: | ||||||
|  |     MAP73_Init(); | ||||||
|  |     break; | ||||||
|  |   case 75: | ||||||
|  |     MAP75_Init(); | ||||||
|  |     break; | ||||||
|  |   case 76: | ||||||
|  |     MAP76_Init(); | ||||||
|  |     break; | ||||||
|  |   case 78: | ||||||
|  |     MAP78_Init(); | ||||||
|  |     break; | ||||||
|  |   case 79: | ||||||
|  |     MAP79_Init(); | ||||||
|  |     break; | ||||||
|  |   case 85: | ||||||
|  |     MAP85_Init(); | ||||||
|  |     break; | ||||||
|  |   case 87: | ||||||
|  |     MAP87_Init(); | ||||||
|  |     break; | ||||||
|  |   case 88: | ||||||
|  |     MAP88_Init(); | ||||||
|  |     break; | ||||||
|  |   case 99: | ||||||
|  |     MAP99_Init(); | ||||||
|  |     break; | ||||||
|  |   case 113: | ||||||
|  |     MAP113_Init(); | ||||||
|  |     break; | ||||||
|  |   case 189: | ||||||
|  |     MAP189_Init(); | ||||||
|  |     break; | ||||||
|  |   case 225: | ||||||
|  |     MAP225_Init(); | ||||||
|  |     break; | ||||||
|  |   case 227: | ||||||
|  |     MAP227_Init(); | ||||||
|  |     break; | ||||||
|  |   case 240: | ||||||
|  |     MAP240_Init(); | ||||||
|  |     break; | ||||||
|  |   case 245: | ||||||
|  |     MAP245_Init(); | ||||||
|  |     break; | ||||||
|  |   default: | ||||||
|  |     break; | ||||||
|   } |   } | ||||||
|   NES_Mapper->Reset(); |   NES_Mapper->Reset(); | ||||||
| } | } | ||||||
| void asm_Mapper_Write(uint8 byData,uint16 wAddr) | void asm_Mapper_Write(uint8_t byData, uint16_t wAddr) { | ||||||
| {	 |   NES_Mapper->Write(wAddr, byData); | ||||||
| 	NES_Mapper->Write(wAddr,byData); |  | ||||||
| } | } | ||||||
| void asm_Mapper_ReadLow( uint16 wAddr) //<2F><><EFBFBD>ӵ<EFBFBD> | void asm_Mapper_ReadLow(uint16_t wAddr) // <EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD> | ||||||
| { | { | ||||||
| 	NES_Mapper->ReadLow( wAddr); |   NES_Mapper->ReadLow(wAddr); | ||||||
| } | } | ||||||
| void asm_Mapper_WriteLow( uint8 byData ,uint16 wAddr)  | void asm_Mapper_WriteLow(uint8_t byData, uint16_t wAddr) { | ||||||
| {	 |   NES_Mapper->WriteLow(wAddr, byData); | ||||||
| 	NES_Mapper->WriteLow(wAddr, byData ); |  | ||||||
| } | } | ||||||
|  |  | ||||||
| void set_CPU_bank3(signed char page )  {map67_(page) ;}  | void set_CPU_bank3(signed char page) { map67_(page); } | ||||||
| void set_CPU_bank4(signed char page )  {map89_(page) ;}  | void set_CPU_bank4(signed char page) { map89_(page); } | ||||||
| void set_CPU_bank5(signed char page )  {mapAB_(page) ;} | void set_CPU_bank5(signed char page) { mapAB_(page); } | ||||||
| void set_CPU_bank6(signed char page )  {mapCD_(page) ;}  | void set_CPU_bank6(signed char page) { mapCD_(page); } | ||||||
| void set_CPU_bank7(signed char page )  {mapEF_(page) ;} | void set_CPU_bank7(signed char page) { mapEF_(page); } | ||||||
| void set_CPU_banks(int bank0_num,int bank1_num,int bank2_num, int bank3_num) | void set_CPU_banks(int bank0_num, int bank1_num, int bank2_num, int bank3_num) { | ||||||
| { |  | ||||||
|   map89_(bank0_num); |   map89_(bank0_num); | ||||||
|   mapAB_(bank1_num); |   mapAB_(bank1_num); | ||||||
|   mapCD_(bank2_num); |   mapCD_(bank2_num); | ||||||
|   mapEF_(bank3_num); |   mapEF_(bank3_num); | ||||||
| } | } | ||||||
| void set_PPU_banks(uint32 bank0_num, uint32 bank1_num, | void set_PPU_banks(uint32_t bank0_num, uint32_t bank1_num, uint32_t bank2_num, | ||||||
| 				   uint32 bank2_num, uint32 bank3_num, |                    uint32_t bank3_num, uint32_t bank4_num, uint32_t bank5_num, | ||||||
| 				   uint32 bank4_num, uint32 bank5_num, |                    uint32_t bank6_num, uint32_t bank7_num) { | ||||||
| 				   uint32 bank6_num, uint32 bank7_num) |  | ||||||
| { |  | ||||||
|   VALIDATE_VROM_BANK(bank0_num); |   VALIDATE_VROM_BANK(bank0_num); | ||||||
|   VALIDATE_VROM_BANK(bank1_num); |   VALIDATE_VROM_BANK(bank1_num); | ||||||
|   VALIDATE_VROM_BANK(bank2_num); |   VALIDATE_VROM_BANK(bank2_num); | ||||||
| @@ -202,112 +311,81 @@ void set_PPU_banks(uint32 bank0_num, uint32 bank1_num, | |||||||
|   ppu->PPU_VRAM_banks[6] = VROM_banks + (bank6_num << 10); |   ppu->PPU_VRAM_banks[6] = VROM_banks + (bank6_num << 10); | ||||||
|   ppu->PPU_VRAM_banks[7] = VROM_banks + (bank7_num << 10); |   ppu->PPU_VRAM_banks[7] = VROM_banks + (bank7_num << 10); | ||||||
|  |  | ||||||
|   set_tile_banks( VROM_tiles + bank0_num * 0x400 , |   set_tile_banks(VROM_tiles + bank0_num * 0x400, VROM_tiles + bank1_num * 0x400, | ||||||
| 				  VROM_tiles + bank1_num * 0x400 , |                  VROM_tiles + bank2_num * 0x400, VROM_tiles + bank3_num * 0x400, | ||||||
| 				  VROM_tiles + bank2_num * 0x400 , |                  VROM_tiles + bank4_num * 0x400, VROM_tiles + bank5_num * 0x400, | ||||||
| 				  VROM_tiles + bank3_num * 0x400 , |                  VROM_tiles + bank6_num * 0x400, | ||||||
| 				  VROM_tiles + bank4_num * 0x400 , |                  VROM_tiles + bank7_num * 0x400); | ||||||
| 				  VROM_tiles + bank5_num * 0x400 , |  | ||||||
| 				  VROM_tiles + bank6_num * 0x400 , |  | ||||||
| 				  VROM_tiles + bank7_num * 0x400 ); |  | ||||||
| } | } | ||||||
| void set_PPU_bank0(uint32 bank_num) | void set_PPU_bank0(uint32_t bank_num) { | ||||||
| { |  | ||||||
|   VALIDATE_VROM_BANK(bank_num); |   VALIDATE_VROM_BANK(bank_num); | ||||||
|   ppu->PPU_VRAM_banks[0] = VROM_banks + (bank_num << 10); // * 0x400 |   ppu->PPU_VRAM_banks[0] = VROM_banks + (bank_num << 10); // * 0x400 | ||||||
|   set_tile_bank(0, VROM_tiles + bank_num * 0x400); |   set_tile_bank(0, VROM_tiles + bank_num * 0x400); | ||||||
| } | } | ||||||
|  |  | ||||||
| void set_PPU_bank1(uint32 bank_num) | void set_PPU_bank1(uint32_t bank_num) { | ||||||
| { |  | ||||||
|   VALIDATE_VROM_BANK(bank_num); |   VALIDATE_VROM_BANK(bank_num); | ||||||
|   ppu->PPU_VRAM_banks[1] = VROM_banks + (bank_num << 10); // * 0x400 |   ppu->PPU_VRAM_banks[1] = VROM_banks + (bank_num << 10); // * 0x400 | ||||||
| 	set_tile_bank(1, VROM_tiles + bank_num * 0x400 ); |   set_tile_bank(1, VROM_tiles + bank_num * 0x400); | ||||||
| } | } | ||||||
|  |  | ||||||
| void set_PPU_bank2(uint32 bank_num) | void set_PPU_bank2(uint32_t bank_num) { | ||||||
| { |  | ||||||
|   VALIDATE_VROM_BANK(bank_num); |   VALIDATE_VROM_BANK(bank_num); | ||||||
|   ppu->PPU_VRAM_banks[2] = VROM_banks + (bank_num << 10); // * 0x400 |   ppu->PPU_VRAM_banks[2] = VROM_banks + (bank_num << 10); // * 0x400 | ||||||
| 	set_tile_bank(2, VROM_tiles + bank_num * 0x400 ); |   set_tile_bank(2, VROM_tiles + bank_num * 0x400); | ||||||
| } | } | ||||||
|  |  | ||||||
| void set_PPU_bank3(uint32 bank_num) | void set_PPU_bank3(uint32_t bank_num) { | ||||||
| { |  | ||||||
|   VALIDATE_VROM_BANK(bank_num); |   VALIDATE_VROM_BANK(bank_num); | ||||||
|   ppu->PPU_VRAM_banks[3] = VROM_banks + (bank_num << 10); // * 0x400 |   ppu->PPU_VRAM_banks[3] = VROM_banks + (bank_num << 10); // * 0x400 | ||||||
| 	set_tile_bank(3, VROM_tiles + bank_num * 0x400 ); |   set_tile_bank(3, VROM_tiles + bank_num * 0x400); | ||||||
| } | } | ||||||
|  |  | ||||||
| void set_PPU_bank4(uint32 bank_num) | void set_PPU_bank4(uint32_t bank_num) { | ||||||
| { |  | ||||||
|   VALIDATE_VROM_BANK(bank_num); |   VALIDATE_VROM_BANK(bank_num); | ||||||
|   ppu->PPU_VRAM_banks[4] = VROM_banks + (bank_num << 10); // * 0x400 |   ppu->PPU_VRAM_banks[4] = VROM_banks + (bank_num << 10); // * 0x400 | ||||||
| 	set_tile_bank(4, VROM_tiles + bank_num * 0x400 ); |   set_tile_bank(4, VROM_tiles + bank_num * 0x400); | ||||||
| } | } | ||||||
| void set_PPU_bank5(uint32 bank_num) | void set_PPU_bank5(uint32_t bank_num) { | ||||||
| { |  | ||||||
|   VALIDATE_VROM_BANK(bank_num); |   VALIDATE_VROM_BANK(bank_num); | ||||||
|   ppu->PPU_VRAM_banks[5] = VROM_banks + (bank_num << 10); // * 0x400 |   ppu->PPU_VRAM_banks[5] = VROM_banks + (bank_num << 10); // * 0x400 | ||||||
| 	set_tile_bank(5, VROM_tiles + bank_num * 0x400 ); |   set_tile_bank(5, VROM_tiles + bank_num * 0x400); | ||||||
| } | } | ||||||
|  |  | ||||||
| void set_PPU_bank6(uint32 bank_num) | void set_PPU_bank6(uint32_t bank_num) { | ||||||
| { |  | ||||||
|   VALIDATE_VROM_BANK(bank_num); |   VALIDATE_VROM_BANK(bank_num); | ||||||
|   ppu->PPU_VRAM_banks[6] = VROM_banks + (bank_num << 10); // * 0x400 |   ppu->PPU_VRAM_banks[6] = VROM_banks + (bank_num << 10); // * 0x400 | ||||||
| 	set_tile_bank(6, VROM_tiles + bank_num * 0x400 ); |   set_tile_bank(6, VROM_tiles + bank_num * 0x400); | ||||||
| } | } | ||||||
|  |  | ||||||
| void set_PPU_bank7(uint32 bank_num) | void set_PPU_bank7(uint32_t bank_num) { | ||||||
| { |  | ||||||
|   VALIDATE_VROM_BANK(bank_num); |   VALIDATE_VROM_BANK(bank_num); | ||||||
|   ppu->PPU_VRAM_banks[7] = VROM_banks + (bank_num << 10); // * 0x400 |   ppu->PPU_VRAM_banks[7] = VROM_banks + (bank_num << 10); // * 0x400 | ||||||
|   set_tile_bank(7, VROM_tiles + bank_num * 0x400); |   set_tile_bank(7, VROM_tiles + bank_num * 0x400); | ||||||
| } | } | ||||||
| // for mapper 19,68,90 | // for mapper 19,68,90 | ||||||
| void set_PPU_bank8(uint32 bank_num) | void set_PPU_bank8(uint32_t bank_num) { | ||||||
| { |  | ||||||
|   VALIDATE_VROM_BANK(bank_num); |   VALIDATE_VROM_BANK(bank_num); | ||||||
|   ppu->PPU_VRAM_banks[8] = VROM_banks + (bank_num << 10); |   ppu->PPU_VRAM_banks[8] = VROM_banks + (bank_num << 10); | ||||||
| } | } | ||||||
| void set_PPU_bank9(uint32 bank_num) | void set_PPU_bank9(uint32_t bank_num) { | ||||||
| { |  | ||||||
|   VALIDATE_VROM_BANK(bank_num); |   VALIDATE_VROM_BANK(bank_num); | ||||||
|   ppu->PPU_VRAM_banks[9] = VROM_banks + (bank_num << 10); |   ppu->PPU_VRAM_banks[9] = VROM_banks + (bank_num << 10); | ||||||
| } | } | ||||||
| void set_PPU_bank10(uint32 bank_num) | void set_PPU_bank10(uint32_t bank_num) { | ||||||
| { |  | ||||||
|   VALIDATE_VROM_BANK(bank_num); |   VALIDATE_VROM_BANK(bank_num); | ||||||
|   ppu->PPU_VRAM_banks[10] = VROM_banks + (bank_num << 10); |   ppu->PPU_VRAM_banks[10] = VROM_banks + (bank_num << 10); | ||||||
| } | } | ||||||
| void set_PPU_bank11(uint32 bank_num) | void set_PPU_bank11(uint32_t bank_num) { | ||||||
| { |  | ||||||
|   VALIDATE_VROM_BANK(bank_num); |   VALIDATE_VROM_BANK(bank_num); | ||||||
|   ppu->PPU_VRAM_banks[11] = VROM_banks + (bank_num << 10); |   ppu->PPU_VRAM_banks[11] = VROM_banks + (bank_num << 10); | ||||||
| } | } | ||||||
|  |  | ||||||
| // for mapper 1,4,5,6,13,19,80,85,96,119 | // for mapper 1,4,5,6,13,19,80,85,96,119 | ||||||
| void set_VRAM_bank(uint8 bank, uint32 bank_num) | void set_VRAM_bank(uint8_t bank, uint32_t bank_num) { | ||||||
| { |   if (bank < 8) { | ||||||
| 	if(bank < 8) |  | ||||||
| 	{         |  | ||||||
|     ppu->PPU_VRAM_banks[bank] = PPU_patterntables + ((bank_num & 0x0f) << 10); |     ppu->PPU_VRAM_banks[bank] = PPU_patterntables + ((bank_num & 0x0f) << 10); | ||||||
| 	} |   } else if (bank < 12) { | ||||||
| 	else if(bank < 12) |  | ||||||
| 	{ |  | ||||||
|     set_name_table(bank, bank_num); |     set_name_table(bank, bank_num); | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,122 +1,109 @@ | |||||||
|  | ////////////////////////////////////////////////////////////////////////////////// | ||||||
|  | // <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 MAP <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_MAPPER_H | #ifndef __NES_MAPPER_H | ||||||
| #define __NES_MAPPER_H | #define __NES_MAPPER_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> | #include "stdint.h" | ||||||
| //ALIENTEK STM32F407<30><37><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |  | ||||||
| //NES MAP <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  			   |  | ||||||
| ////////////////////////////////////////////////////////////////////////////////// |  | ||||||
| #ifndef uint16 |  | ||||||
| #define uint16 u16 |  | ||||||
| #define uint8 u8 |  | ||||||
| #define uint32 u32 |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #define num_8k_ROM_banks VROM_8K_SIZE | #define num_8k_ROM_banks VROM_8K_SIZE | ||||||
| #define num_1k_VROM_banks VROM_1K_SIZE | #define num_1k_VROM_banks VROM_1K_SIZE | ||||||
| ////////////////////////////////////////////////////////////////////////////////// 	 |  | ||||||
| typedef struct | typedef struct { | ||||||
| { |  | ||||||
|   void (*Reset)(); |   void (*Reset)(); | ||||||
| 	void	(*Write)( uint16 addr,uint8 data); |   void (*Write)(uint16_t addr, uint8_t data); | ||||||
| 	void	(*Read)( uint8 data,uint16 addr); |   void (*Read)(uint8_t data, uint16_t addr); | ||||||
| 	uint8	(*ReadLow)( uint16 addr); |   uint8_t (*ReadLow)(uint16_t addr); | ||||||
| 	void	(*WriteLow)(uint16 addr,uint8 data); |   void (*WriteLow)(uint16_t addr, uint8_t data); | ||||||
|     void    (*HSync)( int scanline); |   void (*HSync)(int scanline); | ||||||
|   void (*VSync)(void); |   void (*VSync)(void); | ||||||
| } MAPPER; | } MAPPER; | ||||||
| /////////////////////////////////////////////////////////////// |  | ||||||
| typedef enum |  | ||||||
| { |  | ||||||
|     MMC1_SMALL, |  | ||||||
|     MMC1_512K, |  | ||||||
|     MMC1_1024K |  | ||||||
| }MMC1_Size_t;  |  | ||||||
|  |  | ||||||
| typedef struct | typedef enum { MMC1_SMALL, MMC1_512K, MMC1_1024K } MMC1_Size_t; | ||||||
| { |  | ||||||
| 	uint32 write_count; | typedef struct { | ||||||
| 	uint8  bits; |   uint32_t write_count; | ||||||
| 	uint8  regs[4]; |   uint8_t bits; | ||||||
| 	uint32 last_write_addr; |   uint8_t regs[4]; | ||||||
|  |   uint32_t last_write_addr; | ||||||
|  |  | ||||||
|   MMC1_Size_t MMC1_Size; |   MMC1_Size_t MMC1_Size; | ||||||
| 	uint32 MMC1_256K_base; |   uint32_t MMC1_256K_base; | ||||||
| 	uint32 MMC1_swap; |   uint32_t MMC1_swap; | ||||||
|  |  | ||||||
|   // these are the 4 ROM banks currently selected |   // these are the 4 ROM banks currently selected | ||||||
| 	uint32 MMC1_bank1; |   uint32_t MMC1_bank1; | ||||||
| 	uint32 MMC1_bank2; |   uint32_t MMC1_bank2; | ||||||
| 	uint32 MMC1_bank3; |   uint32_t MMC1_bank3; | ||||||
| 	uint32 MMC1_bank4; |   uint32_t MMC1_bank4; | ||||||
|  |  | ||||||
| 	uint32 MMC1_HI1; |   uint32_t MMC1_HI1; | ||||||
| 	uint32 MMC1_HI2; |   uint32_t MMC1_HI2; | ||||||
| }Mapper1Res; | } Mapper1Res; | ||||||
|  |  | ||||||
| //ͨ<><CDA8>map<61><70><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><E1B9B9> | // ͨ<EFBFBD><EFBFBD>map<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><EFBFBD> | ||||||
| typedef struct   | typedef struct { | ||||||
| {    |   uint8_t patch; | ||||||
| 	uint8  patch; |   uint8_t regs[11]; | ||||||
| 	uint8  regs[11]; |  | ||||||
|  |  | ||||||
| 	uint32 prg0,prg1; |   uint32_t prg0, prg1; | ||||||
| 	uint32 chr01,chr23,chr4,chr5,chr6,chr7; |   uint32_t chr01, chr23, chr4, chr5, chr6, chr7; | ||||||
|  |  | ||||||
| 	uint8 irq_enabled; 		// IRQs enabled |   uint8_t irq_enabled;  // IRQs enabled | ||||||
| 	uint32 irq_counter;	 	// IRQ scanline counter, decreasing |   uint32_t irq_counter; // IRQ scanline counter, decreasing | ||||||
| 	uint32 irq_latch;   	// IRQ scanline counter latch |   uint32_t irq_latch;   // IRQ scanline counter latch | ||||||
| }MapperCommRes;  | } MapperCommRes; | ||||||
|  |  | ||||||
| extern uint32 ROM_mask; | extern uint32_t ROM_mask; | ||||||
| extern uint32 VROM_mask; | extern uint32_t VROM_mask; | ||||||
| extern const int MapTab[]; | extern const int MapTab[]; | ||||||
| extern MAPPER *NES_Mapper; | extern MAPPER *NES_Mapper; | ||||||
| extern  uint32 VROM_mask; | extern uint32_t VROM_mask; | ||||||
|  |  | ||||||
| extern Mapper1Res *MAP1; | extern Mapper1Res *MAP1; | ||||||
| extern MapperCommRes *MAPx; | extern MapperCommRes *MAPx; | ||||||
|  |  | ||||||
|  |  | ||||||
| ////////////////////////////////////////////////////////////////////////////////// | ////////////////////////////////////////////////////////////////////////////////// | ||||||
| void Mapper_Init(void); | void Mapper_Init(void); | ||||||
| void asm_Mapper_Write(uint8 byData,uint16 wAddr); | void asm_Mapper_Write(uint8_t byData, uint16_t wAddr); | ||||||
| void asm_Mapper_ReadLow( uint16 wAddr); | void asm_Mapper_ReadLow(uint16_t wAddr); | ||||||
| void asm_Mapper_WriteLow( uint8 byData ,uint16 wAddr); | void asm_Mapper_WriteLow(uint8_t byData, uint16_t wAddr); | ||||||
|  |  | ||||||
| void map67_(signed char page);  //6502.s | void map67_(signed char page); // 6502.s | ||||||
| void map89_(signed char page); | void map89_(signed char page); | ||||||
| void mapAB_(signed char page); | void mapAB_(signed char page); | ||||||
| void mapCD_(signed char page); | void mapCD_(signed char page); | ||||||
| void mapEF_(signed char page);//<2F>з<EFBFBD><D0B7><EFBFBD><EFBFBD>ַ<EFBFBD> | void mapEF_(signed char page); // <EFBFBD>з<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD> | ||||||
|  |  | ||||||
| void set_CPU_bank3(signed char page );  | void set_CPU_bank3(signed char page); | ||||||
| void set_CPU_bank4(signed char page );   | void set_CPU_bank4(signed char page); | ||||||
| void set_CPU_bank5(signed char page );  | void set_CPU_bank5(signed char page); | ||||||
| void set_CPU_bank6(signed char page );   | void set_CPU_bank6(signed char page); | ||||||
| void set_CPU_bank7(signed char page );  | void set_CPU_bank7(signed char page); | ||||||
| void set_CPU_banks(int bank0_num,int bank1_num,int bank2_num, int bank3_num); | void set_CPU_banks(int bank0_num, int bank1_num, int bank2_num, int bank3_num); | ||||||
|  |  | ||||||
| void set_PPU_banks(	uint32 bank0_num, uint32 bank1_num, |  | ||||||
| 					uint32 bank2_num, uint32 bank3_num, |  | ||||||
| 					uint32 bank4_num, uint32 bank5_num, |  | ||||||
| 					uint32 bank6_num, uint32 bank7_num); |  | ||||||
| void set_PPU_bank0(uint32 bank_num); |  | ||||||
| void set_PPU_bank1(uint32 bank_num); |  | ||||||
| void set_PPU_bank2(uint32 bank_num); |  | ||||||
| void set_PPU_bank3(uint32 bank_num); |  | ||||||
| void set_PPU_bank4(uint32 bank_num); |  | ||||||
| void set_PPU_bank5(uint32 bank_num); |  | ||||||
| void set_PPU_bank6(uint32 bank_num); |  | ||||||
| void set_PPU_bank7(uint32 bank_num); |  | ||||||
| void set_PPU_bank8(uint32 bank_num); |  | ||||||
| void set_PPU_bank9(uint32 bank_num); |  | ||||||
| void set_PPU_bank10(uint32 bank_num); |  | ||||||
| void set_PPU_bank11(uint32 bank_num); |  | ||||||
| void set_VRAM_bank(uint8 bank, uint32 bank_num); |  | ||||||
|  |  | ||||||
|  | void set_PPU_banks(uint32_t bank0_num, uint32_t bank1_num, uint32_t bank2_num, | ||||||
|  |                    uint32_t bank3_num, uint32_t bank4_num, uint32_t bank5_num, | ||||||
|  |                    uint32_t bank6_num, uint32_t bank7_num); | ||||||
|  | void set_PPU_bank0(uint32_t bank_num); | ||||||
|  | void set_PPU_bank1(uint32_t bank_num); | ||||||
|  | void set_PPU_bank2(uint32_t bank_num); | ||||||
|  | void set_PPU_bank3(uint32_t bank_num); | ||||||
|  | void set_PPU_bank4(uint32_t bank_num); | ||||||
|  | void set_PPU_bank5(uint32_t bank_num); | ||||||
|  | void set_PPU_bank6(uint32_t bank_num); | ||||||
|  | void set_PPU_bank7(uint32_t bank_num); | ||||||
|  | void set_PPU_bank8(uint32_t bank_num); | ||||||
|  | void set_PPU_bank9(uint32_t bank_num); | ||||||
|  | void set_PPU_bank10(uint32_t bank_num); | ||||||
|  | void set_PPU_bank11(uint32_t bank_num); | ||||||
|  | void set_VRAM_bank(uint8_t bank, uint32_t bank_num); | ||||||
|  |  | ||||||
| #endif | #endif | ||||||
|   | |||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,16 +1,17 @@ | |||||||
| #ifndef __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> | // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ye781205<EFBFBD><EFBFBD>NESģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | ||||||
| //ALIENTEK STM32F407<30><37><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | // ALIENTEK STM32F407<30><37><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | ||||||
| //NES APU <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>	    | // NES APU <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | ||||||
| //<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK | // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD>@ALIENTEK | ||||||
| //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com | // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com | ||||||
| //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2014/7/1 | // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2014/7/1 | ||||||
| //<2F>汾<EFBFBD><E6B1BE>V1.0  			   | // <EFBFBD>汾<EFBFBD><EFBFBD>V1.0 | ||||||
| ////////////////////////////////////////////////////////////////////////////////// | ////////////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
|  | #ifndef __NES_PPU_H | ||||||
|  | #define __NES_PPU_H | ||||||
|  |  | ||||||
|  | #include "nes_main.h" | ||||||
|  |  | ||||||
| #undef NULL | #undef NULL | ||||||
| #define NULL 0 | #define NULL 0 | ||||||
| @@ -22,17 +23,15 @@ | |||||||
| #define FALSE 0 | #define FALSE 0 | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| static const unsigned int NES_Palette[64]= | static const unsigned int NES_Palette[64] = { | ||||||
| { |     0x73AE, 0x20D1, 0x0015, 0x4013, 0x880E, 0xA802, 0xA000, 0x7840, | ||||||
| 	0x73AE,0x20D1,0x0015,0x4013,0x880E,0xA802,0xA000,0x7840, |     0x4160, 0x0220, 0x0280, 0x01E2, 0x19EB, 0x0000, 0x0000, 0x0000, | ||||||
| 	0x4160,0x0220,0x0280,0x01E2,0x19EB,0x0000,0x0000,0x0000, |     0xBDF7, 0x039D, 0x21DD, 0x801E, 0xB817, 0xE00B, 0xD940, 0xCA61, | ||||||
| 	0xBDF7,0x039D,0x21DD,0x801E,0xB817,0xE00B,0xD940,0xCA61, |     0x8B80, 0x04A0, 0x0540, 0x0487, 0x0411, 0x0000, 0x0000, 0x0000, | ||||||
| 	0x8B80,0x04A0,0x0540,0x0487,0x0411,0x0000,0x0000,0x0000, |     0xF79E, 0x3DFF, 0x5CBF, 0xA45F, 0xF3DF, 0xFBB6, 0xFBAC, 0xFCC7, | ||||||
| 	0xF79E,0x3DFF,0x5CBF,0xA45F,0xF3DF,0xFBB6,0xFBAC,0xFCC7, |     0xF5E7, 0x8682, 0x4EE9, 0x5FD3, 0x075B, 0x0000, 0x0000, 0x0000, | ||||||
| 	0xF5E7,0x8682,0x4EE9,0x5FD3,0x075B,0x0000,0x0000,0x0000, |     0xF79E, 0xAF3F, 0xC6BF, 0xD65F, 0xFE3F, 0xFE3B, 0xFDF6, 0xFED5, | ||||||
| 	0xF79E,0xAF3F,0xC6BF,0xD65F,0xFE3F,0xFE3B,0xFDF6,0xFED5, |     0xFF34, 0xE7F4, 0xAF97, 0xB7F9, 0x9FFE, 0x0000, 0x0000, 0x0000}; | ||||||
| 	0xFF34,0xE7F4,0xAF97,0xB7F9,0x9FFE,0x0000,0x0000,0x0000 |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /* | /* | ||||||
| static  unsigned int NES_Palette[64]= | static  unsigned int NES_Palette[64]= | ||||||
| @@ -48,96 +47,82 @@ static  unsigned int NES_Palette[64]= | |||||||
| }; | }; | ||||||
| */ | */ | ||||||
|  |  | ||||||
|  | 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 | ||||||
|  |  | ||||||
|  | enum { | ||||||
| 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_WIDTH = 256, | ||||||
|   NES_SCREEN_HEIGHT = 240, |   NES_SCREEN_HEIGHT = 240, | ||||||
|   SIDE_MARGIN = 8, |   SIDE_MARGIN = 8, | ||||||
|   NES_SCREEN_WIDTH_VIEWABLE = NES_SCREEN_WIDTH, |   NES_SCREEN_WIDTH_VIEWABLE = NES_SCREEN_WIDTH, | ||||||
| 	NES_BACKBUF_WIDTH = NES_SCREEN_WIDTH + (2*SIDE_MARGIN) |   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 | typedef struct { | ||||||
| { |   uint32_t in_vblank; | ||||||
| 	uint32  in_vblank; |   uint32_t current_frame_line; | ||||||
| 	uint32  current_frame_line; |   uint16_t bg_pattern_table_addr; | ||||||
| 	uint16  bg_pattern_table_addr; |   uint16_t spr_pattern_table_addr; | ||||||
|     uint16  spr_pattern_table_addr; |   uint16_t ppu_addr_inc; | ||||||
| 	uint16  ppu_addr_inc; |   uint16_t loopy_v; // vram address -- used for reading/writing through $2007 | ||||||
| 	uint16  loopy_v;  // vram address -- used for reading/writing through $2007 |  | ||||||
|                   // see loopy-2005.txt |                   // see loopy-2005.txt | ||||||
|     uint16  loopy_t;  // temp vram address |   uint16_t loopy_t; // temp vram address | ||||||
|     uint8   loopy_x;  // 3-bit subtile x-offset |   uint8_t loopy_x;  // 3-bit subtile x-offset | ||||||
| 	uint8   toggle_2005_2006; |   uint8_t toggle_2005_2006; | ||||||
|     uint8   spr_ram_rw_ptr;  // sprite ram read/write pointer<65>ڴ<EFBFBD><DAB4><EFBFBD>/дָ<D0B4><D6B8> |   uint8_t spr_ram_rw_ptr; // sprite ram read/write pointer<65>ڴ<EFBFBD><DAB4><EFBFBD>/дָ<D0B4><D6B8> | ||||||
|     uint8   read_2007_buffer;  |   uint8_t read_2007_buffer; | ||||||
| 	uint8 LowRegs[0x08]; |   uint8_t LowRegs[0x08]; | ||||||
| 	uint8 bg_pal[0x10];  //extern BYTE BGPal[0x20];			//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB> |   uint8_t bg_pal[0x10]; // extern BYTE BGPal[0x20]; | ||||||
|     uint8 spr_pal[0x10]; //extern BYTE SPPal[0x20];			//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB> |                       // //<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 |   uint8_t PPU_nametables[4 * 0x400]; // 4096  PPU<50><55><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>RAM | ||||||
|   // Rick |   // Rick | ||||||
| 	uint8* PPU_VRAM_banks[12]; |   uint8_t *PPU_VRAM_banks[12]; | ||||||
| 	uint8* PPU_tile_banks[8];  |   uint8_t *PPU_tile_banks[8]; | ||||||
| 	uint8* PPU_tile_tables;   |   uint8_t *PPU_tile_tables; | ||||||
| 	uint8 solid_buf[NES_BACKBUF_WIDTH];    // <20><>ǰ<EFBFBD><C7B0><EFBFBD>ص<EFBFBD>λ<EFBFBD><CEBB>־<EFBFBD><D6BE> |   uint8_t 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 |   uint8_t dummy_buffer[NES_BACKBUF_WIDTH]; // used to do sprite 0 hit detection | ||||||
| 	 |                                          // when we aren't supposed to draw | ||||||
|  |  | ||||||
| } ppu_data; | } ppu_data; | ||||||
|  |  | ||||||
|  |  | ||||||
| extern ppu_data *ppu; | extern ppu_data *ppu; | ||||||
| extern u8 *spr_ram;   | extern uint8_t *spr_ram; | ||||||
|  |  | ||||||
|  | uint32_t spr_enabled(void); | ||||||
|  | uint32_t bg_enabled(void); | ||||||
| uint32 spr_enabled(void); | void set_name_table(uint8_t bank, int bank_num); | ||||||
| uint32 bg_enabled(void); | void set_tile_bank(int i, uint8_t *bank); | ||||||
| void set_name_table(uint8 bank, int bank_num); | void compile(int count, uint8_t *src, uint8_t *dest); | ||||||
| void set_tile_bank(int i, uint8 *bank); | void set_tile_banks(uint8_t *bank0, uint8_t *bank1, uint8_t *bank2, uint8_t *bank3, | ||||||
| void compile(int count, uint8 *src, uint8 *dest); |                     uint8_t *bank4, uint8_t *bank5, uint8_t *bank6, uint8_t *bank7); | ||||||
| void set_tile_banks(uint8 *bank0, uint8 *bank1, uint8 *bank2, uint8 *bank3, |  | ||||||
| uint8 *bank4, uint8 *bank5, uint8 *bank6, uint8 *bank7); |  | ||||||
| void PPU_reset(void *lcd_addr); | void PPU_reset(void *lcd_addr); | ||||||
| void PPU_start_frame(void); | void PPU_start_frame(void); | ||||||
| void set_mirroring(uint32 nt0, uint32 nt1, uint32 nt2, uint32 nt3);//<2F><><EFBFBD>ô<EFBFBD>ֱˮƽ<CBAE><C6BD><EFBFBD><EFBFBD> | void set_mirroring(uint32_t nt0, uint32_t nt1, uint32_t nt2, | ||||||
| uint8 ReadLowRegs(uint32 addr); |                    uint32_t nt3); // <20><><EFBFBD>ô<EFBFBD>ֱˮƽ<CBAE><C6BD><EFBFBD><EFBFBD> | ||||||
| void  WriteLowRegs(uint32 addr, uint8 data); | uint8_t ReadLowRegs(uint32_t addr); | ||||||
|  | void WriteLowRegs(uint32_t addr, uint8_t data); | ||||||
| void scanline_draw(int LineNo); | void scanline_draw(int LineNo); | ||||||
| void do_scanline_and_draw(uint8* buf); | void do_scanline_and_draw(uint8_t *buf); | ||||||
|  |  | ||||||
| // Rick | // Rick | ||||||
| void start_frame(uint8 *buf, int ypitch); | void start_frame(uint8_t *buf, int ypitch); | ||||||
| void end_frame(uint8 *buf); | void end_frame(uint8_t *buf); | ||||||
| void do_scanline_and_dont_draw(int LineNo); | void do_scanline_and_dont_draw(int LineNo); | ||||||
| uint32 NMI_enabled(void); | uint32_t NMI_enabled(void); | ||||||
| void start_vblank(void); | void start_vblank(void); | ||||||
| void end_vblank(void); | void end_vblank(void); | ||||||
| void render_bg(uint8* buf); | void render_bg(uint8_t *buf); | ||||||
| void render_spr(uint8* buf); | void render_spr(uint8_t *buf); | ||||||
| void update_tile(int byteOffset, uint8 data); | void update_tile(int byteOffset, uint8_t data); | ||||||
|  |  | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 ranchuan
					ranchuan