9c84b468db5a682f32b06f620185419a1d9c95a5
[megadrive.git] / testpico / sh2_main.c
1 #include "common.h"
2
3 void spin(int loops);
4 u16  read_frt(void);
5
6 void 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