Archived
1
0
This repository has been archived on 2026-02-06. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
iceberg/vm.c
T

88 lines
2.6 KiB
C

/* Main file to use to run Iceberg Virtual Computer*/
#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>
#include "assembler/assembler.c"
#include "compiler/compiler.c"
// Logic gates Verilog files
char gates[][32] = {"gates/and8way.v",
"and8way16.v"
"and16.v"
//etc.
};
// Memory Systemverilog files
char memory[] = "memory/counter/pc.sv";
// CPU Systemverilog files: remember to load from less important to most important
char cpu[][32] = {"cpu/alu/alu.sv",
"cpu/alu/adder.sv",
"cpu/alu/adder16.sv",
"cpu/alu/halfadder.sv",
"cpu/alu/lookahead.sv"
"cpu/cpu.sv"
};
//FIXME:: can read folder and output every file name? then choose what to run??
//TODO: read all files and choose what file execute
char input[][32] = {"asm/mult.asm",
"asm/example.asm"
}
void import_sv(char *filename) { //TODO: verify if it can keep multiple files in memory
FILE *stream = fopen(filename, "r"); //or fscanf or fgetc ?
}
void close_stream(char filename) {
int fclose(filename);
}
int main(int argc, int *argv) {
bool load = FALSE;
bool quit = FALSE;
// startup and load->TRUE
// Load *.sv subsystem files
if (load == TRUE) {
// Load logic gates
// check sizeof() usage: i need elements in array
for(int i=0; i< sizeof(gates[]), i++) {
import_sv(gates[i]); }
// Load memory
for(int i=0; i< sizeof(memory[]), i++) {
import_sv(memory[i]); }
// Load CPU
for(int i=0; i< sizeof(cpu[]), i++) {
import_sv(cpu[i]); }
}
//TODO: NEXT STUFF TO DO
// read files, create a general logic to read *.sv, start cpu and use any other chip as needed,
// included in a file, like a tree of inclusions(?)
// user choose high level language program, compiler compiles (duh) to maachine code;
// assembly assembles (double-duh) the program, we read assembled program (binary opcodes) which inputs are feed
// to the rom, which will send to the cpu
// maybe also load os-like assembled program, that allocates stuff or do useful things before running programs?
if(quit == TRUE) {
load = FALSE;
//TODO: add message or something
//TODO: use sizeof()
for(int i=5; i<0, i--) {
close_stream(cpu[i]); }
for(int i=n; i<0, i--) {
close_stream(memory[i]); }
for(int i=m; i<0, i--) {
close_stream(gates[i]); }
return 0;
}
}