pcecd: common SendStatus function.
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user