diff --git a/support/pcecd/pcecd.h b/support/pcecd/pcecd.h index f1ba8b0..e7c40de 100644 --- a/support/pcecd/pcecd.h +++ b/support/pcecd/pcecd.h @@ -82,6 +82,7 @@ public: int GetStatus(uint8_t* buf); int SetCommand(uint8_t* buf); void PendStatus(uint8_t status, uint8_t message); + void SendStatus(uint8_t status, uint8_t message); private: toc_t toc; diff --git a/support/pcecd/pcecdd.cpp b/support/pcecd/pcecdd.cpp index b0f277b..05628a2 100644 --- a/support/pcecd/pcecdd.cpp +++ b/support/pcecd/pcecdd.cpp @@ -721,7 +721,7 @@ void pcecdd_t::CommandExec() { default: CommandError(SENSEKEY_ILLEGAL_REQUEST, NSE_INVALID_COMMAND, 0, 0); - PendStatus(PCECD_STATUS_CHECK_COND, 0); + SendStatus(PCECD_STATUS_CHECK_COND, 0); printf("\x1b[32mPCECD: Command undefined, [0] = %02X, [1] = %02X, [2] = %02X, [3] = %02X, [4] = %02X, [5] = %02X\n\x1b[0m", comm[0], comm[1], comm[2], comm[3], comm[4], comm[5]); break; @@ -744,6 +744,16 @@ void pcecdd_t::PendStatus(uint8_t status, uint8_t message) { has_status = 1; } +void pcecdd_t::SendStatus(uint8_t status, uint8_t message) { + uint16_t s = ((uint16_t)message << 8) | status; + + spi_uio_cmd_cont(UIO_CD_SET); + spi_w(s); + spi_w(0); + DisableIO(); +} + + void pcecdd_t::LBAToMSF(int lba, msf_t* msf) { msf->m = (lba / 75) / 60; msf->s = (lba / 75) % 60;