Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * To change this license header, choose License Headers in Project Properties.
- * To change this template file, choose Tools | Templates
- * and open the template in the editor.
- */
- /*
- * File: main.c
- * Author: saheel
- *
- * Created on 28 May 2016, 12:18 PM
- */
- /*
- *
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define TO_HEX(i) (i <= 9 ? '0' + i : 'A' - 10 + i)
- char * toHex(int val);
- void print_format(int * registers[]);
- char * toHex(int val);
- void print_format(int *registers[]);
- short *buffer;
- unsigned long fileLength;
- int regs[11];
- int rego;
- int opcode;
- int pc = 1;
- unsigned short offset;
- int main(int argc, char**argv) {
- printf("Initial state\n");
- print_format(regs);
- printf("==================\n");
- FILE*f;
- f = fopen(argv[1], "r");
- fseek(f, 0, SEEK_END);
- fileLength = ftell(f);
- fseek(f, 0, SEEK_SET);
- buffer = malloc(fileLength + 1);
- fread(buffer, 1,fileLength, f);
- fclose(f);
- int i = 0;
- int store;
- int halfsize= fileLength/2;
- int function[halfsize];
- int instruction[halfsize];
- int offset[halfsize];
- int regs[11];
- int rego;
- int r0=0;
- int r1=0;
- int r2=0;
- int r3=0;
- int r4=0;
- int r5=0;
- int r6=0;
- int r7=0;
- int x=0;
- int y=0;
- int dr[halfsize];
- for (i = 1; i <halfsize ; i++) {
- instruction[i]= (buffer[x]*0x100) +buffer[y];
- x=x+2;
- y=y+2;}
- pc=instruction[0];
- print_format(regs);
- int j;
- for(j=0; j<halfsize+1; j++)
- {
- offset[0]=instruction[j]& 0x01ff;
- dr[0] = instruction[j] &0xE00 >> 9;
- function[0]= instruction[j] & 0xf000 >>12;
- if (opcode != 15) {
- if (opcode == 2) {
- pc=pc+1;
- store= instruction[j+1+offset[0]];
- if (dr[0]==0){r0= store;}
- if (dr[0]==1){r1= store;}
- if (dr[0]==2){r2= store;}
- if (dr[0]==3){r3= store;}
- if (dr[0]==4){r4= store;}
- if (dr[0]==5){r5= store;}
- if (dr[0]==6){r6= store;}
- if (dr[0]==7){r7= store;}
- printf("after executing instruction\n");
- printf("R0\t0x%04x\n", r0);
- }
- }
- }
- // opcode = (buffer[i] & 0xf000) >> 12;
- // if (opcode != 15) {
- //
- // if (opcode == 14 ) {
- // regs[8] = regs[8] + 1;
- // rego = (buffer[i] & 0x0e00) >> 9;
- // offset = buffer[i] & 0x01ff ;
- // printf("offset\%d\n", rego);
- // //printf("offset\%d\n", pc);
- // regs[rego] = offset + regs[8] ;
- // regs[9] = buffer[i];
- // }
- // if (opcode == 2) {
- // regs[8] = regs[8] + 1;
- // rego = (buffer[i] & 0x0e00) >> 9;
- //
- // offset = buffer[i] & 0x01ff;
- // //printf("offset\%d\n", offset);
- // regs[rego] = buffer[pc +offset];
- // printf("offset\%x\n", buffer);
- // printf("offset\%d\n", offset);
- // //regs[9] = buffer[i];
- // }
- // }
- // }
- printf("==================\n");
- return 0;
- }
- char * toHex(int val) {
- int x = val;
- char *res = (char *) malloc(sizeof (char) * 5);
- if (x <= 0xFFFF) {
- res[0] = TO_HEX(((x & 0xF000) >> 12));
- res[1] = TO_HEX(((x & 0x0F00) >> 8));
- res[2] = TO_HEX(((x & 0x00F0) >> 4));
- res[3] = TO_HEX((x & 0x000F));
- res[4] = '\0';
- }
- return res;
- }
- void print_format(int * registers[]) {
- int i = 0;
- for (i; i < 11; i++) {
- if (i == 8)
- {printf("PC\t0x%s\n", toHex(registers[8]));}
- else if (i == 9)
- { printf("IR\t0x%s\n", toHex(registers[9]));}
- else if (i == 10)
- //{printf("CC\t%s\n", "P");}
- { //counter(registers[10]);}
- if (registers[9]==0x0000)
- { printf("CC\t%s\n", "Z");}
- if (registers[9] <0)
- {printf("CC\t%s\n", "N");}
- if (registers[9] >0)
- {printf("CC\t%s\n", "P");}
- }
- else {
- printf("R%d\t0x%s\n", i, toHex(registers[i]));
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement