1
0
mirror of https://github.com/jscrane/r65emu.git synced 2024-12-22 03:30:02 +00:00
r65emu/sdtape.cpp
Stephen Crane 88b66effb1 checkpoint, tape, etc.
Conflicts:
	checkpoint.cpp
	hardware.h
2018-08-14 10:13:18 +01:00

61 lines
870 B
C++

#include "hardware.h"
#if defined(SD_CS)
#include <SD.h>
#define DISK SD
#elif defined(USE_SPIFFS)
#include <SPIFFS.h>
#define DISK SPIFFS
#endif
#include "sdtape.h"
static File file, dir;
void sdtape::start(const char *programs)
{
dir = DISK.open(programs);
_pos = _len = 0;
}
void sdtape::stop()
{
file.close();
}
bool sdtape::more()
{
if (_pos >= _len) {
_pos = 0;
_len = file.read(_buf, sizeof(_buf));
if (_len == 0) // eof
return false;
}
return true;
}
const char *sdtape::advance() {
bool rewound = false;
file.close();
while (true) {
file = dir.openNextFile();
if (file) {
if (file.isDirectory())
file.close();
else
break;
} else if (!rewound) {
dir.rewindDirectory();
rewound = true;
} else
return 0;
}
return file.name();
}
const char *sdtape::rewind() {
dir.rewindDirectory();
return advance();
}