Guest User

Untitled

a guest
Jul 17th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.99 KB | None | 0 0
  1. .global loader
  2.  
  3. .set ALIGN, 1<<0
  4. .set MEMINFO, 1<<1
  5. .set FLAGS, ALIGN | MEMINFO
  6. .set MAGIC, 0x1BADB002
  7. .set CHECKSUM, -(MAGIC + FLAGS)
  8.  
  9. .align 4
  10. .long MAGIC
  11. .long FLAGS
  12. .long CHECKSUM
  13.  
  14. .set SIZE, 0x4000
  15. .comm stack, SIZE, 32
  16.  
  17. loader:
  18. mov $(stack + SIZE), %esp
  19. push %eax
  20. push %ebx
  21.  
  22. call k_main
  23.  
  24. cli
  25. hang:
  26. hlt
  27. jmp hang
  28.  
  29. #define BLACK 0
  30. #define BLUE 1
  31. #define GREEN 2
  32. #define CYAN 3
  33. #define RED 4
  34. #define MAGENTA 5
  35. #define BROWN 6
  36. #define L_GREY 7
  37. #define D_ GREY 8
  38. #define L_BLUE 9
  39. #define L_GREEN 10
  40. #define L_CYAN 11
  41. #define L_RED 12
  42. #define L_MAGENTA 13
  43. #define L_BROWN 14
  44. #define WHITE 15
  45.  
  46. int color(char background, char foreground)
  47. {
  48. return (background << 4) | foreground;
  49. }
  50.  
  51. int line_break(unsigned int line, unsigned int i, char *message)
  52. {
  53. unsigned int count = 0;
  54. while(*++message != ' ' && *message != '\0')
  55. {
  56. count++;
  57. }
  58. if((count << 1) + i >= (++line*160))
  59. {
  60. return 1;
  61. }
  62. return 0;
  63. }
  64.  
  65. void clear_screen()
  66. {
  67. short *vidmem = (short *) 0xb8000;
  68. unsigned int i = 0;
  69. while( i < 2000)
  70. {
  71. vidmem[i++]=0;
  72. }
  73. }
  74.  
  75. unsigned int print(char *message, unsigned int line, int color)
  76. {
  77. char *vidmem = (char *) 0xb8000;
  78. unsigned int i = (line*160);
  79. for(;*message != '\0'; *message++)
  80. {
  81. if(*message=='\n' || (*message == ' ' && line_break(line, i, message)))
  82. {
  83. i=(++line*160);
  84. }
  85. else
  86. {
  87. vidmem[i++]=*message;
  88. vidmem[i++]= color;
  89. }
  90. }
  91.  
  92. return 1;
  93. }
  94.  
  95. void k_main( void* mbd, unsigned int magic )
  96. {
  97. clear_screen();
  98. print("Hello World", 0, color(BLACK, L_GREY));
Add Comment
Please, Sign In to add comment