global g0 sl f0210c 00070007 sl f1a10c 00070007 procedure savegpc set g0 lpeek(f02110) sl 2180 g0 . procedure savedpc set g0 lpeek(f1a110) sl 2180 g0 . procedure showgpc set g0 lpeek(f02110) print -x08 g0+2 . procedure showdpc set g0 lpeek(f1a110) print -x08 g0+2 . procedure getgpc set g0 lpeek(f02110) set g0 g0+2 . procedure getdpc set g0 lpeek(f1a110) set g0 g0+2 . procedure setgpc gpc flag stopgpu sl f02110 `gpc . procedure setdpc dpc flag stopdsp sl f1a110 `dpc . procedure swap input local temp1 temp2 set temp1 input<<@16 set temp2 input>>@16 set g0 temp1+temp2 . alias gogpu 'sl f02114 00000011' alias godsp 'sl f1a114 00000011' alias stopgpu 'sl f02114 00000008' alias stopdsp 'sl f1a114 00000008' procedure resetgpc local temp set temp lpeek(2180) set g0 g0+2 setgpc g0 . procedure resetdpc local temp set temp lpeek(2180) set g0 g0+2 setdpc g0 . procedure lold addr range x discpu $ff if (`argc==2) l addr[range] if (`argc==1) l addr if (`argc==0) l x discpu 0 . procedure lg addr range x discpu $fe if (`argc==2) l addr[range] if (`argc==1) l addr if (`argc==0) l x discpu 0 . procedure ld addr range x discpu $fd if (`argc==2) l addr[range] if (`argc==1) l addr if (`argc==0) l x discpu 0 . procedure gpustuf read regdump.bin 2000 . gag ; gpustuf ; gag off ; defer gag procedure tg start end if (argc>0) setgpc start 1 #:glop sl f02114 00000019 set g0 lpeek(f02110) set g0 g0+2 if ((`g0!=end)&(argc==2)) goto glop lg g0 1 # xg . procedure td start end if (argc>0) setgpc start 1 #:glop sl f1a114 00000019 set g0 lpeek(f1a110) set g0 g0+2 if ((`g0!=end)&(argc==2)) goto glop ld g0 1 . procedure xg local temp1 temp2 count gflags sl f0210c 00070007 sl f1a10c 00070007 set gflags lpeek(f02100) # Remember to disable interrupts sl f02100 (gflags&2fe0f) savegpc setgpc 2008 sl 2100[@32*4] 0 sl 217c ffffffff sl 2178 0 set count 0 set temp1 lpeek(f02100) set temp2 temp2 if ((temp1&1)==0) print -n ZC if ((temp1&1)!=0) print -n ZS if ((temp1&2)==0) print -n CC if ((temp1&2)!=0) print -n CS if ((temp1&4)==0) print -n NC if ((temp1&4)!=0) print -n NS set temp1 temp1&00004000 set temp1 temp1>>@14 print Register Bank -x temp1 sl 208c 981f2114 sl 2090 00f0981e gogpu #:lop if (count>10) goto abort set temp1 lpeek(2178) set temp2 lpeek(217c) set count count+1 if (temp1!=temp2) goto lop goto exit #:abort print Did the GPU die? goto exit #:exit print -n R00 -x08 lpeek(2100) print -n -x08 lpeek(2104) print -n -x08 lpeek(2108) print -n -x08 lpeek(210c) "" print -n -x08 lpeek(2110) print -n -x08 lpeek(2114) print -n -x08 lpeek(2118) print -x08 lpeek(211c) print -n R08 -x08 lpeek(2120) print -n -x08 lpeek(2124) print -n -x08 lpeek(2128) print -n -x08 lpeek(212c) "" print -n -x08 lpeek(2130) print -n -x08 lpeek(2134) print -n -x08 lpeek(2138) print -x08 lpeek(213c) print -n R16 -x08 lpeek(2140) print -n -x08 lpeek(2144) print -n -x08 lpeek(2148) print -n -x08 lpeek(214c) "" print -n -x08 lpeek(2150) print -n -x08 lpeek(2154) print -n -x08 lpeek(2158) print -x08 lpeek(215c) print -n R24 -x08 lpeek(2160) print -n -x08 lpeek(2164) print -n -x08 lpeek(2168) print -n -x08 lpeek(216c) "" print -n -x08 lpeek(2170) print -n -x08 lpeek(2174) print -n "TRASHED!" print "TRASHED!" resetgpc sl f02100 `gflags getgpc lg g0 1 . procedure xd local temp1 temp2 count gflags sl f0210c 00070007 sl f1a10c 00070007 set gflags lpeek(f1a100) # Remember to disable interrupts sl f1a100 (gflags&2fe0f) savedpc setdpc 2008 sl 2100[@32*4] 0 sl 217c ffffffff sl 2178 0 set count 0 set temp1 lpeek(f1a100) set temp2 temp2 if ((temp1&1)==0) print -n ZC if ((temp1&1)!=0) print -n ZS if ((temp1&2)==0) print -n CC if ((temp1&2)!=0) print -n CS if ((temp1&4)==0) print -n NC if ((temp1&4)!=0) print -n NS set temp1 temp1&00004000 set temp1 temp1>>@14 print Register Bank -x temp1 sl 208c 981fa114 sl 2090 00f1981e godsp #:lop if (count>10) goto abort set temp1 lpeek(2178) set temp2 lpeek(217c) set count count+1 if (temp1!=temp2) goto lop goto exit #:abort print Did the DSP die? goto exit #:exit print -n R00 -x08 lpeek(2100) print -n -x08 lpeek(2104) print -n -x08 lpeek(2108) print -n -x08 lpeek(210c) "" print -n -x08 lpeek(2110) print -n -x08 lpeek(2114) print -n -x08 lpeek(2118) print -x08 lpeek(211c) print -n R08 -x08 lpeek(2120) print -n -x08 lpeek(2124) print -n -x08 lpeek(2128) print -n -x08 lpeek(212c) "" print -n -x08 lpeek(2130) print -n -x08 lpeek(2134) print -n -x08 lpeek(2138) print -x08 lpeek(213c) print -n R16 -x08 lpeek(2140) print -n -x08 lpeek(2144) print -n -x08 lpeek(2148) print -n -x08 lpeek(214c) "" print -n -x08 lpeek(2150) print -n -x08 lpeek(2154) print -n -x08 lpeek(2158) print -x08 lpeek(215c) print -n R24 -x08 lpeek(2160) print -n -x08 lpeek(2164) print -n -x08 lpeek(2168) print -n -x08 lpeek(216c) "" print -n -x08 lpeek(2170) print -n -x08 lpeek(2174) print -n "TRASHED!" print "TRASHED!" resetdpc sl f1a100 `gflags getdpc ld g0 1 . alias d_set0 'set g0 lpeek(f1a100) ; set g0 (g0&(~00004000)); sl f1a100 g0' alias d_set1 'set g0 lpeek(f1a100) ; set g0 (g0|00004000); sl f1a100 g0' alias g_set0 'set g0 lpeek(f02100) ; set g0 (g0&(~00004000)); sl f02100 g0' alias g_set1 'set g0 lpeek(f02100) ; set g0 (g0|00004000); sl f02100 g0'