nika管理人nikaへのメッセージなどは上記Twitter等へどうぞ。「DEMU」の仕様や進行状況を更新するページです。最初から書き直す必要に迫られたので、改名とともにページ名を変更しました。DOS互換だけ実装し、その後コツコツと仕上げていくつもり。完成してきました大まかな骨組みは「基礎ライブラリ(グラフィックテキストボックス+ファイルアクセス/リスト+DOSメモリ管理)+CPU本体+APIシミュレータ」な予定。†ファイル読み書き関係をちゃんと実装してOSASK上にファイルを作成できた。FM音源音色エディタが正常に動作するようになったのでここら辺で配布する予定。ファイル読み込み関係を実装中。今の段階では存在するファイルを読み込もうとすると応答無しになる。実機のI/Oをアクセスするように変更しました。FM音源音色エディタならファイルアクセスしなければ普通に動作します。コンソール出力ファイル(テキスト)5dsout.txtコンソール出力ファイル(実行形式)5dsout.comCOM化したテキストファイルです。WinXP(2k含む)上で動作させるにはCONFIG.NTにANSI.SYSを追加する必要があります。3パラメータバッファのサイズ(定数)(残り)未使用_内部バッファ以下の8byteが文字数分(80x25=半角2000文字分=16000byte)連続する。4byte文字色1byte背景色1byte拡張用2byteテキストにしてはメモリを使用するなぁ。in:ebxグラフィックテキストボックス;edx文字列(終端\0);alb1~0:文字列コード(=00:ASCIIZ,=01:SJISZ,=10:未定,=11:未定)ただしエスケープシーケンスは0x1B,"["で始まり"ABCDHJfsum*"のいずれかで終わるものに限る。in:ebxグラフィックテキストボックス;dl,dh文字色,背景色グラフィックテキストボックスフォント関連グラフィックテキストボックス色深度関連グラフィックテキストボックス解像度またはリサイズ関連MCBのとは?DOS上でメモリを管理する仕組み。DOSはメモリをリサイズや開放などをするとき、メモリセグメントの1パラグラフ前にくっついているこのMCBを変更するというのが実体です(もちろんチェイン先にMCBを書かなくてはいけません)。MCBの実装について現在はDOSアプリが最初のメモリブロックの位置を取得することはできません。DEMUがメモリブロックのリサイズや新規確保に対応するために実装します。最初のMCBは0x0BFFくらいとりあえず0x07FF初期化で作成するMCBは空のメモリブロック(0x0800~0x9FFE)と将来のUMB用(システムが使用中のマーク)(0xA000~0xFFFF)の2つ。es:bx+45hword拡張メモリ(1Mバイト以降のプロテクトメモリ)のサイズ(KB)この内部変数領域をゲストOSメモリ上に置かなければならないのが以外と面倒。out:CFエラー;edxメモリセグメント;ecx確保可能なサイズ(パラグラフ)MCBの開放ファイル関係の整理ファイルハンドル→PSP内のローカルなハンドル→FCBの番号という変換は行わない。ファイルハンドル→16倍してOSASK側のスロットという直接な変換をする。従ってゲストOS側に返されるファイルハンドルの値は0x20~0x3Fとなるが、実際はもっと狭い範囲になる(同時オープン可能なファイル数も制限される)。ファイルへの追記はサポートする。そのときの挙動はOSに任せる。新規作成でシーケンシャルなファイル書き込みを使用していると書き出しの度にリサイズしなければならないが、その都度OSへ任せないである程度キャッシュしたほうがいいだろうか、速度的に。DOSアプリ実行中のファイルアクセスは、OSASK側のモジュールをマッピングしてブロック転送するという方法を用いる。リサイズを伴う場合は先に一定のサイズを広げてからブロック転送する。そのとき、(リサイズでエラーが帰ってきたら書き込みエラーまたは書き込まれたサイズを小さくして正常終了する。(編集中)ファイルハンドル0~4(5?)にはまだ対応していない。OSASKのFD上にはルートディレクトリしかないけど、どうしよう。ルートディレクトリ以外へのアクセスはエラーにした方がいいのか、それともディレクトリ指定を無視した方がいいのか。ファイルオープン(AH=3C,3Dh)ファイルクローズ(AH=3Eh)ファイルから読み込み(AH=3Fh)ファイルへ書き込み(AH=40h)ファイルの切り詰め(AH=40h)ファイルポインタのシーク(AH=42h)最初のファイル検索(AH=4Eh)次のファイル検索(AH=4Fh)(現在は常にエラーを返す)ファイルの削除(AH=41h)(現在は常にエラーを返す)ファイル検索や削除、属性関係はディスクイメージを扱うようになるまで正常な動作をしない。システム関連ファイルがロードされていないキーボード入力関係の仕組みOSASK標準割り当てキーコード(キャラクタはそのまま、特殊キーは0x80~に割り当て)がシグナルとしてdefineしたものが送られてくるキーボードシグナルを受信すると同時にキャラクタコードとスキャンコードに変換してキーバッファに蓄える。デバッグコンソールやゲストOSが取得したときにそのキャラクタコードを渡す。1文字入力ファンクション実行時)。マルチコンソールが有効なときは本来ならアクティブな方のキーバッファに送らないと誤動作する可能性があるが、今回は両方(デバッグコンソールとゲストOS)で共通のキーバッファを使用する(デバッグコンソールとゲストOSが同時に取得することはありえないため)。特殊キー(矢印キーとかPageUpとか)が押された場合はDOS/V標準の00hが取得されてからキースキャンコードが取得される方式を採用。PC98式(TOWNSはまた違った気がする)は←キーとか0x08(BS)に割り当てられていたりするため、微妙に動かないだろう。†ここは、管理人が試行錯誤しながら変更していく内部用のメモがわりです。DEMU起動時に実行ファイルをオープン(関連付け起動対応)。メモリブロックの構造や環境変数などを内部(外部優先)ファイルを元に初期化しないかもしれない。DOS実行ファイルを(必要ならばリロケーションして)メモリに配置。実行可能なEXEファイルにはサイズ制限があります(実際のEXEファイルのサイズが560KB未満)。ファイルの読み込みや書き出しは必要な場合のみ、ディスクイメージをアクセスする。実行ファイルの位置はそのイメージ内にあるものとする。実際にディスクイメージ内に無い場合でも内部的には微妙。ハードディスクやCD-ROM等はアクセスできない。BIOSをエミュレーションしているわけではないのでBIOSレベルの操作は正常に動作しない。常駐するアプリは対応していない。いうかコマンドラインが無いので正常終了と同じ扱い。タイマ割り込みをエミュレーションするかどうかは使っているアプリがどのくらいあるかによる。17:30:00.00にセットしてみる。Versionは5.0としようかな。