Hacker News new | past | comments | ask | show | jobs | submit login
A tiny C header-only RISC-V emulator (github.com/cnlohr)
205 points by todsacerdoti on Nov 29, 2022 | hide | past | favorite | 22 comments



Far out. This is amazing. The links included... Linux in a pixel shader ?!?! What? Very cool.


CNLohr is a well known youtuber among electronics enthusiasts; take a look at his channel and you won't be disappointed.

https://www.youtube.com/@CNLohr/videos


Reminds me of 8086tiny [1]

[1]: https://github.com/alblue/8086tiny


Posts like these get 8 comments on hn but relationships posts get 100s. It it because of the bikeshedding or are hn users just obsessed with relationships?


Hacker News commenters are drawn, like moths to a flame, to topics they think they can understand.


These kinds of posts have a very high bar to provide a thoughtful comment on. I'd suggest checking lobste.rs if you're into only CS/programming stuff.


This is impressive!

I’ll admit: My first reaction was: cool but why not just use qemu to get a more full fledged system, add rv64 etc?

But the readme explains it very well, I admire the dedication and consistency it takes to stick to rv32 no MMU only to be able yo fit it into very minimal environments in the end.

(I myself tend to be much more prone to allowing feature creep :)


What happens on a 'nommu' linux system when a program tries to access memory that it should not?


Depends. If it's some random spot in the memory space, it gets an access violation and the kernel kills it. Otherwise, if it's still a "valid" memory address, it's allowed to access it. Even if it's say, within kernel space.


Have you run it on itself yet?


hold my beer



Zomg! This made my week! Thank you!


CNLohr does a lot of super cool stuff. I highly recommend checking out more of his stuff. How I think of him is similar to how people talk about Fabrice Bellard: He keeps pumping out reliably cool stuff in pretty different areas. His streams are cool too.


This is an awesome project. In the video you mention that you might drop it... please don't!


Just curious but as someone who doesn't understand the awesomeness, can you explain what it's useful for? I can't think of what I might use this for.


One could use it to test (embedded) code targetting RISC-V, without needing to use hardware. Unit tests is the easiest, since they preferably do no I/O. But also integration test by providing an I/O implementation (using a Hardware Abstraction Layer), and driving I/O from the tests. Such testing is easier to do when one has C access to the simulator, and not having to implement the I/O via some virtual device shuffling bytes etc.

And since its just a C header/library, on can just distribute, include and build the simulator alone with the project/tests. As opposed to relying on the user having qemu (or similar) installed.

I will consider using it for emlearn (a Machine Learning Library for microcontrollers).


This is a full system simulator with an emulated RISC-V CPU in under a 1000 lines of clean C, in two files, so you can include it basically any program (STB style FTW).


I mean, any program can include any program, why go to the extra layer of doing it inefficiently?


It allows you to run it in a protected environment. Think scripting languages.


This video goes along with the github link:

Writing a Really Tiny RISC-V Emulator by CNLohr https://www.youtube.com/watch?v=YT5vB3UqU_E


Good. I would have like some 64bits though.

And Mr. Bellard did the same thing (but not packaged is a nice header): https://bellard.org




Consider applying for YC's W25 batch! Applications are open till Nov 12.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: