Add: calloc
This commit is contained in:
BIN
include/fonts/UniCyrExt_8x16.psf
Normal file
BIN
include/fonts/UniCyrExt_8x16.psf
Normal file
Binary file not shown.
Binary file not shown.
4
makefile
4
makefile
@@ -26,8 +26,8 @@ PROGRAM_OBJECTS = $(patsubst $(SRC_DIR)/%, $(OBJ_DIR)/%, $(PROGRAM_SOURCES:.c=.o
|
|||||||
TOOLCHAIN_SRC = https://newos.org/toolchains/i386-elf-7.5.0-Linux-x86_64.tar.xz
|
TOOLCHAIN_SRC = https://newos.org/toolchains/i386-elf-7.5.0-Linux-x86_64.tar.xz
|
||||||
TOOLCHAIN_FILE = i386-elf-7.5.0-Linux-x86_64.tar.xz
|
TOOLCHAIN_FILE = i386-elf-7.5.0-Linux-x86_64.tar.xz
|
||||||
|
|
||||||
FONT_OBJ = $(OBJ_DIR)/fonts/UniCyr_8x16.o
|
FONT_OBJ = $(OBJ_DIR)/fonts/UniCyrExt_8x16.o
|
||||||
FONT_SRC = $(FONTS_DIR)/UniCyr_8x16.psf
|
FONT_SRC = $(FONTS_DIR)/UniCyrExt_8x16.psf
|
||||||
|
|
||||||
all: $(OBJ_DIR) kernel.elf programs
|
all: $(OBJ_DIR) kernel.elf programs
|
||||||
|
|
||||||
|
|||||||
@@ -18,13 +18,13 @@ void putpixel(uint32_t* fb, int pitch, int bpp, int x, int y, uint32_t color)
|
|||||||
|
|
||||||
void draw_char(unsigned short int c, int cx, int cy, uint32_t fg, uint32_t bg)
|
void draw_char(unsigned short int c, int cx, int cy, uint32_t fg, uint32_t bg)
|
||||||
{
|
{
|
||||||
PSF_font *font = (PSF_font*)&_binary_include_fonts_UniCyr_8x16_psf_start;
|
PSF_font *font = (PSF_font*)&_binary_include_fonts_UniCyrExt_8x16_psf_start;
|
||||||
int bytesperline=(font->width+7)/8;
|
int bytesperline=(font->width+7)/8;
|
||||||
if (unicode != NULL) {
|
if (unicode != NULL) {
|
||||||
c = unicode[c];
|
c = unicode[c];
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned char* glyph = (unsigned char*)&_binary_include_fonts_UniCyr_8x16_psf_start + font->headersize + (c>0&&c<font->numglyph?c:0)*font->bytesperglyph;
|
unsigned char* glyph = (unsigned char*)&_binary_include_fonts_UniCyrExt_8x16_psf_start + font->headersize + (c>0&&c<font->numglyph?c:0)*font->bytesperglyph;
|
||||||
|
|
||||||
int offs =
|
int offs =
|
||||||
(cy * font->height * scanline) +
|
(cy * font->height * scanline) +
|
||||||
@@ -54,7 +54,7 @@ void scroll()
|
|||||||
{
|
{
|
||||||
serial_printf(3, "Scrolling...\r");
|
serial_printf(3, "Scrolling...\r");
|
||||||
uint32_t bg_color = 0x00000000;
|
uint32_t bg_color = 0x00000000;
|
||||||
PSF_font *font = (PSF_font*)&_binary_include_fonts_UniCyr_8x16_psf_start;
|
PSF_font *font = (PSF_font*)&_binary_include_fonts_UniCyrExt_8x16_psf_start;
|
||||||
|
|
||||||
int line_size = font->height * scanline;
|
int line_size = font->height * scanline;
|
||||||
int framebuffer_size = scanline * font->height * (1080/font->height);
|
int framebuffer_size = scanline * font->height * (1080/font->height);
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
extern int scanline;
|
extern int scanline;
|
||||||
extern char _binary_include_fonts_UniCyr_8x16_psf_start;
|
extern char _binary_include_fonts_UniCyrExt_8x16_psf_start;
|
||||||
uint16_t* unicode;
|
uint16_t* unicode;
|
||||||
|
|
||||||
#define PIXEL uint32_t
|
#define PIXEL uint32_t
|
||||||
|
|||||||
@@ -56,6 +56,23 @@ void* malloc(size_t size)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void* calloc(size_t num, size_t size)
|
||||||
|
{
|
||||||
|
size_t total_size = num*size;
|
||||||
|
void* ptr = malloc(total_size);
|
||||||
|
|
||||||
|
if (ptr != NULL)
|
||||||
|
{
|
||||||
|
uint8_t* byte_ptr = (uint8_t*)ptr;
|
||||||
|
for (size_t i=0; i<total_size; i++)
|
||||||
|
{
|
||||||
|
byte_ptr[i] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ptr;
|
||||||
|
}
|
||||||
|
|
||||||
void free(void* ptr)
|
void free(void* ptr)
|
||||||
{
|
{
|
||||||
if (ptr == NULL) return;
|
if (ptr == NULL) return;
|
||||||
|
|||||||
@@ -20,5 +20,6 @@ typedef struct block
|
|||||||
void init_alloc();
|
void init_alloc();
|
||||||
void* malloc(size_t size);
|
void* malloc(size_t size);
|
||||||
void free(void* ptr);
|
void free(void* ptr);
|
||||||
|
void* calloc(size_t num, size_t size);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -118,6 +118,10 @@ void kmain(multiboot2_info *mb_info)
|
|||||||
printf("[debug] malloc test ptr1=0x%x, ptr2=0x%x\n", (unsigned int)ptr1, (unsigned int)ptr2);
|
printf("[debug] malloc test ptr1=0x%x, ptr2=0x%x\n", (unsigned int)ptr1, (unsigned int)ptr2);
|
||||||
free(ptr1); free(ptr2);
|
free(ptr1); free(ptr2);
|
||||||
|
|
||||||
|
void* ptr3 = calloc(1024, 2);
|
||||||
|
printf("[debug] calloc test ptr3=0x%x\n", (unsigned int)ptr3);
|
||||||
|
free (ptr3);
|
||||||
|
|
||||||
// usually the place where i do testing
|
// usually the place where i do testing
|
||||||
|
|
||||||
timer_install();
|
timer_install();
|
||||||
|
|||||||
Reference in New Issue
Block a user