X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=megadrive.git;a=blobdiff_plain;f=testpico%2Fsh2_main.c;fp=testpico%2Fsh2_main.c;h=9c84b468db5a682f32b06f620185419a1d9c95a5;hp=eaa69a97f43b52074ecf708d3139b502ed128b8a;hb=71b41fddd18f66c99e13f53bd78582627e6ff10b;hpb=9d39a80ebef085f0d65b49e0bd6a07c4de723de9 diff --git a/testpico/sh2_main.c b/testpico/sh2_main.c index eaa69a9..9c84b46 100644 --- a/testpico/sh2_main.c +++ b/testpico/sh2_main.c @@ -1,6 +1,7 @@ #include "common.h" void spin(int loops); +u16 read_frt(void); void main_c(u32 is_slave) { @@ -8,11 +9,14 @@ void main_c(u32 is_slave) for (;;) { - u16 cmd; + u16 cmd, cmdr; mem_barrier(); cmd = read16(&r[0x20/2]); - if ((cmd & 0x8000) ^ (is_slave << 15)) { + mem_barrier(); + cmdr = read16(&r[0x20/2]); + if (cmd != cmdr // documented as "normal" case + || ((cmd & 0x8000) ^ (is_slave << 15))) { spin(64); continue; } @@ -21,13 +25,16 @@ void main_c(u32 is_slave) { case 0: case 0x4d5f: // 'M_' from BIOS - case 0x535f: // 'S_' from BIOS spin(64); continue; case CMD_ECHO: v = read16(&r[0x22/2]) ^ (is_slave << 15); write16(&r[0x24/2], v); break; + case CMD_READ_FRT: + v = read_frt(); + write16(&r[0x24/2], v); + break; } write16(&r[0x20/2], 0); }