RV1 Verilated WASM Twister
This page runs a dedicated RV32 twister renderer inside the same RV1 Verilated WASM environment.
Pipeline:
- twister C program (
twister_rv32.c) -> RV32IM binary (twister_program.bin) - RV1 RTL -> Verilator C++ model -> WASM (
rv1_verilated.wasm) - Browser loads twister program/data, runs cycles, then blits framebuffer to canvas
RV32 Disassembly
../sw/build/twister_rv32.elf: file format elf32-littleriscv
Disassembly of section .text:
00000000 <_start>:
0: 00004117 auipc sp,0x4
4: 00010113 mv sp,sp
8: 008000ef jal 10 <main>
c: 0000006f j c <_start+0xc>
00000010 <main>:
10: fe010113 addi sp,sp,-32 # 3fe0 <main+0x3fd0>
14: 00812e23 sw s0,28(sp)
18: 00912c23 sw s1,24(sp)
1c: 01212a23 sw s2,20(sp)
20: 01312823 sw s3,16(sp)
24: 01412623 sw s4,12(sp)
28: 01512423 sw s5,8(sp)
2c: 36000913 li s2,864
30: 00000493 li s1,0
34: 0ff00593 li a1,255
38: ff000fb7 lui t6,0xff000
3c: 03f00e13 li t3,63
40: 0bf00413 li s0,191
44: 07f00293 li t0,127
48: 00200f13 li t5,2
4c: 14000393 li t2,320
50: ff48e337 lui t1,0xff48e
54: 86a30313 addi t1,t1,-1942 # ff48d86a <_stack_top+0xff48986a>
58: ffff68b7 lui a7,0xffff6
5c: a4088893 addi a7,a7,-1472 # ffff5a40 <_stack_top+0xffff1a40>
60: 0f000e93 li t4,240
64: 0004b9b7 lui s3,0x4b
68: 26c0006f j 2d4 <main+0x2c4>
6c: 00c2c863 blt t0,a2,7c <main+0x6c>
70: 40c287b3 sub a5,t0,a2
74: 00179793 slli a5,a5,0x1
78: 1280006f j 1a0 <main+0x190>
7c: 16c44263 blt s0,a2,1e0 <main+0x1d0>
80: f8060793 addi a5,a2,-128
84: 00179a13 slli s4,a5,0x1
88: 41f7d793 srai a5,a5,0x1f
8c: 0147c733 xor a4,a5,s4
90: 40f70733 sub a4,a4,a5
94: 40e587b3 sub a5,a1,a4
98: 02e787b3 mul a5,a5,a4
9c: 4077d793 srai a5,a5,0x7
a0: 25405463 blez s4,2e8 <main+0x2d8>
a4: 00479713 slli a4,a5,0x4
a8: 40e78a33 sub s4,a5,a4
ac: 405a5a13 srai s4,s4,0x5
b0: 0a0a0a13 addi s4,s4,160
b4: 08060713 addi a4,a2,128
b8: 0ff77713 zext.b a4,a4
bc: 14ee4e63 blt t3,a4,218 <main+0x208>
c0: 00171713 slli a4,a4,0x1
c4: 41f75793 srai a5,a4,0x1f
c8: 00e7c733 xor a4,a5,a4
cc: 40f70733 sub a4,a4,a5
d0: 40e587b3 sub a5,a1,a4
d4: 02e787b3 mul a5,a5,a4
d8: 4077d793 srai a5,a5,0x7
dc: 00479713 slli a4,a5,0x4
e0: 40f70733 sub a4,a4,a5
e4: 00271713 slli a4,a4,0x2
e8: 40775713 srai a4,a4,0x7
ec: 0a070713 addi a4,a4,160
f0: 00070793 mv a5,a4
f4: 00ea5463 bge s4,a4,fc <main+0xec>
f8: 000a0793 mv a5,s4
fc: 01475463 bge a4,s4,104 <main+0xf4>
100: 000a0713 mv a4,s4
104: 40f70a33 sub s4,a4,a5
108: 154f4463 blt t5,s4,250 <main+0x240>
10c: 00560613 addi a2,a2,5
110: 0ff67613 zext.b a2,a2
114: 00150513 addi a0,a0,1
118: 14080813 addi a6,a6,320
11c: 50068693 addi a3,a3,1280
120: 1bd50463 beq a0,t4,2c8 <main+0x2b8>
124: 40455a93 srai s5,a0,0x4
128: 40555793 srai a5,a0,0x5
12c: 00878793 addi a5,a5,8
130: 00f5d463 bge a1,a5,138 <main+0x128>
134: 0ff00793 li a5,255
138: fff7c713 not a4,a5
13c: 41f75713 srai a4,a4,0x1f
140: 00e7f7b3 and a5,a5,a4
144: 01079713 slli a4,a5,0x10
148: 00ea8a13 addi s4,s5,14
14c: 0145d463 bge a1,s4,154 <main+0x144>
150: 0ff00a13 li s4,255
154: fffa4793 not a5,s4
158: 41f7d793 srai a5,a5,0x1f
15c: 00fa7a33 and s4,s4,a5
160: 008a1a13 slli s4,s4,0x8
164: 01476733 or a4,a4,s4
168: 018a8793 addi a5,s5,24
16c: 00f5d463 bge a1,a5,174 <main+0x164>
170: 0ff00793 li a5,255
174: fff7ca13 not s4,a5
178: 41fa5a13 srai s4,s4,0x1f
17c: 0147f7b3 and a5,a5,s4
180: 00f76733 or a4,a4,a5
184: 01f76733 or a4,a4,t6
188: b0068793 addi a5,a3,-1280
18c: 00e7a023 sw a4,0(a5)
190: 00478793 addi a5,a5,4
194: fed79ce3 bne a5,a3,18c <main+0x17c>
198: ecce4ae3 blt t3,a2,6c <main+0x5c>
19c: 00161793 slli a5,a2,0x1
1a0: 41f7d713 srai a4,a5,0x1f
1a4: 00f747b3 xor a5,a4,a5
1a8: 40e787b3 sub a5,a5,a4
1ac: 40f58733 sub a4,a1,a5
1b0: 02f707b3 mul a5,a4,a5
1b4: 4077d793 srai a5,a5,0x7
1b8: 00479a13 slli s4,a5,0x4
1bc: 40fa0a33 sub s4,s4,a5
1c0: 405a5a13 srai s4,s4,0x5
1c4: 0a0a0a13 addi s4,s4,160
1c8: 08060793 addi a5,a2,128
1cc: 0ff7f793 zext.b a5,a5
1d0: 04f45a63 bge s0,a5,224 <main+0x214>
1d4: 40f587b3 sub a5,a1,a5
1d8: 00179713 slli a4,a5,0x1
1dc: 0500006f j 22c <main+0x21c>
1e0: 40c587b3 sub a5,a1,a2
1e4: 00179a13 slli s4,a5,0x1
1e8: 41f7d793 srai a5,a5,0x1f
1ec: 0147c733 xor a4,a5,s4
1f0: 40f70733 sub a4,a4,a5
1f4: 40e587b3 sub a5,a1,a4
1f8: 02e787b3 mul a5,a5,a4
1fc: 4077d793 srai a5,a5,0x7
200: eb4042e3 bgtz s4,a4 <main+0x94>
204: 03c00713 li a4,60
208: 02e78a33 mul s4,a5,a4
20c: 407a5a13 srai s4,s4,0x7
210: 0a0a0a13 addi s4,s4,160
214: 07f00713 li a4,127
218: 40e28733 sub a4,t0,a4
21c: 00171713 slli a4,a4,0x1
220: ea5ff06f j c4 <main+0xb4>
224: f8078793 addi a5,a5,-128
228: 00179713 slli a4,a5,0x1
22c: 41f75793 srai a5,a4,0x1f
230: 00e7cab3 xor s5,a5,a4
234: 40fa8ab3 sub s5,s5,a5
238: 415587b3 sub a5,a1,s5
23c: 035787b3 mul a5,a5,s5
240: 4077d793 srai a5,a5,0x7
244: e8e05ce3 blez a4,dc <main+0xcc>
248: 40f007b3 neg a5,a5
24c: e91ff06f j dc <main+0xcc>
250: 401a5a13 srai s4,s4,0x1
254: 00fa0ab3 add s5,s4,a5
258: fff7ca13 not s4,a5
25c: 41fa5a13 srai s4,s4,0x1f
260: 0147f7b3 and a5,a5,s4
264: 000a8a13 mv s4,s5
268: 0153d463 bge t2,s5,270 <main+0x260>
26c: 00038a13 mv s4,t2
270: 0347d063 bge a5,s4,290 <main+0x280>
274: 010787b3 add a5,a5,a6
278: 00279793 slli a5,a5,0x2
27c: 010a0a33 add s4,s4,a6
280: 002a1a13 slli s4,s4,0x2
284: 0117a023 sw a7,0(a5)
288: 00478793 addi a5,a5,4
28c: ff479ce3 bne a5,s4,284 <main+0x274>
290: fffaca13 not s4,s5
294: 41fa5a13 srai s4,s4,0x1f
298: 014af7b3 and a5,s5,s4
29c: 00e3d463 bge t2,a4,2a4 <main+0x294>
2a0: 00038713 mv a4,t2
2a4: e6e7d4e3 bge a5,a4,10c <main+0xfc>
2a8: 010787b3 add a5,a5,a6
2ac: 00279793 slli a5,a5,0x2
2b0: 01070733 add a4,a4,a6
2b4: 00271713 slli a4,a4,0x2
2b8: 0067a023 sw t1,0(a5)
2bc: 00478793 addi a5,a5,4
2c0: fee79ce3 bne a5,a4,2b8 <main+0x2a8>
2c4: e49ff06f j 10c <main+0xfc>
2c8: 00148493 addi s1,s1,1
2cc: 0099a023 sw s1,0(s3) # 4b000 <_stack_top+0x47000>
2d0: 00990913 addi s2,s2,9
2d4: 0ff97613 zext.b a2,s2
2d8: 50000693 li a3,1280
2dc: 00000813 li a6,0
2e0: 00000513 li a0,0
2e4: e41ff06f j 124 <main+0x114>
2e8: 03c00713 li a4,60
2ec: 02e78a33 mul s4,a5,a4
2f0: 407a5a13 srai s4,s4,0x7
2f4: 0a0a0a13 addi s4,s4,160
2f8: 00000713 li a4,0
2fc: dc5ff06f j c0 <main+0xb0>