9d39a80e |
1 | #include "common.h" |
2 | |
3 | void spin(int loops); |
4 | |
5 | void main_c(u32 is_slave) |
6 | { |
7 | u16 v, *r = (u16 *)0x20004000; |
8 | |
9 | for (;;) |
10 | { |
11 | u16 cmd; |
12 | |
13 | mem_barrier(); |
14 | cmd = read16(&r[0x20/2]); |
15 | if ((cmd & 0x8000) ^ (is_slave << 15)) { |
16 | spin(64); |
17 | continue; |
18 | } |
19 | cmd &= 0x7fff; |
20 | switch (cmd) |
21 | { |
22 | case 0: |
23 | case 0x4d5f: // 'M_' from BIOS |
24 | case 0x535f: // 'S_' from BIOS |
25 | spin(64); |
26 | continue; |
27 | case CMD_ECHO: |
28 | v = read16(&r[0x22/2]) ^ (is_slave << 15); |
29 | write16(&r[0x24/2], v); |
30 | break; |
31 | } |
32 | write16(&r[0x20/2], 0); |
33 | } |
34 | } |
35 | |
36 | // vim:ts=4:sw=4:expandtab |