94 lines
2.5 KiB
C
94 lines
2.5 KiB
C
#ifndef _QEMU_VGA_H_
|
|
#define _QEMU_VGA_H_
|
|
|
|
#include "../lib/lib.h"
|
|
#include "vga_text.h"
|
|
|
|
#define QEMU_VGA_PORT_INDEX 0x01ce
|
|
#define QEMU_VGA_PORT_DATA 0x01cf
|
|
|
|
#define QEMU_VGA_IDX_ID 0
|
|
#define QEMU_VGA_IDX_XRES 1
|
|
#define QEMU_VGA_IDX_YRES 2
|
|
#define QEMU_VGA_IDX_BPP 3
|
|
#define QEMU_VGA_IDX_ENABLE 4
|
|
#define QEMU_VGA_IDX_BANK 5
|
|
#define QEMU_VGA_IDX_VIRT_WIDTH 6
|
|
#define QEMU_VGA_IDX_VIRT_HEIGHT 7
|
|
#define QEMU_VGA_IDX_X_OFFSET 8
|
|
#define QEMU_VGA_IDX_Y_OFFSET 9
|
|
|
|
#define QEMU_VGA_BANK_SIZE 0x1000000
|
|
|
|
#define QEMU_VGA_MIN_VER 0xb0c0
|
|
#define QEMU_VGA_MAX_VER 0xb0c5
|
|
|
|
#define QEMU_VGA_DISABLE 0xe0
|
|
#define QEMU_VGA_ENABLE 0xe1
|
|
#define QEMU_VGA_ENABLE_CLEAR 0x61
|
|
|
|
#define BITS_IN_BYTE 8
|
|
|
|
#define FONT_ACTUAL_WIDTH 9
|
|
#define FONT_ACTUAL_HEIGHT 16
|
|
|
|
#define QEMU_VGA_DEFAULT_WIDTH 720
|
|
#define QEMU_VGA_DEFAULT_HEIGHT 480
|
|
#define QEMU_VGA_DEFAULT_BPP 16
|
|
|
|
#define UTF8_3BYTE_MASK 0xe0
|
|
#define UTF8_2BYTE_MASK 0xc0
|
|
#define UTF8_MASK 0x80
|
|
|
|
extern uint16_t qemu_vga_xres;
|
|
extern uint16_t qemu_vga_yres;
|
|
extern uint16_t qemu_vga_bpp;
|
|
extern uint32_t qemu_vga_addr;
|
|
extern uint32_t qemu_vga_enabled;
|
|
extern uint32_t qemu_vga_cursor_x;
|
|
extern uint32_t qemu_vga_cursor_y;
|
|
|
|
typedef union {
|
|
uint32_t val;
|
|
struct __attribute__((packed)) {
|
|
uint8_t r16 : 5;
|
|
uint8_t g16 : 6;
|
|
uint8_t b16 : 5;
|
|
uint16_t dummy16 : 16;
|
|
};
|
|
struct __attribute__((packed)) {
|
|
uint8_t r32;
|
|
uint8_t g32;
|
|
uint8_t b32;
|
|
uint8_t dummy32;
|
|
};
|
|
} vga_color_t;
|
|
|
|
typedef struct {
|
|
// For QEMU VGA
|
|
uint8_t len; // Length of this UTF-8 code
|
|
uint8_t have; // Length of what we got
|
|
uint8_t buf[3]; // What we got
|
|
// For putc in lib.c
|
|
uint8_t got; // How many letters left for UTF-8 code
|
|
} utf8_state_t;
|
|
|
|
uint16_t qemu_vga_read(uint16_t index);
|
|
void qemu_vga_write(uint16_t index, uint16_t data);
|
|
|
|
uint32_t qemu_vga_active_window_addr();
|
|
void qemu_vga_switch_terminal(int32_t tid);
|
|
|
|
uint16_t qemu_vga_init(uint16_t xres, uint16_t yres, uint16_t bpp);
|
|
void qemu_vga_pixel_set(uint16_t x, uint16_t y, vga_color_t color);
|
|
void qemu_vga_putc(uint16_t x, uint16_t y, uint8_t ch, vga_color_t fg, vga_color_t bg);
|
|
void qemu_vga_putc_transparent(uint16_t x, uint16_t y, uint8_t ch, vga_color_t fg);
|
|
void qemu_vga_clear();
|
|
void qemu_vga_clear_row(uint8_t grid_y);
|
|
void qemu_vga_roll_up();
|
|
void qemu_vga_set_cursor_pos(uint8_t x, uint8_t y);
|
|
vga_color_t qemu_vga_get_terminal_color(uint8_t color);
|
|
void qemu_vga_show_picture(uint16_t width, uint16_t height, uint8_t bpp, uint8_t* data);
|
|
|
|
#endif
|