Advertisement
Guest User

Untitled

a guest
May 28th, 2016
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.36 KB | None | 0 0
  1. /*
  2. * To change this license header, choose License Headers in Project Properties.
  3. * To change this template file, choose Tools | Templates
  4. * and open the template in the editor.
  5. */
  6.  
  7. /*
  8. * File: main.c
  9. * Author: saheel
  10. *
  11. * Created on 28 May 2016, 12:18 PM
  12. */
  13.  
  14.  
  15.  
  16. /*
  17. *
  18. */
  19. #include <stdio.h>
  20. #include <stdlib.h>
  21. #include <string.h>
  22. #define TO_HEX(i) (i <= 9 ? '0' + i : 'A' - 10 + i)
  23. char * toHex(int val);
  24. void print_format(int * registers[]);
  25. char * toHex(int val);
  26. void print_format(int *registers[]);
  27. short *buffer;
  28. unsigned long fileLength;
  29. int regs[11];
  30. int rego;
  31. int opcode;
  32. int pc = 1;
  33. unsigned short offset;
  34.  
  35. int main(int argc, char**argv) {
  36. printf("Initial state\n");
  37. print_format(regs);
  38. printf("==================\n");
  39. FILE*f;
  40. f = fopen(argv[1], "r");
  41. fseek(f, 0, SEEK_END);
  42. fileLength = ftell(f);
  43. fseek(f, 0, SEEK_SET);
  44. buffer = malloc(fileLength + 1);
  45. fread(buffer, 1,fileLength, f);
  46. fclose(f);
  47. int i = 0;
  48. int store;
  49. int halfsize= fileLength/2;
  50. int function[halfsize];
  51. int instruction[halfsize];
  52. int offset[halfsize];
  53. int regs[11];
  54. int rego;
  55.  
  56.  
  57. int r0=0;
  58. int r1=0;
  59. int r2=0;
  60. int r3=0;
  61. int r4=0;
  62. int r5=0;
  63. int r6=0;
  64. int r7=0;
  65.  
  66. int x=0;
  67. int y=0;
  68. int dr[halfsize];
  69.  
  70. for (i = 1; i <halfsize ; i++) {
  71. instruction[i]= (buffer[x]*0x100) +buffer[y];
  72. x=x+2;
  73. y=y+2;}
  74. pc=instruction[0];
  75. print_format(regs);
  76.  
  77. int j;
  78. for(j=0; j<halfsize+1; j++)
  79. {
  80. offset[0]=instruction[j]& 0x01ff;
  81. dr[0] = instruction[j] &0xE00 >> 9;
  82.  
  83. function[0]= instruction[j] & 0xf000 >>12;
  84.  
  85. if (opcode != 15) {
  86. if (opcode == 2) {
  87. pc=pc+1;
  88. store= instruction[j+1+offset[0]];
  89. if (dr[0]==0){r0= store;}
  90. if (dr[0]==1){r1= store;}
  91. if (dr[0]==2){r2= store;}
  92. if (dr[0]==3){r3= store;}
  93. if (dr[0]==4){r4= store;}
  94. if (dr[0]==5){r5= store;}
  95. if (dr[0]==6){r6= store;}
  96. if (dr[0]==7){r7= store;}
  97. printf("after executing instruction\n");
  98. printf("R0\t0x%04x\n", r0);
  99. }
  100.  
  101.  
  102. }
  103. }
  104.  
  105.  
  106. // opcode = (buffer[i] & 0xf000) >> 12;
  107. // if (opcode != 15) {
  108. //
  109. // if (opcode == 14 ) {
  110. // regs[8] = regs[8] + 1;
  111. // rego = (buffer[i] & 0x0e00) >> 9;
  112. // offset = buffer[i] & 0x01ff ;
  113. // printf("offset\%d\n", rego);
  114. // //printf("offset\%d\n", pc);
  115. // regs[rego] = offset + regs[8] ;
  116. // regs[9] = buffer[i];
  117. // }
  118. // if (opcode == 2) {
  119. // regs[8] = regs[8] + 1;
  120. // rego = (buffer[i] & 0x0e00) >> 9;
  121. //
  122. // offset = buffer[i] & 0x01ff;
  123. // //printf("offset\%d\n", offset);
  124. // regs[rego] = buffer[pc +offset];
  125. // printf("offset\%x\n", buffer);
  126. // printf("offset\%d\n", offset);
  127. // //regs[9] = buffer[i];
  128. // }
  129. // }
  130. // }
  131.  
  132. printf("==================\n");
  133. return 0;
  134. }
  135.  
  136. char * toHex(int val) {
  137. int x = val;
  138. char *res = (char *) malloc(sizeof (char) * 5);
  139. if (x <= 0xFFFF) {
  140. res[0] = TO_HEX(((x & 0xF000) >> 12));
  141. res[1] = TO_HEX(((x & 0x0F00) >> 8));
  142. res[2] = TO_HEX(((x & 0x00F0) >> 4));
  143. res[3] = TO_HEX((x & 0x000F));
  144. res[4] = '\0';
  145. }
  146. return res;
  147. }
  148.  
  149. void print_format(int * registers[]) {
  150. int i = 0;
  151. for (i; i < 11; i++) {
  152. if (i == 8)
  153. {printf("PC\t0x%s\n", toHex(registers[8]));}
  154. else if (i == 9)
  155. { printf("IR\t0x%s\n", toHex(registers[9]));}
  156. else if (i == 10)
  157. //{printf("CC\t%s\n", "P");}
  158. { //counter(registers[10]);}
  159. if (registers[9]==0x0000)
  160. { printf("CC\t%s\n", "Z");}
  161. if (registers[9] <0)
  162. {printf("CC\t%s\n", "N");}
  163. if (registers[9] >0)
  164. {printf("CC\t%s\n", "P");}
  165. }
  166. else {
  167. printf("R%d\t0x%s\n", i, toHex(registers[i]));
  168.  
  169. }
  170. }
  171. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement