Allow other image file names through cli args, increase ram size, update readme
This commit is contained in:
13
README.md
13
README.md
@@ -8,12 +8,17 @@ potentially more. No plans for RV32I or RV32/64E.
|
|||||||
Currently, the emulator is nowhere near complete,
|
Currently, the emulator is nowhere near complete,
|
||||||
its not even at rv64i, but it does work for a subset of it.
|
its not even at rv64i, but it does work for a subset of it.
|
||||||
|
|
||||||
The emulator will load a raw binary image from the file `./img` into RAM,
|
The emulator will load a raw binary image from a file specified as a CLI argument into RAM,
|
||||||
which starts at 0x80000000 and is currently 1MiB,
|
which starts at 0x80000000 and is currently 16MiB,
|
||||||
and start execution at the start of the image/ram.
|
and start execution at the start of the image/ram.
|
||||||
|
|
||||||
There is also a debug out page starting at `0x00000000`-`0x00001000`.
|
There is also a debug out page starting at `0x00000000`-`0x00001000`.
|
||||||
Anything written to it will be logged out in hex.
|
Anything written to it will be logged out in hex.
|
||||||
|
|
||||||
Currently there is no input, altho i might get around to making
|
There is also a UART at `0x00001000`-`0x00002000`, the interface is quite simple:
|
||||||
an early UART kinda soon.
|
- byte `0`: Data. When written, writes out the character
|
||||||
|
When read, reads a character from the buffer, or 0 if empty.
|
||||||
|
- byte `1`: Status. Read-only. Least significant bit is `TX_READY` and indicates whether
|
||||||
|
the UART is ready to be written to. Currently always 1.
|
||||||
|
Next least significant is `RX_READY`, indicates whether the read buffer
|
||||||
|
has any data to read.
|
||||||
|
|||||||
12
src/main.rs
12
src/main.rs
@@ -5,6 +5,7 @@
|
|||||||
// See LICENSE file in the project root for full license text.
|
// See LICENSE file in the project root for full license text.
|
||||||
|
|
||||||
use std::{
|
use std::{
|
||||||
|
env,
|
||||||
error::Error,
|
error::Error,
|
||||||
fs::File,
|
fs::File,
|
||||||
io::{self, Read},
|
io::{self, Read},
|
||||||
@@ -41,9 +42,16 @@ fn read_file_to_buffer(path: &str, buffer: &mut [u8]) -> io::Result<usize> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn main() -> Result<(), Box<dyn Error>> {
|
fn main() -> Result<(), Box<dyn Error>> {
|
||||||
let mut ram = Ram::try_new(1024 * 1024 / 4096)?;
|
let mut ram = Ram::try_new(16 * 1024 * 1024 / 4096)?;
|
||||||
let buf = ram.buf_mut();
|
let buf = ram.buf_mut();
|
||||||
read_file_to_buffer("./img", buf)?;
|
|
||||||
|
let args: Vec<String> = env::args().collect();
|
||||||
|
|
||||||
|
if args.len() != 2 {
|
||||||
|
eprintln!("USAGE: trve <ram_image>")
|
||||||
|
}
|
||||||
|
|
||||||
|
read_file_to_buffer(&args[1], buf)?;
|
||||||
|
|
||||||
let uart = BasicUart::new();
|
let uart = BasicUart::new();
|
||||||
let uart = uart.spawn_poller(Duration::from_millis(10));
|
let uart = uart.spawn_poller(Duration::from_millis(10));
|
||||||
|
|||||||
Reference in New Issue
Block a user