sheet.cを追加。
@@ -23,6 +23,7 @@ | ||
23 | 23 | init_keyboard(&sysfifo, SYSFIFO_KEYB); |
24 | 24 | init_mouse(&sysfifo, SYSFIFO_MOUSE, &mdec); |
25 | 25 | init_pit(&time_tick); |
26 | + init_sheets(vinfo->PhysBasePtr,binfo->scrnx,binfo->scrny); | |
26 | 27 | pit_beep_off(); |
27 | 28 | |
28 | 29 |
@@ -0,0 +1,44 @@ | ||
1 | +#include "core.h" | |
2 | + | |
3 | +struct SHTCTL *ctl; | |
4 | + | |
5 | +void init_sheets(unsigned int *vram, int xsize, int ysize) | |
6 | +{ | |
7 | + int i; | |
8 | + ctl = (struct SHTCTL *)memman_alloc_4k(sizeof(struct SHTCTL)); | |
9 | + if(ctl == 0) goto err; | |
10 | + ctl->vram = vram; | |
11 | + ctl->xsize = xsize; | |
12 | + ctl->ysize = ysize; | |
13 | + ctl->top = -1; | |
14 | + for(i = 0;i < MAX_SHEETS;i++){ | |
15 | + ctl->sheets0[i].flags = SHT_FLAGS_VOID; | |
16 | + } | |
17 | +err: | |
18 | + return; | |
19 | + | |
20 | +} | |
21 | + | |
22 | +struct SHEET *sheet_alloc(void) | |
23 | +{ | |
24 | + struct SHEET *sht; | |
25 | + int i; | |
26 | + for(i = 0;i < MAX_SHEETS;i++){ | |
27 | + if(ctl->sheets0[i].flags == SHT_FLAGS_VOID){ | |
28 | + sht = &ctl->sheets0[i]; | |
29 | + sht->flags = SHT_FLAGS_USE; | |
30 | + sht->height = -1; | |
31 | + return sht; | |
32 | + } | |
33 | + } | |
34 | + return 0; | |
35 | +} | |
36 | + | |
37 | +void sheet_setbuf(struct SHEET *sht,unsigned int *buf,int xsize, int ysize, int col_inv) | |
38 | +{ | |
39 | + sht->buf = buf; | |
40 | + sht->bxsize = xsize; | |
41 | + sht->bysize = ysize; | |
42 | + sht->col_inv = col_inv; | |
43 | + return; | |
44 | +} | |
\ No newline at end of file |
@@ -114,4 +114,21 @@ | ||
114 | 114 | return -1; |
115 | 115 | } |
116 | 116 | |
117 | +unsigned int memman_alloc_4k(unsigned int size) | |
118 | +{ | |
119 | + unsigned int a; | |
120 | + size = (size + 0xfff) & 0xfffff000; | |
121 | + a = memman_alloc(size); | |
122 | + return a; | |
123 | +} | |
117 | 124 | |
125 | +int memman_free_4k(unsigned int addr, unsigned int size) | |
126 | +{ | |
127 | + int i; | |
128 | + size = (size + 0xfff) & 0xfffff000; | |
129 | + i = memman_free(addr,size); | |
130 | + return i; | |
131 | +} | |
132 | + | |
133 | + | |
134 | + |
@@ -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 memory.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 sheet.obj bootpack.obj | |
2 | 2 | |
3 | 3 | TOOLPATH = ../z_tools/ |
4 | 4 | INCPATH = ../z_tools/CHNOSProject/ |
@@ -59,6 +59,11 @@ | ||
59 | 59 | #define MEMMAN_FREES 4090 |
60 | 60 | #define MEMMAN_ADDR 0x003c0000 |
61 | 61 | |
62 | +#define MAX_SHEETS 256 | |
63 | + | |
64 | +#define SHT_FLAGS_VOID 0 | |
65 | +#define SHT_FLAGS_USE 1 | |
66 | + | |
62 | 67 | #define SYSFIFO_KEYB 0x100 /*256~511=keycode*/ |
63 | 68 | #define SYSFIFO_MOUSE 0x200 /*512~767=mouse*/ |
64 | 69 |
@@ -117,6 +122,13 @@ | ||
117 | 122 | int p, q, size, free, flags; |
118 | 123 | }; |
119 | 124 | |
125 | +struct SHTCTL { | |
126 | + unsigned int *vram; | |
127 | + int xsize,ysize,top; | |
128 | + struct SHEET32 *sheets[MAX_SHEETS]; | |
129 | + struct SHEET32 sheets0[MAX_SHEETS]; | |
130 | +}; | |
131 | + | |
120 | 132 | struct MOUSE_DECODE { |
121 | 133 | unsigned int buf[3]; |
122 | 134 | int x,y,btn; |
@@ -192,13 +204,21 @@ | ||
192 | 204 | void init_pic(void); |
193 | 205 | |
194 | 206 | /*memory.c メモリ管理関係*/ |
207 | + | |
195 | 208 | unsigned int memtest(unsigned int start, unsigned int end); |
196 | 209 | void memman_init(struct MEMMAN *man); |
197 | 210 | unsigned int memman_free_total(void); |
198 | 211 | unsigned int memman_alloc(unsigned int size); |
199 | 212 | int memman_free(unsigned int addr, unsigned int size); |
213 | +unsigned int memman_alloc_4k(unsigned int size); | |
214 | +int memman_free_4k(unsigned int addr, unsigned int size); | |
200 | 215 | |
216 | +/*sheet.c 画面管理関係*/ | |
201 | 217 | |
218 | +void init_sheets(unsigned int *vram, int xsize, int ysize); | |
219 | +struct SHEET *sheet_alloc(void); | |
220 | +void sheet_setbuf(struct SHEET *sht,unsigned int *buf,int xsize, int ysize, int col_inv ); | |
221 | + | |
202 | 222 | /*keyboard.c キーボード関係*/ |
203 | 223 | void init_keyboard(struct FIFO32 *fifo, int data0); |
204 | 224 | void inthandler21(int *esp); |