cdrom: removed toggleShell, fixed cddaReport

This commit is contained in:
Jakub Czekański 2021-01-31 03:02:42 +01:00
parent e33cbf5aef
commit 34a0f6560d
5 changed files with 14 additions and 17 deletions

View file

@ -43,16 +43,17 @@ void CDROM::handleSector() {
if (mode.cddaReport) {
// Report--> INT1(stat, track, index, mm / amm, ss + 80h / ass, sect / asect, peaklo, peakhi)
auto pos = disc::Position::fromLba(readSector);
int track = disc->getTrackByPosition(pos);
auto posInTrack = pos - disc->getTrackStart(track);
postInterrupt(1);
writeResponse(stat._reg); // stat
writeResponse(bcd::toBcd(track)); // track
writeResponse(0x01); // index
writeResponse(bcd::toBcd(pos.mm)); // minute (disc)
writeResponse(bcd::toBcd(pos.ss)); // second (disc)
writeResponse(bcd::toBcd(pos.ff)); // sector (disc)
writeResponse(bcd::toBcd(posInTrack.mm)); // minute (disc) <<< invalid
writeResponse(bcd::toBcd(posInTrack.ss) | 0x80); // second (disc) <<< invalid
writeResponse(bcd::toBcd(posInTrack.ff)); // sector (disc)
writeResponse(bcd::toBcd(0)); // peaklo
writeResponse(bcd::toBcd(0)); // peakhi

View file

@ -40,22 +40,15 @@ class CDROM {
void setShell(bool opened) {
shellOpen = opened;
if (!shellOpen) {
setMode(Mode::None);
if (opened) {
motor = false;
}
}
bool getShell() const { return shellOpen; }
void toggleShell() {
if (!shellOpen) {
shellOpen = true;
setMode(Mode::None);
} else {
shellOpen = false;
}
}
StatusCode() : _reg(0) { shellOpen = true; }
};
@ -202,12 +195,13 @@ class CDROM {
void setShell(bool opened) { stat.setShell(opened); }
bool getShell() const { return stat.getShell(); }
void toggleShell() { stat.toggleShell(); }
void ackMoreData() {
postInterrupt(1);
writeResponse(stat._reg);
}
bool discPresent() { return stat.getShell() == false && disc; }
template <class Archive>
void serialize(Archive& ar) {
ar(status._reg, interruptEnable);

View file

@ -128,7 +128,7 @@ void GUI::mainMenu(std::unique_ptr<System>& sys) {
const char* shellStatus = sys->cdrom->getShell() ? "Close disk tray" : "Open disk tray";
if (ImGui::MenuItem(shellStatus, Key(config.hotkeys["close_tray"]).getButton().c_str())) {
sys->cdrom->toggleShell();
sys->cdrom->setShell(!sys->cdrom->getShell());
}
if (ImGui::MenuItem("Single frame", Key(config.hotkeys["single_frame"]).getButton().c_str())) {

View file

@ -234,6 +234,7 @@ int main(int argc, char** argv) {
toast("Fastboot");
return;
} else if (e.action == Event::File::Load::Action::swap) {
sys->cdrom->setShell(true);
sys->cdrom->disc = std::move(disc);
sys->cdrom->setShell(false);
@ -351,7 +352,7 @@ int main(int argc, char** argv) {
}
}
if (button == Key(config.hotkeys["close_tray"])) {
sys->cdrom->toggleShell();
sys->cdrom->setShell(!sys->cdrom->getShell());
toast(fmt::format("Shell {}", sys->cdrom->getShell() ? "open" : "closed"));
}
if (button == Key(config.hotkeys["quick_save"])) {

View file

@ -75,6 +75,7 @@ void loadFile(std::unique_ptr<System>& sys, const std::string& path) {
std::unique_ptr<disc::Disc> disc = disc::load(path);
if (disc) {
sys->cdrom->setShell(true);
sys->cdrom->disc = std::move(disc);
sys->cdrom->setShell(false);
toast(fmt::format("{} loaded", filenameExt));