set $workspace = 0x40000000 define load_usb_firmware # load helper # lbu r4,(r1+0) set *($workspace+0) = 0x40240000 # lbu r5,(r1+1) set *($workspace+4) = 0x40250001 # sli r5,r5,8 set *($workspace+8) = 0x3ca50008 # or r4,r4,r5 set *($workspace+12) = 0xb8852000 # sw (r2+0),r4 set *($workspace+16) = 0x58440000 # addi r1,r1,2 set *($workspace+20) = 0x34210002 # addi r2,r2,4 set *($workspace+24) = 0x34420004 # addi r3,r3,-2 set *($workspace+28) = 0x3463fffe # bg r3,r0,-32 set *($workspace+32) = 0x4860fff8 # break set *($workspace+36) = 0xac000002 # save registers set $saved_r1 = $r1 set $saved_r2 = $r2 set $saved_r3 = $r3 set $saved_r4 = $r4 set $saved_r5 = $r5 set $saved_pc = $pc restore $arg0 binary $workspace+64 set $r1 = $workspace+64 set $r2 = 0xa0000000 set $r3 = 2048 jump *($workspace) # recall registers set $r1 = $saved_r1 set $r2 = $saved_r2 set $r3 = $saved_r3 set $r4 = $saved_r4 set $r5 = $saved_r5 set $pc = $saved_pc end document load_usb_firmware Loads an USB firmware from a binary file. Syntax: load_usb_firmware end