きよくらの備忘録

「三日坊主と呼ばせない!日記」改め。主にソフトウェア開発関連の話題。

DOS/V版 Wizardry CDSをDOSBoxにインストールしてみた④ 完結編

前回までの作業を通じてDOS/V版CDSのインストール作業やDOSBox・DOSBox-Xに対する解像度……というか理解度が格段に上がった結果、

 

『2年前に挫折した、DOSBox-XへのPC-DOSなしの直接インストールも普通に成功するのでは?』

 

という思いが頭を過ったため、チャレンジしてみました。

 

その結果、すんなりとインストールすることができました

 

TL;DR

  • DOSBox-Xの設定のポイント
    • 日本語DOS/Vモードに設定
    • DOSのバージョンは6.22に設定
    • Cドライブは-freezise オプションで 50MB程度まででマウント
  • CDSのポイント
    • インストール直後のユーティリティーでシナリオヘッダの書換を忘れないこと
    • Pentium対応修正プログラムの適用は必須

 

 

詳細な設定手順等は以下にメモしておきます。

続きを読む

DOS/V版 Wizardry CDSをDOSBoxにインストールしてみた③

DOSBoxにDOS/V版 Wizardry 7 Crusaders of the Dark Savant日本語をインストールして動作させるシリーズ、DOS/V版 Wizardry CDSをDOSBoxにインストールしてみた② - きよくらの備忘録 の続きです。

DOSBox-Xは日本語DOS/Vとして動作するモードがありますので、自前で用意したPC-DOSでブートするのではなくそちらを使ってブートするように設定をしてみました。

続きを読む

DOS/V版 Wizardry CDSをDOSBoxにインストールしてみた②

DOSBoxにDOS/V版 Wizardry 7 Crusaders of the Dark Savant日本語をインストールして動作させるシリーズ、DOS/V版 Wizardry CDSをDOSBoxにインストールしてみた① - きよくらの備忘録 の続きです。

前回紹介させていただいた元動画に、投稿者様から以下の内容が追記されていました

  • DOSBox-Xだと(オリジナルのDOSBoxではつぶれてPC Speakerにするしかなかった)サウンドのEffectsでSound Blasterが問題なく使用できる
  • ただし描画に問題があるのでナイトリービルドの最新版がおすすめ

ということで、以下を試してみました。

  • DOSBox-Xに前回作ったCDSのHDDイメージをマウントして実行
  • ただし動画のコメントが2024年1月付のものだったので、ナイトリービルドではなく2024年3月1日付の安定リリース版を使用
続きを読む

DOS/V版 Wizardry CDSをDOSBoxにインストールしてみた①

DOSBox環境にDOS/V版 Wizardry 7 Crusaders of the Dark Savant日本語をインストールして動かしたのでメモ。

しばらく前*1に一度DOSBox環境にDOS/V版CDSをインストールしようとしたけどうまくいかず。色々忙しくてそのまま放置していたところで、ある日ニコニコに以下の神動画を投稿された方がいらっしゃることを発見。

その後色々忙しくて全く触れてなかったのですが、ようやく触れる時間が取れたのでチャレンジしました。

チャレンジ結果:問題なく成功

結果、全く問題なくインストール&実行成功。 本当助かりました。感謝。

動画と少し変更した点

動画で解説されているのと少し変えた箇所があります。

1. PC-DOS 6.3J/Vを使用

元の動画ではPC-DOS 6.1J/Vを使っていましたが、自分の手元にあるのはPC-DOS 6.3J/VとPC-DOS 2000。 どちらでも問題なさそうにも思いましたが、メジャーバージョンが同じ方が妙な問題に遭遇する可能性も低くなるだろうと思い6.3を使用しました。 結果、全く問題なしでした。

2. システム起動FDを使用せずHDDからそのままブート

元の動画では、CDSのインストールマニュアルに従ってDOSでシステム起動FDを作成してそこからブートして遊ぶ手順を採用されていました。 しかしこれは『HDD内の(当時の他のことにも普通に利用するPCの)DOS環境全体をCDSの実行に最適化するわけにはいかない』故に必要な手順です。 今回はCDS専用にDOSBOX環境を作成するので、HDD内のautoexec.batとconfig.sysを直接書き換えてHDDからブートする環境そのものをCDS専用にしてしても支障はありません。

ですので、私は以下のようにしました。

  • plank.img を作成・マウント・フォーマットしている箇所はすべて省略
  • plank.imgをマウントしたAドライブにautoexec.batとconfig.sysをコピーする箇所も省略
  • Cドライブ内のautoexec.batとconfig.sysを直接編集(編集内容は動画の通り)
  • DOSBOXのconfの[autoexec]セクションの記述を以下の2行にする
    • 1行目:imgmount c hd1.img -size 512,63,16,1021 -fs fat
    • 2行目:boot -l c

これで、FDイメージを使用せずHDDイメージから直接CDSが立ち上がりました。

Cドライブにマウントしたhd1.imgから直接ブート

その後の話

その後、上記の動画に追記としてDOSBox-X(のナイトリービルド版)を使うとEFFECTS周りの問題も解決するとの記述がありましたので、それも試したところうまく動きました。

またCドライブとして純正PC-DOSをインストールしたHDDイメージをマウントして起動するのではなく、DOSBox-XのDOS/Vモードで起動しCDSのファイルのみをホストPCのフォルダに配置しそのままマウントして実行するパターンもうまくいきました。

この辺りについては次のエントリでもう少しだけ詳しくメモを残そうと思います。 (もしかしたらDOSBox-XのDOS/V環境をちゃんと整えればインストール自体も純正PC-DOS不要で出来る可能性もありますがそこまでは試せていません。というか昔一度それに失敗しました。)

*1:twitterのログを見ると2021年の夏頃でした

WPF:DataGridにList<Dictionary<string, object>>をbindする

前回ポストの Dapperの結果のDapperRowのコレクションを単純なDictionaryのコレクションに変換する - きよくらの備忘録 に関連して。

List<Dictionary<string, object>>の形のデータをWPFのDataGridにバインドするのに少し手間取ったので備忘録として。

XAMLでDataGridTextColumnを定義する場合

XAML:

<DataGrid x:Name="DataGrid" AutoGenerateColumns="False">
  <DataGrid.Columns>
    <DataGridTextColumn Header="ID" Binding="{Binding Item[ID]}" />
    <DataGridTextColumn Header="Name" Binding="{Binding Item[Name]}" />
    <DataGridTextColumn Header="ID" Binding="{Binding Item[BirthDay]}" />
  </DataGrid.Columns>
</DataGrid>

C#コード:

public MainWindow()
{
  InitializeComponent();

  var list = new List<Dictionary<string, object>>
  {
    new Dictionary<string, object>() {{"ID", 1}, {"Name", "Taro"}, {"BirthDay",new DateTime(2001,10,1)}},
    new Dictionary<string, object>() {{"ID", 2}, {"Name", "Jiro"}, {"BirthDay",new DateTime(2004,2,3)}},
    new Dictionary<string, object>() {{"ID", 3}, {"Name", "Saburo"}, {"BirthDay",new DateTime(2010,5,21)}}
  };

  DataGrid.ItemsSource = list;
}

実行結果例:

動的にDataGridTextColumnを定義する場合

前回の例のようにKeyを事前にXAMLに記述決定できないような場合はDataGridTextColumn を動的に生成すればOK

XAML:

<DataGrid x:Name="DataGrid" AutoGenerateColumns="False">
  <DataGrid.Columns />
</DataGrid>

C#コード:

public MainWindow()
{
  InitializeComponent();

  var list = new List<Dictionary<string, object>>
  {
    new Dictionary<string, object>() {{"ID", 1}, {"Name", "Taro"}, {"BirthDay",new DateTime(2001,10,1)}},
    new Dictionary<string, object>() {{"ID", 2}, {"Name", "Jiro"}, {"BirthDay",new DateTime(2004,2,3)}},
    new Dictionary<string, object>() {{"ID", 3}, {"Name", "Saburo"}, {"BirthDay",new DateTime(2010,5,21)}}
  };

  // 1行目のKeysから取得したKeyで列をカラムを生成
  foreach (var key in list[0].Keys)
  {
    DataGrid.Columns.Add(new DataGridTextColumn()
    {
      Header = key,
      Binding = new Binding($"Item[{key}]")
    });
  }

  DataGrid.ItemsSource = list;
}