【新手基础教程】NES游戏模拟器
本帖最后由 猪百岁 于 2021-4-22 19:43 编辑# NES 游戏模拟器
经典的 FC 红白机 游戏模拟器, 带我们回到小时候吧~~
**警告,该模块只在标准固件(> 2m)中被编译包含,其他固件不带有,如有需求,请重新编译固件。**
## 1. 函数[](https://cn.maixpy.sipeed.com/zh/api_reference/media/nes.html#%E5%87%BD%E6%95%B0)
### 1.1. init(rc_type=nes.KEYBOARD, cs, mosi, miso, clk, repeat=16, vol=5)[](https://cn.maixpy.sipeed.com/zh/api_reference/media/nes.html#initrctypeneskeyboard-cs-mosi-miso-clk-repeat16-vol5)
初始化`NES`模拟器
#### 参数[](https://cn.maixpy.sipeed.com/zh/api_reference/media/nes.html#%E5%8F%82%E6%95%B0)
- `tc_type`: 遥控器类型, 键盘(`nes.KEYBOARD`)(注意是串口与电脑通信,而不是直接接USB键盘到开发板)或者手柄(`nes.JOYSTICK`)。
> 建议使用`PS2`手柄,体验会更好, 键盘通过串口工具输入可能不能同时按多个按键,当然也可以通过自己在PC写一个脚本来转发键值就能解决(去[这里](https://github.com/sipeed/MaixPy_scripts/tree/master/multimedia/nes)找找?)
- `cs`: 如果使用`SPI`接口的`PS2`手柄, 传入`cs`外设编号(注意不是引脚号,需要先映射引脚)
- `mosi`: 如果使用`SPI`接口的`PS2`手柄, 传入`mosi`外设编号(注意不是引脚号,需要先映射引脚)
- `miso`: 如果使用`SPI`接口的`PS2`手柄, 传入`miso`外设编号(注意不是引脚号,需要先映射引脚)
- `clk`: 如果使用`SPI`接口的`PS2`手柄, 传入`clk`外设编号(注意不是引脚号,需要先映射引脚)
- `repeat`: 这个参数只对使用键盘(/串口)时, 指按键的重复率
- `vol`: 初始化时的音量, 后面可以通过按键调整
### 1.2. 基础示例[](https://cn.maixpy.sipeed.com/zh/api_reference/media/nes.html#%E5%9F%BA%E7%A1%80%E7%A4%BA%E4%BE%8B)
运行`NES`游戏`ROM`
#### 参数[](https://cn.maixpy.sipeed.com/zh/api_reference/media/nes.html#%E5%8F%82%E6%95%B0_1)
- `nes`: 游戏`ROM`路径, 比如`/sd/mario.nes`
```
try:
nes.init(nes.INPUT)
nes.load("/sd/mario.nes")
while True:
nes.loop()
finally:
nes.free()
```
## 2. 快捷键[](https://cn.maixpy.sipeed.com/zh/api_reference/media/nes.html#%E5%BF%AB%E6%8D%B7%E9%94%AE)
### 2.1. 代码输入[](https://cn.maixpy.sipeed.com/zh/api_reference/media/nes.html#%E4%BB%A3%E7%A0%81%E8%BE%93%E5%85%A5)
- `nes.input`:`(①号机手柄, ②号机手柄, 菜单功能)`
### 2.2. 键盘(/串口)[](https://cn.maixpy.sipeed.com/zh/api_reference/media/nes.html#%E9%94%AE%E7%9B%98%EF%BC%88%E4%B8%B2%E5%8F%A3%EF%BC%89)
- `移动`:`W A S D`
- `A`:`J`
- `B`:`K`
- `start`:`M`或者`Enter`
- `option`:`N`或者`\`
- `退出`:`ESC`
- `音量 -`:`-`
- `音量 +`:`=`
- `运行速度 -`:`R`
- `运行速度 +`:`F`
### 2.3. 手柄[](https://cn.maixpy.sipeed.com/zh/api_reference/media/nes.html#%E6%89%8B%E6%9F%84)
- `移动`: 方向键`<-``^``V``->`
- `A`:`□`
- `B`:`×`
- `start`:`START`
- `select`:`SELECT`
- `退出`: 暂无
- `音量 -`:`R2`
- `音量 +`:`R1`
- `运行速度 -`:`L1`
- `运行速度 +`:`L2`
## 3. 例程[](https://cn.maixpy.sipeed.com/zh/api_reference/media/nes.html#%E4%BE%8B%E7%A8%8B)
> "mario.nes" 游戏文件请自行搜索下载
## 4. 例 0: 代码输入[](https://cn.maixpy.sipeed.com/zh/api_reference/media/nes.html#%E4%BE%8B-0%EF%BC%9A-%E4%BB%A3%E7%A0%81%E8%BE%93%E5%85%A5)
> 2021年01月28日:现在建议使用 Maix handle (I2C 设备)进行游玩,如下代码注释`nes.input(p1, p2, 0)`表示输入两个手柄的数据。
```
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()
```
## 5. 例 1: 键盘(串口)[](https://cn.maixpy.sipeed.com/zh/api_reference/media/nes.html#%E4%BE%8B-1%EF%BC%9A-%E9%94%AE%E7%9B%98%EF%BC%88%E4%B8%B2%E5%8F%A3%EF%BC%89)
```
import nes, lcd
lcd.init(freq=15000000)
nes.init(nes.KEYBOARD)
nes.load("/sd/mario.nes")
while True:
nes.loop()
```
## 6. 例 2: PS2 手柄[](https://cn.maixpy.sipeed.com/zh/api_reference/media/nes.html#%E4%BE%8B-2%EF%BC%9A-ps2-%E6%89%8B%E6%9F%84)
```
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()
```
页:
[1]