Вот мой новый код ядра, который должен печатать (кстати, причина, по которой он называется printstack, потому что я пытаюсь передать параметры по стеку, но это не сработало):
void printstack(char in){ /*print function*/
asm ("mov ah,0x0e\n"
"mov al,%0\n"
"int 0x10\n"
::"r"(in)
);
}
void main(){ /*kernel entry point*/
printstack('a');
}
Однако когда я тестирую его в QEMU, это только пробелы для печати.
Вот полный скрипт для сборки os.flp:
echo ">>> Creating floppy image..."
mkdosfs -C os.flp 1440 || exit
echo ">>> Assembling bootloader..."
nasm -O0 -w+orphan-labels -f bin -o source/bootload/bootload.bin source/bootload/bootload.asm || exit
echo "compiling kernel"
gcc -c ./source/kernel.c -masm=intel
ld --oformat binary kernel.o -o ./source/kernel.bin -e main
echo ">>> Adding bootloader to floppy image..."
dd status=noxfer conv=notrunc if=source/bootload/bootload.bin of=os.flp || exit
echo ">>> Copying kernel"
rm -rf tmp-loop
mkdir tmp-loop && mount -o loop -t vfat os.flp tmp-loop && cp source/kernel.bin tmp-loop/
sleep 0.2
echo ">>> Unmounting loopback floppy..."
umount tmp-loop || exit
rm -rf tmp-loop
t
echo '>>> Done!'