OSDN Git Service

AI003:config.txt, words.txtを追加。
[chnosproject/CHNOSProject.git] / CHNOSProject / chnos / tolset_chn_000 / chnos_010 / chnos / draw08.c
1 \r
2 #include "core.h"\r
3 \r
4 void Drawing08_Initialize_Palette(void)\r
5 {\r
6         static uchar table_rgb[16 * 3] = {\r
7                 0x00, 0x00, 0x00,\r
8                 0xff, 0x00, 0x00,\r
9                 0x00, 0xff, 0x00,\r
10                 0xff, 0xff, 0x00,\r
11                 0x00, 0x00, 0xff,\r
12                 0xff, 0x00, 0xff,\r
13                 0x00, 0xff, 0xff,\r
14                 0xff, 0xff, 0xff,\r
15                 0xc6, 0xc6, 0xc6,\r
16                 0x84, 0x00, 0x00,\r
17                 0x00, 0x84, 0x00,\r
18                 0x84, 0x84, 0x00,\r
19                 0x00, 0x00, 0x84,\r
20                 0x84, 0x00, 0x84,\r
21                 0x00, 0x84, 0x84,\r
22                 0x84, 0x84, 0x84\r
23         };\r
24         uchar table2[216 * 3];\r
25         uint r, g, b;\r
26 \r
27         Drawing08_Set_Palette(0, 15, table_rgb);\r
28         for (b = 0; b < 6; b++) {\r
29                 for (g = 0; g < 6; g++) {\r
30                         for (r = 0; r < 6; r++) {\r
31                                 table2[(r + g * 6 + b * 36) * 3 + 0] = r * 51;\r
32                                 table2[(r + g * 6 + b * 36) * 3 + 1] = g * 51;\r
33                                 table2[(r + g * 6 + b * 36) * 3 + 2] = b * 51;\r
34                         }\r
35                 }\r
36         }\r
37         Drawing08_Set_Palette(16, 231, table2);\r
38 \r
39         return;\r
40 }\r
41 \r
42 void Drawing08_Set_Palette(uint start, uint end, uchar *rgb)\r
43 {\r
44         uint i, eflags;\r
45 \r
46         eflags = IO_Load_EFlags();\r
47         IO_CLI(); \r
48         IO_Out8(VGA_VDAC_WRITE_ADR, start);\r
49         for (i = start; i <= end; i++) {\r
50                 IO_Out8(VGA_VDAC_DATA, rgb[0] >> 2);\r
51                 IO_Out8(VGA_VDAC_DATA, rgb[1] >> 2);\r
52                 IO_Out8(VGA_VDAC_DATA, rgb[2] >> 2);\r
53                 rgb += 3;\r
54         }\r
55         IO_Store_EFlags(eflags);\r
56         return;\r
57 }\r
58 \r
59 void Drawing08_Fill_Rectangle(void *vram, uint xsize, uint c, uint x0, uint y0, uint x1, uint y1)\r
60 {\r
61         uint x, y;\r
62 \r
63 //if negative location\r
64         if((x0 & 0x80000000) != 0 || (y0 & 0x80000000) != 0 || (x1 & 0x80000000) != 0 || (y1 & 0x80000000) != 0){\r
65                 return;\r
66         }\r
67 \r
68         c = RGB_32_To_08(c);\r
69         for(y = y0; y <= y1; y++){\r
70                 for(x = x0; x <= x1; x++){\r
71                         ((uchar *)vram)[y * xsize + x] = (uchar)c;\r
72                 }\r
73         }\r
74         return;\r
75 }\r
76 \r
77 void Drawing08_Put_Font(void *vram, uint xsize, uint x, uint y, uint c, const uchar *font)\r
78 {\r
79         int i;\r
80         uchar d;\r
81         uchar *p;\r
82 \r
83 //if negative location\r
84         if((x & 0x80000000) != 0 || (y & 0x80000000) != 0){\r
85                 return;\r
86         }\r
87 \r
88         for (i = 0; i < 16; i++) {\r
89                 p = (uchar *)(vram + (y + i) * xsize + x);\r
90                 d = font[i];\r
91                 if ((d & 0x80) != 0) { p[0] = (uchar)c; }\r
92                 if ((d & 0x40) != 0) { p[1] = (uchar)c; }\r
93                 if ((d & 0x20) != 0) { p[2] = (uchar)c; }\r
94                 if ((d & 0x10) != 0) { p[3] = (uchar)c; }\r
95                 if ((d & 0x08) != 0) { p[4] = (uchar)c; }\r
96                 if ((d & 0x04) != 0) { p[5] = (uchar)c; }\r
97                 if ((d & 0x02) != 0) { p[6] = (uchar)c; }\r
98                 if ((d & 0x01) != 0) { p[7] = (uchar)c; }\r
99         }\r
100         return;\r
101 }\r
102 \r
103 void Drawing08_Put_String(void *vram, uint xsize, uint x, uint y, uint c, const uchar s[])\r
104 {\r
105 //if negative location\r
106         if((x & 0x80000000) != 0 || (y & 0x80000000) != 0){\r
107                 return;\r
108         }\r
109 \r
110         if(s == Null){\r
111                 return;\r
112         }\r
113 \r
114         c = RGB_32_To_08(c);\r
115         for(; *s != 0x00; s++){\r
116                 if(x > xsize - 8){\r
117                         break;\r
118                 }\r
119                 Drawing08_Put_Font(vram, xsize, x, y, c, hankaku + *s * 16);\r
120                 x += 8;\r
121         }\r
122         return;\r
123 }\r
124 \r
125 void Drawing08_Draw_Point(void *vram, uint xsize, uint x, uint y, uint c)\r
126 {\r
127 //if negative location\r
128         if((x & 0x80000000) != 0 || (y & 0x80000000) != 0){\r
129                 return;\r
130         }\r
131 \r
132         ((uchar *)vram)[y * xsize + x] = RGB_32_To_08_xy(c, x, y);\r
133         return;\r
134 }\r