File tree 7 files changed +818
-474
lines changed
7 files changed +818
-474
lines changed Original file line number Diff line number Diff line change 1
1
#include " syscall.h"
2
2
3
3
void printf (char *);
4
+ void printfchar (char );
4
5
PowerControl syscontrol;
5
6
7
+ inline GlobalDescriptorTable gdt;
8
+ void taskA ();
9
+ void taskB ();
10
+
11
+ Task tsk1 (&gdt, taskA);
12
+ Task tsk2 (&gdt, taskB);
13
+
6
14
SyscallHandler::SyscallHandler (InterruptManager* interruptManager, uint8_t InterruptNumber)
7
15
:InterruptHandler(InterruptNumber + interruptManager->HardwareInterruptOffset (), interruptManager)
8
16
{
17
+ taskManager.AddTask (&tsk1);
18
+ taskManager.AddTask (&tsk2);
9
19
}
10
20
11
21
SyscallHandler::~SyscallHandler ()
@@ -19,14 +29,22 @@ uint32_t SyscallHandler::HandleInterrupt(uint32_t esp)
19
29
20
30
switch (cpu->eax )
21
31
{
22
- case 1 : // sys_print
32
+ case 1 : // sys_printf
23
33
printf ((char *)cpu->ebx );
24
34
break ;
25
35
26
- case 2 : // sys_reboot
36
+ case 2 : // sys_printc
37
+ printfchar ((char )cpu->ebx );
38
+ break ;
39
+
40
+ case 3 : // sys_reboot
27
41
syscontrol.reboot ();
28
42
break ;
29
43
44
+ case 4 : // sys_cng_task
45
+ esp = (uint32_t )taskManager.SwitchTask ((int )cpu->ebx , (CPUState*)esp);
46
+ break ;
47
+
30
48
default :
31
49
break ;
32
50
}
Original file line number Diff line number Diff line change 4
4
#include " ../Include/types.h"
5
5
#include " Interrupts.h"
6
6
#include " PowerControl.h"
7
+ #include " ../kernel/MultiTask.h"
7
8
8
9
class SyscallHandler : public InterruptHandler
9
10
{
11
+ TaskManager taskManager;
10
12
public:
11
13
SyscallHandler (InterruptManager* interruptManager, uint8_t InterruptNumber);
12
14
~SyscallHandler ();
Original file line number Diff line number Diff line change @@ -12,7 +12,7 @@ char* INTTOCHARPOINT(int num);
12
12
void ColourPrint (int type);
13
13
bool txtcolor;
14
14
bool isESPChanged = false ;
15
- GlobalDescriptorTable gdt;
15
+ inline GlobalDescriptorTable gdt;
16
16
void taskA ();
17
17
void taskB ();
18
18
const void * mb;
@@ -54,10 +54,6 @@ CommandPort(0x64)
54
54
clear_key_buffer ();
55
55
isTxtMode = false ;
56
56
this ->shell = shell;
57
- Task task1 (&gdt, taskA);
58
- Task task2 (&gdt, taskB);
59
- taskManager.AddTask (&task1);
60
- taskManager.AddTask (&task2);
61
57
62
58
for (int i = 0 ; i < 30 ; i++)
63
59
{
@@ -497,10 +493,10 @@ void KeyboardDriver::CommandInterpreter() // SOSH v1.0.3 [SectorOS SHell]. 11 Co
497
493
}
498
494
else if (key_buffer[0 ] == " t" && key_buffer[1 ] == " s" && key_buffer[2 ] == " k" )
499
495
{
500
- esp1 = ( uint32_t )taskManager. Schedule ((CPUState*)esp1);
501
- printf ( " esp1 is : " ); printHex (esp1); printf ( " \n " ) ;
502
- printf ( " esp2 is : " ); printHex (esp2 );
503
- isESPChanged = true ;
496
+ char * arg1 = key_buffer[ 4 ];
497
+ int tsknum = arg1[ 0 ] - ' 0 ' ;
498
+ asm ( " int $0x80 " : : " a " ( 0x04 ), " b " (tsknum) );
499
+ // asm("int $0x80" : : "a" (0x05)) ;
504
500
}
505
501
else if (key_buffer[0 ] == " e" && key_buffer[1 ] == " x" && key_buffer[2 ] == " p" && key_buffer[3 ] == " o" && key_buffer[4 ] == " r" && key_buffer[5 ] == " t" )
506
502
{
Original file line number Diff line number Diff line change 4
4
inline char * OS_NAME = "SectorOS" ;
5
5
6
6
inline char * KERNEL_NAME = "SectorOS" ;
7
- inline char * KERNEL_VERSION = "V2.1.6 " ;
8
- inline char * KERNEL_BUILD = "Build: 2021-12-11 " ;
7
+ inline char * KERNEL_VERSION = "V2.2.1 " ;
8
+ inline char * KERNEL_BUILD = "Build: 2022-01-06 " ;
9
9
inline char * KERNEL_ARCH = "x86" ;
10
10
11
11
inline char * SHELL_NAME = "SOSH" ;
12
- inline char * SHELL_VER = "V1.1.2 " ;
12
+ inline char * SHELL_VER = "V1.1.3 " ;
13
13
14
14
// START Environment variables
15
15
inline char * SP [30 ]; // Shell Prompt
Original file line number Diff line number Diff line change @@ -64,4 +64,11 @@ CPUState* TaskManager::Schedule(CPUState* cpustate)
64
64
if (++currentTask >= numTasks)
65
65
currentTask %= numTasks;
66
66
return tasks[currentTask]->cpustate ;
67
+ }
68
+
69
+ CPUState* TaskManager::SwitchTask (int tasknum, CPUState* CSTATE)
70
+ {
71
+ if (tasknum >= numTasks)
72
+ return tasks[tasknum]->cpustate ;
73
+ return tasks[tasknum]->cpustate ;
67
74
}
Original file line number Diff line number Diff line change @@ -48,6 +48,7 @@ class TaskManager
48
48
TaskManager ();
49
49
~TaskManager ();
50
50
bool AddTask (Task* task);
51
+ CPUState* SwitchTask (int tasknum, CPUState* CSTATE);
51
52
CPUState* Schedule (CPUState* cpustate);
52
53
};
53
54
You can’t perform that action at this time.
0 commit comments