mirror of
https://github.com/jscrane/r65emu.git
synced 2025-02-05 17:30:31 +00:00
cleanup disk
This commit is contained in:
parent
971f34f1b3
commit
67540df29f
@ -1,9 +1,11 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
#include "hardware.h"
|
#include "hardware.h"
|
||||||
#include "sdtape.h"
|
#include "sdtape.h"
|
||||||
#include "checkpoint.h"
|
#include "checkpoint.h"
|
||||||
|
|
||||||
#if defined(SD_CS)
|
#if defined(USE_SD)
|
||||||
#include <SD.h>
|
#include <SD.h>
|
||||||
#elif defined(USE_SPIFFS)
|
#elif defined(USE_SPIFFS)
|
||||||
#include <SPIFFS.h>
|
#include <SPIFFS.h>
|
||||||
@ -17,13 +19,15 @@ const char *checkpoint(sdtape &tape, const char *dir) {
|
|||||||
tape.stop();
|
tape.stop();
|
||||||
snprintf(buf, sizeof(buf), "%s%s.%03d", dir, chkpt, cpid++);
|
snprintf(buf, sizeof(buf), "%s%s.%03d", dir, chkpt, cpid++);
|
||||||
|
|
||||||
#if defined(SD_CS)
|
#if defined(USE_SD) || defined(USE_SPIFFS)
|
||||||
|
#if defined(USE_SD)
|
||||||
File file = SD.open(buf, O_WRITE | O_CREAT | O_TRUNC);
|
File file = SD.open(buf, O_WRITE | O_CREAT | O_TRUNC);
|
||||||
#elif defined(USE_SPIFFS)
|
#else
|
||||||
File file = SPIFFS.open(buf, FILE_WRITE);
|
File file = SPIFFS.open(buf, FILE_WRITE);
|
||||||
#endif
|
#endif
|
||||||
hardware_checkpoint(file);
|
hardware_checkpoint(file);
|
||||||
file.close();
|
file.close();
|
||||||
|
#endif
|
||||||
tape.start(dir);
|
tape.start(dir);
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
@ -32,13 +36,15 @@ void restore(sdtape &tape, const char *dir, const char *filename) {
|
|||||||
tape.stop();
|
tape.stop();
|
||||||
snprintf(buf, sizeof(buf), "%s%s", dir, filename);
|
snprintf(buf, sizeof(buf), "%s%s", dir, filename);
|
||||||
|
|
||||||
#if defined(SD_CS)
|
#if defined(USE_SD) || defined(USE_SPIFFS)
|
||||||
|
#if defined(USE_SD)
|
||||||
File file = SD.open(buf, O_READ);
|
File file = SD.open(buf, O_READ);
|
||||||
#elif defined(USE_SPIFFS)
|
#else
|
||||||
File file = SPIFFS.open(buf, FILE_READ);
|
File file = SPIFFS.open(buf, FILE_READ);
|
||||||
#endif
|
#endif
|
||||||
hardware_restore(file);
|
hardware_restore(file);
|
||||||
file.close();
|
file.close();
|
||||||
|
#endif
|
||||||
int n = sscanf(buf + strlen(dir), "%[A-Z0-9].%d", chkpt, &cpid);
|
int n = sscanf(buf + strlen(dir), "%[A-Z0-9].%d", chkpt, &cpid);
|
||||||
cpid = (n == 1)? 0: cpid+1;
|
cpid = (n == 1)? 0: cpid+1;
|
||||||
tape.start(dir);
|
tape.start(dir);
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
#include <SPI.h>
|
#include <SPI.h>
|
||||||
|
|
||||||
#if defined(SD_CS)
|
#if defined(USE_SD)
|
||||||
#include <SD.h>
|
#include <SD.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -36,7 +36,7 @@ bool hardware_reset() {
|
|||||||
SPIRAM_DEV.setDataMode(SPI_MODE0);
|
SPIRAM_DEV.setDataMode(SPI_MODE0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(SD_CS)
|
#if defined(USE_SD)
|
||||||
success = SD.begin(SD_CS, 2, SD_SPI);
|
success = SD.begin(SD_CS, 2, SD_SPI);
|
||||||
pinMode(SPI_CS, OUTPUT); // without this, the SPI-RAM isn't seen
|
pinMode(SPI_CS, OUTPUT); // without this, the SPI-RAM isn't seen
|
||||||
#endif
|
#endif
|
||||||
@ -62,7 +62,7 @@ void hardware_init(CPU &cpu) {
|
|||||||
pinMode(TFT_BACKLIGHT, OUTPUT);
|
pinMode(TFT_BACKLIGHT, OUTPUT);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(SD_CS)
|
#if defined(USE_SD)
|
||||||
pinMode(SD_CS, OUTPUT);
|
pinMode(SD_CS, OUTPUT);
|
||||||
digitalWrite(SD_CS, HIGH);
|
digitalWrite(SD_CS, HIGH);
|
||||||
#endif
|
#endif
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
#undef SPIRAM_CS
|
#undef SPIRAM_CS
|
||||||
|
|
||||||
// "tape" storage...
|
// "tape" storage...
|
||||||
#undef SD_CS
|
#undef USE_SD
|
||||||
#define USE_SPIFFS
|
#define USE_SPIFFS
|
||||||
|
|
||||||
// sound: dac and pwm
|
// sound: dac and pwm
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
#undef SPIRAM_CS
|
#undef SPIRAM_CS
|
||||||
|
|
||||||
// "tape" storage...
|
// "tape" storage...
|
||||||
#undef SD_CS
|
#undef USE_SD
|
||||||
#define USE_SPIFFS
|
#define USE_SPIFFS
|
||||||
|
|
||||||
// sound: dac and pwm
|
// sound: dac and pwm
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
#undef SPIRAM_CS
|
#undef SPIRAM_CS
|
||||||
|
|
||||||
// "tape" storage...
|
// "tape" storage...
|
||||||
#undef SD_CS
|
#undef USE_SD
|
||||||
#undef USE_SPIFFS
|
#undef USE_SPIFFS
|
||||||
|
|
||||||
// sound
|
// sound
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
#define SPIRAM_SIZE 65536
|
#define SPIRAM_SIZE 65536
|
||||||
|
|
||||||
// "tape" storage...
|
// "tape" storage...
|
||||||
|
#define USE_SD
|
||||||
#define SD_CS PF_3
|
#define SD_CS PF_3
|
||||||
#define SD_SPI 1
|
#define SD_SPI 1
|
||||||
|
|
||||||
|
17
sdtape.cpp
17
sdtape.cpp
@ -1,6 +1,7 @@
|
|||||||
|
#include <stdint.h>
|
||||||
#include "hardware.h"
|
#include "hardware.h"
|
||||||
|
|
||||||
#if defined(SD_CS)
|
#if defined(USE_SD)
|
||||||
#include <SD.h>
|
#include <SD.h>
|
||||||
#define DISK SD
|
#define DISK SD
|
||||||
#elif defined(USE_SPIFFS)
|
#elif defined(USE_SPIFFS)
|
||||||
@ -10,13 +11,17 @@
|
|||||||
|
|
||||||
#include "sdtape.h"
|
#include "sdtape.h"
|
||||||
|
|
||||||
|
#if defined(DISK)
|
||||||
static File file, dir;
|
static File file, dir;
|
||||||
|
#endif
|
||||||
|
|
||||||
bool sdtape::start(const char *programs)
|
bool sdtape::start(const char *programs)
|
||||||
{
|
{
|
||||||
|
#if defined(DISK)
|
||||||
dir = DISK.open(programs);
|
dir = DISK.open(programs);
|
||||||
if (!dir)
|
if (!dir)
|
||||||
return false;
|
return false;
|
||||||
|
#endif
|
||||||
|
|
||||||
_pos = _len = 0;
|
_pos = _len = 0;
|
||||||
return true;
|
return true;
|
||||||
@ -24,11 +29,14 @@ bool sdtape::start(const char *programs)
|
|||||||
|
|
||||||
void sdtape::stop()
|
void sdtape::stop()
|
||||||
{
|
{
|
||||||
|
#if defined(DISK)
|
||||||
file.close();
|
file.close();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
bool sdtape::more()
|
bool sdtape::more()
|
||||||
{
|
{
|
||||||
|
#if defined(DISK)
|
||||||
if (_pos >= _len) {
|
if (_pos >= _len) {
|
||||||
_pos = 0;
|
_pos = 0;
|
||||||
_len = file.read(_buf, sizeof(_buf));
|
_len = file.read(_buf, sizeof(_buf));
|
||||||
@ -36,10 +44,12 @@ bool sdtape::more()
|
|||||||
if (_len == 0) // eof
|
if (_len == 0) // eof
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *sdtape::advance() {
|
const char *sdtape::advance() {
|
||||||
|
#if defined(DISK)
|
||||||
bool rewound = false;
|
bool rewound = false;
|
||||||
file.close();
|
file.close();
|
||||||
while (true) {
|
while (true) {
|
||||||
@ -56,9 +66,14 @@ const char *sdtape::advance() {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return file.name();
|
return file.name();
|
||||||
|
#else
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *sdtape::rewind() {
|
const char *sdtape::rewind() {
|
||||||
|
#if defined(DISK)
|
||||||
dir.rewindDirectory();
|
dir.rewindDirectory();
|
||||||
|
#endif
|
||||||
return advance();
|
return advance();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user