|
18 | 18 | set DISPLAY display1 |
19 | 19 |
|
20 | 20 | read LOOKUP_PROC_SIZE CPU "LOOKUP_PROC_SIZE" |
| 21 | + read MEMORY_PROC_SIZE CPU "MEMORY_PROC_SIZE" |
21 | 22 |
|
22 | 23 | # wait until everything is properly initialized |
23 | 24 | jump reset strictEqual CPU null |
|
26 | 27 | jump reset strictEqual CSRS null |
27 | 28 | jump reset strictEqual DISPLAY null |
28 | 29 | jump reset strictEqual LOOKUP_PROC_SIZE null |
| 30 | + jump reset strictEqual MEMORY_PROC_SIZE null |
29 | 31 |
|
30 | 32 | set i -1 |
31 | 33 | reset__find_lookup_start: |
@@ -69,6 +71,7 @@ reset__find_lookup_start: |
69 | 71 | set CSR_INSTRETH variable |
70 | 72 |
|
71 | 73 | loop: |
| 74 | + set mark_ram_id 0 |
72 | 75 | draw clear 0 0 0 |
73 | 76 |
|
74 | 77 | read x0_zero REGISTERS 0 |
@@ -132,6 +135,51 @@ loop: |
132 | 135 | read decode_time DECODER "DECODE_DURATION" |
133 | 136 | op floor decode_time decode_time |
134 | 137 |
|
| 138 | + read MEMORY_X CPU "MEMORY_X" |
| 139 | + read MEMORY_Y CPU "MEMORY_Y" |
| 140 | + read MEMORY_WIDTH CPU "MEMORY_WIDTH" |
| 141 | + |
| 142 | + read ROM_SIZE CPU "ROM_SIZE" |
| 143 | + read ROM_START CPU "ROM_START" |
| 144 | + read ROM_END CPU "ROM_END" |
| 145 | + |
| 146 | + read RAM_START CPU "RAM_START" |
| 147 | + read RAM_END CPU "RAM_END" |
| 148 | + |
| 149 | + op mul ICACHE_SIZE ROM_SIZE 4 |
| 150 | + set ICACHE_START RAM_END |
| 151 | + op add ICACHE_END ICACHE_START ICACHE_SIZE |
| 152 | + |
| 153 | + print "ROM_START\n{0}" |
| 154 | + set address ROM_START |
| 155 | + op add ret @counter 1 |
| 156 | + jump mark_ram always |
| 157 | + |
| 158 | + print "ROM_END\n{0}" |
| 159 | + op sub address ROM_END 1 |
| 160 | + op add ret @counter 1 |
| 161 | + jump mark_ram always |
| 162 | + |
| 163 | + print "RAM_START\n{0}" |
| 164 | + set address RAM_START |
| 165 | + op add ret @counter 1 |
| 166 | + jump mark_ram always |
| 167 | + |
| 168 | + print "RAM_END\n{0}" |
| 169 | + op sub address RAM_END 1 |
| 170 | + op add ret @counter 1 |
| 171 | + jump mark_ram always |
| 172 | + |
| 173 | + print "ICACHE_START\n{0}" |
| 174 | + set address ICACHE_START |
| 175 | + op add ret @counter 1 |
| 176 | + jump mark_ram always |
| 177 | + |
| 178 | + print "ICACHE_END\n{0}" |
| 179 | + op sub address ICACHE_END 1 |
| 180 | + op add ret @counter 1 |
| 181 | + jump mark_ram always |
| 182 | + |
135 | 183 | print "x0_zero = {0}\n" |
136 | 184 | set n x0_zero |
137 | 185 | op add ret @counter 1 |
@@ -347,7 +395,7 @@ loop: |
347 | 395 | draw print 256 508 topLeft |
348 | 396 | drawflush DISPLAY |
349 | 397 |
|
350 | | - wait 0.02 |
| 398 | + wait 0.025 |
351 | 399 | jump loop always |
352 | 400 |
|
353 | 401 | format_hex: |
@@ -477,3 +525,33 @@ access_csr: |
477 | 525 | read variable _lookup variable |
478 | 526 |
|
479 | 527 | set @counter ret |
| 528 | + |
| 529 | +# creates a marker on the ram proc containing a given address |
| 530 | +# the caller should print a format string with a placeholder for the address |
| 531 | +# address -> |
| 532 | +mark_ram: |
| 533 | + set mark_ram__ret ret |
| 534 | + |
| 535 | + # we store 4 bytes in each value |
| 536 | + op idiv _address address 4 |
| 537 | + |
| 538 | + # get the ram proc containing this address |
| 539 | + op idiv _ram_index _address MEMORY_PROC_SIZE |
| 540 | + |
| 541 | + op mod _ram_x _ram_index MEMORY_WIDTH |
| 542 | + op add _ram_x _ram_x MEMORY_X |
| 543 | + |
| 544 | + op idiv _ram_y _ram_index MEMORY_WIDTH |
| 545 | + op add _ram_y _ram_y MEMORY_Y |
| 546 | + |
| 547 | + set n address |
| 548 | + op add ret @counter 1 |
| 549 | + jump format_hex always |
| 550 | + |
| 551 | + setmarker remove mark_ram_id |
| 552 | + makemarker shapeText mark_ram_id _ram_x _ram_y false |
| 553 | + setmarker shape 0 4 0 0 |
| 554 | + setmarker flushText mark_ram_id false |
| 555 | + |
| 556 | + op add mark_ram_id mark_ram_id 1 |
| 557 | + set @counter mark_ram__ret |
0 commit comments