Skip to content

Commit ab59dcf

Browse files
committed
Update R4ADME
1 parent 6e3119f commit ab59dcf

File tree

2 files changed

+181
-44
lines changed

2 files changed

+181
-44
lines changed

.github/README.md

Lines changed: 45 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
</div>
66

77

8-
`UNES` 是一个在 `Unity` 环境中运行 `Nintendo Entertainment System` 任天堂红白机游戏 `*.nes` 文件的模拟器插件,该项目基于 [Emulator.NES](https://github.com/Xyene/Emulator.NES) 实现,通过 `Unity` 实现跨平台。
8+
`UNES` is an emulator plug-in that runs `Nintendo Entertainment System` Nintendo FC Game `*.nes` files in the `Unity` environment. The project is based on [Emulator.NES](https://github.com/Xyene/Emulator.NES) to achieve cross-platform through `Unity`.
99

1010

1111
![license](https://img.shields.io/github/license/ls9512/UNES)
@@ -15,68 +15,69 @@
1515
![last](https://img.shields.io/github/last-commit/ls9512/UNES)
1616
[![996.icu](https://img.shields.io/badge/link-996.icu-red.svg)](https://996.icu)
1717

18+
[[中文文档]](README_CN.md)
1819

1920
<!-- vscode-markdown-toc -->
20-
* 1. [开始](#)
21-
* 2. [加载](#-1)
22-
* 2.1. [Resources 加载](#Resources)
23-
* 2.2. [FileStream 加载](#FileStream)
24-
* 3. [配置](#-1)
21+
* 1. [Start](#Start)
22+
* 2. [Load](#Load)
23+
* 2.1. [Resources loading](#Resourcesloading)
24+
* 2.2. [FileStream loading](#FileStreamloading)
25+
* 3. [Configuration](#Configuration)
2526
* 3.1. [Filter Mode](#FilterMode)
2627
* 3.2. [Logic Thread](#LogicThread)
2728
* 3.3. [Input Config](#InputConfig)
28-
* 4. [输入](#-1)
29+
* 4. [input](#input)
2930
* 5. [API](#API)
3031
* 5.1. [Boot](#Boot)
3132
* 5.2. [Save](#Save)
32-
* 5.3. [Load](#Load)
33+
* 5.3. [Load](#Load-1)
3334
* 6. [Mapper](#Mapper)
34-
* 7. [问题](#-1)
35+
* 7. [ Problem](#Problem)
3536

3637
<!-- vscode-markdown-toc-config
3738
numbering=true
3839
autoSave=true
3940
/vscode-markdown-toc-config -->
4041
<!-- /vscode-markdown-toc -->
4142

42-
## 1. <a name=''></a>开始
43-
* 1.在场景中新建或选择一个 `GameObject` 并添加 `UNESBehaviour` 组件。
44-
* 2.新建一个 `RenderTexture` 用于渲染游戏画面。
45-
* 3.使用任何你想要的方式在游戏中显示 `RenderTexture` 文件。
46-
* 4.使用默认的输入方式或者按需实现自定义输入。
47-
* 5.按需实现 `*.nes` 文件的加载获取 `byte[]` 格式数据。
48-
* 6.调用 `UNESBehaviour.Boot(byte[] romData)` 接口启动游戏。
49-
50-
## 2. <a name='-1'></a>加载
51-
### 2.1. <a name='Resources'></a>Resources 加载
52-
如果需要使用 `Resources.Load()` 接口来加载ROM文件,则需要注意将 `.nes` 扩展名更改为 `.bytes`,然后使用如下方式加载:
43+
## 1. <a name='Start'></a>Start
44+
* 1. Create a new or select a `GameObject` in the scene and add the `UNESBehaviour` component.
45+
* 2. Create a new `RenderTexture` to render the game screen.
46+
* 3. Use any way you want to display the `RenderTexture` file in the game.
47+
* 4. Use the default input method or realize custom input on demand.
48+
* 5. Implement the loading of `*.nes` files on demand to obtain `byte[]` format data.
49+
* 6. Call the `UNESBehaviour.Boot(byte[] romData)` interface to start the game.
50+
51+
## 2. <a name='Load'></a>Load
52+
### 2.1. <a name='Resourcesloading'></a>Resources loading
53+
If you need to use the `Resources.Load()` interface to load the ROM file, you need to pay attention to changing the `.nes` extension to `.bytes`, and then use the following method to load:
5354
``` csharp
5455
var bytes = Resources.Load<TextAsset>(romPath).bytes;
5556
UNES.BootRom(bytes);
5657
```
57-
### 2.2. <a name='FileStream'></a>FileStream 加载
58-
如果使用加载原始文件字节流的方式,直接调用 `UNESBehaviour.Boot(byte[] romData)` 接口即可。
58+
### 2.2. <a name='FileStreamloading'></a>FileStream loading
59+
If you use the method of loading the original file byte stream, you can directly call the `UNESBehaviour.Boot(byte[] romData)` interface.
5960

60-
## 3. <a name='-1'></a>配置
61+
## 3. <a name='Configuration'></a>Configuration
6162
### 3.1. <a name='FilterMode'></a>Filter Mode
62-
游戏画面渲染的过滤模式:
63-
|模式|描述|
63+
Filter mode of game screen rendering:
64+
|Mode|Description|
6465
|-|-|
65-
|Point|纹理像素近距离变得块状。|
66-
|Bilinear|双线性双线性滤波-将纹理样本平均。|
67-
|Trilinear|三线性三线性过滤-对纹理样本进行平均,并在mipmap级别之间进行混合。|
66+
|Point|Texture pixels become blocky at close range. |
67+
|Bilinear|Bilinear bilinear filtering-averages the texture samples. |
68+
|Trilinear|Trilinear Trilinear filtering-averages texture samples and blends between mipmap levels. |
6869

69-
详细解释可参考 [FilterMode](https://docs.unity3d.com/ScriptReference/FilterMode.html)
70+
For detailed explanation, please refer to [FilterMode](https://docs.unity3d.com/ScriptReference/FilterMode.html)
7071

7172
### 3.2. <a name='LogicThread'></a>Logic Thread
72-
如果打开 `Logic Thread` 选项,则 `CPU` `PPU` 部分的模拟计算会由子线程执行,Unity 主线程只负责读取状态数据刷新游戏画面,可显著提高帧数。
73+
If the `Logic Thread` option is turned on, the simulation calculations of the `CPU` and `PPU` parts will be executed by other thread, and the Unity main thread is only responsible for reading the status data to refresh the game screen, which can significantly increase the number of frames.
7374

7475
### 3.3. <a name='InputConfig'></a>Input Config
75-
自定义原生按键所对应的键盘物理按键。
76+
Customize the physical keyboard keys corresponding to the native keys.
7677

77-
## 4. <a name='-1'></a>输入
78-
默认配置操控方式:
79-
|原生按键|操作按键|
78+
## 4. <a name='input'></a>input
79+
Default configuration control method:
80+
|Native buttons|Operation buttons|
8081
|-|-|
8182
|Start|Num1|
8283
|Select|Num2|
@@ -89,25 +90,25 @@ UNES.BootRom(bytes);
8990

9091
## 5. <a name='API'></a>API
9192
### 5.1. <a name='Boot'></a>Boot
92-
以任何方式获取原始ROM文件的字节数组格式以供模拟器启动:
93+
Obtain the byte array format of the original ROM file in any way for the emulator to start:
9394
``` csharp
9495
public void Boot(byte[] romData);
9596
```
9697

9798
### 5.2. <a name='Save'></a>Save
98-
模拟器本身只提供当前运行状态的数据,而不提供数据文件的持久化实现。需要自行实现存档数据的保存。
99+
The simulator itself only provides the data of the current running state, and does not provide the persistence implementation of the data file. Need to realize the preservation of archived data by oneself.
99100
``` csharp
100101
public byte[] GetSaveData();
101102
```
102103

103-
### 5.3. <a name='Load'></a>Load
104-
以任何方式获取存档文件数据以供模拟器恢复游戏进度:
104+
### 5.3. <a name='Load-1'></a>Load
105+
Obtain archive file data in any way for the emulator to restore game progress:
105106
``` csharp
106107
public void LoadSaveData(byte[] saveData);
107108
```
108109

109110
## 6. <a name='Mapper'></a>Mapper
110-
NES 存在众多 Mapper 扩展格式,本项目实现的中已经实现部分,理论上可以支持大部分常见游戏。
111+
There are many Mapper extension formats in NES, and the implemented part of the project implementation can theoretically support most common games.
111112
|||
112113
|-|-|
113114
|0|[NROM](http://bootgod.dyndns.org:7777/search.php?ines=0)|
@@ -128,8 +129,8 @@ NES 存在众多 Mapper 扩展格式,本项目实现的中已经实现部分
128129
|180|[*Crazy Climber*](http://bootgod.dyndns.org:7777/search.php?ines=180)|
129130
|206|[DxROM](http://bootgod.dyndns.org:7777/search.php?ines=206)|
130131

131-
## 7. <a name='-1'></a>问题
132-
* 未实现音频 `APU` 模拟。
133-
* 仅实现 Unity 基础输入系统和纯键盘操作方式。
134-
* 未实现全部 Mapper。
135-
* PPU 模拟部分性能较低,在中低端移动设备上帧数不稳定。
132+
## 7. <a name='Problem'></a> Problem
133+
* Audio `APU` simulation is not implemented.
134+
* Only realize Unity basic input system and pure keyboard operation mode.
135+
* Not all Mappers are implemented.
136+
* The performance of the PPU simulation part is low, and the frame number is unstable on the low-end mobile devices.

.github/README_CN.md

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
# UNES
2+
3+
<div align="center">
4+
<img src="images/UNES_Preview.png"/>
5+
</div>
6+
7+
8+
`UNES` 是一个在 `Unity` 环境中运行 `Nintendo Entertainment System` 任天堂红白机游戏 `*.nes` 文件的模拟器插件,该项目基于 [Emulator.NES](https://github.com/Xyene/Emulator.NES) 实现,通过 `Unity` 实现跨平台。
9+
10+
11+
![license](https://img.shields.io/github/license/ls9512/UNES)
12+
[![Release Version](https://img.shields.io/badge/release-1.0.0-red.svg)](https://github.com/ls9512/UNES/releases)
13+
![topLanguage](https://img.shields.io/github/languages/top/ls9512/UNES)
14+
![size](https://img.shields.io/github/languages/code-size/ls9512/UNES)
15+
![last](https://img.shields.io/github/last-commit/ls9512/UNES)
16+
[![996.icu](https://img.shields.io/badge/link-996.icu-red.svg)](https://996.icu)
17+
18+
[[English Documents Available]](README.md)
19+
20+
<!-- vscode-markdown-toc -->
21+
* 1. [开始](#)
22+
* 2. [加载](#-1)
23+
* 2.1. [Resources 加载](#Resources)
24+
* 2.2. [FileStream 加载](#FileStream)
25+
* 3. [配置](#-1)
26+
* 3.1. [Filter Mode](#FilterMode)
27+
* 3.2. [Logic Thread](#LogicThread)
28+
* 3.3. [Input Config](#InputConfig)
29+
* 4. [输入](#-1)
30+
* 5. [API](#API)
31+
* 5.1. [Boot](#Boot)
32+
* 5.2. [Save](#Save)
33+
* 5.3. [Load](#Load)
34+
* 6. [Mapper](#Mapper)
35+
* 7. [问题](#-1)
36+
37+
<!-- vscode-markdown-toc-config
38+
numbering=true
39+
autoSave=true
40+
/vscode-markdown-toc-config -->
41+
<!-- /vscode-markdown-toc -->
42+
43+
## 1. <a name=''></a>开始
44+
* 1.在场景中新建或选择一个 `GameObject` 并添加 `UNESBehaviour` 组件。
45+
* 2.新建一个 `RenderTexture` 用于渲染游戏画面。
46+
* 3.使用任何你想要的方式在游戏中显示 `RenderTexture` 文件。
47+
* 4.使用默认的输入方式或者按需实现自定义输入。
48+
* 5.按需实现 `*.nes` 文件的加载获取 `byte[]` 格式数据。
49+
* 6.调用 `UNESBehaviour.Boot(byte[] romData)` 接口启动游戏。
50+
51+
## 2. <a name='-1'></a>加载
52+
### 2.1. <a name='Resources'></a>Resources 加载
53+
如果需要使用 `Resources.Load()` 接口来加载ROM文件,则需要注意将 `.nes` 扩展名更改为 `.bytes`,然后使用如下方式加载:
54+
``` csharp
55+
var bytes = Resources.Load<TextAsset>(romPath).bytes;
56+
UNES.BootRom(bytes);
57+
```
58+
### 2.2. <a name='FileStream'></a>FileStream 加载
59+
如果使用加载原始文件字节流的方式,直接调用 `UNESBehaviour.Boot(byte[] romData)` 接口即可。
60+
61+
## 3. <a name='-1'></a>配置
62+
### 3.1. <a name='FilterMode'></a>Filter Mode
63+
游戏画面渲染的过滤模式:
64+
|模式|描述|
65+
|-|-|
66+
|Point|纹理像素近距离变得块状。|
67+
|Bilinear|双线性双线性滤波-将纹理样本平均。|
68+
|Trilinear|三线性三线性过滤-对纹理样本进行平均,并在mipmap级别之间进行混合。|
69+
70+
详细解释可参考 [FilterMode](https://docs.unity3d.com/ScriptReference/FilterMode.html)
71+
72+
### 3.2. <a name='LogicThread'></a>Logic Thread
73+
如果打开 `Logic Thread` 选项,则 `CPU``PPU` 部分的模拟计算会由子线程执行,Unity 主线程只负责读取状态数据刷新游戏画面,可显著提高帧数。
74+
75+
### 3.3. <a name='InputConfig'></a>Input Config
76+
自定义原生按键所对应的键盘物理按键。
77+
78+
## 4. <a name='-1'></a>输入
79+
默认配置操控方式:
80+
|原生按键|操作按键|
81+
|-|-|
82+
|Start|Num1|
83+
|Select|Num2|
84+
|Up|Up Arrow|
85+
|Down|Down Arrow|
86+
|Left|Left Arrow|
87+
|Right|Right Arrow|
88+
|A|A|
89+
|B|S|
90+
91+
## 5. <a name='API'></a>API
92+
### 5.1. <a name='Boot'></a>Boot
93+
以任何方式获取原始ROM文件的字节数组格式以供模拟器启动:
94+
``` csharp
95+
public void Boot(byte[] romData);
96+
```
97+
98+
### 5.2. <a name='Save'></a>Save
99+
模拟器本身只提供当前运行状态的数据,而不提供数据文件的持久化实现。需要自行实现存档数据的保存。
100+
``` csharp
101+
public byte[] GetSaveData();
102+
```
103+
104+
### 5.3. <a name='Load'></a>Load
105+
以任何方式获取存档文件数据以供模拟器恢复游戏进度:
106+
``` csharp
107+
public void LoadSaveData(byte[] saveData);
108+
```
109+
110+
## 6. <a name='Mapper'></a>Mapper
111+
NES 存在众多 Mapper 扩展格式,本项目实现的中已经实现部分,理论上可以支持大部分常见游戏。
112+
|||
113+
|-|-|
114+
|0|[NROM](http://bootgod.dyndns.org:7777/search.php?ines=0)|
115+
|1|[MMC1](http://bootgod.dyndns.org:7777/search.php?ines=1)|
116+
|2|[UxROM](http://bootgod.dyndns.org:7777/search.php?ines=2)
117+
|3|[CNROM](http://bootgod.dyndns.org:7777/search.php?ines=3)|
118+
|4|[MMC3](http://bootgod.dyndns.org:7777/search.php?ines=4)|
119+
|7| [AxROM](http://bootgod.dyndns.org:7777/search.php?ines=7)|
120+
|9|[MMC2](http://bootgod.dyndns.org:7777/search.php?ines=9) (*Mike Tyson's Punch-Out!!*)|
121+
|10|[MMC4](http://bootgod.dyndns.org:7777/search.php?ines=10)|
122+
|11|[Color Dreams](http://bootgod.dyndns.org:7777/search.php?ines=11)|
123+
|66|[GxROM](http://bootgod.dyndns.org:7777/search.php?ines=66)|
124+
|71|[Camerica](http://bootgod.dyndns.org:7777/search.php?ines=71)|
125+
|79|[NINA-003-006](http://bootgod.dyndns.org:7777/search.php?ines=79)|
126+
|94|[*Senjou no Ookami*](http://bootgod.dyndns.org:7777/search.php?ines=94)|
127+
|140|[Jaleco](http://bootgod.dyndns.org:7777/search.php?ines=140)|
128+
|155|[MMC1A](http://bootgod.dyndns.org:7777/search.php?ines=155)|
129+
|180|[*Crazy Climber*](http://bootgod.dyndns.org:7777/search.php?ines=180)|
130+
|206|[DxROM](http://bootgod.dyndns.org:7777/search.php?ines=206)|
131+
132+
## 7. <a name='-1'></a>问题
133+
* 未实现音频 `APU` 模拟。
134+
* 仅实现 Unity 基础输入系统和纯键盘操作方式。
135+
* 未实现全部 Mapper。
136+
* PPU 模拟部分性能较低,在中低端移动设备上帧数不稳定。

0 commit comments

Comments
 (0)