Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ====entry.S
- .code16
- .global _start
- _start:
- call main
- hang:
- jmp hang
- ====user.ld
- ENTRY(_start)
- SECTIONS {
- . = 0x0000;
- .text : {
- *(.text)
- }
- .data : {
- *(.data)
- }
- .bss : {
- *(.bss COMMON)
- }
- }
- ====bootloader.asm
- [org 0x7C00]
- bits 16
- start:
- cli
- xor ax, ax
- mov ds, ax
- call print_ok
- mov ax, 0x1000
- mov es, ax
- xor ax, ax
- mov ss, ax
- mov sp, 0x7C00
- mov ah, 0x02
- mov al, 1
- mov ch, 0
- mov cl, 2
- mov dh, 0
- mov dl, 0x00
- int 0x13
- jc error
- mov sp, 0xFFFE
- mov ax, 0x1000
- mov ds, ax
- jmp 0x1000:0000
- print_ok:
- mov si, boot_msg
- call print
- ret
- error:
- mov si, error_msg
- print:
- lodsb
- or al, al
- jz .done
- mov ah, 0x0E
- int 0x10
- jmp print
- .done:
- ret
- error_msg db "Load error", 0
- boot_msg db "Odpalanie program.c... ", 0
- times 510 - ($ - $$) db 0
- dw 0xAA55
- ====user.c
- void print(const char* s) {
- while (*s) {
- __asm__ __volatile__ (
- "movb $0x0E, %%ah\n"
- "int $0x10"
- :
- : "a"(*s)
- );
- s++;
- }
- }
- void main() {
- print("Hello z C xD");
- }
- ====make.bat
- @echo off
- cd C:\gcc\bin
- i386-elf-gcc -m16 -ffreestanding -fno-pic -mno-red-zone -fno-builtin -nostdlib -c C:\Users\Piotrek\Desktop\tmp\entry.S -o C:\Users\Piotrek\Desktop\tmp\entry.o
- i386-elf-gcc -m16 -ffreestanding -fno-pic -mno-red-zone -fno-builtin -nostdlib -c C:\Users\Piotrek\Desktop\tmp\user.c -o C:\Users\Piotrek\Desktop\tmp\user.o
- i386-elf-ld -T C:\Users\Piotrek\Desktop\tmp\user.ld -o C:\Users\Piotrek\Desktop\tmp\user.elf C:\Users\Piotrek\Desktop\tmp\entry.o C:\Users\Piotrek\Desktop\tmp\user.o
- i386-elf-objcopy -O binary C:\Users\Piotrek\Desktop\tmp\user.elf C:\Users\Piotrek\Desktop\tmp\user.bin
- cd %localappdata%\bin\nasm
- nasm -f bin C:\Users\Piotrek\Desktop\tmp\bootloader.asm -o C:\Users\Piotrek\Desktop\tmp\bootloader.bin
- copy /b C:\Users\Piotrek\Desktop\tmp\bootloader.bin + C:\Users\Piotrek\Desktop\tmp\user.bin C:\Users\Piotrek\Desktop\tmp\full.img
- echo Built full.img (bootloader + C program)
- cd C:\Users\Piotrek\Desktop\tmp\
Advertisement
Add Comment
Please, Sign In to add comment