Small operating system made in C language
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

148 lines
4.2 KiB

/*******************************************************************************/
/* COS2000 - Compatible Operating System - LGPL v3 - Hordé Nicolas */
/* */
#include "types.h"
#include "video.h"
#define TEXTSCREEN 0xB8000 /* debut de la memoire video texte */
#define GRPHSCREEN 0xA0000 /* debut de la memoire video graphique */
#define ENDOFVMEM 0xC0000
/* Registres VGAs */
#define SEQUENCER 0x3c4
#define MISC_WRITE 0x3c2
#define MISC_READ 0x3cc
#define CCRT 0x3D4
#define ATTRIBS 0x3c0
#define GRAPHICS 0x3ce
#define STATE 0x3da
/* Taille d'un plan de bit */
#define PLANESIZE 0x10000
/* Registres VGA */
typedef struct misc_regs
{
u8 Miscellaneous_Output_Register;
} misc_regs __attribute__ ((packed));
typedef struct sequencer_regs
{
u8 Reset_Register;
u8 Clocking_Mode_Register;
u8 Map_Mask_Register;
u8 Character_Map_Select_Register;
u8 Sequencer_Memory_Mode_Register;
} sequencer_regs __attribute__ ((packed));
typedef struct crtc_regs
{
u8 Horizontal_Total_Register;
u8 End_Horizontal_Display_Register;
u8 Start_Horizontal_Blanking_Register;
u8 End_Horizontal_Blanking_Register;
u8 Start_Horizontal_Retrace_Register;
u8 End_Horizontal_Retrace_Register;
u8 Vertical_Total_Register;
u8 Overflow_Register;
u8 Preset_Row_Scan_Register;
u8 Maximum_Scan_Line_Register;
u8 Cursor_Start_Register;
u8 Cursor_End_Register;
u8 Start_Address_High_Register;
u8 Start_Address_Low_Register;
u8 Cursor_Location_High_Register;
u8 Cursor_Location_Low_Register;
u8 Vertical_Retrace_Start_Register;
u8 Vertical_Retrace_End_Register;
u8 Vertical_Display_End_Register;
u8 Offset_Register;
u8 Underline_Location_Register;
u8 Start_Vertical_Blanking_Register;
u8 End_Vertical_Blanking;
u8 CRTC_Mode_Control_Register;
u8 Line_Compare_Register;
} crtc_regs __attribute__ ((packed));
typedef struct graphics_regs
{
u8 Set_Reset_Register;
u8 Enable_Set_Reset_Register;
u8 Color_Compare_Register;
u8 Data_Rotate_Register;
u8 Read_Map_Select_Register;
u8 Graphics_Mode_Register;
u8 Miscellaneous_Graphics_Register;
u8 Color_Dont_Care_Register;
u8 Bit_Mask_Register;
} graphics_regs __attribute__ ((packed));
typedef struct attributs_regs
{
u8 Palette_Registers[16];
u8 Attribute_Mode_Control_Register;
u8 Overscan_Color_Register;
u8 Color_Plane_Enable_Register;
u8 Horizontal_Pixel_Panning_Register;
u8 Color_Select_Register;
} attributs_regs __attribute__ ((packed));
typedef struct vgamode
{
misc_regs misc;
sequencer_regs sequencer;
crtc_regs ctrc;
graphics_regs graphic;
attributs_regs attribut;
} vgamode __attribute__ ((packed));
/* fonction obligatoires */
void VGA_remap_memory(u32 vaddr);
u8 *VGA_detect_hardware(void);
u8 VGA_setvideo_mode(u8 mode);
u8 *VGA_getvideo_drivername(void);
u8 *VGA_getvideo_capabilities(void);
videoinfos *VGA_getvideo_info(void);
u32 VGA_mem_to_video(void *src, u32 dst, u32 size, bool increment_src);
u32 VGA_video_to_mem(u32 src, void *dst, u32 size);
u32 VGA_video_to_video(u32 src, u32 dst, u32 size);
void VGA_wait_vretrace(void);
void VGA_wait_hretrace(void);
void VGA_page_set(u8 page);
void VGA_page_show(u8 page);
void VGA_page_split(u16 y);
void VGA_cursor_enable(void);
void VGA_cursor_disable(void);
void VGA_cursor_set(u16 x, u16 y);
u32 VGA_font_load(u8 * def, u8 size, u8 font);
void VGA_font1_set(u8 num);
void VGA_font2_set(u8 num);
void VGA_blink_enable(void);
void VGA_blink_disable(void);
static videofonction vgafonctions = {
&VGA_remap_memory,
&VGA_detect_hardware,
&VGA_setvideo_mode,
&VGA_getvideo_drivername,
&VGA_getvideo_capabilities,
&VGA_getvideo_info,
&VGA_mem_to_video,
&VGA_video_to_mem,
&VGA_video_to_video,
&VGA_wait_vretrace,
&VGA_wait_hretrace,
&VGA_page_set,
&VGA_page_show,
&VGA_page_split,
&VGA_cursor_enable,
&VGA_cursor_disable,
&VGA_cursor_set,
&VGA_font_load,
&VGA_font1_set,
&VGA_font2_set,
&VGA_blink_enable,
&VGA_blink_disable
};