1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

Need help asap pls :) emulator

Discussion in 'C' started by acer5542, Aug 29, 2010.

  1. acer5542

    acer5542 New Member

    Joined:
    Aug 29, 2010
    Messages:
    1
    Likes Received:
    0
    Trophy Points:
    0
    Hey guys,

    I have to write a c code for an emulator of a very simple CPU.

    The CPU uses 16 bits for all addresses and data and has three registers, I, A and PC. The instruction cycle is as follows:

    1. Fetch the operand for the current instruction (an address) from memory using the address stored in PC and put it into the I register.
    2. Add one to PC.
    3. Subtract A from the contents of the memory at address I and put the result in A.
    4. If this operation caused a borrow then add one to PC
    5. Store A in the memory at address I
    6. Repeat from 1. until I contains the value 1999

    There are three special memory locations, 65533, 65534 and 65535.
    A read from location 65535 returns the value of PC, a write sets PC to the value written.
    A read from location 65534 returns a character from the keyboard (using getchar), a write does nothing.
    If the ASCII value of the character is less than 32, 0 should be returned.
    A write to location 65533 prints a char on the screen (using putchar), a read returns 0. (the NUL character should not be printed)


    Just needing your help on this code to complete.

    Code:
     #include <iostream.h>
    
    unsigned int m[2000]; // the memory (2000 x 32 bit words)
    int pc=0;             // the program counter 
    
    void emulate(void) {
      // execute the program 
    }
    
    int main() {
      FILE *fin;
      int i = 0;   // program starts at location 0
    
      fin = fopen("oic.out", "r"); 
      if (!fin) { 
        puts( "Can not open oic.out file" );
        return 1;
      }
      while (!feof (fin)) {
        fscanf(fin, " %d", &m[i++]); // read the program into memory
      }
      emulate();
      puts ("\n\nProgram Terminated");
      return 0;
    }
     

Share This Page