Advertisement
DrAungWinHtut

simpletron_v3.c

Dec 15th, 2022
1,109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.51 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdlib.h>
  4. #include <conio.h>
  5. #include <string.h>
  6. #define READ 10
  7. #define WRITE 11
  8. #define LOAD 20
  9. #define STORE 21
  10. #define ADD 30
  11. #define SUBTRACT 31
  12. #define DIVIDE 32
  13. #define MULTIPLY 33
  14. #define BRANCH 40
  15. #define BRANCHNEG 41
  16. #define BRANCHZERO 42
  17. #define HALT 43
  18.  
  19. int main(const int argc, const char *argv[]) // char **argv; char argv[][]
  20. {
  21.     int memory[100] = {0};
  22.     int accumulator = 0;
  23.     int instruction_counter = 0; // boot address - 0000
  24.     int instruction_register = 0;
  25.     int operation_code = 0;
  26.     int operand = 0;
  27.  
  28.     system("cls");
  29.     printf("%d\n", argc);
  30.     for (int i = 0; i < argc; i++)
  31.     {
  32.         printf("Command Line argument %d is %s\n\n", i + 1, argv[i]);
  33.     }
  34.     // argv[0] exe filename
  35.     // argbv[1] machine code or assembly file name
  36.     // argv[2] -m - machine code file /a -assembly file
  37.     // argv[3] -d - debug mode
  38.     // simpletronv3.exe filename [/mode]
  39.  
  40.     /*
  41.  
  42.     FILE* fp;
  43.     fopen_s(&fp,"d:\\test.txt", "w");
  44.     if (fp != NULL)
  45.     {
  46.         fprintf_s(fp, "%d\n", 1050);
  47.         fprintf_s(fp, "%d\n", 2050);
  48.         fprintf_s(fp, "%d\n", 1051);
  49.         fprintf_s(fp, "%d\n", 3051);
  50.         fprintf_s(fp, "%d\n", 2152);
  51.         fprintf_s(fp, "%d\n", 1152);
  52.         fprintf_s(fp, "%d\n", 4300);
  53.         fclose(fp);
  54.     }
  55.     */
  56.  
  57.     int index = 0;
  58.     FILE *fin;
  59.     fopen_s(&fin, argv[1], "r");
  60.     printf("EOF = %d\n\n", EOF);
  61.     if (fin != NULL)
  62.     {
  63.         while (fscanf(fin, "%d", &memory[index++]) > 0)
  64.         {
  65.         }
  66.  
  67.         fclose(fin);
  68.     }
  69.     else
  70.     {
  71.         printf("no such file exists!\n\n");
  72.         return (1);
  73.     }
  74.  
  75.     // LOAD PROGRAM INTO MEMORY
  76.     // memory[0] = 1050;
  77.     // memory[1] = 2050;
  78.     // memory[2] = 1051;
  79.     // memory[3] = 3051;
  80.     // memory[4] = 2152;
  81.     // memory[5] = 1152;
  82.     // memory[6] = 4300;
  83.  
  84.     while (1)
  85.     {
  86.  
  87.         instruction_register = memory[instruction_counter++];
  88.         operation_code = instruction_register / 100;
  89.         operand = instruction_register % 100;
  90.  
  91.         if (argv[3] != NULL && (!strncmp(argv[3], "-d", 2)))
  92.         {
  93.             printf("\n\tDebug Mode Stepping -> press any key to continue...\n");
  94.             printf("\tInstructions in Memory\t\tData in Memory\n");
  95.             printf("\tadd\t|\tinst\t\tadd\t|\tdata\n");
  96.             for (int i = 0; i < 15; i++)
  97.             {
  98.                 printf("\t%d\t|\t%d\t\t%d\t|\t%d\n", i, memory[i], i + 50, memory[i + 50]);
  99.             }
  100.             printf("\n\tSpecial Registers\n");
  101.             printf("\t*******************\n");
  102.             printf("\tAccumulator         : %d \n", accumulator);
  103.             printf("\tInstruction Counter : %d \n", instruction_counter);
  104.             printf("\tInstruction Register: %d \n", instruction_register);
  105.             printf("\tOperation Code      : %d \n", operation_code);
  106.             printf("\tOperand             : %d \n", operand);
  107.             if (operation_code != READ)
  108.             {
  109.                 printf("\npress any key to continue...\n");
  110.                 getch();
  111.             }
  112.         }
  113.  
  114.         switch (operation_code)
  115.         {
  116.         case 10:
  117.             printf("\nPlease Enter Data: ");
  118.             scanf("%d", &memory[operand]);
  119.             break;
  120.         case 11:
  121.             printf("%d\n", memory[operand]);
  122.             break;
  123.         case 20:
  124.             accumulator = memory[operand];
  125.             break;
  126.         case 21:
  127.             memory[operand] = accumulator;
  128.             break;
  129.         case 30:
  130.             accumulator += memory[operand];
  131.             break;
  132.         case 31:
  133.             accumulator -= memory[operand];
  134.             break;
  135.         case 32:
  136.             accumulator /= memory[operand];
  137.             break;
  138.         case 33:
  139.             accumulator *= memory[operand];
  140.             break;
  141.         case 40:
  142.             instruction_counter = operand;
  143.             break;
  144.         case 41:
  145.             if (accumulator < 0)
  146.             {
  147.                 instruction_counter = operand;
  148.             }
  149.             break;
  150.         case 42:
  151.             if (accumulator == 0)
  152.             {
  153.                 instruction_counter = operand;
  154.             }
  155.             break;
  156.         case 43:
  157.             printf("\nProgram is terminated!\n");
  158.             exit(0);
  159.             break;
  160.         default:
  161.             printf("Err! No such instruction!!!! . Program is terminated!\n");
  162.             exit(0);
  163.             break;
  164.         }
  165.     }
  166.  
  167.     return 0;
  168. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement