OSDN Git Service

実行ファイルを2つに分けたいけど分けられず
[haribote-os-xe/hariboteXE.git] / wand.dpr
1 program wand;
2
3 {$R *.dres}
4
5 uses
6   System.SysUtils,
7   System.Classes,
8   bootpack in 'bootpack.pas',
9   asmhead in 'asmhead.pas',
10   func in 'func.pas',
11   files in 'files.pas';
12
13 const
14   MEMMAN_ADDR = $003C0000;
15   KEYCMD_LED = $ED;
16
17 var
18   binfo: ^TBOOTINFO = Pointer(ADR_BOOTINFO);
19   mouse: TMouse;
20   ctl: TCtl;
21   keyboard: TKeyboard;
22   key_to, key_shift, key_leds, keycmd_wait: integer;
23   i: integer;
24   memtest: TMemtest;
25   memtotal: Cardinal;
26   memman: ^TMEMMAN = Pointer(MEMMAN_ADDR);
27   mem: TMem;
28   pic: TPic;
29   sheet: TShtCtl;
30   mo, win, cons: TSheet;
31   s: string;
32   fifo, keycmd: TFifo;
33   mx, my: integer;
34   asmhead: TAsmHead;
35
36 begin
37 {$IFDEF Win32}
38 //  Exit;
39 {$ENDIF}
40   asmhead:=TAsmhead.Create;
41   asmhead.Free;
42   key_leds := (binfo^.leds shr 4) and 7;
43   keycmd_wait := -1;
44   pic := TPic.Create;
45   fifo := TFifo.Create(128);
46   keycmd := TFifo.Create(32);
47   keyboard := TKeyboard.Create(fifo, 216);
48   key_to := 0;
49   mouse := TMouse.Create(fifo, 512);
50   ctl := TCtl.Create(fifo);
51   sheet := TShtCtl.Create(binfo^.scrnx, binfo^.scrny);
52   mo := TCursor.Create(16, 16, 99);
53   win := TWindow.Create(160, 68, 'Window', 0);
54   cons := TConsole.Create(160, 100, 'Console', 1);
55   try
56     sheet.add(mo);
57     sheet.add(win);
58     sheet.add(cons);
59     memtest := TMemtest.Create;
60     memtotal := memtest.memtest($00400000, $BFFFFFFF);
61     {
62       mem:=TMem.Create;
63       mem.Init(memman);
64       mem.memfree(memman,$00001000,$0009e000);
65       mem.memfree(memman,$00400000,memtotal-$00400000);
66       mem.Free;
67     }
68     memtest.Free;
69     sheet.slide(mo, 10, 10);
70     sheet.slide(win, 80, 72);
71     sheet.screen.putfonts8_asc_sht(0, 28, 'Welcom to');
72     sheet.screen.putfonts8_asc_sht(0, 44, 'Haribote-XE');
73     mx := (sheet.screen.bxsize - 16) div 2;
74     my := (sheet.screen.bysize - 28 - 16) div 2;
75     sheet.slide(mo, mx, my);
76     sheet.slide(win, 80, 72);
77     sheet.updown(mo, 1);
78     sheet.updown(win, 2);
79     sheet.screen.putfonts8_asc_sht(0, 32, s);
80     sheet.refresh(0, 0, 80, 16);
81     keycmd.Put(KEYCMD_LED);
82     keycmd.Put(key_leds);
83     while True do
84     begin
85       if (keycmd.Status > 0) and (keycmd_wait < 0) then
86       begin
87         keycmd_wait := keycmd.Get;
88         keyboard.wait_KBC_sendready;
89         io_out8(TKeyboard.PORT_KEYDAT, keycmd_wait);
90       end;
91       io_cli;
92       if fifo.Status = 0 then
93         io_stihlt
94       else
95       begin
96         i := fifo.Get;
97         io_sti;
98         if (i >= 256) and (i <= 511) then
99         begin
100           if i >= $54 + 256 then
101             if (keyboard.keytable0[i - 256] <> 0) and (win.cursor_x < 144) then
102             begin
103               s[1] := Char(keyboard.keytable0[i - 256]);
104               win.putfonts8_asc_sht(win.cursor_x, 28, s);
105               inc(win.cursor_x, 8);
106             end;
107           if (i <= 256 + $0E) and (win.cursor_x > 8) then
108           begin
109             win.putfonts8_asc_sht(win.cursor_x, 28, ' ');
110             dec(win.cursor_x, 8);
111           end;
112           if i = 256 + $0F then
113           begin
114             if key_to = 0 then
115             begin
116               key_to := 1;
117               sheet.updown(win, 0);
118               sheet.updown(cons, 1);
119               cons.cursor_c:=-1;
120               (cons as TConsole).fifo.Put(2);
121             end
122             else
123             begin
124               key_to := 0;
125               sheet.updown(win, 1);
126               sheet.updown(cons, 0);
127               cons.cursor_c:=COL8_000000;
128               TConsole(cons).fifo.Put(3);
129             end;
130           end;
131           win.clip := Rect(0, 0, win.bxsize, 21);
132           cons.clip := Rect(0, 0, cons.bxsize, 21);
133           sheet.refresh(win);
134           sheet.refresh(cons);
135           case i of
136             256 + $2A:
137               key_shift := key_shift or 1;
138             256 + $36:
139               key_shift := key_shift and 1;
140             256 + $AA:
141               ;
142             256 + $B6:
143               ;
144             256 + $3A:
145               begin
146                 key_leds := key_leds * key_leds * key_leds * key_leds;
147                 keycmd.Put(KEYCMD_LED);
148                 keycmd.Put(key_leds);
149               end;
150             256 + $45:
151               begin
152                 key_leds := key_leds * key_leds;
153                 keycmd.Put(KEYCMD_LED);
154                 keycmd.Put(key_leds);
155               end;
156             256 + $46:
157               begin
158                 keycmd.Put(KEYCMD_LED);
159                 keycmd.Put(key_leds);
160               end;
161             256 + $FA:
162               keycmd_wait := -1;
163             256 + $FE:
164               begin
165                 keyboard.wait_KBC_sendready;
166                 io_out8(TKeyboard.PORT_KEYDAT, keycmd_wait);
167               end;
168           end;
169           win.boxfill8(win.cursor_c, win.cursor_x, 28, win.cursor_x + 8, 44);
170         end
171         else if (i >= 512) and (i <= 767) then
172         begin
173           if mouse.decode(i) <> 0 then
174           begin
175             // sprontf
176             if (mouse.dec.btn and $01) <> 0 then
177               s[1] := 'L';
178             if (mouse.dec.btn and $02) <> 0 then
179               s[3] := 'R';
180             if (mouse.dec.btn and $03) <> 0 then
181               s[2] := 'C';
182             sheet.screen.boxfill8(COL8_008484, 32, 16, 32 + 15 * 8 - 1, 31);
183             sheet.screen.putfonts8_asc_sht(32, 16, s);
184             sheet.refresh(32, 16, 32 + 15 * 8, 32);
185             inc(mx, mouse.dec.x);
186             inc(my, mouse.dec.y);
187             if mx < 0 then
188               mx := 0;
189             if my < 0 then
190               my := 0;
191             if mx > sheet.screen.bxsize - 1 then
192               mx := sheet.screen.bxsize - 1;
193             if my > sheet.screen.bysize - 1 then
194               my := sheet.screen.bysize - 1;
195             sheet.screen.boxfill8(COL8_008484, 0, 0, 78, 15);
196             sheet.screen.putfonts8_asc_sht(0, 0, s);
197             sheet.refresh(0, 0, 80, 16);
198             sheet.slide(mo, mx, my);
199           end;
200           if fifo.Status <> 0 then
201           begin
202             i := fifo.Get;
203             io_sti;
204             sheet.screen.putfonts8_asc_sht(0, 64, '10sec');
205             sheet.refresh(0, 64, 56, 80);
206           end;
207           sheet.refresh(0, 0, 80, 16);
208         end
209         else if i <= 1 then
210         begin
211
212         end;
213       end;
214     end;
215   finally
216     pic.Free;
217     fifo.Free;
218     keycmd.Free;
219     sheet.Free;
220     ctl.Free;
221     win.Free;
222     mo.Free;
223     keyboard.Free;
224     mouse.Free;
225   end;
226
227 end.