Skip to content

Commit

Permalink
✅ Выпуск нового релиза - v0.2.14
Browse files Browse the repository at this point in the history
Что нового:
💥 Один из наших разработчиков (@NDRAEY) добавил ValeraC
💥 Все ядро теперь использует шрифты, а также была выполнена оптимизация, благодаря чему увеличилась скорость от рисовки шрифта.
💥 Были приняты еще небольшие попытки работы с драйвером BGA
💥 в shell добавлена команда font. Она отобразит всю текущие символы на экране
💥 Убрано немного кода с kernel.c

❗ [БАГ] Из-за системы шрифтов, теперь нет текста на BootScreen

⛔ Наша команда напоминает, что ядро является нестабильным, если вы решите запустить его на реальном железе, то ВЫ и только ВЫ в ответе за ваше сломанное оборудование.

🤵 С Уважением, команда разработчиков SayoriOS!
  • Loading branch information
pimnik98 authored Sep 16, 2022
1 parent 2ceca43 commit dfd935f
Show file tree
Hide file tree
Showing 9 changed files with 258 additions and 132 deletions.
12 changes: 6 additions & 6 deletions apps/build.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ def build_all():
except Exception as E:
print(E)

print("[\x1b[33;1mNOTICE\x1b[0m] Building apps")
print("[\x1b[33;1mВНИМАНИЕ\x1b[0m] Компилируем приложения")
'''
os.system(f"{CC} examples/C/HelloWorld.c -o ./bin/HelloWorld.o")
os.system(f"{CC} examples/C/sound.c -o ./bin/beep.o")
Expand Down Expand Up @@ -95,7 +95,7 @@ def build_all():
build("compile", "examples/C/args.c", "./bin/args.o")
build("compile", "apps/pimnik98/tshell/main.c", "./bin/tshell.o")

print("[\x1b[33;1mNOTICE\x1b[0m] Building libc")
print("[\x1b[33;1mВНИМАНИЕ\x1b[0m] Компилируем библиотеки")
'''
build("copy", "../kernel/src/libk/math.c", "libc/math.c")
build("copy", "../kernel/include/libk/math.h", "include/math.h")
Expand All @@ -113,7 +113,7 @@ def build_all():
build("compile", "libc/tui.c", "./bin/libc/tui.o") # Text User-Interface
build("compile", "libc/time.c", "./bin/libc/time.o")

print("[\x1b[33;1mNOTICE\x1b[0m] Linking apps")
print("[\x1b[33;1mВНИМАНИЕ\x1b[0m] Выполняем линковку приложений")
# There we should swap the second and third arguments (according to original code)
build("link", "./bin/HelloWorld.o" + O_LIBC, "../bin/apps/hi")
build("link", "./bin/popsort_int_test.o" + O_LIBC, "../bin/apps/sort")
Expand Down Expand Up @@ -142,7 +142,7 @@ def build_all():
build("link", "./bin/asm.o", "../bin/apps/asm")
build("link", "./bin/asmt.o", "../bin/apps/asmt")
else:
print("[\x1b[31;1mERROR\x1b[0m] Binary 'fasm' not found, skipping...")
print("[\x1b[31;1mОШИБКА\x1b[0m] 'fasm' не найден, этот этап пропущен...")
except Exception:
pass

Expand All @@ -153,9 +153,9 @@ def build_all():
os.chdir("extlibs/"+i)
exw = subprocess.call("make", shell=True)
if exw:
print("[FAIL]")
print("[ОШИБКА]")
else:
print("[OKAY]")
print("[ОК]")
os.chdir("../..")

build("compile", "examples/C/valera.c", "./bin/valera.o")
Expand Down
4 changes: 2 additions & 2 deletions kernel/include/io/tty.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ void tty_init();
void init_vbe(multiboot_info *mboot);
void tty_backspace();
void tty_printf(char *text, ...);
void tty_putchar(char c);
//void tty_putchar(char c);
void set_line(int32_t x, int32_t y, int32_t xe, int32_t ye, uint32_t color);
void set_pixel(int32_t x, int32_t y, uint32_t color);
void tty_setcolor(int32_t color);
Expand All @@ -85,4 +85,4 @@ uint32_t getWidthScreen();
uint32_t getHeightScreen();
SynapseTTYInfo* get_tty_info();
void tty_puts(const char str[]);
void punch();
void punch();
2 changes: 1 addition & 1 deletion kernel/include/kernel.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@

#define VERSION_MAJOR 0 // Версия ядра
#define VERSION_MINOR 2 // Пре-релиз
#define VERSION_PATCH 13 // Патч
#define VERSION_PATCH 14 // Патч
#define ARCH_TYPE "i386" // Архитектура

#define COLOR_TEXT VESA_LIGHT_GREY
Expand Down
27 changes: 6 additions & 21 deletions kernel/kernel.c
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ void kernel(uint32_t magic_number, struct multiboot_info *mboot_info) {
}

// Загружаем bootScreen
bootScreenInit(10);
bootScreenInit(12);
bootScreenLazy(true);

bootScreenPaint("Setting `Global Descriptor Table`...");
Expand Down Expand Up @@ -148,6 +148,10 @@ void kernel(uint32_t magic_number, struct multiboot_info *mboot_info) {

bootScreenClose(0x000000,0xFFFFFF);

setFontPath("/initrd/var/fonts/MicrosoftLuciaConsole9.duke","/initrd/var/fonts/MicrosoftLuciaConsole9.fdat"); // Для 9го размера
setConfigurationFont(9,10,10); // Для 9
fontInit();
tty_fontConfigurate();
if (autotshell){
// Автоматический запуск TShell
run_elf_file("/initrd/apps/tshell", 0, 0);
Expand All @@ -169,9 +173,6 @@ void kernel(uint32_t magic_number, struct multiboot_info *mboot_info) {
struct synapse_time TIME = get_time();
tty_printf("Current datetime is: %d/%d/%d %d:%d:%d\n", TIME.day, TIME.month,
TIME.year, TIME.hours, TIME.minutes, TIME.seconds);
tty_puts("Experimental font demo: \xFF\x01 \xFF\x02 \xFF\x03 \xFF\x04 \xFF\x05 \xFF\x06 \xFF\x07 \xFF\x08 \xFF\x09 \xFF\x0A \xFF\x0B \xFF\x0C\n");
tty_puts("Colors: \xFF\x0D\xFF\x0E\xFF\x0F\n");
tty_puts_color("Circles: [\xFF\x10][\xFF\x11]\n", 0, 0xFF0000);

/* Перед тем как раскомментировать, хорошо подумайте, это создает громкий шум вместо звука
sb16_init();
Expand All @@ -193,26 +194,10 @@ void kernel(uint32_t magic_number, struct multiboot_info *mboot_info) {
}
*/
//setFontPath("/initrd/var/fonts/MicrosoftLuciaConsole18.duke","/initrd/var/fonts/MicrosoftLuciaConsole18.fdat");
setFontPath("/initrd/var/fonts/MicrosoftLuciaConsole9.duke","/initrd/var/fonts/MicrosoftLuciaConsole9.fdat"); // Для 9го размера
fontInit();

//setConfigurationFont(18,22); // Для 18
setConfigurationFont(9,10); // Для 9
drawRect(0,0,800,200);
drawFont("АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ",10,30,0);
setColorFont(0xCAFE12);
drawFont("абвгдеёжзийклмнопрстуфхцчшщъыьэюя",10,60,0);
setColorFont(0x333333);
drawFont("!«№;%:?*()_+-=@#$^&[]{}|\\/",10,90,0);
setColorFont(0xDDDDDD);
drawFont("QWERTYUIOPASDFGHJKLZXCVBNM",10,120,0);
setColorFont(0xAAAAAA);
drawFont("qwertyuiopasdfghjklzxcvbnm",10,150,0);
setColorFont(0xFFFFFF);
drawFont("1234567890.,",10,180,0);

tty_printf("\nПробуем писать по русский\n * И помните ребята, ни слова по русский!\n");

tty_printf("[ATOI] %d",atoi("1234567890"));
shell(); // Активация терминала
}

80 changes: 71 additions & 9 deletions kernel/src/drivers/display/bga.c
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,15 @@
#define VBE_DISPI_INDEX_VBOX_VIDEO 0x0A // используется для чтения информации о конфигурации и записи команд на хост (иногда).
#define VBE_DISPI_INDEX_FB_BASE_HI 0x0B // содержит старшие 16 бит адреса линейного буфера кадра (младшие 16 бит равны нулю).

#define PREFERRED_VY 4096
#define PREFERRED_B 32

uint32_t mountPoint; // Место адресации запросов
uint16_t lfb_resolution_x = 0;
uint16_t lfb_resolution_y = 0;
uint16_t lfb_resolution_b = 0;
uint8_t * lfb_vid_memory = (uint8_t *)0xE0000000;


void bgaWriteData(uint32_t key,uint32_t value){
qemu_log("[bWrite] %x => %x",key,value);
Expand All @@ -71,7 +79,7 @@ void bgaDisabled(){
}

void bgaEnabled(){
bgaWriteData(VBE_DISPI_INDEX_ENABLE,VBE_DISPI_ENABLED);
bgaWriteData(VBE_DISPI_INDEX_ENABLE,0x41);
}

void bgaChangeResize(uint32_t w, uint32_t h, uint32_t bpp){
Expand All @@ -80,6 +88,43 @@ void bgaChangeResize(uint32_t w, uint32_t h, uint32_t bpp){
bgaWriteData(VBE_DISPI_INDEX_BPP,bpp);
}


static void finalize_graphics(uint16_t x, uint16_t y, uint16_t b) {
lfb_resolution_x = x;
lfb_resolution_y = y;
lfb_resolution_b = b;
qemu_log("[BGA] [Finale] X:%d Y:%d B:%d Address:%x",x,y,b,lfb_vid_memory);
bgaDriverInit(x,y,b,mountPoint);
}

uintptr_t lfb_get_address() {
return (uint8_t)lfb_vid_memory;
}

uintptr_t current_scroll = 0;

void bochs_set_y_offset(uint16_t y) {
bgaWriteData(VBE_DISPI_INDEX_Y_OFFSET,y);
current_scroll = y;
}

uint16_t bochs_current_scroll() {
return current_scroll;
}

void memFound(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t b, uint16_t f){
finalize_graphics(w,h,b);

for (uint16_t y = 0; y < h; y++) {
for (uint16_t x = 0; x < w; x++) {
uint8_t f = y % 255;
((uint32_t *)lfb_vid_memory)[x + y * w] = 0xFF000000 | (f * 0x10000) | (f * 0x100) | f;
}
}
}



void bgaInit(){
uint32_t status = bgaReadData(VBE_DISPI_INDEX_ID);
uint32_t x = bgaReadData(VBE_DISPI_INDEX_XRES);
Expand All @@ -100,16 +145,33 @@ void bgaInit(){
}

void bgaTest(){
uint32_t x = 800;
uint32_t y = 600;
uint32_t b = VBE_DISPI_BPP_32;
uint32_t ax = 800;
uint32_t ay = 600;
uint32_t ab = PREFERRED_B;
bgaDisabled();
bgaChangeResize(x, y , b);
bgaChangeResize(ax, ay , ab);
bgaWriteData(VBE_DISPI_INDEX_VIRT_HEIGHT,PREFERRED_VY);
bgaEnabled();

//pci_dev_t BGA_device = pci_get_device(0x1234, BGA_FOUND, -1);
//uint32_t pci_command_reg = pci_read(BGA_device, PCI_BAR0);
// qemu_log("[BGA] %x / %x",BGA_FOUND,pci_command_reg);
lfb_vid_memory = (uint8_t *)mountPoint;
finalize_graphics(ax,ay,ab);
return;

bgaDriverInit(x,y,b,mountPoint);
uint32_t * text_vid_mem = (uint32_t *)0xA0000;
text_vid_mem[0] = 0xA5ADFACE;

for (uint8_t fb_offset = 0xE0000000; fb_offset < 0xFF000000; fb_offset += 0x01000000) {
/* Go find it */
for (uint8_t x = fb_offset; x < fb_offset + 0xFF0000; x += 0x1000) {
if (((uint8_t *)x)[0] == 0xA5ADFACE) {
lfb_vid_memory = (uint8_t *)x;
finalize_graphics(ax,ay,ab);
return;
//goto mem_found;
}
}

}

//
}
19 changes: 19 additions & 0 deletions kernel/src/io/shell.c
Original file line number Diff line number Diff line change
Expand Up @@ -321,6 +321,22 @@ uint32_t cmd_debug(uint32_t c,char* v[]){
}
}

uint32_t cmd_font(uint32_t c,char* v[]){
drawRect(0,0,800,200);
setColorFont(0xFFFFF);
drawStringFont("АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ",10,30,0);
setColorFont(0xCAFE12);
drawStringFont("абвгдеёжзийклмнопрстуфхцчшщъыьэюя",10,60,0);
setColorFont(0x333333);
drawStringFont("!«№;%:?*()_+-=@#$^&[]{}|\\/",10,90,0);
setColorFont(0xDDDDDD);
drawStringFont("QWERTYUIOPASDFGHJKLZXCVBNM",10,120,0);
setColorFont(0xAAAAAA);
drawStringFont("qwertyuiopasdfghjklzxcvbnm",10,150,0);
setColorFont(0xFFFFFF);
drawStringFont("1234567890.,",10,180,0);
}

/**
* @brief Входная точка консоли
*
Expand Down Expand Up @@ -408,6 +424,9 @@ void shell() {
} else if (strcmpn(argv[0],"hostname")){
cmd_hostname(argc,argv);
continue;
} else if (strcmpn(argv[0],"font")){
cmd_font(argc,argv);
continue;
} else {
char* run[2] = {0};
run[1] = argv[0];
Expand Down
Loading

0 comments on commit dfd935f

Please sign in to comment.