# pad routines # hacked by bITmASTER init_pad: subu sp,sp,4 sw ra,(sp) li t0,0x1f801040 li t1,0x40 sh t1,10(t0) li t1,0x88 sh t1,14(t0) li t1,0x0d sh t1,8(t0) li t1,0x0a sh t1,10(t0) li a0,500 jal wait li t1,0x02 sh t1,10(t0) li a0,500 jal wait li t1,0x2002 sh t1,10(t0) li a0,500 jal wait sh zero,10(t0) lw ra,(sp) addu sp,sp,4 jr ra # a0: pointer to 5 bytes for pad state # byte0: ?? # byte1: 0x41 # byte2: 0x5a # byte3: LEFT|DOWN|RGHT| UP | STA| 1 | 1 | SEL # byte4: [] | X | O | /\ | R1 | L1 | R2 | L2 get_pad: subu sp,sp,8 sw ra,(sp) sw s0,4(sp) move s0,a0 li t0,0x1f801040 li t1,0x2 sh t1,10(t0) lb zero,(t0) # dummy li t1,0x1003 # b1 = PAD 0, select PAD 0 sh t1,10(t0) wait_x: lhu t1,10(t0) and t1,t1,1 beqz t1,wait_x la t2,to_pad li t3,5 get_pad1: lbu t1,(t2) addu t2,t2,1 sb t1,(t0) li a0,500 jal wait lhu t1,10(t0) or t1,t1,0x10 sh t1,10(t0) wait_stat: lhu t1,10(t0) and t1,t1,0x02 beqz t1,wait_stat lbu t1,(t0) addu s0,s0,1 sb t1,-1(s0) subu t3,t3,1 bnez t3,get_pad1 li t1,0 sh t1,10(t0) lw ra,(sp) lw s0,4(sp) addu sp,sp,8 jr ra to_pad: .byte 1, 0x42, 0, 0, 0, 0, 0, 0 wait: subu a0,a0,1 bnez a0,wait jr ra