DragonOS/kernel/lib/glib.c

59 lines
1.3 KiB
C
Raw Normal View History

#include <common/glib.h>
#include <common/string.h>
2022-06-25 12:55:59 +00:00
/**
* @brief
*
* @param times
*/
void __experimental_beep(uint64_t times)
{
io_out8(0x43, 182&0xff);
io_out8(0x42, 2280&0xff);
io_out8(0x42, (2280>>8)&0xff);
uint32_t x = io_in8(0x61)&0xff;
x |= 3;
io_out8(0x61, x&0xff);
times *= 10000;
for(uint64_t i=0;i<times;++i)
pause();
x = io_in8(0x61);
x &= 0xfc;
io_out8(0x61, x&0xff);
// 延迟一段时间
for(uint64_t i=0;i<times;++i)
pause();
2022-09-03 08:13:29 +00:00
}
/**
* @brief src搬运到dst
*
* @param dst
* @param src
* @param size
* @return void*
*/
void *memmove(void *dst, const void *src, uint64_t size)
{
const char *_src = src;
char *_dst = dst;
if (!size)
return dst;
// 当源地址大于目标地址时使用memcpy来完成
if (dst <= src)
return memcpy(dst, src, size);
// 当源地址小于目标地址时,为防止重叠覆盖,因此从后往前拷贝
_src += size;
_dst += size;
// 逐字节拷贝
while (size--)
*--_dst = *--_src;
return dst;
}