OSDN Git Service

一応できましたが
authoryamat0jp <yamat0jp@yahoo.co.jp>
Sun, 18 Nov 2018 11:33:30 +0000 (20:33 +0900)
committeryamat0jp <yamat0jp@yahoo.co.jp>
Sun, 18 Nov 2018 11:33:30 +0000 (20:33 +0900)
bootable disk として認識されませんでした

Win32/Release/hankaku.bin [new file with mode: 0644]
asmhead.pas
bootpack.pas
files.pas [new file with mode: 0644]
wand.dpr
wand.dproj

diff --git a/Win32/Release/hankaku.bin b/Win32/Release/hankaku.bin
new file mode 100644 (file)
index 0000000..171b735
Binary files /dev/null and b/Win32/Release/hankaku.bin differ
index 74be40f..15819de 100644 (file)
@@ -4,9 +4,12 @@ interface
 
 type
   TAsmhead = class
+  private
+    procedure resb(count: integer); virtual;
+    procedure align16; virtual;
   public
-    class procedure Init;
-    class procedure Boot;
+    procedure Init;
+    procedure Boot;
   end;
 
 procedure io_halt;
@@ -146,8 +149,30 @@ end;
 
 { TAsmhead }
 
-class procedure TAsmhead.Boot;
+procedure TAsmhead.resb(count: integer);
+asm
+  MOV   ECX,count
+@start:
+  DB    $00
+  LOOP  @start
+  RET
+end;
+
+procedure TAsmhead.align16;
+asm
+  MOV   EBX,100 MOD 16
+  SUB   EAX,EBX
+  MOV   EBX,EAX
+  MOV   EAX,Self
+  MOV   EDX,[EAX]
+  CALL  [EDX + VMTOFFSET TAsmhead.resb(EBX)]
+  RET
+end;
+
+procedure TAsmhead.Boot;
 const
+  VBEMODE: UInt16 = $105;
+
   BOTPAK: UInt32 = $00280000;
   DSKCAC: UInt32 = $00100000;
   DSKCAC0: UInt32 = $00008000;
@@ -159,8 +184,40 @@ const
   SCRNY: UInt16 = $0FF6;
   VRAM: UInt16 = $0FF8;
   asm
-    // ORG
+    PUSH  EBP
+    MOV   EBP,$00c200
+
+    MOV   AX,$9000
+    MOV   ES,AX
+    MOV   DI,0
+    INT   $10
+    CMP   AX,$004f
+    JNE   @scrn320
+
+    MOV   AX,[ES:DI+4]
+    CMP   AX,$0200
+    JB    @scrn320
 
+    MOV   CX,VBEMODE
+    MOV   AX,$4f01
+    INT   $10
+    CMP   BYTE PTR [ES:DI+$1b],4
+    JNE   @scrn320
+    MOV   AX,[ES:DI+$00]
+    AND   AX,$0080
+    JZ    @scrn320
+
+    MOV   BX,VBEMODE+$4000
+    MOV   AX,$4f02
+    INT   $10
+    MOV   BYTE PTR [VMODE],8
+    MOV   AX,[ES:DI+$12]
+    MOV   [SCRNX],AX
+    MOV   EAX,[ES:DI+$28]
+    MOV   [VRAM],AX
+    JMP   @keystatus
+
+  @scrn320:
     MOV   AL,$13
     MOV   AH,$00
     INT   $10
@@ -169,6 +226,7 @@ const
     MOV   WORD PTR [SCRNY],200
     MOV   DWORD PTR [VRAM],$000a0000
 
+  @keystatus:
     MOV   AH,$02
     INT   $16
     MOV   BYTE PTR [LEDS],AL
@@ -189,7 +247,7 @@ const
     OUT   $60,AL
     CALL  @waitkbdout
 
-    // LGDT
+    LGDT  [@GDTR0]
     MOV   EAX,CR0
     AND   EAX,$7FFFFFFF
     OR    EAX,$00000001
@@ -234,7 +292,9 @@ const
 
   @skip:
     MOV   ESP,[EBX+12]
-    // JMP   DWORD PTR 2*8:$0000001b
+    MOV   EAX,2*8 shl 1
+    INC   EAX
+    JMP   EAX
 
   @waitkbdout:
     IN    AL,$64
@@ -246,13 +306,16 @@ const
     ADD   ESI,4
     MOV   EDI,[EAX]
     ADD   EDI,4
-    SUB   ECX,1
-    JNZ   @memcpy
+    LOOP  @memcpy
     RET
 
-    // ALIGNB
+    MOV   EAX,Self
+    MOV   EDX,[EAX]
+    CALL  DWORD PTR [EDX + VMTOFFSET TAsmhead.align16]
   @GDT0:
-    // RESB
+    MOV   EAX,Self
+    MOV   EDX,[EAX]
+    CALL  DWORD PTR [EDX + VMTOFFSET TAsmhead.resb(8)]
     DW    $ffff,$0000,$9200,$00cf
     DW    $ffff,$0000,$9a28,$0047
 
@@ -261,15 +324,112 @@ const
     DW    8*3-1
     DD    @GDT0
 
-    // ALIGNB
+    MOV   EAX,Self
+    MOV   EDX,[EAX]
+    CALL  DWORD PTR [EDX + VMTOFFSET TAsmhead.align16]
   @bootpack:
 end;
 
-class procedure TAsmhead.Init;
+procedure TAsmhead.Init;
 const
-  CYLS: UInt32 = 10;
+  CYLS: UInt8 = 10;
   asm
+    PUSH  EBP
+    MOV   EBP,$007c00
+    JMP   @entry
+    DB    $90
+    DB    'HARIBOTE'
+    DW    512
+    DB    1
+    DW    1
+    DB    2
+    DW    224
+    DW    2880
+    DB    $f0
+    DW    9
+    DW    18
+    DW    2
+    DD    0
+    DD    2880
+    DB    0,0,$29
+    DD    $ffffffff
+    DB    'HARIBOTEOS '
+    DB    'FAT12   '
+    MOV   EAX,Self
+    MOV   EDX,[EAX]
+    CALL  DWORD PTR [EDX + VMTOFFSET TAsmhead.resb(18)]
+  @entry:
+    MOV   AX,0
+    MOV   SS,AX
+    MOV   SP,$7c00
+    MOV   DS,AX
 
+    MOV   AX,$0820
+    MOV   ES,AX
+    MOV   CH,0
+    MOV   DH,0
+    MOV   CL,2
+  @readloop:
+    MOV   SI,0
+  @retry:
+    MOV   AH,$02
+    MOV   AL,1
+    MOV   BX,0
+    MOV   DL,$00
+    INT   $13
+    JNC   @next
+    ADD   SI,1
+    CMP   SI,5
+    JAE   @error
+    MOV   AH,$00
+    MOV   DL,$00
+    INT   $13
+    JMP   @retry
+  @next:
+    MOV   AX,ES
+    ADD   AX,$0020
+    MOV   ES,AX
+    ADD   CL,1
+    CMP   CL,18
+    JBE   @readloop
+    MOV   CL,1
+    ADD   DH,1
+    CMP   DH,2
+    JB    @readloop
+    MOV   DH,0
+    ADD   CH,1
+    CMP   CH,CYLS
+    JB    @readloop
+
+    MOV   [$0ff0],CH
+    MOV   EAX,$00c200
+    JMP   EAX
+  @error:
+    MOV   SI,WORD PTR @msg
+  @putloop:
+    MOV   AL,[SI]
+    ADD   SI,1
+    CMP   AL,0
+    JE    @fin
+    MOV   AH,$0e
+    MOV   BX,15
+    INT   $10
+    JMP   @putloop
+  @fin:
+    HLT
+    JMP   @fin
+  @msg:
+    DB    $0a,$0a
+    DB    'load error'
+    DB    $0a
+    DB    0
+    MOV   EAX,$7dfe
+    SUB   EAX,ESP
+    MOV   EBX,EAX
+    MOV   EAX,Self
+    MOV   EDX,[EAX]
+    CALL  DWORD PTR [EDX + VMTOFFSET TAsmhead.resb(EBX)]
+    DB    $55,$AA
 end;
 
 end.
index bf7aa8a..ada4bfd 100644 (file)
@@ -3,7 +3,8 @@ unit bootpack;
 interface
 
 uses
-  System.Classes, System.Generics.Collections, System.SysUtils, System.Types;
+  System.Classes, System.Generics.Collections, System.SysUtils, System.Types,
+  files;
 
 const
   COL8_000000 = 0;
@@ -191,6 +192,8 @@ type
     procedure inthandler27(var esp: integer);
   end;
 
+  TRefresh = procedure(Sender: TObject) of object;
+
   TSheet = class
   private const
     table: array [0 .. 14, 0 .. 2] of Byte = (($00, $00, $00), ($FF, $00, $00),
@@ -209,8 +212,8 @@ type
     bxsize, bysize, vx0, vy0, col_inv, flags: integer;
     visible: Boolean;
     hankaku: TResourceStream;
-    refresh: Boolean;
     clip: TRect;
+    OnRefresh: TRefresh;
     constructor Create(x, y, act: integer);
     destructor Destroy; override;
     procedure boxfill8(c: UInt8; x0, y0, x1, y1: integer); overload;
@@ -240,10 +243,21 @@ type
   TConsole = class(TWindow)
   private
     ctl: TCtl;
+    info: array of TFileInfo;
+    procedure newline;
+    procedure putchar(ch: Char; move: integer);
+    procedure putstr0(str: string);
+    procedure putstrl(str: string; length: integer);
   public
     fifo: TFifo;
+    cursor_y: integer;
+    files: TFiles;
     constructor Create(xsize, ysize: integer; title: string; act: integer);
     destructor Destroy; override;
+    procedure cmd_ls;
+    procedure cmd_type(param: string);
+    procedure cmd_mem;
+    procedure cmd_cls;
   end;
 
   TShtCtl = class
@@ -262,7 +276,7 @@ type
     destructor Destroy; override;
     procedure updown(sheet: TSheet; height: integer);
     procedure refresh(bx0, by0, bx1, by1: integer); overload;
-    procedure refresh(obj: TSheet); overload;
+    procedure refresh(Sender: TObject); overload;
     procedure slide(sheet: TSheet; x, y: integer);
     procedure delete(index: integer);
     procedure add(sheet: TSheet);
@@ -295,6 +309,7 @@ const
   AR_CODE32_ER = $409A;
   AR_TSS32 = $0089;
   AR_INTGATE32 = $008E;
+  ADR_DISKIMG = 0;
 
 implementation
 
@@ -786,16 +801,15 @@ end;
 
 constructor TCtl.Create(fifo: TFifo);
 var
-  i: integer;
+  i, j: integer;
   s, s0: TTask;
-  t: TTimer;
 begin
   inherited Create;
-  i := High(buf);
-  for i := 0 to i - 1 do
+  j := High(buf);
+  for i := 0 to j - 1 do
     buf[i] := TTask.Create;
-  buf[i] := TIdle.Create;
-  s0 := buf[i];
+  buf[j] := TIdle.Create;
+  s0 := buf[j];
   list := TList.Create;
   for i := 0 to High(task) do
     task[i] := TTaskCtl.Create;
@@ -816,7 +830,7 @@ end;
 
 destructor TCtl.Destroy;
 var
-  i, j: integer;
+  i: integer;
   s: TObject;
 begin
   for i := 0 to High(buf) do
@@ -959,6 +973,7 @@ end;
 procedure TShtCtl.add(sheet: TSheet);
 begin
   sheets.add(sheet);
+  sheet.OnRefresh := refresh;
   sheet.flags := SHEET_USE;
 end;
 
@@ -997,10 +1012,14 @@ begin
   end;
 end;
 
-procedure TShtCtl.refresh(obj: TSheet);
+procedure TShtCtl.refresh(Sender: TObject);
 var
   arect: TRect;
+  obj: TSheet;
 begin
+  obj := Sender as TSheet;
+  if Assigned(obj.OnRefresh) = false then
+    Exit;
   arect := obj.clip;
   refresh(arect.Left + obj.vx0, arect.top + obj.vy0, arect.Right + obj.vx0,
     arect.Bottom + obj.vy0);
@@ -1104,7 +1123,7 @@ begin
   if height < -1 then
     height := -1;
   if (height >= 0) and (sheet.flags = SHEET_USE) then
-    sheets.Move(j, height);
+    sheets.move(j, height);
 end;
 
 { TPallet }
@@ -1176,7 +1195,7 @@ var
   buf: array [0 .. 15] of Byte;
 begin
   s := LowerCase(s);
-  for i := 1 to Length(s) do
+  for i := 1 to length(s) do
   begin
     hankaku.Write(TBytes(@buf), Ord(s[i]), 16);
     putfont8(x, y, c, PChar(@buf));
@@ -1190,7 +1209,7 @@ begin
   clip := rect(x, y, x + bxsize * 8 - 1, y + 15);
   boxfill8(back, clip);
   putfonts8_asc(x, y, color, font);
-  refresh := true;
+  OnRefresh(Self);
 end;
 
 procedure TSheet.setp(start, endpos: integer; rgb: TBytes);
@@ -1351,22 +1370,50 @@ end;
 
 { TConsole }
 
+procedure TConsole.cmd_type(param: string);
+var
+  buf: TBytes;
+  i: integer;
+begin
+  i := files.search(Copy(param, 1, 5), info, 224);
+  if i > -1 then
+  begin
+    GetMem(Pointer(buf), info[i].size);
+    files.loadfile(info[i].clustno, info[i].size, buf,
+      Pointer(ADR_DISKIMG + $003E00));
+    putstrl(PChar(buf), info[i].size);
+    FreeMem(Pointer(buf));
+  end
+  else
+    putstr0('file not found.');
+end;
+
+procedure TConsole.cmd_cls;
+begin
+
+end;
+
 constructor TConsole.Create(xsize, ysize: integer; title: string; act: integer);
 var
   i: integer;
   s: TTask;
-  str: string;
+  cmd: string;
+  str: AnsiString;
+  j: integer;
 begin
   inherited;
   s := ctl.now;
   fifo := TFifo.Create(128);
   fifo.task := s;
+  files := TFiles.Create;
   cursor_x := 16;
+  cursor_y := 28;
   cursor_c := COL8_000000;
   ctl.run(ctl.MAX_TASKLEVELS - 1, 1);
   s.tss.esp := vram;
   ctl := TCtl.Create(fifo);
   ctl.settime(0, 50);
+  info := Pointer(ADR_DISKIMG + $002600);
   while true do
   begin
     io_cli;
@@ -1394,7 +1441,7 @@ begin
         end;
         boxfill8(cursor_c, cursor_x, 28, cursor_x + 7, 43);
         clip := rect(cursor_x, 28, cursor_x + 8, 44);
-        refresh := true;
+        OnRefresh(Self);
       end;
       case i of
         2:
@@ -1414,17 +1461,33 @@ begin
             dec(cursor_x, 8);
           end;
         end
+        else if i = 10 + 256 then
+        begin
+          putfonts8_asc_sht(cursor_x, cursor_y, ' ');
+          newline;
+          cmd := LowerCase(str);
+          if cmd = 'mem' then
+            cmd_mem
+          else if cmd = 'cls' then
+            cmd_cls
+          else if cmd = 'ls' then
+            cmd_ls
+          else if cmd = 'type' then
+            cmd_type(str)
+          else if Length(cmd) <> 0 then;
+        end
         else if cursor_x < 240 then
         begin
-          str[1] := Chr(i - 256);
-          str[2] := Chr(0);
-          putfonts8_asc(cursor_x, 28, 1, str);
+          cmd := LowerCase(str);
+          cmd[1] := Char(i - 256);
+          cmd[2] := Char(0);
+          putfonts8_asc(cursor_x, 28, 1, cmd);
           inc(cursor_x, 8);
         end;
       if cursor_c >= 0 then
         boxfill8(cursor_c, cursor_x, 28, cursor_x + 7, 43);
       boxfill8(cursor_c, cursor_x, 28, cursor_x + 7, 43);
-      refresh := true;
+      OnRefresh(Self);
     end;
   end;
 end;
@@ -1432,10 +1495,103 @@ end;
 destructor TConsole.Destroy;
 begin
   fifo.free;
+  files.free;
   ctl.free;
   inherited;
 end;
 
+procedure TConsole.cmd_ls;
+var
+  i: integer;
+  str: string;
+begin
+  for i := 0 to 223 do
+  begin
+    case Byte(info[i].name[1]) of
+      $00:
+        break;
+      $E5:
+        if Byte(info[i].tpye) and $18 = 0 then
+        begin
+          str := info[i].name;
+          str := str + info[i].ext;
+          putfonts8_asc_sht(8, cursor_y, str);
+          newline;
+        end;
+    end;
+  end;
+  newline;
+end;
+
+procedure TConsole.cmd_mem;
+begin
+
+end;
+
+procedure TConsole.newline;
+var
+  i: integer;
+  j: integer;
+begin
+  if cursor_y < 28 + 112 then
+    inc(cursor_y, 15)
+  else
+  begin
+    for i := 28 + 112 to 28 + 127 do
+      for j := 8 to 8 + 239 do
+        vram[j + i * bxsize] := vram[j + (i + 16) * bxsize];
+    for i := 28 to 28 + 111 do
+      for j := 8 to 8 + 239 do
+        vram[j + i * bxsize] := COL8_000000;
+    clip := rect(8, 28, 8 + 240, 128 + 28);
+    OnRefresh(Self);
+  end;
+end;
+
+procedure TConsole.putchar(ch: Char; move: integer);
+begin
+  if Byte(ch) = $09 then
+    while true do
+    begin
+      putfonts8_asc(cursor_x, cursor_y, 1, ch);
+      inc(cursor_x, 8);
+      if cursor_x = 8 + 240 then
+        newline
+      else if cursor_x - 8 and $1F = 0 then
+        break;
+    end
+  else if Byte(ch) = $0A then
+    newline
+  else if Byte(ch) = $0D then
+
+  else
+  begin
+    putfonts8_asc(cursor_x, cursor_y, 1, ch);
+    if move <> 0 then
+    begin
+      inc(cursor_x, 8);
+      if cursor_x = 8 + 240 then
+        newline;
+    end;
+  end;
+end;
+
+procedure TConsole.putstr0(str: string);
+var
+  i: integer;
+begin
+  for i := 1 to length(str) do
+    putchar(str[i], 1);
+end;
+
+procedure TConsole.putstrl(str: string; length: integer);
+var
+  i: integer;
+begin
+  for i := 1 to length do
+    putchar(str[i], 1);
+end;
+
 { TIdle }
 
 constructor TIdle.Create;
diff --git a/files.pas b/files.pas
new file mode 100644 (file)
index 0000000..5a5d45e
--- /dev/null
+++ b/files.pas
@@ -0,0 +1,129 @@
+unit files;
+
+interface
+
+uses System.SysUtils, System.Types;
+
+type
+  TFileInfo = record
+    clustno: integer;
+    name: string[8];
+    ext: string[3];
+    tpye: Byte;
+    reserve: string[10];
+    size: UInt32;
+  end;
+
+  TFiles = class
+  private
+    procedure readfat(img: TBytes);
+  public
+    fat: array of DWORD;
+    constructor Create;
+    destructor Destroy; override;
+    procedure loadfile(clustno, size: integer; buf, img: TBytes);
+    function search(name: string; info: array of TFileInfo;
+      max: integer): integer;
+  end;
+
+implementation
+
+{ TFiles }
+
+uses bootpack;
+
+constructor TFiles.Create;
+begin
+  inherited;
+  //fat := Pointer(0);
+  SetLength(fat, 4 * 2880);
+  readfat(Pointer(ADR_DISKIMG + $00C200));
+end;
+
+destructor TFiles.Destroy;
+begin
+  Finalize(fat);
+  inherited;
+end;
+
+procedure TFiles.loadfile(clustno, size: integer; buf, img: TBytes);
+var
+  i: integer;
+begin
+  while true do
+  begin
+    if size < 512 then
+    begin
+      for i := 0 to size do
+        buf[i] := img[clustno * 512 + i];
+      break;
+    end;
+    for i := 0 to 512 do
+      buf[i] := img[clustno * 512 + i];
+    dec(size, 512);
+    inc(clustno, 512);
+    clustno := fat[clustno];
+  end;
+end;
+
+procedure TFiles.readfat(img: TBytes);
+var
+  i, j: integer;
+begin
+  j := 0;
+  for i := 0 to 2880 do
+  begin
+    fat[i] := (img[j] or img[j + 1] shl 8) and $FFF;
+    fat[i + 1] := (img[j + 1] shr 4 or img[j + 2] shl 4) and $FFF;
+    inc(j);
+  end;
+end;
+
+function TFiles.search(name: string; info: array of TFileInfo;
+  max: integer): integer;
+var
+  i, j: integer;
+  s: string;
+label next;
+begin
+  s:='';
+  j := 1;
+  for i := 1 to Length(name) do
+  begin
+    if j > 12 then
+    begin
+      result := -1;
+      Exit;
+    end;
+    if (name[i] = '.') and (j <= 8) then
+    begin
+      repeat
+        s:=s+' ';
+        inc(j);
+      until j = 8;
+    end
+    else
+    begin
+      s := s + name[i];
+      inc(j);
+    end;
+  end;
+  s := UpperCase(s);
+  result := -1;
+  for i := 0 to max do
+  begin
+    if info[i].name = '' then
+      break;
+    if info[i].tpye and $18 = 0 then
+    begin
+      for j := 0 to 10 do
+        if info[i].name <> s[j] then
+          goto next;
+      result := i;
+      break;
+    end;
+  next:
+  end;
+end;
+
+end.
index 5b21a3a..45ffa7d 100644 (file)
--- a/wand.dpr
+++ b/wand.dpr
@@ -7,7 +7,8 @@ uses
   System.Classes,
   bootpack in 'bootpack.pas',
   asmhead in 'asmhead.pas',
-  func in 'func.pas';
+  func in 'func.pas',
+  files in 'files.pas';
 
 const
   MEMMAN_ADDR = $003C0000;
@@ -30,15 +31,19 @@ var
   s: string;
   fifo, keycmd: TFifo;
   mx, my: integer;
+  asmhead: TAsmHead;
 
 begin
+{$IFDEF Win32}
+  Exit;
+{$ENDIF}
+  asmhead:=TAsmhead.Create;
+  asmhead.Init;
+  asmhead.Boot;
+  asmhead.Free;
   key_leds := (binfo^.leds shr 4) and 7;
   keycmd_wait := -1;
   pic := TPic.Create;
-  {
-    TAsmhead.Init;
-    TAsmhead.Boot;
-  }
   fifo := TFifo.Create(128);
   keycmd := TFifo.Create(32);
   keyboard := TKeyboard.Create(fifo, 216);
@@ -214,6 +219,7 @@ begin
     fifo.Free;
     keycmd.Free;
     sheet.Free;
+    ctl.Free;
     win.Free;
     mo.Free;
     keyboard.Free;
index fa98425..9419789 100644 (file)
@@ -5,7 +5,7 @@
         <FrameworkType>None</FrameworkType>
         <MainSource>wand.dpr</MainSource>
         <Base>True</Base>
-        <Config Condition="'$(Config)'==''">Debug</Config>
+        <Config Condition="'$(Config)'==''">Release</Config>
         <Platform Condition="'$(Platform)'==''">Win32</Platform>
         <TargetedPlatforms>1</TargetedPlatforms>
         <AppType>Console</AppType>
         <CfgParent>Base</CfgParent>
         <Base>true</Base>
     </PropertyGroup>
+    <PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_2)'=='true') or '$(Cfg_2_Win32)'!=''">
+        <Cfg_2_Win32>true</Cfg_2_Win32>
+        <CfgParent>Cfg_2</CfgParent>
+        <Cfg_2>true</Cfg_2>
+        <Base>true</Base>
+    </PropertyGroup>
     <PropertyGroup Condition="'$(Base)'!=''">
         <SanitizedProjectName>wand</SanitizedProjectName>
         <DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)</DCC_Namespace>
         <DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
         <DCC_DebugInformation>0</DCC_DebugInformation>
     </PropertyGroup>
+    <PropertyGroup Condition="'$(Cfg_2_Win32)'!=''">
+        <VerInfo_Locale>1033</VerInfo_Locale>
+        <OutputExt>img</OutputExt>
+        <Manifest_File>None</Manifest_File>
+    </PropertyGroup>
     <ItemGroup>
         <DelphiCompile Include="$(MainSource)">
             <MainSource>MainSource</MainSource>
         <DCCReference Include="bootpack.pas"/>
         <DCCReference Include="asmhead.pas"/>
         <DCCReference Include="func.pas"/>
+        <DCCReference Include="files.pas"/>
         <RcItem Include="hankaku.bin">
             <ContainerId>ResourceItem</ContainerId>
             <ResourceType>RCDATA</ResourceType>
                 <Source>
                     <Source Name="MainSource">wand.dpr</Source>
                 </Source>
+                <Excluded_Packages>
+                    <Excluded_Packages Name="$(BDSBIN)\dcloffice2k210.bpl">Microsoft Office 2000 オートメーション サーバー ラッパー コンポーネントのサンプル</Excluded_Packages>
+                    <Excluded_Packages Name="$(BDSBIN)\dclofficexp210.bpl">Microsoft Office XP オートメーション サーバー ラッパー コンポーネントのサンプル</Excluded_Packages>
+                </Excluded_Packages>
             </Delphi.Personality>
             <Deployment Version="3">
                 <DeployFile LocalName="$(BDS)\Redist\iossimulator\libPCRE.dylib" Class="DependencyModule">
                         <Overwrite>true</Overwrite>
                     </Platform>
                 </DeployFile>
+                <DeployFile LocalName="Win32\Release\wand.exe" Configuration="Release" Class="ProjectOutput">
+                    <Platform Name="Win32">
+                        <RemoteName>wand.exe</RemoteName>
+                        <Overwrite>true</Overwrite>
+                    </Platform>
+                </DeployFile>
                 <DeployFile LocalName="$(BDS)\Redist\iossimulator\libcgunwind.1.0.dylib" Class="DependencyModule">
                     <Platform Name="iOSSimulator">
                         <Overwrite>true</Overwrite>
                 <ProjectRoot Platform="iOSDevice64" Name="$(PROJECTNAME).app"/>
                 <ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/>
                 <ProjectRoot Platform="OSX32" Name="$(PROJECTNAME).app"/>
-                <ProjectRoot Platform="iOSSimulator" Name="$(PROJECTNAME).app"/>
                 <ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
+                <ProjectRoot Platform="iOSSimulator" Name="$(PROJECTNAME).app"/>
             </Deployment>
             <Platforms>
                 <Platform value="Android">False</Platform>