はじめに
こちらの記事にてMind開発者の@killyさんよりご提案いただいたMind8の検証用Consoleをベースに一部正規のConsoleのコードを取り込んだ中間コードステップ数84のhellolevel2.mcoの完走をC#で代替実装したディスパッチャで試みています。本記事ではこのバージョンの中間コードを完走させることはいったん中断し、こちらの記事にて完走させた中間コードステップ数60のhellolevel1.mcoを修正して、本来の順序で処理されるようhellolevel2.mcoの前半部分を追加して完走させたものです。
前提条件
Windows11 Pro 22H2
VSCode(Visual Studo Code) 1.86.1
Microsoft Visual C++ 2008 Express Edition
Mind Version 8.0.08 for Windows
C# 12
dotnet-sdk-8.0.204-win-x64
VSCodeの拡張機能
C/C++ for Visual Studio Code 1.18.5 Microsoft
C/C++ Extension Pack 1.3.0 Microsoft
.NET Install Tool 2.0.2 Microsoft
Base language support for C# 2.18.16 Microsoft
C/C++のデバッガはCで実装されているMind8kernelの動作をデバッグ実行で探るために使用します。こちらの記事の環境となります。
カスタマイズConsoleのビルド
killyさんよりご提供いただいた情報に従い、下記のようにカスタマイズConsoleのビルド用のフォルダfilelevel群を作成しています。
ビルド用フォルダ構成
現状は下記のようなフォルダ構成となります。filedummyフォルダは起動検証用Consoleのビルド環境です。fileフォルダは正規のソースファイルが格納されたフォルダです。filelevel3フォルダは本記事のバージョンの格納フォルダです。
filedummyの内容はこちらの記事を、filelevel1,2(旧0)の内容はこちらの記事を参照してください。
C:\developments\vscode\mind8>tree
C:.
├─bin
├─file
│ └─obj
├─filedummy
│ └─obj
├─filelevel0
│ └─obj
├─filelevel1
│ └─obj
├─filelevel2
│ └─obj
├─filelevel3
│ └─obj
├─kernel
│ └─.vscode
├─lib
├─libY
└─sample
お題のMindソースコード
こちらの記事を参照してください。
お題のMindソースコード
コンソール初期化・基本部とは (・ → ・)
(しばらくはシステムコールするな)
終了パラメータを クリアし ※CCONST.SRC
エラー文字列初期化し ※CERROR.SRC
空白文字列初期化し ※COUTPUT.SRC
エラー出力を本来の出力に切り替え ※COUTPUT.SRC
。
各ライブラリ初期化とは 本定義 (・ → ・)
コンソール初期化・基本部し ※本ソース示すること。
$$COLD_FORTHの内容を「各ライブラリ初期化」まで正規版Consoleと同じとして、さらに「各ライブラリ初期化」の中身も「コンソール初期化・基本部」までとし、そしてさらに「コンソール初期化・基本部」の中身を、level1「空白文字列初期化し」まででしたが、level3ではlevel2の前半部分の「エラー出力を本来の出力に切り替え」を追加しています。
本来のお題のMind8のソースファイル
メインとは
「Hello by mind8」を 表示すること。
アプリケーションとしてのユーザーコードは上記だけですが、Mind8ランタイムの初期化コードがいろいろな提示済単語をチェック処理していて、現在フルスペックのチェックコードを通過できないため、前記のような初期処理のショートカット版のバージョンを段階的に作成して完走を試みているというのが現状です。
お題のMind8の中間コード実行リスト
C側検証環境で、お題の中間コードファイルをディスパッチャで処理させます。
SqNo mcode mc(dec) mpoint dtp.point dtp+0 dtp+1 rtp.point rtp+0 rtp+1
1 8019 32793 114 1024 0 0 1024 1819242324 1442864243
2 002F 47 102 1024 0 0 1023 5721882 1819242324
3 0036 54 5864 1024 0 0 1023 5721882 1819242324
4 0080 128 5870 1024 0 0 1023 5721882 1819242324
5 0036 54 5872 1024 0 0 1023 5721882 1819242324
6 0070 112 5878 1024 0 0 1023 5721882 1819242324
7 803A 32826 5880 1024 0 0 1023 5721882 1819242324
8 002F 47 238 1024 0 0 1022 5727648 5721882
9 80B8 32952 5860 1024 0 0 1022 5727648 5721882
10 0012 18 5842 1024 0 0 1021 5727628 5727648
11 0036 54 5844 1024 0 0 1021 5727628 5727648
12 0071 113 5850 1024 0 0 1021 5727628 5727648
13 8046 32838 5852 1024 0 0 1021 5727628 5727648
14 8045 32837 326 1024 0 0 1020 5727620 5727628
15 0012 18 314 1024 0 0 1019 5722094 5727620
16 0036 54 316 1024 0 0 1019 5722094 5727620
17 0074 116 322 1024 0 0 1019 5722094 5727620
18 0020 32 324 1024 0 0 1019 5722094 5727620
19 0020 32 328 1024 0 0 1020 5727620 5727628
20 80A3 32931 5854 1024 0 0 1021 5727628 5727648
21 0036 54 3884 1024 0 0 1020 5727622 5727628
22 0012 18 3890 1024 0 0 1020 5727622 5727628
23 016E 366 3892 1024 0 0 1020 5727622 5727628
24 0020 32 3898 1024 0 0 1020 5727622 5727628
25 808F 32911 5856 1024 0 0 1021 5727628 5727648
26 0097 151 3626 1024 0 0 1020 5727624 5727628
27 0065 101 3628 1022 0 2 1020 5727624 5727628
28 0020 32 3634 1024 0 0 1020 5727624 5727628
29 0020 32 5858 1024 0 0 1021 5727628 5727648
30 0020 32 5862 1024 0 0 1022 5727648 5721882
31 00A5 165 5882 1024 0 0 1023 5721882 1819242324
32 803C 32828 5906 1022 20 5727652 1023 5721882 1819242324
33 002F 47 246 1022 20 5727652 1022 5727674 5721882
34 001A 26 5802 1022 20 5727652 1022 5727674 5721882
35 006E 110 5804 1022 20 5727652 1020 5727624 5727628
36 0015 21 5808 1024 0 0 1020 20 5727652
37 00ED 237 5810 1022 0 1 1020 20 5727652
38 0022 34 5830 1024 0 0 1020 20 5727652
39 00A5 165 5908 1024 0 0 1023 5721882 1819242324
40 00C1 193 5926 1022 14 5727678 1023 5721882 1819242324
$$COLD_FORTH
41 0020 32 5928 1024 0 0 1023 5721882 1819242324
42 80C3 32963 116 1024 0 0 1024 1819242324 1442864243
43 00A5 165 6386 1024 0 0 1023 5721884 1819242324
44 8083 32899 6404 1022 14 5728156 1023 5721884 1819242324
45 0012 18 3510 1022 14 5728156 1022 5728172 5721884
46 004E 78 3512 1022 14 5728156 1022 5728172 5721884
47 00EC 236 3518 1020 0 0 1022 5728172 5721884
48 0096 150 3524 1022 14 5728156 1022 5728172 5721884
49 026D 621 3526 1020 0 1 1022 5728172 5721884
Hello by mind8
50 0020 32 3528 1024 0 0 1022 5728172 5721884
51 0020 32 6406 1024 0 0 1023 5721884 1819242324
52 801A 32794 118 1024 0 0 1024 1819242324 1442864243
53 002F 47 106 1024 0 0 1023 5721886 1819242324
54 00A5 165 5956 1024 0 0 1023 5721886 1819242324
55 00C1 193 5970 1022 10 5727726 1023 5721886 1819242324
実行終り
56 801B 32795 5972 1024 0 0 1023 5721886 1819242324
57 002F 47 110 1024 0 0 1022 5727740 5721886
58 00A5 165 5930 1024 0 0 1022 5727740 5721886
59 00C1 193 5952 1022 18 5727700 1022 5727740 5721886
実行終り時の処理
60 0020 32 5954 1024 0 0 1022 5727740 5721886
61 0012 18 5974 1024 0 0 1023 5721886 1819242324
62 004E 78 5976 1024 0 0 1023 5721886 1819242324
63 0014 20 5982 1022 0 0 1023 5721886 1819242324
アドレス値はC#代替互換に変換していないので、少しわかりづらいですが、このバージョンの中間コードステップ数は63であることがわかります。
お題のMind8の中間コードのC#代替ディスパッチャ実行リスト
C#側検証環境で、お題の中間コードファイルを上記カスタマイズConsoleでビルドしたC#代替ディスパッチャで処理させます。
SqNo mcode mc(dec) mpoint dtp.point dtp+0 dtp+1 rtp.point rtp+0 rtp+1
1 8019 32793 114 1024 0 0 1024 0 0
2 002F 47 102 1024 0 0 1023 114 0
3 0036 54 5864 1024 0 0 1023 114 0
4 0080 128 5870 1024 0 0 1023 114 0
5 0036 54 5872 1024 0 0 1023 114 0
6 0070 112 5878 1024 0 0 1023 114 0
7 803A 32826 5880 1024 0 0 1023 114 0
8 002F 47 238 1024 0 0 1022 5880 114
9 80B8 32952 5860 1024 0 0 1022 5880 114
10 0012 18 5842 1024 0 0 1021 5860 5880
11 0036 54 5844 1024 0 0 1021 5860 5880
12 0071 113 5850 1024 0 0 1021 5860 5880
13 8046 32838 5852 1024 0 0 1021 5860 5880
14 8045 32837 326 1024 0 0 1020 5852 5860
15 0012 18 314 1024 0 0 1019 326 5852
16 0036 54 316 1024 0 0 1019 326 5852
17 0074 116 322 1024 0 0 1019 326 5852
18 0020 32 324 1024 0 0 1019 326 5852
19 0020 32 328 1024 0 0 1020 5852 5860
20 80A3 32931 5854 1024 0 0 1021 5860 5880
21 0036 54 3884 1024 0 0 1020 5854 5860
22 0012 18 3890 1024 0 0 1020 5854 5860
23 016E 366 3892 1024 0 0 1020 5854 5860
24 0020 32 3898 1024 0 0 1020 5854 5860
25 808F 32911 5856 1024 0 0 1021 5860 5880
26 0097 151 3626 1024 0 0 1020 5856 5860
27 0065 101 3628 1022 0 2 1020 5856 5860
28 0020 32 3634 1024 0 0 1020 5856 5860
29 0020 32 5858 1024 0 0 1021 5860 5880
30 0020 32 5862 1024 0 0 1022 5880 114
31 00A5 165 5882 1024 0 0 1023 114 0
32 803C 32828 5906 1022 20 5884 1023 114 0
33 002F 47 246 1022 20 5884 1022 5906 114
34 001A 26 5802 1022 20 5884 1022 5906 114
35 006E 110 5804 1022 20 5884 1020 5856 5860
36 0015 21 5808 1024 0 0 1020 20 5860
37 00ED 237 5810 1022 0 1 1020 20 5860
38 0022 34 5830 1024 0 0 1020 20 5860
39 00A5 165 5908 1024 0 0 1023 114 0
40 00C1 193 5926 1022 14 5910 1023 114 0
$$COLD_FORTH
41 0020 32 5928 1024 0 0 1023 114 0
42 80C3 32963 116 1024 0 0 1024 0 0
43 00A5 165 6386 1024 0 0 1023 116 0
44 8083 32899 6404 1022 14 6388 1023 116 0
45 0012 18 3510 1022 14 6388 1022 6404 116
46 004E 78 3512 1022 14 6388 1022 6404 116
47 00EC 236 3518 1020 0 0 1022 6404 116
48 0096 150 3524 1022 14 6388 1022 6404 116
49 026D 621 3526 1020 0 1 1022 6404 116
Hello by mind8
50 0020 32 3528 1024 0 0 1022 6404 116
51 0020 32 6406 1024 0 0 1023 116 0
52 801A 32794 118 1024 0 0 1024 0 0
53 002F 47 106 1024 0 0 1023 118 0
54 00A5 165 5956 1024 0 0 1023 118 0
55 00C1 193 5970 1022 10 5958 1023 118 0
実行終り
56 801B 32795 5972 1024 0 0 1023 118 0
57 002F 47 110 1024 0 0 1022 5972 118
58 00A5 165 5930 1024 0 0 1022 5972 118
59 00C1 193 5952 1022 18 5932 1022 5972 118
実行終り時の処理
60 0020 32 5954 1024 0 0 1022 5972 118
61 0012 18 5974 1024 0 0 1023 118 0
62 004E 78 5976 1024 0 0 1023 118 0
63 0014 20 5982 1022 0 0 1023 118 0
例外がスローされました: 'Mind8Kernel.Dispatcher.ExitModule' (mind8dispatch.dll の中)
プログラム '[14968] mind8dispatch.dll' がコード 0 (0x0) で終了しました。
hellolevel2.mcoの走行のために対応してきた改修は有効で、とりあえず今回のhellolevel3.mcoの状態であれば完走することがわかりました。
つづく
生成されたhello.mcoを解釈して、C#側で「Hello by mind8」が出力されるようにするまでの長い道のりですが(初期処理をショートカットすればこの処理自体は処理できていますが、初期処理をどの程度対応するかで道のりの長さは大きく変動しまして、カメの動きとなっております。)、次のレベルの完走を引き続き行ってまいります。