diff --git a/core/panic/ui.cpp b/core/panic/ui.cpp
index 114c6b6..74610cd 100644
--- a/core/panic/ui.cpp
+++ b/core/panic/ui.cpp
@@ -156,7 +156,7 @@ nsa void ExDumpData(void *Address, unsigned long Length)
Display->UpdateBuffer();
}
ExPrint(" \e4287f5%02x\eAABBCC", AddressChar[Iterate]);
- if ((AddressChar[Iterate] < 0x20) || (AddressChar[Iterate] > 0x7e))
+ if ((AddressChar[Iterate] < 0x20) || (AddressChar[Iterate] > 0x7E))
Buffer[Iterate % 16] = '.';
else
Buffer[Iterate % 16] = AddressChar[Iterate];
diff --git a/kshell/cmds.hpp b/kshell/cmds.hpp
index 8d78bdb..c33a519 100644
--- a/kshell/cmds.hpp
+++ b/kshell/cmds.hpp
@@ -43,6 +43,7 @@ void cmd_lsacpi(const char *args);
void cmd_lsmod(const char *args);
void cmd_modinfo(const char *args);
void cmd_panic(const char *args);
+void cmd_dump(const char *args);
#define IF_ARG(x) strcmp(args, x) == 0
diff --git a/kshell/commands/dump.cpp b/kshell/commands/dump.cpp
new file mode 100644
index 0000000..3218e9a
--- /dev/null
+++ b/kshell/commands/dump.cpp
@@ -0,0 +1,77 @@
+/*
+ This file is part of Fennix Kernel.
+
+ Fennix Kernel is free software: you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of
+ the License, or (at your option) any later version.
+
+ Fennix Kernel is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Fennix Kernel. If not, see .
+*/
+
+#include "../cmds.hpp"
+
+#include
+#include
+
+#include "../../kernel.h"
+
+using namespace vfs;
+
+void cmd_dump(const char *args)
+{
+ if (args[0] == '\0')
+ return;
+
+ // args == "0xdeadbeef 512" aka "address size"
+
+ char *strAddr = (char *)args;
+ char *strLen = (char *)args;
+ while (*strLen != ' ')
+ strLen++;
+ *strLen = '\0';
+ strLen++;
+
+ void *Address = (void *)strtoul(strAddr, nullptr, 16);
+ unsigned long Length = strtoul(strLen, nullptr, 10);
+
+ {
+ unsigned char *AddressChar = (unsigned char *)Address;
+ unsigned char Buffer[17];
+ uint32_t Iterate;
+
+ printf("Dumping %lu bytes from %#lx\n", Length, (uintptr_t)AddressChar);
+
+ for (Iterate = 0; Iterate < (uint32_t)Length; Iterate++)
+ {
+ if ((Iterate % 16) == 0)
+ {
+ if (Iterate != 0)
+ printf(" %s\n", Buffer);
+ printf(" %04x ", Iterate);
+ }
+
+ printf(" %02x", AddressChar[Iterate]);
+
+ if ((AddressChar[Iterate] < 0x20) || (AddressChar[Iterate] > 0x7E))
+ Buffer[Iterate % 16] = '.';
+ else
+ Buffer[Iterate % 16] = AddressChar[Iterate];
+
+ Buffer[(Iterate % 16) + 1] = '\0';
+ }
+
+ while ((Iterate % 16) != 0)
+ {
+ printf(" ");
+ Iterate++;
+ }
+ putchar('\n');
+ }
+}
\ No newline at end of file
diff --git a/kshell/shell.cpp b/kshell/shell.cpp
index 67aa31b..e275917 100644
--- a/kshell/shell.cpp
+++ b/kshell/shell.cpp
@@ -78,6 +78,7 @@ static Command commands[] = {
{"modprobe", nullptr},
{"depmod", nullptr},
{"panic", cmd_panic},
+ {"dump", cmd_dump},
};
void StartKernelShell()