added memcpy{,w,d}(), memset{,w,d}(); filled in kputc()
git-svn-id: svn://anubis/hos/trunk@46 5b3e749e-e535-0410-8002-a9bb6afbdfca
This commit is contained in:
parent
6a69fd06ec
commit
a4d497544e
@ -4,8 +4,10 @@
|
|||||||
#include "multiboot.h"
|
#include "multiboot.h"
|
||||||
#include "k_early_panic.h"
|
#include "k_early_panic.h"
|
||||||
#include "mm/mm.h"
|
#include "mm/mm.h"
|
||||||
|
#include "lang/kio.h"
|
||||||
|
|
||||||
#define DEBUG_LETTER(col,chr) *(u16_t *)(CONSOLE_MEMORY + 160 * 8 + (col) * 2) \
|
#define DEBUG_LETTER(col,chr) *(u16_t *)(KERNEL_OFFSET + CONSOLE_MEMORY \
|
||||||
|
+ 160 * 8 + (col) * 2) \
|
||||||
= 0x0700 | (chr)
|
= 0x0700 | (chr)
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
||||||
@ -44,6 +46,7 @@ u32_t k_bootstrap(mb_info_t * mb_info, u32_t mb_magic)
|
|||||||
* before calling them.
|
* before calling them.
|
||||||
*/
|
*/
|
||||||
mm_bootstrap();
|
mm_bootstrap();
|
||||||
|
kio_bootstrap();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
void k_early_panic(const char * msg)
|
void k_early_panic(const char * msg)
|
||||||
{
|
{
|
||||||
char * dest = (char *) CONSOLE_MEMORY;
|
char * dest = (char *) (CONSOLE_MEMORY + KERNEL_OFFSET);
|
||||||
while (*msg)
|
while (*msg)
|
||||||
{
|
{
|
||||||
*dest++ = *msg++;
|
*dest++ = *msg++;
|
||||||
|
@ -15,7 +15,7 @@ extern "C" {
|
|||||||
#define PAGE_HIGH_MASK (0xFFFFFFFFu << PAGE_LOG_SIZE)
|
#define PAGE_HIGH_MASK (0xFFFFFFFFu << PAGE_LOG_SIZE)
|
||||||
#define PAGE_LOW_MASK (0xFFFFFFFFu >> (32 - PAGE_LOG_SIZE))
|
#define PAGE_LOW_MASK (0xFFFFFFFFu >> (32 - PAGE_LOG_SIZE))
|
||||||
|
|
||||||
#define CONSOLE_MEMORY (KERNEL_OFFSET + 0xB8000)
|
#define CONSOLE_MEMORY 0xB8000
|
||||||
|
|
||||||
extern u8_t _code;
|
extern u8_t _code;
|
||||||
extern u8_t _bss;
|
extern u8_t _bss;
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
|
|
||||||
|
#include "hos_types.h"
|
||||||
|
#include "hos_defines.h"
|
||||||
#include "kio.h"
|
#include "kio.h"
|
||||||
#include "string.h"
|
#include "string.h"
|
||||||
|
|
||||||
@ -12,8 +14,16 @@ static void fmt_ull2a(char * buf, unsigned long long val);
|
|||||||
static void fmt_x2a(char * buf, unsigned int val);
|
static void fmt_x2a(char * buf, unsigned int val);
|
||||||
static void fmt_o2a(char * buf, unsigned int val);
|
static void fmt_o2a(char * buf, unsigned int val);
|
||||||
|
|
||||||
|
static int cursor_x, cursor_y;
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
||||||
|
void kio_bootstrap()
|
||||||
|
{
|
||||||
|
cursor_x = 0;
|
||||||
|
cursor_y = 8;
|
||||||
|
}
|
||||||
|
|
||||||
void kprintf(char * fmt, ...)
|
void kprintf(char * fmt, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
@ -81,6 +91,39 @@ void kvprintf(char * fmt, va_list args)
|
|||||||
|
|
||||||
void kputc(char c)
|
void kputc(char c)
|
||||||
{
|
{
|
||||||
|
u16_t * console_memory = (u16_t *) CONSOLE_MEMORY;
|
||||||
|
console_memory += 80 * cursor_y + cursor_x;
|
||||||
|
switch (c)
|
||||||
|
{
|
||||||
|
case '\t':
|
||||||
|
{
|
||||||
|
int to_advance = 8 - (cursor_x & 0x3);
|
||||||
|
while (to_advance--)
|
||||||
|
{
|
||||||
|
*console_memory++ = 0x0720;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case '\n':
|
||||||
|
cursor_x = 0;
|
||||||
|
cursor_y++;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
*console_memory = 0x0700 | (c & 0xFF);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (cursor_x >= 80)
|
||||||
|
{
|
||||||
|
cursor_x = 0;
|
||||||
|
cursor_y++;
|
||||||
|
}
|
||||||
|
if (cursor_y >= 25)
|
||||||
|
{
|
||||||
|
memcpy((u8_t *) CONSOLE_MEMORY,
|
||||||
|
(u8_t *) (CONSOLE_MEMORY + 80 * 2),
|
||||||
|
2 * 80 * 24);
|
||||||
|
memsetw((u16_t *) (CONSOLE_MEMORY + 2 * 80 * 24), 0x0720, 80);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void kputs(char * s)
|
void kputs(char * s)
|
||||||
|
@ -8,6 +8,8 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void kio_bootstrap();
|
||||||
|
|
||||||
void kprintf(char * fmt, ...);
|
void kprintf(char * fmt, ...);
|
||||||
|
|
||||||
void kvprintf(char * fmt, va_list args);
|
void kvprintf(char * fmt, va_list args);
|
||||||
|
@ -11,4 +11,52 @@ void strcpy(char * dst, const char * src)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void memcpy(u8_t * dst, u8_t * src, u32_t size)
|
||||||
|
{
|
||||||
|
for (u32_t n = 0; n < size; n++)
|
||||||
|
{
|
||||||
|
*dst++ = *src++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void memcpyw(u16_t * dst, u16_t * src, u32_t size)
|
||||||
|
{
|
||||||
|
for (u32_t n = 0; n < size; n++)
|
||||||
|
{
|
||||||
|
*dst++ = *src++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void memcpyd(u32_t * dst, u32_t * src, u32_t size)
|
||||||
|
{
|
||||||
|
for (u32_t n = 0; n < size; n++)
|
||||||
|
{
|
||||||
|
*dst++ = *src++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void memset(u8_t * dst, u8_t val, u32_t size)
|
||||||
|
{
|
||||||
|
for (u32_t n = 0; n < size; n++)
|
||||||
|
{
|
||||||
|
*dst++ = val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void memsetw(u16_t * dst, u16_t val, u32_t size)
|
||||||
|
{
|
||||||
|
for (u32_t n = 0; n < size; n++)
|
||||||
|
{
|
||||||
|
*dst++ = val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void memsetd(u32_t * dst, u32_t val, u32_t size)
|
||||||
|
{
|
||||||
|
for (u32_t n = 0; n < size; n++)
|
||||||
|
{
|
||||||
|
*dst++ = val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
|
@ -2,12 +2,22 @@
|
|||||||
#ifndef STRING_H
|
#ifndef STRING_H
|
||||||
#define STRING_H
|
#define STRING_H
|
||||||
|
|
||||||
|
#include "hos_defines.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void strcpy(char * dst, const char * src);
|
void strcpy(char * dst, const char * src);
|
||||||
|
|
||||||
|
void memcpy(u8_t * dst, u8_t * src, u32_t size);
|
||||||
|
void memcpyw(u16_t * dst, u16_t * src, u32_t size);
|
||||||
|
void memcpyd(u32_t * dst, u32_t * src, u32_t size);
|
||||||
|
|
||||||
|
void memset(u8_t * dst, u8_t val, u32_t size);
|
||||||
|
void memsetw(u16_t * dst, u16_t val, u32_t size);
|
||||||
|
void memsetd(u32_t * dst, u32_t val, u32_t size);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user