NES game emulator

The classic FC red and white game simulator, take us back to our childhood~~

Warning, this module is only compiled and included in the standard firmware (> 2m), and not included in other firmware. If necessary, please recompile the firmware.

Function

init(rc_type=nes.KEYBOARD, cs, mosi, miso, clk, repeat=16, vol=5)

Initialize the NES emulator

Parameters

  • tc_type: remote control type, keyboard (nes.KEYBOARD) (note that the serial port communicates with the computer, not directly connecting the USB keyboard to the development board) or handle (nes.JOYSTICK).

It is recommended to use the PS2 handle, the experience will be better, the keyboard may not be able to press multiple keys at the same time when inputting through the serial tool, of course, you can also write a script on the PC to forward the key value to solve the problem (go [here] (https ://github.com/sipeed/MaixPy-v1_scripts/tree/master/multimedia/nes) Looking for it?)

  • cs: If you use the PS2 handle of the SPI interface, pass in the cs peripheral number (note that it is not a pin number, you need to map the pin first)
  • mosi: If you use the PS2 handle of the SPI interface, pass in the mosi peripheral number (note that it is not a pin number, you need to map the pin first)
  • miso: If you use the PS2 handle of the SPI interface, pass in the miso peripheral number (note that it is not a pin number, you need to map the pin first)
  • clk: If you use the PS2 handle of the SPI interface, pass in the clk peripheral number (note that it is not a pin number, you need to map the pin first)
  • repeat: This parameter is only used when using the keyboard (/serial port), it refers to the repeat rate of the keys
  • vol: The volume during initialization, which can be adjusted by pressing the buttons later

Basic example

Run NES game ROM

Parameters

  • nes: the path of the game ROM, such as /sd/mario.nes
try:
  nes.init(nes.INPUT)
  nes.load("/sd/mario.nes")
  while True:
    nes.loop()
finally:
  nes.free()

hot key

Code input

  • nes.input: (①No. handset handle, ②No. handset handle, menu function)

Keyboard (/serial port)

  • Move: W A S D
  • A: J
  • B: K
  • start: M or Enter
  • option: N or \
  • Exit: ESC
  • Volume -: -
  • Volume +: =
  • Running Speed ​​-: R
  • Run speed +: F

Handle

  • Move: Arrow keys <- ^ V ->
  • A:
  • B: ×
  • start: START
  • select: SELECT
  • Exit: None
  • Volume -: R2
  • Volume +: R1
  • Run speed -: L1
  • Run speed +: L2

Routine

"mario.nes" game file please search and download by yourself

Example 0: Code input

January 28, 2021: It is now recommended to use Maix handle (I2C device) to play. The following code comment nes.input(p1, p2, 0) means to input the data of two handles.

import nes, lcd
lcd.init(freq=15000000)
try:
  nes.init(nes.INPUT)
  nes.load("mario.nes")
  while True:
    # p1 = i2c.readfrom(66, 1) # handle i2c addr
    # p2 = i2c.readfrom(74, 1) # handle i2c addr
    # nes.input(p1, p2, 0)
    nes.loop()
finally:
  nes.free()

Example 1: Keyboard (serial port)

import nes, lcd

lcd.init(freq=15000000)
nes.init(nes.KEYBOARD)
nes.load("/sd/mario.nes")

while True:
    nes.loop()

Example 2: PS2 handle

import nes, lcd
from fpioa_manager import fm

fm.register(19, fm.fpioa.GPIOHS19)
fm.register(18, fm.fpioa.GPIOHS18)
fm.register(23, fm.fpioa.GPIOHS23)
fm.register(21, fm.fpioa.GPIOHS21)

lcd.init(freq=15000000)
nes.init(nes.JOYSTICK, cs=fm.fpioa.GPIOHS19, clk=fm.fpioa.GPIOHS18, mosi=fm.fpioa.GPIOHS23, miso=fm.fpioa.GPIOHS21)
nes.load("/sd/mario.nes")

while True:
    nes.loop()