39 lines
701 B
C
39 lines
701 B
C
#pragma once
|
|
|
|
#include "emulator/csr.h"
|
|
|
|
#include <stdint.h>
|
|
#include <stdbool.h>
|
|
|
|
#define PRIV_U 0
|
|
#define PRIV_S 1
|
|
#define PRIV_M 3
|
|
|
|
struct Hart
|
|
{
|
|
uint32_t hartid;
|
|
|
|
uint32_t regs[32];
|
|
|
|
uint32_t pc;
|
|
uint8_t priv;
|
|
|
|
// @Todo Proper memory system
|
|
char* mem;
|
|
uint32_t mem_size;
|
|
|
|
// @Todo Deduplicate per machine
|
|
Csr csrs[4096];
|
|
|
|
uint64_t instret;
|
|
|
|
// @Todo Deduplicate per machine
|
|
uint64_t time;
|
|
};
|
|
typedef struct Hart Hart;
|
|
|
|
void hart_init(Hart* hart, uint32_t id, char* mem, uint32_t mem_size);
|
|
|
|
void execute(Hart* hart, uint32_t instruction);
|
|
void execute_from(Hart* hart, uint32_t start_address);
|