https://github.com/dcnick3/oc-wasm-gtnh
A fork of https://gitlab.com/Hawk777/oc-wasm to port it to GTNH modpack
https://github.com/dcnick3/oc-wasm-gtnh
Last synced: 2 months ago
JSON representation
A fork of https://gitlab.com/Hawk777/oc-wasm to port it to GTNH modpack
- Host: GitHub
- URL: https://github.com/dcnick3/oc-wasm-gtnh
- Owner: DCNick3
- License: lgpl-3.0
- Created: 2023-06-15T13:26:41.000Z (about 3 years ago)
- Default Branch: gtnh
- Last Pushed: 2024-03-31T18:00:18.000Z (over 2 years ago)
- Last Synced: 2025-03-22T23:44:47.785Z (over 1 year ago)
- Language: Kotlin
- Size: 421 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Codeowners: CODEOWNERS
Awesome Lists containing this project
README
Overview
========
OC-Wasm is a CPU architecture for [OpenComputers](https://oc.cil.li/) which
executes [WebAssembly](https://webassembly.org/) binaries.
Getting Started
===============
To get a basic “hello world”-type application running with OC-Wasm, you’ll need
to follow a few steps:
* Build a computer. OC-Wasm doesn’t add any new items; instead, you use the
standard OpenComputers items, just as if you were building a Lua computer.
After crafting the CPU or APU, hold it in your hand and Shift-Right-Click to
switch architectures—just like you would to switch between Lua 5.2 and
5.3—and you should see WebAssembly in the list.
* All computers need a BIOS, and WebAssembly computers are no different. If
your program is very small (≤4 kiB), you can put it directly on an EEPROM and
use it as a BIOS directly. Usually, though, your program will be too big to
fit on an EEPROM, so you’ll want a BIOS which can load your program from
disk. [OC-Wasm-BIOS](https://gitlab.com/Hawk777/oc-wasm-bios/) does just
that: it loads a program from `/init.wasm` on a disk (just like the Lua BIOS
loads a program from `/init.lua`). Since there’s no craftable item that comes
with a BIOS, you’ll need to download the BIOS onto an existing computer
(presumably running Lua, e.g. via `wget`) and flash it onto an EEPROM (e.g.
via `flash`).
* Create your application. You’ll probably do this outside Minecraft, using
regular software development tools. Once you’ve compiled a `.wasm` file, name
it `init.wasm` and place it in the root directory of a hard drive or floppy
disk. This can be done a few different ways:
* Upload your program to the Internet, put the disk in a working computer,
download the file to it with `wget`, and move the disk to the new computer.
* Place the file directly in the proper place in your Minecraft save game
directory, if you have access to it. You probably want to set
`bufferChanges` to `false` in the `filesystem` section of your
OpenComputers config file if you’re regularly using this method.
* Boot your computer!
Working in Rust
===============
A number of crates are available to make writing OC-Wasm programs in Rust
ergonomic:
* [OC-Wasm-Cassette](https://crates.io/crates/oc-wasm-cassette) provides an
easy way to use the Cassette async executor to run an `async fn` as your main
function.
* [OC-Wasm-Sys](https://crates.io/crates/oc-wasm-sys) is a set of raw FFI
bindings. You probably don’t want to use this crate directly, but it
underpins all the other ones.
* [OC-Wasm-Safe](https://crates.io/crates/oc-wasm-safe) is a set of wrappers
around OC-Wasm-Sys that provide memory safety, safe handling of opaque value
descriptors, and mutual exclusion over system calls that cannot be invoked
multiple times simultaneously.
* [OC-Wasm-Futures](https://crates.io/crates/oc-wasm-futures) is a set of async
futures that make it easier to write an OC-Wasm program using `async` and
`await`.
* [OC-Wasm-OpenComputers](https://crates.io/crates/oc-wasm-opencomputers) is a
set of high-level wrappers around the component APIs supported by ordinary
OpenComputers (such as the redstone API, the filesystem API, the GPU API,
etc.).
As of this writing, `OC-Wasm-OpenComputers` is incomplete, and there are no
crates for high-level wrappers around other mods that can interact with
OpenComputers (e.g. via the adapter block); however, community contributions
(in the form of merge requests to `OC-Wasm-OpenComputers` or new crates for
content from mods) are very welcome!
Working in Zig
===============
AmandaC from the OpenComputers community has started early work on [a
repository with a Zig library and a few small examples for
OC-Wasm](https://git.camnet.site/amandac/ocwasm-zig).
Technical Details
=================
If you want to work in a language which doesn’t already have support libraries,
or you’re just curious how things work under the hood, please have a look at
[the OC-Wasm Javadoc](https://hawk777.gitlab.io/oc-wasm/).