CS350 COS
COS
Loading...
Searching...
No Matches
vgacons.c
Go to the documentation of this file.
1/*
2 * Copyright (c) 2006-2007 Ali Mashtizadeh
3 */
4
5#include <stdbool.h>
6#include <stdint.h>
7
8#include <sys/cdefs.h>
9#include <sys/kdebug.h>
10
11#include <machine/amd64.h>
12#include <machine/pmap.h>
13
14#include "vgacons.h"
15
16static short *VideoBuffer = (short *)(0x000B8000 + MEM_DIRECTMAP_BASE);
17static int CurrentX = 0;
18static int CurrentY = 0;
19static int SizeX = 80;
20static int SizeY = 25;
21static unsigned char TextAttribute = 0x70; /* Grey on Black */
22
23#define VGA_BASE 0x370
24
25#define VGA_ATC_INDEX 0x00 + VGA_BASE
26#define VGA_ATC_DATA 0x01 + VGA_BASE
27#define VGA_SEQ_INDEX 0x02 + VGA_BASE
28#define VGA_SEQ_DATA 0x05 + VGA_BASE
29#define VGA_PAL_RADDR 0x07 + VGA_BASE
30#define VGA_PAL_WADDR 0x08 + VGA_BASE
31#define VGA_PAL_DATA 0x09 + VGA_BASE
32#define VGA_GDC_INDEX 0x0E + VGA_BASE
33#define VGA_GDC_DATA 0x0F + VGA_BASE
34
36
37void LockDisplay(void)
38{
39}
40
41void UnlockDisplay(void)
42{
43}
44
45void EnterFontMode(void)
46{
47 // Save VGA State
48 outb(VGA_SEQ_INDEX,0x02);
50
51 outb(VGA_SEQ_INDEX,0x04);
53
54 outb(VGA_GDC_INDEX,0x04);
56
57 outb(VGA_GDC_INDEX,0x05);
59
60 outb(VGA_GDC_INDEX,0x06);
62
63 outb(VGA_ATC_INDEX,0x10);
65
66 // Setup Font Mode
67}
68
69void ExitFontMode(void)
70{
71 // Restore VGA State
72}
73
74
75void VGA_Init(void)
76{
77 int i = 0;
78
79 for (i = 0;i < SizeX * SizeY;i++)
80 {
81 VideoBuffer[i] = (TextAttribute << 8) | ' ';
82 }
83
84 CurrentX = 0;
85 CurrentY = 0;
86
87 /*
88 * At initialization the video memory is located at 0xB8000.
89 * We will map the memory after memory management has been
90 * initialized.
91 */
92}
93
94void VGA_LateInit(void)
95{
96 // Map in video memory
97 // Set VideoBuffer pointer
98}
99
101{
102 int i,j;
103 for (i = 1; i < SizeY; i++)
104 {
105 for (j = 0; j < SizeX; j++)
106 {
107 VideoBuffer[(i-1)*SizeX+j] = VideoBuffer[i*SizeX+j];
108 }
109 }
110 for (j = 0; j < SizeX; j++)
111 VideoBuffer[(SizeY-1)*SizeX+j] = (TextAttribute << 8) | ' ';
112 return;
113}
114
115void VGA_Putc(short c)
116{
117 c |= (TextAttribute << 8);
118 switch (c & 0xFF)
119 {
120 case '\b':
121 if (CurrentX > 0) {
122 CurrentX--;
123 VideoBuffer[CurrentX + CurrentY * SizeX] = 0x20 | (TextAttribute << 8);
124 }
125 break;
126 case '\n':
127 if (CurrentY >= (SizeY - 1)) {
129 } else {
130 CurrentY++;
131 }
132 CurrentX = 0;
133 break;
134 case '\r':
135 break;
136 case '\t':
137 VGA_Putc(' ');
138 VGA_Putc(' ');
139 VGA_Putc(' ');
140 VGA_Putc(' ');
141 break;
142 default:
144 CurrentX++;
145 if (CurrentX == SizeX) {
146 if (CurrentY >= (SizeY - 1)) {
148 } else {
149 CurrentY++;
150 }
151 CurrentX = 0;
152 }
153 break;
154 }
155}
156
157void VGA_Puts(const char *str)
158{
159 const char *p = str;
160 while (*p != '\0')
161 VGA_Putc(*p++);
162}
163
164void Panic(const char *str)
165{
166 VGA_Puts(str);
167 __asm__("int3");
168 while (1)
169 {
170 __asm__("hlt");
171 }
172}
173
static INLINE uint8_t inb(uint16_t port)
Definition: amd64op.h:452
static INLINE void outb(uint16_t port, uint8_t data)
Definition: amd64op.h:431
#define MEM_DIRECTMAP_BASE
Definition: pmap.h:40
unsigned char uint8_t
Definition: types.h:10
#define VGA_SEQ_DATA
Definition: vgacons.c:28
void VGA_Init(void)
Definition: vgacons.c:75
void LockDisplay(void)
Definition: vgacons.c:37
#define VGA_SEQ_INDEX
Definition: vgacons.c:27
void VGA_Puts(const char *str)
Definition: vgacons.c:157
static short * VideoBuffer
Definition: vgacons.c:16
static int CurrentY
Definition: vgacons.c:18
#define VGA_GDC_DATA
Definition: vgacons.c:33
static int SizeY
Definition: vgacons.c:20
void VGA_ScrollDisplay(void)
Definition: vgacons.c:100
static uint8_t ModeBuffer[6]
Definition: vgacons.c:35
static unsigned char TextAttribute
Definition: vgacons.c:21
#define VGA_ATC_INDEX
Definition: vgacons.c:25
void VGA_LateInit(void)
Definition: vgacons.c:94
void EnterFontMode(void)
Definition: vgacons.c:45
void VGA_Putc(short c)
Definition: vgacons.c:115
#define VGA_GDC_INDEX
Definition: vgacons.c:32
static int SizeX
Definition: vgacons.c:19
#define VGA_ATC_DATA
Definition: vgacons.c:26
void Panic(const char *str)
Definition: vgacons.c:164
void UnlockDisplay(void)
Definition: vgacons.c:41
void ExitFontMode(void)
Definition: vgacons.c:69
static int CurrentX
Definition: vgacons.c:17