memory 表示。(警告が出るのはなぜだろう?)
memory.c追加。
@@ -7,11 +7,11 @@ | ||
7 | 7 | struct VESAINFO *vinfo = (struct VESAINFO *) ADR_VESAINFO; |
8 | 8 | struct FIFO32 sysfifo; |
9 | 9 | struct MOUSE_DECODE mdec; |
10 | - int fifobuf[256], i,time_tick,mx = binfo->scrnx / 2, my = binfo->scrny / 2; | |
10 | + int fifobuf[256], i = 0,time_tick,mx = binfo->scrnx / 2, my = binfo->scrny / 2; | |
11 | + unsigned int all_mem_size = memtest(0x00400000, 0xbffffffff); | |
11 | 12 | init_gdtidt(); |
12 | 13 | init_pic(); |
13 | 14 | init_pit(&time_tick); |
14 | - i = 0; | |
15 | 15 | |
16 | 16 | io_sti(); |
17 | 17 |
@@ -21,6 +21,12 @@ | ||
21 | 21 | init_mouse(&sysfifo, SYSFIFO_MOUSE, &mdec); |
22 | 22 | pit_beep_off(); |
23 | 23 | |
24 | + sprintf(s,"memory %d Byte(%d KB,%d MB)",all_mem_size,all_mem_size/1024, all_mem_size/(1024*1024)); | |
25 | + boxfill_i(vinfo->PhysBasePtr, binfo->scrnx, 0x000000, 0,304,300,320); | |
26 | + putfonts_asc_i(vinfo->PhysBasePtr, binfo->scrnx, 0,304,0xffffff,s); | |
27 | + | |
28 | + | |
29 | + | |
24 | 30 | for (;;){ |
25 | 31 | io_cli(); |
26 | 32 | if(fifo32_status(&sysfifo) == 0) { |
@@ -55,8 +61,8 @@ | ||
55 | 61 | my += mdec.y; |
56 | 62 | if(mx < 0) mx = 0; |
57 | 63 | if(my < 0) my = 0; |
58 | - if(mx > binfo->scrnx - 32) mx = binfo->scrnx - 32; | |
59 | - if(my > binfo->scrny - 32) my = binfo->scrny - 32; | |
64 | + if(mx > binfo->scrnx - 24) mx = binfo->scrnx - 24; | |
65 | + if(my > binfo->scrny - 24) my = binfo->scrny - 24; | |
60 | 66 | |
61 | 67 | draw_mouse_i(vinfo->PhysBasePtr, mx, my, binfo->scrnx); |
62 | 68 | boxfill_i(vinfo->PhysBasePtr, binfo->scrnx, 0x000000, 0,288,300,304); |
@@ -0,0 +1,30 @@ | ||
1 | +#include "core.h" | |
2 | + | |
3 | + | |
4 | +unsigned int memtest(unsigned int start, unsigned int end) | |
5 | +{ | |
6 | + | |
7 | + char flg486 = 0; | |
8 | + unsigned int eflg,cr0,i; | |
9 | + | |
10 | + eflg = io_load_eflags(); | |
11 | + eflg |= EFLAGS_AC_BIT; | |
12 | + io_store_eflags(eflg); | |
13 | + eflg = io_load_eflags(); | |
14 | + if((eflg & EFLAGS_AC_BIT) != 0) flg486 = 1; | |
15 | + eflg &= ~EFLAGS_AC_BIT; | |
16 | + io_store_eflags(eflg); | |
17 | + if(flg486 != 0) { | |
18 | + cr0 = load_cr0(); | |
19 | + cr0 |= CR0_CACHE_DISABLE; | |
20 | + store_cr0(cr0); | |
21 | + } | |
22 | + i = memtest_sub(start, end); | |
23 | + if(flg486 != 0) { | |
24 | + cr0 = load_cr0(); | |
25 | + cr0 &= ~CR0_CACHE_DISABLE; | |
26 | + store_cr0(cr0); | |
27 | + } | |
28 | + return i; | |
29 | + | |
30 | +} |
@@ -1,4 +1,4 @@ | ||
1 | -OBJS_BOOTPACK = naskfunc.obj hankaku.obj graphic.obj gdtidt.obj int.obj io.obj fifo.obj keyboard.obj timer.obj mouse.obj bootpack.obj | |
1 | +OBJS_BOOTPACK = naskfunc.obj hankaku.obj graphic.obj gdtidt.obj int.obj io.obj fifo.obj keyboard.obj timer.obj mouse.obj memory.obj bootpack.obj | |
2 | 2 | |
3 | 3 | TOOLPATH = ../z_tools/ |
4 | 4 | INCPATH = ../z_tools/CHNOSProject/ |
@@ -85,42 +85,45 @@ | ||
85 | 85 | #define ADR_GATE_DESC 0x0026f800 |
86 | 86 | |
87 | 87 | #define ADR_IDT 0x0026f800 |
88 | -#define LIMIT_IDT 0x000007ff | |
88 | +#define LIMIT_IDT 0x000007ff | |
89 | 89 | #define ADR_GDT 0x00270000 |
90 | -#define LIMIT_GDT 0x0000ffff | |
90 | +#define LIMIT_GDT 0x0000ffff | |
91 | 91 | #define ADR_BOTPAK 0x00280000 |
92 | 92 | #define LIMIT_BOTPAK 0x0007ffff |
93 | 93 | #define AR_DATA32_RW 0x4092 |
94 | 94 | #define AR_CODE32_ER 0x409a |
95 | 95 | #define AR_LDT 0x0082 |
96 | -#define AR_TSS32 0x0089 | |
96 | +#define AR_TSS32 0x0089 | |
97 | 97 | #define AR_INTGATE32 0x008e |
98 | 98 | |
99 | -#define PIC0_ICW1 0x0020 | |
99 | +#define PIC0_ICW1 0x0020 | |
100 | 100 | #define PIC0_OCW2 0x0020 |
101 | -#define PIC0_IMR 0x0021 | |
102 | -#define PIC0_ICW2 0x0021 | |
103 | -#define PIC0_ICW3 0x0021 | |
104 | -#define PIC0_ICW4 0x0021 | |
105 | -#define PIC1_ICW1 0x00a0 | |
101 | +#define PIC0_IMR 0x0021 | |
102 | +#define PIC0_ICW2 0x0021 | |
103 | +#define PIC0_ICW3 0x0021 | |
104 | +#define PIC0_ICW4 0x0021 | |
105 | +#define PIC1_ICW1 0x00a0 | |
106 | 106 | #define PIC1_OCW2 0x00a0 |
107 | -#define PIC1_IMR 0x00a1 | |
108 | -#define PIC1_ICW2 0x00a1 | |
109 | -#define PIC1_ICW3 0x00a1 | |
110 | -#define PIC1_ICW4 0x00a1 | |
107 | +#define PIC1_IMR 0x00a1 | |
108 | +#define PIC1_ICW2 0x00a1 | |
109 | +#define PIC1_ICW3 0x00a1 | |
110 | +#define PIC1_ICW4 0x00a1 | |
111 | 111 | |
112 | -#define PIT_CTRL 0x0043 | |
113 | -#define PIT_CNT0 0x0040 | |
112 | +#define PIT_CTRL 0x0043 | |
113 | +#define PIT_CNT0 0x0040 | |
114 | 114 | |
115 | -#define KEYB_DATA 0x0060 | |
115 | +#define KEYB_DATA 0x0060 | |
116 | 116 | #define PORT_KEYSTA 0x0064 |
117 | 117 | #define KEYSTA_SEND_NOTREADY 0x02 |
118 | 118 | #define KEYCMD_WRITE_MODE 0x60 |
119 | -#define KBC_MODE 0x47 | |
119 | +#define KBC_MODE 0x47 | |
120 | 120 | #define PORT_KEYCMD 0x0064 |
121 | 121 | #define KEYCMD_SENDTO_MOUSE 0xd4 |
122 | 122 | #define MOUSECMD_ENABLE 0xf4 |
123 | 123 | |
124 | +#define EFLAGS_AC_BIT 0x00040000 | |
125 | +#define CR0_CACHE_DISABLE 0x60000000 | |
126 | + | |
124 | 127 | #define SYSFIFO_KEYB 0x100 /*256~511=keycode*/ |
125 | 128 | #define SYSFIFO_MOUSE 0x200 /*512~767=mouse*/ |
126 | 129 |
@@ -166,6 +169,9 @@ | ||
166 | 169 | |
167 | 170 | void init_pic(void); |
168 | 171 | |
172 | +/*memory.c メモリ管理関係*/ | |
173 | +unsigned int memtest(unsigned int start, unsigned int end); | |
174 | + | |
169 | 175 | /*keyboard.c キーボード関係*/ |
170 | 176 | void init_keyboard(struct FIFO32 *fifo, int data0); |
171 | 177 | void inthandler21(int *esp); |