⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vga_controller.h

📁 altera的ip核
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifndef __VGA_CONTROLLER_H__
#define __VGA_CONTROLLER_H__

#include <stdio.h>
#include "system.h"
#include "sys/alt_llist.h"
#include "priv/alt_dev_llist.h"
#include "priv/alt_file.h"

//#define FRAME_WIDTH   640
//#define FRAME_HEIGHT   480
#define FRAME_WIDTH VGA_CONTROLLER_0_SCREEN_WIDTH
#define FRAME_HEIGHT VGA_CONTROLLER_0_SCREEN_HEIGHT

#define DO_FILL 1
#define DO_NOT_FILL 0

#define BLACK_8 0x00

#define FONT_10PT_ROW 11
#define FONT_10PT_COLUMN 8

#define HEAP -1


typedef int vga_frame_array;

typedef struct {
  vga_frame_array* vga_frame0;
  vga_frame_array* vga_frame1;
  int width;
  int height;
  int color_depth;
  int bytes_per_pixel;
  int bytes_per_frame;
  int frame_buffers;
  int vga_controller_base;
} vga_frame_buffer_struct;

typedef struct {
  int hbegin;
  int vbegin;
  int hend;
  int f_color;
  int b_color;
  char* string;
  char* font;
  int ms_delay;
  int ticks_at_last_move;
  int text_scroll_index;
  char text_scroll_started;
  int window_width;
  int length_of_string;
  int scroll_points;
  int string_points;
} vga_text_scroll_struct;

typedef struct {            /* the structure for a bitmap. */
  short biWidth;
  short biHeight;
  short biBitCount;
  char *bicolor_palatte;
  short *data;
} bitmap_struct;

typedef struct {
	int   vertex_x[3];
	int   vertex_y[3];
  int   ax, ay;
  int   bx, by;
  int   cx, cy;
  int   spans_needed;
  int   max_span;
  int   top_y;
  int   bottom_y;
  int   col;
  int   fill;
  int   center_z;
  int   *span_array;
} triangle_struct;

typedef struct vga_controller_dev vga_controller_dev;

struct vga_controller_dev
{
  alt_dev dev;
  int width;
  int height;
  int color_depth;
  int base_addr;
  int frame_buffers;
};

#define VGA_CONTROLLER_INSTANCE(name, dev)           \
static vga_controller_dev dev =                      \
{                                                    \
  {                                                  \
      ALT_LLIST_ENTRY,                               \
      name##_NAME,                                   \
      NULL, /* open */                               \
      NULL, /* close */                              \
      NULL, /* read */                               \
      NULL, /* write */                              \
      NULL, /* lseek */                              \
      NULL, /* fstat */                              \
      NULL, /* ioctl */                              \
   },                                                \
   name##_SCREEN_WIDTH,                              \
   name##_SCREEN_HEIGHT,                             \
   name##_COLOR_DEPTH,                               \
   name##_BASE,                                      \
   name##_FRAME_BUFFERS,                             \
}

#define VGA_CONTROLLER_INIT(name, dev)               \
    vga_dev_init (&dev )        

static ALT_INLINE int vga_device_register( alt_dev* fd)
{
  extern alt_llist vga_dev_list;

  return alt_dev_llist_insert ((alt_dev_llist*) fd, &vga_dev_list);
}

/* color conversion macro */
#define vga_color_convert24_16_m( x ) (unsigned short)(((*(x + 2) & 0xF8) >> 3) | ((*(x + 1) & 0xFC) << 3) | ((*(x + 0) & 0xF8) << 8))


extern char* cour10_font;

int vga_dev_init ( vga_controller_dev* vga );

alt_dev* alt_vga_open_dev(const char* name);

void alt_vga_close_dev(alt_dev* fd);

vga_frame_buffer_struct* vga_init_no_interrupt ( vga_controller_dev* vga, int buffer_location);

int vga_stop ( vga_controller_dev* vga );

int vga_merge_colors(int red, int green, int blue);

unsigned short vga_color_convert24_16(char* color24);

int vga_color_convert16_24(unsigned short color16, char* color24);

int vga_copy_line_to_frame_buffer( int x, int y, char* buffer, int num_pixels, int source_color_depth, vga_frame_buffer_struct* vga_frame_buffer );

int vga_print_string(int horiz_offset, int vert_offset, int color, char *font, vga_frame_buffer_struct* vga_frame_buffer, char string[]);

int vga_scroll_string(vga_text_scroll_struct* scroll, vga_frame_buffer_struct* vga_frame_buffer);

vga_text_scroll_struct* vga_scroll_string_init(int hbegin, int vbegin, int hend, int f_color, int b_color, char* font, int ms_delay, char *string);

void vga_scroll_string_quit(vga_text_scroll_struct* scroll);

int vga_move_block(int xbegin, int ybegin, int xend, int yend, int x_distance, int y_distance, int backfill_color, vga_frame_buffer_struct* vga_frame_buffer);

int vga_print_char (int horiz_offset, int vert_offset, int color, char character, char *font, vga_frame_buffer_struct* vga_frame_buffer);

void vga_draw_line(int horiz_start, int vert_start, int horiz_end, int vert_end, int width, int color, vga_frame_buffer_struct* vga_frame_buffer);

void vga_set_pixel(int horiz, int vert, unsigned int color, vga_frame_buffer_struct* vga_frame_buffer);

short vga_get_pixel(int horiz, int vert, vga_frame_buffer_struct* vga_frame_buffer);

int vga_draw_circle(int Hcenter, int Vcenter, int radius, int color, char fill, vga_frame_buffer_struct* vga_frame_buffer);
void vga_circle_points(int cx, int cy, int x, int y, int color, char fill, vga_frame_buffer_struct* vga_frame_buffer);

int vga_draw_box (int horiz_start, int vert_start, int horiz_end, int vert_end, int color, int fill, vga_frame_buffer_struct* vga_frame_buffer);

void vga_paint_block (int Hstart, int Vstart, int Hend, int Vend, int color, vga_frame_buffer_struct* vga_frame_buffer);

void vga_draw_horiz_line (int Hstart, int Hend, int V, int color, vga_frame_buffer_struct* vga_frame_buffer);

void load_bmp(char *file, bitmap_struct *b);

void fskip(FILE *fp, int num_bytes);

void draw_transparent_bitmap(bitmap_struct *bmp,int x,int y, vga_frame_buffer_struct* vga_frame_buffer);

void draw_bitmap(bitmap_struct *bmp,int x,int y, vga_frame_buffer_struct* vga_frame_buffer);

inline int max3( int a, int b, int c );

inline int min3( int a, int b, int c );

int max_diff3(int a, int b, int c);

inline void vga_put_pixel_in_span_map( int x, int y, int *span_array );

void vga_bres_scan_edges( int x1, int y1, int x2, int y2, int *span_array);

void vga_draw_triangle(triangle_struct* tri, vga_frame_buffer_struct* vga_frame_buffer);

int vga_flip_frame_buffers( vga_frame_buffer_struct* vga_frame_buffer );

inline void vga_clear_screen (vga_frame_buffer_struct* vga_frame_buffer, char color);

//Color Definitions

#define ALICEBLUE_16            0xF7DF
#define ANTIQUEWHITE_16         0xFF5A
#define AQUA_16                 0x07DF
#define AQUAMARINE_16           0x7FDA
#define AZURE_16                0xF7DF
#define BEIGE_16                0xF79B
#define BISQUE_16               0xFF18
#define BLACK_16                0x0000
#define BLANCHEDALMOND_16       0xFF59
#define BLUE_16                 0x001F
#define BLUEVIOLET_16           0x895C
#define BROWN_16                0xA145
#define BURLYWOOD_16            0xDDD0
#define CADETBLUE_16            0x5CD4
#define CHARTREUSE_16           0x7FC0
#define CHOCOLATE_16            0xD343
#define CORAL_16                0xFBCA
#define CORNFLOWERBLUE_16       0x649D
#define CORNSILK_16             0xFFDB
#define CRIMSON_16              0xD887
#define CYAN_16                 0x07DF
#define DARKBLUE_16             0x0011
#define DARKCYAN_16             0x0451
#define DARKGOLDENROD_16        0xBC01
#define DARKGRAY_16             0xAD55
#define DARKGREEN_16            0x0300
#define DARKKHAKI_16            0xBD8D
#define DARKMAGENTA_16          0x8811
#define DARKOLIVEGREEN_16       0x5345
#define DARKORANGE_16           0xFC40
#define DARKORCHID_16           0x9999
#define DARKRED_16              0x8800
#define DARKSALMON_16           0xEC8F
#define DARKSEAGREEN_16         0x8DD1
#define DARKSLATEBLUE_16        0x49D1
#define DARKSLATEGRAY_16        0x2A49
#define DARKTURQUOISE_16        0x065A
#define DARKVIOLET_16           0x901A
#define DEEPPINK_16             0xF892
#define DEEPSKYBLUE_16          0x05DF
#define DIMGRAY_16              0x6B4D
#define DODGERBLUE_16           0x1C9F
#define FELDSPAR_16             0xD48E
#define FIREBRICK_16            0xB104
#define FLORALWHITE_16          0xFFDE
#define FORESTGREEN_16          0x2444
#define FUCHSIA_16              0xF81F
#define GAINSBORO_16            0xDEDB

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -