mirror of
https://github.com/cmosher01/Epple-II.git
synced 2024-11-16 23:18:12 +00:00
break out cassette FFWD to tone function and expose to user
This commit is contained in:
parent
0e29c34f79
commit
5ec3f59f2e
@ -52,9 +52,15 @@ The tape is automatically positioned at the first header tone.
|
||||
|
||||
+cassette rewind+
|
||||
|
||||
This command rewinds the tape currently on the CASSETTE IN port.
|
||||
This command first positions the tape to its beginning,
|
||||
and then ``fast-forwards'' to the first header tone.
|
||||
This command rewinds the tape currently on the CASSETTE IN port. After rewinding
|
||||
the tape, you will typically need to fast-forward to the head tone using
|
||||
the +cassette tone+ command.
|
||||
|
||||
+cassette tone+
|
||||
|
||||
If more than one program is stored in one WAVE file, then after loading the first
|
||||
program, you may need to fast-forward to the next header tone. This command will
|
||||
do just that.
|
||||
|
||||
+cassette blank <file-path>+
|
||||
|
||||
|
@ -170,6 +170,7 @@ The +cassette+ command performs various operations of the emulated cassette tape
|
||||
--------
|
||||
cassette load [ <file-path> ]
|
||||
cassette rewind
|
||||
cassette tone
|
||||
cassette blank <file-path>
|
||||
cassette save
|
||||
cassette eject { in | out }
|
||||
|
@ -157,17 +157,26 @@ void CassetteIn::rewind() {
|
||||
this->playing = false;
|
||||
note_pos();
|
||||
|
||||
this->gui.setCassettePos(this->t/10,this->samp_siz);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void CassetteIn::tone() {
|
||||
if (!isLoaded()) {
|
||||
return;
|
||||
}
|
||||
note_pos();
|
||||
|
||||
note("FAST FORWARD TO TONE");
|
||||
|
||||
this->playing = false;
|
||||
|
||||
const unsigned int HEAD_SAMPLES = 17;
|
||||
std::int_fast8_t slope_was = 0;
|
||||
uint i_was = 0;
|
||||
uint c_head = 0;
|
||||
for (std::uint_fast32_t i = 1; i < this->samp_siz; ++i) {
|
||||
std::uint_fast32_t i_was = 0;
|
||||
std::uint_fast32_t c_head = 0;
|
||||
|
||||
const std::uint_fast32_t start = this->t/10 > 0 ? this->t/10 : 1;
|
||||
for (std::uint_fast32_t i = start; i < this->samp_siz; ++i) {
|
||||
std::int_fast8_t slope_is = slope(this->samp[i-1], this->samp[i]);
|
||||
if (slope_is) {
|
||||
if (slope_is != slope_was) {
|
||||
@ -244,6 +253,7 @@ bool CassetteIn::load(const std::string& filePath) {
|
||||
this->gui.setCassetteInFile(filePath);
|
||||
|
||||
rewind();
|
||||
tone();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -42,6 +42,7 @@ public:
|
||||
|
||||
bool load(const std::string& filePath);
|
||||
void rewind();
|
||||
void tone();
|
||||
virtual bool eject();
|
||||
};
|
||||
|
||||
|
@ -304,6 +304,10 @@ void Config::tryParseLine(const std::string& line, Memory& ram, Memory& rom, Slo
|
||||
{
|
||||
cassetteIn.rewind();
|
||||
}
|
||||
else if (cas == "tone")
|
||||
{
|
||||
cassetteIn.tone();
|
||||
}
|
||||
else if (cas == "blank")
|
||||
{
|
||||
std::string fcas;
|
||||
|
Loading…
Reference in New Issue
Block a user