9 // 04-07: arg0/response
11 // 0c: last_irq_vec_master
12 // 0d: last_irq_vec_slave
13 // 0e: exception_index_master
14 // 0f: exception_index_slave
15 static void do_cmd(u16 cmd, u16 r[6], u32 is_slave)
24 v = read16(&r[4/2]) ^ (is_slave << 15);
62 asm("stc gbr, %0" : "=r"(d));
66 asm("stc vbr, %0" : "=r"(d));
76 void main_c(u32 is_slave)
78 u16 *r = (u16 *)0x20004000;
85 cmd = read16(&r[0x20/2]);
87 cmdr = read16(&r[0x20/2]);
89 || cmd != cmdr // documented as "normal" case
90 || ((cmd & 0x8000) ^ (is_slave << 15))
91 || cmd == 0x4d5f) { // 'M_' from BIOS
96 do_cmd(cmd, &r[0x20/2], is_slave);
97 write16(&r[0x20/2], 0);
101 // vim:ts=4:sw=4:expandtab