Skip to content

Commit 586bd9e

Browse files
author
tthomps
committed
Add functions to print strings via serial port.
Add simple debugging program that can parse a map file and print functions via a stack trace. Add debug stack trace to page fault handler. In build settings, redirect Qemu's COM1 to a named pipe the debugger uses. Note: Qemu will appear locked if the debugger isn't running. Make sure all MyOS programs are generating map files and not omitting frame pointers.
1 parent 1a07d4d commit 586bd9e

27 files changed

+3984
-10
lines changed

Media/Screenshots/Debugger.png

111 KB
Loading

My-Doom

MyOS_1.sln

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,86 +21,120 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestApp2", "TestApp2\TestAp
2121
EndProject
2222
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestApp2ForWindows", "TestApp2ForWindows\TestApp2ForWindows.vcxproj", "{6BA12269-A558-4634-B51D-B61FD8143410}"
2323
EndProject
24+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SimpleDebugger", "SupportApps\SimpleDebugger\SimpleDebugger.csproj", "{5DF601CC-B794-43C6-8138-3B9ED99F2843}"
25+
EndProject
2426
Global
2527
GlobalSection(SolutionConfigurationPlatforms) = preSolution
28+
Debug|Any CPU = Debug|Any CPU
2629
Debug|x64 = Debug|x64
2730
Debug|x86 = Debug|x86
31+
Release|Any CPU = Release|Any CPU
2832
Release|x64 = Release|x64
2933
Release|x86 = Release|x86
3034
EndGlobalSection
3135
GlobalSection(ProjectConfigurationPlatforms) = postSolution
36+
{31C0B908-9659-4141-AFE2-C6B742FCA313}.Debug|Any CPU.ActiveCfg = Debug|Win32
3237
{31C0B908-9659-4141-AFE2-C6B742FCA313}.Debug|x64.ActiveCfg = Debug|x64
3338
{31C0B908-9659-4141-AFE2-C6B742FCA313}.Debug|x64.Build.0 = Debug|x64
3439
{31C0B908-9659-4141-AFE2-C6B742FCA313}.Debug|x86.ActiveCfg = Debug|Win32
3540
{31C0B908-9659-4141-AFE2-C6B742FCA313}.Debug|x86.Build.0 = Debug|Win32
41+
{31C0B908-9659-4141-AFE2-C6B742FCA313}.Release|Any CPU.ActiveCfg = Release|Win32
3642
{31C0B908-9659-4141-AFE2-C6B742FCA313}.Release|x64.ActiveCfg = Release|x64
3743
{31C0B908-9659-4141-AFE2-C6B742FCA313}.Release|x64.Build.0 = Release|x64
3844
{31C0B908-9659-4141-AFE2-C6B742FCA313}.Release|x86.ActiveCfg = Release|Win32
3945
{31C0B908-9659-4141-AFE2-C6B742FCA313}.Release|x86.Build.0 = Release|Win32
46+
{5D4E87A7-5402-4E84-B89D-6A7B42936E4D}.Debug|Any CPU.ActiveCfg = Debug|Win32
4047
{5D4E87A7-5402-4E84-B89D-6A7B42936E4D}.Debug|x64.ActiveCfg = Debug|x64
4148
{5D4E87A7-5402-4E84-B89D-6A7B42936E4D}.Debug|x64.Build.0 = Debug|x64
4249
{5D4E87A7-5402-4E84-B89D-6A7B42936E4D}.Debug|x86.ActiveCfg = Debug|Win32
4350
{5D4E87A7-5402-4E84-B89D-6A7B42936E4D}.Debug|x86.Build.0 = Debug|Win32
51+
{5D4E87A7-5402-4E84-B89D-6A7B42936E4D}.Release|Any CPU.ActiveCfg = Release|Win32
4452
{5D4E87A7-5402-4E84-B89D-6A7B42936E4D}.Release|x64.ActiveCfg = Release|x64
4553
{5D4E87A7-5402-4E84-B89D-6A7B42936E4D}.Release|x64.Build.0 = Release|x64
4654
{5D4E87A7-5402-4E84-B89D-6A7B42936E4D}.Release|x86.ActiveCfg = Release|Win32
4755
{5D4E87A7-5402-4E84-B89D-6A7B42936E4D}.Release|x86.Build.0 = Release|Win32
56+
{E20F026A-1CE2-4B40-BEA7-39E9644F3A0C}.Debug|Any CPU.ActiveCfg = Debug|Win32
4857
{E20F026A-1CE2-4B40-BEA7-39E9644F3A0C}.Debug|x64.ActiveCfg = Debug|x64
4958
{E20F026A-1CE2-4B40-BEA7-39E9644F3A0C}.Debug|x64.Build.0 = Debug|x64
5059
{E20F026A-1CE2-4B40-BEA7-39E9644F3A0C}.Debug|x86.ActiveCfg = Debug|Win32
5160
{E20F026A-1CE2-4B40-BEA7-39E9644F3A0C}.Debug|x86.Build.0 = Debug|Win32
61+
{E20F026A-1CE2-4B40-BEA7-39E9644F3A0C}.Release|Any CPU.ActiveCfg = Release|Win32
5262
{E20F026A-1CE2-4B40-BEA7-39E9644F3A0C}.Release|x64.ActiveCfg = Release|x64
5363
{E20F026A-1CE2-4B40-BEA7-39E9644F3A0C}.Release|x64.Build.0 = Release|x64
5464
{E20F026A-1CE2-4B40-BEA7-39E9644F3A0C}.Release|x86.ActiveCfg = Release|Win32
5565
{E20F026A-1CE2-4B40-BEA7-39E9644F3A0C}.Release|x86.Build.0 = Release|Win32
66+
{E287BF76-1C8A-41CE-8698-A412691721BC}.Debug|Any CPU.ActiveCfg = Debug|Win32
5667
{E287BF76-1C8A-41CE-8698-A412691721BC}.Debug|x64.ActiveCfg = Debug|x64
5768
{E287BF76-1C8A-41CE-8698-A412691721BC}.Debug|x64.Build.0 = Debug|x64
5869
{E287BF76-1C8A-41CE-8698-A412691721BC}.Debug|x86.ActiveCfg = Debug|Win32
5970
{E287BF76-1C8A-41CE-8698-A412691721BC}.Debug|x86.Build.0 = Debug|Win32
71+
{E287BF76-1C8A-41CE-8698-A412691721BC}.Release|Any CPU.ActiveCfg = Release|Win32
6072
{E287BF76-1C8A-41CE-8698-A412691721BC}.Release|x64.ActiveCfg = Release|x64
6173
{E287BF76-1C8A-41CE-8698-A412691721BC}.Release|x64.Build.0 = Release|x64
6274
{E287BF76-1C8A-41CE-8698-A412691721BC}.Release|x86.ActiveCfg = Release|Win32
6375
{E287BF76-1C8A-41CE-8698-A412691721BC}.Release|x86.Build.0 = Release|Win32
76+
{07EC26D7-871D-4847-AAC0-7A80B40B99CE}.Debug|Any CPU.ActiveCfg = Debug|Win32
6477
{07EC26D7-871D-4847-AAC0-7A80B40B99CE}.Debug|x64.ActiveCfg = Debug|x64
6578
{07EC26D7-871D-4847-AAC0-7A80B40B99CE}.Debug|x64.Build.0 = Debug|x64
6679
{07EC26D7-871D-4847-AAC0-7A80B40B99CE}.Debug|x86.ActiveCfg = Debug|Win32
6780
{07EC26D7-871D-4847-AAC0-7A80B40B99CE}.Debug|x86.Build.0 = Debug|Win32
81+
{07EC26D7-871D-4847-AAC0-7A80B40B99CE}.Release|Any CPU.ActiveCfg = Release|Win32
6882
{07EC26D7-871D-4847-AAC0-7A80B40B99CE}.Release|x64.ActiveCfg = Release|x64
6983
{07EC26D7-871D-4847-AAC0-7A80B40B99CE}.Release|x64.Build.0 = Release|x64
7084
{07EC26D7-871D-4847-AAC0-7A80B40B99CE}.Release|x86.ActiveCfg = Release|Win32
7185
{07EC26D7-871D-4847-AAC0-7A80B40B99CE}.Release|x86.Build.0 = Release|Win32
86+
{DD34D14A-8D2B-41FA-9EA5-02A5355F9BC4}.Debug|Any CPU.ActiveCfg = Debug|Win32
7287
{DD34D14A-8D2B-41FA-9EA5-02A5355F9BC4}.Debug|x64.ActiveCfg = Debug|x64
7388
{DD34D14A-8D2B-41FA-9EA5-02A5355F9BC4}.Debug|x64.Build.0 = Debug|x64
7489
{DD34D14A-8D2B-41FA-9EA5-02A5355F9BC4}.Debug|x86.ActiveCfg = Debug|Win32
7590
{DD34D14A-8D2B-41FA-9EA5-02A5355F9BC4}.Debug|x86.Build.0 = Debug|Win32
91+
{DD34D14A-8D2B-41FA-9EA5-02A5355F9BC4}.Release|Any CPU.ActiveCfg = Release|Win32
7692
{DD34D14A-8D2B-41FA-9EA5-02A5355F9BC4}.Release|x64.ActiveCfg = Release|x64
7793
{DD34D14A-8D2B-41FA-9EA5-02A5355F9BC4}.Release|x64.Build.0 = Release|x64
7894
{DD34D14A-8D2B-41FA-9EA5-02A5355F9BC4}.Release|x86.ActiveCfg = Release|Win32
7995
{DD34D14A-8D2B-41FA-9EA5-02A5355F9BC4}.Release|x86.Build.0 = Release|Win32
96+
{19CF43DA-2745-451D-B811-0A40EF43BE2F}.Debug|Any CPU.ActiveCfg = Debug|Win32
8097
{19CF43DA-2745-451D-B811-0A40EF43BE2F}.Debug|x64.ActiveCfg = Debug|x64
8198
{19CF43DA-2745-451D-B811-0A40EF43BE2F}.Debug|x64.Build.0 = Debug|x64
8299
{19CF43DA-2745-451D-B811-0A40EF43BE2F}.Debug|x86.ActiveCfg = Debug|Win32
83100
{19CF43DA-2745-451D-B811-0A40EF43BE2F}.Debug|x86.Build.0 = Debug|Win32
101+
{19CF43DA-2745-451D-B811-0A40EF43BE2F}.Release|Any CPU.ActiveCfg = Release|Win32
84102
{19CF43DA-2745-451D-B811-0A40EF43BE2F}.Release|x64.ActiveCfg = Release|x64
85103
{19CF43DA-2745-451D-B811-0A40EF43BE2F}.Release|x64.Build.0 = Release|x64
86104
{19CF43DA-2745-451D-B811-0A40EF43BE2F}.Release|x86.ActiveCfg = Release|Win32
87105
{19CF43DA-2745-451D-B811-0A40EF43BE2F}.Release|x86.Build.0 = Release|Win32
106+
{04870E40-8ABF-4BD7-AED0-3885C7F535D7}.Debug|Any CPU.ActiveCfg = Debug|Win32
88107
{04870E40-8ABF-4BD7-AED0-3885C7F535D7}.Debug|x64.ActiveCfg = Debug|x64
89108
{04870E40-8ABF-4BD7-AED0-3885C7F535D7}.Debug|x64.Build.0 = Debug|x64
90109
{04870E40-8ABF-4BD7-AED0-3885C7F535D7}.Debug|x86.ActiveCfg = Debug|Win32
91110
{04870E40-8ABF-4BD7-AED0-3885C7F535D7}.Debug|x86.Build.0 = Debug|Win32
111+
{04870E40-8ABF-4BD7-AED0-3885C7F535D7}.Release|Any CPU.ActiveCfg = Release|Win32
92112
{04870E40-8ABF-4BD7-AED0-3885C7F535D7}.Release|x64.ActiveCfg = Release|x64
93113
{04870E40-8ABF-4BD7-AED0-3885C7F535D7}.Release|x64.Build.0 = Release|x64
94114
{04870E40-8ABF-4BD7-AED0-3885C7F535D7}.Release|x86.ActiveCfg = Release|Win32
95115
{04870E40-8ABF-4BD7-AED0-3885C7F535D7}.Release|x86.Build.0 = Release|Win32
116+
{6BA12269-A558-4634-B51D-B61FD8143410}.Debug|Any CPU.ActiveCfg = Debug|Win32
96117
{6BA12269-A558-4634-B51D-B61FD8143410}.Debug|x64.ActiveCfg = Debug|x64
97118
{6BA12269-A558-4634-B51D-B61FD8143410}.Debug|x64.Build.0 = Debug|x64
98119
{6BA12269-A558-4634-B51D-B61FD8143410}.Debug|x86.ActiveCfg = Debug|Win32
99120
{6BA12269-A558-4634-B51D-B61FD8143410}.Debug|x86.Build.0 = Debug|Win32
121+
{6BA12269-A558-4634-B51D-B61FD8143410}.Release|Any CPU.ActiveCfg = Release|Win32
100122
{6BA12269-A558-4634-B51D-B61FD8143410}.Release|x64.ActiveCfg = Release|x64
101123
{6BA12269-A558-4634-B51D-B61FD8143410}.Release|x64.Build.0 = Release|x64
102124
{6BA12269-A558-4634-B51D-B61FD8143410}.Release|x86.ActiveCfg = Release|Win32
103125
{6BA12269-A558-4634-B51D-B61FD8143410}.Release|x86.Build.0 = Release|Win32
126+
{5DF601CC-B794-43C6-8138-3B9ED99F2843}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
127+
{5DF601CC-B794-43C6-8138-3B9ED99F2843}.Debug|Any CPU.Build.0 = Debug|Any CPU
128+
{5DF601CC-B794-43C6-8138-3B9ED99F2843}.Debug|x64.ActiveCfg = Debug|Any CPU
129+
{5DF601CC-B794-43C6-8138-3B9ED99F2843}.Debug|x64.Build.0 = Debug|Any CPU
130+
{5DF601CC-B794-43C6-8138-3B9ED99F2843}.Debug|x86.ActiveCfg = Debug|Any CPU
131+
{5DF601CC-B794-43C6-8138-3B9ED99F2843}.Debug|x86.Build.0 = Debug|Any CPU
132+
{5DF601CC-B794-43C6-8138-3B9ED99F2843}.Release|Any CPU.ActiveCfg = Release|Any CPU
133+
{5DF601CC-B794-43C6-8138-3B9ED99F2843}.Release|Any CPU.Build.0 = Release|Any CPU
134+
{5DF601CC-B794-43C6-8138-3B9ED99F2843}.Release|x64.ActiveCfg = Release|Any CPU
135+
{5DF601CC-B794-43C6-8138-3B9ED99F2843}.Release|x64.Build.0 = Release|Any CPU
136+
{5DF601CC-B794-43C6-8138-3B9ED99F2843}.Release|x86.ActiveCfg = Release|Any CPU
137+
{5DF601CC-B794-43C6-8138-3B9ED99F2843}.Release|x86.Build.0 = Release|Any CPU
104138
EndGlobalSection
105139
GlobalSection(SolutionProperties) = preSolution
106140
HideSolutionNode = FALSE

MyOS_1/Build_Number.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@
33
// Define a build number. This number will be incremented by a simple console program called by a post-build event
44
// It's put here in its own file to keep the other program from messing up the source
55
#define \
6-
BUILD_NUMBER 6354
6+
BUILD_NUMBER 6401

MyOS_1/Console_Serial.c

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
#include "Console_Serial.h"
22
#include "System_Specific.h"
3+
#include "printf.h"
34

45
#ifndef USE_SERIAL
56
void init_serial() {}
6-
/*int serial_received() {}
7-
char read_serial() {}
8-
int is_transmit_empty() {}*/
7+
int serial_received() { return false; }
8+
char read_serial() { return '\0'; }
9+
int is_transmit_empty() { return true; }
10+
int sprintf(char *messageFormat, ...) { return 0; }
911
void write_serial(char a) {}
12+
void write_serial_string(const char *str) {}
1013
#endif
1114

1215
#ifdef USE_SERIAL
@@ -34,9 +37,30 @@ int is_transmit_empty() {
3437
return inb(PORT + 5) & 0x20;
3538
}
3639

40+
int serial_printf(char *messageFormat, ...)
41+
{
42+
char buffer[128] = { 0 };
43+
va_list va;
44+
va_start(va, messageFormat);
45+
const int ret = vsnprintf(buffer, 128, messageFormat, va);
46+
47+
write_serial_string(buffer);
48+
va_end(va);
49+
50+
return ret;
51+
}
52+
3753
void write_serial(char a) {
3854
while (is_transmit_empty() == 0);
3955

4056
outb(PORT, a);
4157
}
58+
59+
void write_serial_string(const char *str)
60+
{
61+
int len = strlen(str);
62+
for (int i = 0; i < len; ++i)
63+
write_serial(str[i]);
64+
}
65+
4266
#endif

MyOS_1/Console_Serial.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,8 @@ char read_serial();
1313

1414
int serial_received();
1515

16+
int serial_printf(char *messageFormat, ...);
17+
1618
void write_serial(char a);
19+
20+
void write_serial_string(const char *str);

MyOS_1/Console_Shell.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
#include "Drivers\Keyboard.h"
3232
#include "../MyOS_GUI_Shell/GUI_Kernel_Shell.h"
3333
#include "Drivers/IDE.h"
34+
#include "Debugging/Debug.h"
3435

3536
int inputPosition = 0;
3637
#define COMMAND_HISTORY_SIZE 10
@@ -502,6 +503,13 @@ void Shell_Process_command(void)
502503
return;
503504
}
504505

506+
// Test stack trace
507+
if (strcmp(currentCommand, "bt") == 0)
508+
{
509+
DebugStackTrace(6);
510+
return;
511+
}
512+
505513
// Test memory allocation
506514
if (strcmp(currentCommand, "mem") == 0)
507515
{

MyOS_1/Debugging/Debug.c

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#include "Debug.h"
2+
#include "../printf.h"
3+
#include "../Tasks/Context.h"
4+
#include "../Console_Serial.h"
5+
6+
// This is meant to be used with the debugger support app, custom for MyOS
7+
void DebugStackTrace(unsigned int MaxFrames)
8+
{
9+
STACK_FRAME *pStackFrame;
10+
__asm mov pStackFrame, ebp
11+
12+
serial_printf("Stack trace:\n%s\n", tasks[currentTask].imageName);
13+
14+
for (unsigned int frame = 0; pStackFrame && frame < MaxFrames; ++frame)
15+
{
16+
// Unwind to previous stack frame
17+
serial_printf("0x%X\n", pStackFrame->eip);
18+
pStackFrame = pStackFrame->ebp;
19+
}
20+
}

MyOS_1/Debugging/Debug.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#pragma once
2+
3+
#include <stdint.h>
4+
5+
typedef struct STACK_FRAME
6+
{
7+
struct STACK_FRAME* ebp;
8+
uint32_t eip;
9+
}STACK_FRAME;
10+
11+
void DebugStackTrace(unsigned int MaxFrames);

MyOS_1/Interrupts/Interrupts.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include "../Tasks/Context.h"
1616
#include "../Drivers/PS2_Mouse.h"
1717
#include "../GUI_Kernel.h"
18+
#include "../Debugging/Debug.h"
1819

1920
unsigned long interrupts_fired;
2021

@@ -609,6 +610,8 @@ void _declspec(naked) page_fault_handler(void)
609610

610611
kprintf("Memory address accessed: 0x%lX\n", __readcr2());
611612

613+
DebugStackTrace(10);
614+
612615
terminal_writestring("System halted.\n");
613616

614617
for (;;)

MyOS_1/MyOS_1.vcxproj

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,9 +217,10 @@
217217
<RandomizedBaseAddress>true</RandomizedBaseAddress>
218218
<FixedBaseAddress>false</FixedBaseAddress>
219219
<NoEntryPoint>true</NoEntryPoint>
220+
<MapExports>true</MapExports>
220221
</Link>
221222
<PostBuildEvent>
222-
<Command>"C:\Program Files\qemu\qemu-system-x86_64w.exe" -soundhw sb16,adlib -monitor stdio -netdev user,id=u1,tftp="C:\Users\Administrator\.VirtualBox\TFTP" -device virtio-net,netdev=u1 -kernel "$(TargetPath)" -object filter-dump,id=f1,netdev=u1,file="C:\Program Files\qemu\dump.dat" -accel hax &amp;&amp; "C:\Users\Administrator\Documents\Visual Studio 2015\Projects\AutoIncrementBuild\Release\AutoIncrementBuild.exe"</Command>
223+
<Command>"C:\Program Files\qemu\qemu-system-x86_64w.exe" -serial pipe:MyOS_PIPE -soundhw sb16,adlib -monitor stdio -netdev user,id=u1,tftp="C:\Users\Administrator\.VirtualBox\TFTP" -device virtio-net,netdev=u1 -kernel "$(TargetPath)" -object filter-dump,id=f1,netdev=u1,file="C:\Program Files\qemu\dump.dat" -accel hax &amp;&amp; "C:\Users\Administrator\Documents\Visual Studio 2015\Projects\AutoIncrementBuild\Release\AutoIncrementBuild.exe"</Command>
223224
</PostBuildEvent>
224225
<PostBuildEvent>
225226
<Message>Launching QEMU</Message>
@@ -277,6 +278,7 @@
277278
<CallingConvention Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Cdecl</CallingConvention>
278279
<CallingConvention Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Cdecl</CallingConvention>
279280
</ClCompile>
281+
<ClCompile Include="Debugging\Debug.c" />
280282
<ClCompile Include="Drivers\AdLib.c" />
281283
<ClCompile Include="Drivers\Bochs_VGA.c" />
282284
<ClCompile Include="Drivers\e1000.c" />
@@ -330,6 +332,7 @@
330332
<ClInclude Include="Console_Serial.h" />
331333
<ClInclude Include="Console_Shell.h" />
332334
<ClInclude Include="Console_VGA.h" />
335+
<ClInclude Include="Debugging\Debug.h" />
333336
<ClInclude Include="Drivers\AdLib.h" />
334337
<ClInclude Include="Drivers\Bochs_VGA.h" />
335338
<ClInclude Include="Drivers\e1000.h" />

MyOS_1/MyOS_1.vcxproj.filters

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,12 @@
7070
<Filter Include="Source Files\GUI">
7171
<UniqueIdentifier>{ed1bb142-e86a-48ef-85ae-82740aea315c}</UniqueIdentifier>
7272
</Filter>
73+
<Filter Include="Header Files\Debugging">
74+
<UniqueIdentifier>{3b619734-27a0-45df-8fc4-302973758206}</UniqueIdentifier>
75+
</Filter>
76+
<Filter Include="Source Files\Debugging">
77+
<UniqueIdentifier>{3ff4899d-7636-427e-b059-139fe21daa2e}</UniqueIdentifier>
78+
</Filter>
7379
</ItemGroup>
7480
<ItemGroup>
7581
<ClCompile Include="paging.c">
@@ -213,6 +219,9 @@
213219
<ClCompile Include="Drivers\IDE.c">
214220
<Filter>Source Files\Drivers</Filter>
215221
</ClCompile>
222+
<ClCompile Include="Debugging\Debug.c">
223+
<Filter>Source Files\Debugging</Filter>
224+
</ClCompile>
216225
</ItemGroup>
217226
<ItemGroup>
218227
<ClInclude Include="misc.h">
@@ -362,6 +371,9 @@
362371
<ClInclude Include="Drivers\IDE.h">
363372
<Filter>Header Files\Drivers</Filter>
364373
</ClInclude>
374+
<ClInclude Include="Debugging\Debug.h">
375+
<Filter>Header Files\Debugging</Filter>
376+
</ClInclude>
365377
</ItemGroup>
366378
<ItemGroup>
367379
<Text Include="Referenced_Reading.txt">

MyOS_1/main.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ void KeStartupPhase2(multiboot_info *multibootInfo)
137137

138138
// Say Hello
139139
terminal_writestring("Hello world!\n");
140+
write_serial_string("\nHello world!\n");
140141
kprintf("Welcome to My OS (working title) build %d\n", BUILD_NUMBER);
141142

142143
if (debugLevel)

MyOS_1/myos_io.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ typedef struct OPEN_FILES
2727
bool readOnly[MAX_FILES];
2828
bool isOpen[MAX_FILES];
2929
uint8_t *buffer[MAX_FILES];
30+
uint32_t taskIndex[MAX_FILES];
3031
} OPEN_FILES;
3132

3233

0 commit comments

Comments
 (0)