aboutsummaryrefslogtreecommitdiff
path: root/src/kernel.c
blob: 98269c16142365fd511833bf8de626f2ad7a2c95 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/* *** glitch kernel ***
 * spdx-license-identifier: ISC
 * description: kernel entry point
 * */

#include "conf.h"
#include "mem.h"
#include <keyboard.h>
#include <mouse.h>
#include <pic.h>
#include <ps2_controller.h>
#include <stdio.h>
#include <sys/cpuid.h>
#include <uart.h>
#include <vga.h>

FILE *stdin;
FILE *stdout;
FILE *stderr;

void
kmain(void)
{
  stderr = uart_init(COM1);
  vmm_map(0xb8000, 0xc03ff000);
  stdout = vga_init((void *)0xc03ff000);

  printf("glitch [version " VERSION "] [" CC "]\n");
  fprintf(stderr, "glitch [version " VERSION "] [" CC "]\n");
  {
    struct CPUVersion v;

    char vendor[13] = {'\0'};
    unsigned int eax;
    __get_cpuid(0, &eax, (unsigned int *)vendor, (unsigned int *)(vendor + 8), (unsigned int *)(vendor + 4));
    __get_cpuid(1, (unsigned int *)&v, &eax, &eax, &eax);
    printf("cpuid: %s family %u model %u stepping %u\n", vendor, family(v), model(v), v.stepping);
    fprintf(stderr, "cpuid: %s family %u model %u stepping %u\n", vendor, family(v), model(v), v.stepping);
  }

  pic_init();

  ps2_ctrl_init();
  ps2_keyboard_init();
  mouse_init();

  pic_enable();
  fprintf(stderr, "interrupts enabled\n");

  /*
    alloc4M();
    char *c = (char *)0xc0700000;
    if (*c == 0) printf("c is 0\r\n");
  */

  while (1) {}
}