diff --git a/arch/context.asm b/arch/context.asm index 0e65f1c..6180a08 100644 --- a/arch/context.asm +++ b/arch/context.asm @@ -32,4 +32,5 @@ context_launch: align 16 fake_systemv_abi: mov rdi, r15 +mov rsi, r14 ret diff --git a/main.cc b/main.cc index 973b948..a73cfae 100644 --- a/main.cc +++ b/main.cc @@ -34,6 +34,11 @@ Ticketlock koutlock; //}; +Context test2; +uint8_t test2_stack[256]; +Application application2 = Application(test2_stack); + + TextStream dout[Core::MAX] = { {0, 40, 10, 14}, @@ -126,9 +131,8 @@ extern "C" int main() { PS2Controller::drainBuffer(); DBG << "Main CPU " << static_cast(LAPIC::getID()) << endl << flush; - - prepareContext(&test1_stack[sizeof(test1_stack)-1], test1, (void(*)(void*)) &(test_func1)); - prepareContext(&test2_stack[sizeof(test2_stack)-1], test2, (void(*)(void*)) &(test_func2)); + prepareContext(&test1_stack[sizeof(test1_stack)-1], test1, (void(*)(void*)) &(Application::kickoff),(Thread*)&application); + prepareContext(&test2_stack[sizeof(test2_stack)-1], test2, (void(*)(void*)) &(Application::kickoff),(Thread*)&application2); context_launch(&test1); diff --git a/user/app1/appl.cc b/user/app1/appl.cc index 507fcdd..1610574 100644 --- a/user/app1/appl.cc +++ b/user/app1/appl.cc @@ -8,6 +8,7 @@ #include "../../arch/core.h" #include "../../interrupt/guard.h" #include "../../debug/output.h" +#include "../../arch/context.h" char text[] = "Ich mag\n\ Saftige Pflaumen voller Aroma\n\ Ich knuddel jede Oma ins Koma\n\ @@ -22,7 +23,8 @@ Und wacht sie aus'm Koma auf, kriegt sie von mir 'n Sticker\n\ \n"; extern Ticketlock koutlock; - +extern Context* test2; extern Context* test1; +extern uint8_t test1_stack[], test2_stack[]; void activeWaitDelay(uint64_t cycles) { uint64_t counter = 0; // Use volatile to prevent optimization for (uint64_t i = 0; i < cycles; ++i) { @@ -37,6 +39,7 @@ void Application::action() { // NOLINT while (1) { //koutlock.lock(); { +<<<<<<< HEAD Guarded g = Guard::enter(); //g.vault(); g.vault().kout.setPos((unsigned)0,(unsigned)Core::getID()*2+1); @@ -46,11 +49,22 @@ void Application::action() { // NOLINT //g.vault().kout << endl << flush; //Guard::leave(); //koutlock.unlock(); +======= + Guarded g = Guard::enter(); + //g.vault(); + g.vault().kout.setPos((unsigned)0,(unsigned)Core::getID()*2+1); + + g.vault().kout << test1<< flush; + + //g.vault().kout << endl << flush; + //Guard::leave(); + //koutlock.unlock(); +>>>>>>> a0bac7f (foooo) } Core::pause(); - //activeWaitDelay(1000000000); + activeWaitDelay(10000000); if(cnt >= sizeof(text)-1) cnt=0; - + context_switch(test2,test1); } }