このページは、DOSエミュレータ 「DEMU」の仕様や進行状況を更新するページです。
最初から書き直す必要に迫られたので、改名とともにページ名を変更しました。
とりあえずDOS互換だけ実装し、その後コツコツと仕上げていくつもり。だいぶ完成してきました
大まかな骨組みは「基礎ライブラリ(グラフィックテキストボックス+ファイルアクセス/リスト+DOSメモリ管理)+CPU本体+APIシミュレータ」な予定。
(編集中)
実機のI/Oをアクセスするように変更しました。 FM音源音色エディタならファイルアクセスしなければ普通に動作します。 |
キーボード入力関係のファンクションを実装して、このDOSアプリは大体動くようになりました。 ただし、ファイル関係のファンクションを実装していないので実行しようとすると落ちる(汗)。 実機へのI/Oアクセスを実装したら音が出せそう。完成がやっと見えてきたかも? |
時間関係の実装も完了してやっとこの画面まで行った。 まだ実装していないDOSファンクションを実行しようとして(汗)停止しているところ。 この先はファイル関係ファンクションを本格的に実装しないと… |
_grp_id 8byte 識別用ID _grp_prev dword 未使用_ _grp_next dword 未使用_ _grp_window dword 配置先ウィンドウ_ _grp_buffer dword 未使用_ _grp_left dword ウィンドウ内での座標_ _grp_top dword _grp_scrnwidth byte 描画先の領域のサイズ(pixel) _grp_scrnheight byte _grp_fontwidth byte フォントのサイズ(pixel) _grp_fontheight byte _grp_textwidth byte バッファのテキスト単位のサイズ_ _grp_textheight byte _grp_scaleleft byte 描画開始位置(テキスト単位) _grp_scaletop byte _grp_width byte 描画先のテキストサイズ(テキスト単位) _grp_height byte _grp_cursor_x byte コンソール出力用の座標(x,y) _grp_cursor_y byte _grp_color_fl byte 文字色(16色) _grp_color_bg byte 背景色(16色) _grp_cursor_sav 4bytes カーソル位置待避用_ _grp_escseqflag byte エスケープシーケンス継続フラグ_ _grp_escseqcnt byte パラメータ保存数_ _grp_escseqcmd byte エスケープシーケンスコマンドバイト_ _grp_escseqval byte パラメータバッファ(1個1バイト) _grp_escseqsize = 3 パラメータバッファのサイズ(定数) (残り) 未使用_
テキストコード(32bit) 4byte 文字色 1byte 背景色 1byte 拡張用 2byteテキストにしてはメモリを使用するなぁ。
; in: edx ウィンドウ ; esi,edi グラフィックボックスの位置 ; cl,ch テキストボックスの表示領域のサイズ ; al,ah テキストボックスのバッファのサイズ ; ebx グラフィックテキストボックス
; in: ebx グラフィックテキストボックス ; cl,ch バッファ左上位置 ; al,ah サイズ(どちらかが0で全体再描画)
; in: eax 32bit半角コード ; cl,ch バッファ位置 ; dl,dh 文字色,背景色 ; ebx グラフィックテキストボックス
; in: ebx グラフィックテキストボックス ; edx 文字列(終端\0) ; al b1~0:文字列コード(=00:ASCIIZ,=01:SJISZ,=10:未定,=11:未定)ただしエスケープシーケンスは0x1B,"["で始まり"ABCDHJfsum*"のいずれかで終わるものに限る。
; in: ebx グラフィックテキストボックス ; dl,dh 文字色,背景色
; Memory Control Block セグメント ; ofs size document ; 0h byte チェインID(4Dhか5Ah) ; 1h word オーナーID(0:空き,8:DOS/システム,その他:確保したプログラムのセグメント?) ; 3h word サイズ(パラグラフ) ; 5h 3bytes reserved ; 8h 8bytes プログラム名(終端:00hまたはスペースで埋める)
; 内部変数領域の割り当て ; ofs size document ; es:bx-12 word 共有リトライ回数(DOS 440Bh) ; es:bx-10 word 共有リトライデュレイ ; es:bx-8 dword カレントディスクバッファへのポインタ ; es:bx-4 word 未読み込みCON入力のDOSコードセグメント内のポインタ ; es:bx-2 word 先頭のMCBのセグメントアドレス ; es:bx dword 先頭のDPBへのポインタ ; es:bx+04h dword 内部FCBのリストを指すポインタ ; es:bx+08h dword CLOCKデバイスドライバへのポインタ ; es:bx+0Ch dword CONデバイスドライバへのポインタ ; es:bx+10h word 扱える最大のセクタのサイズ(byte/sector)(AT:512) ; es:bx+12h dword 内部ディスクバッファの先頭アドレス ; es:bx+16h dword 内部ドライブ情報の先頭アドレス ; es:bx+1Ah dword reserved ; es:bx+1Eh word FCBS=x,y の y ; es:bx+20h byte 接続ドライブ数 ; es:bx+21h byte LASTDRIVEドライブ数(LASTDRIVE=Zなら1Ah) ; es:bx+22h 18bytes NULデバイスのデバイスヘッダ ; es:bx+34h byte JOINドライブ数 ; es:bx+35h word reserved ; es:bx+37h dword reserved ; es:bx+3Bh word reserved ; es:bx+3Dh word reserved ; es:bx+3Fh word BUFFERS=x,y の x ; es:bx+41h word BUFFERS=x,y の y ; es:bx+43h byte ブートドライブ(1=A:,2=B:...) ; es:bx+44h byte =1:80386/486, =0:8086/286 ; es:bx+45h word 拡張メモリ(1Mバイト以降のプロテクトメモリ)のサイズ(KB)
; in: edx メモリブロックのセグメント ; ecx 新しいサイズ(パラグラフ)
; in: edx メモリブロックのDOSセグメント値 ; eax オーナーID ; ebx プログラム名(ASCIIZ)へのポインタ
; out: edx メモリブロックのセグメント(0なら無い) ; ecx 確保可能なサイズ
; in: ecx サイズ ; out: CF エラー ; edx メモリセグメント ; ecx 確保可能なサイズ(パラグラフ)
コード | 意味 |
01h | 無効なファンクションコード |
02h | ファイルが見つからない |
03h | パス名が見つからない |
04h | これ以上ファイルをオープンできない |
05h | アクセスできない |
06h | 無効なハンドル |
07h | MemoryControlBlockが破損している |
08h | メモリが足りない |
09h | メモリブロックのアドレスが無効 |
0Ah | 環境が無効 |
0Bh | 書式が無効 |
0Ch | アクセスコードが無効 |
0Dh | データが無効 |
0Eh | 予約 |
0Fh | ドライブ名が無効 |
10h | カレントディレクトリは削除できない |
11h | 同じデバイスではない |
12h | これ以上ファイルはない |
13h | ライトプロテクトされている |
14h | ディスクユニットが不良 |
15h | ドライブが準備できていない |
16h | ディスクコマンドが無効 |
17h | CRCエラー |
18h | 長さが無効 |
19h | シークエラー |
1Ah | MS-DOSのディスクではない |
1Bh | セクタが見つからない |
1Ch | 用紙がない |
1Dh | 書き込みエラー |
1Eh | 読み出しエラー |
1Fh | 一般的なエラー |
20h | 共有違反 |
21h | ロック違反 |
22h | ディスクが不正 |
23h | FCBは使用できません |
32h | ネットワークリクエストが未サポート |
33h | リモートPCが待ち受け状態ではない |
34h | ネットワーク名が重複している |
35h | ネットワーク名が見つからない |
36h | ネットワークビジー |
37h | ネットワークデバイスはこれ以上ない |
38h | ネットワークBIOSの限界を超えた |
39h | ネットワークアダプタのハードエラー |
3Ah | ネットワークから不正な応答があった |
3Bh | 予期できないネットワークエラー |
3Ch | リモートアダプタが不正 |
3Dh | プリント待ち行列が満杯 |
3Eh | 待ち行列が満杯ではない |
3Fh | プリントファイルのためのスペースが不足 |
40h | ネットワーク名はすでに削除されている |
41h | アクセス不可能 |
42h | ネットワークデバイスのタイプが不正 |
43h | ネットワーク名が見つからない |
44h | ネットワーク名の限界を超えた |
45h | ネットワークBIOSセッションの限界を超えた |
46h | 一時休止 |
47h | ネットワークの要求が受け付けられない |
48h | プリンタ/ディスクのリダイレクト禁止 |
50h | ファイルが存在する |
52h | 作成不可能 |
53h | 割り込み24hのエラー |
54h | ネットワーク構造が不正 |
55h | 割り当て済み |
56h | パスワードが無効 |
57h | パラメータが無効 |
58h | ネットワークへの書き込みエラー |
5Ah | システム関連ファイルがロードされていない |
sendkeysignal: ; キーシグナルをキャラクタコードとスキャンコードに変換して蓄える_ ; in: eax キーシグナル_
getkeysignal: ; キースキャンコードとキャラクタコードの取得_ ; out: al キャラクタコード(特殊キー入力時は0) ; ah キースキャンコード_
input: ; バッファドキーボード入力 ; in: edx バッファ ; +00 最大文字数 ; +01 入力された文字数 ; +02 入力された文字列 ; ebx グラフィックテキストボックス
inputchar: ; DOS式1バイトキーボード入力(エコーなし,ウェイトなし) ; out: al キャラクタコード ; ZF =ZR:入力なし,=NZ:入力あり ; ※eaxの上位バイトは破壊される
inputcharw: ; DOS式1バイトキーボード入力(エコーなし,ウェイトあり) ; out: al キャラクタコード ; ※eaxの上位バイトは破壊される
ここは、管理人が試行錯誤しながら変更していく内部用のメモがわりです。
モード | 解像度 | フォント | 表示解像度 | 言語 |
3 | 80x25 | 6x12 | 480x 300 | jp |
- | 80x30 | 6x12 | 480x 360 | jp |
3 | 80x25 | 6x12 | 480x 300 | us |
- | 80x30 | 6x12 | 480x 360 | us |
- | 80x25 | 8x16 | 640x 400 | - |
- | 80x30 | 8x16 | 640x 480 | - |
- | 80x25 | 12x24 | 960x 600 | - |
- | 80x30 | 12x24 | 960x 720 | - |
- | 80x25 | 16x32 | 1280x 800 | - |
- | 80x30 | 16x32 | 1280x 960 | - |
(編集中)
ここは管理人が書く場所です。
コメント | お名前 | NameLink | |
なんでもいいですよ。
コメント | お名前 | NameLink | |