More Panasonic/MKE updates

This commit is contained in:
Cacodemon345
2025-07-26 17:19:56 +06:00
parent c959c9263a
commit 643590893c

View File

@@ -141,22 +141,32 @@ mke_get_subq(cdrom_t *dev, uint8_t *b)
b[8] = temp_buf[4]; b[8] = temp_buf[4];
b[9] = temp_buf[5]; b[9] = temp_buf[5];
b[10] = 0; //?? b[10] = 0; //??
pclog("mke_get_subq: 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\n", b[0], b[1], b[2], b[3], b[4], b[5], b[6], b[7], b[8], b[9], b[10]);
} }
uint8_t // Lifted from FreeBSD
mke_read_toc(cdrom_t *dev, unsigned char *b, uint8_t track)
static void blk_to_msf(int blk, unsigned char *msf)
{ {
blk = blk + 150; /*2 seconds skip required to
reach ISO data*/
msf[0] = blk / 4500;
blk = blk % 4500;
msf[1] = blk / 75;
msf[2] = blk % 75;
return;
}
uint8_t mke_read_toc(cdrom_t *dev, unsigned char *b, uint8_t track) {
track_info_t ti; track_info_t ti;
int first_track; int first_track;
int last_track; int last_track;
// dev->ops->get_tracks(dev, &first_track, &last_track);
cdrom_read_toc(dev, temp_buf, CD_TOC_NORMAL, 0, 0, 65536); cdrom_read_toc(dev, temp_buf, CD_TOC_NORMAL, 0, 0, 65536);
first_track = temp_buf[2]; first_track = temp_buf[2];
last_track = temp_buf[3]; last_track = temp_buf[3];
if (track > last_track) if(track > last_track) return 0; //should we allow +1 here?
return 0; // should we allow +1 here? dev->ops->get_track_info(dev->local, track, 0, &ti);
dev->ops->get_track_info(dev, track, 0, &ti); b[0]=0;
b[0] = 0x0;
b[1]=ti.attr; b[1]=ti.attr;
b[2]=ti.number; b[2]=ti.number;
b[3]=0; b[3]=0;
@@ -164,25 +174,29 @@ mke_read_toc(cdrom_t *dev, unsigned char *b, uint8_t track)
b[5]=ti.s; b[5]=ti.s;
b[6]=ti.f; b[6]=ti.f;
b[7]=0; b[7]=0;
pclog("mke_read_toc: 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\n", b[0], b[1], b[2], b[3], b[4], b[5], b[6], b[7]);
return 1; return 1;
} }
uint8_t uint8_t
mke_disc_info(cdrom_t *dev, unsigned char *b) mke_disc_info(cdrom_t *dev, unsigned char *b)
{ {
track_info_t ti; track_info_t ti;
int first_track; int first_track;
int last_track; int last_track;
cdrom_read_toc(dev, temp_buf, CD_TOC_NORMAL, 0, 0, 65536); cdrom_read_toc(dev, temp_buf, CD_TOC_NORMAL, 0, 2 << 8, 65536);
first_track = temp_buf[2]; first_track = temp_buf[2];
last_track = temp_buf[3]; last_track = temp_buf[3];
dev->ops->get_track_info(dev, last_track + 1, 0, &ti); // dev->ops->get_track_info(dev, last_track + 1, 0, &ti);
b[0] = 0x0; b[0] = 0x0;
b[1] = first_track; b[1] = first_track;
b[2] = last_track; b[2] = last_track;
b[3] = ti.m; b[3] = 0;
b[4] = ti.s; b[4] = 0;
b[5] = ti.f; b[5] = 0;
blk_to_msf(dev->cdrom_capacity, &b[3]);
pclog("mke_disc_info: 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\n", b[0], b[1], b[2], b[3], b[4], b[5]);
return 1; return 1;
} }
@@ -193,7 +207,7 @@ mke_disc_capacity(cdrom_t *dev, unsigned char *b)
int first_track; int first_track;
int last_track; int last_track;
// dev->ops->get_tracks(dev, &first_track, &last_track); // dev->ops->get_tracks(dev, &first_track, &last_track);
cdrom_read_toc(dev, temp_buf, CD_TOC_NORMAL, 0, 0, 65536); cdrom_read_toc(dev, temp_buf, CD_TOC_NORMAL, 0, 2 << 8, 65536);
first_track = temp_buf[2]; first_track = temp_buf[2];
last_track = temp_buf[3]; last_track = temp_buf[3];
dev->ops->get_track_info(dev, last_track + 1, 0, &ti); dev->ops->get_track_info(dev, last_track + 1, 0, &ti);
@@ -202,6 +216,9 @@ mke_disc_capacity(cdrom_t *dev, unsigned char *b)
b[2] = ti.f - 1; // TODO THIS NEEDS TO HANDLE FRAME 0, JUST BEING LAZY 6AM b[2] = ti.f - 1; // TODO THIS NEEDS TO HANDLE FRAME 0, JUST BEING LAZY 6AM
b[3] = 0x08; b[3] = 0x08;
b[4] = 0x00; b[4] = 0x00;
blk_to_msf(dev->cdrom_capacity, &b[0]);
pclog("mke_disc_capacity: 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\n", b[0], b[1], b[2], b[3], b[4]);
return 1; return 1;
} }
@@ -254,6 +271,7 @@ mke_command(uint8_t value)
if (!mke.command_buffer_pending && mke.command_buffer[0]) { if (!mke.command_buffer_pending && mke.command_buffer[0]) {
mke.command_buffer_pending = 7; mke.command_buffer_pending = 7;
pclog("mke_command: 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\n", mke.command_buffer[0], mke.command_buffer[1], mke.command_buffer[2], mke.command_buffer[3], mke.command_buffer[4], mke.command_buffer[5], mke.command_buffer[6]);
switch (mke.command_buffer[0]) { switch (mke.command_buffer[0]) {
case 06: case 06:
{ {
@@ -471,7 +489,7 @@ mke_command(uint8_t value)
void void
mke_write(uint16_t address, uint8_t value, void *priv) mke_write(uint16_t address, uint8_t value, void *priv)
{ {
pclog("MKEWRITE: 0x%X, 0x%02X\n", address & 0xf, value); //pclog("MKEWRITE: 0x%X, 0x%02X\n", address & 0xf, value);
if (mke.enable_register && ((address & 0xF) != 3)) { if (mke.enable_register && ((address & 0xF) != 3)) {
// mke_log("Ignore Write Unit %u\n",mke.enable_register); // mke_log("Ignore Write Unit %u\n",mke.enable_register);
return; return;