vm6502/Memory.h

75 lines
1.8 KiB
C++

#ifndef MEMORY_H
#define MEMORY_H
#include "system.h"
#include "MemMapDev.h"
#define MAX_8BIT_ADDR 0xFFFF
#define ROM_BEGIN 0xD000
#define ROM_END 0xDFFF
#define MIN_ROM_BEGIN 0x0200
using namespace std;
namespace MKBasic {
class Memory
{
public:
Memory();
~Memory();
void Initialize();
unsigned char Peek8bit(unsigned short addr);
unsigned char Peek8bitImg(unsigned short addr);
unsigned short Peek16bit(unsigned short addr);
void Poke8bit(unsigned short addr, unsigned char val); // write to memory and call memory mapped device handle
void Poke8bitImg(unsigned short addr, unsigned char val); // write to memory image only
void SetCharIO(unsigned short addr, bool echo);
void DisableCharIO();
unsigned short GetCharIOAddr();
char GetCharIn();
char GetCharOut();
void EnableROM();
void DisableROM();
void SetROM(unsigned short start, unsigned short end);
void EnableROM(unsigned short start, unsigned short end);
unsigned short GetROMBegin();
unsigned short GetROMEnd();
bool IsROMEnabled();
int AddDevice(int devnum);
int DeleteDevice(int devnum);
void SetupDevice(int devnum, MemAddrRanges memranges, DevParams params);
void SetGraphDisp(unsigned short addr);
void DisableGraphDisp();
unsigned short GetGraphDispAddr();
void GraphDisp_ReadEvents();
void GraphDisp_Update();
bool GraphDispOp();
protected:
private:
unsigned char m8bitMem[MAX_8BIT_ADDR+1];
unsigned short mCharIOAddr;
bool mCharIOActive;
bool mIOEcho;
unsigned short mROMBegin;
unsigned short mROMEnd;
bool mROMActive;
vector<int> mActiveDevNumVec; // active devices numbers
MemMapDev *mpMemMapDev; // pointer to MemMapDev object
bool mGraphDispActive;
bool mDispOp;
unsigned char ReadCharKb(bool nonblock);
void PutCharIO(char c);
};
} // namespace MKBasic
#endif