7 int vram_start_address;
10 void init_qemuvga0(int x, int y, int c, int flag);
11 /*int Check_VESA(void)
23 void ScreenVGA_Graphic(void)
28 vram_start_address=0x000a0000;
31 init_qemuvga0(1024,600,32,0x41);
34 void set_qemuvga0reg(int reg, int dat)
36 io_out16(0x01ce, reg);
37 io_out16(0x01cf, dat);
41 void init_qemuvga0(int x, int y, int c, int flag)
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 : 設定有効 */
53 if ((flag & 0x40) == 0) {
54 vram_start_address = 0x000a0000;
56 vram_start_address = 0xe0000000;
61 void readrtc(unsigned char *t)
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 };
67 for (;;) { /* 読み込みが成功するまで繰り返す */
69 for (i = 0; i < 7; i++) {
70 io_out8(0x70, adr[i]);
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]) {
87 unsigned char s[24], t[7];
89 printf("\r%X%X/%X/%X %X:%X:%X", t[6], t[5], t[4], t[3], t[2], t[1], t[0]);