Advertisement
Guest User

kio

a guest
Nov 2nd, 2017
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
D 1.30 KB | None | 0 0
  1. // kio.d
  2. module kio;
  3.  
  4. enum VGA_START = cast(ubyte *) 0xB8000;
  5.  
  6. struct vga_buffer {
  7.     align (1):
  8.     ubyte* address = VGA_START;
  9.     ushort pointer = 0;
  10. }
  11.  
  12. shared vga_buffer vb;
  13.  
  14. enum : ubyte
  15. {
  16.     BLACK, BLUE, GREEN, CYAN,
  17.     RED, MAGENTA, BROWN, GRAY,
  18.     DARK_GRAY, BRIGHT_BLUE, BRIGHT_GREEN, BRIGHT_CYAN,
  19.     BRIGHT_RED, BRIGHT_MAGENTA, YELLOW, WHITE
  20. }
  21.  
  22. enum COLOR = (BLACK << 4) | GRAY;
  23.  
  24. void kwritec_with_color(char output, ubyte color)
  25. {
  26.     ushort vtmp = cast(ushort) (vb.pointer * 2);
  27.     vb.address[vtmp] = cast(ubyte) output;
  28.     vb.address[vtmp + 1] = color;
  29.     if (vb.pointer + 1 == 2000)
  30.     {
  31.         vb.pointer = 0;
  32.         return;
  33.     }
  34.     vb.pointer++;
  35. }
  36.  
  37. void kwritec(char output)
  38. {
  39.     kwritec_with_color(output, COLOR);
  40. }
  41.  
  42. void kwrites(string output)
  43. {
  44.     foreach (c; output)
  45.     {
  46.         kwritec(c);
  47.     }
  48. }
  49.  
  50. // kmain.d
  51. import kio;
  52. extern(C):
  53.  
  54. void kmain()
  55. {
  56.     /* works
  57.     ubyte *video = cast(ubyte *) 0x000B_8000;
  58.     video[0] = cast(ubyte) 'T';
  59.     video[1] = (BLACK << 4) | GRAY;
  60.     video[2] = cast(ubyte) 'e';
  61.     video[3] = (BLACK << 4) | GRAY;
  62.     video[4] = cast(ubyte) 's';
  63.     video[5] = (BLACK << 4) | GRAY;
  64.     video[6] = cast(ubyte) 't';
  65.     video[7] = (BLACK << 4) | GRAY;
  66.     */
  67.  
  68.     kwrites("test"); // nothing prints
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement