We work to earn the right to work over here...
This commit is contained in:
parent
994dc65831
commit
b3087a2b64
2
.ccls
2
.ccls
@ -4,3 +4,5 @@ clang
|
|||||||
%c -fno-builtin
|
%c -fno-builtin
|
||||||
%c -D__I686
|
%c -D__I686
|
||||||
%c -D__XTENSA
|
%c -D__XTENSA
|
||||||
|
%c -D__AARCH64
|
||||||
|
%c -D__LAYOUT_QWERTY
|
||||||
@ -21,7 +21,8 @@ Serial is mostly used as a debug output (In the future this will be able to be e
|
|||||||
#### Note: Kernel is currently under very heavy development. All things are subject to change at any time.
|
#### Note: Kernel is currently under very heavy development. All things are subject to change at any time.
|
||||||
|
|
||||||
## Building
|
## Building
|
||||||
Run `./build.i686` inside main directory of repo, however you may first need to run `make toolchain TARGET=i686-elf` (you can also build for `xtensa-esp32-elf`) i would DEFINITELY use more than one job (building GCC takes forever)
|
Run `./build.i686` inside main directory of repo, however you may first need to run `make toolchain TARGET=i686-elf` (you can also build for `armv7-elf`) i would DEFINITELY use more than one job (building GCC takes forever)
|
||||||
|
Theres also Xtensa Support being worked on, but its currently non-functional
|
||||||
|
|
||||||
To write to a disk, use `./write.sh` just enter a disk in at the prompt and it will build & flash nanite to it (ex. `/dev/sdb`)
|
To write to a disk, use `./write.sh` just enter a disk in at the prompt and it will build & flash nanite to it (ex. `/dev/sdb`)
|
||||||
You could also run `make all` but the scripts a bit better tbh, it even automates starting QEMU and building an image.
|
You could also run `make all` but the scripts a bit better tbh, it even automates starting QEMU and building an image.
|
||||||
|
|||||||
101
build.aarch64
Executable file
101
build.aarch64
Executable file
@ -0,0 +1,101 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
echo --------
|
||||||
|
echo STARTING
|
||||||
|
echo --------
|
||||||
|
read -p "Do you want to clean old build files? (y/n) " yn
|
||||||
|
|
||||||
|
case $yn in
|
||||||
|
y )
|
||||||
|
|
||||||
|
echo ---------------------------;
|
||||||
|
echo Removing Old Build Files...;
|
||||||
|
echo ---------------------------;
|
||||||
|
|
||||||
|
make -j24 clean;
|
||||||
|
echo -----;
|
||||||
|
echo Done!;
|
||||||
|
echo -----;
|
||||||
|
;;
|
||||||
|
n )
|
||||||
|
echo ---------;
|
||||||
|
echo Proceding;
|
||||||
|
echo ---------;
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
echo ------------
|
||||||
|
echo COMPILING OS
|
||||||
|
echo ------------
|
||||||
|
|
||||||
|
make TARGET=aarch64-elf TARGET_DEFINE=__AARCH64 TARGET_ASM=aarch64-elf-as -j24 -s
|
||||||
|
|
||||||
|
echo ---------
|
||||||
|
echo Finished!
|
||||||
|
echo ---------
|
||||||
|
read -p "Do you want to make to make a bootable image? [Requires sudo] (y/n) " yn
|
||||||
|
case $yn in
|
||||||
|
y)
|
||||||
|
echo ----------------
|
||||||
|
echo Installing GRUB!
|
||||||
|
echo ----------------
|
||||||
|
|
||||||
|
sudo losetup -d /dev/loop969
|
||||||
|
dd if=/dev/zero of=build/main.img bs=512 count=50000
|
||||||
|
mkdir -p build/mnt
|
||||||
|
sudo losetup -P /dev/loop969 build/main.img
|
||||||
|
sudo parted /dev/loop969 mktable msdos
|
||||||
|
sudo parted /dev/loop969 mkpart primary fat16 2048s 100%
|
||||||
|
sudo parted /dev/loop969p1 set 1 boot on
|
||||||
|
sudo mkfs.fat -F16 /dev/loop969p1
|
||||||
|
sudo mount /dev/loop969p1 build/mnt
|
||||||
|
sudo mkdir build/mnt/boot
|
||||||
|
sudo mkdir build/mnt/boot/grub
|
||||||
|
sudo mkdir build/mnt/misc
|
||||||
|
sudo mkdir build/mnt/misc/src
|
||||||
|
sudo cp -r src/* build/mnt/src
|
||||||
|
sudo cp -r grub/* build/mnt/boot/grub
|
||||||
|
sudo cp build/nanite.bin build/mnt/boot/nanite
|
||||||
|
sudo grub-install \
|
||||||
|
--install-modules="part_msdos gettext all_video gfxterm png normal echo multiboot2" \
|
||||||
|
--boot-directory=build/mnt/boot \
|
||||||
|
--target=i386-pc \
|
||||||
|
--bootloader-id=GRUB \
|
||||||
|
/dev/loop969 -v
|
||||||
|
sudo umount build/mnt
|
||||||
|
sudo losetup -d /dev/loop969
|
||||||
|
|
||||||
|
;;
|
||||||
|
n ) echo exiting...;
|
||||||
|
exit;;
|
||||||
|
* ) echo invalid response;
|
||||||
|
exit 1;;
|
||||||
|
esac
|
||||||
|
echo ---------
|
||||||
|
echo Finished!
|
||||||
|
echo ---------
|
||||||
|
|
||||||
|
read -p "Do you want to Start QEMU? (y/n) " yn
|
||||||
|
|
||||||
|
case $yn in
|
||||||
|
y )
|
||||||
|
echo -------------
|
||||||
|
echo STARTING QEMU
|
||||||
|
echo -------------
|
||||||
|
qemu-system-i386 \
|
||||||
|
-chardev pty,id=serial1 \
|
||||||
|
-serial mon:stdio \
|
||||||
|
-serial chardev:serial1 \
|
||||||
|
-audiodev pa,id=speaker \
|
||||||
|
-machine pcspk-audiodev=speaker \
|
||||||
|
-hda build/main.img \
|
||||||
|
-m size=16M
|
||||||
|
echo --------
|
||||||
|
echo Finshed!
|
||||||
|
echo --------
|
||||||
|
|
||||||
|
;;
|
||||||
|
n ) echo exiting...;
|
||||||
|
exit;;
|
||||||
|
* ) echo invalid response;
|
||||||
|
exit 1;;
|
||||||
|
esac
|
||||||
|
|
||||||
18
build.i686
18
build.i686
@ -38,15 +38,15 @@ case $yn in
|
|||||||
echo Installing GRUB!
|
echo Installing GRUB!
|
||||||
echo ----------------
|
echo ----------------
|
||||||
|
|
||||||
sudo losetup -d /dev/loop969
|
sudo losetup -d /dev/loop900
|
||||||
dd if=/dev/zero of=build/main.img bs=512 count=50000
|
dd if=/dev/zero of=build/main.img bs=512 count=50000
|
||||||
mkdir -p build/mnt
|
mkdir -p build/mnt
|
||||||
sudo losetup -P /dev/loop969 build/main.img
|
sudo losetup -P /dev/loop900 build/main.img
|
||||||
sudo parted /dev/loop969 mktable msdos
|
sudo parted /dev/loop900 mktable msdos
|
||||||
sudo parted /dev/loop969 mkpart primary fat16 2048s 100%
|
sudo parted /dev/loop900 mkpart primary fat16 2048s 100%
|
||||||
sudo parted /dev/loop969p1 set 1 boot on
|
sudo parted /dev/loop900p1 set 1 boot on
|
||||||
sudo mkfs.fat -F16 /dev/loop969p1
|
sudo mkfs.fat -F16 /dev/loop900p1
|
||||||
sudo mount /dev/loop969p1 build/mnt
|
sudo mount /dev/loop900p1 build/mnt
|
||||||
sudo mkdir build/mnt/boot
|
sudo mkdir build/mnt/boot
|
||||||
sudo mkdir build/mnt/boot/grub
|
sudo mkdir build/mnt/boot/grub
|
||||||
sudo mkdir build/mnt/misc
|
sudo mkdir build/mnt/misc
|
||||||
@ -59,9 +59,9 @@ case $yn in
|
|||||||
--boot-directory=build/mnt/boot \
|
--boot-directory=build/mnt/boot \
|
||||||
--target=i386-pc \
|
--target=i386-pc \
|
||||||
--bootloader-id=GRUB \
|
--bootloader-id=GRUB \
|
||||||
/dev/loop969 -v
|
/dev/loop900 -v
|
||||||
sudo umount build/mnt
|
sudo umount build/mnt
|
||||||
sudo losetup -d /dev/loop969
|
sudo losetup -d /dev/loop900
|
||||||
|
|
||||||
;;
|
;;
|
||||||
n ) echo exiting...;
|
n ) echo exiting...;
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
TARGET_DEFINE = __I686
|
TARGET_DEFINE = __I686
|
||||||
|
KEYBOARD_LAYOUT = QWERTY
|
||||||
TARGET_ASMFLAGS += -f elf
|
TARGET_ASMFLAGS += -f elf
|
||||||
TARGET_CFLAGS += -ffreestanding -nostdlib -I. -D$(TARGET_DEFINE)
|
TARGET_CFLAGS += -ffreestanding -nostdlib -I. -D$(TARGET_DEFINE) -D__LAYOUT_$(KEYBOARD_LAYOUT)
|
||||||
TARGET_LIBS += -lgcc
|
TARGET_LIBS += -lgcc
|
||||||
TARGET_LINKFLAGS += -T linker.ld -nostdlib
|
TARGET_LINKFLAGS += -T linker.ld -nostdlib
|
||||||
|
|
||||||
@ -25,7 +26,12 @@ SOURCES_ASM_i686-elf = $(wildcard arch/i686/*.asm)
|
|||||||
HEADERS_ASM_xtensa-esp32-elf = $(wildcard arch/xtensa/*.inc)
|
HEADERS_ASM_xtensa-esp32-elf = $(wildcard arch/xtensa/*.inc)
|
||||||
SOURCES_ASM_xtensa-esp32-elf = $(wildcard arch/xtensa/*.asm)
|
SOURCES_ASM_xtensa-esp32-elf = $(wildcard arch/xtensa/*.asm)
|
||||||
|
|
||||||
|
HEADERS_ASM_aarch64-elf = $(wildcard arch/aarch64/*.inc)
|
||||||
|
SOURCES_ASM_aarch64-elf = $(wildcard arch/aarch64/*.arm)
|
||||||
|
|
||||||
# TWO ARCHITECTURES! HAHAHAHAH
|
# TWO ARCHITECTURES! HAHAHAHAH
|
||||||
|
# Xtensa is not gonna be touched for a bit ngl
|
||||||
|
# once i buy a pile of ESP32s it will be tho
|
||||||
|
|
||||||
OBJECTS_ASM = $(patsubst %.asm, $(BUILD_DIR)/kernel/asm/%.obj, $(SOURCES_ASM_$(TARGET)))
|
OBJECTS_ASM = $(patsubst %.asm, $(BUILD_DIR)/kernel/asm/%.obj, $(SOURCES_ASM_$(TARGET)))
|
||||||
|
|
||||||
|
|||||||
21
src/kernel/arch/aarch64/multiboot.arm
Normal file
21
src/kernel/arch/aarch64/multiboot.arm
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
/*----------------*\
|
||||||
|
|Nanite OS |
|
||||||
|
|Copyright (C) 2026|
|
||||||
|
|Xircon |
|
||||||
|
\*----------------*/
|
||||||
|
|
||||||
|
.sect ".multiboot"
|
||||||
|
header_start:
|
||||||
|
.long 0xe85250d6 // magic number
|
||||||
|
.long 0 // protected mode code
|
||||||
|
.long header_end - header_start // header length
|
||||||
|
.long 0x100000000 - (0xe85250d6 + 0 + (header_end - header_start)) // checksum
|
||||||
|
// required end tag
|
||||||
|
.long 6 // type
|
||||||
|
.long 0 // flags
|
||||||
|
.long 8 // size
|
||||||
|
header_end:
|
||||||
|
|
||||||
|
.sect ".boot"
|
||||||
|
_start:
|
||||||
|
bl start
|
||||||
@ -3,6 +3,7 @@
|
|||||||
;COPYRIGHT (C) 2026 ;
|
;COPYRIGHT (C) 2026 ;
|
||||||
;Xircon ;
|
;Xircon ;
|
||||||
;/////////////////////;
|
;/////////////////////;
|
||||||
|
[bits 32]
|
||||||
|
|
||||||
global CPUID_Check_Supported
|
global CPUID_Check_Supported
|
||||||
CPUID_Check_Supported:
|
CPUID_Check_Supported:
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
;COPYRIGHT (C) 2026 ;
|
;COPYRIGHT (C) 2026 ;
|
||||||
;Xircon ;
|
;Xircon ;
|
||||||
;/////////////////////;
|
;/////////////////////;
|
||||||
|
[bits 32]
|
||||||
|
|
||||||
global outb
|
global outb
|
||||||
outb:
|
outb:
|
||||||
|
|||||||
0
src/kernel/arch/xtensa/entry.asm
Normal file
0
src/kernel/arch/xtensa/entry.asm
Normal file
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
#ifdef __I686
|
#ifdef __I686
|
||||||
#include <arch/i686/io.h>
|
#include <arch/i686/io.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
@ -156,3 +156,4 @@ bool DMA_Init_Floppy(uint8_t* buffer, unsigned length)
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
@ -5,6 +5,7 @@
|
|||||||
\*----------------*/
|
\*----------------*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#ifdef __I686
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
@ -119,3 +120,4 @@ enum DMA_MODE_REG_MASK {
|
|||||||
DMA_MODE_TRANSFER_BLOCK = 0x80,
|
DMA_MODE_TRANSFER_BLOCK = 0x80,
|
||||||
DMA_MODE_TRANSFER_CASCADE = 0xC0
|
DMA_MODE_TRANSFER_CASCADE = 0xC0
|
||||||
};
|
};
|
||||||
|
#endif
|
||||||
@ -21,7 +21,7 @@ bool _keyboard_disable; // True if keyboard is disabled, false if not
|
|||||||
bool _numlock, _capslock, _scrolllock; // Is true when toggeld
|
bool _numlock, _capslock, _scrolllock; // Is true when toggeld
|
||||||
bool _ctrl, _alt, _shift; // True if pressed
|
bool _ctrl, _alt, _shift; // True if pressed
|
||||||
|
|
||||||
uint8_t _keyboard_scancode; // Buffer for keyboard's Scancodes
|
uint8_t _keyboard_scancode = 0; // Buffer for keyboard's Scancodes
|
||||||
|
|
||||||
extern uint16_t DEBUG_COM_PORT;
|
extern uint16_t DEBUG_COM_PORT;
|
||||||
|
|
||||||
@ -138,3 +138,75 @@ void Keyboard_Init()
|
|||||||
_shift = _alt = _ctrl = false;
|
_shift = _alt = _ctrl = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char kscan() {
|
||||||
|
switch(_keyboard_scancode) {
|
||||||
|
case KEYBOARD_LAYOUT_OEM_3: return '`';
|
||||||
|
case KEYBOARD_LAYOUT_1: return '1';
|
||||||
|
case KEYBOARD_LAYOUT_2: return '2';
|
||||||
|
case KEYBOARD_LAYOUT_3: return '3';
|
||||||
|
case KEYBOARD_LAYOUT_4: return '4';
|
||||||
|
case KEYBOARD_LAYOUT_5: return '5';
|
||||||
|
case KEYBOARD_LAYOUT_6: return '6';
|
||||||
|
case KEYBOARD_LAYOUT_7: return '7';
|
||||||
|
case KEYBOARD_LAYOUT_8: return '8';
|
||||||
|
case KEYBOARD_LAYOUT_9: return '9';
|
||||||
|
case KEYBOARD_LAYOUT_0: return '0';
|
||||||
|
case KEYBOARD_LAYOUT_OEM_MI: return '-';
|
||||||
|
case KEYBOARD_LAYOUT_OEM_PL: return '=';
|
||||||
|
case KEYBOARD_LAYOUT_BACK: return '\b';
|
||||||
|
case KEYBOARD_LAYOUT_TAB: return '\t';
|
||||||
|
case KEYBOARD_LAYOUT_Q: return 'Q';
|
||||||
|
case KEYBOARD_LAYOUT_W: return 'W';
|
||||||
|
case KEYBOARD_LAYOUT_E: return 'E';
|
||||||
|
case KEYBOARD_LAYOUT_R: return 'R';
|
||||||
|
case KEYBOARD_LAYOUT_T: return 'T';
|
||||||
|
case KEYBOARD_LAYOUT_Y: return 'Y';
|
||||||
|
case KEYBOARD_LAYOUT_U: return 'U';
|
||||||
|
case KEYBOARD_LAYOUT_I: return 'I';
|
||||||
|
case KEYBOARD_LAYOUT_O: return 'O';
|
||||||
|
case KEYBOARD_LAYOUT_P: return 'P';
|
||||||
|
case KEYBOARD_LAYOUT_OEM_4: return '[';
|
||||||
|
case KEYBOARD_LAYOUT_OEM_6: return ']';
|
||||||
|
case KEYBOARD_LAYOUT_OEM_5: return '\\';
|
||||||
|
case KEYBOARD_LAYOUT_A: return 'A';
|
||||||
|
case KEYBOARD_LAYOUT_S: return 'S';
|
||||||
|
case KEYBOARD_LAYOUT_D: return 'D';
|
||||||
|
case KEYBOARD_LAYOUT_F: return 'F';
|
||||||
|
case KEYBOARD_LAYOUT_G: return 'G';
|
||||||
|
case KEYBOARD_LAYOUT_H: return 'H';
|
||||||
|
case KEYBOARD_LAYOUT_J: return 'J';
|
||||||
|
case KEYBOARD_LAYOUT_K: return 'K';
|
||||||
|
case KEYBOARD_LAYOUT_L: return 'L';
|
||||||
|
case KEYBOARD_LAYOUT_OEM_1: return ';';
|
||||||
|
case KEYBOARD_LAYOUT_OEM_7: return '\'';
|
||||||
|
case KEYBOARD_LAYOUT_RETURN: return '\n';
|
||||||
|
case KEYBOARD_LAYOUT_Z: return 'Z';
|
||||||
|
case KEYBOARD_LAYOUT_X: return 'X';
|
||||||
|
case KEYBOARD_LAYOUT_C: return 'C';
|
||||||
|
case KEYBOARD_LAYOUT_V: return 'V';
|
||||||
|
case KEYBOARD_LAYOUT_B: return 'B';
|
||||||
|
case KEYBOARD_LAYOUT_N: return 'N';
|
||||||
|
case KEYBOARD_LAYOUT_M: return 'M';
|
||||||
|
case KEYBOARD_LAYOUT_OEM_CC: return ',';
|
||||||
|
case KEYBOARD_LAYOUT_OEM_PE: return '.';
|
||||||
|
case KEYBOARD_LAYOUT_OEM_2: return '/';
|
||||||
|
case KEYBOARD_LAYOUT_SPACE: return ' ';
|
||||||
|
case KEYBOARD_LAYOUT_DIVIDE: return '/';
|
||||||
|
case KEYBOARD_LAYOUT_MULTIPLY: return '*';
|
||||||
|
case KEYBOARD_LAYOUT_SUBTRACT: return '-';
|
||||||
|
case KEYBOARD_LAYOUT_NUMPAD_1: return '1';
|
||||||
|
case KEYBOARD_LAYOUT_NUMPAD_2: return '2';
|
||||||
|
case KEYBOARD_LAYOUT_NUMPAD_3: return '3';
|
||||||
|
case KEYBOARD_LAYOUT_NUMPAD_4: return '4';
|
||||||
|
case KEYBOARD_LAYOUT_NUMPAD_5: return '5';
|
||||||
|
case KEYBOARD_LAYOUT_NUMPAD_6: return '6';
|
||||||
|
case KEYBOARD_LAYOUT_NUMPAD_7: return '7';
|
||||||
|
case KEYBOARD_LAYOUT_NUMPAD_8: return '8';
|
||||||
|
case KEYBOARD_LAYOUT_NUMPAD_9: return '9';
|
||||||
|
case KEYBOARD_LAYOUT_NUMPAD_0: return '0';
|
||||||
|
case KEYBOARD_LAYOUT_NUMPAD_PERIOD: return '.';
|
||||||
|
case KEYBOARD_LAYOUT_ADD: return '+';
|
||||||
|
case KEYBOARD_LAYOUT_NUMPAD_RETURN: return '\n';
|
||||||
|
default: return '\0';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -19,6 +19,7 @@ void Keyboard_Controller_Send_Command(uint8_t command);
|
|||||||
uint8_t Keyboard_Controller_Status();
|
uint8_t Keyboard_Controller_Status();
|
||||||
uint8_t Keyboard_Read_Encoder_Buffer();
|
uint8_t Keyboard_Read_Encoder_Buffer();
|
||||||
bool Keyboard_Self_Test();
|
bool Keyboard_Self_Test();
|
||||||
|
char kscan();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -58,3 +59,221 @@ enum KEYBOARD_ENC_CMD {
|
|||||||
|
|
||||||
KEYBOARD_ENC_CMD_SET_LED = 0xED
|
KEYBOARD_ENC_CMD_SET_LED = 0xED
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum KEYBOARD_LAYOUT_QWERTY {
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_ESCAPE = 0x01,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_F1 = 0x3B,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_F2 = 0x3C,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_F3 = 0x3D,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_F4 = 0x3E,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_F5 = 0x3F,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_F6 = 0x40,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_F7 = 0x41,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_F8 = 0x42,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_F9 = 0x43,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_F10 = 0x44,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_F11 = 0x57,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_F12 = 0x58,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_SNAPSHOT = 0x54,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_SCROLL = 0x46,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_PAUSE = 0xE1D1,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_OEM_3 = 0x29,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_1 = 0x02,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_2 = 0x03,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_3 = 0x04,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_4 = 0x05,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_5 = 0x06,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_6 = 0x07,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_7 = 0x08,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_8 = 0x09,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_9 = 0x0A,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_0 = 0x0B,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_OEM_MI = 0x0C,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_OEM_PL = 0x0D,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_BACK = 0x0E,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_TAB = 0x0F,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_Q = 0x10,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_W = 0x11,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_E = 0x12,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_R = 0x13,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_T = 0x14,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_Y = 0x15,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_U = 0x16,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_I = 0x17,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_O = 0x18,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_P = 0x19,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_OEM_4 = 0x1A,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_OEM_6 = 0x1B,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_OEM_5 = 0x2B,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_CAPITAL = 0x3A,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_A = 0x1E,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_S = 0x1F,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_D = 0x20,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_F = 0x21,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_G = 0x22,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_H = 0x23,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_J = 0x24,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_K = 0x25,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_L = 0x26,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_OEM_1 = 0x27,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_OEM_7 = 0x28,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_RETURN = 0x1C,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_LSHIFT = 0x2A,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_Z = 0x2C,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_X = 0x2D,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_C = 0x2E,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_V = 0x2F,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_B = 0x30,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_N = 0x31,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_M = 0x32,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_OEM_CC = 0x33,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_OEM_PE = 0x34,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_OEM_2 = 0x35,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_RSHIFT = 0x36,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_LCONTROL = 0x1D,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_LSUPER = 0xE05B,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_LMENU = 0x38,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_SPACE = 0x39,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_RMENU = 0xE038,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_RSUPER = 0xE05C,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_APPS = 0xE05D,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_RCONTROL = 0xE01D,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_INSERT = 0xE052,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_HOME = 0xE047,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_PRIOR = 0xE049,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_DELETE = 0xE053,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_END = 0xE04F,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_NEXT = 0xE051,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_UP = 0xE048,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_LEFT = 0xE04B,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_RIGHT = 0xE04D,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_DOWN = 0xE050,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_NUMLOCK = 0x45,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_DIVIDE = 0xE035,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_MULTIPLY = 0x37,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_SUBTRACT = 0x4A,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_NUMPAD_1 = 0x47,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_NUMPAD_2 = 0x48,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_NUMPAD_3 = 0x49,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_NUMPAD_4 = 0x4B,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_NUMPAD_5 = 0x4C,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_NUMPAD_6 = 0x4D,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_NUMPAD_7 = 0x4F,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_NUMPAD_8 = 0x50,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_NUMPAD_9 = 0x51,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_NUMPAD_0 = 0x52,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_NUMPAD_PERIOD = 0x53,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_ADD = 0x4E,
|
||||||
|
KEYBOARD_LAYOUT_QWERTY_NUMPAD_RETURN = 0xE01,
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef __LAYOUT_QWERTY
|
||||||
|
|
||||||
|
enum KEYBOARD_LAYOUT {
|
||||||
|
KEYBOARD_LAYOUT_ESCAPE = KEYBOARD_LAYOUT_QWERTY_ESCAPE,
|
||||||
|
KEYBOARD_LAYOUT_F1 = KEYBOARD_LAYOUT_QWERTY_F1,
|
||||||
|
KEYBOARD_LAYOUT_F2 = KEYBOARD_LAYOUT_QWERTY_F2,
|
||||||
|
KEYBOARD_LAYOUT_F3 = KEYBOARD_LAYOUT_QWERTY_F3,
|
||||||
|
KEYBOARD_LAYOUT_F4 = KEYBOARD_LAYOUT_QWERTY_F4,
|
||||||
|
KEYBOARD_LAYOUT_F5 = KEYBOARD_LAYOUT_QWERTY_F5,
|
||||||
|
KEYBOARD_LAYOUT_F6 = KEYBOARD_LAYOUT_QWERTY_F6,
|
||||||
|
KEYBOARD_LAYOUT_F7 = KEYBOARD_LAYOUT_QWERTY_F7,
|
||||||
|
KEYBOARD_LAYOUT_F8 = KEYBOARD_LAYOUT_QWERTY_F8,
|
||||||
|
KEYBOARD_LAYOUT_F9 = KEYBOARD_LAYOUT_QWERTY_F9,
|
||||||
|
KEYBOARD_LAYOUT_F10 = KEYBOARD_LAYOUT_QWERTY_F10,
|
||||||
|
KEYBOARD_LAYOUT_F11 = KEYBOARD_LAYOUT_QWERTY_F11,
|
||||||
|
KEYBOARD_LAYOUT_F12 = KEYBOARD_LAYOUT_QWERTY_F12,
|
||||||
|
KEYBOARD_LAYOUT_SNAPSHOT = KEYBOARD_LAYOUT_QWERTY_SNAPSHOT,
|
||||||
|
KEYBOARD_LAYOUT_SCROLL = KEYBOARD_LAYOUT_QWERTY_SCROLL,
|
||||||
|
KEYBOARD_LAYOUT_PAUSE = KEYBOARD_LAYOUT_QWERTY_PAUSE,
|
||||||
|
KEYBOARD_LAYOUT_OEM_3 = KEYBOARD_LAYOUT_QWERTY_OEM_3,
|
||||||
|
KEYBOARD_LAYOUT_1 = KEYBOARD_LAYOUT_QWERTY_1,
|
||||||
|
KEYBOARD_LAYOUT_2 = KEYBOARD_LAYOUT_QWERTY_2,
|
||||||
|
KEYBOARD_LAYOUT_3 = KEYBOARD_LAYOUT_QWERTY_3,
|
||||||
|
KEYBOARD_LAYOUT_4 = KEYBOARD_LAYOUT_QWERTY_4,
|
||||||
|
KEYBOARD_LAYOUT_5 = KEYBOARD_LAYOUT_QWERTY_5,
|
||||||
|
KEYBOARD_LAYOUT_6 = KEYBOARD_LAYOUT_QWERTY_6,
|
||||||
|
KEYBOARD_LAYOUT_7 = KEYBOARD_LAYOUT_QWERTY_7,
|
||||||
|
KEYBOARD_LAYOUT_8 = KEYBOARD_LAYOUT_QWERTY_8,
|
||||||
|
KEYBOARD_LAYOUT_9 = KEYBOARD_LAYOUT_QWERTY_9,
|
||||||
|
KEYBOARD_LAYOUT_0 = KEYBOARD_LAYOUT_QWERTY_0,
|
||||||
|
KEYBOARD_LAYOUT_OEM_MI = KEYBOARD_LAYOUT_QWERTY_OEM_MI,
|
||||||
|
KEYBOARD_LAYOUT_OEM_PL = KEYBOARD_LAYOUT_QWERTY_OEM_PL,
|
||||||
|
KEYBOARD_LAYOUT_BACK = KEYBOARD_LAYOUT_QWERTY_BACK,
|
||||||
|
KEYBOARD_LAYOUT_TAB = KEYBOARD_LAYOUT_QWERTY_TAB,
|
||||||
|
KEYBOARD_LAYOUT_Q = KEYBOARD_LAYOUT_QWERTY_Q,
|
||||||
|
KEYBOARD_LAYOUT_W = KEYBOARD_LAYOUT_QWERTY_W,
|
||||||
|
KEYBOARD_LAYOUT_E = KEYBOARD_LAYOUT_QWERTY_E,
|
||||||
|
KEYBOARD_LAYOUT_R = KEYBOARD_LAYOUT_QWERTY_R,
|
||||||
|
KEYBOARD_LAYOUT_T = KEYBOARD_LAYOUT_QWERTY_T,
|
||||||
|
KEYBOARD_LAYOUT_Y = KEYBOARD_LAYOUT_QWERTY_Y,
|
||||||
|
KEYBOARD_LAYOUT_U = KEYBOARD_LAYOUT_QWERTY_U,
|
||||||
|
KEYBOARD_LAYOUT_I = KEYBOARD_LAYOUT_QWERTY_I,
|
||||||
|
KEYBOARD_LAYOUT_O = KEYBOARD_LAYOUT_QWERTY_O,
|
||||||
|
KEYBOARD_LAYOUT_P = KEYBOARD_LAYOUT_QWERTY_P,
|
||||||
|
KEYBOARD_LAYOUT_OEM_4 = KEYBOARD_LAYOUT_QWERTY_OEM_4,
|
||||||
|
KEYBOARD_LAYOUT_OEM_6 = KEYBOARD_LAYOUT_QWERTY_OEM_6,
|
||||||
|
KEYBOARD_LAYOUT_OEM_5 = KEYBOARD_LAYOUT_QWERTY_OEM_5,
|
||||||
|
KEYBOARD_LAYOUT_CAPITAL = KEYBOARD_LAYOUT_QWERTY_CAPITAL,
|
||||||
|
KEYBOARD_LAYOUT_A = KEYBOARD_LAYOUT_QWERTY_A,
|
||||||
|
KEYBOARD_LAYOUT_S = KEYBOARD_LAYOUT_QWERTY_S,
|
||||||
|
KEYBOARD_LAYOUT_D = KEYBOARD_LAYOUT_QWERTY_D,
|
||||||
|
KEYBOARD_LAYOUT_F = KEYBOARD_LAYOUT_QWERTY_F,
|
||||||
|
KEYBOARD_LAYOUT_G = KEYBOARD_LAYOUT_QWERTY_G,
|
||||||
|
KEYBOARD_LAYOUT_H = KEYBOARD_LAYOUT_QWERTY_H,
|
||||||
|
KEYBOARD_LAYOUT_J = KEYBOARD_LAYOUT_QWERTY_J,
|
||||||
|
KEYBOARD_LAYOUT_K = KEYBOARD_LAYOUT_QWERTY_K,
|
||||||
|
KEYBOARD_LAYOUT_L = KEYBOARD_LAYOUT_QWERTY_L,
|
||||||
|
KEYBOARD_LAYOUT_OEM_1 = KEYBOARD_LAYOUT_QWERTY_OEM_1,
|
||||||
|
KEYBOARD_LAYOUT_OEM_7 = KEYBOARD_LAYOUT_QWERTY_OEM_7,
|
||||||
|
KEYBOARD_LAYOUT_RETURN = KEYBOARD_LAYOUT_QWERTY_RETURN,
|
||||||
|
KEYBOARD_LAYOUT_LSHIFT = KEYBOARD_LAYOUT_QWERTY_LSHIFT,
|
||||||
|
KEYBOARD_LAYOUT_Z = KEYBOARD_LAYOUT_QWERTY_Z,
|
||||||
|
KEYBOARD_LAYOUT_X = KEYBOARD_LAYOUT_QWERTY_X,
|
||||||
|
KEYBOARD_LAYOUT_C = KEYBOARD_LAYOUT_QWERTY_C,
|
||||||
|
KEYBOARD_LAYOUT_V = KEYBOARD_LAYOUT_QWERTY_V,
|
||||||
|
KEYBOARD_LAYOUT_B = KEYBOARD_LAYOUT_QWERTY_B,
|
||||||
|
KEYBOARD_LAYOUT_N = KEYBOARD_LAYOUT_QWERTY_N,
|
||||||
|
KEYBOARD_LAYOUT_M = KEYBOARD_LAYOUT_QWERTY_M,
|
||||||
|
KEYBOARD_LAYOUT_OEM_CC = KEYBOARD_LAYOUT_QWERTY_OEM_CC,
|
||||||
|
KEYBOARD_LAYOUT_OEM_PE = KEYBOARD_LAYOUT_QWERTY_OEM_PE,
|
||||||
|
KEYBOARD_LAYOUT_OEM_2 = KEYBOARD_LAYOUT_QWERTY_OEM_2,
|
||||||
|
KEYBOARD_LAYOUT_RSHIFT = KEYBOARD_LAYOUT_QWERTY_RSHIFT,
|
||||||
|
KEYBOARD_LAYOUT_LCONTROL = KEYBOARD_LAYOUT_QWERTY_LCONTROL,
|
||||||
|
KEYBOARD_LAYOUT_LSUPER = KEYBOARD_LAYOUT_QWERTY_LSUPER,
|
||||||
|
KEYBOARD_LAYOUT_LMENU = KEYBOARD_LAYOUT_QWERTY_LMENU,
|
||||||
|
KEYBOARD_LAYOUT_SPACE = KEYBOARD_LAYOUT_QWERTY_SPACE,
|
||||||
|
KEYBOARD_LAYOUT_RMENU = KEYBOARD_LAYOUT_QWERTY_RMENU,
|
||||||
|
KEYBOARD_LAYOUT_RSUPER = KEYBOARD_LAYOUT_QWERTY_RSUPER,
|
||||||
|
KEYBOARD_LAYOUT_APPS = KEYBOARD_LAYOUT_QWERTY_APPS,
|
||||||
|
KEYBOARD_LAYOUT_RCONTROL = KEYBOARD_LAYOUT_QWERTY_RCONTROL,
|
||||||
|
KEYBOARD_LAYOUT_INSERT = KEYBOARD_LAYOUT_QWERTY_INSERT,
|
||||||
|
KEYBOARD_LAYOUT_HOME = KEYBOARD_LAYOUT_QWERTY_HOME,
|
||||||
|
KEYBOARD_LAYOUT_PRIOR = KEYBOARD_LAYOUT_QWERTY_PRIOR,
|
||||||
|
KEYBOARD_LAYOUT_DELETE = KEYBOARD_LAYOUT_QWERTY_DELETE,
|
||||||
|
KEYBOARD_LAYOUT_END = KEYBOARD_LAYOUT_QWERTY_END,
|
||||||
|
KEYBOARD_LAYOUT_NEXT = KEYBOARD_LAYOUT_QWERTY_NEXT,
|
||||||
|
KEYBOARD_LAYOUT_UP = KEYBOARD_LAYOUT_QWERTY_UP,
|
||||||
|
KEYBOARD_LAYOUT_LEFT = KEYBOARD_LAYOUT_QWERTY_LEFT,
|
||||||
|
KEYBOARD_LAYOUT_RIGHT = KEYBOARD_LAYOUT_QWERTY_RIGHT,
|
||||||
|
KEYBOARD_LAYOUT_DOWN = KEYBOARD_LAYOUT_QWERTY_DOWN,
|
||||||
|
KEYBOARD_LAYOUT_NUMLOCK = KEYBOARD_LAYOUT_QWERTY_NUMLOCK,
|
||||||
|
KEYBOARD_LAYOUT_DIVIDE = KEYBOARD_LAYOUT_QWERTY_DIVIDE,
|
||||||
|
KEYBOARD_LAYOUT_MULTIPLY = KEYBOARD_LAYOUT_QWERTY_MULTIPLY,
|
||||||
|
KEYBOARD_LAYOUT_SUBTRACT = KEYBOARD_LAYOUT_QWERTY_SUBTRACT,
|
||||||
|
KEYBOARD_LAYOUT_NUMPAD_1 = KEYBOARD_LAYOUT_QWERTY_NUMPAD_1,
|
||||||
|
KEYBOARD_LAYOUT_NUMPAD_2 = KEYBOARD_LAYOUT_QWERTY_NUMPAD_2,
|
||||||
|
KEYBOARD_LAYOUT_NUMPAD_3 = KEYBOARD_LAYOUT_QWERTY_NUMPAD_3,
|
||||||
|
KEYBOARD_LAYOUT_NUMPAD_4 = KEYBOARD_LAYOUT_QWERTY_NUMPAD_4,
|
||||||
|
KEYBOARD_LAYOUT_NUMPAD_5 = KEYBOARD_LAYOUT_QWERTY_NUMPAD_5,
|
||||||
|
KEYBOARD_LAYOUT_NUMPAD_6 = KEYBOARD_LAYOUT_QWERTY_NUMPAD_6,
|
||||||
|
KEYBOARD_LAYOUT_NUMPAD_7 = KEYBOARD_LAYOUT_QWERTY_NUMPAD_7,
|
||||||
|
KEYBOARD_LAYOUT_NUMPAD_8 = KEYBOARD_LAYOUT_QWERTY_NUMPAD_8,
|
||||||
|
KEYBOARD_LAYOUT_NUMPAD_9 = KEYBOARD_LAYOUT_QWERTY_NUMPAD_9,
|
||||||
|
KEYBOARD_LAYOUT_NUMPAD_0 = KEYBOARD_LAYOUT_QWERTY_NUMPAD_0,
|
||||||
|
KEYBOARD_LAYOUT_NUMPAD_PERIOD = KEYBOARD_LAYOUT_QWERTY_NUMPAD_PERIOD,
|
||||||
|
KEYBOARD_LAYOUT_ADD = KEYBOARD_LAYOUT_QWERTY_ADD,
|
||||||
|
KEYBOARD_LAYOUT_NUMPAD_RETURN = KEYBOARD_LAYOUT_QWERTY_NUMPAD_RETURN,
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@ -17,9 +17,14 @@
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef __AARCH64
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
// stdlibs
|
// stdlibs
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <memory.h>
|
#include <memory.h>
|
||||||
|
|
||||||
@ -56,6 +61,7 @@ extern uint8_t __bss_start; // Start of Kernel in memory
|
|||||||
extern uint8_t __end; // End of Kernel in memory
|
extern uint8_t __end; // End of Kernel in memory
|
||||||
|
|
||||||
extern int uptime; // System uptime measured by precision timer unit.
|
extern int uptime; // System uptime measured by precision timer unit.
|
||||||
|
extern unsigned RAND_SEED; // Random number generator's seed
|
||||||
|
|
||||||
uint16_t DEBUG_COM_PORT = COM1_PORT; // COM Port to Output Debug strings to
|
uint16_t DEBUG_COM_PORT = COM1_PORT; // COM Port to Output Debug strings to
|
||||||
|
|
||||||
@ -73,8 +79,13 @@ void start(unsigned long magic, unsigned long address) {
|
|||||||
#ifdef __XTENSA
|
#ifdef __XTENSA
|
||||||
printf("[Xtensa]\n");
|
printf("[Xtensa]\n");
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef __AARCH64
|
||||||
|
printf("[Arm64]\n");
|
||||||
|
#endif
|
||||||
|
|
||||||
printf("The Nano OS %s\n--------------------------------------------\n", VERSION);
|
printf("The Nano OS %s\n--------------------------------------------\n", VERSION);
|
||||||
|
printf("Tip: The RD in the Version stands for Research and Development!\n");
|
||||||
|
printf("--------------------------------------------\n");
|
||||||
|
|
||||||
// Multiboot Debug Stuff
|
// Multiboot Debug Stuff
|
||||||
// if (magic != MULTIBOOT2_BOOTLOADER_MAGIC) {
|
// if (magic != MULTIBOOT2_BOOTLOADER_MAGIC) {
|
||||||
@ -97,6 +108,7 @@ void start(unsigned long magic, unsigned long address) {
|
|||||||
IRQ_RegisterHandler(4, COM1_Serial_Handler);
|
IRQ_RegisterHandler(4, COM1_Serial_Handler);
|
||||||
IRQ_RegisterHandler(6, Floppy_Handler);
|
IRQ_RegisterHandler(6, Floppy_Handler);
|
||||||
IRQ_RegisterHandler(8, CMOS_RTC_Handler);
|
IRQ_RegisterHandler(8, CMOS_RTC_Handler);
|
||||||
|
RAND_SEED = Read_CMOS(CMOS_RTC_Hours);
|
||||||
#endif
|
#endif
|
||||||
// Other Stuff
|
// Other Stuff
|
||||||
Serial_Init(DEBUG_COM_PORT, 9600);
|
Serial_Init(DEBUG_COM_PORT, 9600);
|
||||||
@ -108,6 +120,7 @@ void start(unsigned long magic, unsigned long address) {
|
|||||||
// Hardware Detection
|
// Hardware Detection
|
||||||
Serial_Printf(DEBUG_COM_PORT, "MEMORY:> There is %dKB of Memory Available\nThe Kernel is loaded between 0x%x and 0x%x\n", Detect_Memory(), __bss_start, __end);
|
Serial_Printf(DEBUG_COM_PORT, "MEMORY:> There is %dKB of Memory Available\nThe Kernel is loaded between 0x%x and 0x%x\n", Detect_Memory(), __bss_start, __end);
|
||||||
printf("%dKB Of Memory Availible!\n", Detect_Memory());
|
printf("%dKB Of Memory Availible!\n", Detect_Memory());
|
||||||
|
// printf("Random Number! %u\n", rand());
|
||||||
|
|
||||||
// Serial_Printf(DEBUG_COM_PORT, "CPU Vendor: %s\n", CPUID_Get_Vendor()); // CPUID Stuff is pain and suffering, like page faults and suffering
|
// Serial_Printf(DEBUG_COM_PORT, "CPU Vendor: %s\n", CPUID_Get_Vendor()); // CPUID Stuff is pain and suffering, like page faults and suffering
|
||||||
|
|
||||||
@ -126,6 +139,9 @@ void start(unsigned long magic, unsigned long address) {
|
|||||||
BCD2BIN(Read_CMOS(CMOS_RTC_Year)));
|
BCD2BIN(Read_CMOS(CMOS_RTC_Year)));
|
||||||
// Beep!
|
// Beep!
|
||||||
PCSP_Beep();
|
PCSP_Beep();
|
||||||
|
char* answer;
|
||||||
|
printf("Would you like to change the time and date? [Y/n] ");
|
||||||
|
scanf("");
|
||||||
|
|
||||||
end:
|
end:
|
||||||
for (;;);
|
for (;;);
|
||||||
|
|||||||
@ -9,13 +9,19 @@
|
|||||||
|
|
||||||
extern uint8_t _keyboard_scancode;
|
extern uint8_t _keyboard_scancode;
|
||||||
|
|
||||||
char kscan() {
|
// Prints a helpful tip!
|
||||||
switch(_keyboard_scancode) {
|
void printTip() {
|
||||||
case 1:
|
|
||||||
default: return 0;
|
}
|
||||||
|
|
||||||
|
/*Calculate Factorial of `N`*/
|
||||||
|
unsigned int factorial(unsigned int N) {
|
||||||
|
int fact = 1, i;
|
||||||
|
|
||||||
|
// Loop from 1 to N to get the factorial
|
||||||
|
for (i = 1; i <= N; i++) {
|
||||||
|
fact *= i;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void kscanHelper(char character) {
|
|
||||||
|
|
||||||
|
return fact;
|
||||||
}
|
}
|
||||||
@ -5,3 +5,4 @@
|
|||||||
\*----------------*/
|
\*----------------*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
unsigned int factorial(unsigned int N);
|
||||||
11
src/kernel/stdbool.h
Normal file
11
src/kernel/stdbool.h
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
/*----------------*\
|
||||||
|
|Nanite OS |
|
||||||
|
|Copyright (C) 2026|
|
||||||
|
|Xircon |
|
||||||
|
\*----------------*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#define TRUE 1
|
||||||
|
#define FALSE 0
|
||||||
|
|
||||||
|
typedef enum { false, true } bool;
|
||||||
39
src/kernel/stdint.h
Normal file
39
src/kernel/stdint.h
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
/*----------------*\
|
||||||
|
|Nanite OS |
|
||||||
|
|Copyright (C) 2026|
|
||||||
|
|Xircon |
|
||||||
|
\*----------------*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#define UINT8_MAX 255
|
||||||
|
#define UINT16_MAX 65535
|
||||||
|
#define UINT32_MAX 4294967295
|
||||||
|
#define UINT64_MAX 18446744073709551615
|
||||||
|
|
||||||
|
#define UINT8_MIN 0
|
||||||
|
#define UINT16_MIN 0
|
||||||
|
#define UINT32_MIN 0
|
||||||
|
#define UINT64_MIN 0
|
||||||
|
|
||||||
|
#define INT8_MAX 127
|
||||||
|
#define INT16_MAX 32767
|
||||||
|
#define INT32_MAX 2147483647
|
||||||
|
#define INT64_MAX 9223372036854775807
|
||||||
|
|
||||||
|
#define INT8_MIN -128
|
||||||
|
#define INT16_MIN -32768
|
||||||
|
#define INT32_MIN -2147483648
|
||||||
|
#define INT64_MIN -9223372036854775808
|
||||||
|
|
||||||
|
// Unsigned ints
|
||||||
|
typedef unsigned char uint8_t;
|
||||||
|
typedef unsigned short int uint16_t;
|
||||||
|
typedef unsigned long int uint32_t;
|
||||||
|
typedef unsigned long long uint64_t;
|
||||||
|
|
||||||
|
// Signed ints
|
||||||
|
typedef signed char int8_t;
|
||||||
|
typedef signed short int int16_t;
|
||||||
|
typedef signed long int int32_t;
|
||||||
|
typedef signed long long int64_t;
|
||||||
|
|
||||||
@ -12,6 +12,8 @@
|
|||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
#include <dri/keyboard.h>
|
||||||
|
|
||||||
|
|
||||||
const uint8_t DEFAULT_COLOUR = 0x6;
|
const uint8_t DEFAULT_COLOUR = 0x6;
|
||||||
|
|
||||||
@ -341,3 +343,69 @@ void print_buffer(const char* msg, const void* buffer, uint32_t count)
|
|||||||
puts("\n");
|
puts("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define SCANF_STATE_NORMAL 0
|
||||||
|
#define SCANF_STATE_SPEC 1
|
||||||
|
|
||||||
|
#define SCANF_MODE_DEFAULT 2
|
||||||
|
#define SCANF_MODE_STRING 3
|
||||||
|
#define SCANF_MODE_CHAR 4
|
||||||
|
#define SCANF_MODE_NUMBER 5
|
||||||
|
|
||||||
|
/*Take user input from Keyboard!*/
|
||||||
|
int scanf(const char* fmt, ...) {
|
||||||
|
va_list(args);
|
||||||
|
va_start(args, fmt);
|
||||||
|
int state = SCANF_STATE_NORMAL;
|
||||||
|
int mode = SCANF_MODE_DEFAULT;
|
||||||
|
|
||||||
|
while (*fmt)
|
||||||
|
{
|
||||||
|
switch (state)
|
||||||
|
{
|
||||||
|
case SCANF_STATE_NORMAL:
|
||||||
|
switch (*fmt)
|
||||||
|
{
|
||||||
|
case '%': goto SCANF_STATE_SPEC_;
|
||||||
|
break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case SCANF_STATE_SPEC:
|
||||||
|
SCANF_STATE_SPEC_:
|
||||||
|
switch (*fmt)
|
||||||
|
{
|
||||||
|
case 'c': mode = SCANF_MODE_CHAR;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 's': mode = SCANF_MODE_STRING;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'd': mode = SCANF_MODE_NUMBER;
|
||||||
|
break;
|
||||||
|
|
||||||
|
// ignore invalid spec
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
// reset state
|
||||||
|
state = SCANF_STATE_NORMAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt++;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(mode) {
|
||||||
|
case SCANF_MODE_DEFAULT:
|
||||||
|
for(;;) {
|
||||||
|
char character = '\0';
|
||||||
|
character = kscan();
|
||||||
|
switch (character) {
|
||||||
|
case '\n': return 0;
|
||||||
|
default: if(character != 0) {printf("%c", character); character = 0;}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
default: return 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
@ -14,3 +14,4 @@ void printf(const char* fmt, ...);
|
|||||||
void print_buffer(const char* msg, const void* buffer, uint32_t count);
|
void print_buffer(const char* msg, const void* buffer, uint32_t count);
|
||||||
void movecursorpos(int x, int y);
|
void movecursorpos(int x, int y);
|
||||||
void getcursorpos(int x, int y);
|
void getcursorpos(int x, int y);
|
||||||
|
int scanf(const char *fmt, ...);
|
||||||
26
src/kernel/stdlib.c
Normal file
26
src/kernel/stdlib.c
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
/*----------------*\
|
||||||
|
|Nanite OS |
|
||||||
|
|Copyright (C) 2026|
|
||||||
|
|Xircon |
|
||||||
|
\*----------------*/
|
||||||
|
#include "stdlib.h"
|
||||||
|
|
||||||
|
#include <nanstd.h>
|
||||||
|
|
||||||
|
#include <dri/cmos.h>
|
||||||
|
|
||||||
|
extern int uptime;
|
||||||
|
unsigned RAND_SEED = 23;
|
||||||
|
unsigned bit;
|
||||||
|
|
||||||
|
/*Random Number Generator using a Linear Feedback Shift Register*/
|
||||||
|
unsigned rand(void) {
|
||||||
|
RAND_SEED = (RAND_SEED + uptime - Read_CMOS(CMOS_RTC_Minutes) + Read_CMOS(CMOS_RTC_Seconds));
|
||||||
|
bit = ((factorial(RAND_SEED+uptime) >> 0) ^ (RAND_SEED >> 2) ^ ((RAND_SEED+Read_CMOS(CMOS_RTC_Seconds)) >> 3) ^ ((RAND_SEED+uptime) >> 5)) & 1;
|
||||||
|
return RAND_SEED = (RAND_SEED >> 1) | (bit << 15);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*Set the seed for Random Number Generator*/
|
||||||
|
void srand(unsigned seed) {
|
||||||
|
RAND_SEED = seed;
|
||||||
|
}
|
||||||
12
src/kernel/stdlib.h
Normal file
12
src/kernel/stdlib.h
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
/*----------------*\
|
||||||
|
|Nanite OS |
|
||||||
|
|Copyright (C) 2026|
|
||||||
|
|Xircon |
|
||||||
|
\*----------------*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#define EXIT_FAILURE 1
|
||||||
|
#define EXIT_SUCCESS 0
|
||||||
|
|
||||||
|
unsigned rand(void);
|
||||||
|
void srand(unsigned);
|
||||||
@ -6,6 +6,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define LOGO " _ _____ _ __________________\n / | / / | / | / / _/_ __/ ____/\n / |/ / /| | / |/ // / / / / __/ \n / /| / ___ |/ /| // / / / / /___ \n/_/ |_/_/ |_/_/ |_/___/ /_/ /_____/" // Nanite's Logo as a formatted string
|
#define LOGO " _ _____ _ __________________\n / | / / | / | / / _/_ __/ ____/\n / |/ / /| | / |/ // / / / / __/ \n / /| / ___ |/ /| // / / / / /___ \n/_/ |_/_/ |_/_/ |_/___/ /_/ /_____/" // Nanite's Logo as a formatted string
|
||||||
#define VERSION "RD-00056" // Current Version of Nanite
|
#define VERSION "RD-00124" // Current Version of Nanite
|
||||||
#define BOOTLOGO " _ ______ ____ ____ ______\n / | / / __ )/ __ \\/ __ /_ __/\n / |/ / __ / / / / / / // / \n / /| / /_/ / /_/ / /_/ // / \n/_/ |_/_____/\\____/\\____//_/ \n" // Old bootloader logo
|
#define BOOTLOGO " _ ______ ____ ____ ______\n / | / / __ )/ __ \\/ __ /_ __/\n / |/ / __ / / / / / / // / \n / /| / /_/ / /_/ / /_/ // / \n/_/ |_/_____/\\____/\\____//_/ \n" // Old bootloader logo
|
||||||
// one day i will re-implement NBOOT V 2
|
// one day i will re-implement NBOOT V 2
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user