From 09fc82ec891f677240a6d1437046191dd8b4c095 Mon Sep 17 00:00:00 2001 From: peterlemon Date: Fri, 25 Oct 2019 08:42:59 +0100 Subject: [PATCH] CPU SDL/SDR Unaligned Tests --- CPUTest/CPU/LOADSTORE/SD/CPUSD.N64 | Bin 1052672 -> 1052672 bytes CPUTest/CPU/LOADSTORE/SD/CPUSD.asm | 624 ++++++++++++++++++++++++----- CPUTest/CPU/LOADSTORE/SD/CPUSD.png | Bin 8218 -> 10115 bytes 3 files changed, 528 insertions(+), 96 deletions(-) diff --git a/CPUTest/CPU/LOADSTORE/SD/CPUSD.N64 b/CPUTest/CPU/LOADSTORE/SD/CPUSD.N64 index 30c4af600ad9fe0811be7e9b44357ca4e75ee795..3f1b522e52f3cd5b3e6c1bc6ff40fd9b5a91042f 100644 GIT binary patch delta 9728 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 delta 4560 zcmaKwZERCj7{}WQI2erXcHJ9nmbb}x*$Nh!SnvV^Cy=GA&}@Lqodeuj#hQpgL(D~+ zFeSmkqlQ2v_lrn0DFr7OR5FYqM3OP$3n&XI@e2`S#s>@pVtnqsr+e->_vnX{ySDc{ z=l}cvZ=Z8I-B5KytkD*tb2TTDQ$Xt&BU|Ihd=)IWJSg|A=w-mr+dN|diKJQ zuY+E`4~->`m%G7mzC402fkh*#H>C&O|Uxaw)&Rb>ffeIt=1(BN;tj1&7eOXhrt=-TtbK342RXj zFffw@qt)hww`S1%Kz7Iq5NHDW{|9qN& z490xH>Wi?up0nDh7p?X+II6x5T1sqtS-b7|!|7LDst<^#lfuJtO?X()v5V&F?iQF>EPYtG7RV4v!|4(i0{9}heKnFoY=No9L8Vj| z95!2FEPyovIpGuR>R6+A3DrQX;1a?796VgYnIC*wYChK$NqMJCIT^{i;<1Rs{Ywyi z3U|__qzm02SW1(a`|)Lh`?m!55xU!4-tGRI&q&?px*{>0lri9bqLM=Fin@BaL>DYJ zo1J*c6BQH8dZQ)HQqpNe@h2%O#+$6%+6^!~#e;5)>%kkaW_1yOZMWcjP?# zqogNc9w6%r{4FrzZ!Pe5;Uxmv`eNm-A+VeWE#?lL z$wHVHtY|nT5Ww3SG&wai`RzPk262Ub9KVKcCT9th$Er=I@Z4y18~uya$*) zjvoi=2Ha5EC9=>4FShK4c~s=8SlXk zs)KN5odK)P&v`UH-Jm<&Tc$cbU2Su$dOG1+cSzFZwgZM+ERqNM0 z9v^8)h!hvWbkMq0Va%A)d>JUATbap2vD zY!BhFNOvTt42!h#f?ei%o|%ud5w;{NAa2V{>h(iKBI>Vg3tX6T*2&y diff --git a/CPUTest/CPU/LOADSTORE/SD/CPUSD.asm b/CPUTest/CPU/LOADSTORE/SD/CPUSD.asm index 80b16321..436669b1 100644 --- a/CPUTest/CPU/LOADSTORE/SD/CPUSD.asm +++ b/CPUTest/CPU/LOADSTORE/SD/CPUSD.asm @@ -313,13 +313,13 @@ ClearScreen: PrintString($A0100000,8,88,FontRed,SDL,2) // Print Text String To VRAM Using Font At X,Y Position - la a0,VALUELONGA // A0 = Long Data Offset + la a0,VALUELONGB // A0 = Long Data Offset ld t0,0(a0) // T0 = Test Long Data la a0,DWORD // A0 = DWORD Offset sdl t0,0(a0) // DWORD = Long Data PrintString($A0100000,80,88,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position - PrintValue($A0100000,88,88,FontBlack,VALUELONGA,7) // Print HEX Chars To VRAM Using Font At X,Y Position - PrintString($A0100000,360,88,FontBlack,TEXTLONGA,0) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,88,88,FontBlack,VALUELONGB,7) // Print HEX Chars To VRAM Using Font At X,Y Position + PrintString($A0100000,232,88,FontBlack,TEXTLONGB,16) // Print Text String To VRAM Using Font At X,Y Position PrintString($A0100000,376,88,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position PrintValue($A0100000,384,88,FontBlack,DWORD,7) // Print Text String To VRAM Using Font At X,Y Position la a0,DWORD // A0 = Long Data Offset @@ -338,7 +338,7 @@ ClearScreen: la a0,VALUELONGB // A0 = Long Data Offset ld t0,0(a0) // T0 = Test Long Data la a0,DWORD // A0 = DWORD Offset - sdl t0,0(a0) // DWORD = Long Data + sdl t0,1(a0) // DWORD = Long Data PrintString($A0100000,80,96,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position PrintValue($A0100000,88,96,FontBlack,VALUELONGB,7) // Print HEX Chars To VRAM Using Font At X,Y Position PrintString($A0100000,232,96,FontBlack,TEXTLONGB,16) // Print Text String To VRAM Using Font At X,Y Position @@ -357,13 +357,13 @@ ClearScreen: PrintString($A0100000,528,96,FontGreen,PASS,3) // Print Text String To VRAM Using Font At X,Y Position SDLENDB: - la a0,VALUELONGC // A0 = Long Data Offset + la a0,VALUELONGB // A0 = Long Data Offset ld t0,0(a0) // T0 = Test Long Data la a0,DWORD // A0 = DWORD Offset - sdl t0,0(a0) // DWORD = Long Data + sdl t0,2(a0) // DWORD = Long Data PrintString($A0100000,80,104,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position - PrintValue($A0100000,88,104,FontBlack,VALUELONGC,7) // Print HEX Chars To VRAM Using Font At X,Y Position - PrintString($A0100000,288,104,FontBlack,TEXTLONGC,9) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,88,104,FontBlack,VALUELONGB,7) // Print HEX Chars To VRAM Using Font At X,Y Position + PrintString($A0100000,232,104,FontBlack,TEXTLONGB,16) // Print Text String To VRAM Using Font At X,Y Position PrintString($A0100000,376,104,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position PrintValue($A0100000,384,104,FontBlack,DWORD,7) // Print Text String To VRAM Using Font At X,Y Position la a0,DWORD // A0 = Long Data Offset @@ -379,13 +379,13 @@ ClearScreen: PrintString($A0100000,528,104,FontGreen,PASS,3) // Print Text String To VRAM Using Font At X,Y Position SDLENDC: - la a0,VALUELONGD // A0 = Long Data Offset + la a0,VALUELONGB // A0 = Long Data Offset ld t0,0(a0) // T0 = Test Long Data la a0,DWORD // A0 = DWORD Offset - sdl t0,0(a0) // DWORD = Long Data + sdl t0,3(a0) // DWORD = Long Data PrintString($A0100000,80,112,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position - PrintValue($A0100000,88,112,FontBlack,VALUELONGD,7) // Print HEX Chars To VRAM Using Font At X,Y Position - PrintString($A0100000,232,112,FontBlack,TEXTLONGD,16) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,88,112,FontBlack,VALUELONGB,7) // Print HEX Chars To VRAM Using Font At X,Y Position + PrintString($A0100000,232,112,FontBlack,TEXTLONGB,16) // Print Text String To VRAM Using Font At X,Y Position PrintString($A0100000,376,112,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position PrintValue($A0100000,384,112,FontBlack,DWORD,7) // Print Text String To VRAM Using Font At X,Y Position la a0,DWORD // A0 = Long Data Offset @@ -401,13 +401,13 @@ ClearScreen: PrintString($A0100000,528,112,FontGreen,PASS,3) // Print Text String To VRAM Using Font At X,Y Position SDLENDD: - la a0,VALUELONGE // A0 = Long Data Offset + la a0,VALUELONGB // A0 = Long Data Offset ld t0,0(a0) // T0 = Test Long Data la a0,DWORD // A0 = DWORD Offset - sdl t0,0(a0) // DWORD = Long Data + sdl t0,4(a0) // DWORD = Long Data PrintString($A0100000,80,120,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position - PrintValue($A0100000,88,120,FontBlack,VALUELONGE,7) // Print HEX Chars To VRAM Using Font At X,Y Position - PrintString($A0100000,224,120,FontBlack,TEXTLONGE,17) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,88,120,FontBlack,VALUELONGB,7) // Print HEX Chars To VRAM Using Font At X,Y Position + PrintString($A0100000,232,120,FontBlack,TEXTLONGB,16) // Print Text String To VRAM Using Font At X,Y Position PrintString($A0100000,376,120,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position PrintValue($A0100000,384,120,FontBlack,DWORD,7) // Print Text String To VRAM Using Font At X,Y Position la a0,DWORD // A0 = Long Data Offset @@ -423,13 +423,13 @@ ClearScreen: PrintString($A0100000,528,120,FontGreen,PASS,3) // Print Text String To VRAM Using Font At X,Y Position SDLENDE: - la a0,VALUELONGF // A0 = Long Data Offset + la a0,VALUELONGB // A0 = Long Data Offset ld t0,0(a0) // T0 = Test Long Data la a0,DWORD // A0 = DWORD Offset - sdl t0,0(a0) // DWORD = Long Data + sdl t0,5(a0) // DWORD = Long Data PrintString($A0100000,80,128,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position - PrintValue($A0100000,88,128,FontBlack,VALUELONGF,7) // Print HEX Chars To VRAM Using Font At X,Y Position - PrintString($A0100000,280,128,FontBlack,TEXTLONGF,10) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,88,128,FontBlack,VALUELONGB,7) // Print HEX Chars To VRAM Using Font At X,Y Position + PrintString($A0100000,232,128,FontBlack,TEXTLONGB,16) // Print Text String To VRAM Using Font At X,Y Position PrintString($A0100000,376,128,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position PrintValue($A0100000,384,128,FontBlack,DWORD,7) // Print Text String To VRAM Using Font At X,Y Position la a0,DWORD // A0 = Long Data Offset @@ -445,13 +445,13 @@ ClearScreen: PrintString($A0100000,528,128,FontGreen,PASS,3) // Print Text String To VRAM Using Font At X,Y Position SDLENDF: - la a0,VALUELONGG // A0 = Long Data Offset + la a0,VALUELONGB // A0 = Long Data Offset ld t0,0(a0) // T0 = Test Long Data la a0,DWORD // A0 = DWORD Offset - sdl t0,0(a0) // DWORD = Long Data + sdl t0,6(a0) // DWORD = Long Data PrintString($A0100000,80,136,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position - PrintValue($A0100000,88,136,FontBlack,VALUELONGG,7) // Print HEX Chars To VRAM Using Font At X,Y Position - PrintString($A0100000,224,136,FontBlack,TEXTLONGG,17) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,88,136,FontBlack,VALUELONGB,7) // Print HEX Chars To VRAM Using Font At X,Y Position + PrintString($A0100000,232,136,FontBlack,TEXTLONGB,16) // Print Text String To VRAM Using Font At X,Y Position PrintString($A0100000,376,136,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position PrintValue($A0100000,384,136,FontBlack,DWORD,7) // Print Text String To VRAM Using Font At X,Y Position la a0,DWORD // A0 = Long Data Offset @@ -467,144 +467,164 @@ ClearScreen: PrintString($A0100000,528,136,FontGreen,PASS,3) // Print Text String To VRAM Using Font At X,Y Position SDLENDG: + la a0,VALUELONGB // A0 = Long Data Offset + ld t0,0(a0) // T0 = Test Long Data + la a0,DWORD // A0 = DWORD Offset + sdl t0,7(a0) // DWORD = Long Data + PrintString($A0100000,80,144,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,88,144,FontBlack,VALUELONGB,7) // Print HEX Chars To VRAM Using Font At X,Y Position + PrintString($A0100000,232,144,FontBlack,TEXTLONGB,16) // Print Text String To VRAM Using Font At X,Y Position + PrintString($A0100000,376,144,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,384,144,FontBlack,DWORD,7) // Print Text String To VRAM Using Font At X,Y Position + la a0,DWORD // A0 = Long Data Offset + ld t0,0(a0) // T0 = Long Data + la a0,SDLCHECKH // A0 = Long Check Data Offset + ld t1,0(a0) // T1 = Long Check Data + beq t0,t1,SDLPASSH // Compare Result Equality With Check Data + nop // Delay Slot + PrintString($A0100000,528,144,FontRed,FAIL,3) // Print Text String To VRAM Using Font At X,Y Position + j SDLENDH + nop // Delay Slot + SDLPASSH: + PrintString($A0100000,528,144,FontGreen,PASS,3) // Print Text String To VRAM Using Font At X,Y Position + SDLENDH: - PrintString($A0100000,8,152,FontRed,SDR,2) // Print Text String To VRAM Using Font At X,Y Position - la a0,VALUELONGA // A0 = Long Data Offset + la a0,VALUELONGG // A0 = Long Data Offset ld t0,0(a0) // T0 = Test Long Data la a0,DWORD // A0 = DWORD Offset - sdr t0,0(a0) // DWORD = Long Data + sdl t0,0(a0) // DWORD = Long Data PrintString($A0100000,80,152,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position - PrintValue($A0100000,88,152,FontBlack,VALUELONGA,7) // Print HEX Chars To VRAM Using Font At X,Y Position - PrintString($A0100000,360,152,FontBlack,TEXTLONGA,0) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,88,152,FontBlack,VALUELONGG,7) // Print HEX Chars To VRAM Using Font At X,Y Position + PrintString($A0100000,224,152,FontBlack,TEXTLONGG,17) // Print Text String To VRAM Using Font At X,Y Position PrintString($A0100000,376,152,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position PrintValue($A0100000,384,152,FontBlack,DWORD,7) // Print Text String To VRAM Using Font At X,Y Position la a0,DWORD // A0 = Long Data Offset ld t0,0(a0) // T0 = Long Data - la a0,SDRCHECKA // A0 = Long Check Data Offset + la a0,SDLCHECKI // A0 = Long Check Data Offset ld t1,0(a0) // T1 = Long Check Data - beq t0,t1,SDRPASSA // Compare Result Equality With Check Data + beq t0,t1,SDLPASSI // Compare Result Equality With Check Data nop // Delay Slot PrintString($A0100000,528,152,FontRed,FAIL,3) // Print Text String To VRAM Using Font At X,Y Position - j SDRENDA + j SDLENDI nop // Delay Slot - SDRPASSA: + SDLPASSI: PrintString($A0100000,528,152,FontGreen,PASS,3) // Print Text String To VRAM Using Font At X,Y Position - SDRENDA: + SDLENDI: - la a0,VALUELONGB // A0 = Long Data Offset + la a0,VALUELONGG // A0 = Long Data Offset ld t0,0(a0) // T0 = Test Long Data la a0,DWORD // A0 = DWORD Offset - sdr t0,0(a0) // DWORD = Long Data + sdl t0,1(a0) // DWORD = Long Data PrintString($A0100000,80,160,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position - PrintValue($A0100000,88,160,FontBlack,VALUELONGB,7) // Print HEX Chars To VRAM Using Font At X,Y Position - PrintString($A0100000,232,160,FontBlack,TEXTLONGB,16) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,88,160,FontBlack,VALUELONGG,7) // Print HEX Chars To VRAM Using Font At X,Y Position + PrintString($A0100000,224,160,FontBlack,TEXTLONGG,17) // Print Text String To VRAM Using Font At X,Y Position PrintString($A0100000,376,160,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position PrintValue($A0100000,384,160,FontBlack,DWORD,7) // Print Text String To VRAM Using Font At X,Y Position la a0,DWORD // A0 = Long Data Offset ld t0,0(a0) // T0 = Long Data - la a0,SDRCHECKB // A0 = Long Check Data Offset + la a0,SDLCHECKJ // A0 = Long Check Data Offset ld t1,0(a0) // T1 = Long Check Data - beq t0,t1,SDRPASSB // Compare Result Equality With Check Data + beq t0,t1,SDLPASSJ // Compare Result Equality With Check Data nop // Delay Slot PrintString($A0100000,528,160,FontRed,FAIL,3) // Print Text String To VRAM Using Font At X,Y Position - j SDRENDB + j SDLENDJ nop // Delay Slot - SDRPASSB: + SDLPASSJ: PrintString($A0100000,528,160,FontGreen,PASS,3) // Print Text String To VRAM Using Font At X,Y Position - SDRENDB: + SDLENDJ: - la a0,VALUELONGC // A0 = Long Data Offset + la a0,VALUELONGG // A0 = Long Data Offset ld t0,0(a0) // T0 = Test Long Data la a0,DWORD // A0 = DWORD Offset - sdr t0,0(a0) // DWORD = Long Data + sdl t0,2(a0) // DWORD = Long Data PrintString($A0100000,80,168,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position - PrintValue($A0100000,88,168,FontBlack,VALUELONGC,7) // Print HEX Chars To VRAM Using Font At X,Y Position - PrintString($A0100000,288,168,FontBlack,TEXTLONGC,9) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,88,168,FontBlack,VALUELONGG,7) // Print HEX Chars To VRAM Using Font At X,Y Position + PrintString($A0100000,224,168,FontBlack,TEXTLONGG,17) // Print Text String To VRAM Using Font At X,Y Position PrintString($A0100000,376,168,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position PrintValue($A0100000,384,168,FontBlack,DWORD,7) // Print Text String To VRAM Using Font At X,Y Position la a0,DWORD // A0 = Long Data Offset ld t0,0(a0) // T0 = Long Data - la a0,SDRCHECKC // A0 = Long Check Data Offset + la a0,SDLCHECKK // A0 = Long Check Data Offset ld t1,0(a0) // T1 = Long Check Data - beq t0,t1,SDRPASSC // Compare Result Equality With Check Data + beq t0,t1,SDLPASSK // Compare Result Equality With Check Data nop // Delay Slot PrintString($A0100000,528,168,FontRed,FAIL,3) // Print Text String To VRAM Using Font At X,Y Position - j SDRENDC + j SDLENDK nop // Delay Slot - SDRPASSC: + SDLPASSK: PrintString($A0100000,528,168,FontGreen,PASS,3) // Print Text String To VRAM Using Font At X,Y Position - SDRENDC: + SDLENDK: - la a0,VALUELONGD // A0 = Long Data Offset + la a0,VALUELONGG // A0 = Long Data Offset ld t0,0(a0) // T0 = Test Long Data la a0,DWORD // A0 = DWORD Offset - sdr t0,0(a0) // DWORD = Long Data + sdl t0,3(a0) // DWORD = Long Data PrintString($A0100000,80,176,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position - PrintValue($A0100000,88,176,FontBlack,VALUELONGD,7) // Print HEX Chars To VRAM Using Font At X,Y Position - PrintString($A0100000,232,176,FontBlack,TEXTLONGD,16) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,88,176,FontBlack,VALUELONGG,7) // Print HEX Chars To VRAM Using Font At X,Y Position + PrintString($A0100000,224,176,FontBlack,TEXTLONGG,17) // Print Text String To VRAM Using Font At X,Y Position PrintString($A0100000,376,176,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position PrintValue($A0100000,384,176,FontBlack,DWORD,7) // Print Text String To VRAM Using Font At X,Y Position la a0,DWORD // A0 = Long Data Offset ld t0,0(a0) // T0 = Long Data - la a0,SDRCHECKD // A0 = Long Check Data Offset + la a0,SDLCHECKL // A0 = Long Check Data Offset ld t1,0(a0) // T1 = Long Check Data - beq t0,t1,SDRPASSD // Compare Result Equality With Check Data + beq t0,t1,SDLPASSL // Compare Result Equality With Check Data nop // Delay Slot PrintString($A0100000,528,176,FontRed,FAIL,3) // Print Text String To VRAM Using Font At X,Y Position - j SDRENDD + j SDLENDL nop // Delay Slot - SDRPASSD: + SDLPASSL: PrintString($A0100000,528,176,FontGreen,PASS,3) // Print Text String To VRAM Using Font At X,Y Position - SDRENDD: + SDLENDL: - la a0,VALUELONGE // A0 = Long Data Offset + la a0,VALUELONGG // A0 = Long Data Offset ld t0,0(a0) // T0 = Test Long Data la a0,DWORD // A0 = DWORD Offset - sdr t0,0(a0) // DWORD = Long Data + sdl t0,4(a0) // DWORD = Long Data PrintString($A0100000,80,184,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position - PrintValue($A0100000,88,184,FontBlack,VALUELONGE,7) // Print HEX Chars To VRAM Using Font At X,Y Position - PrintString($A0100000,224,184,FontBlack,TEXTLONGE,17) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,88,184,FontBlack,VALUELONGG,7) // Print HEX Chars To VRAM Using Font At X,Y Position + PrintString($A0100000,224,184,FontBlack,TEXTLONGG,17) // Print Text String To VRAM Using Font At X,Y Position PrintString($A0100000,376,184,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position PrintValue($A0100000,384,184,FontBlack,DWORD,7) // Print Text String To VRAM Using Font At X,Y Position la a0,DWORD // A0 = Long Data Offset ld t0,0(a0) // T0 = Long Data - la a0,SDRCHECKE // A0 = Long Check Data Offset + la a0,SDLCHECKM // A0 = Long Check Data Offset ld t1,0(a0) // T1 = Long Check Data - beq t0,t1,SDRPASSE // Compare Result Equality With Check Data + beq t0,t1,SDLPASSM // Compare Result Equality With Check Data nop // Delay Slot PrintString($A0100000,528,184,FontRed,FAIL,3) // Print Text String To VRAM Using Font At X,Y Position - j SDRENDE + j SDLENDM nop // Delay Slot - SDRPASSE: + SDLPASSM: PrintString($A0100000,528,184,FontGreen,PASS,3) // Print Text String To VRAM Using Font At X,Y Position - SDRENDE: + SDLENDM: - la a0,VALUELONGF // A0 = Long Data Offset + la a0,VALUELONGG // A0 = Long Data Offset ld t0,0(a0) // T0 = Test Long Data la a0,DWORD // A0 = DWORD Offset - sdr t0,0(a0) // DWORD = Long Data + sdl t0,5(a0) // DWORD = Long Data PrintString($A0100000,80,192,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position - PrintValue($A0100000,88,192,FontBlack,VALUELONGF,7) // Print HEX Chars To VRAM Using Font At X,Y Position - PrintString($A0100000,280,192,FontBlack,TEXTLONGF,10) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,88,192,FontBlack,VALUELONGG,7) // Print HEX Chars To VRAM Using Font At X,Y Position + PrintString($A0100000,224,192,FontBlack,TEXTLONGG,17) // Print Text String To VRAM Using Font At X,Y Position PrintString($A0100000,376,192,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position PrintValue($A0100000,384,192,FontBlack,DWORD,7) // Print Text String To VRAM Using Font At X,Y Position la a0,DWORD // A0 = Long Data Offset ld t0,0(a0) // T0 = Long Data - la a0,SDRCHECKF // A0 = Long Check Data Offset + la a0,SDLCHECKN // A0 = Long Check Data Offset ld t1,0(a0) // T1 = Long Check Data - beq t0,t1,SDRPASSF // Compare Result Equality With Check Data + beq t0,t1,SDLPASSN // Compare Result Equality With Check Data nop // Delay Slot PrintString($A0100000,528,192,FontRed,FAIL,3) // Print Text String To VRAM Using Font At X,Y Position - j SDRENDF + j SDLENDN nop // Delay Slot - SDRPASSF: + SDLPASSN: PrintString($A0100000,528,192,FontGreen,PASS,3) // Print Text String To VRAM Using Font At X,Y Position - SDRENDF: + SDLENDN: la a0,VALUELONGG // A0 = Long Data Offset ld t0,0(a0) // T0 = Test Long Data la a0,DWORD // A0 = DWORD Offset - sdr t0,0(a0) // DWORD = Long Data + sdl t0,6(a0) // DWORD = Long Data PrintString($A0100000,80,200,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position PrintValue($A0100000,88,200,FontBlack,VALUELONGG,7) // Print HEX Chars To VRAM Using Font At X,Y Position PrintString($A0100000,224,200,FontBlack,TEXTLONGG,17) // Print Text String To VRAM Using Font At X,Y Position @@ -612,19 +632,395 @@ ClearScreen: PrintValue($A0100000,384,200,FontBlack,DWORD,7) // Print Text String To VRAM Using Font At X,Y Position la a0,DWORD // A0 = Long Data Offset ld t0,0(a0) // T0 = Long Data + la a0,SDLCHECKO // A0 = Long Check Data Offset + ld t1,0(a0) // T1 = Long Check Data + beq t0,t1,SDLPASSO // Compare Result Equality With Check Data + nop // Delay Slot + PrintString($A0100000,528,200,FontRed,FAIL,3) // Print Text String To VRAM Using Font At X,Y Position + j SDLENDO + nop // Delay Slot + SDLPASSO: + PrintString($A0100000,528,200,FontGreen,PASS,3) // Print Text String To VRAM Using Font At X,Y Position + SDLENDO: + + la a0,VALUELONGG // A0 = Long Data Offset + ld t0,0(a0) // T0 = Test Long Data + la a0,DWORD // A0 = DWORD Offset + sdl t0,7(a0) // DWORD = Long Data + PrintString($A0100000,80,208,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,88,208,FontBlack,VALUELONGG,7) // Print HEX Chars To VRAM Using Font At X,Y Position + PrintString($A0100000,224,208,FontBlack,TEXTLONGG,17) // Print Text String To VRAM Using Font At X,Y Position + PrintString($A0100000,376,208,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,384,208,FontBlack,DWORD,7) // Print Text String To VRAM Using Font At X,Y Position + la a0,DWORD // A0 = Long Data Offset + ld t0,0(a0) // T0 = Long Data + la a0,SDLCHECKP // A0 = Long Check Data Offset + ld t1,0(a0) // T1 = Long Check Data + beq t0,t1,SDLPASSP // Compare Result Equality With Check Data + nop // Delay Slot + PrintString($A0100000,528,208,FontRed,FAIL,3) // Print Text String To VRAM Using Font At X,Y Position + j SDLENDP + nop // Delay Slot + SDLPASSP: + PrintString($A0100000,528,208,FontGreen,PASS,3) // Print Text String To VRAM Using Font At X,Y Position + SDLENDP: + + + PrintString($A0100000,8,224,FontRed,SDR,2) // Print Text String To VRAM Using Font At X,Y Position + la a0,VALUELONGB // A0 = Long Data Offset + ld t0,0(a0) // T0 = Test Long Data + la a0,DWORD // A0 = DWORD Offset + sdr t0,0(a0) // DWORD = Long Data + PrintString($A0100000,80,224,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,88,224,FontBlack,VALUELONGB,7) // Print HEX Chars To VRAM Using Font At X,Y Position + PrintString($A0100000,232,224,FontBlack,TEXTLONGB,16) // Print Text String To VRAM Using Font At X,Y Position + PrintString($A0100000,376,224,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,384,224,FontBlack,DWORD,7) // Print Text String To VRAM Using Font At X,Y Position + la a0,DWORD // A0 = Long Data Offset + ld t0,0(a0) // T0 = Long Data + la a0,SDRCHECKA // A0 = Long Check Data Offset + ld t1,0(a0) // T1 = Long Check Data + beq t0,t1,SDRPASSA // Compare Result Equality With Check Data + nop // Delay Slot + PrintString($A0100000,528,224,FontRed,FAIL,3) // Print Text String To VRAM Using Font At X,Y Position + j SDRENDA + nop // Delay Slot + SDRPASSA: + PrintString($A0100000,528,224,FontGreen,PASS,3) // Print Text String To VRAM Using Font At X,Y Position + SDRENDA: + + la a0,VALUELONGB // A0 = Long Data Offset + ld t0,0(a0) // T0 = Test Long Data + la a0,DWORD // A0 = DWORD Offset + sdr t0,1(a0) // DWORD = Long Data + PrintString($A0100000,80,232,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,88,232,FontBlack,VALUELONGB,7) // Print HEX Chars To VRAM Using Font At X,Y Position + PrintString($A0100000,232,232,FontBlack,TEXTLONGB,16) // Print Text String To VRAM Using Font At X,Y Position + PrintString($A0100000,376,232,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,384,232,FontBlack,DWORD,7) // Print Text String To VRAM Using Font At X,Y Position + la a0,DWORD // A0 = Long Data Offset + ld t0,0(a0) // T0 = Long Data + la a0,SDRCHECKB // A0 = Long Check Data Offset + ld t1,0(a0) // T1 = Long Check Data + beq t0,t1,SDRPASSB // Compare Result Equality With Check Data + nop // Delay Slot + PrintString($A0100000,528,232,FontRed,FAIL,3) // Print Text String To VRAM Using Font At X,Y Position + j SDRENDB + nop // Delay Slot + SDRPASSB: + PrintString($A0100000,528,232,FontGreen,PASS,3) // Print Text String To VRAM Using Font At X,Y Position + SDRENDB: + + la a0,VALUELONGB // A0 = Long Data Offset + ld t0,0(a0) // T0 = Test Long Data + la a0,DWORD // A0 = DWORD Offset + sdr t0,2(a0) // DWORD = Long Data + PrintString($A0100000,80,240,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,88,240,FontBlack,VALUELONGB,7) // Print HEX Chars To VRAM Using Font At X,Y Position + PrintString($A0100000,232,240,FontBlack,TEXTLONGB,16) // Print Text String To VRAM Using Font At X,Y Position + PrintString($A0100000,376,240,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,384,240,FontBlack,DWORD,7) // Print Text String To VRAM Using Font At X,Y Position + la a0,DWORD // A0 = Long Data Offset + ld t0,0(a0) // T0 = Long Data + la a0,SDRCHECKC // A0 = Long Check Data Offset + ld t1,0(a0) // T1 = Long Check Data + beq t0,t1,SDRPASSC // Compare Result Equality With Check Data + nop // Delay Slot + PrintString($A0100000,528,240,FontRed,FAIL,3) // Print Text String To VRAM Using Font At X,Y Position + j SDRENDC + nop // Delay Slot + SDRPASSC: + PrintString($A0100000,528,240,FontGreen,PASS,3) // Print Text String To VRAM Using Font At X,Y Position + SDRENDC: + + la a0,VALUELONGB // A0 = Long Data Offset + ld t0,0(a0) // T0 = Test Long Data + la a0,DWORD // A0 = DWORD Offset + sdr t0,3(a0) // DWORD = Long Data + PrintString($A0100000,80,248,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,88,248,FontBlack,VALUELONGB,7) // Print HEX Chars To VRAM Using Font At X,Y Position + PrintString($A0100000,232,248,FontBlack,TEXTLONGB,16) // Print Text String To VRAM Using Font At X,Y Position + PrintString($A0100000,376,248,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,384,248,FontBlack,DWORD,7) // Print Text String To VRAM Using Font At X,Y Position + la a0,DWORD // A0 = Long Data Offset + ld t0,0(a0) // T0 = Long Data + la a0,SDRCHECKD // A0 = Long Check Data Offset + ld t1,0(a0) // T1 = Long Check Data + beq t0,t1,SDRPASSD // Compare Result Equality With Check Data + nop // Delay Slot + PrintString($A0100000,528,248,FontRed,FAIL,3) // Print Text String To VRAM Using Font At X,Y Position + j SDRENDD + nop // Delay Slot + SDRPASSD: + PrintString($A0100000,528,248,FontGreen,PASS,3) // Print Text String To VRAM Using Font At X,Y Position + SDRENDD: + + la a0,VALUELONGB // A0 = Long Data Offset + ld t0,0(a0) // T0 = Test Long Data + la a0,DWORD // A0 = DWORD Offset + sdr t0,4(a0) // DWORD = Long Data + PrintString($A0100000,80,256,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,88,256,FontBlack,VALUELONGB,7) // Print HEX Chars To VRAM Using Font At X,Y Position + PrintString($A0100000,232,256,FontBlack,TEXTLONGB,16) // Print Text String To VRAM Using Font At X,Y Position + PrintString($A0100000,376,256,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,384,256,FontBlack,DWORD,7) // Print Text String To VRAM Using Font At X,Y Position + la a0,DWORD // A0 = Long Data Offset + ld t0,0(a0) // T0 = Long Data + la a0,SDRCHECKE // A0 = Long Check Data Offset + ld t1,0(a0) // T1 = Long Check Data + beq t0,t1,SDRPASSE // Compare Result Equality With Check Data + nop // Delay Slot + PrintString($A0100000,528,256,FontRed,FAIL,3) // Print Text String To VRAM Using Font At X,Y Position + j SDRENDE + nop // Delay Slot + SDRPASSE: + PrintString($A0100000,528,256,FontGreen,PASS,3) // Print Text String To VRAM Using Font At X,Y Position + SDRENDE: + + la a0,VALUELONGB // A0 = Long Data Offset + ld t0,0(a0) // T0 = Test Long Data + la a0,DWORD // A0 = DWORD Offset + sdr t0,5(a0) // DWORD = Long Data + PrintString($A0100000,80,264,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,88,264,FontBlack,VALUELONGB,7) // Print HEX Chars To VRAM Using Font At X,Y Position + PrintString($A0100000,232,264,FontBlack,TEXTLONGB,16) // Print Text String To VRAM Using Font At X,Y Position + PrintString($A0100000,376,264,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,384,264,FontBlack,DWORD,7) // Print Text String To VRAM Using Font At X,Y Position + la a0,DWORD // A0 = Long Data Offset + ld t0,0(a0) // T0 = Long Data + la a0,SDRCHECKF // A0 = Long Check Data Offset + ld t1,0(a0) // T1 = Long Check Data + beq t0,t1,SDRPASSF // Compare Result Equality With Check Data + nop // Delay Slot + PrintString($A0100000,528,264,FontRed,FAIL,3) // Print Text String To VRAM Using Font At X,Y Position + j SDRENDF + nop // Delay Slot + SDRPASSF: + PrintString($A0100000,528,264,FontGreen,PASS,3) // Print Text String To VRAM Using Font At X,Y Position + SDRENDF: + + la a0,VALUELONGB // A0 = Long Data Offset + ld t0,0(a0) // T0 = Test Long Data + la a0,DWORD // A0 = DWORD Offset + sdr t0,6(a0) // DWORD = Long Data + PrintString($A0100000,80,272,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,88,272,FontBlack,VALUELONGB,7) // Print HEX Chars To VRAM Using Font At X,Y Position + PrintString($A0100000,232,272,FontBlack,TEXTLONGB,16) // Print Text String To VRAM Using Font At X,Y Position + PrintString($A0100000,376,272,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,384,272,FontBlack,DWORD,7) // Print Text String To VRAM Using Font At X,Y Position + la a0,DWORD // A0 = Long Data Offset + ld t0,0(a0) // T0 = Long Data la a0,SDRCHECKG // A0 = Long Check Data Offset ld t1,0(a0) // T1 = Long Check Data beq t0,t1,SDRPASSG // Compare Result Equality With Check Data nop // Delay Slot - PrintString($A0100000,528,200,FontRed,FAIL,3) // Print Text String To VRAM Using Font At X,Y Position + PrintString($A0100000,528,272,FontRed,FAIL,3) // Print Text String To VRAM Using Font At X,Y Position j SDRENDG nop // Delay Slot SDRPASSG: - PrintString($A0100000,528,200,FontGreen,PASS,3) // Print Text String To VRAM Using Font At X,Y Position + PrintString($A0100000,528,272,FontGreen,PASS,3) // Print Text String To VRAM Using Font At X,Y Position SDRENDG: + la a0,VALUELONGB // A0 = Long Data Offset + ld t0,0(a0) // T0 = Test Long Data + la a0,DWORD // A0 = DWORD Offset + sdr t0,7(a0) // DWORD = Long Data + PrintString($A0100000,80,280,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,88,280,FontBlack,VALUELONGB,7) // Print HEX Chars To VRAM Using Font At X,Y Position + PrintString($A0100000,232,280,FontBlack,TEXTLONGB,16) // Print Text String To VRAM Using Font At X,Y Position + PrintString($A0100000,376,280,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,384,280,FontBlack,DWORD,7) // Print Text String To VRAM Using Font At X,Y Position + la a0,DWORD // A0 = Long Data Offset + ld t0,0(a0) // T0 = Long Data + la a0,SDRCHECKH // A0 = Long Check Data Offset + ld t1,0(a0) // T1 = Long Check Data + beq t0,t1,SDRPASSH // Compare Result Equality With Check Data + nop // Delay Slot + PrintString($A0100000,528,280,FontRed,FAIL,3) // Print Text String To VRAM Using Font At X,Y Position + j SDRENDH + nop // Delay Slot + SDRPASSH: + PrintString($A0100000,528,280,FontGreen,PASS,3) // Print Text String To VRAM Using Font At X,Y Position + SDRENDH: + + la a0,VALUELONGG // A0 = Long Data Offset + ld t0,0(a0) // T0 = Test Long Data + la a0,DWORD // A0 = DWORD Offset + sdr t0,0(a0) // DWORD = Long Data + PrintString($A0100000,80,288,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,88,288,FontBlack,VALUELONGG,7) // Print HEX Chars To VRAM Using Font At X,Y Position + PrintString($A0100000,224,288,FontBlack,TEXTLONGG,17) // Print Text String To VRAM Using Font At X,Y Position + PrintString($A0100000,376,288,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,384,288,FontBlack,DWORD,7) // Print Text String To VRAM Using Font At X,Y Position + la a0,DWORD // A0 = Long Data Offset + ld t0,0(a0) // T0 = Long Data + la a0,SDRCHECKI // A0 = Long Check Data Offset + ld t1,0(a0) // T1 = Long Check Data + beq t0,t1,SDRPASSI // Compare Result Equality With Check Data + nop // Delay Slot + PrintString($A0100000,528,288,FontRed,FAIL,3) // Print Text String To VRAM Using Font At X,Y Position + j SDRENDI + nop // Delay Slot + SDRPASSI: + PrintString($A0100000,528,288,FontGreen,PASS,3) // Print Text String To VRAM Using Font At X,Y Position + SDRENDI: + + la a0,VALUELONGG // A0 = Long Data Offset + ld t0,0(a0) // T0 = Test Long Data + la a0,DWORD // A0 = DWORD Offset + sdr t0,1(a0) // DWORD = Long Data + PrintString($A0100000,80,296,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,88,296,FontBlack,VALUELONGG,7) // Print HEX Chars To VRAM Using Font At X,Y Position + PrintString($A0100000,224,296,FontBlack,TEXTLONGG,17) // Print Text String To VRAM Using Font At X,Y Position + PrintString($A0100000,376,296,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,384,296,FontBlack,DWORD,7) // Print Text String To VRAM Using Font At X,Y Position + la a0,DWORD // A0 = Long Data Offset + ld t0,0(a0) // T0 = Long Data + la a0,SDRCHECKJ // A0 = Long Check Data Offset + ld t1,0(a0) // T1 = Long Check Data + beq t0,t1,SDRPASSJ // Compare Result Equality With Check Data + nop // Delay Slot + PrintString($A0100000,528,296,FontRed,FAIL,3) // Print Text String To VRAM Using Font At X,Y Position + j SDRENDJ + nop // Delay Slot + SDRPASSJ: + PrintString($A0100000,528,296,FontGreen,PASS,3) // Print Text String To VRAM Using Font At X,Y Position + SDRENDJ: + + la a0,VALUELONGG // A0 = Long Data Offset + ld t0,0(a0) // T0 = Test Long Data + la a0,DWORD // A0 = DWORD Offset + sdr t0,2(a0) // DWORD = Long Data + PrintString($A0100000,80,304,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,88,304,FontBlack,VALUELONGG,7) // Print HEX Chars To VRAM Using Font At X,Y Position + PrintString($A0100000,224,304,FontBlack,TEXTLONGG,17) // Print Text String To VRAM Using Font At X,Y Position + PrintString($A0100000,376,304,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,384,304,FontBlack,DWORD,7) // Print Text String To VRAM Using Font At X,Y Position + la a0,DWORD // A0 = Long Data Offset + ld t0,0(a0) // T0 = Long Data + la a0,SDRCHECKK // A0 = Long Check Data Offset + ld t1,0(a0) // T1 = Long Check Data + beq t0,t1,SDRPASSK // Compare Result Equality With Check Data + nop // Delay Slot + PrintString($A0100000,528,304,FontRed,FAIL,3) // Print Text String To VRAM Using Font At X,Y Position + j SDRENDK + nop // Delay Slot + SDRPASSK: + PrintString($A0100000,528,304,FontGreen,PASS,3) // Print Text String To VRAM Using Font At X,Y Position + SDRENDK: - PrintString($A0100000,0,208,FontBlack,PAGEBREAK,79) // Print Text String To VRAM Using Font At X,Y Position + la a0,VALUELONGG // A0 = Long Data Offset + ld t0,0(a0) // T0 = Test Long Data + la a0,DWORD // A0 = DWORD Offset + sdr t0,3(a0) // DWORD = Long Data + PrintString($A0100000,80,312,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,88,312,FontBlack,VALUELONGG,7) // Print HEX Chars To VRAM Using Font At X,Y Position + PrintString($A0100000,224,312,FontBlack,TEXTLONGG,17) // Print Text String To VRAM Using Font At X,Y Position + PrintString($A0100000,376,312,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,384,312,FontBlack,DWORD,7) // Print Text String To VRAM Using Font At X,Y Position + la a0,DWORD // A0 = Long Data Offset + ld t0,0(a0) // T0 = Long Data + la a0,SDRCHECKL // A0 = Long Check Data Offset + ld t1,0(a0) // T1 = Long Check Data + beq t0,t1,SDRPASSL // Compare Result Equality With Check Data + nop // Delay Slot + PrintString($A0100000,528,312,FontRed,FAIL,3) // Print Text String To VRAM Using Font At X,Y Position + j SDRENDL + nop // Delay Slot + SDRPASSL: + PrintString($A0100000,528,312,FontGreen,PASS,3) // Print Text String To VRAM Using Font At X,Y Position + SDRENDL: + + la a0,VALUELONGG // A0 = Long Data Offset + ld t0,0(a0) // T0 = Test Long Data + la a0,DWORD // A0 = DWORD Offset + sdr t0,4(a0) // DWORD = Long Data + PrintString($A0100000,80,320,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,88,320,FontBlack,VALUELONGG,7) // Print HEX Chars To VRAM Using Font At X,Y Position + PrintString($A0100000,224,320,FontBlack,TEXTLONGG,17) // Print Text String To VRAM Using Font At X,Y Position + PrintString($A0100000,376,320,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,384,320,FontBlack,DWORD,7) // Print Text String To VRAM Using Font At X,Y Position + la a0,DWORD // A0 = Long Data Offset + ld t0,0(a0) // T0 = Long Data + la a0,SDRCHECKM // A0 = Long Check Data Offset + ld t1,0(a0) // T1 = Long Check Data + beq t0,t1,SDRPASSM // Compare Result Equality With Check Data + nop // Delay Slot + PrintString($A0100000,528,320,FontRed,FAIL,3) // Print Text String To VRAM Using Font At X,Y Position + j SDRENDM + nop // Delay Slot + SDRPASSM: + PrintString($A0100000,528,320,FontGreen,PASS,3) // Print Text String To VRAM Using Font At X,Y Position + SDRENDM: + + la a0,VALUELONGG // A0 = Long Data Offset + ld t0,0(a0) // T0 = Test Long Data + la a0,DWORD // A0 = DWORD Offset + sdr t0,5(a0) // DWORD = Long Data + PrintString($A0100000,80,328,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,88,328,FontBlack,VALUELONGG,7) // Print HEX Chars To VRAM Using Font At X,Y Position + PrintString($A0100000,224,328,FontBlack,TEXTLONGG,17) // Print Text String To VRAM Using Font At X,Y Position + PrintString($A0100000,376,328,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,384,328,FontBlack,DWORD,7) // Print Text String To VRAM Using Font At X,Y Position + la a0,DWORD // A0 = Long Data Offset + ld t0,0(a0) // T0 = Long Data + la a0,SDRCHECKN // A0 = Long Check Data Offset + ld t1,0(a0) // T1 = Long Check Data + beq t0,t1,SDRPASSN // Compare Result Equality With Check Data + nop // Delay Slot + PrintString($A0100000,528,328,FontRed,FAIL,3) // Print Text String To VRAM Using Font At X,Y Position + j SDRENDN + nop // Delay Slot + SDRPASSN: + PrintString($A0100000,528,328,FontGreen,PASS,3) // Print Text String To VRAM Using Font At X,Y Position + SDRENDN: + + la a0,VALUELONGG // A0 = Long Data Offset + ld t0,0(a0) // T0 = Test Long Data + la a0,DWORD // A0 = DWORD Offset + sdr t0,6(a0) // DWORD = Long Data + PrintString($A0100000,80,336,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,88,336,FontBlack,VALUELONGG,7) // Print HEX Chars To VRAM Using Font At X,Y Position + PrintString($A0100000,224,336,FontBlack,TEXTLONGG,17) // Print Text String To VRAM Using Font At X,Y Position + PrintString($A0100000,376,336,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,384,336,FontBlack,DWORD,7) // Print Text String To VRAM Using Font At X,Y Position + la a0,DWORD // A0 = Long Data Offset + ld t0,0(a0) // T0 = Long Data + la a0,SDRCHECKO // A0 = Long Check Data Offset + ld t1,0(a0) // T1 = Long Check Data + beq t0,t1,SDRPASSO // Compare Result Equality With Check Data + nop // Delay Slot + PrintString($A0100000,528,336,FontRed,FAIL,3) // Print Text String To VRAM Using Font At X,Y Position + j SDRENDO + nop // Delay Slot + SDRPASSO: + PrintString($A0100000,528,336,FontGreen,PASS,3) // Print Text String To VRAM Using Font At X,Y Position + SDRENDO: + + la a0,VALUELONGG // A0 = Long Data Offset + ld t0,0(a0) // T0 = Test Long Data + la a0,DWORD // A0 = DWORD Offset + sdr t0,7(a0) // DWORD = Long Data + PrintString($A0100000,80,344,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,88,344,FontBlack,VALUELONGG,7) // Print HEX Chars To VRAM Using Font At X,Y Position + PrintString($A0100000,224,344,FontBlack,TEXTLONGG,17) // Print Text String To VRAM Using Font At X,Y Position + PrintString($A0100000,376,344,FontBlack,DOLLAR,0) // Print Text String To VRAM Using Font At X,Y Position + PrintValue($A0100000,384,344,FontBlack,DWORD,7) // Print Text String To VRAM Using Font At X,Y Position + la a0,DWORD // A0 = Long Data Offset + ld t0,0(a0) // T0 = Long Data + la a0,SDRCHECKP // A0 = Long Check Data Offset + ld t1,0(a0) // T1 = Long Check Data + beq t0,t1,SDRPASSP // Compare Result Equality With Check Data + nop // Delay Slot + PrintString($A0100000,528,344,FontRed,FAIL,3) // Print Text String To VRAM Using Font At X,Y Position + j SDRENDP + nop // Delay Slot + SDRPASSP: + PrintString($A0100000,528,344,FontGreen,PASS,3) // Print Text String To VRAM Using Font At X,Y Position + SDRENDP: + + + PrintString($A0100000,0,352,FontBlack,PAGEBREAK,79) // Print Text String To VRAM Using Font At X,Y Position Loop: @@ -716,34 +1112,70 @@ SDCHECKG: dd $FFD423AB9E9B9ADE SDLCHECKA: - dd $0000000000000000 -SDLCHECKB: dd $002BDC5461646522 +SDLCHECKB: + dd $00002BDC54616465 SDLCHECKC: - dd $00000000499602D7 + dd $0000002BDC546164 SDLCHECKD: - dd $002BDC545E14D64E + dd $000000002BDC5461 SDLCHECKE: - dd $FFD423ABA1EB29B2 + dd $00000000002BDC54 SDLCHECKF: - dd $FFFFFFFFB669FD29 + dd $0000000000002BDC SDLCHECKG: + dd $000000000000002B +SDLCHECKH: + dd $0000000000000000 +SDLCHECKI: dd $FFD423AB9E9B9ADE +SDLCHECKJ: + dd $FFFFD423AB9E9B9A +SDLCHECKK: + dd $FFFFFFD423AB9E9B +SDLCHECKL: + dd $FFFFFFFFD423AB9E +SDLCHECKM: + dd $FFFFFFFFFFD423AB +SDLCHECKN: + dd $FFFFFFFFFFFFD423 +SDLCHECKO: + dd $FFFFFFFFFFFFFFD4 +SDLCHECKP: + dd $FFFFFFFFFFFFFFFF SDRCHECKA: - dd $00D423AB9E9B9ADE + dd $22FFFFFFFFFFFFFF SDRCHECKB: - dd $22D423AB9E9B9ADE + dd $6522FFFFFFFFFFFF SDRCHECKC: - dd $D7D423AB9E9B9ADE + dd $646522FFFFFFFFFF SDRCHECKD: - dd $4ED423AB9E9B9ADE + dd $61646522FFFFFFFF SDRCHECKE: - dd $B2D423AB9E9B9ADE + dd $5461646522FFFFFF SDRCHECKF: - dd $29D423AB9E9B9ADE + dd $DC5461646522FFFF SDRCHECKG: - dd $DED423AB9E9B9ADE + dd $2BDC5461646522FF +SDRCHECKH: + dd $002BDC5461646522 +SDRCHECKI: + dd $DE2BDC5461646522 +SDRCHECKJ: + dd $9ADEDC5461646522 +SDRCHECKK: + dd $9B9ADE5461646522 +SDRCHECKL: + dd $9E9B9ADE61646522 +SDRCHECKM: + dd $AB9E9B9ADE646522 +SDRCHECKN: + dd $23AB9E9B9ADE6522 +SDRCHECKO: + dd $D423AB9E9B9ADE22 +SDRCHECKP: + dd $FFD423AB9E9B9ADE DWORD: dd 0 diff --git a/CPUTest/CPU/LOADSTORE/SD/CPUSD.png b/CPUTest/CPU/LOADSTORE/SD/CPUSD.png index 997079a3176f0fcf8124943d966412960e2be106..01315056a29c077a6e2ede90ff41b94d3ea4f6ff 100644 GIT binary patch literal 10115 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 literal 8218 zcmeI1iCdCszsGfaCuTBZ8Z*aCoXKf1&1%d{Wtp;a%+$(E&4qR>6Gc-*ahYby%*@i% z+;GY!D;3HO5Cu!kT#&4k6cAiclRyIz5rOkyGv|HJJMWx7;9Q66@?yL1`+4}SpWoNC zgI;b%OII(|)6+9@|7p)*J-yFT^z`%vUwj69QeW*+4ZQjFoU7|WcURYMBcmeDp1W{H zPjBO`#9OeRntxo=iuBoQZ30Tay7T_QV%w|NcJ4PxKYq8yWpE*_V2CjZd?j` z_AImY@h|Ds#O1_G-_Gd|4^Q5oSi4TM#k%I|M*+ohN&=G%>hCUnexy3=vx5$uKee7Z zxr4lEwqb3`F1-`Kt~)!KHgj?bVMGLh(+BtBaurmBTS=CqnZP)0{0`c`#k|G7Ft;05 zva@A>)^5BP6#eS+G)t--ZQ%uV;z^Ue>%R34-fPybO1H4ZZnZJn^l>|8&mo5n(<(cg zBJ$4ioYi5xY{u3*?4z%P%A79k%)R;J*K1F|J-F}lRrhMn-@o%yPf}Mi;=^3_XjZ%L z605e)9v}S9DQOxp$EysuQ*bf+(zf4Jt#ycfKNEs~3m}W9PI1r#Jq=2*KTK6_bbK~@ zCO$BIjlP=G)EX0*tw`y#I6mQ?x2*lv!uHF%_2Uqw5gqyl{#&c8rt^*NSU+b>$&qt&qvOvK0-v54loDnXI7^&#UOO84C zp5+B&XsPq%(-NXqnJ0_sQC>TG7)y6%+kcQpMndx3>K9l-gcB6W96z+sS41L;BO5Sz zaSfh$HR}~EdfVnx7Xqs0WeM|Ku9sxrC0VZ;A1*>vXR{riPq1By#mPyr`x*C|PChiG(OW!P1`3W`V$@V3YQw6A zc>%Y36u*qyC>G8u@V)%U{1XH$S(2dmEedOYS?nrL=a+L%#JHMW%X_5^S8*r0FE(CV z)})MHsDq<%Hsts>qY8w%-M8bS`Zu>-kR;wa_%T~-OZoFNuyXflW9ON0ns8|}EJ_(a zF?exUvDGdY*&=zdcOq+$E?Y6reV#ftTpo@HTfTQn&7vl74D!P!wNZ3*5`A#1?3?NM zIkWq)ViK){G|I1sQ6GKV*u#Zi3OjOa{D?uy z7~vl=(DkhfHjO~8@*~ll`b;}gky*)!iRy)g2F-qDLWldQ7l(wnmDuJs9(GfsFJMfYg0_$Wc6`eGy7SS(@9CKT}4{+p6N zB+xL<^O)(5c|%ox!eH-5Cx0cSdrbrrQ``?fHuzNI!SUoWEwJn{ee;wu_BP9pzLdl# zxvKJTHT6{PO^T7h%pKQh{&brK?1ua&dqY<5AA1$|P zr1br(kGYv)WW3W?M9mWpx;$ChJx>aA#3&w8vOyP?tdSJZMy=|CnW@;8)L>Sfj|6`G z@+5-GD!fkbnY|GDj%{M14!<@ZqIx|~11_Gho7--%L$4$eje}c0UD*Cen)a#=;cS}; zzs7Cs><+iAM376Uv)1Imz|>mR=i`qxb+cW?d7&E7P=aejxpp$v82hFz_~OG{P*Hf% z%n|8|UECEiSe)9?3jEDi*lB%mqG5brjC)=(rzj%6Dlyi^{T8${Z3{JDnq%HwN-6wS zG79)Xb@6g`rAL8bbqMaEsqhS3d?g}a=S6x{jj<^Z+{HTkrou5*G4AHlAHZ$bn`h6( z`BKjQdglXG6fMnZRvsHV{R(vb@Vh+-vDZB+*cGYE0 z57#8C@F?KWgIGiCpO`939?QNgs!E>XhOompVipaL{U&idFt4T|QC+y&LCz*2&3UXb z^G9cfCX}_VmU)yy_#e?lSA8eSdLW4ZohfP{@L3bGE^Ap>8OwYX*0n7-3&c%>3UGbv zD%(Moc&~R~6@`lmkAdgZB6&z+(6HnXW&`-$vYlK9Z>rrnr|I2Dw#jQ42hHk~2h|WK z@gn`qsGwo=ye@+D;3{quU>nz-oIp~|gTk;7evRtK!m$ogv4GOT<6=xL9t-tR<{Mx+ z_&r}?TkzlzE%T+pk`@bm3REzQr|(W0ta@HBe(Em%m2|w%_WUa6!7+8j!!qTO4g-2G zCXJRh;stqP7D={CP*rIri(hm|k1Qn4`ngL?-f#nNU;f==H^+2P@DM?Kt}z|BODAMI z9!3o~naI}riL0T5&jTr`VxLg*-AoUzrzMs#B9y3(a&E~TzSn9ZYMFK1WplflBTt+V zcSwVTwBQ3ncY}zUpr&8zwtR28WAvB0j9VK-?GD9I!I#pMR-Qj5Z&bffzvO+bA@-5b ztVxNdAB3Qe-9O&P9a>d~XfP&G-|%_bF}bHtq{W+q9TiZ)Q{6tJ5n|M)hBft|M8BqOhmVOB|662kd6%P5?%HSlPcH->vuhPb8@7~pa@Ztrzks{L_X(-MJt z@ctB2Fl0pwg`j3u_%L6{iz7B_rPF6}S0dZC*JMjmB4PlaNGR#cd!;GW8QFyW@U>T6 zPSQan?b%U%gW=`yA0d%sdWNc3KcbZc`hTcPvgmI|&*fe&B?YdTY||BO6l^iiKH}lS6~fe0?o1Cy z$hO9UlahwPnOW#@jG`YnlY1E|s8(K8*m}n(i>(PItAo9_7ch3t2lIeT>@2a7K)%LG zQ7XCj6ft|^7`3-~4o z+FO4=SPD0nu69-R-$ca6ZQ2kBj+>BQX$6862zx#5i5YQWrhhi6|E3}!&HxC}v&`8X zdFpKS$bry~g#pLWDf(Sr3$H~N3+5@b8J?`tBYx-6;F?6)`K@J1Mgn(b?WsyfTgmzx zwC}+bF;1tzGqY=Z4Hqd7kae zp9iCsIjDU4vE+=k#uXrFOMLS%x`0w{h6SUVbe2#xzQc>M_KCi%+)&^ww4QCu>yX!- zn_d{euz?)^UrOvhS#$B#&83WA<@55o);cY^VLqqFS9$)>tw6}^koQbwu7?lMbYFZ8 z13Ld4MMaN;38qkcUzJ2rD%#k>FI8$8i&c-m8FGqd_x?PO$t%hAO$v6hx5m}%GB%^DCuOZjkh-O zAGbwmu?mz5#*~EFrpiZm*hL_b$tMueESfVMWMj$BAE|UA+5^1o(wBUWmPVtFNCtqO zGd<%xW<_602KPlJ*KS7kGH8j^EiNBGSUz>5qVVo~wECrFR}QCAx$m(i8jEmN9NT}f zp`SjQ<-%|f`n}Z>faYkdtIiknBtI-GX?L?lJ_~m&q)L(!+#2F@fU1uk36W3bvax0; z0t(XY7v;*1X`@YUOAfmc0?zBxUitF?Zo4tVKtjl*Bwzr1tZn?rxc)Hj3{EL=n5T}5 zSYi}4ak3;Z7QfxXc~FWG=WYQ#@3oBOgv-4L1GF*X^%985r=$#y&cnCVl`E%j%smnH z$9C{ipB_}Fs&LsojspZEBUSyqdkoJ*{4nIPy|3)al1vs_EW{B^6^=FHe47RCVCRf5Crw|`v_Fo*UV%XK4KzVj^v?rZRPJvnBZ>2 zE>^wWduc?W%+tG$gw4%sfqz$YuvKf`%8$CK<|$}(Psme-)rb9<4tciOzrl& z5j#ALe(agUyKN_Xb6KIqj<0~K_`y+d81sEE;}!=@d{E za>=A*pV9}Kd3ji=svmDvYr6)o#ksD$)B-{J_E;Lwf5X8WmP2YLav*;pSX%IUip%@h^JT86#}Qq~%;0cgcV za?iCED!4FmzbxyorJ74%`MqQX9`%>uZEu5*X}AS@nY-IK4O%1l_LBX$CbILNTx1~W zI}?HILpHwg4MXV@%K8W01%?%xj-^w|`*Vx)cIA|2p)zZc=(_ zAj!>)BTHYEc3(VM{5C|H?oAmz+u?`yM;_&Rezn+t6YHOgr6_9(aXh>;tk0;@nuOdC zqlh+4=k<}ST>6dpRgp6>>8@&uj)yCBb?ns!0?Vzab|KRC5$^p9s|S8QUB&FeK?2BD z0yhWFq}>GJcUXQT2p`!o>|13%rJ}TbGE+B3d4d-`N*UeCa|KWxz&}dfhdY@&6|nt* zA*YxVUsoo#B+%-5u($ETiScW+eBC1bxev0Y!iv0p_3TNL3zuVDOO=npi+|dfjOk0D zi+^*7r$=qiJj#XH1L2#udi<$l;a{c?X-e6#yc&-|lxxVTP=vYE4eTvEEz$=!4nENZ ztFGU>T&E|>R)k3%%%yO{h$aGyUC~dk(!5HFE&9?kAE~;s!29nhO*iJz6X-GS;I_x< zbrB&(V{b|NP-{kPg$_3s0Rp>rF|A8+zxK%YL~|6uUw4v$2% zI{`qpK~Gh*UvTo#4qd-{HhGguQg`U|C3#A!e}q5R(-`Y8A{kod4_G3OVOkgw{5lkN zSH8!m4BARp9HtKLFd`sbBs!4zUrOx1;lbgdyeA=y!Mb;|{0u+F565g7s6O@oWP{-0 z?)au~RX+-#gLJlmCh6!u)Yhq;@%UiE6Fx$_@HUrU!G1^ds6U2{R+OE|LHd1?AwHO3 zJD)YjH_27~@Ck_*uL6Wu>NOOwj}oXQB|q0^a(fx|#*0(`qWBOzOgu=Hr>Oc$D%;|l zU<)KX+B>5HEB5UaWsMC70pf@m8nPzX{HX_bFS!O1iB7IRa5)>;z)Hzu-6W$Nv2+F< z4gazmm>X3D_r>+|=FXXo!)WZn;HqO_3e><0AQqKg!|MIfsIWkd3OqG$5s40d?aTgc zfhoMcQ;|Uo#KR>~zW~REL7@2G7`2edyO^rHm%Wx-yG!kVRgGu^WCamIirlX8^ew)emmvej0tD# zkbJ{%;JC3))o7ixYiHPeByB1%+^vs&b3w)E-NA{n7l4eKQPLHievzE-Nn5`nqNB*l z8<+o(Di)?I^X*vnqA8Ift|T!N>tL;{RN~>GZS(wBXgP-c(fJmL+o0;#M>cq+p+T`qIJyU-eRyKhefv-Bk|zyqxcRa4bnwcb?T0D5H< z;wG(vQ3;D4Uss?#R>H@{sQt)+uH0g(*QkE#Vie?nf^?GOXst-*XUNj;|9vMw?oCnurLC+Qv7*Wjjn{Ibl~8 zcB|Y-*`XT<>9jggOMFv%Jb+t0s+RUX1N6&I=osk4e%zuAJz8;;zwt?f2|dBf~?KZr`BD1lA_Faj$58Un|Efj{n4pG zrHw_n?Zu<|{4HP#8*tCufrgU&rCU-D>$JLBa(jfUM{{5 z6$D!N0V$6}0q~Sp$kwPUp@Q9i1Ff6Eb7*0Y<=gP?un#$o3%`1xAK-;o8eSK~P)aeI zz&myNY34f<3DINqF>ghk&_N{cyUiwTs8>-h?>!)5-zxr~Q#0r5Tkm=`JXwxyjyVYv zoCc(p>50T)B~%d532w_O$U{R<#yhlfagFbR1Zw*aDUOn*Oa%}g%WPTW4*M({>x7IO zQGSY||CHMyRi_}+T*bz4Ws5^&NR4L2lz3nt|By7Nv?PH7r01tFCH0rs{}V72RCMtG zYcS+ODU2Kvu^mxcS^b63h!xMuGdFqt1ekiD1J9kgC|%i2j998tkfkYx8M1fog#RD| zKI$__Is!i_iGDM;2wT(b6qjtQ-6xvd@rcK??VJZ+v1zUF@DL#S80Gr>;*lk zL%^5tHRWeJ-0(+|#Qq{9w-F+cvXVh#EZ|tP>HH8{WG7S--();)1&@RY0DT0VPLr|I zC?W_p$7e`*aFebr&F;X_&r!SpWa_|GWhnI9mO~ XcOXUCSJ3NpKh}M(*B;{T