> compile NEMU
ysyx_22040000 李心杨 Linux calcite 6.6.19 #1-NixOS SMP PREEMPT_DYNAMIC Fri Mar 1 12:35:11 UTC 2024 x86_64 GNU/Linux 16:26:21 up 4 days 3:32, 2 users, load average: 0.85, 0.91, 0.95
This commit is contained in:
parent
a210694e82
commit
d08c2860da
415 changed files with 44314 additions and 11 deletions
97
am-kernels/kernels/demo/include/io.h
Normal file
97
am-kernels/kernels/demo/include/io.h
Normal file
|
@ -0,0 +1,97 @@
|
|||
#ifndef __DRAW_H__
|
||||
|
||||
#define HAS_GUI
|
||||
|
||||
#include <stdio.h>
|
||||
#include <am.h>
|
||||
#include <amdev.h>
|
||||
#include <klib-macros.h>
|
||||
|
||||
#define ANSI_COLOR_RED 31
|
||||
#define ANSI_COLOR_GREEN 32
|
||||
#define ANSI_COLOR_WHITE 37
|
||||
#define ANSI_COLOR_RESET 0
|
||||
|
||||
#ifdef HAS_GUI
|
||||
#define TILE_W 4
|
||||
#define SCREEN_W 320
|
||||
#define SCREEN_H 200
|
||||
static inline void set_color(int c) {
|
||||
}
|
||||
|
||||
static inline void print_char(char c, int y, int x) {
|
||||
static char last_c = 0xff;
|
||||
static uint32_t buf[TILE_W * TILE_W];
|
||||
if (last_c != c) {
|
||||
last_c = c;
|
||||
uint32_t color = 0x0;
|
||||
if (c != ' ') { // convert different character to different color
|
||||
uint8_t r = c / 25;
|
||||
c -= r * 25;
|
||||
uint8_t g = c / 5;
|
||||
c -= g * 5;
|
||||
uint8_t b = c;
|
||||
r = r * 0x100 / 5;
|
||||
g = g * 0x100 / 5;
|
||||
b = b * 0x100 / 5;
|
||||
color = (r << 16) | (g << 8) | b;
|
||||
}
|
||||
int i;
|
||||
for (i = 0; i < TILE_W * TILE_W; i ++) {
|
||||
buf[i] = color;
|
||||
}
|
||||
}
|
||||
io_write(AM_GPU_FBDRAW, x * TILE_W, y * TILE_W, buf, TILE_W, TILE_W, false);
|
||||
}
|
||||
|
||||
static inline void screen_clear() {
|
||||
static uint32_t buf[SCREEN_W];
|
||||
int i;
|
||||
for (i = 0; i < SCREEN_H; i ++) {
|
||||
io_write(AM_GPU_FBDRAW, 0, i, buf, SCREEN_W, 1, false);
|
||||
}
|
||||
}
|
||||
|
||||
static inline void screen_refresh() {
|
||||
io_write(AM_GPU_FBDRAW, 0, 0, NULL, 0, 0, true);
|
||||
}
|
||||
|
||||
static inline int screen_tile_height() {
|
||||
return io_read(AM_GPU_CONFIG).height / TILE_W;
|
||||
}
|
||||
|
||||
static inline int screen_tile_width() {
|
||||
return io_read(AM_GPU_CONFIG).width / TILE_W;
|
||||
}
|
||||
#else
|
||||
static inline void set_color(int c) {
|
||||
printf("\033[%dm", c);
|
||||
}
|
||||
|
||||
static inline void print_char(char c, int y, int x) {
|
||||
printf("\033[%d;%dH%c", y + 1, x + 1, c);
|
||||
}
|
||||
|
||||
static inline void screen_clear() {
|
||||
printf("\033[H\033[J");
|
||||
}
|
||||
|
||||
static inline void screen_refresh() {
|
||||
}
|
||||
|
||||
static inline int screen_tile_height() {
|
||||
return 24;
|
||||
}
|
||||
|
||||
static inline int screen_tile_width() {
|
||||
return 80;
|
||||
}
|
||||
#endif
|
||||
|
||||
static inline void usleep(int us) {
|
||||
uint64_t now = io_read(AM_TIMER_UPTIME).us;
|
||||
uint64_t next = now + us;
|
||||
while (io_read(AM_TIMER_UPTIME).us < next) ;
|
||||
}
|
||||
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue