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