From a275deb6abe868a7ee1051b64e9a324c2bf1ec4d Mon Sep 17 00:00:00 2001 From: Stephen Crane Date: Sun, 24 Feb 2019 11:50:10 +0000 Subject: [PATCH] NO_CHECKPOINT flag --- filer.cpp | 2 ++ hardware.cpp | 2 ++ i8080.cpp | 4 ++++ r6502.cpp | 4 ++++ ram.h | 2 ++ serial_filer.cpp | 2 ++ spiram.cpp | 4 ++++ z80.cpp | 4 ++++ 8 files changed, 24 insertions(+) diff --git a/filer.cpp b/filer.cpp index 18716e8..80a7f75 100644 --- a/filer.cpp +++ b/filer.cpp @@ -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 diff --git a/hardware.cpp b/hardware.cpp index 56b2e06..ffdb10f 100644 --- a/hardware.cpp +++ b/hardware.cpp @@ -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 diff --git a/i8080.cpp b/i8080.cpp index da9e9f4..0352d23 100644 --- a/i8080.cpp +++ b/i8080.cpp @@ -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() { diff --git a/r6502.cpp b/r6502.cpp index d0e7664..b7b004f 100644 --- a/r6502.cpp +++ b/r6502.cpp @@ -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) { diff --git a/ram.h b/ram.h index 2c4547b..f88cc94 100644 --- a/ram.h +++ b/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)) {} diff --git a/serial_filer.cpp b/serial_filer.cpp index fb57da3..a307200 100644 --- a/serial_filer.cpp +++ b/serial_filer.cpp @@ -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 diff --git a/spiram.cpp b/spiram.cpp index 6f0452a..8ca5a14 100644 --- a/spiram.cpp +++ b/spiram.cpp @@ -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 diff --git a/z80.cpp b/z80.cpp index 26b65da..ce37fd7 100644 --- a/z80.cpp +++ b/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() {