1- #include " Bus.hpp"
2- #include " CPU.hpp"
31#include " Kernel.hpp"
4- #include " Memory .hpp"
2+ #include " Logger .hpp"
53#include < iostream>
64#include < string>
75
6+ #ifdef __EMSCRIPTEN__
7+ #include < emscripten/bind.h>
8+ using namespace emscripten ;
9+
10+ void clearLogsWrapper ()
11+ {
12+ CLEAR_LOGS ();
13+ }
14+ void resetStatsWrapper ()
15+ {
16+ STATS.reset ();
17+ }
18+
19+ void flushLogsWrapper ()
20+ {
21+ SHOW_LOGS ();
22+ }
23+
24+ void printStatsWrapper ()
25+ {
26+ STATS.printSummary ();
27+ }
28+ EMSCRIPTEN_BINDINGS (kernel_module)
29+ {
30+ function (" flushLogs" , &flushLogsWrapper);
31+ function (" printStats" , &printStatsWrapper);
32+ function (" clearLogs" , &clearLogsWrapper);
33+ function (" resetStats" , &resetStatsWrapper);
34+
35+ class_<Kernel>(" Kernel" )
36+ .constructor <>()
37+ .function (" createProcess" , &Kernel::createProcess)
38+ .function (" killProcess" , &Kernel::killProcess)
39+ .function (" init" , &Kernel::init)
40+ .function (" step" , &Kernel::step)
41+ .function (" isRunning" , &Kernel::isRunning);
42+ }
43+
44+ int main ()
45+ {
46+ return 0 ;
47+ }
48+
49+ #else
50+
851int main (int argc, char * argv[])
952{
1053 if (argc < 2 )
1154 {
12- std::cout << " Usage: ./rv32kernel <bin_file >\n " ;
55+ std::cout << " Usage: ./rv32kernel <elf_file >\n " ;
1356 return 1 ;
1457 }
1558
@@ -23,7 +66,16 @@ int main(int argc, char* argv[])
2366 std::cout << " Failed to create process.\n " ;
2467 return 1 ;
2568 }
26- kernel.run ();
2769
70+ kernel.init ();
71+
72+ while (kernel.isRunning ())
73+ kernel.step ();
74+
75+ SHOW_LOGS ();
76+
77+ STATS.printSummary ();
2878 return 0 ;
29- }
79+ }
80+
81+ #endif
0 commit comments