2016-08-10 03:39:52 +00:00
|
|
|
#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
|