Skip to content
This repository was archived by the owner on Oct 11, 2021. It is now read-only.

Commit 8b41061

Browse files
committed
♠️
1 parent 553a433 commit 8b41061

File tree

9 files changed

+298
-7
lines changed

9 files changed

+298
-7
lines changed

os/cpu/timer.c

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/*
2+
drippleMini OS (C) 2021
3+
LICENSE @ ROOT DIRECTORY
4+
github_url: https://github.com/BaseProgrammer/drippleMini
5+
6+
*/
7+
8+
#include "timer.h"
9+
#include "isr.h"
10+
#include "../drivers/screen.h"
11+
#include "../kernel/util.h"
12+
13+
u32 tick = 0;
14+
15+
static void timer_callback(registers_t regs)
16+
{
17+
tick++;
18+
19+
kprint("Tick: ");
20+
char tick_ascii[256];
21+
asciiIntConverter(tick, tick_ascii);
22+
kprint(tick_ascii);
23+
kprint("\n");
24+
}
25+
26+
void init_timer(u32 frequency)
27+
{
28+
register_interrupt_handler(IRQ0, timer_callback);
29+
30+
// PIT value: hardware clock at 1193180 Hz
31+
u32 divisor = 1193180 / frequency;
32+
u8 low = (u8)(divisor & 0xFFF);
33+
u8 high = (u8)((divisor >> 8) & 0xFFF);
34+
35+
port_byte_out(0x43, 0x36);
36+
port_byte_out(0x40, low);
37+
port_byte_out(0x40, high);
38+
}

os/cpu/timer.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/*
2+
drippleMini OS (C) 2021
3+
LICENSE @ ROOT DIRECTORY
4+
github_url: https://github.com/BaseProgrammer/drippleMini
5+
6+
*/
7+
8+
#ifndef TIMER_H
9+
#define TIMER_H
10+
11+
#include "../kernel/util.h"
12+
13+
void init_timer(u32 frequency);
14+
15+
#endif

os/drivers/keyboard.c

Lines changed: 216 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,216 @@
1+
#include "keyboard.h"
2+
#include "ports.h"
3+
#include "../cpu/isr.h"
4+
#include "screen.h"
5+
6+
static void keyboard_callback(registers_t regs)
7+
{
8+
u8 scancode = port_byte_in(0x60);
9+
char *sc_ascii;
10+
int_to_ascii(scancode, sc_ascii);
11+
kprint("Keyboard scancode: ");
12+
kprint(sc_ascii);
13+
kprint(", ");
14+
print_letter(scancode);
15+
kprint("\n");
16+
}
17+
18+
void init_keyboard()
19+
{
20+
register_interrupt_handler(IRQ1, keyboard_callback);
21+
}
22+
23+
void print_letter(u8 scancode)
24+
{
25+
// Scancodes would be the keys inputted
26+
switch (scancode)
27+
{
28+
case 0x0:
29+
kprint("ERROR");
30+
break;
31+
case 0x1:
32+
kprint("ESC");
33+
break;
34+
case 0x2:
35+
kprint("1");
36+
break;
37+
case 0x3:
38+
kprint("2");
39+
break;
40+
case 0x4:
41+
kprint("3");
42+
break;
43+
case 0x5:
44+
kprint("4");
45+
break;
46+
case 0x6:
47+
kprint("5");
48+
break;
49+
case 0x7:
50+
kprint("6");
51+
break;
52+
case 0x8:
53+
kprint("7");
54+
break;
55+
case 0x9:
56+
kprint("8");
57+
break;
58+
case 0x0A:
59+
kprint("9");
60+
break;
61+
case 0x0B:
62+
kprint("0");
63+
break;
64+
case 0x0C:
65+
kprint("-");
66+
break;
67+
case 0x0D:
68+
kprint("+");
69+
break;
70+
case 0x0E:
71+
kprint("Backspace");
72+
break;
73+
case 0x0F:
74+
kprint("Tab");
75+
break;
76+
case 0x10:
77+
kprint("Q");
78+
break;
79+
case 0x11:
80+
kprint("W");
81+
break;
82+
case 0x12:
83+
kprint("E");
84+
break;
85+
case 0x13:
86+
kprint("R");
87+
break;
88+
case 0x14:
89+
kprint("T");
90+
break;
91+
case 0x15:
92+
kprint("Y");
93+
break;
94+
case 0x16:
95+
kprint("U");
96+
break;
97+
case 0x17:
98+
kprint("I");
99+
break;
100+
case 0x18:
101+
kprint("O");
102+
break;
103+
case 0x19:
104+
kprint("P");
105+
break;
106+
case 0x1A:
107+
kprint("[");
108+
break;
109+
case 0x1B:
110+
kprint("]");
111+
break;
112+
case 0x1C:
113+
kprint("ENTER");
114+
break;
115+
case 0x1D:
116+
kprint("LCtrl");
117+
break;
118+
case 0x1E:
119+
kprint("A");
120+
break;
121+
case 0x1F:
122+
kprint("S");
123+
break;
124+
case 0x20:
125+
kprint("D");
126+
break;
127+
case 0x21:
128+
kprint("F");
129+
break;
130+
case 0x22:
131+
kprint("G");
132+
break;
133+
case 0x23:
134+
kprint("H");
135+
break;
136+
case 0x24:
137+
kprint("J");
138+
break;
139+
case 0x25:
140+
kprint("K");
141+
break;
142+
case 0x26:
143+
kprint("L");
144+
break;
145+
case 0x27:
146+
kprint(";");
147+
break;
148+
case 0x28:
149+
kprint("'");
150+
break;
151+
case 0x29:
152+
kprint("`");
153+
break;
154+
case 0x2A:
155+
kprint("LShift");
156+
break;
157+
case 0x2B:
158+
kprint("\\");
159+
break;
160+
case 0x2C:
161+
kprint("Z");
162+
break;
163+
case 0x2D:
164+
kprint("X");
165+
break;
166+
case 0x2E:
167+
kprint("C");
168+
break;
169+
case 0x2F:
170+
kprint("V");
171+
break;
172+
case 0x30:
173+
kprint("B");
174+
break;
175+
case 0x31:
176+
kprint("N");
177+
break;
178+
case 0x32:
179+
kprint("M");
180+
break;
181+
case 0x33:
182+
kprint(",");
183+
break;
184+
case 0x34:
185+
kprint(".");
186+
break;
187+
case 0x35:
188+
kprint("/");
189+
break;
190+
case 0x36:
191+
kprint("Rshift");
192+
break;
193+
case 0x37:
194+
kprint("Keypad *");
195+
break;
196+
case 0x38:
197+
kprint("LAlt");
198+
break;
199+
case 0x39:
200+
kprint("Spc");
201+
break;
202+
default:
203+
if (scancode <= 0x7f)
204+
{
205+
kprint("Unknown key down");
206+
}
207+
else if (scancode <= 0x39 + 0x80)
208+
{
209+
kprint("key up ");
210+
print_letter(scancode - 0x80);
211+
}
212+
else
213+
kprint("Unknown key up");
214+
break;
215+
}
216+
}

os/drivers/keyboard.h

Whitespace-only changes.

os/drivers/ports.o

-2.42 KB
Binary file not shown.

os/drivers/screen.o

-4.51 KB
Binary file not shown.

os/kernel/kernel.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@
55
66
*/
77

8-
#include "../drivers/screen.h"
9-
#include "util.h"
108
#include "../cpu/isr.h"
11-
#include "../cpu/idt.h"
9+
#include "../cpu/timer.h"
10+
#include "../drivers/keyboard.h"
1211

13-
void main()
14-
{
12+
void main() {
1513
isr_install();
16-
__asm__ __volatile__("int $2");
17-
__asm__ __volatile__("int $3");
14+
15+
asm volatile("sti");
16+
init_timer(50);
17+
init_keyboard();
1818
}

os/kernel/util.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,23 @@ void asciiIntConverter(int n, char str[])
3737
if (sign < 0)
3838
str[i++] = '-';
3939
str[i] = '\0';
40+
}
41+
42+
void reverse(char s[])
43+
{
44+
int a, b, c;
45+
for (b = 0, c = strlen(s) - 1; b < c; b++, c--)
46+
{
47+
a = s[b];
48+
s[b] = s[c];
49+
s[c] = a;
50+
}
51+
}
52+
53+
int strlen(char s[])
54+
{
55+
int i = 0;
56+
while (s[i] != '\0')
57+
++i;
58+
return i;
4059
}

os/kernel/util.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,7 @@ void memory_copy(char *source, char *dest, int nbytes);
1414
void memory_set(u8 *dest, u8 value, u32 length);
1515
void asciiIntConverter(int n, char str[]);
1616

17+
void reverse(char s[]);
18+
int strlen(char s[]);
19+
1720
#endif

0 commit comments

Comments
 (0)