| 
									
										
										
										
											2024-08-10 01:14:29 +02:00
										 |  |  | #include <kernel/tty.h>
 | 
					
						
							|  |  |  | #include <kernel/keyboard.h>
 | 
					
						
							|  |  |  | #include <debugging.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void print(char* buffer)  | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     terminal_writestring(buffer); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void* memcpy(void* restrict dstptr, const void* restrict srcptr, size_t size) { | 
					
						
							|  |  |  | 	unsigned char* dst = (unsigned char*) dstptr; | 
					
						
							|  |  |  | 	const unsigned char* src = (const unsigned char*) srcptr; | 
					
						
							|  |  |  | 	for (size_t i = 0; i < size; i++) | 
					
						
							|  |  |  | 		dst[i] = src[i]; | 
					
						
							|  |  |  | 	return dstptr; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void input(char* buffer) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     while (true) { | 
					
						
							|  |  |  |         for (int i = 0; i < keyboard_buffer_top; i++) { | 
					
						
							|  |  |  |             buffer[i] = keyboard_buffer[i]; | 
					
						
							|  |  |  |             if (keyboard_buffer[i] == '\n') { | 
					
						
							|  |  |  |                 buffer[keyboard_buffer_top] = 0; | 
					
						
							|  |  |  |                 keyboard_buffer_top = 0; | 
					
						
							|  |  |  |                 return; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2024-08-10 01:17:14 +02:00
										 |  |  |         asm("hlt"); | 
					
						
							| 
									
										
										
										
											2024-08-10 01:14:29 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void _syscall(uint32_t a, uint32_t b, uint32_t c, uint32_t d) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     switch (d) { | 
					
						
							|  |  |  |         case 0x00: | 
					
						
							|  |  |  |             print((char*) a); | 
					
						
							|  |  |  |             break; | 
					
						
							|  |  |  |         case 0x01: | 
					
						
							|  |  |  |             input((char*) a); | 
					
						
							|  |  |  |             break; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |