mirror of
https://github.com/jscrane/r65emu.git
synced 2025-02-15 22:30:47 +00:00
NO_CHECKPOINT flag
This commit is contained in:
parent
76eb94202c
commit
a275deb6ab
@ -104,6 +104,7 @@ const char *flash_filer::rewind() {
|
||||
return advance();
|
||||
}
|
||||
|
||||
#if !defined(NO_CHECKPOINT)
|
||||
static char buf[32];
|
||||
static char chkpt[] = { "CHKPOINT" };
|
||||
static int cpid = 0;
|
||||
@ -146,3 +147,4 @@ void flash_filer::restore(const char *filename) {
|
||||
#endif
|
||||
start(::programs);
|
||||
}
|
||||
#endif
|
||||
|
@ -79,6 +79,7 @@ void hardware_init(CPU &cpu) {
|
||||
#endif
|
||||
}
|
||||
|
||||
#if !defined(NO_CHECKPOINT)
|
||||
void hardware_checkpoint(Stream &s) {
|
||||
unsigned ds = 0;
|
||||
for (unsigned i = 0; i < 0x10000; i += ds) {
|
||||
@ -98,3 +99,4 @@ void hardware_restore(Stream &s) {
|
||||
}
|
||||
_cpu->restore(s);
|
||||
}
|
||||
#endif
|
||||
|
@ -47,6 +47,7 @@ char *i8080::status(char *buf, size_t n, bool hdr) {
|
||||
}
|
||||
|
||||
void i8080::checkpoint(Stream &s) {
|
||||
#if !defined(NO_CHECKPOINT)
|
||||
s.write(A);
|
||||
s.write(SR);
|
||||
s.write(BC);
|
||||
@ -55,9 +56,11 @@ void i8080::checkpoint(Stream &s) {
|
||||
s.write(PC);
|
||||
s.write(SP);
|
||||
s.write(_irq_pending);
|
||||
#endif
|
||||
}
|
||||
|
||||
void i8080::restore(Stream &s) {
|
||||
#if !defined(NO_CHECKPOINT)
|
||||
A = s.read();
|
||||
SR = s.read();
|
||||
BC = s.read();
|
||||
@ -66,6 +69,7 @@ void i8080::restore(Stream &s) {
|
||||
PC = s.read();
|
||||
SP = s.read();
|
||||
_irq_pending = s.read();
|
||||
#endif
|
||||
}
|
||||
|
||||
void i8080::daa() {
|
||||
|
@ -38,6 +38,7 @@ char *r6502::status(char *buf, size_t n, bool hdr) {
|
||||
|
||||
void r6502::checkpoint(Stream &s)
|
||||
{
|
||||
#if !defined(NO_CHECKPOINT)
|
||||
s.write(PC / 0xff);
|
||||
s.write(PC % 0xff);
|
||||
s.write(S);
|
||||
@ -52,10 +53,12 @@ void r6502::checkpoint(Stream &s)
|
||||
s.write(Z);
|
||||
s.write(C);
|
||||
s.write(P.flags);
|
||||
#endif
|
||||
}
|
||||
|
||||
void r6502::restore(Stream &s)
|
||||
{
|
||||
#if !defined(NO_CHECKPOINT)
|
||||
uint8_t hi = s.read(), lo = s.read();
|
||||
PC = hi * 0xff + lo;
|
||||
S = s.read();
|
||||
@ -70,6 +73,7 @@ void r6502::restore(Stream &s)
|
||||
Z = s.read();
|
||||
C = s.read();
|
||||
P.flags = s.read();
|
||||
#endif
|
||||
}
|
||||
|
||||
void r6502::raise(int level) {
|
||||
|
2
ram.h
2
ram.h
@ -6,8 +6,10 @@ public:
|
||||
virtual void operator= (uint8_t c) { _mem[_acc] = c; }
|
||||
virtual operator uint8_t () { return _mem[_acc]; }
|
||||
|
||||
#if !defined NO_CHECKPOINT
|
||||
virtual void checkpoint(Stream &s) { s.write(_mem, sizeof(_mem)); }
|
||||
virtual void restore(Stream &s) { s.readBytes((char *)_mem, sizeof(_mem)); }
|
||||
#endif
|
||||
|
||||
ram (): Memory::Device(sizeof(_mem)) {}
|
||||
|
||||
|
@ -35,6 +35,7 @@ bool serial_filer::more() {
|
||||
return Serial.available() > 0;
|
||||
}
|
||||
|
||||
#if !defined(NO_CHECKPOINT)
|
||||
const char *serial_filer::checkpoint() {
|
||||
// FIXME
|
||||
return 0;
|
||||
@ -43,3 +44,4 @@ const char *serial_filer::checkpoint() {
|
||||
void serial_filer::restore(const char *) {
|
||||
// FIXME
|
||||
}
|
||||
#endif
|
||||
|
@ -22,20 +22,24 @@ spiram::operator uint8_t()
|
||||
|
||||
void spiram::checkpoint(Stream &s)
|
||||
{
|
||||
#if !defined(NO_CHECKPOINT)
|
||||
uint8_t buf[Memory::page_size];
|
||||
for (unsigned i = 0; i < pages(); i++) {
|
||||
spiRam.read_stream(i * 256, buf, sizeof(buf));
|
||||
s.write(buf, sizeof(buf));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void spiram::restore(Stream &s)
|
||||
{
|
||||
#if !defined(NO_CHECKPOINT)
|
||||
uint8_t buf[Memory::page_size];
|
||||
for (unsigned i = 0; i < pages(); i++) {
|
||||
s.readBytes((char *)buf, sizeof(buf));
|
||||
spiRam.write_stream(i * 256, buf, sizeof(buf));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
||||
|
4
z80.cpp
4
z80.cpp
@ -20,6 +20,7 @@ char *z80::status(char *buf, size_t n, bool hdr) {
|
||||
}
|
||||
|
||||
void z80::checkpoint(Stream &s) {
|
||||
#if !defined(NO_CHECKPOINT)
|
||||
s.write(AF);
|
||||
s.write(BC);
|
||||
s.write(DE);
|
||||
@ -39,9 +40,11 @@ void z80::checkpoint(Stream &s) {
|
||||
s.write(_ts);
|
||||
s.write(_halted);
|
||||
s.write(_irq_pending);
|
||||
#endif
|
||||
}
|
||||
|
||||
void z80::restore(Stream &s) {
|
||||
#if !defined(NO_CHECKPOINT)
|
||||
AF = s.read();
|
||||
BC = s.read();
|
||||
DE = s.read();
|
||||
@ -61,6 +64,7 @@ void z80::restore(Stream &s) {
|
||||
_ts = s.read();
|
||||
_halted = s.read();
|
||||
_irq_pending = s.read();
|
||||
#endif
|
||||
}
|
||||
|
||||
uint8_t z80::_fetch_op() {
|
||||
|
Loading…
x
Reference in New Issue
Block a user