diff --git a/keyboard.h b/keyboard.h new file mode 100644 index 0000000..f70c0a1 --- /dev/null +++ b/keyboard.h @@ -0,0 +1,11 @@ +#ifndef _KEYBOARD_H +#define _KEYBOARD_H + +class Keyboard { +public: + virtual void up(byte) = 0; + virtual void down(byte) = 0; + virtual void reset() = 0; +}; + +#endif diff --git a/memory.h b/memory.h index 9944fe8..1b87d91 100644 --- a/memory.h +++ b/memory.h @@ -6,6 +6,14 @@ typedef unsigned char byte; +class Stream; + +class Checkpointable { +public: + virtual void checkpoint(Stream &s) = 0; + virtual void restore(Stream &s) = 0; +}; + class Memory { public: typedef unsigned short address; diff --git a/r65emu.h b/r65emu.h index 26dd1cc..47b7166 100644 --- a/r65emu.h +++ b/r65emu.h @@ -9,6 +9,7 @@ #include "prom.h" #include "ps2drv.h" #include "utftdisplay.h" +#include "keyboard.h" #include "hardware.h" #endif diff --git a/ram.h b/ram.h index 5ebd418..2c18d18 100644 --- a/ram.h +++ b/ram.h @@ -1,17 +1,17 @@ #ifndef _RAM_H #define _RAM_H -class ram: public Memory::Device { +class ram: public Memory::Device, public Checkpointable { public: - virtual void operator= (byte c) { _mem[_acc] = c; } - virtual operator byte () { return _mem[_acc]; } + virtual void operator= (byte c) { _mem[_acc] = c; } + virtual operator byte () { return _mem[_acc]; } - void checkpoint(Stream &s) { s.write(_mem, sizeof(_mem)); } - void restore(Stream &s) { s.readBytes((char *)_mem, sizeof(_mem)); } + virtual void checkpoint(Stream &s) { s.write(_mem, sizeof(_mem)); } + virtual void restore(Stream &s) { s.readBytes((char *)_mem, sizeof(_mem)); } - ram (): Memory::Device(sizeof(_mem)) {} + ram (): Memory::Device(sizeof(_mem)) {} private: - byte _mem[1024]; + byte _mem[1024]; }; #endif diff --git a/spiram.h b/spiram.h index a98683d..82783ab 100644 --- a/spiram.h +++ b/spiram.h @@ -1,16 +1,16 @@ #ifndef __SPIRAM_H__ #define __SPIRAM_H__ -class spiram: public Memory::Device { +class spiram: public Memory::Device, public Checkpointable { public: - virtual void operator= (byte c); - virtual operator byte (); + virtual void operator= (byte c); + virtual operator byte (); - void checkpoint(Stream &s); - void restore(Stream &s); + virtual void checkpoint(Stream &s); + virtual void restore(Stream &s); - spiram(int bytes): Memory::Device(bytes) {} - void begin(byte cs, int module); + spiram(int bytes): Memory::Device(bytes) {} + void begin(byte cs, int module); }; #endif diff --git a/utftdisplay.h b/utftdisplay.h index cfb81ee..9b164a3 100644 --- a/utftdisplay.h +++ b/utftdisplay.h @@ -3,13 +3,16 @@ class Stream; -class UTFTDisplay: public Memory::Device { +class UTFTDisplay: public Memory::Device, public Checkpointable { public: void begin(unsigned bg, unsigned fg); void clear(); void error(char *); void status(const char *); + virtual void checkpoint(Stream &s) = 0; + virtual void restore(Stream &s) = 0; + protected: UTFTDisplay(unsigned size): Memory::Device(size) {}