]> Joshua Wise's Git repositories - netwatch.git/blob - aseg/counter.c
Remove an entry from the GDT that is no longer necessary. Add a few comments.
[netwatch.git] / aseg / counter.c
1 #include <io.h>
2
3 char counter = 0;
4 unsigned long pcisave;
5 unsigned char vgasave;
6 unsigned char thestr[512];
7
8 void memcpy(char *dst, char *src, int c)
9 {
10         while (c--)
11                 *(dst++) = *(src++);
12 }
13
14 void strcpy(char *dst, char *src)
15 {
16         while (*src)
17                 *(dst++) = *(src++);
18 }
19
20 unsigned char vgaread(unsigned char idx)
21 {
22         outb(0x3D4, idx);
23         inb(0x3D5);
24 }
25
26 void strblit(char *src)
27 {
28         char *destp = (char*)(0xB8000 | (vgaread(0xC) << 5) | (vgaread(0xD) << 1));
29         while (*src)
30         {
31                 *(destp++) = *(src++);
32                 *(destp++) = 0x1F;
33         }
34 }
35
36 void __start (void)
37 {
38         unsigned char smramc;
39         
40         pcisave = inl(0xCF8);
41         vgasave = inb(0x3D4);
42
43         counter++;
44         outb(0x80, counter);
45         
46         strcpy(thestr, "15-412!");
47         
48         smramc = pci_read8(0, 0, 0, 0x70);
49         pci_write8(0, 0, 0, 0x70, (smramc & 0xF3) | 0x08);
50         strblit(thestr);
51         pci_write8(0, 0, 0, 0x70, smramc);
52         
53         outl(0xCF8, pcisave);
54         outb(0x3D4, vgasave);
55         
56         outb(0x834, 0x40);      // ack the periodic IRQ
57         outb(0x830, (inb(0x830) | 0x2) & ~0x40);
58         outb(0x830, inb(0x830) | 0x40);
59         
60 }
61
This page took 0.030488 seconds and 4 git commands to generate.