Simple simulation of a microprocessor system (HELP!)

Posted on 2003-11-25
Last Modified: 2010-04-01
How much sense does this make to anyone, i have been learning c++ for 8 weeks now and i been given two weeks to complete the fist part of my assignment which is below. The teacher is of no use and cant seem to explain anything, where would a good place to start be, i have been trying to use seperate header files for the different parts. Just seem to be getting more and more confused by it all, i certainly dont want the complete answer but some code to start me off would be great, so i can build on it.

Develop a series of classes that can be used together to provide a simple simulation of a microprocessor system comprising as a minimum a CPU, with its internal registers, and operations to fetch and execute instructions and Flash ROM which holds the program instructions.
The CPU should have four internal registers and the following instruction types:

Instruction                   Description
MOVE Rx,Ry                  move contents of Rx to Ry
MOVE data_value, Rx      move data value into  Rx
ADD Rx, Ry                  add Rx to Ry and store it in Ry
SUB Rx, Ry                                  subtract Rx from Ry and store it in Ry
OUTPUT Rx                                                output contents of Rx to display
HALT                        End of instructions
 where Rx and Ry represent  the registers R0 - R3

All instructions are encoded as a three single digit numbers d1d2d3 :-
The first digit is the op-code, the next two digits are operands for the instruction. If the instruction only requires a single register then it is the last digit. If any operands are not required then the digit value is zero.

The op-codes for the different instruction types are:-

Op-code       Instruction type
1            MOVE register to register
2            MOVE data to a register
3            ADD
4            SUB
5            OUTPUT
6            HALT

Examples of possible instruction codes and the equivalent instruction

Instruction code            Instruction
112                         MOVE R1, R2            
251                         MOVE 5, R1
301                         ADD R0, R1
430                        SUB R3, R0
502                         OUT R2
600                        HALT

1.      The FlashROM class should have the following functions/methods.

•      void program(int  p[]) - function receives an array (or could be done using a  pointer to an array) of values terminating
                with the HALT instruction. The purpose of this function is to read in the complete program and store it in the FlashROM
•       void erase() - erase all Flash ROM contents.
•      int read(int location) - return contents of the given location.

Write a short main function to test this class.

Question by:a_migdal
  • 2
LVL 11

Accepted Solution

bcladd earned 500 total points
ID: 9818473
How much do you know about classes? Can you write a class? The reason I ask is this calls out for several classes:

class CPU - This will contain the registers
class FlashROM - contains the memory locations
class Computer - contains a CPU and a FlashROM

The CPU should have the four registers (sounds like an array to me) as well as an instruction pointer and an instruction register (adding a couple of bookkeeping registers to the 4; I would not put the ip or instruction register in the array). Then execution of a program is "simple":

while (1) { // forever
   ir =;
   // decode ir
   // execute ir

That is an infinite loop but executing HALT will break out of it.

So, where to get started:

Since you have been given the interface for the FlashROM I would design that class. Where will you store the contents of the ROM? What data members will the FlashROM need? You'll of course need to be able to create and destroy FlashROMs. I would suggest writing a routine that will print the contents of the FlashROM on the screen. That way you can test the FlashROM without writing a CPU at all. Just have a main that looks something like this:

int main() {
    FlashROM testMemory;
    int testProgram = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 600 };


should show the contents of the FlashROM are what you would expect. Notice that those may not be legal opcodes. No problem because FlashROM should not care about opcodes.

Hope this gives you somewhere to start. If you have questions (or you are not expected to use classes), then ask away.

LVL 11

Expert Comment

ID: 9824313
I have been thinking about this (I wrote a very similar simulator back in my undergraduate days and have assigned this sort of thing before). I think writing a FlashROM class based on some simple container is your best way to start. Each memory location has to contain an int so you should have a container that holds ints at the heart of the class.  

If you need any C++ concepts explained (you complained about the instructor; my condolences), ask about them.

LVL 49

Expert Comment

ID: 9865039
I guess you have missed your deadline.  Would you like to close this question or do you need some more help?
-- DanRollins, EE Page Editor

Expert Comment

ID: 10285831
No comment has been added lately, so it's time to clean up this TA.
I will leave the following recommendation for this question in the Cleanup topic area:

Accept: bcladd {http:#9818473}

Please leave any comments here within the next seven days.

EE Cleanup Volunteer

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
C++ - Convert a wString to char * 9 518
Template syntax for variable length arrays 9 71
Problem with SqlConnection 4 162
How can i compile this github project?? 2 77
Errors will happen. It is a fact of life for the programmer. How and when errors are detected have a great impact on quality and cost of a product. It is better to detect errors at compile time, when possible and practical. Errors that make their wa…
Go is an acronym of golang, is a programming language developed Google in 2007. Go is a new language that is mostly in the C family, with significant input from Pascal/Modula/Oberon family. Hence Go arisen as low-level language with fast compilation…
The viewer will learn how to use the return statement in functions in C++. The video will also teach the user how to pass data to a function and have the function return data back for further processing.
The viewer will learn how to clear a vector as well as how to detect empty vectors in C++.

863 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

18 Experts available now in Live!

Get 1:1 Help Now