OSDN Git Service

svn rev.329より移動。
[chnosproject/CHNOSProject.git] / CHNOSProject / chnos / tolset_chn_000 / chnos_010 / chnos / draw08.c
diff --git a/CHNOSProject/chnos/tolset_chn_000/chnos_010/chnos/draw08.c b/CHNOSProject/chnos/tolset_chn_000/chnos_010/chnos/draw08.c
new file mode 100644 (file)
index 0000000..f52a9e5
--- /dev/null
@@ -0,0 +1,134 @@
+\r
+#include "core.h"\r
+\r
+void Drawing08_Initialize_Palette(void)\r
+{\r
+       static uchar table_rgb[16 * 3] = {\r
+               0x00, 0x00, 0x00,\r
+               0xff, 0x00, 0x00,\r
+               0x00, 0xff, 0x00,\r
+               0xff, 0xff, 0x00,\r
+               0x00, 0x00, 0xff,\r
+               0xff, 0x00, 0xff,\r
+               0x00, 0xff, 0xff,\r
+               0xff, 0xff, 0xff,\r
+               0xc6, 0xc6, 0xc6,\r
+               0x84, 0x00, 0x00,\r
+               0x00, 0x84, 0x00,\r
+               0x84, 0x84, 0x00,\r
+               0x00, 0x00, 0x84,\r
+               0x84, 0x00, 0x84,\r
+               0x00, 0x84, 0x84,\r
+               0x84, 0x84, 0x84\r
+       };\r
+       uchar table2[216 * 3];\r
+       uint r, g, b;\r
+\r
+       Drawing08_Set_Palette(0, 15, table_rgb);\r
+       for (b = 0; b < 6; b++) {\r
+               for (g = 0; g < 6; g++) {\r
+                       for (r = 0; r < 6; r++) {\r
+                               table2[(r + g * 6 + b * 36) * 3 + 0] = r * 51;\r
+                               table2[(r + g * 6 + b * 36) * 3 + 1] = g * 51;\r
+                               table2[(r + g * 6 + b * 36) * 3 + 2] = b * 51;\r
+                       }\r
+               }\r
+       }\r
+       Drawing08_Set_Palette(16, 231, table2);\r
+\r
+       return;\r
+}\r
+\r
+void Drawing08_Set_Palette(uint start, uint end, uchar *rgb)\r
+{\r
+       uint i, eflags;\r
+\r
+       eflags = IO_Load_EFlags();\r
+       IO_CLI(); \r
+       IO_Out8(VGA_VDAC_WRITE_ADR, start);\r
+       for (i = start; i <= end; i++) {\r
+               IO_Out8(VGA_VDAC_DATA, rgb[0] >> 2);\r
+               IO_Out8(VGA_VDAC_DATA, rgb[1] >> 2);\r
+               IO_Out8(VGA_VDAC_DATA, rgb[2] >> 2);\r
+               rgb += 3;\r
+       }\r
+       IO_Store_EFlags(eflags);\r
+       return;\r
+}\r
+\r
+void Drawing08_Fill_Rectangle(void *vram, uint xsize, uint c, uint x0, uint y0, uint x1, uint y1)\r
+{\r
+       uint x, y;\r
+\r
+//if negative location\r
+       if((x0 & 0x80000000) != 0 || (y0 & 0x80000000) != 0 || (x1 & 0x80000000) != 0 || (y1 & 0x80000000) != 0){\r
+               return;\r
+       }\r
+\r
+       c = RGB_32_To_08(c);\r
+       for(y = y0; y <= y1; y++){\r
+               for(x = x0; x <= x1; x++){\r
+                       ((uchar *)vram)[y * xsize + x] = (uchar)c;\r
+               }\r
+       }\r
+       return;\r
+}\r
+\r
+void Drawing08_Put_Font(void *vram, uint xsize, uint x, uint y, uint c, const uchar *font)\r
+{\r
+       int i;\r
+       uchar d;\r
+       uchar *p;\r
+\r
+//if negative location\r
+       if((x & 0x80000000) != 0 || (y & 0x80000000) != 0){\r
+               return;\r
+       }\r
+\r
+       for (i = 0; i < 16; i++) {\r
+               p = (uchar *)(vram + (y + i) * xsize + x);\r
+               d = font[i];\r
+               if ((d & 0x80) != 0) { p[0] = (uchar)c; }\r
+               if ((d & 0x40) != 0) { p[1] = (uchar)c; }\r
+               if ((d & 0x20) != 0) { p[2] = (uchar)c; }\r
+               if ((d & 0x10) != 0) { p[3] = (uchar)c; }\r
+               if ((d & 0x08) != 0) { p[4] = (uchar)c; }\r
+               if ((d & 0x04) != 0) { p[5] = (uchar)c; }\r
+               if ((d & 0x02) != 0) { p[6] = (uchar)c; }\r
+               if ((d & 0x01) != 0) { p[7] = (uchar)c; }\r
+       }\r
+       return;\r
+}\r
+\r
+void Drawing08_Put_String(void *vram, uint xsize, uint x, uint y, uint c, const uchar s[])\r
+{\r
+//if negative location\r
+       if((x & 0x80000000) != 0 || (y & 0x80000000) != 0){\r
+               return;\r
+       }\r
+\r
+       if(s == Null){\r
+               return;\r
+       }\r
+\r
+       c = RGB_32_To_08(c);\r
+       for(; *s != 0x00; s++){\r
+               if(x > xsize - 8){\r
+                       break;\r
+               }\r
+               Drawing08_Put_Font(vram, xsize, x, y, c, hankaku + *s * 16);\r
+               x += 8;\r
+       }\r
+       return;\r
+}\r
+\r
+void Drawing08_Draw_Point(void *vram, uint xsize, uint x, uint y, uint c)\r
+{\r
+//if negative location\r
+       if((x & 0x80000000) != 0 || (y & 0x80000000) != 0){\r
+               return;\r
+       }\r
+\r
+       ((uchar *)vram)[y * xsize + x] = RGB_32_To_08_xy(c, x, y);\r
+       return;\r
+}\r