nes-wasm 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/nes_wasm.d.ts +32 -3
- package/nes_wasm.js +54 -3
- package/nes_wasm_bg.wasm +0 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -65,6 +65,7 @@ loop();
|
|
|
65
65
|
| `run_frame()` | 运行一帧,返回帧号 |
|
|
66
66
|
| `frame_rgba()` | RGBA 帧缓冲(256×240×4),可直接写 `ImageData` |
|
|
67
67
|
| `frame_pixels()` | 8 位调色板索引帧;`palette_rgb()` 为 64 色系统调色板 |
|
|
68
|
+
| `set_palette(bytes)` / `clear_palette()` | 加载/重置 `.pal` 调色板(FCEUX/Nestopia 格式,192=64 色或 1536=512 色);`palette_rgb_full()` 返回当前 512×3 字节 |
|
|
68
69
|
| `audio_samples()` / `clear_audio_samples()` / `audio_sample_rate()` / `set_audio_sample_rate(rate)` | 音频 |
|
|
69
70
|
| `set_controller_bits(port, bits)` / `set_button(port, name, pressed)` | 手柄输入 |
|
|
70
71
|
| `save_state()` / `load_state(bytes)` | 快照存读档 |
|
package/nes_wasm.d.ts
CHANGED
|
@@ -20,10 +20,18 @@ export class NesWasm {
|
|
|
20
20
|
* 清空累积的音频采样(每轮播放后调用)。
|
|
21
21
|
*/
|
|
22
22
|
clear_audio_samples(): void;
|
|
23
|
+
/**
|
|
24
|
+
* 恢复默认调色板。
|
|
25
|
+
*/
|
|
26
|
+
clear_palette(): void;
|
|
23
27
|
/**
|
|
24
28
|
* 当前手柄位掩码。
|
|
25
29
|
*/
|
|
26
30
|
controller_bits(port: number): number;
|
|
31
|
+
/**
|
|
32
|
+
* 当前帧的颜色强调掩码(bit0=R, bit1=G, bit2=B)。
|
|
33
|
+
*/
|
|
34
|
+
emphasis_bits(): number;
|
|
27
35
|
/**
|
|
28
36
|
* FDS 磁盘是否被写入过(写回 .sav 用);非 FDS 返回 false。
|
|
29
37
|
*/
|
|
@@ -46,6 +54,7 @@ export class NesWasm {
|
|
|
46
54
|
frame_pixels(): Uint8Array;
|
|
47
55
|
/**
|
|
48
56
|
* RGBA 帧缓冲(256×240×4),可直接写入 `ImageData`。
|
|
57
|
+
* 已应用当前帧的颜色强调($2001 bit5-7)与当前调色板。
|
|
49
58
|
*/
|
|
50
59
|
frame_rgba(): Uint8Array;
|
|
51
60
|
/**
|
|
@@ -70,9 +79,19 @@ export class NesWasm {
|
|
|
70
79
|
master_clock(): bigint;
|
|
71
80
|
constructor();
|
|
72
81
|
/**
|
|
73
|
-
* 系统调色板,64 色 × 3 字节 RGB。
|
|
82
|
+
* 系统调色板,64 色 × 3 字节 RGB(当前调色板的基色块,不含强调)。
|
|
83
|
+
*/
|
|
84
|
+
palette_rgb(): Uint8Array;
|
|
85
|
+
/**
|
|
86
|
+
* 当前调色板完整 512 色 × 3 字节 RGB
|
|
87
|
+
* (8 个强调块,布局 `(emphasis<<6|color)*3`,供 JS 构建 LUT)。
|
|
88
|
+
*/
|
|
89
|
+
palette_rgb_full(): Uint8Array;
|
|
90
|
+
/**
|
|
91
|
+
* 应用颜色强调后的系统调色板,64 色 × 3 字节 RGB
|
|
92
|
+
* (emphasis 为 `emphasis_bits` 返回的掩码,取自当前调色板)。
|
|
74
93
|
*/
|
|
75
|
-
|
|
94
|
+
palette_rgb_tinted(emphasis: number): Uint8Array;
|
|
76
95
|
/**
|
|
77
96
|
* 模拟断电重启(CPU RAM 清零后复位)。
|
|
78
97
|
*/
|
|
@@ -106,6 +125,11 @@ export class NesWasm {
|
|
|
106
125
|
* 设置手柄位掩码:A=1 B=2 Select=4 Start=8 Up=16 Down=32 Left=64 Right=128。
|
|
107
126
|
*/
|
|
108
127
|
set_controller_bits(port: number, bits: number): void;
|
|
128
|
+
/**
|
|
129
|
+
* 加载 .pal 调色板文件内容(FCEUX/Nestopia 通用格式):
|
|
130
|
+
* 192 字节 = 64 色基色(强调块自动合成);1536 字节 = 512 色(自带强调块)。
|
|
131
|
+
*/
|
|
132
|
+
set_palette(bytes: Uint8Array): void;
|
|
109
133
|
}
|
|
110
134
|
|
|
111
135
|
export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module;
|
|
@@ -117,7 +141,9 @@ export interface InitOutput {
|
|
|
117
141
|
readonly neswasm_audio_samples: (a: number) => [number, number];
|
|
118
142
|
readonly neswasm_battery_ram: (a: number) => [number, number];
|
|
119
143
|
readonly neswasm_clear_audio_samples: (a: number) => void;
|
|
144
|
+
readonly neswasm_clear_palette: (a: number) => void;
|
|
120
145
|
readonly neswasm_controller_bits: (a: number, b: number) => number;
|
|
146
|
+
readonly neswasm_emphasis_bits: (a: number) => number;
|
|
121
147
|
readonly neswasm_fds_dirty: (a: number) => number;
|
|
122
148
|
readonly neswasm_fds_side_lengths: (a: number) => [number, number];
|
|
123
149
|
readonly neswasm_fds_sides_flattened: (a: number) => [number, number];
|
|
@@ -130,7 +156,9 @@ export interface InitOutput {
|
|
|
130
156
|
readonly neswasm_load_state: (a: number, b: number, c: number) => [number, number];
|
|
131
157
|
readonly neswasm_master_clock: (a: number) => bigint;
|
|
132
158
|
readonly neswasm_new: () => number;
|
|
133
|
-
readonly neswasm_palette_rgb: () => [number, number];
|
|
159
|
+
readonly neswasm_palette_rgb: (a: number) => [number, number];
|
|
160
|
+
readonly neswasm_palette_rgb_full: (a: number) => [number, number];
|
|
161
|
+
readonly neswasm_palette_rgb_tinted: (a: number, b: number) => [number, number];
|
|
134
162
|
readonly neswasm_power_cycle: (a: number) => void;
|
|
135
163
|
readonly neswasm_reset: (a: number) => void;
|
|
136
164
|
readonly neswasm_rom_md5_hex: (a: number) => [number, number];
|
|
@@ -139,6 +167,7 @@ export interface InitOutput {
|
|
|
139
167
|
readonly neswasm_set_audio_sample_rate: (a: number, b: number) => void;
|
|
140
168
|
readonly neswasm_set_button: (a: number, b: number, c: number, d: number, e: number) => void;
|
|
141
169
|
readonly neswasm_set_controller_bits: (a: number, b: number, c: number) => void;
|
|
170
|
+
readonly neswasm_set_palette: (a: number, b: number, c: number) => [number, number];
|
|
142
171
|
readonly __wbindgen_externrefs: WebAssembly.Table;
|
|
143
172
|
readonly __wbindgen_free: (a: number, b: number, c: number) => void;
|
|
144
173
|
readonly __wbindgen_malloc: (a: number, b: number) => number;
|
package/nes_wasm.js
CHANGED
|
@@ -48,6 +48,12 @@ export class NesWasm {
|
|
|
48
48
|
clear_audio_samples() {
|
|
49
49
|
wasm.neswasm_clear_audio_samples(this.__wbg_ptr);
|
|
50
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* 恢复默认调色板。
|
|
53
|
+
*/
|
|
54
|
+
clear_palette() {
|
|
55
|
+
wasm.neswasm_clear_palette(this.__wbg_ptr);
|
|
56
|
+
}
|
|
51
57
|
/**
|
|
52
58
|
* 当前手柄位掩码。
|
|
53
59
|
* @param {number} port
|
|
@@ -57,6 +63,14 @@ export class NesWasm {
|
|
|
57
63
|
const ret = wasm.neswasm_controller_bits(this.__wbg_ptr, port);
|
|
58
64
|
return ret;
|
|
59
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* 当前帧的颜色强调掩码(bit0=R, bit1=G, bit2=B)。
|
|
68
|
+
* @returns {number}
|
|
69
|
+
*/
|
|
70
|
+
emphasis_bits() {
|
|
71
|
+
const ret = wasm.neswasm_emphasis_bits(this.__wbg_ptr);
|
|
72
|
+
return ret;
|
|
73
|
+
}
|
|
60
74
|
/**
|
|
61
75
|
* FDS 磁盘是否被写入过(写回 .sav 用);非 FDS 返回 false。
|
|
62
76
|
* @returns {boolean}
|
|
@@ -108,6 +122,7 @@ export class NesWasm {
|
|
|
108
122
|
}
|
|
109
123
|
/**
|
|
110
124
|
* RGBA 帧缓冲(256×240×4),可直接写入 `ImageData`。
|
|
125
|
+
* 已应用当前帧的颜色强调($2001 bit5-7)与当前调色板。
|
|
111
126
|
* @returns {Uint8Array}
|
|
112
127
|
*/
|
|
113
128
|
frame_rgba() {
|
|
@@ -179,11 +194,34 @@ export class NesWasm {
|
|
|
179
194
|
return this;
|
|
180
195
|
}
|
|
181
196
|
/**
|
|
182
|
-
* 系统调色板,64 色 × 3 字节 RGB。
|
|
197
|
+
* 系统调色板,64 色 × 3 字节 RGB(当前调色板的基色块,不含强调)。
|
|
183
198
|
* @returns {Uint8Array}
|
|
184
199
|
*/
|
|
185
|
-
|
|
186
|
-
const ret = wasm.neswasm_palette_rgb();
|
|
200
|
+
palette_rgb() {
|
|
201
|
+
const ret = wasm.neswasm_palette_rgb(this.__wbg_ptr);
|
|
202
|
+
var v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice();
|
|
203
|
+
wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);
|
|
204
|
+
return v1;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* 当前调色板完整 512 色 × 3 字节 RGB
|
|
208
|
+
* (8 个强调块,布局 `(emphasis<<6|color)*3`,供 JS 构建 LUT)。
|
|
209
|
+
* @returns {Uint8Array}
|
|
210
|
+
*/
|
|
211
|
+
palette_rgb_full() {
|
|
212
|
+
const ret = wasm.neswasm_palette_rgb_full(this.__wbg_ptr);
|
|
213
|
+
var v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice();
|
|
214
|
+
wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);
|
|
215
|
+
return v1;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* 应用颜色强调后的系统调色板,64 色 × 3 字节 RGB
|
|
219
|
+
* (emphasis 为 `emphasis_bits` 返回的掩码,取自当前调色板)。
|
|
220
|
+
* @param {number} emphasis
|
|
221
|
+
* @returns {Uint8Array}
|
|
222
|
+
*/
|
|
223
|
+
palette_rgb_tinted(emphasis) {
|
|
224
|
+
const ret = wasm.neswasm_palette_rgb_tinted(this.__wbg_ptr, emphasis);
|
|
187
225
|
var v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice();
|
|
188
226
|
wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);
|
|
189
227
|
return v1;
|
|
@@ -261,6 +299,19 @@ export class NesWasm {
|
|
|
261
299
|
set_controller_bits(port, bits) {
|
|
262
300
|
wasm.neswasm_set_controller_bits(this.__wbg_ptr, port, bits);
|
|
263
301
|
}
|
|
302
|
+
/**
|
|
303
|
+
* 加载 .pal 调色板文件内容(FCEUX/Nestopia 通用格式):
|
|
304
|
+
* 192 字节 = 64 色基色(强调块自动合成);1536 字节 = 512 色(自带强调块)。
|
|
305
|
+
* @param {Uint8Array} bytes
|
|
306
|
+
*/
|
|
307
|
+
set_palette(bytes) {
|
|
308
|
+
const ptr0 = passArray8ToWasm0(bytes, wasm.__wbindgen_malloc);
|
|
309
|
+
const len0 = WASM_VECTOR_LEN;
|
|
310
|
+
const ret = wasm.neswasm_set_palette(this.__wbg_ptr, ptr0, len0);
|
|
311
|
+
if (ret[1]) {
|
|
312
|
+
throw takeFromExternrefTable0(ret[0]);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
264
315
|
}
|
|
265
316
|
if (Symbol.dispose) NesWasm.prototype[Symbol.dispose] = NesWasm.prototype.free;
|
|
266
317
|
function __wbg_get_imports() {
|
package/nes_wasm_bg.wasm
CHANGED
|
Binary file
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "nes-wasm",
|
|
3
3
|
"type": "module",
|
|
4
4
|
"description": "WebAssembly bindings for the nes-sim NES emulator core.",
|
|
5
|
-
"version": "0.
|
|
5
|
+
"version": "0.4.0",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": {
|
|
8
8
|
"type": "git",
|
|
@@ -19,4 +19,4 @@
|
|
|
19
19
|
"sideEffects": [
|
|
20
20
|
"./snippets/*"
|
|
21
21
|
]
|
|
22
|
-
}
|
|
22
|
+
}
|