mirror of
https://github.com/jscrane/r65emu.git
synced 2024-12-21 12:29:51 +00:00
sdtape abstraction
This commit is contained in:
parent
72f53947d2
commit
cd9744757c
1
r65emu.h
1
r65emu.h
@ -10,6 +10,7 @@
|
|||||||
#include "ps2drv.h"
|
#include "ps2drv.h"
|
||||||
#include "utftdisplay.h"
|
#include "utftdisplay.h"
|
||||||
#include "keyboard.h"
|
#include "keyboard.h"
|
||||||
|
#include "sdtape.h"
|
||||||
#include "hardware.h"
|
#include "hardware.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
52
sdtape.cpp
Normal file
52
sdtape.cpp
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
#include <SD.h>
|
||||||
|
#include "sdtape.h"
|
||||||
|
|
||||||
|
static File file, dir;
|
||||||
|
|
||||||
|
void sdtape::start(const char *programs)
|
||||||
|
{
|
||||||
|
dir = SD.open(programs);
|
||||||
|
}
|
||||||
|
|
||||||
|
void sdtape::stop()
|
||||||
|
{
|
||||||
|
file.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool sdtape::more()
|
||||||
|
{
|
||||||
|
if (_pos >= _len) {
|
||||||
|
_pos = 0;
|
||||||
|
_len = file.read(_buf, sizeof(_buf));
|
||||||
|
|
||||||
|
if (_len == 0) {
|
||||||
|
file.close();
|
||||||
|
return false; // eof
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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();
|
||||||
|
}
|
21
sdtape.h
Normal file
21
sdtape.h
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
#ifndef _SDTAPE_H
|
||||||
|
#define _SDTAPE_H
|
||||||
|
|
||||||
|
class sdtape {
|
||||||
|
public:
|
||||||
|
const char *advance();
|
||||||
|
const char *rewind();
|
||||||
|
|
||||||
|
void start(const char *);
|
||||||
|
void stop();
|
||||||
|
|
||||||
|
sdtape(): _pos(0), _len(0) {}
|
||||||
|
|
||||||
|
byte read() { return _buf[_pos++]; }
|
||||||
|
bool more();
|
||||||
|
|
||||||
|
private:
|
||||||
|
unsigned int _pos, _len;
|
||||||
|
byte _buf[128];
|
||||||
|
};
|
||||||
|
#endif
|
Loading…
Reference in New Issue
Block a user