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
- Host: GitHub
- URL: https://github.com/aleksandr1512/SSB---small-simple-boot
- Owner: aleksandr1512
- License: gpl-3.0
- Created: 2024-06-28T13:25:52.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2024-07-18T09:17:03.000Z (almost 2 years ago)
- Last Synced: 2024-11-21T01:42:07.771Z (over 1 year ago)
- Topics: assembler, kernel, nasm
- Language: Assembly
- Homepage:
- Size: 124 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
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
```