• R/O
  • SSH
  • HTTPS

chnosproject: コミット


コミットメタ情報

リビジョン322 (tree)
日時2012-06-03 19:59:54
作者hikarupsp

ログメッセージ

既定でシートのマウス移動が無効になるようにした。
また、起動時にPCIデバイスの検索をおこなうようにした。まだ検索しかできないが…。

変更サマリ

差分

--- beta/tolset_chn_000/chnos_010/chnos/sheet.c (revision 321)
+++ beta/tolset_chn_000/chnos_010/chnos/sheet.c (revision 322)
@@ -534,6 +534,13 @@
534534
535535 uint Sheet_SetTopmost(UI_Sheet *sheet, bool topmost)
536536 {
537+ if(sheet == Null){
538+ #ifdef CHNOSPROJECT_DEBUG_SHEET
539+ debug("Sheet_SetTopmost:Null sheet.\n");
540+ #endif
541+ return Null;
542+ }
543+
537544 if(topmost){
538545 sheet->flags.bit.topmost = True;
539546 if(sheet->flags.bit.visible){
@@ -567,3 +574,16 @@
567574
568575 return (UI_Sheet *)parent->map[py * parent->size.x + px];
569576 }
577+
578+uint Sheet_SetMovable(UI_Sheet *sheet, bool movable)
579+{
580+ if(sheet == Null){
581+ #ifdef CHNOSPROJECT_DEBUG_SHEET
582+ debug("Sheet_SetMovable:Null sheet.\n");
583+ #endif
584+ return Null;
585+ }
586+
587+ sheet->flags.bit.movable = movable;
588+ return 0;
589+}
--- beta/tolset_chn_000/chnos_010/chnos/system.c (revision 321)
+++ beta/tolset_chn_000/chnos_010/chnos/system.c (revision 322)
@@ -227,6 +227,9 @@
227227 TextMode_Put_String(s, white);
228228 }
229229
230+ TextMode_Put_String("\tInitialising PCI...\n", white);
231+ Initialise_PCI();
232+
230233 TextMode_Put_String("\tSystem Initialising Phase End.\n", white);
231234
232235 IO_STI();
--- beta/tolset_chn_000/chnos_010/chnos/makeset.txt (revision 321)
+++ beta/tolset_chn_000/chnos_010/chnos/makeset.txt (revision 322)
@@ -1,3 +1,3 @@
11
2-OBJS_BOOTPACK = nasfunc0.obj nasfunc1.obj nasfunc2.obj hankaku.obj chnlogo.obj callbios.obj cfunc.obj color.obj debug.obj display.obj draw08.obj draw16.obj draw32.obj drawing.obj dsctbl.obj emu86.obj emu86asm.obj error.obj fifo.obj fmt_bmp.obj intrpt.obj keyboard.obj memory.obj mouse.obj mtask.obj serial.obj sheet.obj sht08.obj sht16.obj sht32.obj shtdraw.obj shtfunc.obj system.obj timer.obj vgatmode.obj xception.obj bootpack.obj
2+OBJS_BOOTPACK = nasfunc0.obj nasfunc1.obj nasfunc2.obj hankaku.obj chnlogo.obj callbios.obj cfunc.obj color.obj debug.obj display.obj draw08.obj draw16.obj draw32.obj drawing.obj dsctbl.obj emu86.obj emu86asm.obj error.obj fifo.obj fmt_bmp.obj intrpt.obj keyboard.obj memory.obj mouse.obj mtask.obj pci.obj serial.obj sheet.obj sht08.obj sht16.obj sht32.obj shtdraw.obj shtfunc.obj system.obj timer.obj vgatmode.obj xception.obj bootpack.obj
33 HEADS_BOOTPACK = core.h coredef0.h coredef1.h coredef2.h coredef3.h keyid.h
--- beta/tolset_chn_000/chnos_010/chnos/core.h (revision 321)
+++ beta/tolset_chn_000/chnos_010/chnos/core.h (revision 322)
@@ -24,6 +24,7 @@
2424 void srand(uint seed);
2525 uint rand(void);
2626 uint isqrt(uint n);
27+uint CFunction_ExtractBits(uint source, uint start, uint end);
2728 int snprintf(uchar s[], uint n, const uchar format[], ...);
2829 int vsnprintf(uchar s[], uint n, const uchar format[], uint vargs[]);
2930 //
@@ -234,6 +235,9 @@
234235 UI_Task *MultiTask_GetNowTask(UI_TaskControl *ctrl);
235236 uint MultiTask_Push_Arguments(UI_Task *task, uint args, ...);
236237
238+/*pci.c PCI関連*/
239+void Initialise_PCI(void);
240+
237241 /*serial.c シリアル通信関連*/
238242 void Initialise_SerialPort(void);
239243 void SerialPort_Send(const uchar s[]);
@@ -255,6 +259,7 @@
255259 uint Sheet_Disable_InvisibleColor(UI_Sheet *sheet);
256260 uint Sheet_SetTopmost(UI_Sheet *sheet, bool topmost);
257261 UI_Sheet *Sheet_GetSheetFromLocation(UI_Sheet *parent, int px, int py);
262+uint Sheet_SetMovable(UI_Sheet *sheet, bool movable);
258263
259264 /*sht08.c 8bitカラー シート関連*/
260265 uint Sheet08_Internal_SetBuffer(UI_Sheet *sheet, void *vram, uint xsize, uint ysize, uint bpp);
--- beta/tolset_chn_000/chnos_010/chnos/cfunc.c (revision 321)
+++ beta/tolset_chn_000/chnos_010/chnos/cfunc.c (revision 322)
@@ -120,6 +120,11 @@
120120 return x;
121121 }
122122
123+uint CFunction_ExtractBits(uint source, uint start, uint end)
124+{
125+ return (source >> start) & ~(0xffffffff << (end - start + 1));
126+}
127+
123128 //引数(uchar s[], uint n, const uchar format[], ...)
124129 // s :結果を書き込む文字列の先頭アドレスを指定します。
125130 // n :s[]の大きさを指定します。(n - 1)番目以降の文字は書き込まれません。
--- beta/tolset_chn_000/chnos_010/chnos/bootpack.c (revision 321)
+++ beta/tolset_chn_000/chnos_010/chnos/bootpack.c (revision 322)
@@ -141,6 +141,7 @@
141141 Sheet_Show(sheet32, 1, 420, vramsheet->size.y >> 1);
142142
143143 Sheet_SetParent(testsheet, vramsheet);
144+ Sheet_SetMovable(testsheet, True);
144145 Sheet_Show(testsheet, 6, 10, 10);
145146
146147 timer1 = Timer_Initialise();
@@ -350,6 +351,9 @@
350351 moveorg_mfocus.x = mcursor->cursor_sheet->location.x;
351352 moveorg_mfocus.y = mcursor->cursor_sheet->location.y;
352353 mfocus = Sheet_GetSheetFromLocation(mcursor->cursor_sheet->parent, mcursor->cursor_sheet->location.x, mcursor->cursor_sheet->location.y);
354+ if(mfocus != Null && mfocus->flags.bit.movable == False){
355+ mfocus = Null;
356+ }
353357 }
354358 old_mouse_buttonL = mctrl->button.bit.L;
355359 }
--- beta/tolset_chn_000/chnos_010/chnos/pci.c (nonexistent)
+++ beta/tolset_chn_000/chnos_010/chnos/pci.c (revision 322)
@@ -0,0 +1,204 @@
1+
2+#include "core.h"
3+
4+#define PORT_PCI_CONFIG_ADDRESS 0x0cf8 //32bit R/W
5+#define PORT_PCI_CONFIG_DATA_BASE 0x0cfc //4ports anysize R/W
6+
7+typedef union PCI_CONFIG_ADDRESS_REGISTER {
8+ uint reg;
9+ struct PCI_CONFIG_ADDRESS_REGISTER_BIT {
10+ unsigned reserved0 : 2; //0
11+ unsigned register_num : 6;
12+ unsigned function_num : 3;
13+ unsigned device_num : 5;
14+ unsigned bus_num : 8;
15+ unsigned reserved1 : 7; //0
16+ unsigned enable : 1; //PCI_CDRnにアクセスするときに1にする。
17+ } bit;
18+} PCI_ConfigurationAddressRegister;
19+
20+//全デバイス共通のコンフィギュレーションレジスタ:
21+//0x00:00-15:ベンダID(ReadOnly)
22+//0x00:16-31:デバイスID(ReadOnly)
23+//0x04:00-15:コマンドレジスタ(R/W)
24+// 00:I/O空間イネーブル
25+// 01:メモリ空間イネーブル
26+// 02:バスマスター
27+// 03:スペシャルサイクル
28+// 04:メモリライト・インバリデートイネーブル
29+// 05:VGAパレットスヌープ
30+// 06:パリティエラー応答(0で報告なし)
31+// 07:ウェイトサイクル制御
32+// 08:SERR#イネーブル
33+// 09:高速バックツーバックイネーブル
34+// 10-15:リザーブ
35+//0x04:16-31:ステータスレジスタ(R/W Write時Trueのビットがクリアされる)
36+// 16-20:リザーブ
37+// 21:66MHz対応可能
38+// 22:ユーザー定義機能あり
39+// 23:高速バックツーバック可能
40+// 24:データパリティエラー検知(バスマスター時のエラー)
41+// 25-26:DEVSEL#タイミング(0:高速 1:中速 2:低速 3:予約)
42+// 27:ターゲットアボート通知
43+// 28:ターゲットアボート受信
44+// 29:マスターアボート受信
45+// 30:システムエラー通知
46+// 31:パリティエラー検知
47+//0x08:00-07:リビジョンID(ReadOnly)
48+//0x08:08-31:クラスコード(ReadOnly)
49+// 08-15:プログラムインターフェース
50+// 16-23:サブクラス
51+// 24-31:ベースクラス
52+//0x0c:00-07:キャッシュラインサイズ
53+//0x0c:08-15:マスタレイテンシタイマ
54+//0x0c:16-23:ヘッダタイプ(ReadOnly)
55+// 16-22:デバイスタイプ(0:通常のPCIデバイス 1:PCI-PCIブリッジ 2:CardBusブリッジ)
56+// 23:マルチファンクションデバイス
57+//0x0c:24-31:BISTレジスタ
58+
59+typedef struct PCI_DEVICE_VENDOR {
60+ uint id;
61+ uchar *name;
62+} PCI_Device_VendorID;
63+
64+typedef struct PCI_DEVICE_CLASS {
65+ uint id;
66+ uchar *name;
67+} PCI_Device_Class;
68+
69+typedef struct PCI_DEVICE_TYPE {
70+ uint id;
71+ uchar *name;
72+} PCI_Device_Type;
73+
74+PCI_Device_VendorID pci_device_vendor[] = {
75+ {0x10ec, "Realtek Semiconductor Corp."},
76+ {0x8086, "Intel"},
77+ {0xffff, "[Unknown]"},
78+// {0x, ""},
79+};
80+
81+PCI_Device_Class pci_device_class[] = {
82+ {0x010100, "Ultra ATA storage controller"},
83+ {0x010180, "bus master IDE controller (UDMA33?)"},
84+ {0x020000, "ethernet adapter ?"},
85+ {0x030000, "VGA compatible controller"},
86+ {0x040100, "audio device"},
87+ {0x060000, "CPU to PCI bridge"},
88+ {0x060100, "PCI to ISA bridge"},
89+ {0x068000, "power management controller"},
90+ {0xff0000, "[Unknown]"},
91+};
92+
93+PCI_Device_Type pci_device_type[] = {
94+ {0, "Standard PCI Device"},
95+ {1, "PCI-PCI Bridge"},
96+ {2, "CardBus Bridge"},
97+ {3, "[Undefined]"},
98+};
99+
100+void PCI_ConfigurationRegister_SelectDevice(uint bus, uint device, uint function);
101+uint PCI_ConfigurationRegister_Read32(uint addr);
102+uchar *PCI_GetDeviceVendor(uint id);
103+uchar *PCI_GetDeviceClass(uint id);
104+uchar *PCI_GetDeviceType(uint id);
105+
106+void Initialise_PCI(void)
107+{
108+ uint data, bus, device, function;
109+
110+//PCICAR初期化
111+ IO_Out32(PORT_PCI_CONFIG_ADDRESS, 0x00000000);
112+
113+ for(bus = 0; bus < 256; bus++){
114+ for(device = 0; device < 32; device++){
115+ for(function = 0; function < 8; function++){
116+ PCI_ConfigurationRegister_SelectDevice(bus, device, function);
117+ data = PCI_ConfigurationRegister_Read32(0x00);
118+ if(data != 0xffffffff){
119+ debug("PCI:Bus%d.Device%d.Function%d:\n", bus, device, function);
120+ debug("PCI: DeviceVendor:%s(0x%04X)\n", PCI_GetDeviceVendor(data & 0xffff), data & 0xffff);
121+
122+ debug("PCI: DeviceID:0x%04X\n", data >> 16);
123+
124+ data = PCI_ConfigurationRegister_Read32(0x08);
125+ data = CFunction_ExtractBits(data, 8, 31);
126+ debug("PCI: ClassCode:%s(0x%06X)\n", PCI_GetDeviceClass(data), data);
127+
128+ data = PCI_ConfigurationRegister_Read32(0x0c);
129+ data = CFunction_ExtractBits(data, 16, 22);
130+ debug("PCI: DeviceType:%s(%d)\n", PCI_GetDeviceType(data), data);
131+ }
132+ }
133+ }
134+ }
135+
136+ return;
137+}
138+
139+void PCI_ConfigurationRegister_SelectDevice(uint bus, uint device, uint function)
140+{
141+ PCI_ConfigurationAddressRegister pcicar;
142+ pcicar.reg = IO_In32(PORT_PCI_CONFIG_ADDRESS);
143+ pcicar.bit.bus_num = bus;
144+ pcicar.bit.device_num = device;
145+ pcicar.bit.function_num = function;
146+ IO_Out32(PORT_PCI_CONFIG_ADDRESS, pcicar.reg);
147+
148+ return;
149+}
150+
151+uint PCI_ConfigurationRegister_Read32(uint addr)
152+{
153+ PCI_ConfigurationAddressRegister pcicar;
154+ uint data;
155+
156+ pcicar.reg = IO_In32(PORT_PCI_CONFIG_ADDRESS);
157+ pcicar.bit.register_num = addr >> 2;
158+ pcicar.bit.enable = True;
159+ IO_Out32(PORT_PCI_CONFIG_ADDRESS, pcicar.reg);
160+ data = IO_In32(PORT_PCI_CONFIG_DATA_BASE + (addr & 0x03));
161+ pcicar.bit.enable = False;
162+ IO_Out32(PORT_PCI_CONFIG_ADDRESS, pcicar.reg);
163+
164+ return data;
165+}
166+
167+uchar *PCI_GetDeviceVendor(uint id)
168+{
169+ uint i;
170+
171+ for(i = 0; pci_device_vendor[i].id != 0xffff; i++){
172+ if(pci_device_vendor[i].id == id){
173+ break;
174+ }
175+ }
176+
177+ return pci_device_vendor[i].name;
178+}
179+
180+uchar *PCI_GetDeviceClass(uint id)
181+{
182+ uint i;
183+
184+ for(i = 0; pci_device_class[i].id != 0xff0000; i++){
185+ if(pci_device_class[i].id == id){
186+ break;
187+ }
188+ }
189+
190+ return pci_device_class[i].name;
191+}
192+
193+uchar *PCI_GetDeviceType(uint id)
194+{
195+ uint i;
196+
197+ for(i = 0; pci_device_type[i].id != 3; i++){
198+ if(pci_device_type[i].id == id){
199+ break;
200+ }
201+ }
202+
203+ return pci_device_type[i].name;
204+}
--- beta/tolset_chn_000/chnos_010/chnos/coredef0.h (revision 321)
+++ beta/tolset_chn_000/chnos_010/chnos/coredef0.h (revision 322)
@@ -13,10 +13,10 @@
1313 //#define CHNOSPROJECT_DEBUG_FIFO
1414 //#define CHNOSPROJECT_DEBUG_KBCT
1515 //#define CHNOSPROJECT_DEBUG_MCT
16- #define CHNOSPROJECT_DEBUG_MOUSE
16+ //#define CHNOSPROJECT_DEBUG_MOUSE
1717 //#define CHNOSPROJECT_DEBUG_DISPLAY
1818 //#define CHNOSPROJECT_DEBUG_DRAWING
19- #define CHNOSPROJECT_DEBUG_SHEET
19+ //#define CHNOSPROJECT_DEBUG_SHEET
2020 //#define CHNOSPROJECT_DEBUG_TIMER
2121 //#define CHNOSPROJECT_DEBUG_MULTITASK
2222 #endif
--- beta/tolset_chn_000/chnos_010/chnos/coredef1.h (revision 321)
+++ beta/tolset_chn_000/chnos_010/chnos/coredef1.h (revision 322)
@@ -469,6 +469,7 @@
469469 unsigned vram_auto_allocated : 1;
470470 unsigned using_invcol : 1;
471471 unsigned topmost : 1;
472+ unsigned movable : 1;
472473 } bit;
473474 } flags;
474475 void *vram;
旧リポジトリブラウザで表示