notaz.gp2x.de
/
megadrive.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
32x mostly works
[megadrive.git]
/
testpico
/
sh2_main.c
diff --git
a/testpico/sh2_main.c
b/testpico/sh2_main.c
index
eaa69a9
..
9c84b46
100644
(file)
--- a/
testpico/sh2_main.c
+++ b/
testpico/sh2_main.c
@@
-1,6
+1,7
@@
#include "common.h"
void spin(int loops);
#include "common.h"
void spin(int loops);
+u16 read_frt(void);
void main_c(u32 is_slave)
{
void main_c(u32 is_slave)
{
@@
-8,11
+9,14
@@
void main_c(u32 is_slave)
for (;;)
{
for (;;)
{
- u16 cmd;
+ u16 cmd
, cmdr
;
mem_barrier();
cmd = read16(&r[0x20/2]);
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;
}
spin(64);
continue;
}
@@
-21,13
+25,16
@@
void main_c(u32 is_slave)
{
case 0:
case 0x4d5f: // 'M_' from BIOS
{
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;
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);
}
}
write16(&r[0x20/2], 0);
}