【祝！hellolevel3.mco完走】Mind8のランタイムディスパッチャC実装の代替実装をC#で行う

# はじめに
[こちらの記事](https://qiita.com/mylifewithviolin/items/8e137cc18b27190d17b8)にてMind開発者の@killyさんよりご提案いただいたMind8の検証用Consoleをベースに一部正規のConsoleのコードを取り込んだ中間コードステップ数84のhellolevel2.mcoの完走をC#で代替実装したディスパッチャで試みています。本記事ではこのバージョンの中間コードを完走させることはいったん中断し、[こちらの記事](https://qiita.com/mylifewithviolin/items/a6f848995c40d5d5d4f6)にて完走させた中間コードステップ数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の動作をデバッグ実行で探るために使用します。[こちらの記事](https://qiita.com/mylifewithviolin/items/2804356ae2f39b055b8c)の環境となります。

# カスタマイズConsoleのビルド
killyさんよりご提供いただいた情報に従い、下記のようにカスタマイズConsoleのビルド用のフォルダfilelevel群を作成しています。

## ビルド用フォルダ構成
現状は下記のようなフォルダ構成となります。filedummyフォルダは起動検証用Consoleのビルド環境です。fileフォルダは正規のソースファイルが格納されたフォルダです。filelevel3フォルダは本記事のバージョンの格納フォルダです。
filedummyの内容は[こちらの記事](https://qiita.com/mylifewithviolin/items/40772e39e4b44cd27a22)を、filelevel1,2(旧0)の内容は[こちらの記事](https://qiita.com/mylifewithviolin/items/5a68eb63e07379cc7997)を参照してください。

```
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ソースコード
[こちらの記事](https://qiita.com/mylifewithviolin/items/5a68eb63e07379cc7997)を参照してください。

# お題のMindソースコード
```mind:conslevel3.src
コンソール初期化・基本部とは　　（・  →  ・）
　（しばらくはシステムコールするな）
　　　　終了パラメータを　クリアし　　　　　　　　※CCONST.SRC
　　　　エラー文字列初期化し　　　　　　　　　　　※CERROR.SRC
　　　　空白文字列初期化し　　　　　　　　　　　　※COUTPUT.SRC
	   エラー出力を本来の出力に切り替え　　　　　※COUTPUT.SRC
	。

各ライブラリ初期化とは　　　　　本定義　　　　　（・  →  ・）
　　　　コンソール初期化・基本部し　　　　　　　　　　　※本ソース示すること。
```
$$COLD_FORTHの内容を「各ライブラリ初期化」まで正規版Consoleと同じとして、さらに「各ライブラリ初期化」の中身も「コンソール初期化・基本部」までとし、そしてさらに「コンソール初期化・基本部」の中身を、level1「空白文字列初期化し」まででしたが、level3ではlevel2の前半部分の「エラー出力を本来の出力に切り替え」を追加しています。

## 本来のお題のMind8のソースファイル
```mind:hellolevel1.src
メインとは
　　　　「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」が出力されるようにするまでの長い道のりですが（初期処理をショートカットすればこの処理自体は処理できていますが、初期処理をどの程度対応するかで道のりの長さは大きく変動しまして、カメの動きとなっております。）、次のレベルの完走を引き続き行ってまいります。