-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
124 lines (108 loc) · 3.66 KB
/
script.js
File metadata and controls
124 lines (108 loc) · 3.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
var editor = CodeMirror.fromTextArea($("editor"), {
mode: "8085", // Set to the assembly language mode you've created
theme: "dracula", // Choose your preferred theme
lineNumbers: true, // Show line numbers
autofocus: true, // Automatically focus on the editor when the page loads
indentUnit: 4, // Indent using 4 spaces
matchBrackets: true, // Highlight matching brackets
autoCloseBrackets: true, // Automatically close brackets
});
let instruction = 0;
let localCounter = 100;
let labelMap = new Map();
let instructionsArray = [];
const Sdata = localStorage.getItem("code");
if (Sdata !== null) editor.setValue(Sdata);
$("compile").addEventListener("click", function () {
const start = localCounter;
localStorage.setItem("code", editor.getValue());
const assemblyCode = editor.getValue().split("\n");
const outputDiv = document.querySelector(".Output");
outputDiv.innerHTML = "";
let flag = 1;
for (let i = 0; i < assemblyCode.length; i++) {
const line = assemblyCode[i];
instructionsArray.push(line);
if (line == "" || line.startsWith(";")) continue;
const result = tokenizeAndCompile(line);
const machineCode = result.machineCode;
if (result.success) {
const StartHex = start.toString(16).toUpperCase().padStart(4, "0");
$("Pgr").innerHTML = StartHex.substring(0, 2);
$("Ctr").innerHTML = StartHex.substring(2, 4);
outputDiv.innerHTML += `<p>Line ${i + 1
}: "Instructions are stored from memory address 0x0064"</p>`;
} else {
flag = 0;
outputDiv.innerHTML += `<p>Line ${i + 1}: ${machineCode}</p>`;
break;
}
}
if (flag) {
$("compile").classList.add("hide")
$("run").classList.remove("hide")
}
console.log(instructionsArray);
console.log(labelMap);
});
$("run").addEventListener("click", function () {
const assemblyCode = editor.getValue().split("\n");
while (instruction < assemblyCode.length) {
const line = assemblyCode[instruction];
opcodeFetch(line)
instruction++;
}
$("compile").classList.remove("hide")
$("run").classList.add("hide")
});
editor.on("change", function () {
$("run").classList.add("hide")
$("compile").classList.remove("hide")
console.log("Editor content has changed.");
});
function appendAddressElement(container, hexAddress, k) {
const div = document.createElement("div");
div.className = "addr";
const p1 = document.createElement("p");
p1.textContent = `${hexAddress}`;
const decimalAddress = parseInt(hexAddress, 16);
const p2 = document.createElement("p");
p2.textContent = `${decimalAddress}`;
const p3 = document.createElement("p");
p3.textContent = 0;
p3.classList.add(`${k}${decimalAddress}`);
// console.log(k + decimalAddress);
div.appendChild(p1);
div.appendChild(p2);
div.appendChild(p3);
container.appendChild(div);
}
const container1 = $("scroll_mem");
const container2 = $("scroll_io");
for (let i = 0; i < 4096; i++) {
const hexAddress = i.toString(16).toUpperCase().padStart(4, "0");
appendAddressElement(container1, hexAddress, "me");
}
for (let i = 0; i < 256; i++) {
const hexAddress = i.toString(16).toUpperCase().padStart(2, "0");
appendAddressElement(container2, hexAddress, "io");
}
const close_model_button = document.querySelector(".close_model");
close_model_button.addEventListener("click", () => {
const model = $("model");
model.classList.add("hide");
});
function loadHelp() {
const model = $("model");
model.classList.remove("hide");
}
function loadHelp() {
const model = $("model");
model.classList.remove("hide");
}
function Github() {
window.open("https://github.com/SF404/8085_Simulation", "_blank");
}
function resetAll() {
window.location.reload();
}