====== CPUMEM ======
class library is included before the main function like this:\\
#include "cpumem.h"
\\
CPUMEM::CPUMEM() is the constructor and automatically creates memory of the correct size, 64k (65536 elements, 0-65535), and type 1 byte (8-bits) for the 8085. The constructor is called automatically as the object is being instantiated.\\
An object of the type CPUMEM is instatiated like this:\\
\\
//Instantiates an object of type CPUMEM
CPUMEM cpumemory;
\\
CPUMEM::~CPUMEM() is the destructor and automatically deallocates the memory which was created when an object of type CPUMEM when an object of this type goes out of scope.\\
\\
unsigned char& CPUMEM::operator[](unsigned short int address) is a depricated member function. It uses overloaded operators to make the code that calls this method look like an array. **Do NOT use it.**\\
\\
unsigned char CPUMEM::read(unsigned short int address) is the member function that is used to read the 8-bit (unsigned char) value at a specific address.\\
The **read** member function is used like this:\\
//reads 8-bit data from last memory address, 0xffff, or 65535
unsigned char value = cpumemory.read(0xffff);
\\
void CPUMEM::write(unsigned short int address, unsigned char value) is the member function that is used to write an 8-bit value to a specific address.\\
The **write** member function is used like this:\\
//writes the value 0xff, or 255, to the last memory address 0xffff, or 65535
cpumemory.write(0xffff, 0xff);
\\
**cpumem.h**\\
#ifndef _CPUMEM_H
#define _CPUMEM_H
class CPUMEM
{
public:
CPUMEM();
unsigned char& operator[](unsigned short int address);
unsigned char read(unsigned short int address);
void write(unsigned short int address, unsigned char value);
~CPUMEM();
private:
//unsigned short int memlngth;
unsigned char *memadd;
};
#endif
\\
**cpumem.cc**\\
#include "cpumem.h"
CPUMEM::CPUMEM()
{
memadd = new unsigned char[65536];
}
CPUMEM::~CPUMEM()
{
delete[] memadd;
}
unsigned char& CPUMEM::operator[](unsigned short int address)
{
return memadd[address];
}
unsigned char CPUMEM::read(unsigned short int address)
{
return *(memadd + address);
}
void CPUMEM::write(unsigned short int address, unsigned char value)
{
*(memadd + address) = value;
}
\\
**memtest.cc**\\
#include
#include "cpumem.h"
const int MEM_MAX = 65535;
int main()
{
CPUMEM datamemory;
for (int temp = 0x00; temp <= MEM_MAX; temp++) datamemory.write(temp, 255);
for(int temp = 0x00; temp <= MEM_MAX; temp++) printf("Memory address %x contains the value %x\n", temp, datamemory.read(temp));
return(0);
}
\\
**Makefile**\\
CXX = g++ $(CXXFLAGS) $(INC) $(LIBS)
AR = ar
CXXFLAGS = -Wall
INC = -I ../../include/
LIBS =
SRC = cpumem.cc memtest.cc
OBJ = $(SRC:.cc=.o)
BIN = memtest
all: $(SRC) $(BIN)
debug: CXX += -DDEBUG -g
debug: DEBUG = debug
debug: $(SRC) $(BIN)
$(BIN): $(OBJ)
ifneq ($(MAKECMDGOALS),debug)
@printf "[CC] %-20s ... " "$(BIN)"
@$(CXX) -o $(BIN) $(OBJ) && echo "SUCCESS" || echo "FAIL"
else
$(CXX) -o $(BIN) $(OBJ)
endif
.cc.o:
ifneq ($(MAKECMDGOALS),debug)
@printf "[B] %-20s ... " "$<"
@$(CXX) -c $< && echo "OK" || echo "FAIL"
else
$(CXX) -c $<
endif
clean:
rm -f *.o $(BIN) core
default: $(BIN)