@neovand/zilion 0.1.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"z80-core.wgsl.js","sourceRoot":"","sources":["../src/z80-core.wgsl.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,+DAA+D;AAC/D,EAAE;AACF,+EAA+E;AAC/E,kEAAkE;AAElE,MAAM,CAAC,MAAM,aAAa,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+wBvC,CAAC"}
@@ -0,0 +1,67 @@
1
+ /** Register state of one Z80 (16-bit register pairs). */
2
+ export interface Z80Registers {
3
+ af: number;
4
+ bc: number;
5
+ de: number;
6
+ hl: number;
7
+ ix: number;
8
+ iy: number;
9
+ sp: number;
10
+ pc: number;
11
+ afPrime: number;
12
+ bcPrime: number;
13
+ dePrime: number;
14
+ hlPrime: number;
15
+ }
16
+ /** Per-program starting register state. All fields optional; unset = 0, except sp defaults to 0xFFFF. */
17
+ export type Z80RegisterInit = Partial<Z80Registers>;
18
+ export interface RunOptions {
19
+ /** Z80 instructions to execute per program (stops early on HALT). */
20
+ steps: number;
21
+ /** Optional per-program initial registers (index-aligned with `programs`). */
22
+ init?: Z80RegisterInit[];
23
+ }
24
+ export interface RunResult {
25
+ /** Number of programs run. */
26
+ count: number;
27
+ /** Bytes of memory per program. */
28
+ memBytes: number;
29
+ /** Final memory: flat Uint8Array of length count*memBytes. Use `memoryOf(i)`. */
30
+ memory: Uint8Array;
31
+ /** Final registers, one entry per program. */
32
+ registers: Z80Registers[];
33
+ /** Final memory of program `i` as a fresh Uint8Array view slice. */
34
+ memoryOf(i: number): Uint8Array;
35
+ }
36
+ export interface ZilionOptions {
37
+ /**
38
+ * Bytes of memory per program. Must be a power of two (the 16-bit Z80 address
39
+ * space wraps onto it). Default 256. Larger sizes reduce GPU occupancy.
40
+ */
41
+ memBytes?: number;
42
+ /** Provide your own GPUDevice. If omitted, Zilion requests one. */
43
+ device?: GPUDevice;
44
+ }
45
+ /**
46
+ * A batch Z80 executor. Runs many independent Z80 CPUs in parallel on the GPU.
47
+ * Create once, call `run` as many times as you like, then `destroy`.
48
+ */
49
+ export declare class Zilion {
50
+ readonly memBytes: number;
51
+ readonly device: GPUDevice;
52
+ private pipeline;
53
+ private ownsDevice;
54
+ private destroyed;
55
+ private constructor();
56
+ /** Create a Zilion batch executor. */
57
+ static create(opts?: ZilionOptions): Promise<Zilion>;
58
+ /**
59
+ * Run a batch of programs. Each program is a byte array copied into that
60
+ * instance's memory (zero-padded / truncated to `memBytes`). Returns the
61
+ * final memory and registers of every program.
62
+ */
63
+ run(programs: ArrayLike<number>[] | Uint8Array[], opts: RunOptions): Promise<RunResult>;
64
+ /** Release GPU resources (and the device, if Zilion created it). */
65
+ destroy(): void;
66
+ }
67
+ //# sourceMappingURL=zilion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zilion.d.ts","sourceRoot":"","sources":["../src/zilion.ts"],"names":[],"mappings":"AAEA,yDAAyD;AACzD,MAAM,WAAW,YAAY;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,yGAAyG;AACzG,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;AAEpD,MAAM,WAAW,UAAU;IAC1B,qEAAqE;IACrE,KAAK,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,IAAI,CAAC,EAAE,eAAe,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,SAAS;IACzB,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,iFAAiF;IACjF,MAAM,EAAE,UAAU,CAAC;IACnB,8CAA8C;IAC9C,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,oEAAoE;IACpE,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;CAChC;AAED,MAAM,WAAW,aAAa;IAC7B;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,MAAM,CAAC,EAAE,SAAS,CAAC;CACnB;AAID;;;GAGG;AACH,qBAAa,MAAM;IAClB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,SAAS,CAAS;IAE1B,OAAO;IAeP,sCAAsC;WACzB,MAAM,CAAC,IAAI,GAAE,aAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;IAkB9D;;;;OAIG;IACG,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,GAAG,UAAU,EAAE,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;IAqI7F,oEAAoE;IACpE,OAAO,IAAI,IAAI;CAKf"}
package/dist/zilion.js ADDED
@@ -0,0 +1,184 @@
1
+ import { buildComputeShader, REG_FIELDS, REGS_PER_PROGRAM } from './shader.js';
2
+ const WORKGROUP_SIZE = 64;
3
+ /**
4
+ * A batch Z80 executor. Runs many independent Z80 CPUs in parallel on the GPU.
5
+ * Create once, call `run` as many times as you like, then `destroy`.
6
+ */
7
+ export class Zilion {
8
+ memBytes;
9
+ device;
10
+ pipeline;
11
+ ownsDevice;
12
+ destroyed = false;
13
+ constructor(device, memBytes, ownsDevice) {
14
+ this.device = device;
15
+ this.memBytes = memBytes;
16
+ this.ownsDevice = ownsDevice;
17
+ const module = device.createShaderModule({
18
+ label: 'zilion-z80',
19
+ code: buildComputeShader(memBytes)
20
+ });
21
+ this.pipeline = device.createComputePipeline({
22
+ label: 'zilion-z80',
23
+ layout: 'auto',
24
+ compute: { module, entryPoint: 'main' }
25
+ });
26
+ }
27
+ /** Create a Zilion batch executor. */
28
+ static async create(opts = {}) {
29
+ const memBytes = opts.memBytes ?? 256;
30
+ if (memBytes < 4 || (memBytes & (memBytes - 1)) !== 0) {
31
+ throw new Error(`memBytes must be a power of two >= 4 (got ${memBytes})`);
32
+ }
33
+ let device = opts.device;
34
+ let owns = false;
35
+ if (!device) {
36
+ const gpu = globalThis.navigator?.gpu;
37
+ if (!gpu)
38
+ throw new Error('WebGPU is not available in this environment');
39
+ const adapter = await gpu.requestAdapter();
40
+ if (!adapter)
41
+ throw new Error('No WebGPU adapter available');
42
+ device = await adapter.requestDevice();
43
+ owns = true;
44
+ }
45
+ return new Zilion(device, memBytes, owns);
46
+ }
47
+ /**
48
+ * Run a batch of programs. Each program is a byte array copied into that
49
+ * instance's memory (zero-padded / truncated to `memBytes`). Returns the
50
+ * final memory and registers of every program.
51
+ */
52
+ async run(programs, opts) {
53
+ if (this.destroyed)
54
+ throw new Error('Zilion instance has been destroyed');
55
+ const count = programs.length;
56
+ if (count === 0) {
57
+ return { count: 0, memBytes: this.memBytes, memory: new Uint8Array(0), registers: [], memoryOf: () => new Uint8Array(0) };
58
+ }
59
+ const device = this.device;
60
+ const memBytes = this.memBytes;
61
+ const words = memBytes >> 2;
62
+ // Pack memory (flat u32 per program).
63
+ const memData = new Uint32Array(count * words);
64
+ const memBytesView = new Uint8Array(memData.buffer);
65
+ for (let p = 0; p < count; p++) {
66
+ const prog = programs[p];
67
+ const off = p * memBytes;
68
+ const len = Math.min(prog.length, memBytes);
69
+ for (let i = 0; i < len; i++)
70
+ memBytesView[off + i] = prog[i] & 0xff;
71
+ }
72
+ // Pack initial registers (defaults: 0, sp=0xFFFF).
73
+ const regData = new Uint32Array(count * REGS_PER_PROGRAM);
74
+ for (let p = 0; p < count; p++) {
75
+ const base = p * REGS_PER_PROGRAM;
76
+ regData[base + 6] = 0xffff; // sp default
77
+ const init = opts.init?.[p];
78
+ if (init) {
79
+ for (let f = 0; f < REG_FIELDS.length; f++) {
80
+ const v = init[REG_FIELDS[f]];
81
+ if (v !== undefined)
82
+ regData[base + f] = v & 0xffff;
83
+ }
84
+ }
85
+ }
86
+ const params = new Uint32Array([count, memBytes, opts.steps, 0]);
87
+ // Buffers.
88
+ const memBuf = device.createBuffer({
89
+ size: memData.byteLength,
90
+ usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST
91
+ });
92
+ device.queue.writeBuffer(memBuf, 0, memData);
93
+ const regsOutBuf = device.createBuffer({
94
+ size: regData.byteLength,
95
+ usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC
96
+ });
97
+ const regsInBuf = device.createBuffer({
98
+ size: regData.byteLength,
99
+ usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST
100
+ });
101
+ device.queue.writeBuffer(regsInBuf, 0, regData);
102
+ const paramsBuf = device.createBuffer({
103
+ size: params.byteLength,
104
+ usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
105
+ });
106
+ device.queue.writeBuffer(paramsBuf, 0, params);
107
+ const bindGroup = device.createBindGroup({
108
+ layout: this.pipeline.getBindGroupLayout(0),
109
+ entries: [
110
+ { binding: 0, resource: { buffer: paramsBuf } },
111
+ { binding: 1, resource: { buffer: memBuf } },
112
+ { binding: 2, resource: { buffer: regsOutBuf } },
113
+ { binding: 3, resource: { buffer: regsInBuf } }
114
+ ]
115
+ });
116
+ const memStage = device.createBuffer({
117
+ size: memData.byteLength,
118
+ usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST
119
+ });
120
+ const regsStage = device.createBuffer({
121
+ size: regData.byteLength,
122
+ usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST
123
+ });
124
+ const enc = device.createCommandEncoder();
125
+ const pass = enc.beginComputePass();
126
+ pass.setPipeline(this.pipeline);
127
+ pass.setBindGroup(0, bindGroup);
128
+ pass.dispatchWorkgroups(Math.ceil(count / WORKGROUP_SIZE));
129
+ pass.end();
130
+ enc.copyBufferToBuffer(memBuf, 0, memStage, 0, memData.byteLength);
131
+ enc.copyBufferToBuffer(regsOutBuf, 0, regsStage, 0, regData.byteLength);
132
+ device.queue.submit([enc.finish()]);
133
+ await memStage.mapAsync(GPUMapMode.READ);
134
+ const outMem = new Uint8Array(memStage.getMappedRange().slice(0));
135
+ memStage.unmap();
136
+ await regsStage.mapAsync(GPUMapMode.READ);
137
+ const outRegs = new Uint32Array(regsStage.getMappedRange().slice(0));
138
+ regsStage.unmap();
139
+ memBuf.destroy();
140
+ regsOutBuf.destroy();
141
+ regsInBuf.destroy();
142
+ paramsBuf.destroy();
143
+ memStage.destroy();
144
+ regsStage.destroy();
145
+ // Repack memory: private-array layout stores 1 byte per u32, but we wrote
146
+ // it back packed 4-per-word, so outMem is already tight bytes.
147
+ const memory = new Uint8Array(count * memBytes);
148
+ memory.set(outMem.subarray(0, count * memBytes));
149
+ const registers = [];
150
+ for (let p = 0; p < count; p++) {
151
+ const b = p * REGS_PER_PROGRAM;
152
+ registers.push({
153
+ af: outRegs[b + 0],
154
+ bc: outRegs[b + 1],
155
+ de: outRegs[b + 2],
156
+ hl: outRegs[b + 3],
157
+ ix: outRegs[b + 4],
158
+ iy: outRegs[b + 5],
159
+ sp: outRegs[b + 6],
160
+ pc: outRegs[b + 7],
161
+ afPrime: outRegs[b + 8],
162
+ bcPrime: outRegs[b + 9],
163
+ dePrime: outRegs[b + 10],
164
+ hlPrime: outRegs[b + 11]
165
+ });
166
+ }
167
+ return {
168
+ count,
169
+ memBytes,
170
+ memory,
171
+ registers,
172
+ memoryOf: (i) => memory.subarray(i * memBytes, (i + 1) * memBytes)
173
+ };
174
+ }
175
+ /** Release GPU resources (and the device, if Zilion created it). */
176
+ destroy() {
177
+ if (this.destroyed)
178
+ return;
179
+ this.destroyed = true;
180
+ if (this.ownsDevice)
181
+ this.device.destroy();
182
+ }
183
+ }
184
+ //# sourceMappingURL=zilion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zilion.js","sourceRoot":"","sources":["../src/zilion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAmD/E,MAAM,cAAc,GAAG,EAAE,CAAC;AAE1B;;;GAGG;AACH,MAAM,OAAO,MAAM;IACT,QAAQ,CAAS;IACjB,MAAM,CAAY;IACnB,QAAQ,CAAqB;IAC7B,UAAU,CAAU;IACpB,SAAS,GAAG,KAAK,CAAC;IAE1B,YAAoB,MAAiB,EAAE,QAAgB,EAAE,UAAmB;QAC3E,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,kBAAkB,CAAC;YACxC,KAAK,EAAE,YAAY;YACnB,IAAI,EAAE,kBAAkB,CAAC,QAAQ,CAAC;SAClC,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,qBAAqB,CAAC;YAC5C,KAAK,EAAE,YAAY;YACnB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE;SACvC,CAAC,CAAC;IACJ,CAAC;IAED,sCAAsC;IACtC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAsB,EAAE;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC;QACtC,IAAI,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YACvD,MAAM,IAAI,KAAK,CAAC,6CAA6C,QAAQ,GAAG,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QACzB,IAAI,IAAI,GAAG,KAAK,CAAC;QACjB,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,MAAM,GAAG,GAAI,UAA4C,CAAC,SAAS,EAAE,GAAG,CAAC;YACzE,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;YACzE,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,cAAc,EAAE,CAAC;YAC3C,IAAI,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAC7D,MAAM,GAAG,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC;YACvC,IAAI,GAAG,IAAI,CAAC;QACb,CAAC;QACD,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,GAAG,CAAC,QAA4C,EAAE,IAAgB;QACvE,IAAI,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAC1E,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC9B,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YACjB,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3H,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,MAAM,KAAK,GAAG,QAAQ,IAAI,CAAC,CAAC;QAE5B,sCAAsC;QACtC,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;QAC/C,MAAM,YAAY,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC;YACzB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE;gBAAE,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QACtE,CAAC;QAED,mDAAmD;QACnD,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,KAAK,GAAG,gBAAgB,CAAC,CAAC;QAC1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,CAAC,GAAG,gBAAgB,CAAC;YAClC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,aAAa;YACzC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,IAAI,EAAE,CAAC;gBACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC5C,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC9B,IAAI,CAAC,KAAK,SAAS;wBAAE,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;gBACrD,CAAC;YACF,CAAC;QACF,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QAEjE,WAAW;QACX,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;YAClC,IAAI,EAAE,OAAO,CAAC,UAAU;YACxB,KAAK,EAAE,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ,GAAG,cAAc,CAAC,QAAQ;SACjF,CAAC,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;QAC7C,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC;YACtC,IAAI,EAAE,OAAO,CAAC,UAAU;YACxB,KAAK,EAAE,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ;SACvD,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC;YACrC,IAAI,EAAE,OAAO,CAAC,UAAU;YACxB,KAAK,EAAE,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ;SACvD,CAAC,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC;YACrC,IAAI,EAAE,MAAM,CAAC,UAAU;YACvB,KAAK,EAAE,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ;SACvD,CAAC,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QAE/C,MAAM,SAAS,GAAG,MAAM,CAAC,eAAe,CAAC;YACxC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC;YAC3C,OAAO,EAAE;gBACR,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE;gBAC/C,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;gBAC5C,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE;gBAChD,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE;aAC/C;SACD,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC;YACpC,IAAI,EAAE,OAAO,CAAC,UAAU;YACxB,KAAK,EAAE,cAAc,CAAC,QAAQ,GAAG,cAAc,CAAC,QAAQ;SACxD,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC;YACrC,IAAI,EAAE,OAAO,CAAC,UAAU;YACxB,KAAK,EAAE,cAAc,CAAC,QAAQ,GAAG,cAAc,CAAC,QAAQ;SACxD,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,MAAM,CAAC,oBAAoB,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACpC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QAChC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,cAAc,CAAC,CAAC,CAAC;QAC3D,IAAI,CAAC,GAAG,EAAE,CAAC;QACX,GAAG,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QACnE,GAAG,CAAC,kBAAkB,CAAC,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QACxE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAEpC,MAAM,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAClE,QAAQ,CAAC,KAAK,EAAE,CAAC;QACjB,MAAM,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,SAAS,CAAC,KAAK,EAAE,CAAC;QAElB,MAAM,CAAC,OAAO,EAAE,CAAC;QACjB,UAAU,CAAC,OAAO,EAAE,CAAC;QACrB,SAAS,CAAC,OAAO,EAAE,CAAC;QACpB,SAAS,CAAC,OAAO,EAAE,CAAC;QACpB,QAAQ,CAAC,OAAO,EAAE,CAAC;QACnB,SAAS,CAAC,OAAO,EAAE,CAAC;QAEpB,0EAA0E;QAC1E,+DAA+D;QAC/D,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC;QAChD,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC;QAEjD,MAAM,SAAS,GAAmB,EAAE,CAAC;QACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,MAAM,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC;YAC/B,SAAS,CAAC,IAAI,CAAC;gBACd,EAAE,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;gBAClB,EAAE,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;gBAClB,EAAE,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;gBAClB,EAAE,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;gBAClB,EAAE,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;gBAClB,EAAE,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;gBAClB,EAAE,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;gBAClB,EAAE,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;gBAClB,OAAO,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;gBACvB,OAAO,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;gBACvB,OAAO,EAAE,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC;gBACxB,OAAO,EAAE,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC;aACxB,CAAC,CAAC;QACJ,CAAC;QAED,OAAO;YACN,KAAK;YACL,QAAQ;YACR,MAAM;YACN,SAAS;YACT,QAAQ,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;SAC1E,CAAC;IACH,CAAC;IAED,oEAAoE;IACpE,OAAO;QACN,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,IAAI,CAAC,UAAU;YAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;IAC5C,CAAC;CACD"}
package/package.json ADDED
@@ -0,0 +1,60 @@
1
+ {
2
+ "name": "@neovand/zilion",
3
+ "version": "0.1.0",
4
+ "publishConfig": {
5
+ "access": "public"
6
+ },
7
+ "description": "A zillion Z80s in parallel on your GPU — a WebGPU-accelerated, differentially-tested Z80 CPU emulator for batch execution, artificial life, and genetic programming.",
8
+ "type": "module",
9
+ "main": "./dist/index.js",
10
+ "module": "./dist/index.js",
11
+ "types": "./dist/index.d.ts",
12
+ "exports": {
13
+ ".": {
14
+ "types": "./dist/index.d.ts",
15
+ "import": "./dist/index.js"
16
+ }
17
+ },
18
+ "files": [
19
+ "dist",
20
+ "README.md",
21
+ "LICENSE"
22
+ ],
23
+ "scripts": {
24
+ "build": "tsc -p tsconfig.json",
25
+ "prepublishOnly": "npm run build",
26
+ "typecheck": "tsc -p tsconfig.json --noEmit"
27
+ },
28
+ "keywords": [
29
+ "z80",
30
+ "zilog",
31
+ "cpu",
32
+ "emulator",
33
+ "webgpu",
34
+ "gpu",
35
+ "gpgpu",
36
+ "wgsl",
37
+ "parallel",
38
+ "artificial-life",
39
+ "alife",
40
+ "genetic-programming",
41
+ "assembly",
42
+ "8-bit",
43
+ "retro"
44
+ ],
45
+ "author": "NeoVand",
46
+ "license": "MIT",
47
+ "repository": {
48
+ "type": "git",
49
+ "url": "git+https://github.com/NeoVand/zilion.git"
50
+ },
51
+ "homepage": "https://github.com/NeoVand/zilion#readme",
52
+ "bugs": {
53
+ "url": "https://github.com/NeoVand/zilion/issues"
54
+ },
55
+ "devDependencies": {
56
+ "@webgpu/types": "^0.1.60",
57
+ "typescript": "^5.6.0"
58
+ },
59
+ "sideEffects": false
60
+ }