C言語でパソコン内に仮想コンピュータを作ってみた

私が作った仮想コンピュータのスペックは以下の通り

・1つの命令コードの長さ
8ビット(1バイト)

・格納できる命令コードの数
8つ

・命令コードの法則
上位2ビット:オペコード
下位6ビット:オペランド

・2進数のオペコード
00:何もしない
01:加算命令(「アキュムレータ内の値」+「オペランドの値」をアキュムレータに格納する)
10:減算命令(「アキュムレータ内の値」-「オペランドの値」をアキュムレータに格納する)
11:アキュムレータ内の値の画面出力(10進数で)命令

即値データ

その仮想コンピュータのプログラムのC言語ソースファイルは以下の通り。

#include <stdio.h>
#include <windows.h>

int main(void)
{
   union c{
      struct{
         unsigned char operand : 6;
         unsigned char opecode : 2;
      }part;
      unsigned char code;
   };

   union c meirei[8];

   int i = 0;
   int command = 0;
   unsigned char accumulator = 0;


   system("cls");
   while(1){
      switch(command){
         case 1:
            for(i=0;i<sizeof(meirei);i++) printf("%x:%x\n",i,meirei[i].code);
            putchar('\n');
            break;
         case 2:
            printf("どのアドレスの命令コードを入力しますか?:");
            scanf("%x",&i);
            printf("%x:",i);
            scanf("%x",&meirei[i].code);
            putchar('\n');
            break;
         case 3:
            for(i=0;i<sizeof(meirei);i++){
               switch(meirei[i].part.opecode){
                  case 0:
                     break;
                  case 1:
                     accumulator += meirei[i].part.operand;
                     break;
                  case 2:
                     accumulator -= meirei[i].part.operand;
                     break;
                  case 3:
                     printf("%d\n",accumulator);
                     break;
               }
            }
            accumulator = 0;
            putchar('\n');
            break;
         case 4:
            goto EXIT;
            break;
         default:
            break;
      }

      printf("何をしますか?\n");
      printf("1:命令コードのリストを見る 2:命令コードを変える 3:プログラムを実行する 4:仮想マシンの電源を切る\n");
      scanf("%d",&command);

      system("cls");     
   }

   EXIT:
  
   return 0;
}