32x mostly works
[megadrive.git] / testpico / sh2_main.c
... / ...
CommitLineData
1#include "common.h"
2
3void spin(int loops);
4u16 read_frt(void);
5
6void main_c(u32 is_slave)
7{
8 u16 v, *r = (u16 *)0x20004000;
9
10 for (;;)
11 {
12 u16 cmd, cmdr;
13
14 mem_barrier();
15 cmd = read16(&r[0x20/2]);
16 mem_barrier();
17 cmdr = read16(&r[0x20/2]);
18 if (cmd != cmdr // documented as "normal" case
19 || ((cmd & 0x8000) ^ (is_slave << 15))) {
20 spin(64);
21 continue;
22 }
23 cmd &= 0x7fff;
24 switch (cmd)
25 {
26 case 0:
27 case 0x4d5f: // 'M_' from BIOS
28 spin(64);
29 continue;
30 case CMD_ECHO:
31 v = read16(&r[0x22/2]) ^ (is_slave << 15);
32 write16(&r[0x24/2], v);
33 break;
34 case CMD_READ_FRT:
35 v = read_frt();
36 write16(&r[0x24/2], v);
37 break;
38 }
39 write16(&r[0x20/2], 0);
40 }
41}
42
43// vim:ts=4:sw=4:expandtab