OSDN Git Service

05253cc23707f75db1200cff06dc3eeda72d8cde
[vaneos/vaneosmain.git] / Kernel / System.c
1 /*
2 *System Functions
3 *(C) 2014 VOSystems.
4 */
5 #include <stdio.h>
6
7 int vram_start_address;
8 char vmode;
9 short scrnX,scrnY;
10 void init_qemuvga0(int x, int y, int c, int flag);
11 /*int Check_VESA(void)
12 {
13         in_virtual86mode();
14         if(VESA_Check()==0){
15                 out_virtual86mode();
16                 return 0;
17         }else{
18                 out_virtual86mode();
19                 return 1;
20         }
21 }
22
23 void ScreenVGA_Graphic(void)
24 {/*
25         in_virtual86mode();
26         scrn320();
27         out_virtual86mode();
28         vram_start_address=0x000a0000;
29         scrnX=320;
30         scrnY=200;
31         init_qemuvga0(1024,600,32,0x41);
32 }*/
33
34 void set_qemuvga0reg(int reg, int dat)
35 {
36     io_out16(0x01ce, reg);
37     io_out16(0x01cf, dat);
38     return;
39 }
40
41 void init_qemuvga0(int x, int y, int c, int flag)
42 {
43     set_qemuvga0reg(0x0004, 0x0000);
44     set_qemuvga0reg(0x0001, x);
45     set_qemuvga0reg(0x0002, y);
46     set_qemuvga0reg(0x0003, c); /* 4, 8, 15, 16, 24, 32 */
47     set_qemuvga0reg(0x0005, 0x0000);
48     set_qemuvga0reg(0x0004, flag); /* リニアアクセスモードでVRAMの初期化をするなら0x41 */
49         /* bit7 : VRAM初期化抑制, bit6 : リニアアクセスモード, bit0 : 設定有効 */
50     scrnX = x;
51     scrnY = y;
52     vmode = c;
53     if ((flag & 0x40) == 0) {
54         vram_start_address = 0x000a0000;
55     } else {
56         vram_start_address = 0xe0000000;
57     }
58     return;
59 }
60
61 void readrtc(unsigned char *t)
62 {
63     char err;
64     static unsigned char adr[7] = { 0x00, 0x02, 0x04, 0x07, 0x08, 0x09, 0x32 };
65     static unsigned char max[7] = { 0x60, 0x59, 0x23, 0x31, 0x12, 0x99, 0x99 };
66     int i;
67     for (;;) { /* 読み込みが成功するまで繰り返す */
68         err = 0;
69         for (i = 0; i < 7; i++) {
70             io_out8(0x70, adr[i]);
71             t[i] = io_in8(0x71);
72         }
73         for (i = 0; i < 7; i++) {
74             io_out8(0x70, adr[i]);
75             if (t[i] != io_in8(0x71) || (t[i] & 0x0f) > 9 || t[i] > max[i]) {
76                 err = 1;
77             }
78         }
79         if (err == 0) {
80             return;
81         }
82     }
83 }
84
85 void printtime(void)
86 {
87     unsigned char s[24], t[7];
88     readrtc(t);
89     printf("\r%X%X/%X/%X %X:%X:%X", t[6], t[5], t[4], t[3], t[2], t[1], t[0]);
90 }