I have ported my old project “pNesX” game console emulator to the nucleo.

Dependencies:   SDFileSystem mbed

Intro

I have ported my old project “pNesX” to the STM32 Nucleo. The pNesX is a NES emulator for the PlayStation that I have created 16 years ago!

Emulation part was almost without change, the sound part was newly added.

Parts

STM32 Nucleo F446RE
QVGA 2.2 TFT SPI (with the SD card slot)
Audio jack(TS or TRS)
USB Connector
Register 100k, 10k, 4.7k, 100
Capacitor 0.01uF, 2.2uF
Breadboard
Wires
Computer Speakers
USB GamePad

Wiring diagram

/media/uploads/beaglescout007/nucleo_ex06_emu.png

TFT J2Nucleo
VCC3V3
GNDGND
CSPB_5(D4)
ResetPA_10(D2) Pull Up(100k)
D/CPA_8(D7)
MOSIPA_7(D11)
SCKPA_5(D13)
LEDLED-100ohm-3V3
MISOPA_6(D12)
TFT J4Nucleo
SD_CSPA_9
SD_MOSIPB_15
SD_MISOPB_14
SD_SCKPB_13
AudioNucleo
TIPPA_4(A2)
USB con.Nucleo
GNDGND
+PA_12
-PA_11
5V5V

https://youtu.be/jL24IjT6LnI

Limitations

  • Since the rest of the RAM is about 50kbyte, maximum capacity of the game ROM is about 50kbyte.
  • The length of the file name up to 32 characters.
  • The number of files in the folder is up to 100.

Used Library

Committer:
beaglescout007
Date:
Sun Apr 03 07:45:29 2016 +0000
Revision:
0:3dac1f1bc9e0
Release

Who changed what in which revision?

UserRevisionLine numberNew contents of line
beaglescout007 0:3dac1f1bc9e0 1 /*===================================================================*/
beaglescout007 0:3dac1f1bc9e0 2 /* */
beaglescout007 0:3dac1f1bc9e0 3 /* pNesX_System.h : The function which depends on a system */
beaglescout007 0:3dac1f1bc9e0 4 /* */
beaglescout007 0:3dac1f1bc9e0 5 /* 1999/11/03 Racoon New preparation */
beaglescout007 0:3dac1f1bc9e0 6 /* */
beaglescout007 0:3dac1f1bc9e0 7 /*===================================================================*/
beaglescout007 0:3dac1f1bc9e0 8
beaglescout007 0:3dac1f1bc9e0 9 #ifndef PNESX_SYSTEM_H_INCLUDED
beaglescout007 0:3dac1f1bc9e0 10 #define PNESX_SYSTEM_H_INCLUDED
beaglescout007 0:3dac1f1bc9e0 11
beaglescout007 0:3dac1f1bc9e0 12 /*-------------------------------------------------------------------*/
beaglescout007 0:3dac1f1bc9e0 13 /* Include files */
beaglescout007 0:3dac1f1bc9e0 14 /*-------------------------------------------------------------------*/
beaglescout007 0:3dac1f1bc9e0 15
beaglescout007 0:3dac1f1bc9e0 16 #include "pNesX_Types.h"
beaglescout007 0:3dac1f1bc9e0 17
beaglescout007 0:3dac1f1bc9e0 18 /*-------------------------------------------------------------------*/
beaglescout007 0:3dac1f1bc9e0 19 /* Palette data */
beaglescout007 0:3dac1f1bc9e0 20 /*-------------------------------------------------------------------*/
beaglescout007 0:3dac1f1bc9e0 21 extern const WORD NesPalette[];
beaglescout007 0:3dac1f1bc9e0 22
beaglescout007 0:3dac1f1bc9e0 23 /*-------------------------------------------------------------------*/
beaglescout007 0:3dac1f1bc9e0 24 /* Function prototypes */
beaglescout007 0:3dac1f1bc9e0 25 /*-------------------------------------------------------------------*/
beaglescout007 0:3dac1f1bc9e0 26
beaglescout007 0:3dac1f1bc9e0 27 /* Menu screen */
beaglescout007 0:3dac1f1bc9e0 28 int pNesX_Menu();
beaglescout007 0:3dac1f1bc9e0 29
beaglescout007 0:3dac1f1bc9e0 30 /* Read ROM image file */
beaglescout007 0:3dac1f1bc9e0 31 int pNesX_ReadRom( const char *pszFileName );
beaglescout007 0:3dac1f1bc9e0 32
beaglescout007 0:3dac1f1bc9e0 33 /* Release a memory for ROM */
beaglescout007 0:3dac1f1bc9e0 34 void pNesX_ReleaseRom();
beaglescout007 0:3dac1f1bc9e0 35
beaglescout007 0:3dac1f1bc9e0 36 /* Transfer the contents of work frame on the screen */
beaglescout007 0:3dac1f1bc9e0 37 void pNesX_LoadFrame();
beaglescout007 0:3dac1f1bc9e0 38 void pNesX_TransmitLinedata();
beaglescout007 0:3dac1f1bc9e0 39
beaglescout007 0:3dac1f1bc9e0 40 /* Get a joypad state */
beaglescout007 0:3dac1f1bc9e0 41 void pNesX_PadState( DWORD *pdwPad1, DWORD *pdwPad2, DWORD *pdwSystem );
beaglescout007 0:3dac1f1bc9e0 42
beaglescout007 0:3dac1f1bc9e0 43 /* memcpy */
beaglescout007 0:3dac1f1bc9e0 44 void *pNesX_MemoryCopy( void *dest, const void *src, int count );
beaglescout007 0:3dac1f1bc9e0 45
beaglescout007 0:3dac1f1bc9e0 46 /* memset */
beaglescout007 0:3dac1f1bc9e0 47 void *pNesX_MemorySet( void *dest, int c, int count );
beaglescout007 0:3dac1f1bc9e0 48
beaglescout007 0:3dac1f1bc9e0 49 /* Print debug message */
beaglescout007 0:3dac1f1bc9e0 50 void pNesX_DebugPrint( char *pszMsg );
beaglescout007 0:3dac1f1bc9e0 51
beaglescout007 0:3dac1f1bc9e0 52 #endif /* !PNESX_SYSTEM_H_INCLUDED */
beaglescout007 0:3dac1f1bc9e0 53
beaglescout007 0:3dac1f1bc9e0 54