1
0
mirror of https://github.com/TomHarte/CLK.git synced 2025-12-22 04:18:01 +00:00

Apply filename constraint.

This commit is contained in:
Thomas Harte
2025-12-05 14:34:05 -05:00
parent 9c42a70635
commit 64e738f6b5

View File

@@ -155,14 +155,34 @@ struct TapeHandler: public ClockingHint::Observer {
} }
} }
// TODO: search for file matching raw_name.
Storage::Tape::Commodore::Parser parser(TargetPlatform::Plus4);
const auto start_offset = tape_player_->serialiser()->offset(); const auto start_offset = tape_player_->serialiser()->offset();
const auto header = parser.get_next_header(*tape_player_->serialiser()); const auto abort = [&]() {
if(header && header->parity_was_valid) { tape_player_->serialiser()->set_offset(start_offset);
const auto body = parser.get_next_data(*tape_player_->serialiser()); return false;
};
// Search for first thing that matches the file name.
Storage::Tape::Commodore::Parser parser(TargetPlatform::Plus4);
auto &serialiser = *tape_player_->serialiser();
std::unique_ptr<Storage::Tape::Commodore::Header> header;
while(true) {
if(parser.is_at_end(serialiser)) {
return abort();
}
header = parser.get_next_header(serialiser);
if(header && header->parity_was_valid) {
if(raw_name.empty() || raw_name == header->raw_name) {
break;
}
}
}
const auto body = parser.get_next_data(*tape_player_->serialiser());
if(!body || !body->parity_was_valid) {
return abort();
}
if(body && body->parity_was_valid) {
// Copy header into place. // Copy header into place.
header->serialise(&ram[HeaderBuffer], uint16_t(ram.size() - HeaderBuffer)); header->serialise(&ram[HeaderBuffer], uint16_t(ram.size() - HeaderBuffer));
@@ -220,11 +240,6 @@ struct TapeHandler: public ClockingHint::Observer {
m6502.set_registers(registers); m6502.set_registers(registers);
return true; return true;
} }
}
tape_player_->serialiser()->set_offset(start_offset);
return false;
}
template <typename M6502T, typename MemoryT> template <typename M6502T, typename MemoryT>
std::optional<AcceleratedRange> accelerated_range(const uint16_t pc, M6502T &, MemoryT &map) { std::optional<AcceleratedRange> accelerated_range(const uint16_t pc, M6502T &, MemoryT &map) {