An open API service indexing awesome lists of open source software.

https://github.com/aleksandr1512/SSB---small-simple-boot

It's simple kernel on NASM assembler
https://github.com/aleksandr1512/SSB---small-simple-boot

assembler kernel nasm

Last synced: 12 months ago
JSON representation

It's simple kernel on NASM assembler

Awesome Lists containing this project

README

          

# SSB---small-simple-boot
## **Описание**
Это простейшый загрузчик на ассемблер nasm с открытым исходным кодом с помощью которого можно запускать программы без ос, или например написать свои полезные макросы которые можно будет запускать примяком из BIOS. Отличием загрузчика от остальных в том, что он предназначен не для запуска образов ОС, а для выполнения пользовательских макросов, которые можно запускать из встроенной cmd.

## **Установка и использование**
вы сразу можете запустить загрузчик(SSB/bin/boot.bin),
или запустить через эмулятор такой как **qemu**

Команда запуска ядра через qemu:
```bash
qemu-system-i386 boot.bin -monitor stdio
```
Но функцианал выходит давольно слабым,
Я предлагаю скачать исходники из папки `src`, самому добавить свои макросы для выполнения,
и в итоге скомпилировать загрузчик самому!

Для начала разберёмся какие и зачем нужны файлы:

`config.asm` - здесь прописаны все тексты которые появляются в системе(приветствие, прощание, приглашение в командной строке).
Также в этом файле есть две функции `on_start` и `always`, первая функция выполняет ваш код на ассемблере при запуске системы.
Вторая соответственно выполняет код постоянно.

также в нём написаны все функции
Например:
```assembler
call1_command: db "call1", 0
```
И сам код команды:
``` assembler
call1:
;ваш код
jmp done
```
Функция done обеспечивает выхот из команды/под-программы.

Что бы добавить свою команду написаную в config.asm нужно в метке `always` написать следуйщий код (обработчик команды):
Для примера возьмём рание использоваемую в примере команду `call1`:
``` assembler
mov ax, call1_command
call check_the_input

cmp cx, 1
je call1
```

буффером в ядре считается метка `buffer`, в неё записывается весь пользовательский ввод.
функция `done` отчищает `buffer`

мы написали свои макросы и команды для загрузчика, перейдём к компиляции.

Но перед этим давайте разберёмся в других файлах:
`main.asm` - главный файл загрузчика.
В файле `drivers.asm` написаны функции для работы с прерываниями bios и функциями для работы со встроенной cmd.

список функций:
`print` - вывод в терминал, аргумент(текст для вывода) записывается в регистр si.
`get_input` - получение даных от пользователя(то, что ввёл пользователь записывается в буффер input)
`compare_strs` - сравнение строк(регистры si,bx - строки которые хотим сравнить, cx - результат сравнения, 1 - строки одинаковы, 0 - разные)
`check_the_input` - тот же `compare_strs` но сразу сравнивает `buffer` со значением из регистра ax.

Вернёмся к компиляции и скомпилируем загрузчик:
```
nasm -f bin main.asm -o boot.bin
```