Compare commits

...

4 Commits

Author SHA1 Message Date
Eric-Paul Ickhorn d583605e06 Improved design of test page 2023-03-17 03:18:29 +01:00
Eric-Paul Ickhorn 5c089fa51c Merge branch 'main' of https://git.nerdcult.net/nerdcult/nerdemu 2023-03-17 00:51:08 +01:00
antifallobst 03fe6a1843 merged with changes ep.ickhorn made 2023-03-17 00:21:17 +01:00
antifallobst c3b54c8813 organized codebase 2023-03-17 00:16:53 +01:00
12 changed files with 252 additions and 48 deletions

View File

@ -1,16 +1,14 @@
[package]
name = "nemu"
name = "nemu-arch-x86"
version = "0.1.0"
edition = "2021"
authors = ["Antifallobst <antifallobst@systemausfall.org>", "Eric-Paul Ickhorn <atnx@protonmail.com>"]
description = "A small web emulator for simple architectures"
description = "The x86 implementation of NEMU"
license = "MIT"
repository = "https://git.nerdcult.net/nerdcult/nerdemu"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[lib]
crate-type = ["cdylib"]
[dependencies]
wasm-bindgen = "0.2"
wasm-bindgen = "0.2"

View File

@ -0,0 +1,11 @@
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
extern {
pub fn alert(s: &str);
}
#[wasm_bindgen]
pub fn greet(name: &str) {
alert(&format!("Hello, {}!", name));
}

14
base/Cargo.toml Normal file
View File

@ -0,0 +1,14 @@
[package]
name = "nemu-base"
version = "0.1.0"
edition = "2021"
authors = ["Antifallobst <antifallobst@systemausfall.org>", "Eric-Paul Ickhorn <atnx@protonmail.com>"]
description = "The base layer of NEMU"
license = "MIT"
repository = "https://git.nerdcult.net/nerdcult/nerdemu"
[lib]
crate-type = ["cdylib"]
[dependencies]
wasm-bindgen = "0.2"

11
base/src/lib.rs Normal file
View File

@ -0,0 +1,11 @@
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
extern {
pub fn alert(s: &str);
}
#[wasm_bindgen]
pub fn greet(name: &str) {
alert(&format!("Hello, {}!", name));
}

View File

@ -1,9 +1,14 @@
#!/bin/bash
set -e
nemu_build() {
echo " --> Building NerdEMU"
wasm-pack build --target web
echo " --> Building nemu-base"
wasm-pack build base --target web
echo " --> Building nemu-arch-x86"
wasm-pack build architectures/x86 --target web
}
nemu_run(){

47
index.html Normal file
View File

@ -0,0 +1,47 @@
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="utf-8" />
<title>Web-Test | NerdEMU</title>
<link rel="stylesheet" href="test.css">
</head>
<body>
<header id="config-button"s>
<div class="hamburger" id="configurator-button">
<div class="hamburger-slice"></div>
<div class="hamburger-slice"></div>
<div class="hamburger-slice"></div>
<div>
</header>
<div id="configurator-modal">
<div id="configurator-modal-background"></div>
<div id="configurator-modal-foreground">
</div>
</div>
<main>
<p id="output-title">The NerdEMU Emulator</p>
<canvas class="pixel-output"></canvas>
</main>
</body>
<script src="test.js"></script>
<script type="module">
import init, { greet } from "./base/pkg/nemu_base.js";
init().then(() => {
greet("NerdEMU");
});
</script>
</html>

6
systems/8086.json Normal file
View File

@ -0,0 +1,6 @@
{
"name": "i8086",
"version": "0.0",
"architecture": "x86"
}

134
test.css Normal file
View File

@ -0,0 +1,134 @@
* {
margin: 0px;
padding: 0px;
}
html, body {
width: 100%;
height: 100%;
background-color: #1a2b40;
color: #ffffff;
}
main {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
header {
position: fixed;
right: 0px;
top: 0px;
z-index: 10;
width: 48px;
height: 48px;
border-bottom-left-radius: 12px;
background-color: #0f141b;
color: #ffffff;
}
.hamburger {
margin-bottom: 2px;
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.hamburger-slice {
margin: 3px;
width: 75%;
height: 6px;
background-color: #ffffff;
border-radius: 2.5px;
}
.pixel-output {
width: 100%;
height: 100%;
}
#config-button {
cursor: pointer;
}
.pixel-output {
z-index: 2;
width: 60vw;
max-height: 90vh;
/*So it's always a 16/9 aspect ratio */
height: calc(60vw*0.5625);
background-color: #000000;
box-shadow: 0px 0px 8px 8px #0f141b55;
}
#output-title {
padding-bottom: 20px;
font-size: 32px;
font-weight: 1000;
}
#configurator-modal {
position: fixed;
right: 0px;
top: 0px;
display: none;
z-index: 4;
width: 100%;
height: 100%;
}
#configurator-modal-background {
position: fixed;
right: 0px;
top: 0px;
z-index: 5;
width: 100%;
height: 100%;
background-color: #0f141bb0;
}
#configurator-modal-foreground {
position: fixed;
right: 0px;
top: 0px;
z-index: 6;
width: 100%;
height: 100%;
}

19
test.js Normal file
View File

@ -0,0 +1,19 @@
var configuratorButton = document.getElementById("configurator-button");
var configuratorModal = document.getElementById("configurator-modal");
configuratorButton.onclick = onConfiguratorButtonClick;
var isConfiguratorShown = false;
function onConfiguratorButtonClick(event) {
if(isConfiguratorShown == false) {
configuratorModal.style.display = "block";
isConfiguratorShown = true;
console.log("Showing Configurator-Modal!");
return;
}
configuratorModal.style.display = "none";
isConfiguratorShown = false;
console.log("Hiding Configurator-Modal!");
}

View File

@ -1,15 +0,0 @@
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="utf-8" />
<title>test</title>
</head>
<body>
<script type="module">
import init, { greet } from "./pkg/nemu.js";
init().then(() => {
greet("NerdEMU");
});
</script>
</body>
</html>

View File

@ -1,10 +0,0 @@
// The NerdEMU - emulator | This software is protected under the MIT-license
// Copyright 2023: [The Original NerdEMU-Authors] as seen on:
// (nerdcult.net/projects/nerdemu/ OR git.nerdcult.net/nerdcult/nerdemu)
// x86/src/i8086.rs: The emulation code for the i8086 - microprocessor
// and a basic mainbus which connects it to the memory and other simple
// devices.

View File

@ -1,16 +0,0 @@
// The NerdEMU - emulator | This software is protected under the MIT-license
// Copyright 2023: [The Original NerdEMU-Authors] as seen on:
// (nerdcult.net/projects/nerdemu/ OR git.nerdcult.net/nerdcult/nerdemu)
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
extern {
pub fn alert(s: &str);
}
#[wasm_bindgen]
pub fn greet(name: &str) {
alert(&format!("Hello, {}!", name));
}