diff --git a/include/io/spkr.h b/include/io/spkr.h index 760928a..e1f8514 100644 --- a/include/io/spkr.h +++ b/include/io/spkr.h @@ -38,6 +38,12 @@ void IoDoBeepNoIdt(void); void IoDoStarWars(void); +struct Note +{ + uint tone; + uint time; +}; + //----------------------------------------------------------------------------// #endif diff --git a/kaleid/kernel/io/spkr.c b/kaleid/kernel/io/spkr.c index 74488e9..c2a4fce 100644 --- a/kaleid/kernel/io/spkr.c +++ b/kaleid/kernel/io/spkr.c @@ -28,6 +28,18 @@ extern bool KeIdtIsInitialized; +const struct Note score[40] = { {440, 200}, {110, 200}, {440, 200}, {110, 200}, + {440, 200}, {110, 200}, {349, 140}, {87, 100}, + {523, 60}, {87, 100}, {440, 200}, {110, 200}, + {349, 140}, {87, 100}, {523, 60}, {87, 100}, + {440, 200}, {110, 200}, {440, 200}, {110, 200}, + {659, 200}, {110, 200}, {659, 200}, {110, 200}, + {659, 200}, {87, 200}, {698, 140}, {87, 100}, + {523, 60}, {87, 100}, {415, 200}, {87, 200}, + {349, 140}, {87, 100}, {523, 60}, {87, 100}, + {440, 200}, {110, 200}, {110, 200}, {110, 200} +}; + void IoStartSpeaker(int freq) { uchar temp; @@ -81,28 +93,10 @@ void IoDoBeepNoIdt(void) void IoDoStarWars(void) { - struct Note { - uint tone; - uint time; - }; - - const struct Note score[40] = { {440, 200}, {110, 200}, {440, 200}, {110, 200}, - {440, 200}, {110, 200}, {349, 140}, {87, 100}, - {523, 60}, {87, 100}, {440, 200}, {110, 200}, - {349, 140}, {87, 100}, {523, 60}, {87, 100}, - {440, 200}, {110, 200}, {440, 200}, {110, 200}, - {659, 200}, {110, 200}, {659, 200}, {110, 200}, - {659, 200}, {87, 200}, {698, 140}, {87, 100}, - {523, 60}, {87, 100}, {415, 200}, {87, 200}, - {349, 140}, {87, 100}, {523, 60}, {87, 100}, - {440, 200}, {110, 200}, {110, 200}, {110, 200} - }; - - bprintf(BStdOut, "Address of the score : %p\n", &score[37]); - for (uint i = 0; i < 40; i++) { //IoDoTone(score[i].tone, score[i].time); - bprintf(BStdOut, "%d ", score[i].time); + bprintf(BStdOut, "At %p : %u\n", &(score[i].tone), score[i].tone); + bprintf(BStdOut, "At %p : %u\n", &(score[i].time), score[i].time); BStdOut->flusher(BStdOut); } IoQuietSpeaker(); diff --git a/kaleid/kernel/mm/paging.c b/kaleid/kernel/mm/paging.c index a244181..a513d3a 100644 --- a/kaleid/kernel/mm/paging.c +++ b/kaleid/kernel/mm/paging.c @@ -83,17 +83,17 @@ void MmInitPaging(void) // RODATA if ((ulong)(i*KPAGESIZE) >= (ulong)&_rodata && (ulong)(i*KPAGESIZE) <= (ulong)&_rodata_end) { - MmPT[i] = ((ulong)(i*KPAGESIZE)) | MF_PRESENT; + MmPT[i] = ((ulong)(i*KPAGESIZE)) | MF_PRESENT | MF_WRITETHR; continue; } // DATA if ((ulong)(i*KPAGESIZE) >= (ulong)&_data && (ulong)(i*KPAGESIZE) <= (ulong)&_data_end) { - MmPT[i] = ((ulong)(i*KPAGESIZE)) | MF_PRESENT | MF_READWRITE; + MmPT[i] = ((ulong)(i*KPAGESIZE)) | MF_PRESENT | MF_WRITETHR | MF_READWRITE; continue; } - MmPT[i] = ((ulong)(i*KPAGESIZE)) | MF_PRESENT | MF_READWRITE; + MmPT[i] = ((ulong)(i*KPAGESIZE)) | MF_PRESENT | MF_WRITETHR | MF_READWRITE; } for (volatile ulong i = 0; i < NB_4K; i++) { @@ -117,10 +117,9 @@ void MmInitPaging(void) MmPML4[0] = (ulong)(&MmPDP[0])| MF_PRESENT | MF_READWRITE; MmLoadPML4((void *)MmPML4); - /* DebugLog("Read only : %p\n", (ulong)&_text); */ - /* DebugLog("Read only : %p\n", (ulong)&_text_end); */ - /* DebugLog("Read only : %p\n", (ulong)&_rodata); */ - /* DebugLog("Read only : %p\n", (ulong)&_rodata_end); */ + MmEnableWriteProtect(); + DebugLog("\tPage RO from %p to %p\n", (ulong)&_text, (ulong)&_text_end); + DebugLog("\tPage RO from %p to %p\n", (ulong)&_rodata, (ulong)&_rodata_end); //DebugLog("\tPaging tables initialized at %p, %p\n", &MmPD, &MmPT); //DebugLog("\tStack Guards at %p, %p\n", MmStackGuards[0], MmStackGuards[1]); } diff --git a/kaleid/kernel/sh/testcmds.c b/kaleid/kernel/sh/testcmds.c index 8b9cb66..9a8732b 100644 --- a/kaleid/kernel/sh/testcmds.c +++ b/kaleid/kernel/sh/testcmds.c @@ -155,11 +155,13 @@ error_t CmdHelpTest(int argc, char **argv, char *cmdline) error_t CmdPF(int argc, char **argv, char *cmdline) { - char *address = (void*)(ulong)atoi(argv[1]); + ulong *address = (ulong*)(ulong)atoi(argv[1]); KernLog("Provoking Page Fault at %#x\n", address); + KernLog("It contained %#x\n", *address); *address = 1; + KernLog("Now it contains %#x\n", *address); KernLog("No page fault : address was valid/present\n"); @@ -203,6 +205,26 @@ error_t CmdTimerTest(int argc, char **argv, char *cmdline) return EOK; } +error_t CmdprintfTest(int argc, char **argv, char *cmdline) +{ + /* bprintf(BStdOut, "INT_MIN : %u\n", INT_MIN); */ + /* BStdOut->flusher(BStdOut); */ + bprintf(BStdOut, "INT_MAX : %u\n", INT_MAX); + BStdOut->flusher(BStdOut); + + int n = - 5; + + for (int i=INT_MAX - 5; n < 10; i++) { + bprintf(BStdOut, "INT_MAX + %d : %d\n", n, i); + BStdOut->flusher(BStdOut); + n++; + } + + KernLog("Finished !\n"); + + return EOK; +} + static Command_t testcmdtable[] = { { "args", CmdArgs, "Print command line" }, @@ -215,5 +237,6 @@ static Command_t testcmdtable[] = { "stkov", CmdStackOverflow, "Provoke a stack overflow" }, { "stkun", CmdStackUnderflow, "Provoke a stack underflow" }, { "timer", CmdTimerTest, "test timer of x ms" }, + { "printf", CmdprintfTest, "test timer of x ms" }, { NULL, NULL, NULL } };