pcecd: common SendStatus function.

This commit is contained in:
sorgelig
2020-06-02 02:30:17 +08:00
parent 63182d5ccb
commit 0d3e158607
3 changed files with 15 additions and 18 deletions

View File

@@ -14,7 +14,6 @@
static int /*loaded = 0, unloaded = 0,*/ need_reset=0;
static uint8_t has_command = 0;
static uint8_t us_cart = 0;
void pcecd_poll()
{
@@ -36,24 +35,17 @@ void pcecd_poll()
}
if (pcecdd.has_status && !pcecdd.latency) {
uint16_t s;
pcecdd.GetStatus((uint8_t*)&s);
spi_uio_cmd_cont(UIO_CD_SET);
spi_w(s);
spi_w(0 | (us_cart << 1));
DisableIO();
pcecdd.SendStatus(s, 0);
pcecdd.has_status = 0;
printf("\x1b[32mPCECD: Send status = %02X, message = %02X\n\x1b[0m", s&0xFF, s >> 8);
}
else if (pcecdd.data_req) {
spi_uio_cmd_cont(UIO_CD_SET);
spi_w(0);
spi_w(1 | (us_cart << 1));
DisableIO();
pcecdd.SendStatus(0, 1);
pcecdd.data_req = false;
printf("\x1b[32mPCECD: Data request for MODESELECT6\n\x1b[0m");
@@ -154,7 +146,7 @@ static int load_bios(char *biosname, const char *cuename)
fileTYPE f;
if (!FileOpen(&f, biosname)) return 0;
us_cart = 0;
uint8_t us_cart = 0;
uint32_t start = size & 0x3FF;
if (size >= 262144)
@@ -192,7 +184,7 @@ static int load_bios(char *biosname, const char *cuename)
user_io_file_mount(buf, 0, 1);
user_io_set_download(0);
pcecdd.SetRegion(us_cart);
return 1;
}

View File

@@ -82,7 +82,8 @@ 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);
void SendStatus(uint16_t status, uint8_t flag);
void SetRegion(uint8_t rgn);
private:
toc_t toc;
@@ -98,6 +99,7 @@ private:
int CDDAFirst;
uint8_t CDDAMode;
sense_t sense;
uint8_t region;
uint8_t stat[2];
uint8_t comm[14];

View File

@@ -32,6 +32,7 @@ pcecdd_t::pcecdd_t() {
CDDAStart = 0;
CDDAEnd = 0;
CDDAMode = PCECD_CDDAMODE_SILENT;
region = 0;
stat[0] = 0x0;
stat[1] = 0x0;
@@ -744,15 +745,17 @@ 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;
void pcecdd_t::SendStatus(uint16_t status, uint8_t flag) {
spi_uio_cmd_cont(UIO_CD_SET);
spi_w(s);
spi_w(0);
spi_w(status);
spi_w((flag & 1) | (region ? 2 : 0));
DisableIO();
}
void pcecdd_t::SetRegion(uint8_t rgn) {
region = rgn;
}
void pcecdd_t::LBAToMSF(int lba, msf_t* msf) {
msf->m = (lba / 75) / 60;