mirror of
https://github.com/jscrane/r65emu.git
synced 2024-09-09 06:54:23 +00:00
esp8266 disk storage
This commit is contained in:
parent
8836367767
commit
bbfc553e29
@ -9,6 +9,8 @@
|
||||
#include <SD.h>
|
||||
#elif defined(USE_SPIFFS)
|
||||
#include <SPIFFS.h>
|
||||
#elif defined(ESP8266)
|
||||
#include <FS.h>
|
||||
#endif
|
||||
|
||||
static char buf[32];
|
||||
@ -19,11 +21,13 @@ const char *checkpoint(sdtape &tape, const char *dir) {
|
||||
tape.stop();
|
||||
snprintf(buf, sizeof(buf), "%s%s.%03d", dir, chkpt, cpid++);
|
||||
|
||||
#if defined(USE_SD) || defined(USE_SPIFFS)
|
||||
#if defined(USE_SD) || defined(USE_SPIFFS) || defined(ESP8266)
|
||||
#if defined(USE_SD)
|
||||
File file = SD.open(buf, O_WRITE | O_CREAT | O_TRUNC);
|
||||
#else
|
||||
#elif defined(USE_SPIFFS)
|
||||
File file = SPIFFS.open(buf, FILE_WRITE);
|
||||
#else
|
||||
File file = SPIFFS.open(buf, "w");
|
||||
#endif
|
||||
hardware_checkpoint(file);
|
||||
file.close();
|
||||
@ -36,11 +40,13 @@ void restore(sdtape &tape, const char *dir, const char *filename) {
|
||||
tape.stop();
|
||||
snprintf(buf, sizeof(buf), "%s%s", dir, filename);
|
||||
|
||||
#if defined(USE_SD) || defined(USE_SPIFFS)
|
||||
#if defined(USE_SD) || defined(USE_SPIFFS) || defined(ESP8266)
|
||||
#if defined(USE_SD)
|
||||
File file = SD.open(buf, O_READ);
|
||||
#else
|
||||
#elif defined(USE_SPIFFS)
|
||||
File file = SPIFFS.open(buf, FILE_READ);
|
||||
#else
|
||||
File file = SPIFFS.open(buf, "r");
|
||||
#endif
|
||||
hardware_restore(file);
|
||||
file.close();
|
||||
|
31
sdtape.cpp
31
sdtape.cpp
@ -7,17 +7,25 @@
|
||||
#elif defined(USE_SPIFFS)
|
||||
#include <SPIFFS.h>
|
||||
#define DISK SPIFFS
|
||||
#elif defined(ESP8266)
|
||||
#include <FS.h>
|
||||
#endif
|
||||
|
||||
#include "sdtape.h"
|
||||
|
||||
#if defined(DISK)
|
||||
static File file, dir;
|
||||
#elif defined(ESP8266)
|
||||
static File file;
|
||||
static Dir dir;
|
||||
#endif
|
||||
|
||||
bool sdtape::start(const char *programs)
|
||||
{
|
||||
#if defined(DISK)
|
||||
#if defined(ESP8266)
|
||||
SPIFFS.begin();
|
||||
dir = SPIFFS.openDir("/");
|
||||
#else if defined(DISK)
|
||||
dir = DISK.open(programs);
|
||||
if (!dir)
|
||||
return false;
|
||||
@ -29,14 +37,14 @@ bool sdtape::start(const char *programs)
|
||||
|
||||
void sdtape::stop()
|
||||
{
|
||||
#if defined(DISK)
|
||||
#if defined(DISK) || defined(ESP8266)
|
||||
file.close();
|
||||
#endif
|
||||
}
|
||||
|
||||
bool sdtape::more()
|
||||
{
|
||||
#if defined(DISK)
|
||||
#if defined(DISK) || defined(ESP8266)
|
||||
if (_pos >= _len) {
|
||||
_pos = 0;
|
||||
_len = file.read(_buf, sizeof(_buf));
|
||||
@ -49,9 +57,21 @@ bool sdtape::more()
|
||||
}
|
||||
|
||||
const char *sdtape::advance() {
|
||||
#if defined(DISK)
|
||||
#if defined(DISK) || defined(ESP8266)
|
||||
bool rewound = false;
|
||||
file.close();
|
||||
#if defined(ESP8266)
|
||||
static char buf[32];
|
||||
while (true) {
|
||||
if (dir.next()) {
|
||||
file = dir.openFile("r");
|
||||
break;
|
||||
}
|
||||
dir = SPIFFS.openDir("/");
|
||||
}
|
||||
strncpy(buf, dir.fileName().c_str(), sizeof(buf));
|
||||
return buf;
|
||||
#else
|
||||
while (true) {
|
||||
file = dir.openNextFile();
|
||||
if (file) {
|
||||
@ -66,13 +86,14 @@ const char *sdtape::advance() {
|
||||
return 0;
|
||||
}
|
||||
return file.name();
|
||||
#endif
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
const char *sdtape::rewind() {
|
||||
#if defined(DISK)
|
||||
#if defined(DISK) && !defined(ESP8266)
|
||||
dir.rewindDirectory();
|
||||
#endif
|
||||
return advance();
|
||||
|
Loading…
Reference in New Issue
Block a user