Guest User

Untitled

a guest
Jun 11th, 2025
23
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.26 KB | None | 0 0
  1. ====entry.S
  2. .code16
  3. .global _start
  4. _start:
  5. call main
  6.  
  7.  
  8. hang:
  9. jmp hang
  10.  
  11.  
  12. ====user.ld
  13. ENTRY(_start)
  14.  
  15. SECTIONS {
  16. . = 0x0000;
  17.  
  18. .text : {
  19. *(.text)
  20. }
  21.  
  22. .data : {
  23. *(.data)
  24. }
  25.  
  26. .bss : {
  27. *(.bss COMMON)
  28. }
  29. }
  30.  
  31.  
  32.  
  33. ====bootloader.asm
  34. [org 0x7C00]
  35. bits 16
  36.  
  37. start:
  38. cli
  39. xor ax, ax
  40. mov ds, ax
  41. call print_ok
  42. mov ax, 0x1000
  43. mov es, ax
  44. xor ax, ax
  45. mov ss, ax
  46. mov sp, 0x7C00
  47.  
  48. mov ah, 0x02
  49. mov al, 1
  50. mov ch, 0
  51. mov cl, 2
  52. mov dh, 0
  53. mov dl, 0x00
  54. int 0x13
  55.  
  56. jc error
  57.  
  58. mov sp, 0xFFFE
  59. mov ax, 0x1000
  60. mov ds, ax
  61.  
  62. jmp 0x1000:0000
  63. print_ok:
  64. mov si, boot_msg
  65. call print
  66. ret
  67. error:
  68. mov si, error_msg
  69. print:
  70. lodsb
  71. or al, al
  72. jz .done
  73. mov ah, 0x0E
  74. int 0x10
  75. jmp print
  76. .done:
  77. ret
  78.  
  79. error_msg db "Load error", 0
  80. boot_msg db "Odpalanie program.c... ", 0
  81.  
  82. times 510 - ($ - $$) db 0
  83. dw 0xAA55
  84.  
  85.  
  86. ====user.c
  87. void print(const char* s) {
  88. while (*s) {
  89. __asm__ __volatile__ (
  90. "movb $0x0E, %%ah\n"
  91. "int $0x10"
  92. :
  93. : "a"(*s)
  94. );
  95. s++;
  96. }
  97. }
  98.  
  99.  
  100. void main() {
  101. print("Hello z C xD");
  102. }
  103.  
  104.  
  105. ====make.bat
  106. @echo off
  107. cd C:\gcc\bin
  108. 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
  109. 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
  110. 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
  111. i386-elf-objcopy -O binary C:\Users\Piotrek\Desktop\tmp\user.elf C:\Users\Piotrek\Desktop\tmp\user.bin
  112. cd %localappdata%\bin\nasm
  113. nasm -f bin C:\Users\Piotrek\Desktop\tmp\bootloader.asm -o C:\Users\Piotrek\Desktop\tmp\bootloader.bin
  114. copy /b C:\Users\Piotrek\Desktop\tmp\bootloader.bin + C:\Users\Piotrek\Desktop\tmp\user.bin C:\Users\Piotrek\Desktop\tmp\full.img
  115. echo Built full.img (bootloader + C program)
  116. cd C:\Users\Piotrek\Desktop\tmp\
Advertisement
Add Comment
Please, Sign In to add comment