Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added SIMULATOR_FINAL.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Simulator.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Standard-White_2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Standard_2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
210 changes: 175 additions & 35 deletions editor.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
'use strict'
let editr = ace.edit('editor');
let arrayOfStrings=[]; //<<<-------this will contain the code line by line
editr.setShowPrintMargin(false);
let arrayOfStrings=[]; //<<<-------this will contain the code line by line
let memory = []; //this is the memory which is 4kB big
for(let i=0;i<=4096;i++){
memory[i] = 0;
}
let linePointer = 0;
let Registers ={}; //this is all the registers in the risc-v
let Registers ={}; //this is all the registers in the risc-v
initialiseRegisters();
updateRegisters();
document.querySelector('.submitButton')?.addEventListener('click',
function(){

Expand All @@ -16,30 +18,47 @@ function(){
memory =[];
let content1 = editor.session.getLine(0);
let i = 0;
while(i < editor.session.getLength()){
while(i < editor.session.getLength()){ //here we are getting the total lines present in the code and saving all the lines in a array of strings
content1 = editor.session.getLine(i)
i++;
arrayOfStrings.push(content1);
}
for(let linePointer=0;linePointer<arrayOfStrings.length;linePointer++){ //--> j changed to linePointer
if(arrayOfStrings[linePointer]==="")continue
let currIndex =linePointer
console.log(linePointer);
if(arrayOfStrings[linePointer]==="")continue //this part of the code prevents the compiling the lines with no code in it
else if(IsLabel(arrayOfStrings[linePointer])){ //this part of the code checks if the line is label or not if it is a label then the compiler ignores it
continue;
}
let currIndex =linePointer //this currIndex variable keeps track of the line that we are compiling
let regs=returnRegisters(arrayOfStrings[currIndex]);
let instruction = returnFunction(arrayOfStrings[currIndex]);
if(instruction === 'j'){
linePointer = rInstruction(instruction,returnLabel(arrayOfStrings[currIndex]));
}
else if(IsBranch(instruction)){
let temporaryPointer = rInstruction(instruction,regs[0],regs[1],regs[2]);
if(temporaryPointer === "labelNotFound"){
console.log("labelNotFound");
return;
}
if(temporaryPointer ===-1) continue;
else{
linePointer = temporaryPointer;
continue;
}
}
else{
rInstruction(instruction,regs[0],regs[1],regs[2]);
}
}
console.log(Registers);

updateRegisters();
}
)


document.querySelector('.resetButton').addEventListener('click',function(){
initialiseRegisters();
updateRegisters();
location.reload();
})
//<<--------------------------write testing code after this---------------------->>


Expand All @@ -48,42 +67,55 @@ function(){


// <<-----------------------------------functions-------------------------------------->>
function updateRegisters(){
let regss = Object.keys(Registers);
document.querySelector('.s1').textContent = 0;
for(let temp of regss){
let temp1 = "."+temp;
document.querySelector(temp1).textContent = Registers[temp];
}
}
function initialiseRegisters(){
Registers['zero'] = 0;
Registers['ra'] = 0;
Registers['sp'] = 0;
Registers['gp'] =0;
Registers['tp'] =0;
Registers['t0'] =0;
Registers['t1'] = 0;

Registers['zero'] = 0;
Registers['ra'] = 0;
Registers['sp'] = 0;
Registers['gp'] =0;
Registers['tp'] =0;
Registers['t0'] =0;
Registers['t1'] = 0;
Registers['t2'] =0;
Registers['s0'] =0;
Registers['fp'] =0;
Registers['s1'] =0;
for(let i=0;i<8;i++){
Registers['s0'] =0;
Registers['s1'] =0;
for(let i=0;i<8;i++){
let temp1 = 'a'+i;
Registers[temp1] = 0;
}
for(let i=2;i<12;i++){
for(let i=2;i<12;i++){
let temp1 = 's'+i;
Registers[temp1] = 0;
}
for(let i=3;i<7;i++){
let temp1 = 't'+3;
let temp1 = 't'+i;
Registers[temp1] =0;
}

}
function returnFunction(s){
let temp = "";
let spaceCheck = false;
for(let i=0;i<s.length;i++){
if(s.charAt(i) === "#") return; // changed the format
if(s.charAt(i)!=" "){
temp = temp+s.charAt(i);
}
else{
return temp;
if(s.charAt(i)!=" ") spaceCheck = true; //taken care of indentations
if(spaceCheck){
if(s.charAt(i) === "#") return; // changed the format
if(s.charAt(i)!=" "){
temp = temp+s.charAt(i);
}
else{
return temp;
}
}

}
}

Expand All @@ -107,14 +139,18 @@ function returnLabel(s){
function returnRegisters(s){
let regs =[];
let temp;
let initialSpaceCheck = false;
for(let i=0;i<s.length;i++){
if(s.charAt(i)!== " ") initialSpaceCheck = true; //taken care of indentations
if(initialSpaceCheck){
if(s.charAt(i) !== " "){
continue;
}
else{
temp = i;
break;
}
}
}
let temp1 ="";
for(let i=(temp+1);i<=s.length;i++){
Expand Down Expand Up @@ -150,13 +186,6 @@ function rInstruction(operation, register1=null,register2=null,register3=null){
Registers[register1] = Registers[register2] + parseInt(register3);
break;
case "jal":
let i = 0;
for(i=0;i<arrayOfStrings.length;i++){
if(arrayOfStrings[i]==(register1+":")){
break;
}
}
//i --> length of arrayOfStrings or
break;
case "lw":
break;
Expand All @@ -173,8 +202,119 @@ function rInstruction(operation, register1=null,register2=null,register3=null){
return i;
break;
case "beq":
if(Registers[register1] === Registers[register2]){
for(let i=0;i<arrayOfStrings.length;i++){
if(arrayOfStrings[i] === (register3+":")){
return i;
}
}
return('labelNotFound');
}
return -1;
break;
case "bne":
if(Registers[register1] !== Registers[register2]){
for(let i=0;i<arrayOfStrings.length;i++){
if(arrayOfStrings[i] === (register3+":")){
return i;
}
}
return('labelNotFound');
}
return -1;
break;
case 'bgt':
if(Registers[register1] > Registers[register2]){
for(let i=0;i<arrayOfStrings.length;i++){
// if(arrayOfStrings[i] === (register3+":")){
// return i;
// }
if(doesLabelExists((arrayOfStrings[i]),(register3+":"))){
return i;
}
}
return('labelNotFound');
}
return -1;
break;
case 'bge':
if(Registers[register1] >= Registers[register2]){
for(let i=0;i<arrayOfStrings.length;i++){
if(arrayOfStrings[i] === (register3+":")){
return i;
}
}
return('labelNotFound');
}
return -1;
break;
case 'blt':
if(Registers[register1] < Registers[register2]){
for(let i=0;i<arrayOfStrings.length;i++){
if(arrayOfStrings[i] === (register3+":")){
return i;
}
}
return('labelNotFound');
}
return -1;
break;
case 'ble':
if(Registers[register1] <= Registers[register2]){
for(let i=0;i<arrayOfStrings.length;i++){
if(arrayOfStrings[i] === (register3+":")){
return i;
}
}
return('labelNotFound');
}
return -1;
break;
}
}
function doesLabelExists(wholeLine,label){
let spaceCheck = false;
let temp="";
for(let i=0;i<wholeLine.length;i++){
if(wholeLine.charAt(i)!= " "){
spaceCheck = true;
}
if(spaceCheck){
temp = temp+wholeLine.charAt(i);
}
}

return((temp)===(label));
}
function IsBranch(s){
if(s==='beq' || s==='bne' || s==='bgt' || s==='bge' || s==='blt' || s==='ble'){
return true;
}
return false;
}
function IsLabel(s){
let temp ="";
for(let i=0;i<s.length;i++){
if(s.charAt(i)!==" " && s.charAt(i) !==":"){
temp = temp+s.charAt(i);
continue;
}
if(s.charAt(i) ===":" && temp.length!==0){
return true;
}

}
return false;
}
function isEcall(s){
let temp ="";
let isSpace = false;
for(let i=0;i<s.length;i++){
if(s.charAt(i)!=" ") isSpace = true;
if(isSpace){
temp = temp+s.charAt(i);
}
}
if(temp==="ecall") return true;
return false;
}
28 changes: 28 additions & 0 deletions style.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
body{
background-color: #FAEEE7;
}
#editor {
position: absolute;
top: 108px;
right: 500px;
bottom: 200px;
left: 0px;
/* width: 50% */

}

.btn-group{
height:40px;
width:67.1%;
}
.registers{
position: absolute;
top: 63px;
left: 1020px;
height: 50px;
width:33%;
border:2.5px solid black;
}
tr{
background-color: #F7F7F7;
}
Loading