はじめに
こちらの記事にてMind開発者の@killyさんより情報共有いただいたMind8の検証用Consoleをベースに一部正規のConsoleのコードを取り込んだ中間コードステップ数60のhellolevel1.mcoを完走させました。killyさんより別の構成のソースのご提案もいただきましたので、そのバージョンをhellolevel2.mcoとしました。本記事ではこのバージョンの中間コードをC#で代替実装したディスパッチャで処理させてみます。
前提条件
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フォルダは正規のソースファイルが格納されたフォルダです。filelevel2フォルダは従来のfilelevel0フォルダです。
filedummyの内容はこちらの記事を、filelevel1,2(旧0)の内容はこちらの記事を参照してください。今回のお題はfilelevel2内のconslevel2.src上でビルドされたサンプルです。
C:\developments\vscode\mind8>tree
C:.
├─bin
├─file
│ └─obj
├─filedummy
│ └─obj
├─filelevel0
│ └─obj
├─filelevel1
│ └─obj
├─filelevel2
│ └─obj
├─kernel
│ └─.vscode
├─lib
├─libY
└─sample
お題のMindソースコード
こちらの記事を参照してください。
お題の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 0 0
2 002F 47 102 1024 0 0 1023 12337242 0
3 0036 54 8036 1024 0 0 1023 12337242 0
4 0080 128 8042 1024 0 0 1023 12337242 0
5 0036 54 8044 1024 0 0 1023 12337242 0
6 0070 112 8050 1024 0 0 1023 12337242 0
7 803A 32826 8052 1024 0 0 1023 12337242 0
8 002F 47 238 1024 0 0 1022 12345180 12337242
9 80E6 32998 8032 1024 0 0 1022 12345180 12337242
10 808F 32911 8026 1024 0 0 1021 12345160 12345180
11 0097 151 3626 1024 0 0 1020 12345154 12345160
12 0065 101 3628 1022 0 2 1020 12345154 12345160
13 0020 32 3634 1024 0 0 1020 12345154 12345160
14 80C1 32961 8028 1024 0 0 1021 12345160 12345180
15 0261 609 6430 1024 0 0 1020 12345156 12345160
16 8053 32851 6432 1022 0 4646640 1020 12345156 12345160
17 8052 32850 1042 1022 0 4646640 1019 12343560 12345156
18 001A 26 950 1022 0 4646640 1018 12338170 12343560
19 006B 107 952 1022 0 4646640 1016 0 0
20 0055 85 956 1024 0 0 1016 4646640 0
21 008F 143 960 1022 0 4646640 1016 4646640 0
22 00ED 237 962 1022 0 109 1016 4646640 0
23 0055 85 978 1024 0 0 1016 4646640 0
24 0012 18 982 1022 0 4646640 1016 4646640 0
25 00A2 162 984 1022 0 4646640 1016 4646640 0
26 00BF 191 990 1020 0 2147483647 1016 4646640 0
27 0095 149 992 1022 2147483647 4646640 1016 4646640 0
28 01D7 471 994 1020 0 0 1016 4646640 0
29 006B 107 996 1022 0 13 1016 4646640 0
30 0055 85 1000 1024 0 0 1016 4646640 13
31 00ED 237 1004 1022 0 13 1016 4646640 13
32 0055 85 1018 1024 0 0 1016 4646640 13
33 0055 85 1022 1022 0 4646640 1016 4646640 13
34 0103 259 1026 1020 0 13 1016 4646640 13
35 00BF 191 1028 1020 0 12 1016 4646640 13
36 0055 85 1030 1022 12 4646640 1016 4646640 13
37 0055 85 1034 1020 0 4646640 1016 4646640 13
38 0107 263 1038 1018 0 13 1016 4646640 13
39 0022 34 1040 1020 0 4646653 1016 4646640 13
40 0122 290 1044 1020 0 4646653 1019 12343560 12345156
41 0020 32 1046 1022 12 4646640 1019 12343560 12345156
42 0012 18 6434 1022 12 4646640 1020 12345156 12345160
43 0165 357 6436 1022 12 4646640 1020 12345156 12345160
44 80C0 32960 6446 1024 0 0 1020 12345156 12345160
45 002F 47 6426 1024 0 0 1019 12343574 12345156
46 0264 612 6580 1024 0 0 1019 12343574 12345156
47 0104 260 6582 1022 0 2 1019 12343574 12345156
48 0065 101 6584 1022 0 0 1019 12343574 12345156
49 0012 18 6590 1024 0 0 1019 12343574 12345156
50 0036 54 6592 1024 0 0 1019 12343574 12345156
51 0071 113 6598 1024 0 0 1019 12343574 12345156
52 0020 32 6600 1024 0 0 1019 12343574 12345156
53 0036 54 6448 1024 0 0 1020 12345156 12345160
54 0074 116 6454 1024 0 0 1020 12345156 12345160
55 0264 612 6456 1024 0 0 1020 12345156 12345160
56 0104 260 6458 1022 0 2 1020 12345156 12345160
57 00EE 238 6460 1022 0 0 1020 12345156 12345160
58 0020 32 6578 1024 0 0 1020 12345156 12345160
59 0020 32 8030 1024 0 0 1021 12345160 12345180
60 0020 32 8034 1024 0 0 1022 12345180 12337242
61 00A5 165 8054 1024 0 0 1023 12337242 0
62 00C1 193 8072 1022 14 12345184 1023 12337242 0
$$COLD_FORTH
63 0020 32 8074 1024 0 0 1023 12337242 0
64 80F1 33009 116 1024 0 0 1024 0 0
65 00A5 165 8530 1024 0 0 1023 12337244 0
66 8083 32899 8548 1022 14 12345660 1023 12337244 0
67 0012 18 3510 1022 14 12345660 1022 12345676 12337244
68 004E 78 3512 1022 14 12345660 1022 12345676 12337244
69 00EC 236 3518 1020 0 0 1022 12345676 12337244
70 0096 150 3524 1022 14 12345660 1022 12345676 12337244
71 026D 621 3526 1020 0 1 1022 12345676 12337244
Hello by mind8 72 0020 32 3528 1024 0 0 1022 12345676 12337244
73 0020 32 8550 1024 0 0 1023 12337244 0
74 801A 32794 118 1024 0 0 1024 0 0
75 002F 47 106 1024 0 0 1023 12337246 0
76 00A5 165 8102 1024 0 0 1023 12337246 0
77 00C1 193 8116 1022 10 12345232 1023 12337246 0
実行終り
78 801B 32795 8118 1024 0 0 1023 12337246 0
79 002F 47 110 1024 0 0 1022 12345246 12337246
80 00A5 165 8076 1024 0 0 1022 12345246 12337246
81 00C1 193 8098 1022 18 12345206 1022 12345246 12337246
実行終り時の処理
82 0020 32 8100 1024 0 0 1022 12345246 12337246
83 004E 78 8120 1024 0 0 1023 12337246 0
84 0014 20 8126 1022 0 0 1023 12337246 0
PS C:\developments\vscode\mind8\kernel>
お題の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 8036 1024 0 0 1023 114 0
4 0080 128 8042 1024 0 0 1023 114 0
5 0036 54 8044 1024 0 0 1023 114 0
6 0070 112 8050 1024 0 0 1023 114 0
7 803A 32826 8052 1024 0 0 1023 114 0
8 002F 47 238 1024 0 0 1022 8052 114
9 80E6 32998 8032 1024 0 0 1022 8052 114
10 808F 32911 8026 1024 0 0 1021 8032 8052
11 0097 151 3626 1024 0 0 1020 8026 8032
12 0065 101 3628 1022 0 2 1020 8026 8032
13 0020 32 3634 1024 0 0 1020 8026 8032
14 80C1 32961 8028 1024 0 0 1021 8032 8052
15 0261 609 6430 1024 0 0 1020 8028 8032
16 8053 32851 6432 1022 0 5376768 1020 8028 8032
17 8052 32850 1042 1022 0 5376768 1019 6432 8028
18 001A 26 950 1022 0 5376768 1018 1042 6432
19 006B 107 952 1022 0 5376768 1016 0 0
20 0055 85 956 1024 0 0 1016 5376768 0
21 008F 143 960 1022 0 5376768 1016 5376768 0
22 00ED 237 962 1022 0 5376768 1016 5376768 0
23 0055 85 978 1024 0 0 1016 5376768 0
24 0012 18 982 1022 0 5376768 1016 5376768 0
25 00A2 162 984 1022 0 5376768 1016 5376768 0
26 00BF 191 990 1020 0 65535 1016 5376768 0
27 0095 149 992 1022 65535 5376768 1016 5376768 0
28 01D7 471 994 1020 0 0 1016 5376768 0
29 006B 107 996 1022 0 1 1016 5376768 0
30 0055 85 1000 1024 0 0 1016 5376768 0
31 00ED 237 1004 1022 0 1 1016 5376768 0
32 0055 85 1018 1024 0 0 1016 5376768 0
33 0055 85 1022 1022 0 5376768 1016 5376768 0
34 0103 259 1026 1020 0 1 1016 5376768 0
35 00BF 191 1028 1020 0 1 1016 5376768 0
36 0055 85 1030 1022 1 5376768 1016 5376768 0
37 0055 85 1034 1020 0 5376768 1016 5376768 0
38 0107 263 1038 1018 0 1 1016 5376768 0
39 0022 34 1040 1020 0 5376769 1016 5376768 0
40 0122 290 1044 1020 0 5376769 1019 6432 1
41 0020 32 1046 1022 1 5376768 1019 6432 1
42 0012 18 6434 1022 1 5376768 1020 1 8032
43 0165 357 6436 1022 1 5376768 1020 1 8032
44 80C0 32960 6446 1024 0 0 1020 1 8032
45 002F 47 6426 1024 0 0 1019 6446 1
46 0264 612 6580 1024 0 0 1019 6446 1
47 0104 260 6582 1022 0 826464 1019 6446 1
48 0065 101 6584 1022 826462 826464 1019 6446 1
49 0012 18 6590 1024 0 0 1019 6446 1
50 0036 54 6592 1024 0 0 1019 6446 1
51 0071 113 6598 1024 0 0 1019 6446 1
52 0020 32 6600 1024 0 0 1019 6446 1
53 0036 54 6448 1024 0 0 1020 1 8032
54 0074 116 6454 1024 0 0 1020 1 8032
55 0264 612 6456 1024 0 0 1020 1 8032
56 0104 260 6458 1022 0 826112 1020 1 8032
57 00EE 238 6460 1022 826110 826112 1020 1 8032
例外がスローされました: 'System.NullReferenceException' (mind8dispatch.dll の中)
プログラム '[6536] mind8dispatch.dll' がコード -1 (0xffffffff) で終了しました。
最後が例外スローされていますが、これはmcode= 00EEがまだ実装されていないことによるものです。この実行結果に至る途中、ステップ46のmcode= 0264も未実装でしたので、今回下記のように実装しています。
お題のC#ソースコード
using System.Runtime.InteropServices;
using System.Text;
namespace Mind8Kernel
{
public partial class Dispatcher
{
private void GetArgC() /* ;WORD argc */
{
/* Mコード=0x0264 */
/* (. → argc) */
//PUSH_Q( Argc, 0 );
IntPtr ptr =Marshal.StringToHGlobalAnsi(argc);
dtp.PushUl((uint)ptr);//暫定
dtp.PushUl(0);
}
つづく
生成されたhello.mcoを解釈して、C#側で「Hello by mind8」が出力されるようにするまでの長い道のりですが(初期処理をショートカットすればこの処理自体は処理できていますが、初期処理をどの程度対応するかで道のりの長さは大きく変動しまして、カメの動きとなっております。)、次のレベルの完走を引き続き行ってまいります。