test

Dependencies:   SDFileSystem mbed-dev

Fork of Nucleo_Ex06_EMU by woodstock .

Committer:
charliex
Date:
Sat May 27 02:17:37 2017 +0000
Revision:
4:53ef91c87d74
test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
charliex 4:53ef91c87d74 1 /*===================================================================*/
charliex 4:53ef91c87d74 2 /* */
charliex 4:53ef91c87d74 3 /* pNesX_System_Nucleo.cpp : The function which depends on a system */
charliex 4:53ef91c87d74 4 /* (for Nucleo F446RE) */
charliex 4:53ef91c87d74 5 /* */
charliex 4:53ef91c87d74 6 /* 2016/1/20 Racoon */
charliex 4:53ef91c87d74 7 /* */
charliex 4:53ef91c87d74 8 /*===================================================================*/
charliex 4:53ef91c87d74 9
charliex 4:53ef91c87d74 10 #define USE_CAN (1)
charliex 4:53ef91c87d74 11
charliex 4:53ef91c87d74 12 /*-------------------------------------------------------------------*/
charliex 4:53ef91c87d74 13 /* Include files */
charliex 4:53ef91c87d74 14 /*-------------------------------------------------------------------*/
charliex 4:53ef91c87d74 15
charliex 4:53ef91c87d74 16 #include "mbed.h"
charliex 4:53ef91c87d74 17 #include "SDFileSystem.h"
charliex 4:53ef91c87d74 18 #include "tft.h"
charliex 4:53ef91c87d74 19 //#include "SWO.h"
charliex 4:53ef91c87d74 20
charliex 4:53ef91c87d74 21 // added in for SD check
charliex 4:53ef91c87d74 22 int get_filelist ( char *path );
charliex 4:53ef91c87d74 23
charliex 4:53ef91c87d74 24 // logo ptrs
charliex 4:53ef91c87d74 25
charliex 4:53ef91c87d74 26 extern const unsigned char l1_Logo[];
charliex 4:53ef91c87d74 27 extern const unsigned char asg_logo[];
charliex 4:53ef91c87d74 28 extern const unsigned char adaptable_conn_logo[];
charliex 4:53ef91c87d74 29 extern const unsigned char hacker_stickers_logo[];
charliex 4:53ef91c87d74 30 extern const unsigned char nostarch_logo[];
charliex 4:53ef91c87d74 31 extern const unsigned char nslmini[];
charliex 4:53ef91c87d74 32 extern const unsigned char PRO_LG_K_500x200_1CRevGrey_noDSCR[];
charliex 4:53ef91c87d74 33 extern const unsigned char securitysnobs[];
charliex 4:53ef91c87d74 34 extern const unsigned char supplyFrame[];
charliex 4:53ef91c87d74 35 extern const unsigned char WallOfSheep_logo_200px[];
charliex 4:53ef91c87d74 36 extern const unsigned char tinder_logo[];
charliex 4:53ef91c87d74 37
charliex 4:53ef91c87d74 38 // ID that game pad data is sent on
charliex 4:53ef91c87d74 39 #define CAN_SEND_ID (0x7e1)
charliex 4:53ef91c87d74 40
charliex 4:53ef91c87d74 41 // ID that game pad data is received from
charliex 4:53ef91c87d74 42 #define CAN_RECV_ID (0x7e0)
charliex 4:53ef91c87d74 43
charliex 4:53ef91c87d74 44 // Memory interface
charliex 4:53ef91c87d74 45 enum {
charliex 4:53ef91c87d74 46 CAN_READ_BYTE = CAN_SEND_ID + 1,
charliex 4:53ef91c87d74 47 CAN_READ_WORD,
charliex 4:53ef91c87d74 48 CAN_READ_DWORD,
charliex 4:53ef91c87d74 49
charliex 4:53ef91c87d74 50 CAN_WRITE_BYTE,
charliex 4:53ef91c87d74 51 CAN_WRITE_WORD,
charliex 4:53ef91c87d74 52 CAN_WRITE_DWORD
charliex 4:53ef91c87d74 53 };
charliex 4:53ef91c87d74 54
charliex 4:53ef91c87d74 55 #ifdef USE_CAN
charliex 4:53ef91c87d74 56
charliex 4:53ef91c87d74 57 CAN can1 ( PB_8, PB_9 );
charliex 4:53ef91c87d74 58
charliex 4:53ef91c87d74 59 //not usng second CAN yet.,
charliex 4:53ef91c87d74 60 //CAN can2(PB_5, PB_6);
charliex 4:53ef91c87d74 61
charliex 4:53ef91c87d74 62 #endif
charliex 4:53ef91c87d74 63
charliex 4:53ef91c87d74 64 //#define ORIGINAL_GAMEPAD
charliex 4:53ef91c87d74 65 //#define PS_GAMEPAD
charliex 4:53ef91c87d74 66 #define NES_GAMEPAD
charliex 4:53ef91c87d74 67
charliex 4:53ef91c87d74 68 #if !defined(PS_GAMEPAD)
charliex 4:53ef91c87d74 69 #include "USBHostGamepad.h"
charliex 4:53ef91c87d74 70 USBHostGamepad *pad;
charliex 4:53ef91c87d74 71 #else
charliex 4:53ef91c87d74 72 #include "pspad.h"
charliex 4:53ef91c87d74 73 #endif
charliex 4:53ef91c87d74 74
charliex 4:53ef91c87d74 75 #include "pNesX.h"
charliex 4:53ef91c87d74 76 #include "pNesX_System.h"
charliex 4:53ef91c87d74 77
charliex 4:53ef91c87d74 78 extern int pNesX_Filer();
charliex 4:53ef91c87d74 79 extern void ApuMute ( bool mute );
charliex 4:53ef91c87d74 80
charliex 4:53ef91c87d74 81 // temporary store for joystick value
charliex 4:53ef91c87d74 82 static DWORD canval2;
charliex 4:53ef91c87d74 83
charliex 4:53ef91c87d74 84 #ifdef USE_CAN
charliex 4:53ef91c87d74 85 // if there is a CAN msg available to read from
charliex 4:53ef91c87d74 86 static bool msgAvailable = false;
charliex 4:53ef91c87d74 87 #endif
charliex 4:53ef91c87d74 88
charliex 4:53ef91c87d74 89 SDFileSystem *sd; //(PB_15, PB_14, PB_13, PA_9, "sd", NC, SDFileSystem::SWITCH_NONE, 20000000);
charliex 4:53ef91c87d74 90
charliex 4:53ef91c87d74 91 DigitalIn SW1 ( PC_13 );
charliex 4:53ef91c87d74 92 DigitalIn SW2 ( PC_14 );
charliex 4:53ef91c87d74 93
charliex 4:53ef91c87d74 94 DigitalOut bLED1 ( PB_12 ) ;
charliex 4:53ef91c87d74 95 DigitalOut bLED2 ( PB_13 ) ;
charliex 4:53ef91c87d74 96
charliex 4:53ef91c87d74 97 extern WORD LineData[][256];
charliex 4:53ef91c87d74 98 extern WORD *pDrawData;
charliex 4:53ef91c87d74 99
charliex 4:53ef91c87d74 100 //#define SHOW_FPS
charliex 4:53ef91c87d74 101
charliex 4:53ef91c87d74 102 #if defined(SHOW_FPS)
charliex 4:53ef91c87d74 103 Timer timer;
charliex 4:53ef91c87d74 104 int fps = 0;
charliex 4:53ef91c87d74 105 int dmawait;
charliex 4:53ef91c87d74 106 #endif
charliex 4:53ef91c87d74 107
charliex 4:53ef91c87d74 108 //SWO_Channel swo;
charliex 4:53ef91c87d74 109
charliex 4:53ef91c87d74 110 /*-------------------------------------------------------------------*/
charliex 4:53ef91c87d74 111 /* ROM image file information */
charliex 4:53ef91c87d74 112 /*-------------------------------------------------------------------*/
charliex 4:53ef91c87d74 113
charliex 4:53ef91c87d74 114 extern char szRomFolder[];
charliex 4:53ef91c87d74 115 extern char szRomFilename[];
charliex 4:53ef91c87d74 116 extern char szRomPath[];
charliex 4:53ef91c87d74 117
charliex 4:53ef91c87d74 118 char szRomName[ 256 ];
charliex 4:53ef91c87d74 119 int nSRAM_SaveFlag;
charliex 4:53ef91c87d74 120
charliex 4:53ef91c87d74 121 // Palette data
charliex 4:53ef91c87d74 122 const WORD NesPalette[ 64 ] = {
charliex 4:53ef91c87d74 123 0xef7b, 0x1f00, 0x1700, 0x5741, 0x1090, 0x04a8, 0x80a8, 0xa088, 0x8051, 0xc003, 0x4003, 0xc002, 0x0b02, 0x0000, 0x0000, 0x0000,
charliex 4:53ef91c87d74 124 0xf7bd, 0xdf03, 0xdf02, 0x3f6a, 0x19d8, 0x0be0, 0xc0f9, 0xe2e2, 0xe0ab, 0xc005, 0x4005, 0x4805, 0x5104, 0x0000, 0x0000, 0x0000,
charliex 4:53ef91c87d74 125 0xdfff, 0xff3d, 0x5f6c, 0xdf9b, 0xdffb, 0xd3fa, 0xcbfb, 0x08fd, 0xc0fd, 0xc3bf, 0xca5e, 0xd35f, 0x5b07, 0xcf7b, 0x0000, 0x0000,
charliex 4:53ef91c87d74 126 0xffff, 0x3fa7, 0xdfbd, 0xdfdd, 0xdffd, 0x38fd, 0x96f6, 0x15ff, 0xcffe, 0xcfdf, 0xd7bf, 0xdbbf, 0xff07, 0xdffe, 0x0000, 0x0000
charliex 4:53ef91c87d74 127 };
charliex 4:53ef91c87d74 128
charliex 4:53ef91c87d74 129 /*-------------------------------------------------------------------*/
charliex 4:53ef91c87d74 130 /* Function prototypes */
charliex 4:53ef91c87d74 131 /*-------------------------------------------------------------------*/
charliex 4:53ef91c87d74 132
charliex 4:53ef91c87d74 133 int LoadSRAM();
charliex 4:53ef91c87d74 134 int SaveSRAM();
charliex 4:53ef91c87d74 135
charliex 4:53ef91c87d74 136 /*===================================================================*/
charliex 4:53ef91c87d74 137 /* */
charliex 4:53ef91c87d74 138 /* LoadSRAM() : Load a SRAM */
charliex 4:53ef91c87d74 139 /* */
charliex 4:53ef91c87d74 140 /*===================================================================*/
charliex 4:53ef91c87d74 141 int LoadSRAM()
charliex 4:53ef91c87d74 142 {
charliex 4:53ef91c87d74 143 /*
charliex 4:53ef91c87d74 144 * Load a SRAM
charliex 4:53ef91c87d74 145 *
charliex 4:53ef91c87d74 146 * Return values
charliex 4:53ef91c87d74 147 * 0 : Normally
charliex 4:53ef91c87d74 148 * -1 : SRAM data couldn't be read
charliex 4:53ef91c87d74 149 */
charliex 4:53ef91c87d74 150
charliex 4:53ef91c87d74 151 return 0;
charliex 4:53ef91c87d74 152 }
charliex 4:53ef91c87d74 153
charliex 4:53ef91c87d74 154 /*===================================================================*/
charliex 4:53ef91c87d74 155 /* */
charliex 4:53ef91c87d74 156 /* SaveSRAM() : Save a SRAM */
charliex 4:53ef91c87d74 157 /* */
charliex 4:53ef91c87d74 158 /*===================================================================*/
charliex 4:53ef91c87d74 159 int SaveSRAM()
charliex 4:53ef91c87d74 160 {
charliex 4:53ef91c87d74 161 /*
charliex 4:53ef91c87d74 162 * Save a SRAM
charliex 4:53ef91c87d74 163 *
charliex 4:53ef91c87d74 164 * Return values
charliex 4:53ef91c87d74 165 * 0 : Normally
charliex 4:53ef91c87d74 166 * -1 : SRAM data couldn't be written
charliex 4:53ef91c87d74 167 */
charliex 4:53ef91c87d74 168
charliex 4:53ef91c87d74 169
charliex 4:53ef91c87d74 170 // Successful
charliex 4:53ef91c87d74 171 return 0;
charliex 4:53ef91c87d74 172 }
charliex 4:53ef91c87d74 173
charliex 4:53ef91c87d74 174 /*===================================================================*/
charliex 4:53ef91c87d74 175 /* */
charliex 4:53ef91c87d74 176 /* pNesX_Menu() : Menu screen */
charliex 4:53ef91c87d74 177 /* */
charliex 4:53ef91c87d74 178 /*===================================================================*/
charliex 4:53ef91c87d74 179 int pNesX_Menu()
charliex 4:53ef91c87d74 180 {
charliex 4:53ef91c87d74 181 /*
charliex 4:53ef91c87d74 182 * Menu screen
charliex 4:53ef91c87d74 183 *
charliex 4:53ef91c87d74 184 * Return values
charliex 4:53ef91c87d74 185 * 0 : Normally
charliex 4:53ef91c87d74 186 * -1 : Exit pNesX
charliex 4:53ef91c87d74 187 */
charliex 4:53ef91c87d74 188
charliex 4:53ef91c87d74 189 #if defined(SHOW_FPS)
charliex 4:53ef91c87d74 190 timer.stop();
charliex 4:53ef91c87d74 191 #endif
charliex 4:53ef91c87d74 192
charliex 4:53ef91c87d74 193
charliex 4:53ef91c87d74 194 ApuMute ( true );
charliex 4:53ef91c87d74 195
charliex 4:53ef91c87d74 196 switch ( pNesX_Filer() ) {
charliex 4:53ef91c87d74 197 case 0: // Selected a file
charliex 4:53ef91c87d74 198 if ( pNesX_Load ( szRomPath ) == 0 ) {
charliex 4:53ef91c87d74 199 // Set a ROM image name
charliex 4:53ef91c87d74 200 strcpy ( szRomName, szRomFilename );
charliex 4:53ef91c87d74 201
charliex 4:53ef91c87d74 202 // Load SRAM
charliex 4:53ef91c87d74 203 LoadSRAM();
charliex 4:53ef91c87d74 204 }
charliex 4:53ef91c87d74 205
charliex 4:53ef91c87d74 206 break;
charliex 4:53ef91c87d74 207
charliex 4:53ef91c87d74 208 case 1: // Return to Emu
charliex 4:53ef91c87d74 209 break;
charliex 4:53ef91c87d74 210
charliex 4:53ef91c87d74 211 case 2: // Reset
charliex 4:53ef91c87d74 212 if ( szRomName[ 0 ] != 0 ) {
charliex 4:53ef91c87d74 213 // Reset pNesX
charliex 4:53ef91c87d74 214 pNesX_Reset();
charliex 4:53ef91c87d74 215 }
charliex 4:53ef91c87d74 216
charliex 4:53ef91c87d74 217 break;
charliex 4:53ef91c87d74 218
charliex 4:53ef91c87d74 219 case -1: // Error
charliex 4:53ef91c87d74 220
charliex 4:53ef91c87d74 221 //printf ( "Filer Error\r\n" );
charliex 4:53ef91c87d74 222
charliex 4:53ef91c87d74 223 while ( 1 );
charliex 4:53ef91c87d74 224 }
charliex 4:53ef91c87d74 225
charliex 4:53ef91c87d74 226 tft_clear ( TFT_BLACK );
charliex 4:53ef91c87d74 227 tft_set_window ( 32, 8, NES_DISP_WIDTH + 32 - 1, NES_DISP_HEIGHT + 8 - 1 );
charliex 4:53ef91c87d74 228
charliex 4:53ef91c87d74 229 ApuMute ( false );
charliex 4:53ef91c87d74 230
charliex 4:53ef91c87d74 231 #if defined(SHOW_FPS)
charliex 4:53ef91c87d74 232 timer.start();
charliex 4:53ef91c87d74 233 #endif
charliex 4:53ef91c87d74 234
charliex 4:53ef91c87d74 235 return 0;
charliex 4:53ef91c87d74 236 }
charliex 4:53ef91c87d74 237
charliex 4:53ef91c87d74 238 /*===================================================================*/
charliex 4:53ef91c87d74 239 /* */
charliex 4:53ef91c87d74 240 /* pNesX_ReadRom() : Read ROM image file */
charliex 4:53ef91c87d74 241 /* */
charliex 4:53ef91c87d74 242 /*===================================================================*/
charliex 4:53ef91c87d74 243 int pNesX_ReadRom ( const char *pszFileName )
charliex 4:53ef91c87d74 244 {
charliex 4:53ef91c87d74 245 /*
charliex 4:53ef91c87d74 246 * Read ROM image file
charliex 4:53ef91c87d74 247 *
charliex 4:53ef91c87d74 248 * Parameters
charliex 4:53ef91c87d74 249 * const char *pszFileName (Read)
charliex 4:53ef91c87d74 250 *
charliex 4:53ef91c87d74 251 * Return values
charliex 4:53ef91c87d74 252 * 0 : Normally
charliex 4:53ef91c87d74 253 * -1 : Error
charliex 4:53ef91c87d74 254 */
charliex 4:53ef91c87d74 255 FileHandle* file;
charliex 4:53ef91c87d74 256
charliex 4:53ef91c87d74 257 /* Open ROM file */
charliex 4:53ef91c87d74 258 file = sd->open ( pszFileName, O_RDONLY );
charliex 4:53ef91c87d74 259
charliex 4:53ef91c87d74 260 if ( file == NULL ) {
charliex 4:53ef91c87d74 261 //printf ( "open error\r\n" );
charliex 4:53ef91c87d74 262 return -1;
charliex 4:53ef91c87d74 263 }
charliex 4:53ef91c87d74 264
charliex 4:53ef91c87d74 265 /* Read ROM Header */
charliex 4:53ef91c87d74 266 file->read ( &NesHeader, sizeof NesHeader );
charliex 4:53ef91c87d74 267
charliex 4:53ef91c87d74 268 if ( memcmp ( NesHeader.byID, "NES\x1a", 4 ) != 0 ) {
charliex 4:53ef91c87d74 269 /* not .nes file */
charliex 4:53ef91c87d74 270 file->close();
charliex 4:53ef91c87d74 271 return -1;
charliex 4:53ef91c87d74 272 }
charliex 4:53ef91c87d74 273
charliex 4:53ef91c87d74 274 /* Clear SRAM */
charliex 4:53ef91c87d74 275 memset ( SRAM, 0, SRAM_SIZE );
charliex 4:53ef91c87d74 276
charliex 4:53ef91c87d74 277 /* If trainer presents Read Triner at 0x7000-0x71ff */
charliex 4:53ef91c87d74 278 if ( NesHeader.byInfo1 & 4 ) {
charliex 4:53ef91c87d74 279 //printf ( "Read Trainer\r\n" );
charliex 4:53ef91c87d74 280 file->read ( &SRAM[ 0x1000 ], 512 );
charliex 4:53ef91c87d74 281 }
charliex 4:53ef91c87d74 282
charliex 4:53ef91c87d74 283 //printf ( "RomSize: %d\r\n", NesHeader.byRomSize );
charliex 4:53ef91c87d74 284 /* Allocate Memory for ROM Image */
charliex 4:53ef91c87d74 285 ROM = ( BYTE * ) malloc ( NesHeader.byRomSize * 0x4000 );
charliex 4:53ef91c87d74 286 //printf ( "ROM addr:%x\r\n", ROM );
charliex 4:53ef91c87d74 287
charliex 4:53ef91c87d74 288 /* Read ROM Image */
charliex 4:53ef91c87d74 289 file->read ( ROM, 0x4000 * NesHeader.byRomSize );
charliex 4:53ef91c87d74 290
charliex 4:53ef91c87d74 291 if ( NesHeader.byVRomSize > 0 ) {
charliex 4:53ef91c87d74 292 /* Allocate Memory for VROM Image */
charliex 4:53ef91c87d74 293 VROM = ( BYTE * ) malloc ( NesHeader.byVRomSize * 0x2000 );
charliex 4:53ef91c87d74 294 //printf ( "VROM addr:%x\r\n", VROM );
charliex 4:53ef91c87d74 295
charliex 4:53ef91c87d74 296 /* Read VROM Image */
charliex 4:53ef91c87d74 297 file->read ( VROM, 0x2000 * NesHeader.byVRomSize );
charliex 4:53ef91c87d74 298 }
charliex 4:53ef91c87d74 299
charliex 4:53ef91c87d74 300 /* File close */
charliex 4:53ef91c87d74 301 file->close();
charliex 4:53ef91c87d74 302
charliex 4:53ef91c87d74 303 /* Successful */
charliex 4:53ef91c87d74 304 return 0;
charliex 4:53ef91c87d74 305 }
charliex 4:53ef91c87d74 306
charliex 4:53ef91c87d74 307 /*===================================================================*/
charliex 4:53ef91c87d74 308 /* */
charliex 4:53ef91c87d74 309 /* pNesX_ReleaseRom() : Release a memory for ROM */
charliex 4:53ef91c87d74 310 /* */
charliex 4:53ef91c87d74 311 /*===================================================================*/
charliex 4:53ef91c87d74 312 void pNesX_ReleaseRom()
charliex 4:53ef91c87d74 313 {
charliex 4:53ef91c87d74 314 /*
charliex 4:53ef91c87d74 315 * Release a memory for ROM
charliex 4:53ef91c87d74 316 *
charliex 4:53ef91c87d74 317 */
charliex 4:53ef91c87d74 318 if ( ROM ) {
charliex 4:53ef91c87d74 319 free ( ROM );
charliex 4:53ef91c87d74 320 ROM = NULL;
charliex 4:53ef91c87d74 321 }
charliex 4:53ef91c87d74 322
charliex 4:53ef91c87d74 323 if ( VROM ) {
charliex 4:53ef91c87d74 324 free ( VROM );
charliex 4:53ef91c87d74 325 VROM = NULL;
charliex 4:53ef91c87d74 326 }
charliex 4:53ef91c87d74 327 }
charliex 4:53ef91c87d74 328
charliex 4:53ef91c87d74 329 /*===================================================================*/
charliex 4:53ef91c87d74 330 /* */
charliex 4:53ef91c87d74 331 /* pNesX_LoadFrame() : */
charliex 4:53ef91c87d74 332 /* Transfer the contents of work frame on the screen */
charliex 4:53ef91c87d74 333 /* */
charliex 4:53ef91c87d74 334 /*===================================================================*/
charliex 4:53ef91c87d74 335 void pNesX_LoadFrame()
charliex 4:53ef91c87d74 336 {
charliex 4:53ef91c87d74 337 /*
charliex 4:53ef91c87d74 338 * Transfer the contents of work frame on the screen
charliex 4:53ef91c87d74 339 *
charliex 4:53ef91c87d74 340 */
charliex 4:53ef91c87d74 341 #if defined(SHOW_FPS)
charliex 4:53ef91c87d74 342 fps++;
charliex 4:53ef91c87d74 343
charliex 4:53ef91c87d74 344 if ( timer.read_ms() >= 1000 ) {
charliex 4:53ef91c87d74 345 timer.stop();
charliex 4:53ef91c87d74 346 //printf ( "%d %d %d\r\n", fps, timer.read_ms(), dmawait );
charliex 4:53ef91c87d74 347 fps = 0;
charliex 4:53ef91c87d74 348 timer.reset();
charliex 4:53ef91c87d74 349 timer.start();
charliex 4:53ef91c87d74 350 }
charliex 4:53ef91c87d74 351
charliex 4:53ef91c87d74 352 dmawait = 0;
charliex 4:53ef91c87d74 353 #endif
charliex 4:53ef91c87d74 354 }
charliex 4:53ef91c87d74 355
charliex 4:53ef91c87d74 356 void pNesX_TransmitLinedata()
charliex 4:53ef91c87d74 357 {
charliex 4:53ef91c87d74 358 while ( SpiHandle.State != HAL_SPI_STATE_READY ) {
charliex 4:53ef91c87d74 359 #if defined(SHOW_FPS)
charliex 4:53ef91c87d74 360 dmawait++;
charliex 4:53ef91c87d74 361 #endif
charliex 4:53ef91c87d74 362 }
charliex 4:53ef91c87d74 363
charliex 4:53ef91c87d74 364 HAL_SPI_Transmit_DMA ( &SpiHandle, ( uint8_t * ) pDrawData, 256 * 2 );
charliex 4:53ef91c87d74 365 }
charliex 4:53ef91c87d74 366
charliex 4:53ef91c87d74 367 #if defined(ORIGINAL_GAMEPAD)
charliex 4:53ef91c87d74 368 const BYTE UsbPadTable[] = {0x10, 0x90, 0x80, 0xa0, 0x20, 0x60, 0x40, 0x50};
charliex 4:53ef91c87d74 369 #endif
charliex 4:53ef91c87d74 370
charliex 4:53ef91c87d74 371 /*===================================================================*/
charliex 4:53ef91c87d74 372 /* */
charliex 4:53ef91c87d74 373 /* pNesX_PadState() : Get a joypad state */
charliex 4:53ef91c87d74 374 /* */
charliex 4:53ef91c87d74 375 /*===================================================================*/
charliex 4:53ef91c87d74 376 void pNesX_PadState ( DWORD *pdwPad1, DWORD *pdwPad2, DWORD *pdwSystem )
charliex 4:53ef91c87d74 377 {
charliex 4:53ef91c87d74 378 /*
charliex 4:53ef91c87d74 379 * Get a joypad state
charliex 4:53ef91c87d74 380 *
charliex 4:53ef91c87d74 381 * Parameters
charliex 4:53ef91c87d74 382 * DWORD *pdwPad1 (Write)
charliex 4:53ef91c87d74 383 * Joypad 1 State R L D U St Se B A
charliex 4:53ef91c87d74 384 *
charliex 4:53ef91c87d74 385 * DWORD *pdwPad2 (Write)
charliex 4:53ef91c87d74 386 * Joypad 2 State
charliex 4:53ef91c87d74 387 *
charliex 4:53ef91c87d74 388 * DWORD *pdwSystem (Write)
charliex 4:53ef91c87d74 389 * Input for pNesX
charliex 4:53ef91c87d74 390 *
charliex 4:53ef91c87d74 391 */
charliex 4:53ef91c87d74 392
charliex 4:53ef91c87d74 393 #if defined(ORIGINAL_GAMEPAD)
charliex 4:53ef91c87d74 394 *pdwPad1 = ( ( pad->report[4] & 0x20 ) >> 5 ) |
charliex 4:53ef91c87d74 395 ( ( pad->report[4] & 0x10 ) >> 3 ) |
charliex 4:53ef91c87d74 396 ( ( pad->report[5] & 0x30 ) >> 2 );
charliex 4:53ef91c87d74 397
charliex 4:53ef91c87d74 398 if ( ! ( pad->report[4] & 8 ) ) {
charliex 4:53ef91c87d74 399 *pdwPad1 |= UsbPadTable[pad->report[4] & 7];
charliex 4:53ef91c87d74 400 }
charliex 4:53ef91c87d74 401
charliex 4:53ef91c87d74 402 *pdwPad1 = *pdwPad1 | ( *pdwPad1 << 8 );
charliex 4:53ef91c87d74 403
charliex 4:53ef91c87d74 404 *pdwPad2 = 0;
charliex 4:53ef91c87d74 405 *pdwSystem = ( ( pad->report[5] & 0x4 ) >> 2 ) |
charliex 4:53ef91c87d74 406 ( ( ( pad->report[5] & 0xa ) == 0xa ) << 1 );
charliex 4:53ef91c87d74 407
charliex 4:53ef91c87d74 408 USBHost::poll();
charliex 4:53ef91c87d74 409
charliex 4:53ef91c87d74 410 #elif defined(NES_GAMEPAD)
charliex 4:53ef91c87d74 411
charliex 4:53ef91c87d74 412 *pdwSystem = 0 ;
charliex 4:53ef91c87d74 413 *pdwPad1 = 0 ;
charliex 4:53ef91c87d74 414 /*
charliex 4:53ef91c87d74 415 01 02 03 04 05 06 07 08
charliex 4:53ef91c87d74 416 -----------------------
charliex 4:53ef91c87d74 417 01 80 80 7f 7f 0f 00 00
charliex 4:53ef91c87d74 418 LEFT 00
charliex 4:53ef91c87d74 419 RIGHT FF
charliex 4:53ef91c87d74 420 UP 00
charliex 4:53ef91c87d74 421 DOWN FF
charliex 4:53ef91c87d74 422 SELECT 10
charliex 4:53ef91c87d74 423 START 20
charliex 4:53ef91c87d74 424 B 1F
charliex 4:53ef91c87d74 425 A 2F
charliex 4:53ef91c87d74 426 */
charliex 4:53ef91c87d74 427
charliex 4:53ef91c87d74 428 if ( pad->report[3] == 0x00 ) {*pdwPad1 |= KEYPAD_LEFT; *pdwSystem ^= PAD_SYS_LEFT;}
charliex 4:53ef91c87d74 429
charliex 4:53ef91c87d74 430 if ( pad->report[3] == 0xFF ) {*pdwPad1 |= KEYPAD_RIGHT; *pdwSystem ^= PAD_SYS_RIGHT;}
charliex 4:53ef91c87d74 431
charliex 4:53ef91c87d74 432 if ( pad->report[4] == 0x00 ) {*pdwPad1 |= KEYPAD_UP; *pdwSystem ^= PAD_SYS_UP;}
charliex 4:53ef91c87d74 433
charliex 4:53ef91c87d74 434 if ( pad->report[4] == 0xFF ) {*pdwPad1 |= KEYPAD_DOWN; *pdwSystem ^= PAD_SYS_DOWN;}
charliex 4:53ef91c87d74 435
charliex 4:53ef91c87d74 436 if ( pad->report[6] & 0x10 ) {*pdwPad1 |= KEYPAD_SELECT;}
charliex 4:53ef91c87d74 437
charliex 4:53ef91c87d74 438 if ( pad->report[6] & 0x20 ) {*pdwPad1 |= KEYPAD_START;}
charliex 4:53ef91c87d74 439
charliex 4:53ef91c87d74 440 if ( pad->report[5] & 0x10 ) {*pdwPad1 |= KEYPAD_B;}
charliex 4:53ef91c87d74 441
charliex 4:53ef91c87d74 442 if ( pad->report[5] & 0x20 ) {*pdwPad1 |= KEYPAD_A;}
charliex 4:53ef91c87d74 443
charliex 4:53ef91c87d74 444 if ( pad->report[6] == 0x30 ) { *pdwSystem = PAD_SYS_QUIT; }
charliex 4:53ef91c87d74 445
charliex 4:53ef91c87d74 446 #ifdef USE_CAN
charliex 4:53ef91c87d74 447
charliex 4:53ef91c87d74 448 {
charliex 4:53ef91c87d74 449 static DWORD lastpad;
charliex 4:53ef91c87d74 450
charliex 4:53ef91c87d74 451 if ( *pdwPad1 != lastpad ) {
charliex 4:53ef91c87d74 452 can1.write ( CANMessage ( CAN_SEND_ID, ( char* ) pdwPad1, 4 ) );
charliex 4:53ef91c87d74 453 lastpad = *pdwPad1;
charliex 4:53ef91c87d74 454 }
charliex 4:53ef91c87d74 455 }
charliex 4:53ef91c87d74 456
charliex 4:53ef91c87d74 457 if ( msgAvailable ) {
charliex 4:53ef91c87d74 458
charliex 4:53ef91c87d74 459 *pdwPad2 = canval2;
charliex 4:53ef91c87d74 460
charliex 4:53ef91c87d74 461 } else
charliex 4:53ef91c87d74 462 #endif
charliex 4:53ef91c87d74 463 {
charliex 4:53ef91c87d74 464 // network ?
charliex 4:53ef91c87d74 465 *pdwPad2 = 0;
charliex 4:53ef91c87d74 466 }
charliex 4:53ef91c87d74 467
charliex 4:53ef91c87d74 468
charliex 4:53ef91c87d74 469 USBHost::poll();
charliex 4:53ef91c87d74 470 #else
charliex 4:53ef91c87d74 471
charliex 4:53ef91c87d74 472 unsigned short pad1, pad2;
charliex 4:53ef91c87d74 473 pspad_read ( &pad1, &pad2 );
charliex 4:53ef91c87d74 474 // R L D U St Se B A
charliex 4:53ef91c87d74 475
charliex 4:53ef91c87d74 476 // SE -- -- ST U R D L L2 R2 L1 R1 TR O X SQ
charliex 4:53ef91c87d74 477 *pdwPad1 = ( ( pad1 & 0x0400 ) >> 3 ) |
charliex 4:53ef91c87d74 478 ( ( pad1 & 0x0100 ) >> 2 ) |
charliex 4:53ef91c87d74 479 ( ( pad1 & 0x0200 ) >> 4 ) |
charliex 4:53ef91c87d74 480 ( ( pad1 & 0x0800 ) >> 7 ) |
charliex 4:53ef91c87d74 481 ( ( pad1 & 0x1000 ) >> 9 ) |
charliex 4:53ef91c87d74 482 ( ( pad1 & 0x8000 ) >> 13 ) |
charliex 4:53ef91c87d74 483 ( ( pad1 & 1 ) << 1 ) |
charliex 4:53ef91c87d74 484 ( ( pad1 & 2 ) >> 1 );
charliex 4:53ef91c87d74 485
charliex 4:53ef91c87d74 486 *pdwPad1 = *pdwPad1 | ( *pdwPad1 << 8 );
charliex 4:53ef91c87d74 487
charliex 4:53ef91c87d74 488 *pdwPad2 = 0;
charliex 4:53ef91c87d74 489
charliex 4:53ef91c87d74 490 *pdwSystem = ( ( pad1 & 0x80 ) >> 7 ) |
charliex 4:53ef91c87d74 491 ( ( ( pad1 & 0x50 ) == 0x50 ) << 1 );
charliex 4:53ef91c87d74 492
charliex 4:53ef91c87d74 493 #endif
charliex 4:53ef91c87d74 494
charliex 4:53ef91c87d74 495 }
charliex 4:53ef91c87d74 496
charliex 4:53ef91c87d74 497 /*===================================================================*/
charliex 4:53ef91c87d74 498 /* */
charliex 4:53ef91c87d74 499 /* pNesX_MemoryCopy() : memcpy */
charliex 4:53ef91c87d74 500 /* */
charliex 4:53ef91c87d74 501 /*===================================================================*/
charliex 4:53ef91c87d74 502 void *pNesX_MemoryCopy ( void *dest, const void *src, int count )
charliex 4:53ef91c87d74 503 {
charliex 4:53ef91c87d74 504 /*
charliex 4:53ef91c87d74 505 * memcpy
charliex 4:53ef91c87d74 506 *
charliex 4:53ef91c87d74 507 * Parameters
charliex 4:53ef91c87d74 508 * void *dest (Write)
charliex 4:53ef91c87d74 509 * Points to the starting address of the copied block to destination
charliex 4:53ef91c87d74 510 *
charliex 4:53ef91c87d74 511 * const void *src (Read)
charliex 4:53ef91c87d74 512 * Points to the starting address of the block of memory to copy
charliex 4:53ef91c87d74 513 *
charliex 4:53ef91c87d74 514 * int count (Read)
charliex 4:53ef91c87d74 515 * Specifies the size, in bytes, of the block of memory to copy
charliex 4:53ef91c87d74 516 *
charliex 4:53ef91c87d74 517 * Return values
charliex 4:53ef91c87d74 518 * Pointer of destination
charliex 4:53ef91c87d74 519 */
charliex 4:53ef91c87d74 520
charliex 4:53ef91c87d74 521 memcpy ( dest, src, count );
charliex 4:53ef91c87d74 522 return dest;
charliex 4:53ef91c87d74 523 }
charliex 4:53ef91c87d74 524
charliex 4:53ef91c87d74 525 /*===================================================================*/
charliex 4:53ef91c87d74 526 /* */
charliex 4:53ef91c87d74 527 /* pNesX_MemorySet() : */
charliex 4:53ef91c87d74 528 /* */
charliex 4:53ef91c87d74 529 /*===================================================================*/
charliex 4:53ef91c87d74 530 void *pNesX_MemorySet ( void *dest, int c, int count )
charliex 4:53ef91c87d74 531 {
charliex 4:53ef91c87d74 532 /*
charliex 4:53ef91c87d74 533 * memset
charliex 4:53ef91c87d74 534 *
charliex 4:53ef91c87d74 535 * Parameters
charliex 4:53ef91c87d74 536 * void *dest (Write)
charliex 4:53ef91c87d74 537 * Points to the starting address of the block of memory to fill
charliex 4:53ef91c87d74 538 *
charliex 4:53ef91c87d74 539 * int c (Read)
charliex 4:53ef91c87d74 540 * Specifies the byte value with which to fill the memory block
charliex 4:53ef91c87d74 541 *
charliex 4:53ef91c87d74 542 * int count (Read)
charliex 4:53ef91c87d74 543 * Specifies the size, in bytes, of the block of memory to fill
charliex 4:53ef91c87d74 544 *
charliex 4:53ef91c87d74 545 * Return values
charliex 4:53ef91c87d74 546 * Pointer of destination
charliex 4:53ef91c87d74 547 */
charliex 4:53ef91c87d74 548
charliex 4:53ef91c87d74 549 memset ( dest, c, count );
charliex 4:53ef91c87d74 550 return dest;
charliex 4:53ef91c87d74 551 }
charliex 4:53ef91c87d74 552
charliex 4:53ef91c87d74 553 /*===================================================================*/
charliex 4:53ef91c87d74 554 /* */
charliex 4:53ef91c87d74 555 /* DebugPrint() : Print debug message */
charliex 4:53ef91c87d74 556 /* */
charliex 4:53ef91c87d74 557 /*===================================================================*/
charliex 4:53ef91c87d74 558 void pNesX_DebugPrint ( char *pszMsg )
charliex 4:53ef91c87d74 559 {
charliex 4:53ef91c87d74 560 }
charliex 4:53ef91c87d74 561
charliex 4:53ef91c87d74 562
charliex 4:53ef91c87d74 563 #ifdef USE_CAN
charliex 4:53ef91c87d74 564
charliex 4:53ef91c87d74 565 /**
charliex 4:53ef91c87d74 566 * @brief 'CAN receive-complete' interrup handler.
charliex 4:53ef91c87d74 567 * @note Called on arrival of new CAN message.
charliex 4:53ef91c87d74 568 * Keep it as short as possible.
charliex 4:53ef91c87d74 569 * @param
charliex 4:53ef91c87d74 570 * @retval
charliex 4:53ef91c87d74 571 */
charliex 4:53ef91c87d74 572 void onMsgReceived()
charliex 4:53ef91c87d74 573 {
charliex 4:53ef91c87d74 574 CANMessage msg;
charliex 4:53ef91c87d74 575
charliex 4:53ef91c87d74 576 // address to read/wrte
charliex 4:53ef91c87d74 577 WORD address;
charliex 4:53ef91c87d74 578
charliex 4:53ef91c87d74 579 // default to SRAM
charliex 4:53ef91c87d74 580 uint8_t *bank_ptr = &RAM[0];
charliex 4:53ef91c87d74 581 uint8_t bank = 0;
charliex 4:53ef91c87d74 582
charliex 4:53ef91c87d74 583 memset ( &msg, 0, sizeof ( msg ) );
charliex 4:53ef91c87d74 584
charliex 4:53ef91c87d74 585 if ( can1.read ( msg ) ) {
charliex 4:53ef91c87d74 586
charliex 4:53ef91c87d74 587 // less code
charliex 4:53ef91c87d74 588 address = ( ( WORD ) msg.data[0] << 8 + ( WORD ) msg.data[1] );
charliex 4:53ef91c87d74 589
charliex 4:53ef91c87d74 590 // RAM,SRAM,ROM,ROMBANK0/1/2/3,PPURAM,VROM,PPUBANK
charliex 4:53ef91c87d74 591 bank = msg.data[2];
charliex 4:53ef91c87d74 592
charliex 4:53ef91c87d74 593 // decide which bank
charliex 4:53ef91c87d74 594 switch ( bank ) {
charliex 4:53ef91c87d74 595 case 0:
charliex 4:53ef91c87d74 596 //RAM
charliex 4:53ef91c87d74 597 break;
charliex 4:53ef91c87d74 598
charliex 4:53ef91c87d74 599 case 1:
charliex 4:53ef91c87d74 600 bank_ptr = &SRAM[0];
charliex 4:53ef91c87d74 601 break;
charliex 4:53ef91c87d74 602
charliex 4:53ef91c87d74 603 case 2:
charliex 4:53ef91c87d74 604 bank_ptr = ROM;
charliex 4:53ef91c87d74 605 break;
charliex 4:53ef91c87d74 606
charliex 4:53ef91c87d74 607 case 3:
charliex 4:53ef91c87d74 608 bank_ptr = &PPURAM[0];
charliex 4:53ef91c87d74 609 break;
charliex 4:53ef91c87d74 610
charliex 4:53ef91c87d74 611 case 4:
charliex 4:53ef91c87d74 612 bank_ptr = VROM;
charliex 4:53ef91c87d74 613 break;
charliex 4:53ef91c87d74 614
charliex 4:53ef91c87d74 615 case 5:
charliex 4:53ef91c87d74 616 bank_ptr = ( uint8_t* ) &PPUBANK[0];
charliex 4:53ef91c87d74 617 break;
charliex 4:53ef91c87d74 618
charliex 4:53ef91c87d74 619 case 6:
charliex 4:53ef91c87d74 620 bank_ptr = ( uint8_t* ) &SPRRAM[0];
charliex 4:53ef91c87d74 621 break;
charliex 4:53ef91c87d74 622
charliex 4:53ef91c87d74 623 }
charliex 4:53ef91c87d74 624
charliex 4:53ef91c87d74 625 switch ( msg.id ) {
charliex 4:53ef91c87d74 626 case CAN_RECV_ID :
charliex 4:53ef91c87d74 627
charliex 4:53ef91c87d74 628 /// so far only mark it as available when its a gamepad message..
charliex 4:53ef91c87d74 629 msgAvailable = true;
charliex 4:53ef91c87d74 630
charliex 4:53ef91c87d74 631 //memcpy(&canval2,(char*)&msg.data[0],4);
charliex 4:53ef91c87d74 632 canval2 = ( unsigned long ) ( msg.data[3] << 24 ) + ( ( unsigned long ) msg.data[2] << 16 ) + ( ( unsigned long ) msg.data[1] << 8 ) + ( ( unsigned long ) msg.data[0] );
charliex 4:53ef91c87d74 633 break;
charliex 4:53ef91c87d74 634
charliex 4:53ef91c87d74 635 case CAN_READ_BYTE:
charliex 4:53ef91c87d74 636 break;
charliex 4:53ef91c87d74 637
charliex 4:53ef91c87d74 638 case CAN_READ_WORD:
charliex 4:53ef91c87d74 639 break;
charliex 4:53ef91c87d74 640
charliex 4:53ef91c87d74 641 case CAN_READ_DWORD:
charliex 4:53ef91c87d74 642 break;
charliex 4:53ef91c87d74 643
charliex 4:53ef91c87d74 644 case CAN_WRITE_BYTE:
charliex 4:53ef91c87d74 645 break;
charliex 4:53ef91c87d74 646
charliex 4:53ef91c87d74 647 case CAN_WRITE_WORD:
charliex 4:53ef91c87d74 648 break;
charliex 4:53ef91c87d74 649
charliex 4:53ef91c87d74 650 case CAN_WRITE_DWORD:
charliex 4:53ef91c87d74 651 break;
charliex 4:53ef91c87d74 652 }
charliex 4:53ef91c87d74 653 }
charliex 4:53ef91c87d74 654 }
charliex 4:53ef91c87d74 655
charliex 4:53ef91c87d74 656 #endif
charliex 4:53ef91c87d74 657
charliex 4:53ef91c87d74 658
charliex 4:53ef91c87d74 659 const unsigned char * const logoPtrs[] = {
charliex 4:53ef91c87d74 660 l1_Logo,
charliex 4:53ef91c87d74 661
charliex 4:53ef91c87d74 662 //platinum
charliex 4:53ef91c87d74 663 tinder_logo,
charliex 4:53ef91c87d74 664 supplyFrame,
charliex 4:53ef91c87d74 665 asg_logo,
charliex 4:53ef91c87d74 666 nslmini,
charliex 4:53ef91c87d74 667
charliex 4:53ef91c87d74 668 //gold
charliex 4:53ef91c87d74 669 securitysnobs,
charliex 4:53ef91c87d74 670
charliex 4:53ef91c87d74 671 //silver
charliex 4:53ef91c87d74 672 PRO_LG_K_500x200_1CRevGrey_noDSCR,
charliex 4:53ef91c87d74 673 adaptable_conn_logo,
charliex 4:53ef91c87d74 674 WallOfSheep_logo_200px,
charliex 4:53ef91c87d74 675 hacker_stickers_logo,
charliex 4:53ef91c87d74 676 nostarch_logo
charliex 4:53ef91c87d74 677 };
charliex 4:53ef91c87d74 678
charliex 4:53ef91c87d74 679 void draw_logos ( void )
charliex 4:53ef91c87d74 680 {
charliex 4:53ef91c87d74 681 static unsigned char counter = 0;
charliex 4:53ef91c87d74 682
charliex 4:53ef91c87d74 683 unsigned short w;
charliex 4:53ef91c87d74 684 unsigned char h;
charliex 4:53ef91c87d74 685 const unsigned char *p;
charliex 4:53ef91c87d74 686
charliex 4:53ef91c87d74 687 for ( float b = 1 ; b > 0 ; b -= 0.05f ) {
charliex 4:53ef91c87d74 688 backlight ( b );
charliex 4:53ef91c87d74 689 HAL_Delay ( 20 );
charliex 4:53ef91c87d74 690 }
charliex 4:53ef91c87d74 691
charliex 4:53ef91c87d74 692 backlight ( 0 );
charliex 4:53ef91c87d74 693 tft_clear ( TFT_BLACK );
charliex 4:53ef91c87d74 694
charliex 4:53ef91c87d74 695 p = logoPtrs[counter];
charliex 4:53ef91c87d74 696
charliex 4:53ef91c87d74 697 w = ( unsigned short ) ( p[18] ) + ( ( unsigned short ) p[19] << 8 );
charliex 4:53ef91c87d74 698 h = p[22];
charliex 4:53ef91c87d74 699
charliex 4:53ef91c87d74 700 draw_bmp_4bpp ( p, ( TFT_WIDTH / 2 ) - ( w / 2 ), ( ( TFT_HEIGHT / 2 ) - ( h / 2 ) ) );
charliex 4:53ef91c87d74 701
charliex 4:53ef91c87d74 702 for ( float b = 0 ; b < 1 ; b += 0.05f ) {
charliex 4:53ef91c87d74 703 backlight ( b );
charliex 4:53ef91c87d74 704 HAL_Delay ( 20 );
charliex 4:53ef91c87d74 705 }
charliex 4:53ef91c87d74 706
charliex 4:53ef91c87d74 707
charliex 4:53ef91c87d74 708 HAL_Delay ( 1000 );
charliex 4:53ef91c87d74 709 counter++ ;
charliex 4:53ef91c87d74 710
charliex 4:53ef91c87d74 711 if ( counter >= sizeof ( logoPtrs ) / sizeof ( unsigned char * ) ) { counter = 0; }
charliex 4:53ef91c87d74 712
charliex 4:53ef91c87d74 713 }
charliex 4:53ef91c87d74 714
charliex 4:53ef91c87d74 715
charliex 4:53ef91c87d74 716 /*===================================================================*/
charliex 4:53ef91c87d74 717 /* */
charliex 4:53ef91c87d74 718 /* pNesX Initialise */
charliex 4:53ef91c87d74 719 /* */
charliex 4:53ef91c87d74 720 /*===================================================================*/
charliex 4:53ef91c87d74 721 int main()
charliex 4:53ef91c87d74 722 {
charliex 4:53ef91c87d74 723 const unsigned char *p ;
charliex 4:53ef91c87d74 724 bLED1 = 0;
charliex 4:53ef91c87d74 725 bLED2 = 0;
charliex 4:53ef91c87d74 726
charliex 4:53ef91c87d74 727 #ifdef USE_CAN
charliex 4:53ef91c87d74 728 // can1.reset();
charliex 4:53ef91c87d74 729 can1.frequency ( 1000000 );
charliex 4:53ef91c87d74 730 can1.attach ( &onMsgReceived ); // attach 'CAN receive-complete' interrupt handler
charliex 4:53ef91c87d74 731 #endif
charliex 4:53ef91c87d74 732
charliex 4:53ef91c87d74 733 // TFT initialize
charliex 4:53ef91c87d74 734 tft_init();
charliex 4:53ef91c87d74 735
charliex 4:53ef91c87d74 736 tft_set_window ( 32, 8, NES_DISP_WIDTH + 32 - 1, NES_DISP_HEIGHT + 8 - 1 );
charliex 4:53ef91c87d74 737
charliex 4:53ef91c87d74 738 // SD_CS = PB_2
charliex 4:53ef91c87d74 739 // SD_SCK = PB_10
charliex 4:53ef91c87d74 740 // SD_MISO = PC_2
charliex 4:53ef91c87d74 741 // SD_MOSI = PC_3
charliex 4:53ef91c87d74 742
charliex 4:53ef91c87d74 743 if ( sd == NULL )
charliex 4:53ef91c87d74 744 {
charliex 4:53ef91c87d74 745 // SD card Initialize
charliex 4:53ef91c87d74 746 bLED2 = 1;
charliex 4:53ef91c87d74 747
charliex 4:53ef91c87d74 748 sd = new SDFileSystem ( PC_3, PC_2, PB_10, PB_2, "sd", NC, SDFileSystem::SWITCH_NONE, 20000000 );
charliex 4:53ef91c87d74 749
charliex 4:53ef91c87d74 750
charliex 4:53ef91c87d74 751 sd->crc ( true );
charliex 4:53ef91c87d74 752 sd->large_frames ( true );
charliex 4:53ef91c87d74 753 sd->write_validation ( true );
charliex 4:53ef91c87d74 754
charliex 4:53ef91c87d74 755 strcpy ( szRomFolder, "/sd" );
charliex 4:53ef91c87d74 756
charliex 4:53ef91c87d74 757 }
charliex 4:53ef91c87d74 758
charliex 4:53ef91c87d74 759 for ( ;; ) {
charliex 4:53ef91c87d74 760 draw_logos();
charliex 4:53ef91c87d74 761
charliex 4:53ef91c87d74 762 if ( get_filelist ( "/sd" ) ) { break; }
charliex 4:53ef91c87d74 763 }
charliex 4:53ef91c87d74 764
charliex 4:53ef91c87d74 765 #if !defined(PS_GAMEPAD)
charliex 4:53ef91c87d74 766 tft_clear ( TFT_RED + TFT_BLUE );
charliex 4:53ef91c87d74 767 // USB Gamepad Initialize`
charliex 4:53ef91c87d74 768 pad = new USBHostGamepad();
charliex 4:53ef91c87d74 769 pad->connect();
charliex 4:53ef91c87d74 770 #else
charliex 4:53ef91c87d74 771 pspad_init();
charliex 4:53ef91c87d74 772 #endif
charliex 4:53ef91c87d74 773
charliex 4:53ef91c87d74 774 // Apu Initialize
charliex 4:53ef91c87d74 775 ApuInit();
charliex 4:53ef91c87d74 776
charliex 4:53ef91c87d74 777 /*-------------------------------------------------------------------*/
charliex 4:53ef91c87d74 778 /* Start pNesX */
charliex 4:53ef91c87d74 779 /*-------------------------------------------------------------------*/
charliex 4:53ef91c87d74 780
charliex 4:53ef91c87d74 781 bLED2 = 1;
charliex 4:53ef91c87d74 782 bLED1 = 1;
charliex 4:53ef91c87d74 783
charliex 4:53ef91c87d74 784 pNesX_Main();
charliex 4:53ef91c87d74 785
charliex 4:53ef91c87d74 786 }
charliex 4:53ef91c87d74 787
charliex 4:53ef91c87d74 788