Started simX

This commit is contained in:
felsabbagh3 2019-11-10 01:21:09 -05:00
parent ea7bd485ca
commit fbf708e419
192 changed files with 28093 additions and 368 deletions

View file

@ -83,6 +83,7 @@ namespace Harp {
bool interrupt(Word r0);
bool running() const;
void step();
void printStats() const;

View file

@ -1,4 +1,4 @@
echo start > results.txt
# echo ../kernel/vortex_test.hex
./harptool -E -a rv32i --core ../runtime/mains/simple/vx_simple_main.hex -s -b 1> emulator.debug
./harptool -E -a rv32i --core ../runtime/mains/dev/vx_dev_main.hex -s -b 1> emulator.debug

View file

@ -130,11 +130,7 @@
//Cache configurations
//Bytes
`define ICACHE_SIZE 1024
`ifdef SYN
`define ICACHE_WAYS 1
`else
`define ICACHE_WAYS 2
`endif
//Bytes
`define ICACHE_BLOCK 16
`define ICACHE_BANKS 1
@ -186,11 +182,7 @@
//Cache configurations
//Bytes
`define DCACHE_SIZE 4096
`ifdef SYN
`define DCACHE_WAYS 1
`else
`define DCACHE_WAYS 2
`endif
//Bytes
`define DCACHE_BLOCK 64

View file

@ -19,9 +19,9 @@ module VX_cache_bank_valid
for (t_id = 0; t_id < NUM_REQ; t_id = t_id + 1)
begin
if (NUMBER_BANKS != 1) begin
thread_track_banks[i_p_addr[t_id][2+LOG_NUM_BANKS-1:2]][t_id] = i_p_valid[t_id];
thread_track_banks[i_p_addr[t_id][2+LOG_NUM_BANKS-1:2]][t_id] = i_p_valid[t_id];
end else begin
thread_track_banks[t_id] = i_p_valid[t_id];
thread_track_banks[0][t_id] = i_p_valid[t_id];
end
end
end

View file

@ -243,7 +243,7 @@ module VX_d_cache
assign new_stored_valid = use_valid & (~threads_serviced_Qual);
wire update_global_way_to_evict = ((state == RECIV_MEM_RSP) && (new_state == CACHE_IDLE) && (CACHE_WAYS)) && (CACHE_WAYS > 1);
wire update_global_way_to_evict = ((state == RECIV_MEM_RSP) && (new_state == CACHE_IDLE)) && (CACHE_WAYS > 1);
///////////////////////////////////////////////////////////////////////
genvar cur_t;

View file

@ -112,8 +112,8 @@ comp:
sim: comp
# vsim vortex_tb $(LOG) -c -lib $(LIB) $(CMD) > vortex_sim.log
vsim -novopt vortex_tb $(LOG) -c -lib $(LIB) $(CMD) > vortex_sim.log
vsim vortex_tb $(LOG) -c -lib $(LIB) $(CMD) > vortex_sim.log
# vsim -novopt vortex_tb $(LOG) -c -lib $(LIB) $(CMD) > vortex_sim.log

View file

@ -87,7 +87,7 @@ reg out_ebreak;
initial begin
// $fdumpfile("vortex1.vcd");
load_file("../../runtime/mains/simple/vx_simple_main.hex");
load_file("../../runtime/mains/dev/vx_dev_main.hex");
//load_file("../../kernel/vortex_test.hex");
$dumpvars(0, vortex_tb);
reset = 1;

View file

@ -1,6 +1,7 @@
COMP = /opt/riscv/bin/riscv32-unknown-elf-gcc
CC_FLAGS = -march=rv32im -mabi=ilp32 -O0 -Wl,-Bstatic,-T,linker.ld -ffreestanding -nostdlib
# CC_FLAGS = -march=rv32im -mabi=ilp32 -O0 -Wl,-Bstatic,-T,linker.ld -ffreestanding -nostdlib
CC_FLAGS = -march=rv32im -mabi=ilp32 -O0 -Wl,-Bstatic,-T,linker.ld -ffreestanding -nostartfiles
DMP = /opt/riscv/bin/riscv32-unknown-elf-objdump
CPY = /opt/riscv/bin/riscv32-unknown-elf-objcopy

View file

@ -4,6 +4,14 @@
#include "../../tests/tests.h"
#include "../../vx_api/vx_api.h"
// #include <utlist.h>
#include <string.h>
#include <unistd.h>
#include <stdint.h>
#include <stdbool.h>
#include <stdlib.h>
typedef struct
{
unsigned * x;
@ -46,15 +54,32 @@ void mat_add_kernel(void * void_arguments)
__endif
}
void vx_print_mat(unsigned * matPtr, int numRows, int numCols)
{
vx_print_str("---------------------\n");
for (int i = 0; i < numRows; i++)
{
for (int j = 0; j < numCols; j++)
{
unsigned index = (i * numCols) + j;
vx_print_hex(matPtr[index]);
vx_print_str(" ");
}
vx_print_str("\n");
}
}
int main()
{
// Main is called with all threads active of warp 0
vx_tmc(1);
// void * hellp = malloc(4);
vx_print_str("Dev Main\n");
vx_print_str("vx_spawnWarps\n");
mat_add_args_t arguments;
arguments.x = x;
arguments.y = y;
@ -66,19 +91,26 @@ int main()
int numWarps = 4;
int numThreads = 4;
// First kernel call
vx_spawnWarps(numWarps, numThreads, mat_add_kernel, &arguments);
vx_print_mat(z, arguments.numRows, arguments.numColums);
for (int i = 0; i < arguments.numRows; i++)
{
for (int j = 0; j < arguments.numColums; j++)
{
unsigned index = (i * arguments.numColums) + j;
vx_print_hex(z[index]);
vx_print_str(" ");
}
vx_print_str("\n");
}
arguments.x = z;
arguments.y = y;
arguments.z = z;
arguments.numColums = 4;
arguments.numRows = 4;
// Second Kernel Call
vx_spawnWarps(numWarps, numThreads, mat_add_kernel, &arguments);
vx_print_mat(z, arguments.numRows, arguments.numColums);
return 0;
}
}

View file

@ -10,7 +10,7 @@ Disassembly of section .text:
80000008: 00400513 li a0,4
8000000c: 00b5106b 0xb5106b
80000010: 010000ef jal ra,80000020 <vx_set_sp>
80000014: 748000ef jal ra,8000075c <main>
80000014: 011000ef jal ra,80000824 <main>
80000018: 00000513 li a0,0
8000001c: 0005006b 0x5006b
@ -114,7 +114,7 @@ Disassembly of section .text:
80000128: 810007b7 lui a5,0x81000
8000012c: fec42703 lw a4,-20(s0)
80000130: 00271713 slli a4,a4,0x2
80000134: 10c78793 addi a5,a5,268 # 8100010c <z+0xfffffe84>
80000134: 13478793 addi a5,a5,308 # 81000134 <z+0xfffffe84>
80000138: 00f707b3 add a5,a4,a5
8000013c: 0007a783 lw a5,0(a5)
80000140: 00078513 mv a0,a5
@ -137,7 +137,7 @@ Disassembly of section .text:
8000017c: fe842503 lw a0,-24(s0)
80000180: f95ff0ef jal ra,80000114 <vx_print_hex>
80000184: 810007b7 lui a5,0x81000
80000188: 04078513 addi a0,a5,64 # 81000040 <z+0xfffffdb8>
80000188: 04078513 addi a0,a5,64 # 81000040 <z+0xfffffd90>
8000018c: f4dff0ef jal ra,800000d8 <vx_print_str>
80000190: 00000013 nop
80000194: 01c12083 lw ra,28(sp)
@ -151,13 +151,13 @@ Disassembly of section .text:
800001ac: 00812c23 sw s0,24(sp)
800001b0: 02010413 addi s0,sp,32
800001b4: 810007b7 lui a5,0x81000
800001b8: 2647a783 lw a5,612(a5) # 81000264 <z+0xffffffdc>
800001b8: 28c7a783 lw a5,652(a5) # 8100028c <z+0xffffffdc>
800001bc: 00078513 mv a0,a5
800001c0: ea9ff0ef jal ra,80000068 <vx_tmc>
800001c4: 810007b7 lui a5,0x81000
800001c8: 2607a703 lw a4,608(a5) # 81000260 <z+0xffffffd8>
800001c8: 2887a703 lw a4,648(a5) # 81000288 <z+0xffffffd8>
800001cc: 810007b7 lui a5,0x81000
800001d0: 25c7a783 lw a5,604(a5) # 8100025c <z+0xffffffd4>
800001d0: 2847a783 lw a5,644(a5) # 81000284 <z+0xffffffd4>
800001d4: 00078513 mv a0,a5
800001d8: 000700e7 jalr a4
800001dc: eadff0ef jal ra,80000088 <vx_warpID>
@ -186,15 +186,15 @@ Disassembly of section .text:
80000230: fed42023 sw a3,-32(s0)
80000234: 810007b7 lui a5,0x81000
80000238: fe442703 lw a4,-28(s0)
8000023c: 26e7a023 sw a4,608(a5) # 81000260 <z+0xffffffd8>
8000023c: 28e7a423 sw a4,648(a5) # 81000288 <z+0xffffffd8>
80000240: 810007b7 lui a5,0x81000
80000244: fe042703 lw a4,-32(s0)
80000248: 24e7ae23 sw a4,604(a5) # 8100025c <z+0xffffffd4>
80000248: 28e7a223 sw a4,644(a5) # 81000284 <z+0xffffffd4>
8000024c: 810007b7 lui a5,0x81000
80000250: fe842703 lw a4,-24(s0)
80000254: 26e7a223 sw a4,612(a5) # 81000264 <z+0xffffffdc>
80000254: 28e7a623 sw a4,652(a5) # 8100028c <z+0xffffffdc>
80000258: 800007b7 lui a5,0x80000
8000025c: 1a478793 addi a5,a5,420 # 800001a4 <z+0xfeffff1c>
8000025c: 1a478793 addi a5,a5,420 # 800001a4 <z+0xfefffef4>
80000260: 00078593 mv a1,a5
80000264: fec42503 lw a0,-20(s0)
80000268: df9ff0ef jal ra,80000060 <vx_wspawn>
@ -211,7 +211,7 @@ Disassembly of section .text:
8000028c: 00812c23 sw s0,24(sp)
80000290: 02010413 addi s0,sp,32
80000294: 810007b7 lui a5,0x81000
80000298: 08478513 addi a0,a5,132 # 81000084 <z+0xfffffdfc>
80000298: 08478513 addi a0,a5,132 # 81000084 <z+0xfffffdd4>
8000029c: e3dff0ef jal ra,800000d8 <vx_print_str>
800002a0: 00400513 li a0,4
800002a4: dc5ff0ef jal ra,80000068 <vx_tmc>
@ -221,41 +221,41 @@ Disassembly of section .text:
800002b4: 810007b7 lui a5,0x81000
800002b8: fec42683 lw a3,-20(s0)
800002bc: 00269693 slli a3,a3,0x2
800002c0: 18c78793 addi a5,a5,396 # 8100018c <z+0xffffff04>
800002c0: 1b478793 addi a5,a5,436 # 810001b4 <z+0xffffff04>
800002c4: 00f687b3 add a5,a3,a5
800002c8: 00e7a023 sw a4,0(a5)
800002cc: 00100513 li a0,1
800002d0: d99ff0ef jal ra,80000068 <vx_tmc>
800002d4: 810007b7 lui a5,0x81000
800002d8: 18c7a783 lw a5,396(a5) # 8100018c <z+0xffffff04>
800002d8: 1b47a783 lw a5,436(a5) # 810001b4 <z+0xffffff04>
800002dc: 00078513 mv a0,a5
800002e0: e35ff0ef jal ra,80000114 <vx_print_hex>
800002e4: 810007b7 lui a5,0x81000
800002e8: 09478513 addi a0,a5,148 # 81000094 <z+0xfffffe0c>
800002e8: 09478513 addi a0,a5,148 # 81000094 <z+0xfffffde4>
800002ec: dedff0ef jal ra,800000d8 <vx_print_str>
800002f0: 810007b7 lui a5,0x81000
800002f4: 18c78793 addi a5,a5,396 # 8100018c <z+0xffffff04>
800002f4: 1b478793 addi a5,a5,436 # 810001b4 <z+0xffffff04>
800002f8: 0047a783 lw a5,4(a5)
800002fc: 00078513 mv a0,a5
80000300: e15ff0ef jal ra,80000114 <vx_print_hex>
80000304: 810007b7 lui a5,0x81000
80000308: 09478513 addi a0,a5,148 # 81000094 <z+0xfffffe0c>
80000308: 09478513 addi a0,a5,148 # 81000094 <z+0xfffffde4>
8000030c: dcdff0ef jal ra,800000d8 <vx_print_str>
80000310: 810007b7 lui a5,0x81000
80000314: 18c78793 addi a5,a5,396 # 8100018c <z+0xffffff04>
80000314: 1b478793 addi a5,a5,436 # 810001b4 <z+0xffffff04>
80000318: 0087a783 lw a5,8(a5)
8000031c: 00078513 mv a0,a5
80000320: df5ff0ef jal ra,80000114 <vx_print_hex>
80000324: 810007b7 lui a5,0x81000
80000328: 09478513 addi a0,a5,148 # 81000094 <z+0xfffffe0c>
80000328: 09478513 addi a0,a5,148 # 81000094 <z+0xfffffde4>
8000032c: dadff0ef jal ra,800000d8 <vx_print_str>
80000330: 810007b7 lui a5,0x81000
80000334: 18c78793 addi a5,a5,396 # 8100018c <z+0xffffff04>
80000334: 1b478793 addi a5,a5,436 # 810001b4 <z+0xffffff04>
80000338: 00c7a783 lw a5,12(a5)
8000033c: 00078513 mv a0,a5
80000340: dd5ff0ef jal ra,80000114 <vx_print_hex>
80000344: 810007b7 lui a5,0x81000
80000348: 09478513 addi a0,a5,148 # 81000094 <z+0xfffffe0c>
80000348: 09478513 addi a0,a5,148 # 81000094 <z+0xfffffde4>
8000034c: d8dff0ef jal ra,800000d8 <vx_print_str>
80000350: 00000013 nop
80000354: 01c12083 lw ra,28(sp)
@ -289,7 +289,7 @@ Disassembly of section .text:
800003bc: 810007b7 lui a5,0x81000
800003c0: fec42703 lw a4,-20(s0)
800003c4: 00271713 slli a4,a4,0x2
800003c8: 27878793 addi a5,a5,632 # 81000278 <z+0xfffffff0>
800003c8: 2a078793 addi a5,a5,672 # 810002a0 <z+0xfffffff0>
800003cc: 00f707b3 add a5,a4,a5
800003d0: 00a00713 li a4,10
800003d4: 00e7a023 sw a4,0(a5)
@ -297,7 +297,7 @@ Disassembly of section .text:
800003dc: 810007b7 lui a5,0x81000
800003e0: fec42703 lw a4,-20(s0)
800003e4: 00271713 slli a4,a4,0x2
800003e8: 27878793 addi a5,a5,632 # 81000278 <z+0xfffffff0>
800003e8: 2a078793 addi a5,a5,672 # 810002a0 <z+0xfffffff0>
800003ec: 00f707b3 add a5,a4,a5
800003f0: 00b00713 li a4,11
800003f4: 00e7a023 sw a4,0(a5)
@ -314,7 +314,7 @@ Disassembly of section .text:
80000420: 810007b7 lui a5,0x81000
80000424: fec42703 lw a4,-20(s0)
80000428: 00271713 slli a4,a4,0x2
8000042c: 27878793 addi a5,a5,632 # 81000278 <z+0xfffffff0>
8000042c: 2a078793 addi a5,a5,672 # 810002a0 <z+0xfffffff0>
80000430: 00f707b3 add a5,a4,a5
80000434: 00c00713 li a4,12
80000438: 00e7a023 sw a4,0(a5)
@ -322,42 +322,42 @@ Disassembly of section .text:
80000440: 810007b7 lui a5,0x81000
80000444: fec42703 lw a4,-20(s0)
80000448: 00271713 slli a4,a4,0x2
8000044c: 27878793 addi a5,a5,632 # 81000278 <z+0xfffffff0>
8000044c: 2a078793 addi a5,a5,672 # 810002a0 <z+0xfffffff0>
80000450: 00f707b3 add a5,a4,a5
80000454: 00d00713 li a4,13
80000458: 00e7a023 sw a4,0(a5)
8000045c: c25ff0ef jal ra,80000080 <vx_join>
80000460: c21ff0ef jal ra,80000080 <vx_join>
80000464: 810007b7 lui a5,0x81000
80000468: 2787a783 lw a5,632(a5) # 81000278 <z+0xfffffff0>
80000468: 2a07a783 lw a5,672(a5) # 810002a0 <z+0xfffffff0>
8000046c: 00078513 mv a0,a5
80000470: ca5ff0ef jal ra,80000114 <vx_print_hex>
80000474: 810007b7 lui a5,0x81000
80000478: 09478513 addi a0,a5,148 # 81000094 <z+0xfffffe0c>
80000478: 09478513 addi a0,a5,148 # 81000094 <z+0xfffffde4>
8000047c: c5dff0ef jal ra,800000d8 <vx_print_str>
80000480: 810007b7 lui a5,0x81000
80000484: 27878793 addi a5,a5,632 # 81000278 <z+0xfffffff0>
80000484: 2a078793 addi a5,a5,672 # 810002a0 <z+0xfffffff0>
80000488: 0047a783 lw a5,4(a5)
8000048c: 00078513 mv a0,a5
80000490: c85ff0ef jal ra,80000114 <vx_print_hex>
80000494: 810007b7 lui a5,0x81000
80000498: 09478513 addi a0,a5,148 # 81000094 <z+0xfffffe0c>
80000498: 09478513 addi a0,a5,148 # 81000094 <z+0xfffffde4>
8000049c: c3dff0ef jal ra,800000d8 <vx_print_str>
800004a0: 810007b7 lui a5,0x81000
800004a4: 27878793 addi a5,a5,632 # 81000278 <z+0xfffffff0>
800004a4: 2a078793 addi a5,a5,672 # 810002a0 <z+0xfffffff0>
800004a8: 0087a783 lw a5,8(a5)
800004ac: 00078513 mv a0,a5
800004b0: c65ff0ef jal ra,80000114 <vx_print_hex>
800004b4: 810007b7 lui a5,0x81000
800004b8: 09478513 addi a0,a5,148 # 81000094 <z+0xfffffe0c>
800004b8: 09478513 addi a0,a5,148 # 81000094 <z+0xfffffde4>
800004bc: c1dff0ef jal ra,800000d8 <vx_print_str>
800004c0: 810007b7 lui a5,0x81000
800004c4: 27878793 addi a5,a5,632 # 81000278 <z+0xfffffff0>
800004c4: 2a078793 addi a5,a5,672 # 810002a0 <z+0xfffffff0>
800004c8: 00c7a783 lw a5,12(a5)
800004cc: 00078513 mv a0,a5
800004d0: c45ff0ef jal ra,80000114 <vx_print_hex>
800004d4: 810007b7 lui a5,0x81000
800004d8: 09478513 addi a0,a5,148 # 81000094 <z+0xfffffe0c>
800004d8: 09478513 addi a0,a5,148 # 81000094 <z+0xfffffde4>
800004dc: bfdff0ef jal ra,800000d8 <vx_print_str>
800004e0: 00000013 nop
800004e4: 01c12083 lw ra,28(sp)
@ -375,7 +375,7 @@ Disassembly of section .text:
8000050c: 810007b7 lui a5,0x81000
80000510: fec42703 lw a4,-20(s0)
80000514: 00271713 slli a4,a4,0x2
80000518: 26878793 addi a5,a5,616 # 81000268 <z+0xffffffe0>
80000518: 29078793 addi a5,a5,656 # 81000290 <z+0xffffffe0>
8000051c: 00f707b3 add a5,a4,a5
80000520: fec42703 lw a4,-20(s0)
80000524: 00e7a023 sw a4,0(a5)
@ -395,42 +395,42 @@ Disassembly of section .text:
80000554: 00812c23 sw s0,24(sp)
80000558: 02010413 addi s0,sp,32
8000055c: 800007b7 lui a5,0x80000
80000560: 4f478793 addi a5,a5,1268 # 800004f4 <z+0xff00026c>
80000560: 4f478793 addi a5,a5,1268 # 800004f4 <z+0xff000244>
80000564: fef42623 sw a5,-20(s0)
80000568: fec42583 lw a1,-20(s0)
8000056c: 00400513 li a0,4
80000570: af1ff0ef jal ra,80000060 <vx_wspawn>
80000574: f81ff0ef jal ra,800004f4 <simple_kernel>
80000578: 810007b7 lui a5,0x81000
8000057c: 2687a783 lw a5,616(a5) # 81000268 <z+0xffffffe0>
8000057c: 2907a783 lw a5,656(a5) # 81000290 <z+0xffffffe0>
80000580: 00078513 mv a0,a5
80000584: b91ff0ef jal ra,80000114 <vx_print_hex>
80000588: 810007b7 lui a5,0x81000
8000058c: 09478513 addi a0,a5,148 # 81000094 <z+0xfffffe0c>
8000058c: 09478513 addi a0,a5,148 # 81000094 <z+0xfffffde4>
80000590: b49ff0ef jal ra,800000d8 <vx_print_str>
80000594: 810007b7 lui a5,0x81000
80000598: 26878793 addi a5,a5,616 # 81000268 <z+0xffffffe0>
80000598: 29078793 addi a5,a5,656 # 81000290 <z+0xffffffe0>
8000059c: 0047a783 lw a5,4(a5)
800005a0: 00078513 mv a0,a5
800005a4: b71ff0ef jal ra,80000114 <vx_print_hex>
800005a8: 810007b7 lui a5,0x81000
800005ac: 09478513 addi a0,a5,148 # 81000094 <z+0xfffffe0c>
800005ac: 09478513 addi a0,a5,148 # 81000094 <z+0xfffffde4>
800005b0: b29ff0ef jal ra,800000d8 <vx_print_str>
800005b4: 810007b7 lui a5,0x81000
800005b8: 26878793 addi a5,a5,616 # 81000268 <z+0xffffffe0>
800005b8: 29078793 addi a5,a5,656 # 81000290 <z+0xffffffe0>
800005bc: 0087a783 lw a5,8(a5)
800005c0: 00078513 mv a0,a5
800005c4: b51ff0ef jal ra,80000114 <vx_print_hex>
800005c8: 810007b7 lui a5,0x81000
800005cc: 09478513 addi a0,a5,148 # 81000094 <z+0xfffffe0c>
800005cc: 09478513 addi a0,a5,148 # 81000094 <z+0xfffffde4>
800005d0: b09ff0ef jal ra,800000d8 <vx_print_str>
800005d4: 810007b7 lui a5,0x81000
800005d8: 26878793 addi a5,a5,616 # 81000268 <z+0xffffffe0>
800005d8: 29078793 addi a5,a5,656 # 81000290 <z+0xffffffe0>
800005dc: 00c7a783 lw a5,12(a5)
800005e0: 00078513 mv a0,a5
800005e4: b31ff0ef jal ra,80000114 <vx_print_hex>
800005e8: 810007b7 lui a5,0x81000
800005ec: 09478513 addi a0,a5,148 # 81000094 <z+0xfffffe0c>
800005ec: 09478513 addi a0,a5,148 # 81000094 <z+0xfffffde4>
800005f0: ae9ff0ef jal ra,800000d8 <vx_print_str>
800005f4: 00000013 nop
800005f8: 01c12083 lw ra,28(sp)
@ -445,7 +445,7 @@ Disassembly of section .text:
80000614: 01010413 addi s0,sp,16
80000618: c6dff0ef jal ra,80000284 <test_tmc>
8000061c: 810007b7 lui a5,0x81000
80000620: 09878513 addi a0,a5,152 # 81000098 <z+0xfffffe10>
80000620: 09878513 addi a0,a5,152 # 81000098 <z+0xfffffde8>
80000624: ab5ff0ef jal ra,800000d8 <vx_print_str>
80000628: 00400513 li a0,4
8000062c: a3dff0ef jal ra,80000068 <vx_tmc>
@ -453,7 +453,7 @@ Disassembly of section .text:
80000634: 00100513 li a0,1
80000638: a31ff0ef jal ra,80000068 <vx_tmc>
8000063c: 810007b7 lui a5,0x81000
80000640: 0ac78513 addi a0,a5,172 # 810000ac <z+0xfffffe24>
80000640: 0ac78513 addi a0,a5,172 # 810000ac <z+0xfffffdfc>
80000644: a95ff0ef jal ra,800000d8 <vx_print_str>
80000648: f05ff0ef jal ra,8000054c <test_wsapwn>
8000064c: 00000013 nop
@ -527,83 +527,139 @@ Disassembly of section .text:
80000754: 04010113 addi sp,sp,64
80000758: 00008067 ret
8000075c <main>:
8000075c: fc010113 addi sp,sp,-64
80000760: 02112e23 sw ra,60(sp)
80000764: 02812c23 sw s0,56(sp)
80000768: 04010413 addi s0,sp,64
8000076c: 00100513 li a0,1
80000770: 8f9ff0ef jal ra,80000068 <vx_tmc>
80000774: 810007b7 lui a5,0x81000
80000778: 0f878513 addi a0,a5,248 # 810000f8 <z+0xfffffe70>
8000077c: 95dff0ef jal ra,800000d8 <vx_print_str>
80000780: 810007b7 lui a5,0x81000
80000784: 1dc78793 addi a5,a5,476 # 810001dc <z+0xffffff54>
80000788: fcf42423 sw a5,-56(s0)
8000078c: 810007b7 lui a5,0x81000
80000790: 21c78793 addi a5,a5,540 # 8100021c <z+0xffffff94>
80000794: fcf42623 sw a5,-52(s0)
80000798: 810007b7 lui a5,0x81000
8000079c: 28878793 addi a5,a5,648 # 81000288 <z+0x0>
800007a0: fcf42823 sw a5,-48(s0)
800007a4: 00400793 li a5,4
800007a8: fcf42a23 sw a5,-44(s0)
800007ac: 00400793 li a5,4
800007b0: fcf42c23 sw a5,-40(s0)
800007b4: 00400793 li a5,4
800007b8: fef42223 sw a5,-28(s0)
800007bc: 00400793 li a5,4
800007c0: fef42023 sw a5,-32(s0)
800007c4: fe442703 lw a4,-28(s0)
800007c8: fe042583 lw a1,-32(s0)
800007cc: fc840793 addi a5,s0,-56
800007d0: 00078693 mv a3,a5
800007d4: 800007b7 lui a5,0x80000
800007d8: 66078613 addi a2,a5,1632 # 80000660 <z+0xff0003d8>
800007dc: 00070513 mv a0,a4
800007e0: a35ff0ef jal ra,80000214 <vx_spawnWarps>
800007e4: fe042623 sw zero,-20(s0)
800007e8: 0800006f j 80000868 <main+0x10c>
800007ec: fe042423 sw zero,-24(s0)
800007f0: 0540006f j 80000844 <main+0xe8>
800007f4: fd442703 lw a4,-44(s0)
8000075c <vx_print_mat>:
8000075c: fd010113 addi sp,sp,-48
80000760: 02112623 sw ra,44(sp)
80000764: 02812423 sw s0,40(sp)
80000768: 03010413 addi s0,sp,48
8000076c: fca42e23 sw a0,-36(s0)
80000770: fcb42c23 sw a1,-40(s0)
80000774: fcc42a23 sw a2,-44(s0)
80000778: 810007b7 lui a5,0x81000
8000077c: 0f878513 addi a0,a5,248 # 810000f8 <z+0xfffffe48>
80000780: 959ff0ef jal ra,800000d8 <vx_print_str>
80000784: fe042623 sw zero,-20(s0)
80000788: 07c0006f j 80000804 <vx_print_mat+0xa8>
8000078c: fe042423 sw zero,-24(s0)
80000790: 0500006f j 800007e0 <vx_print_mat+0x84>
80000794: fec42703 lw a4,-20(s0)
80000798: fd442783 lw a5,-44(s0)
8000079c: 02f70733 mul a4,a4,a5
800007a0: fe842783 lw a5,-24(s0)
800007a4: 00f707b3 add a5,a4,a5
800007a8: fef42223 sw a5,-28(s0)
800007ac: fe442783 lw a5,-28(s0)
800007b0: 00279793 slli a5,a5,0x2
800007b4: fdc42703 lw a4,-36(s0)
800007b8: 00f707b3 add a5,a4,a5
800007bc: 0007a783 lw a5,0(a5)
800007c0: 00078513 mv a0,a5
800007c4: 951ff0ef jal ra,80000114 <vx_print_hex>
800007c8: 810007b7 lui a5,0x81000
800007cc: 11078513 addi a0,a5,272 # 81000110 <z+0xfffffe60>
800007d0: 909ff0ef jal ra,800000d8 <vx_print_str>
800007d4: fe842783 lw a5,-24(s0)
800007d8: 00178793 addi a5,a5,1
800007dc: fef42423 sw a5,-24(s0)
800007e0: fe842703 lw a4,-24(s0)
800007e4: fd442783 lw a5,-44(s0)
800007e8: faf746e3 blt a4,a5,80000794 <vx_print_mat+0x38>
800007ec: 810007b7 lui a5,0x81000
800007f0: 11478513 addi a0,a5,276 # 81000114 <z+0xfffffe64>
800007f4: 8e5ff0ef jal ra,800000d8 <vx_print_str>
800007f8: fec42783 lw a5,-20(s0)
800007fc: 02f70733 mul a4,a4,a5
80000800: fe842783 lw a5,-24(s0)
80000804: 00f707b3 add a5,a4,a5
80000808: fcf42e23 sw a5,-36(s0)
8000080c: 810007b7 lui a5,0x81000
80000810: fdc42703 lw a4,-36(s0)
80000814: 00271713 slli a4,a4,0x2
80000818: 28878793 addi a5,a5,648 # 81000288 <z+0x0>
8000081c: 00f707b3 add a5,a4,a5
80000820: 0007a783 lw a5,0(a5)
80000824: 00078513 mv a0,a5
80000828: 8edff0ef jal ra,80000114 <vx_print_hex>
8000082c: 810007b7 lui a5,0x81000
80000830: 10478513 addi a0,a5,260 # 81000104 <z+0xfffffe7c>
80000834: 8a5ff0ef jal ra,800000d8 <vx_print_str>
80000838: fe842783 lw a5,-24(s0)
8000083c: 00178793 addi a5,a5,1
80000840: fef42423 sw a5,-24(s0)
80000844: fd442703 lw a4,-44(s0)
80000848: fe842783 lw a5,-24(s0)
8000084c: fae7e4e3 bltu a5,a4,800007f4 <main+0x98>
80000850: 810007b7 lui a5,0x81000
80000854: 10878513 addi a0,a5,264 # 81000108 <z+0xfffffe80>
80000858: 881ff0ef jal ra,800000d8 <vx_print_str>
8000085c: fec42783 lw a5,-20(s0)
80000860: 00178793 addi a5,a5,1
80000864: fef42623 sw a5,-20(s0)
80000868: fd842703 lw a4,-40(s0)
8000086c: fec42783 lw a5,-20(s0)
80000870: f6e7eee3 bltu a5,a4,800007ec <main+0x90>
80000874: 00000793 li a5,0
80000878: 00078513 mv a0,a5
8000087c: 03c12083 lw ra,60(sp)
80000880: 03812403 lw s0,56(sp)
80000884: 04010113 addi sp,sp,64
80000888: 00008067 ret
800007fc: 00178793 addi a5,a5,1
80000800: fef42623 sw a5,-20(s0)
80000804: fec42703 lw a4,-20(s0)
80000808: fd842783 lw a5,-40(s0)
8000080c: f8f740e3 blt a4,a5,8000078c <vx_print_mat+0x30>
80000810: 00000013 nop
80000814: 02c12083 lw ra,44(sp)
80000818: 02812403 lw s0,40(sp)
8000081c: 03010113 addi sp,sp,48
80000820: 00008067 ret
80000824 <main>:
80000824: fd010113 addi sp,sp,-48
80000828: 02112623 sw ra,44(sp)
8000082c: 02812423 sw s0,40(sp)
80000830: 03010413 addi s0,sp,48
80000834: 00100513 li a0,1
80000838: 831ff0ef jal ra,80000068 <vx_tmc>
8000083c: 810007b7 lui a5,0x81000
80000840: 11878513 addi a0,a5,280 # 81000118 <z+0xfffffe68>
80000844: 895ff0ef jal ra,800000d8 <vx_print_str>
80000848: 810007b7 lui a5,0x81000
8000084c: 12478513 addi a0,a5,292 # 81000124 <z+0xfffffe74>
80000850: 889ff0ef jal ra,800000d8 <vx_print_str>
80000854: 810007b7 lui a5,0x81000
80000858: 20478793 addi a5,a5,516 # 81000204 <z+0xffffff54>
8000085c: fcf42a23 sw a5,-44(s0)
80000860: 810007b7 lui a5,0x81000
80000864: 24478793 addi a5,a5,580 # 81000244 <z+0xffffff94>
80000868: fcf42c23 sw a5,-40(s0)
8000086c: 810007b7 lui a5,0x81000
80000870: 2b078793 addi a5,a5,688 # 810002b0 <z+0x0>
80000874: fcf42e23 sw a5,-36(s0)
80000878: 00400793 li a5,4
8000087c: fef42023 sw a5,-32(s0)
80000880: 00400793 li a5,4
80000884: fef42223 sw a5,-28(s0)
80000888: 00400793 li a5,4
8000088c: fef42623 sw a5,-20(s0)
80000890: 00400793 li a5,4
80000894: fef42423 sw a5,-24(s0)
80000898: fec42703 lw a4,-20(s0)
8000089c: fe842583 lw a1,-24(s0)
800008a0: fd440793 addi a5,s0,-44
800008a4: 00078693 mv a3,a5
800008a8: 800007b7 lui a5,0x80000
800008ac: 66078613 addi a2,a5,1632 # 80000660 <z+0xff0003b0>
800008b0: 00070513 mv a0,a4
800008b4: 961ff0ef jal ra,80000214 <vx_spawnWarps>
800008b8: fe442783 lw a5,-28(s0)
800008bc: 00078713 mv a4,a5
800008c0: fe042783 lw a5,-32(s0)
800008c4: 00078613 mv a2,a5
800008c8: 00070593 mv a1,a4
800008cc: 810007b7 lui a5,0x81000
800008d0: 2b078513 addi a0,a5,688 # 810002b0 <z+0x0>
800008d4: e89ff0ef jal ra,8000075c <vx_print_mat>
800008d8: 810007b7 lui a5,0x81000
800008dc: 2b078793 addi a5,a5,688 # 810002b0 <z+0x0>
800008e0: fcf42a23 sw a5,-44(s0)
800008e4: 810007b7 lui a5,0x81000
800008e8: 24478793 addi a5,a5,580 # 81000244 <z+0xffffff94>
800008ec: fcf42c23 sw a5,-40(s0)
800008f0: 810007b7 lui a5,0x81000
800008f4: 2b078793 addi a5,a5,688 # 810002b0 <z+0x0>
800008f8: fcf42e23 sw a5,-36(s0)
800008fc: 00400793 li a5,4
80000900: fef42023 sw a5,-32(s0)
80000904: 00400793 li a5,4
80000908: fef42223 sw a5,-28(s0)
8000090c: fec42703 lw a4,-20(s0)
80000910: fe842583 lw a1,-24(s0)
80000914: fd440793 addi a5,s0,-44
80000918: 00078693 mv a3,a5
8000091c: 800007b7 lui a5,0x80000
80000920: 66078613 addi a2,a5,1632 # 80000660 <z+0xff0003b0>
80000924: 00070513 mv a0,a4
80000928: 8edff0ef jal ra,80000214 <vx_spawnWarps>
8000092c: fe442783 lw a5,-28(s0)
80000930: 00078713 mv a4,a5
80000934: fe042783 lw a5,-32(s0)
80000938: 00078613 mv a2,a5
8000093c: 00070593 mv a1,a4
80000940: 810007b7 lui a5,0x81000
80000944: 2b078513 addi a0,a5,688 # 810002b0 <z+0x0>
80000948: e15ff0ef jal ra,8000075c <vx_print_mat>
8000094c: 00000793 li a5,0
80000950: 00078513 mv a0,a5
80000954: 02c12083 lw ra,44(sp)
80000958: 02812403 lw s0,40(sp)
8000095c: 03010113 addi sp,sp,48
80000960: 00008067 ret
Disassembly of section .rodata:
@ -630,7 +686,7 @@ Disassembly of section .rodata:
8100002a: 0000 unimp
8100002c: 0062 c.slli zero,0x18
8100002e: 0000 unimp
81000030: 00000063 beqz zero,81000030 <main+0xfff8d4>
81000030: 00000063 beqz zero,81000030 <main+0xfff80c>
81000034: 0064 addi s1,sp,12
81000036: 0000 unimp
81000038: 0065 c.nop 25
@ -661,7 +717,7 @@ Disassembly of section .rodata:
8100006e: 0000 unimp
81000070: 0062 c.slli zero,0x18
81000072: 0000 unimp
81000074: 00000063 beqz zero,81000074 <main+0xfff918>
81000074: 00000063 beqz zero,81000074 <main+0xfff850>
81000078: 0064 addi s1,sp,12
8100007a: 0000 unimp
8100007c: 0065 c.nop 25
@ -671,7 +727,7 @@ Disassembly of section .rodata:
81000084: 6574 flw fa3,76(a0)
81000086: 6e697473 csrrci s0,0x6e6,18
8100008a: 6d745f67 0x6d745f67
8100008e: 00000a63 beqz zero,810000a2 <main+0xfff946>
8100008e: 00000a63 beqz zero,810000a2 <main+0xfff87e>
81000092: 0000 unimp
81000094: 000a c.slli zero,0x2
81000096: 0000 unimp
@ -709,188 +765,185 @@ Disassembly of section .rodata:
810000e2: 0000 unimp
810000e4: 0062 c.slli zero,0x18
810000e6: 0000 unimp
810000e8: 00000063 beqz zero,810000e8 <main+0xfff98c>
810000e8: 00000063 beqz zero,810000e8 <main+0xfff8c4>
810000ec: 0064 addi s1,sp,12
810000ee: 0000 unimp
810000f0: 0065 c.nop 25
810000f2: 0000 unimp
810000f4: 0066 c.slli zero,0x19
810000f6: 0000 unimp
810000f8: 6544 flw fs1,12(a0)
810000fa: 2076 fld ft0,344(sp)
810000fc: 614d addi sp,sp,176
810000fe: 6e69 lui t3,0x1a
81000100: 000a c.slli zero,0x2
81000102: 0000 unimp
81000104: 0020 addi s0,sp,8
81000106: 0000 unimp
81000108: 000a c.slli zero,0x2
810000f8: 2d2d jal 81000732 <z+0x482>
810000fa: 2d2d jal 81000734 <z+0x484>
810000fc: 2d2d jal 81000736 <z+0x486>
810000fe: 2d2d jal 81000738 <z+0x488>
81000100: 2d2d jal 8100073a <z+0x48a>
81000102: 2d2d jal 8100073c <z+0x48c>
81000104: 2d2d jal 8100073e <z+0x48e>
81000106: 2d2d jal 81000740 <z+0x490>
81000108: 2d2d jal 81000742 <z+0x492>
8100010a: 2d2d jal 81000744 <z+0x494>
8100010c: 0a2d addi s4,s4,11
8100010e: 0000 unimp
81000110: 0020 addi s0,sp,8
81000112: 0000 unimp
81000114: 000a c.slli zero,0x2
81000116: 0000 unimp
81000118: 6544 flw fs1,12(a0)
8100011a: 2076 fld ft0,344(sp)
8100011c: 614d addi sp,sp,176
8100011e: 6e69 lui t3,0x1a
81000120: 000a c.slli zero,0x2
81000122: 0000 unimp
81000124: 7876 flw fa6,124(sp)
81000126: 735f 6170 6e77 0x6e776170735f
8100012c: 70726157 0x70726157
81000130: 0xa73
Disassembly of section .data:
8100010c <hextoa>:
8100010c: 0000 unimp
8100010e: 8100 0x8100
81000110: 0004 0x4
81000112: 8100 0x8100
81000114: 0008 0x8
81000116: 8100 0x8100
81000118: 000c 0xc
8100011a: 8100 0x8100
8100011c: 0010 0x10
8100011e: 8100 0x8100
81000120: 0014 0x14
81000122: 8100 0x8100
81000124: 0018 0x18
81000126: 8100 0x8100
81000128: 001c 0x1c
8100012a: 8100 0x8100
8100012c: 0020 addi s0,sp,8
8100012e: 8100 0x8100
81000130: 0024 addi s1,sp,8
81000132: 8100 0x8100
81000134: 0028 addi a0,sp,8
81000134 <hextoa>:
81000134: 0000 unimp
81000136: 8100 0x8100
81000138: 002c addi a1,sp,8
81000138: 0004 0x4
8100013a: 8100 0x8100
8100013c: 0030 addi a2,sp,8
8100013c: 0008 0x8
8100013e: 8100 0x8100
81000140: 0034 addi a3,sp,8
81000140: 000c 0xc
81000142: 8100 0x8100
81000144: 0038 addi a4,sp,8
81000144: 0010 0x10
81000146: 8100 0x8100
81000148: 003c addi a5,sp,8
81000148: 0014 0x14
8100014a: 8100 0x8100
8100014c <hextoa>:
8100014c: 0044 addi s1,sp,4
8100014c: 0018 0x18
8100014e: 8100 0x8100
81000150: 0048 addi a0,sp,4
81000150: 001c 0x1c
81000152: 8100 0x8100
81000154: 004c addi a1,sp,4
81000154: 0020 addi s0,sp,8
81000156: 8100 0x8100
81000158: 0050 addi a2,sp,4
81000158: 0024 addi s1,sp,8
8100015a: 8100 0x8100
8100015c: 0054 addi a3,sp,4
8100015c: 0028 addi a0,sp,8
8100015e: 8100 0x8100
81000160: 0058 addi a4,sp,4
81000160: 002c addi a1,sp,8
81000162: 8100 0x8100
81000164: 005c addi a5,sp,4
81000164: 0030 addi a2,sp,8
81000166: 8100 0x8100
81000168: 0060 addi s0,sp,12
81000168: 0034 addi a3,sp,8
8100016a: 8100 0x8100
8100016c: 0064 addi s1,sp,12
8100016c: 0038 addi a4,sp,8
8100016e: 8100 0x8100
81000170: 0068 addi a0,sp,12
81000170: 003c addi a5,sp,8
81000172: 8100 0x8100
81000174: 006c addi a1,sp,12
81000174 <hextoa>:
81000174: 0044 addi s1,sp,4
81000176: 8100 0x8100
81000178: 0070 addi a2,sp,12
81000178: 0048 addi a0,sp,4
8100017a: 8100 0x8100
8100017c: 0074 addi a3,sp,12
8100017c: 004c addi a1,sp,4
8100017e: 8100 0x8100
81000180: 0078 addi a4,sp,12
81000180: 0050 addi a2,sp,4
81000182: 8100 0x8100
81000184: 007c addi a5,sp,12
81000184: 0054 addi a3,sp,4
81000186: 8100 0x8100
81000188: 0080 addi s0,sp,64
81000188: 0058 addi a4,sp,4
8100018a: 8100 0x8100
8100018c <tmc_array>:
8100018c: 0005 c.nop 1
8100018e: 0000 unimp
81000190: 0005 c.nop 1
81000192: 0000 unimp
81000194: 0005 c.nop 1
81000196: 0000 unimp
81000198: 0005 c.nop 1
...
8100019c <hextoa>:
8100019c: 00b8 addi a4,sp,72
8100018c: 005c addi a5,sp,4
8100018e: 8100 0x8100
81000190: 0060 addi s0,sp,12
81000192: 8100 0x8100
81000194: 0064 addi s1,sp,12
81000196: 8100 0x8100
81000198: 0068 addi a0,sp,12
8100019a: 8100 0x8100
8100019c: 006c addi a1,sp,12
8100019e: 8100 0x8100
810001a0: 00bc addi a5,sp,72
810001a0: 0070 addi a2,sp,12
810001a2: 8100 0x8100
810001a4: 00c0 addi s0,sp,68
810001a4: 0074 addi a3,sp,12
810001a6: 8100 0x8100
810001a8: 00c4 addi s1,sp,68
810001a8: 0078 addi a4,sp,12
810001aa: 8100 0x8100
810001ac: 00c8 addi a0,sp,68
810001ac: 007c addi a5,sp,12
810001ae: 8100 0x8100
810001b0: 00cc addi a1,sp,68
810001b0: 0080 addi s0,sp,64
810001b2: 8100 0x8100
810001b4: 00d0 addi a2,sp,68
810001b6: 8100 0x8100
810001b8: 00d4 addi a3,sp,68
810001ba: 8100 0x8100
810001bc: 00d8 addi a4,sp,68
810001be: 8100 0x8100
810001c0: 00dc addi a5,sp,68
810001c2: 8100 0x8100
810001c4: 00e0 addi s0,sp,76
810001c6: 8100 0x8100
810001c8: 00e4 addi s1,sp,76
810001ca: 8100 0x8100
810001cc: 00e8 addi a0,sp,76
810001ce: 8100 0x8100
810001d0: 00ec addi a1,sp,76
810001d2: 8100 0x8100
810001d4: 00f0 addi a2,sp,76
810001d6: 8100 0x8100
810001d8: 00f4 addi a3,sp,76
810001da: 8100 0x8100
810001dc <x>:
810001dc: 0005 c.nop 1
810001de: 0000 unimp
810001e0: 0005 c.nop 1
810001e2: 0000 unimp
810001e4: 0005 c.nop 1
810001e6: 0000 unimp
810001e8: 0005 c.nop 1
810001ea: 0000 unimp
810001ec: 0006 c.slli zero,0x1
810001ee: 0000 unimp
810001f0: 0006 c.slli zero,0x1
810001f2: 0000 unimp
810001f4: 0006 c.slli zero,0x1
810001f6: 0000 unimp
810001f8: 0006 c.slli zero,0x1
810001fa: 0000 unimp
810001fc: 00000007 0x7
81000200: 00000007 0x7
81000204: 00000007 0x7
81000208: 00000007 0x7
8100020c: 0008 0x8
8100020e: 0000 unimp
81000210: 0008 0x8
81000212: 0000 unimp
81000214: 0008 0x8
81000216: 0000 unimp
81000218: 0008 0x8
810001b4 <tmc_array>:
810001b4: 0005 c.nop 1
810001b6: 0000 unimp
810001b8: 0005 c.nop 1
810001ba: 0000 unimp
810001bc: 0005 c.nop 1
810001be: 0000 unimp
810001c0: 0005 c.nop 1
...
8100021c <y>:
8100021c: 0001 nop
810001c4 <hextoa>:
810001c4: 00b8 addi a4,sp,72
810001c6: 8100 0x8100
810001c8: 00bc addi a5,sp,72
810001ca: 8100 0x8100
810001cc: 00c0 addi s0,sp,68
810001ce: 8100 0x8100
810001d0: 00c4 addi s1,sp,68
810001d2: 8100 0x8100
810001d4: 00c8 addi a0,sp,68
810001d6: 8100 0x8100
810001d8: 00cc addi a1,sp,68
810001da: 8100 0x8100
810001dc: 00d0 addi a2,sp,68
810001de: 8100 0x8100
810001e0: 00d4 addi a3,sp,68
810001e2: 8100 0x8100
810001e4: 00d8 addi a4,sp,68
810001e6: 8100 0x8100
810001e8: 00dc addi a5,sp,68
810001ea: 8100 0x8100
810001ec: 00e0 addi s0,sp,76
810001ee: 8100 0x8100
810001f0: 00e4 addi s1,sp,76
810001f2: 8100 0x8100
810001f4: 00e8 addi a0,sp,76
810001f6: 8100 0x8100
810001f8: 00ec addi a1,sp,76
810001fa: 8100 0x8100
810001fc: 00f0 addi a2,sp,76
810001fe: 8100 0x8100
81000200: 00f4 addi a3,sp,76
81000202: 8100 0x8100
81000204 <x>:
81000204: 0005 c.nop 1
81000206: 0000 unimp
81000208: 0005 c.nop 1
8100020a: 0000 unimp
8100020c: 0005 c.nop 1
8100020e: 0000 unimp
81000210: 0005 c.nop 1
81000212: 0000 unimp
81000214: 0006 c.slli zero,0x1
81000216: 0000 unimp
81000218: 0006 c.slli zero,0x1
8100021a: 0000 unimp
8100021c: 0006 c.slli zero,0x1
8100021e: 0000 unimp
81000220: 0001 nop
81000220: 0006 c.slli zero,0x1
81000222: 0000 unimp
81000224: 0001 nop
81000226: 0000 unimp
81000228: 0001 nop
8100022a: 0000 unimp
8100022c: 0001 nop
8100022e: 0000 unimp
81000230: 0001 nop
81000232: 0000 unimp
81000234: 0001 nop
81000224: 00000007 0x7
81000228: 00000007 0x7
8100022c: 00000007 0x7
81000230: 00000007 0x7
81000234: 0008 0x8
81000236: 0000 unimp
81000238: 0001 nop
81000238: 0008 0x8
8100023a: 0000 unimp
8100023c: 0001 nop
8100023c: 0008 0x8
8100023e: 0000 unimp
81000240: 0001 nop
81000242: 0000 unimp
81000240: 0008 0x8
...
81000244 <y>:
81000244: 0001 nop
81000246: 0000 unimp
81000248: 0001 nop
@ -902,29 +955,49 @@ Disassembly of section .data:
81000254: 0001 nop
81000256: 0000 unimp
81000258: 0001 nop
8100025a: 0000 unimp
8100025c: 0001 nop
8100025e: 0000 unimp
81000260: 0001 nop
81000262: 0000 unimp
81000264: 0001 nop
81000266: 0000 unimp
81000268: 0001 nop
8100026a: 0000 unimp
8100026c: 0001 nop
8100026e: 0000 unimp
81000270: 0001 nop
81000272: 0000 unimp
81000274: 0001 nop
81000276: 0000 unimp
81000278: 0001 nop
8100027a: 0000 unimp
8100027c: 0001 nop
8100027e: 0000 unimp
81000280: 0001 nop
...
Disassembly of section .bss:
8100025c <global_argument_struct>:
8100025c: 0000 unimp
81000284 <global_argument_struct>:
81000284: 0000 unimp
...
81000260 <global_function_pointer>:
81000260: 0000 unimp
81000288 <global_function_pointer>:
81000288: 0000 unimp
...
81000264 <global_num_threads>:
81000264: 0000 unimp
8100028c <global_num_threads>:
8100028c: 0000 unimp
...
81000268 <wsapwn_arr>:
81000290 <wsapwn_arr>:
...
81000278 <div_arr>:
810002a0 <div_arr>:
...
81000288 <z>:
810002b0 <z>:
...
Disassembly of section .comment:

Binary file not shown.

View file

@ -1,6 +1,6 @@
:0200000480007A
:100000009705000093850502130540006B10B500AD
:10001000EF000001EF008074130500006B00050085
:10001000EF000001EF001001130500006B00050068
:10002000130540006B000500F32610029396A6010D
:10003000732600029315A6001316260037F1FF6FF2
:100040003301B1403301D1403301C100F326100226
@ -18,7 +18,7 @@
:100100001301C10067800000B702010023A0B20004
:1001100067800000130101FE232E1100232C8100B3
:10012000130401022326A4FEB70700810327C4FE9F
:10013000131727009387C710B307F70083A707009B
:100130001317270093874713B307F70083A7070018
:1001400013850700EFF05FF9130000008320C10161
:10015000032481011301010267800000130101FEE5
:10016000232E1100232C8100130401022326A4FE58
@ -26,31 +26,31 @@
:10018000EFF05FF9B707008113850704EFF0DFF4A4
:10019000130000008320C101032481011301010227
:1001A00067800000130101FE232E1100232C810023
:1001B00013040102B707008183A7472613850700B0
:1001C000EFF09FEAB707008103A70726B707008172
:1001D00083A7C72513850700E7000700EFF0DFEAD4
:1001B00013040102B707008183A7C728138507002E
:1001C000EFF09FEAB707008103A78728B7070081F0
:1001D00083A7472813850700E7000700EFF0DFEA51
:1001E0002326A4FE8327C4FE6388070013050000AE
:1001F000EFF09FE76F00C00013051000EFF0DFE69F
:10020000130000008320C1010324810113010102B6
:1002100067800000130101FE232E1100232C8100B2
:10022000130401022326A4FE2324B4FE2322C4FEC9
:100230002320D4FEB7070081032744FE23A0E7262E
:10024000B7070081032704FE23AEE724B707008128
:10025000032784FE23A2E726B70700809387471A67
:100230002320D4FEB7070081032744FE23A4E72828
:10024000B7070081032704FE23A2E728B707008130
:10025000032784FE23A6E728B70700809387471A61
:10026000938507000325C4FEEFF09FDFEFF09FF3B7
:10027000130000008320C101032481011301010246
:1002800067800000130101FE232E1100232C810042
:1002900013040102B707008113854708EFF0DFE37D
:1002A00013054000EFF05FDCEFF09FDE2326A4FE95
:1002B0000327C4FEB70700818326C4FE9396260059
:1002C0009387C718B387F60023A0E7001305100033
:1002D000EFF09FD9B707008183A7C71813850700E0
:1002C0009387471BB387F60023A0E70013051000B0
:1002D000EFF09FD9B707008183A7471B138507005D
:1002E000EFF05FE3B707008113854709EFF0DFDE2A
:1002F000B70700819387C71883A7470013850700B6
:1002F000B70700819387471B83A747001385070033
:10030000EFF05FE1B707008113854709EFF0DFDC0D
:10031000B70700819387C71883A787001385070055
:10031000B70700819387471B83A7870013850700D2
:10032000EFF05FDFB707008113854709EFF0DFDAF1
:10033000B70700819387C71883A7C70013850700F5
:10033000B70700819387471B83A7C7001385070072
:10034000EFF05FDDB707008113854709EFF0DFD8D5
:10035000130000008320C101032481011301010265
:1003600067800000130101FE232E1100232C810061
@ -59,40 +59,40 @@
:10039000EFF09FCE8347B4FE638407068327C4FE35
:1003A00093B717002305F4FE8347A4FE13850700C7
:1003B000EFF09FCC8347A4FE63820702B70700815A
:1003C0000327C4FE1317270093878727B307F70077
:1003C0000327C4FE131727009387072AB307F700F4
:1003D0001307A00023A0E7006F000002B707008109
:1003E0000327C4FE1317270093878727B307F70057
:1003E0000327C4FE131727009387072AB307F700D4
:1003F0001307B00023A0E700EFF09FC86F0040068E
:100400008327C4FE93B73700A304F4FE834794FE0A
:1004100013850700EFF05FC6834794FE63820702EF
:10042000B70700810327C4FE131727009387872788
:10042000B70700810327C4FE131727009387072A05
:10043000B307F7001307C00023A0E7006F00000216
:10044000B70700810327C4FE131727009387872768
:10044000B70700810327C4FE131727009387072AE5
:10045000B307F7001307D00023A0E700EFF05FC257
:10046000EFF01FC2B707008183A787271385070016
:10046000EFF01FC2B707008183A7072A1385070093
:10047000EFF05FCAB707008113854709EFF0DFC5CA
:10048000B70700819387872783A747001385070055
:10048000B70700819387072A83A7470013850700D2
:10049000EFF05FC8B707008113854709EFF0DFC3AE
:1004A000B70700819387872783A7870013850700F5
:1004A000B70700819387072A83A787001385070072
:1004B000EFF05FC6B707008113854709EFF0DFC192
:1004C000B70700819387872783A7C7001385070095
:1004C000B70700819387072A83A7C7001385070012
:1004D000EFF05FC4B707008113854709EFF0DFBF76
:1004E000130000008320C1010324810113010102D4
:1004F00067800000130101FE232E1100232C8100D0
:1005000013040102EFF05FB82326A4FEB7070081B1
:100510000327C4FE1317270093878726B307F70026
:100510000327C4FE1317270093870729B307F700A3
:100520000327C4FE23A0E7008327C4FE63860700D9
:1005300013050000EFF05FB3130000008320C1013A
:10054000032481011301010267800000130101FEF1
:10055000232E1100232C810013040102B707008011
:100560009387474F2326F4FE8325C4FE13054000DE
:10057000EFF01FAFEFF01FF8B707008183A78726C2
:10057000EFF01FAFEFF01FF8B707008183A707293F
:1005800013850700EFF01FB9B707008113854709EE
:10059000EFF09FB4B70700819387872683A74700B2
:10059000EFF09FB4B70700819387072983A747002F
:1005A00013850700EFF01FB7B707008113854709D0
:1005B000EFF09FB2B70700819387872683A7870054
:1005B000EFF09FB2B70700819387072983A78700D1
:1005C00013850700EFF01FB5B707008113854709B2
:1005D000EFF09FB0B70700819387872683A7C700F6
:1005D000EFF09FB0B70700819387072983A7C70073
:1005E00013850700EFF01FB3B70700811385470994
:1005F000EFF09FAE130000008320C10103248101AE
:100600001301010267800000130101FF232611007E
@ -116,26 +116,40 @@
:10072000B307F70003A707008327C4FE03A68700CB
:100730008327C4FD93972700B307F6003387E600AD
:1007400023A0E700EFF0DF93130000008320C10334
:10075000032481031301010467800000130101FCDD
:10076000232E1102232C810213040104130510000F
:10077000EFF09F8FB70700811385870FEFF0DF95AC
:10078000B70700819387C71D2324F4FCB7070081B6
:100790009387C7212326F4FCB70700819387872816
:1007A0002328F4FC93074000232AF4FC930740001D
:1007B000232CF4FC930740002322F4FE930740000F
:1007C0002320F4FE032744FE832504FE930784FCC4
:1007D00093860700B7070080138607661305070096
:1007E000EFF05FA3232604FE6F000008232404FE1D
:1007F0006F004005032744FD8327C4FE3307F7023B
:10080000832784FEB307F700232EF4FCB70700818B
:100810000327C4FD1317270093878728B307F70022
:1008200083A7070013850700EFF0DF8EB70700816D
:1008300013854710EFF05F8A832784FE93871700A4
:100840002324F4FE032744FD832784FEE3E4E7FA30
:10085000B707008113858710EFF01F888327C4FE38
:10086000938717002326F4FE032784FD8327C4FE05
:10087000E3EEE7F693070000138507008320C1032A
:0C088000032481031301010467800000C1
:10075000032481031301010467800000130101FDDC
:10076000232611022324810213040103232EA4FC57
:10077000232CB4FC232AC4FCB70700811385870F00
:10078000EFF09F95232604FE6F00C007232404FE8C
:100790006F0000050327C4FE832744FD3307F702DB
:1007A000832784FEB307F7002322F4FE832744FE49
:1007B000939727000327C4FDB307F70083A707001B
:1007C00013850700EFF01F95B70700811385071108
:1007D000EFF09F90832784FE938717002324F4FE75
:1007E000032784FE832744FDE346F7FAB707008119
:1007F00013854711EFF05F8E8327C4FE93871700A0
:100800002326F4FE0327C4FE832784FDE340F7F884
:10081000130000008320C10203248102130101039D
:1008200067800000130101FD2326110223248102A9
:100830001304010313051000EFF01F83B7070081B5
:1008400013858711EFF05F89B70700811385471281
:10085000EFF09F88B707008193874720232AF4FC95
:10086000B707008193874724232CF4FCB707008146
:100870009387072B232EF4FC930740002320F4FEDC
:10088000930740002322F4FE930740002326F4FE42
:10089000930740002324F4FE0327C4FE832584FE2F
:1008A000930744FD93860700B70700801386076609
:1008B00013050700EFF01F96832744FE13870700F8
:1008C000832704FE1386070093050700B7070081FE
:1008D0001385072BEFF09FE8B70700819387072B5D
:1008E000232AF4FCB707008193874724232CF4FCC8
:1008F000B70700819387072B232EF4FC9307400052
:100900002320F4FE930740002322F4FE0327C4FEB5
:10091000832584FE930744FD93860700B707008074
:100920001386076613050700EFF0DF8E832744FE6A
:1009300013870700832704FE13860700930507002B
:10094000B70700811385072BEFF05FE193070000E5
:10095000138507008320C1020324810213010103D0
:0409600067800000AC
:02000004810079
:10000000300000003100000032000000330000002A
:10001000340000003500000036000000370000000A
@ -152,28 +166,31 @@
:1000C0003200000033000000340000003500000062
:1000D0003600000037000000380000003900000042
:1000E0006100000062000000630000006400000086
:1000F0006500000066000000446576204D61696E71
:0A0100000A000000200000000A00C1
:10010C000000008104000081080000810C000081C7
:10011C001000008114000081180000811C00008177
:10012C002000008124000081280000812C00008127
:10013C003000008134000081380000813C000081D7
:10014C0044000081480000814C0000815000008177
:10015C0054000081580000815C0000816000008127
:10016C0064000081680000816C00008170000081D7
:10017C0074000081780000817C0000818000008187
:10018C00050000000500000005000000050000004F
:10019C00B8000081BC000081C0000081C400008157
:1001AC00C8000081CC000081D0000081D400008107
:1001BC00D8000081DC000081E0000081E4000081B7
:1001CC00E8000081EC000081F0000081F400008167
:1001DC0005000000050000000500000005000000FF
:1001EC0006000000060000000600000006000000EB
:1001FC0007000000070000000700000007000000D7
:10020C0008000000080000000800000008000000C2
:10021C0001000000010000000100000001000000CE
:10022C0001000000010000000100000001000000BE
:10023C0001000000010000000100000001000000AE
:10024C00010000000100000001000000010000009E
:1000F00065000000660000002D2D2D2D2D2D2D2DCD
:100100002D2D2D2D2D2D2D2D2D2D2D2D2D0A00009C
:10011000200000000A000000446576204D61696EF1
:100120000A00000076785F737061776E57617270B5
:03013000730A004F
:100134000000008104000081080000810C0000819F
:100144001000008114000081180000811C0000814F
:100154002000008124000081280000812C000081FF
:100164003000008134000081380000813C000081AF
:1001740044000081480000814C000081500000814F
:1001840054000081580000815C00008160000081FF
:1001940064000081680000816C00008170000081AF
:1001A40074000081780000817C000081800000815F
:1001B4000500000005000000050000000500000027
:1001C400B8000081BC000081C0000081C40000812F
:1001D400C8000081CC000081D0000081D4000081DF
:1001E400D8000081DC000081E0000081E40000818F
:1001F400E8000081EC000081F0000081F40000813F
:1002040005000000050000000500000005000000D6
:1002140006000000060000000600000006000000C2
:1002240007000000070000000700000007000000AE
:10023400080000000800000008000000080000009A
:1002440001000000010000000100000001000000A6
:100254000100000001000000010000000100000096
:100264000100000001000000010000000100000086
:100274000100000001000000010000000100000076
:040000058000000077
:00000001FF

View file

@ -35,3 +35,15 @@ void vx_spawnWarps(unsigned numWarps, unsigned numThreads, func_t func_ptr, void
setup_call();
}
// void vx_cl_spawnWarps(char * args, char * pocl_context, long group_x, long group_y, long group_z)
// {
// if (group_z != 1)
// {
// vx_printf("ERROR: group_z should be set equal to 1");
// return;
// }
// vx_spawnWarps(group_y, group_x, )
// }

View file

@ -9,8 +9,11 @@ typedef void (*func_t)(void *);
void vx_spawnWarps(unsigned numWarps, unsigned numThreads, func_t func_ptr , void * args);
void vx_cl_spawnWarps (char * /* args */,
char * /* pocl_context */,
long /* group_x */,
long /* group_y */,
long /* group_z */);

0
simX/BUGS Normal file
View file

12
simX/LICENSE Normal file
View file

@ -0,0 +1,12 @@
Copyright (c) 2011, Georgia Institute of Technology
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

29
simX/Makefile Normal file
View file

@ -0,0 +1,29 @@
################################################################################
# HARPtools by Chad D. Kersey, Summer 2011 #
################################################################################
CXXFLAGS ?= -std=c++11 -fPIC -O3 # -g -DUSE_DEBUG=3 -DPRINT_ACTIVE_THREADS
LIB_OBJS=simX.cpp args.cpp mem.cpp core.cpp instruction.cpp enc.cpp util.cpp
INCLUDE=-I. -I../rtl/shared_memory -I../rtl/cache -I../rtl/interfaces -Isimulate -I../rtl
FILE=cache_simX.v
COMP=--compiler gcc
LIB=
CF=-CFLAGS '-std=c++11 -fPIC -O3'
LIGHTW=-Wno-UNOPTFLAT -Wno-BLKLOOPINIT
EXE=--exe $(LIB_OBJS)
all: simX
# simX:
# g++ $(LDFLAGS) $(LIB_OBJS) -o simX.run
simX:
verilator $(COMP) -cc $(FILE) $(INCLUDE) $(EXE) $(LIB) $(CF) $(LIGHTW)
(cd obj_dir && make -j -f Vcache_simX.mk OPT='-DVL_DEBUG' VL_DEBUG=1 DVL_DEBUG=1)
clean:
rm -rf *~ \#* *.o *.a *.so include/*~ include/\#* simX.run obj_dir

14
simX/WISHLIST Normal file
View file

@ -0,0 +1,14 @@
- Anonymous chunks whose names are not saved by the object writer.
- 32-bit instruction encoding for larger-pointered architecture versions.
- HOFDump mode for HARPTool/HOFTool
- Make operation information tables into member functions of Instruction, if
possible.
- Anonymous assigned values in the assembler.
- References (pointers) as .word directive contents in the assembler.
- Instruction validation before encoding.
- Make readError in obj.cpp throw something instead of printing a message and
exiting.
- Limit checking for byte/word encoders (e.g. 255 pRegs, 256 regs for byte)
- Eliminate the tmp_buf nonsense from the chunk encoder.
- Loosen arch restrictions imposed for interoperability (the number of lanes is
typically unimportant)

52
simX/args.cpp Normal file
View file

@ -0,0 +1,52 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#include "include/args.h"
#include <iostream>
#include <string>
using namespace HarpTools;
using std::string;
std::string CommandLineArg::helpString;
std::map<string, CommandLineArg *> CommandLineArg::longArgs;
std::map<string, CommandLineArg *> CommandLineArg::shortArgs;
CommandLineArg::CommandLineArg(string s, string l, const char *helpText)
{
helpString += helpText;
longArgs[l] = this;
shortArgs[s] = this;
}
CommandLineArg::CommandLineArg(string l, const char *helpText) {
helpString += helpText;
longArgs[l] = this;
}
void CommandLineArg::readArgs(int argc, char **argv) {
for (int i = 0; i < argc; i++) {
std::map<string, CommandLineArg *>::iterator
s = shortArgs.find(std::string(argv[i])),
l = longArgs.find(std::string(argv[i]));
if (s != shortArgs.end()) {
i += s->second->read(argc - i, &argv[i]);
} else if (l != longArgs.end()) {
i += l->second->read(argc - i, &argv[i]);
} else {
throw BadArg(string(argv[i]));
}
}
}
void CommandLineArg::clearArgs() {
shortArgs.clear();
longArgs.clear();
helpString = "";
}
void CommandLineArg::showHelp(std::ostream &os) {
os << helpString;
}

126
simX/cache_simX.v Normal file
View file

@ -0,0 +1,126 @@
`include "../rtl/VX_define.v"
module cache_simX (
input wire clk, // Clock
input wire reset,
// Icache
input wire[31:0] in_icache_pc_addr,
input wire in_icache_valid_pc_addr,
output wire out_icache_stall,
// Dcache
input wire[2:0] in_dcache_mem_read,
input wire[2:0] in_dcache_mem_write,
input wire in_dcache_in_valid[`NT_M1:0],
input wire[31:0] in_dcache_in_address[`NT_M1:0],
output wire out_dcache_stall
);
//////////////////// ICACHE ///////////////////
VX_icache_request_inter VX_icache_req;
assign VX_icache_req.pc_address = in_icache_pc_addr;
assign VX_icache_req.out_cache_driver_in_mem_read = (in_icache_valid_pc_addr) ? `LW_MEM_READ : `NO_MEM_READ;
assign VX_icache_req.out_cache_driver_in_mem_write = `NO_MEM_WRITE;
assign VX_icache_req.out_cache_driver_in_valid = in_icache_valid_pc_addr;
assign VX_icache_req.out_cache_driver_in_data = 0;
VX_icache_response_inter VX_icache_rsp;
assign out_icache_stall = VX_icache_rsp.delay;
VX_dram_req_rsp_inter #(
.NUMBER_BANKS(`ICACHE_BANKS),
.NUM_WORDS_PER_BLOCK(`ICACHE_NUM_WORDS_PER_BLOCK)
) VX_dram_req_rsp_icache();
reg icache_i_m_ready;
assign VX_dram_req_rsp_icache.i_m_ready = icache_i_m_ready;
//////////////////// DCACHE ///////////////////
VX_dcache_request_inter VX_dcache_req;
assign VX_dcache_req.out_cache_driver_in_mem_read = in_dcache_mem_read;
assign VX_dcache_req.out_cache_driver_in_mem_write = in_dcache_mem_write;
assign VX_dcache_req.out_cache_driver_in_data = 0;
genvar curr_t;
for (curr_t = 0; curr_t < `NT; curr_t=curr_t+1)
begin
assign VX_dcache_req.out_cache_driver_in_address[curr_t] = in_dcache_in_address[curr_t];
assign VX_dcache_req.out_cache_driver_in_valid[curr_t] = in_dcache_in_valid[curr_t];
end
VX_dcache_response_inter VX_dcache_rsp;
assign out_dcache_stall = VX_dcache_rsp.delay;
VX_dram_req_rsp_inter #(
.NUMBER_BANKS(`DCACHE_BANKS),
.NUM_WORDS_PER_BLOCK(`DCACHE_NUM_WORDS_PER_BLOCK)
) VX_dram_req_rsp();
reg dcache_i_m_ready;
assign VX_dram_req_rsp.i_m_ready = dcache_i_m_ready;
VX_dmem_controller dmem_controller (
.clk (clk),
.reset (reset),
.VX_dram_req_rsp (VX_dram_req_rsp),
.VX_dram_req_rsp_icache(VX_dram_req_rsp_icache),
.VX_icache_req (VX_icache_req),
.VX_icache_rsp (VX_icache_rsp),
.VX_dcache_req (VX_dcache_req),
.VX_dcache_rsp (VX_dcache_rsp)
);
always @(posedge clk, posedge reset) begin
if (reset)
begin
icache_i_m_ready <= 0;
dcache_i_m_ready <= 0;
end else begin
if (VX_dram_req_rsp_icache.o_m_valid) begin
icache_i_m_ready <= 1;
end else if (icache_i_m_ready) begin
icache_i_m_ready <= 0;
end else begin
icache_i_m_ready <= 0;
end
if (VX_dram_req_rsp.o_m_valid) begin
dcache_i_m_ready <= 1;
end else if (dcache_i_m_ready) begin
dcache_i_m_ready <= 0;
end else begin
dcache_i_m_ready <= 0;
end
end
end
endmodule

286
simX/core.cpp Normal file
View file

@ -0,0 +1,286 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#include <iostream>
#include <iomanip>
// #define USE_DEBUG 7
// #define PRINT_ACTIVE_THREADS
#include "include/types.h"
#include "include/util.h"
#include "include/archdef.h"
#include "include/mem.h"
#include "include/enc.h"
#include "include/core.h"
#include "include/debug.h"
#ifdef EMU_INSTRUMENTATION
#include "include/qsim-harp.h"
#endif
using namespace Harp;
using namespace std;
#ifdef EMU_INSTRUMENTATION
void Harp::reg_doRead(Word cpuId, Word regNum) {
Harp::OSDomain::osDomain->do_reg(cpuId, regNum, 8, true);
}
void Harp::reg_doWrite(Word cpuId, Word regNum) {
Harp::OSDomain::osDomain->do_reg(cpuId, regNum, 8, false);
}
#endif
Core::Core(const ArchDef &a, Decoder &d, MemoryUnit &mem, Word id):
a(a), iDec(d), mem(mem), steps(0)
{
cache_simulator = new Vcache_simX;
for (unsigned i = 0; i < a.getNWarps(); ++i)
w.push_back(Warp(this, i));
w[0].activeThreads = 1;
w[0].spawned = true;
}
bool Core::interrupt(Word r0) {
w[0].interrupt(r0);
}
void Core::step()
{
this->fetch();
}
void Core::fetch()
{
++steps;
#ifdef PRINT_ACTIVE_THREADS
cout << endl << "Threads:";
#endif
for (unsigned i = 0; i < w.size(); ++i) {
if (w[i].activeThreads) {
trace_inst_t trace_inst;
trace_inst.valid_inst = false;
trace_inst.pc = 0;
trace_inst.wid = i;
trace_inst.rs1 = -1;
trace_inst.rs2 = -1;
trace_inst.rd = -1;
trace_inst.is_lw = false;
trace_inst.is_sw = false;
trace_inst.mem_addresses = new unsigned[a.getNThds()];
trace_inst.mem_stall_cycles = 0;
trace_inst.fetch_stall_cycles = 0;
trace_inst.stall_warp = false;
D(3, "Core step stepping warp " << i << '[' << w[i].activeThreads << ']');
w[i].step(&trace_inst);
D(3, "Now " << w[i].activeThreads << " active threads in " << i);
D(-1, "********************************");
D(-1, "*** valid: " << trace_inst.valid_inst << " pc: " << hex << trace_inst.pc << dec << " rs1..rs2..rd " << trace_inst.rs1 << ".." << trace_inst.rs2 << ".." << trace_inst.rd << "\n");
D(-1, "********************************");
}
#ifdef PRINT_ACTIVE_THREADS
for (unsigned j = 0; j < w[i].tmask.size(); ++j) {
if (w[i].activeThreads > j && w[i].tmask[j]) cout << " 1";
else cout << " 0";
if (j != w[i].tmask.size()-1 || i != w.size()-1) cout << ',';
}
#endif
}
#ifdef PRINT_ACTIVE_THREADS
cout << endl;
#endif
}
void Core::decode()
{
}
void Core::scheduler()
{
}
void Core::gpr_read()
{
}
void Core::execute_unit()
{
}
void Core::load_store()
{
}
bool Core::running() const {
for (unsigned i = 0; i < w.size(); ++i)
if (w[i].running()) return true;
return false;
}
void Core::printStats() const {
unsigned long insts = 0;
for (unsigned i = 0; i < w.size(); ++i)
insts += w[i].insts;
cout << "Total steps: " << steps << endl;
cout << "Total insts: " << insts << endl;
for (unsigned i = 0; i < w.size(); ++i) {
cout << "=== Warp " << i << " ===" << endl;
w[i].printStats();
}
}
Warp::Warp(Core *c, Word id) :
core(c), pc(0x80000000), interruptEnable(true),
supervisorMode(true), activeThreads(0), reg(0), pred(0),
shadowReg(core->a.getNRegs()), shadowPReg(core->a.getNPRegs()), id(id),
spawned(false), steps(0), insts(0), loads(0), stores(0)
{
D(3, "Creating a new thread with PC: " << hex << this->pc << '\n');
/* Build the register file. */
Word regNum(0);
for (Word j = 0; j < core->a.getNThds(); ++j) {
reg.push_back(vector<Reg<Word> >(0));
for (Word i = 0; i < core->a.getNRegs(); ++i) {
reg[j].push_back(Reg<Word>(id, regNum++));
}
pred.push_back(vector<Reg<bool> >(0));
for (Word i = 0; i < core->a.getNPRegs(); ++i) {
pred[j].push_back(Reg<bool>(id, regNum++));
}
bool act = false;
if (j == 0) act = true;
tmask.push_back(act);
shadowTmask.push_back(act);
}
Word csrNum(0);
for (Word i = 0; i < (1<<12); i++)
{
csr.push_back(Reg<uint16_t>(id, regNum++));
}
/* Set initial register contents. */
reg[0][0] = (core->a.getNThds()<<(core->a.getWordSize()*8 / 2)) | id;
}
void Warp::step(trace_inst_t * trace_inst) {
Size fetchPos(0), decPos, wordSize(core->a.getWordSize());
vector<Byte> fetchBuffer(wordSize);
if (activeThreads == 0) return;
++steps;
D(3, "in step pc=0x" << hex << pc);
// std::cout << "pc: " << hex << pc << "\n";
trace_inst->pc = pc;
/* Fetch and decode. */
if (wordSize < sizeof(pc)) pc &= ((1ll<<(wordSize*8))-1);
Instruction *inst;
bool fetchMore;
fetchMore = false;
unsigned fetchSize(wordSize - (pc+fetchPos)%wordSize);
fetchBuffer.resize(fetchPos + fetchSize);
Word fetched = core->mem.fetch(pc + fetchPos, supervisorMode);
writeWord(fetchBuffer, fetchPos, fetchSize, fetched);
decPos = 0;
inst = core->iDec.decode(fetchBuffer, decPos, trace_inst);
D(3, "Fetched at 0x" << hex << pc);
D(3, "0x" << hex << pc << ": " << *inst);
// Update pc
pc += decPos;
// Execute
inst->executeOn(*this);
// At Debug Level 3, print debug info after each instruction.
#ifdef USE_DEBUG
if (USE_DEBUG >= 3) {
D(3, "Register state:");
for (unsigned i = 0; i < reg[0].size(); ++i) {
D_RAW(" %r" << setfill(' ') << setw(2) << dec << i << ':');
for (unsigned j = 0; j < reg.size(); ++j)
D_RAW(' ' << setfill('0') << setw(8) << hex << reg[j][i] << setfill(' ') << ' ');
D_RAW('(' << shadowReg[i] << ')' << endl);
}
D(3, "Thread mask:");
D_RAW(" ");
for (unsigned i = 0; i < tmask.size(); ++i) D_RAW(tmask[i] << ' ');
D_RAW(endl);
D_RAW(endl);
D_RAW(endl);
}
#endif
// Clean up.
delete inst;
}
bool Warp::interrupt(Word r0) {
if (!interruptEnable) return false;
#ifdef EMU_INSTRUMENTATION
Harp::OSDomain::osDomain->do_int(0, r0);
#endif
shadowActiveThreads = activeThreads;
shadowTmask = tmask;
shadowInterruptEnable = interruptEnable; /* For traps. */
shadowSupervisorMode = supervisorMode;
for (Word i = 0; i < reg[0].size(); ++i) shadowReg[i] = reg[0][i];
for (Word i = 0; i < pred[0].size(); ++i) shadowPReg[i] = pred[0][i];
for (Word i = 0; i < reg.size(); ++i) tmask[i] = 1;
shadowPc = pc;
activeThreads = 1;
interruptEnable = false;
supervisorMode = true;
reg[0][0] = r0;
pc = core->interruptEntry;
return true;
}
void Warp::printStats() const {
cerr << "Steps : " << steps << endl
<< "Insts : " << insts << endl
<< "Loads : " << loads << endl
<< "Stores: " << stores << endl;
unsigned const grade = reg[0][28];
if (grade == 1) cerr << "GRADE: PASSED\n";
else cerr << "GRADE: FAILED " << (grade >> 1) << "\n";
}

234
simX/enc.cpp Normal file
View file

@ -0,0 +1,234 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#include <iostream>
#include <string>
#include <stdlib.h>
#include <string.h>
#include <iomanip>
#include <vector>
#include "include/debug.h"
#include "include/types.h"
#include "include/util.h"
#include "include/enc.h"
#include "include/archdef.h"
#include "include/instruction.h"
using namespace std;
using namespace Harp;
// ByteDecoder::ByteDecoder(const ArchDef &ad) {
// wordSize = ad.getWordSize();
// }
static void decodeError(string msg) {
cout << "Instruction decoder error: " << msg << '\n';
exit(1);
}
static unsigned ceilLog2(RegNum x) {
unsigned z = 0;
bool nonZeroInnerValues(false);
if (x == 0) return 0;
while (x != 1) {
z++;
if (x&1) nonZeroInnerValues = true;
x >>= 1;
}
if (nonZeroInnerValues) z++;
return z;
}
WordDecoder::WordDecoder(const ArchDef &arch) {
inst_s = arch.getWordSize() * 8;
opcode_s = 7;
reg_s = 5;
func3_s = 3;
shift_opcode = 0;
shift_rd = opcode_s;
shift_func3 = opcode_s + reg_s;
shift_rs1 = opcode_s + reg_s + func3_s;
shift_rs2 = opcode_s + reg_s + func3_s + reg_s;
shift_func7 = opcode_s + reg_s + func3_s + reg_s + reg_s;
shift_j_u_immed = opcode_s + reg_s;
shift_s_b_immed = opcode_s + reg_s + func3_s + reg_s + reg_s;
shift_i_immed = opcode_s + reg_s + func3_s + reg_s;
reg_mask = 0x1f;
func3_mask = 0x7;
func7_mask = 0x7f;
opcode_mask = 0x7f;
i_immed_mask = 0xfff;
s_immed_mask = 0xfff;
b_immed_mask = 0x1fff;
u_immed_mask = 0xfffff;
j_immed_mask = 0xfffff;
}
static Word signExt(Word w, Size bit, Word mask) {
if (w>>(bit-1)) w |= ~mask;
return w;
}
Instruction *WordDecoder::decode(const std::vector<Byte> &v, Size &idx, trace_inst_t * trace_inst) {
Word code(readWord(v, idx, inst_s/8));
// std::cout << "code: " << (int) code << " v: " << v << " indx: " << idx << "\n";
Instruction &inst = * new Instruction();
// bool predicated = (code>>(n-1));
bool predicated = false;
if (predicated) { inst.setPred((code>>(inst_s-p-1))&pMask); }
Opcode op = (Opcode)((code>>shift_opcode)&opcode_mask);
// std::cout << "opcode: " << op << "\n";
inst.setOpcode(op);
bool usedImm(false);
Word imeed, dest_bits, imm_bits, bit_11, bits_4_1, bit_10_5,
bit_12, bits_19_12, bits_10_1, bit_20, unordered, func3;
// std::cout << "op: " << std::hex << op << " what " << instTable[op].iType << "\n";
switch(instTable[op].iType)
{
case InstType::N_TYPE:
break;
case InstType::R_TYPE:
inst.setPred((code>>shift_rs1) & reg_mask);
inst.setDestReg((code>>shift_rd) & reg_mask);
inst.setSrcReg((code>>shift_rs1) & reg_mask);
inst.setSrcReg((code>>shift_rs2) & reg_mask);
inst.setFunc3 ((code>>shift_func3) & func3_mask);
inst.setFunc7 ((code>>shift_func7) & func7_mask);
trace_inst->valid_inst = true;
trace_inst->rs1 = ((code>>shift_rs1) & reg_mask);
trace_inst->rs2 = ((code>>shift_rs2) & reg_mask);
trace_inst->rd = ((code>>shift_rd) & reg_mask);
break;
case InstType::I_TYPE:
inst.setDestReg((code>>shift_rd) & reg_mask);
inst.setSrcReg((code>>shift_rs1) & reg_mask);
inst.setFunc7 ((code>>shift_func7) & func7_mask);
func3 = (code>>shift_func3) & func3_mask;
inst.setFunc3 (func3);
if ((func3 == 5) && (op != L_INST))
{
// std::cout << "func7: " << func7 << "\n";
inst.setSrcImm(signExt(((code>>shift_rs2)&reg_mask), 5, reg_mask));
}
else
{
inst.setSrcImm(signExt(code>>shift_i_immed, 12, i_immed_mask));
}
usedImm = true;
trace_inst->valid_inst = true;
trace_inst->rs1 = ((code>>shift_rs1) & reg_mask);
trace_inst->rd = ((code>>shift_rd) & reg_mask);
break;
case InstType::S_TYPE:
// std::cout << "************STORE\n";
inst.setSrcReg((code>>shift_rs1) & reg_mask);
inst.setSrcReg((code>>shift_rs2) & reg_mask);
inst.setFunc3 ((code>>shift_func3) & func3_mask);
dest_bits = (code>>shift_rd) & reg_mask;
imm_bits = (code>>shift_s_b_immed & func7_mask);
imeed = (imm_bits << reg_s) | dest_bits;
// std::cout << "ENC: store imeed: " << imeed << "\n";
inst.setSrcImm(signExt(imeed, 12, s_immed_mask));
usedImm = true;
trace_inst->valid_inst = true;
trace_inst->rs1 = ((code>>shift_rs1) & reg_mask);
trace_inst->rs2 = ((code>>shift_rs2) & reg_mask);
break;
case InstType::B_TYPE:
inst.setSrcReg((code>>shift_rs1) & reg_mask);
inst.setSrcReg((code>>shift_rs2) & reg_mask);
inst.setFunc3 ((code>>shift_func3) & func3_mask);
dest_bits = (code>>shift_rd) & reg_mask;
imm_bits = (code>>shift_s_b_immed & func7_mask);
bit_11 = dest_bits & 0x1;
bits_4_1 = dest_bits >> 1;
bit_10_5 = imm_bits & 0x3f;
bit_12 = imm_bits >> 6;
imeed = 0 | (bits_4_1 << 1) | (bit_10_5 << 5) | (bit_11 << 11) | (bit_12 << 12);
inst.setSrcImm(signExt(imeed, 13, b_immed_mask));
usedImm = true;
trace_inst->valid_inst = true;
trace_inst->rs1 = ((code>>shift_rs1) & reg_mask);
trace_inst->rs2 = ((code>>shift_rs2) & reg_mask);
break;
case InstType::U_TYPE:
inst.setDestReg((code>>shift_rd) & reg_mask);
inst.setSrcImm(signExt(code>>shift_j_u_immed, 20, u_immed_mask));
usedImm = true;
trace_inst->valid_inst = true;
trace_inst->rd = ((code>>shift_rd) & reg_mask);
break;
case InstType::J_TYPE:
inst.setDestReg((code>>shift_rd) & reg_mask);
// [20 | 10:1 | 11 | 19:12]
unordered = code>>shift_j_u_immed;
bits_19_12 = unordered & 0xff;
bit_11 = (unordered>>8) & 0x1;
bits_10_1 = (unordered >> 9) & 0x3ff;
bit_20 = (unordered>>19) & 0x1;
imeed = 0 | (bits_10_1 << 1) | (bit_11 << 11) | (bits_19_12 << 12) | (bit_20 << 20);
inst.setSrcImm(signExt(imeed, 20, j_immed_mask));
usedImm = true;
trace_inst->valid_inst = true;
trace_inst->rd = ((code>>shift_rd) & reg_mask);
break;
defualt:
cout << "Unrecognized argument class in word decoder.\n";
exit(1);
}
if (haveRefs && usedImm && refMap.find(idx-n/8) != refMap.end()) {
Ref *srcRef = refMap[idx-n/8];
/* Create a new ref tied to this instruction. */
Ref *r = new SimpleRef(srcRef->name, *(Addr*)inst.setSrcImm(),
inst.hasRelImm());
inst.setImmRef(*r);
}
D(2, "Decoded 0x" << hex << code << " into: " << inst << '\n');
return &inst;
}

116
simX/include/archdef.h Normal file
View file

@ -0,0 +1,116 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#ifndef __ARCHDEF_H
#define __ARCHDEF_H
#include <string>
#include <sstream>
#include <cstdlib>
#include <stdio.h>
#include "types.h"
namespace Harp {
class ArchDef {
public:
struct Undefined {};
ArchDef(const std::string &s) {
std::istringstream iss(s.c_str());
wordSize = 4;
encChar = 'w';
nRegs = 32;
nPRegs = 0;
nThds = 8;
nWarps = 8;
extent = EXT_WARPS;
// if (!iss) { extent = EXT_NULL; return; }
// iss >> encChar;
// if (!iss) { extent = EXT_WORDSIZE; return; }
// iss >> nRegs;
// if (!iss) { extent = EXT_ENC; return; }
// char sep;
// iss >> sep >> nPRegs;
// if (!iss || sep != '/') { extent = EXT_REGS; return; }
// iss >> sep >> nThds;
// if (!iss || sep != '/') { extent = EXT_PREGS; return; }
// iss >> sep >> nWarps;
// if (!iss || sep != '/') { extent = EXT_THDS; return; }
// extent = EXT_WARPS;
}
operator std::string () const {
if (extent == EXT_NULL) return "";
std::ostringstream oss;
if (extent >= EXT_WORDSIZE) oss << wordSize;
if (extent >= EXT_ENC ) oss << encChar;
if (extent >= EXT_REGS ) oss << nRegs;
if (extent >= EXT_PREGS ) oss << '/' << nPRegs;
if (extent >= EXT_THDS ) oss << '/' << nThds;
if (extent >= EXT_WARPS ) oss << '/' << nWarps;
return oss.str();
}
bool operator==(const ArchDef &r) const {
Extent minExtent(r.extent > extent ? extent : r.extent);
// Can't be equal if we can't specify a binary encoding at all.
if (minExtent < EXT_PREGS) return false;
if (minExtent >= EXT_WORDSIZE) { if (wordSize!=r.wordSize) return false; }
if (minExtent >= EXT_ENC ) { if (encChar != r.encChar) return false; }
if (minExtent >= EXT_REGS ) { if (nRegs != r.nRegs) return false; }
if (minExtent >= EXT_PREGS ) { if (nPRegs != r.nPRegs) return false; }
if (minExtent >= EXT_THDS ) { if (nThds != r.nThds) return false; }
if (minExtent >= EXT_WARPS ) { if (nWarps != r.nWarps) return false; }
return true;
}
bool operator!=(const ArchDef &r) const { return !(*this == r); }
Size getWordSize() const {
if (extent < EXT_WORDSIZE) throw Undefined(); else return wordSize;
}
char getEncChar() const {
if (extent<EXT_ENC||encChar=='x') throw Undefined(); else return encChar;
}
RegNum getNRegs() const {
if (extent < EXT_REGS) throw Undefined(); else return nRegs;
}
RegNum getNPRegs() const {
if (extent < EXT_PREGS) throw Undefined(); else return nPRegs;
}
ThdNum getNThds() const {
if (extent < EXT_THDS) throw Undefined(); else return nThds;
}
ThdNum getNWarps() const {
if (extent < EXT_WARPS) throw Undefined(); else return nWarps;
}
private:
enum Extent {
EXT_NULL, EXT_WORDSIZE, EXT_ENC, EXT_REGS, EXT_PREGS, EXT_THDS, EXT_WARPS
};
Extent extent;
Size wordSize;
ThdNum nThds, nWarps;
RegNum nRegs, nPRegs;
char encChar;
};
};
#endif

61
simX/include/args.h Normal file
View file

@ -0,0 +1,61 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#ifndef __ARGS_H
#define __ARGS_H
#include <iostream>
#include <string>
#include <sstream>
#include <map>
namespace HarpTools {
struct BadArg { BadArg(std::string s) : arg(s) {} std::string arg; };
class CommandLineArg {
public:
CommandLineArg(std::string s, std::string l, const char *helpText);
CommandLineArg(std::string l, const char *helpText);
virtual int read(int argc, char** argv) = 0;
static void readArgs(int argc, char **argv);
static void clearArgs();
static void showHelp(std::ostream &os);
private:
static std::string helpString;
static std::map<std::string, CommandLineArg *> longArgs;
static std::map<std::string, CommandLineArg *> shortArgs;
};
template <typename T> class CommandLineArgSetter : public CommandLineArg {
public:
CommandLineArgSetter(std::string s, std::string l, const char *ht, T &x) :
CommandLineArg(s, l, ht), x(x) {}
CommandLineArgSetter(std::string l, const char *ht, T &x) :
CommandLineArg(l, ht), x(x) {}
int read(int argc, char **argv) {
std::istringstream iss(argv[1]);
iss >> x;
return 1;
}
private:
T &x;
};
class CommandLineArgFlag : public CommandLineArg {
public:
CommandLineArgFlag(std::string s, std::string l, const char *ht, bool &x) :
CommandLineArg(s, l, ht), x(x) { x = false; }
CommandLineArgFlag(std::string l, const char *ht, bool &x) :
CommandLineArg(l, ht), x(x) { x = false; }
int read(int argc, char **argv) { x = true; return 0; }
private:
bool &x;
};
};
#endif

16
simX/include/asm-tokens.h Normal file
View file

@ -0,0 +1,16 @@
#ifndef HARPTOOL_ASM_TOKENS
#define HARPTOOL_ASM_TOKENS
namespace HarpTools {
enum AsmTokens {
ASM_T_DIR_DEF = 1, ASM_T_DIR_PERM, ASM_T_DIR_BYTE, ASM_T_DIR_WORD,
ASM_T_DIR_SPACE, ASM_T_DIR_STRING, ASM_T_DIR_ALIGN, ASM_T_DIR_ENTRY,
ASM_T_DIR_GLOBAL, ASM_T_DIR_ARG_NUM, ASM_T_DIR_ARG_STRING,
ASM_T_DIR_ARG_SYM, ASM_T_DIR_ARG_R, ASM_T_DIR_ARG_W, ASM_T_DIR_ARG_X,
ASM_T_DIR_END, ASM_T_LABEL, ASM_T_PRED, ASM_T_INST,
ASM_T_PREG, ASM_T_REG, ASM_T_REG_RA, ASM_T_REG_SP,
ASM_T_REG_FP, ASM_T_LIT, ASM_T_SYM, ASM_T_PEXP
};
};
#endif

166
simX/include/core.h Normal file
View file

@ -0,0 +1,166 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#ifndef __CORE_H
#define __CORE_H
#include <string>
#include <vector>
#include <stack>
#include <map>
#include <set>
#include "types.h"
#include "archdef.h"
#include "enc.h"
#include "mem.h"
#include "debug.h"
#include "Vcache_simX.h"
#include "verilated.h"
#ifdef VCD_OUTPUT
#include <verilated_vcd_c.h>
#endif
#include "trace.h"
namespace Harp {
#ifdef EMU_INSTRUMENTATION
void reg_doWrite(Word cpuId, Word regNum);
void reg_doRead(Word cpuId, Word regNum);
#endif
template <typename T> class Reg {
public:
Reg(): cpuId(0), regNum(0), val(0) {}
Reg(Word c, Word n): cpuId(c), regNum(n), val(0) {}
Reg &operator=(T r) { if (regNum) {val = r; doWrite();} return *this; }
operator T() const { doRead(); return val; }
void trunc(Size s) {
Word mask((~0ull >> (sizeof(Word)-s)*8));
val &= mask;
}
private:
Word cpuId, regNum;
T val;
#ifdef EMU_INSTRUMENTATION
/* Access size here is 8, representing the register size of 64-bit cores. */
void doWrite() const { reg_doWrite(cpuId, regNum); }
void doRead() const { reg_doRead(cpuId, regNum); }
#else
void doWrite() const {}
void doRead() const {}
#endif
};
// Entry in the IPDOM Stack
struct DomStackEntry {
DomStackEntry(
unsigned p, const std::vector<std::vector<Reg<Word> > >& m,
std::vector<bool> &tm, Word pc
): pc(pc), fallThrough(false), uni(false)
{
std::cout << "DomStackEntry TMASK: ";
for (unsigned i = 0; i < m.size(); ++i)
{
std::cout << " " << (!bool(m[i][p]) && tm[i]);
tmask.push_back(!bool(m[i][p]) && tm[i]);
}
std::cout << "\n";
}
DomStackEntry(const std::vector<bool> &tmask):
tmask(tmask), fallThrough(true), uni(false) {}
bool fallThrough;
bool uni;
std::vector<bool> tmask;
Word pc;
};
class Warp;
class Core {
public:
Core(const ArchDef &a, Decoder &d, MemoryUnit &mem, Word id=0);
Vcache_simX * cache_simulator;
bool interrupt(Word r0);
bool running() const;
void fetch();
void decode();
void scheduler();
void gpr_read();
void execute_unit();
void load_store();
void step();
void printStats() const;
const ArchDef &a;
Decoder &iDec;
MemoryUnit &mem;
Word interruptEntry;
unsigned long steps;
std::vector<Warp> w;
std::map<Word, std::set<Warp *> > b; // Barriers
};
class Warp {
public:
Warp(Core *c, Word id=0);
void step(trace_inst_t *);
bool interrupt(Word r0);
bool running() const { return activeThreads; }
#ifdef EMU_INSTRUMENTATION
bool getSupervisorMode() const { return supervisorMode; }
#endif
void printStats() const;
struct MemAccess {
MemAccess(bool w, Word a): wr(w), addr(a) {}
bool wr;
Word addr;
};
std::vector<MemAccess> memAccesses;
// private:
Core *core;
Word pc, shadowPc, id;
Size activeThreads, shadowActiveThreads;
std::vector<std::vector<Reg<Word> > > reg;
std::vector<std::vector<Reg<bool> > > pred;
std::vector<Reg<uint16_t> > csr;
std::vector<bool> tmask, shadowTmask;
std::stack<DomStackEntry> domStack;
std::vector<Word> shadowReg;
std::vector<bool> shadowPReg;
bool interruptEnable, shadowInterruptEnable, supervisorMode,
shadowSupervisorMode, spawned;
unsigned long steps, insts, loads, stores;
friend class Instruction;
};
};
#endif

30
simX/include/debug.h Normal file
View file

@ -0,0 +1,30 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Spring 2013
*******************************************************************************/
#ifndef __DEBUG_H
#define __DEBUG_H
// #define USE_DEBUG 9
#define USE_DEBUG -1
#ifdef USE_DEBUG
#include <iostream>
#define D(lvl, x) do { \
using namespace std; \
if ((lvl) <= USE_DEBUG) { \
cout << "DEBUG " << __FILE__ << ':' << dec << __LINE__ << ": " \
<< x << endl; \
} \
} while(0)
#define D_RAW(x) do { \
std::cout << x; \
} while (0)
#else
#define D(lvl, x) do {} while(0)
#endif
#endif

73
simX/include/enc.h Normal file
View file

@ -0,0 +1,73 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#ifndef __ENC_H
#define __ENC_H
#include <map>
#include "types.h"
#include "instruction.h"
#include "obj.h"
#include "trace.h"
// } trace_inst_t;
namespace Harp {
class DataChunk;
class TextChunk;
class Ref;
class Encoder {
public:
Encoder() {}
virtual ~Encoder() {}
virtual Size encode(Ref *&ref, std::vector<Byte> &v, Size n,
Instruction &i) = 0;
void encodeChunk(DataChunk &dest, const TextChunk &src);
};
class Decoder {
public:
Decoder() : haveRefs(false) {}
Decoder(const std::vector<Ref*> &refVec) : haveRefs(true) {
setRefs(refVec);
}
virtual ~Decoder() {}
void setRefs(const std::vector<Ref*> &);
void clearRefs() { refMap.clear(); }
virtual Instruction *decode(const std::vector<Byte> &v, Size &n, trace_inst_t * trace_inst) = 0;
virtual Instruction *decode(const std::vector<Byte> &v, Size &n) = 0;
void decodeChunk(TextChunk &dest, const DataChunk &src);
protected:
bool haveRefs;
std::map <Size, Ref*> refMap;
};
class WordDecoder : public Decoder {
public:
WordDecoder(const ArchDef &);
virtual Instruction *decode(const std::vector<Byte> &v, Size &n, trace_inst_t * trace_inst);
virtual Instruction *decode(const std::vector<Byte> &v, Size &n) {printf("Not implemented\n");}
private:
Size n, o, r, p, i1, i2, i3;
Word oMask, rMask, pMask, i1Mask, i2Mask, i3Mask;
// FARES
Size inst_s, opcode_s, reg_s, func3_s;
Size shift_opcode, shift_rd, shift_rs1, shift_rs2, shift_func3, shift_func7;
Size shift_j_u_immed, shift_s_b_immed, shift_i_immed;
Word reg_mask, func3_mask, func7_mask, opcode_mask, i_immed_mask,
s_immed_mask, b_immed_mask, u_immed_mask, j_immed_mask;
};
};
#endif

123
simX/include/harpfloat.h Normal file
View file

@ -0,0 +1,123 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#include <math.h>
#include <stdlib.h>
#include "types.h"
#ifdef DEBUG
#include <iostream>
#define DEBUGMSG(x) do { \
std::cout << __FILE__ << ':' <<__LINE__ << ": " << x << '\n'; \
} while(0)
#else
#define DEBUGMSG(x) do { } while(0)
#endif
namespace Harp {
// This class serves to handle the strange-precision floating point that can
// crop up in HARP.
class Float {
public:
Float(Word_u bin, Size n): sz(n) {
DEBUGMSG("Float(0x" << std::hex << bin << ", " << std::dec << n << ')');
bool sign(bin >> (n*8 - 1));
Size expSz;
if (n < 4) {
expSz = 5;
} else if (n < 8) {
expSz = 8;
} else {
expSz = 11;
}
Size sigSz = n*8 - expSz - 1;
DEBUGMSG(" exp: " << std::dec << expSz <<
" bits, sig: " << std::dec << sigSz << " bits.");
int exp = (bin >> sigSz) & ((1<<expSz) - 1);
Word_u sig = bin & ((1llu<<sigSz) - 1);
DEBUGMSG(" sig=" << std::dec << sig << " exp=" << exp);
if (exp == 0) {
// Subnormal
d = sig / pow(2, ((1<<(expSz-1))-2)) / pow(2, sigSz);
DEBUGMSG(" Denorm.");
} else if (exp == ((1<<expSz) - 1)) {
// Infinity
d = HUGE_VAL;
DEBUGMSG(" Inf.");
} else {
// Normalized, implied 1.
exp -= (1<<(expSz - 1)) - 1;
d = pow(2.0, exp - int(sigSz)) * double((1ll << sigSz) + sig);
DEBUGMSG(" Norm, exp=" << exp);
}
if (sign) d = -d;
DEBUGMSG("Set to " << d);
}
Float(double d, Size n): sz(n), d(d) { DEBUGMSG("Float(double, size)"); }
operator Word_u() {
DEBUGMSG("Float -> Word_u: " << d);
Size expSz;
if (sz < 4) {
expSz = 5;
} else if (sz < 8) {
expSz = 8;
} else {
expSz = 11;
}
Size sigSz = 8*sz - expSz - 1;
bool sign(d < 0);
bool inf(isinf(d)), zero(d == 0.0);
int exp;
if (!inf && !zero) exp = floor(log2(fabs(d)));
Word_u rval;
if (inf) {
// Infinity
DEBUGMSG(" Inf.");
rval = ((1llu<<expSz)-1llu)<<sigSz;
} else if (!zero && abs(exp) < (1<<(expSz-1)) - 1) {
// Normalized with implied 1.
Word_u sig = (fabs(d) * pow(2.0, -exp) - 1.0) * pow(2.0, sigSz);
DEBUGMSG(" Norm, exp=" << exp << ", sig=" << sig);
rval = ((((exp + ((1llu<<(expSz-1)) - 1llu))
&((1llu<<expSz)-1llu)))<<sigSz) | sig;
} else if (!zero && exp > -(1<<(expSz-1)) - sigSz) {
// Subnormal number.
Word_u sig = round(fabs(d)*pow(2.0,((1<<(expSz-1))-2))*pow(2.0, sigSz));
DEBUGMSG(" Denorm, exp=" << exp << ", sig=" << sig);
rval = sig;
} else {
// Zero.
rval = 0;
}
if (sign) rval |= 1llu<<(sz*8 - 1);
DEBUGMSG(" Returning 0x" << std::hex << rval);
return rval;
}
operator double() { DEBUGMSG("Float->double " << d); return d; }
private:
double d;
Size sz;
};
};

37
simX/include/help.h Normal file
View file

@ -0,0 +1,37 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#ifndef __HELP_H
#define __HELP_H
/* Help messages. */
namespace HarpTools {
namespace Help {
const char *mainHelp =
"--help, -h, no arguments\n"
" Print this message.\n"
"-E, --emu; -A, --asm; -L, --ld; -D, --disasm\n"
" Invoke the emulator, assembler, linker, and disassembler, "
"respectively.\n"
"<mode> --help\n"
" Display contextual help.\n",
*emuHelp = "HARP Emulator command line arguments:\n"
" -c, --core <filename> RAM image\n"
" -a, --arch <arch string> Architecture string\n"
" -s, --stats Print stats on exit.\n"
" -b, --basic Disable virtual memory.\n"
" -i, --batch Disable console input.\n",
*asmHelp = "HARP Assembler command line arguments:\n"
" -a, --arch <arch string>\n"
" -o, --output <filename>\n",
*ldHelp = "HARP Linker command line arguments:\n"
" -o, --output <filename>\n"
" -a, --arch <filename>\n"
" -f, --format <foramt string>\n"
" --offset <bytes>\n",
*disasmHelp = "HARP Disassembler command line arguments:\n"
" -a, --arch <arch string> Architecture string.\n"
" -o, --output <filename> Output filename.\n";
};
};
#endif

144
simX/include/instruction.h Normal file
View file

@ -0,0 +1,144 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#ifndef __INSTRUCTION_H
#define __INSTRUCTION_H
#include <map>
#include <iostream>
#include "types.h"
namespace Harp {
class Warp;
class Ref;
enum Opcode
{
NOP = 0,
R_INST = 51,
L_INST = 3,
I_INST = 19,
S_INST = 35,
B_INST = 99,
LUI_INST = 55,
AUIPC_INST = 23,
JAL_INST = 111,
JALR_INST = 103,
SYS_INST = 115,
TRAP = 0x7f,
FENCE = 0x0f,
PJ_INST = 0x7b,
GPGPU = 0x6b
};
enum InstType { N_TYPE, R_TYPE, I_TYPE, S_TYPE, B_TYPE, U_TYPE, J_TYPE};
// We build a table of instruction information out of this.
struct InstTableEntry_t {
const char *opString;
bool controlFlow, relAddress, allSrcArgs, privileged;
InstType iType;
};
static std::map<int, struct InstTableEntry_t> instTable =
{
{Opcode::NOP, {"nop" , false, false, false, false, InstType::N_TYPE }},
{Opcode::R_INST, {"r_type", false, false, false, false, InstType::R_TYPE }},
{Opcode::L_INST, {"load" , false, false, false, false, InstType::I_TYPE }},
{Opcode::I_INST, {"i_type", false, false, false, false, InstType::I_TYPE }},
{Opcode::S_INST, {"store" , false, false, false, false, InstType::S_TYPE }},
{Opcode::B_INST, {"branch", true , false, false, false, InstType::B_TYPE }},
{Opcode::LUI_INST, {"lui" , false, false, false, false, InstType::U_TYPE }},
{Opcode::AUIPC_INST, {"auipc" , false, false, false, false, InstType::U_TYPE }},
{Opcode::JAL_INST, {"jal" , true , false, false, false, InstType::J_TYPE }},
{Opcode::JALR_INST, {"jalr" , true , false, false, false, InstType::I_TYPE }},
{Opcode::SYS_INST, {"SYS" , true , false, false, false, InstType::I_TYPE }},
{Opcode::TRAP, {"TRAP" , true , false, false, false, InstType::I_TYPE }},
{Opcode::FENCE, {"fence" , true , false, false, false, InstType::I_TYPE }},
{Opcode::PJ_INST, {"pred j", true , false, false, false, InstType::R_TYPE }},
{Opcode::GPGPU, {"gpgpu" , false, false, false, false, InstType::R_TYPE }}
};
static const Size MAX_REG_SOURCES(3);
static const Size MAX_PRED_SOURCES(2);
class Instruction;
struct DivergentBranchException {};
struct DomainException {};
std::ostream &operator<<(std::ostream &, Instruction &);
class Instruction {
public:
Instruction() :
predicated(false), nRsrc(0), nPsrc(0), immsrcPresent(false),
rdestPresent(false), pdestPresent(false), refLiteral(NULL)
{
}
void executeOn(Warp &warp);
friend std::ostream &operator<<(std::ostream &, Instruction &);
/* Setters used to "craft" the instruction. */
void setOpcode (Opcode opc) { op = opc; }
void setPred (RegNum pReg) { predicated = true; pred = pReg; }
void setDestReg (RegNum destReg) { rdestPresent = true; rdest = destReg; }
void setSrcReg (RegNum srcReg) { rsrc[nRsrc++] = srcReg; }
void setFunc3 (Word func3) { this->func3 = func3; }
void setFunc7 (Word func7) { this->func7 = func7; }
void setDestPReg(RegNum dPReg) { pdestPresent = true; pdest = dPReg; }
void setSrcPReg (RegNum srcPReg) { psrc[nPsrc++] = srcPReg; }
Word *setSrcImm () { immsrcPresent = true; immsrc = 0xa5; return &immsrc;}
void setSrcImm (Word srcImm) { immsrcPresent = true; immsrc = srcImm; }
void setImmRef (Ref &r) { refLiteral = &r; }
/* Getters used by encoders. */
Opcode getOpcode() const { return op; }
bool hasPred() const { return predicated; }
RegNum getPred() const { return pred; }
RegNum getNRSrc() const { return nRsrc; }
RegNum getRSrc(RegNum i) const { return rsrc[i]; }
RegNum getNPSrc() const { return nPsrc; }
RegNum getPSrc(RegNum i) const { return psrc[i]; }
bool hasRDest() const { return rdestPresent; }
RegNum getRDest() const { return rdest; }
bool hasPDest() const { return pdestPresent; }
RegNum getPDest() const { return pdest; }
bool hasImm() const { return immsrcPresent; }
Word getImm() const { return immsrc; }
bool hasRefLiteral() const { return refLiteral != NULL; }
Ref *getRefLiteral() const { return refLiteral; }
/* Getters used as table lookup. */
bool hasRelImm() const { return (*(instTable.find(op))).second.relAddress; }
private:
bool predicated;
RegNum pred;
Opcode op;
int nRsrc, nPsrc;
RegNum rsrc[MAX_REG_SOURCES], psrc[MAX_PRED_SOURCES];
bool immsrcPresent;
Word immsrc;
Word func3;
Word func7;
bool rdestPresent, pdestPresent;
RegNum rdest, pdest;
Ref *refLiteral;
public:
};
};
#endif
// static struct InstTableEntry {
// const char *opString;
// bool controlFlow, relAddress, allSrcArgs, privileged;
// InstType iType;
// };

432
simX/include/mem.h Normal file
View file

@ -0,0 +1,432 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#ifndef __MEM_H
#define __MEM_H
#include <ostream>
#include <vector>
#include <queue>
#include <map>
#include <pthread.h>
#include "types.h"
namespace Harp {
void *consoleInputThread(void *);
struct BadAddress {};
class MemDevice {
public:
virtual ~MemDevice() {}
virtual Size size() const = 0;
virtual Word read(Addr) = 0;
virtual void write(Addr, Word) = 0;
virtual Byte *base() { return NULL; } /* Null if unavailable. */
};
class RamMemDevice : public MemDevice {
public:
RamMemDevice(Size size, Size wordSize);
RamMemDevice(const char* filename, Size wordSize);
~RamMemDevice() {}
virtual Size size() const { return contents.size(); };
virtual Word read(Addr);
virtual void write(Addr, Word);
virtual Byte *base() { return &contents[0]; }
protected:
Size wordSize;
std::vector<Byte> contents;
};
class RomMemDevice : public RamMemDevice {
public:
RomMemDevice(const char* filename, Size wordSize) :
RamMemDevice(filename, wordSize) {}
RomMemDevice(Size size, Size wordSize) :
RamMemDevice(size, wordSize) {}
~RomMemDevice();
virtual void write(Addr, Word);
};
class Core;
class ConsoleMemDevice : public MemDevice {
public:
ConsoleMemDevice(Size wS, std::ostream &o, Core &core, bool batch = false);
~ConsoleMemDevice() {}
//virtual Size wordSize() const { return wordSize; }
virtual Size size() const { return wordSize; }
virtual Word read(Addr) { pthread_mutex_lock(&cBufLock);
char c = cBuf.front();
cBuf.pop();
pthread_mutex_unlock(&cBufLock);
return Word(c); }
virtual void write(Addr a, Word w) { output << char(w); }
void poll();
friend void *Harp::consoleInputThread(void *);
private:
std::ostream &output;
Size wordSize;
Core &core;
std::queue<char> cBuf;
pthread_mutex_t cBufLock;
};
class DiskControllerMemDevice : public MemDevice {
public:
DiskControllerMemDevice(Size wordSize, Size blockSize, Core &c) :
wordSize(wordSize), blockSize(blockSize), core(c), disks() {}
void addDisk(Byte *file, Size n) { disks.push_back(Disk(file, n)); }
virtual Size size() const { return wordSize * 6; }
virtual Word read(Addr);
virtual void write(Addr, Word);
private:
Word curDisk, curBlock, nBlocks, physAddr, command, status;
enum Status { OK = 0, INVALID_DISK, INVALID_BLOCK };
struct Disk {
Disk(Byte *f, Size n): file(f), blocks(n) {}
Byte *file;
Size blocks;
};
std::vector <Disk> disks;
Core &core;
Size wordSize, blockSize;;
};
class MemoryUnit {
public:
MemoryUnit(Size pageSize, Size addrBytes, bool disableVm = false) :
pageSize(pageSize), addrBytes(addrBytes), ad(), disableVm(disableVm)
{
if (!disableVm)
tlb[0] = TLBEntry(0, 077);
}
void attach(MemDevice &m, Addr base);
//Size wordSize();
struct PageFault {
PageFault(Addr a, bool nf) : faultAddr(a), notFound(nf) {}
Addr faultAddr;
bool notFound;
}; /* Thrown on page fault. */
Word read(Addr, bool sup); /* For data accesses. */
Word fetch(Addr, bool sup); /* For instruction accesses. */
Byte *getPtr(Addr, Size);
void write(Addr, Word, bool sup, Size);
void tlbAdd(Addr virt, Addr phys, Word flags);
void tlbRm(Addr va);
void tlbFlush() { tlb.clear(); }
#ifdef EMU_INSTRUMENTATION
Addr virtToPhys(Addr va);
#endif
private:
class ADecoder {
public:
ADecoder() : zeroChild(NULL), oneChild(NULL), range(0) {}
ADecoder(MemDevice &md, Size range) :
zeroChild(NULL), oneChild(NULL), range(range), md(&md) {}
Byte *getPtr(Addr a, Size sz, Size wordSize);
Word read(Addr a, bool sup, Size wordSize);
void write(Addr a, Word w, bool sup, Size wordSize);
void map(Addr a, MemDevice &md, Size range, Size bit);
private:
MemDevice &doLookup(Addr a, Size &bit);
ADecoder *zeroChild, *oneChild;
MemDevice *md;
Size range;
};
ADecoder ad;
struct TLBEntry {
TLBEntry() {}
TLBEntry(Word pfn, Word flags): pfn(pfn), flags(flags) {}
Word flags;
Word pfn;
};
std::map<Addr, TLBEntry> tlb;
TLBEntry tlbLookup(Addr vAddr, Word flagMask);
Size pageSize, addrBytes;
bool disableVm;
};
class RAM : public MemDevice {
public:
uint8_t* mem[1 << 12];
RAM(){
for(uint32_t i = 0;i < (1 << 12);i++) mem[i] = NULL;
}
~RAM(){
for(uint32_t i = 0;i < (1 << 12);i++) if(mem[i]) delete [] mem[i];
}
void clear(){
for(uint32_t i = 0;i < (1 << 12);i++)
{
if(mem[i])
{
delete mem[i];
mem[i] = NULL;
}
}
}
uint8_t* get(uint32_t address){
if(mem[address >> 20] == NULL) {
uint8_t* ptr = new uint8_t[1024*1024];
for(uint32_t i = 0;i < 1024*1024;i+=4) {
ptr[i + 0] = 0xaa;
ptr[i + 1] = 0xbb;
ptr[i + 2] = 0xcc;
ptr[i + 3] = 0xdd;
}
mem[address >> 20] = ptr;
}
return &mem[address >> 20][address & 0xFFFFF];
}
void read(uint32_t address,uint32_t length, uint8_t *data){
for(unsigned i = 0;i < length;i++){
data[i] = (*this)[address + i];
}
}
void write(uint32_t address,uint32_t length, uint8_t *data){
for(unsigned i = 0;i < length;i++){
(*this)[address + i] = data[i];
}
}
virtual Size size() const { return (1<<31); };
void getBlock(uint32_t address, uint8_t *data)
{
uint32_t block_number = address & 0xffffff00; // To zero out block offset
uint32_t bytes_num = 256;
this->read(block_number, bytes_num, data);
}
void getWord(uint32_t address, uint32_t * data)
{
data[0] = 0;
uint8_t first = *get(address + 0);
uint8_t second = *get(address + 1);
uint8_t third = *get(address + 2);
uint8_t fourth = *get(address + 3);
// std::cout << std::hex;
// std::cout << "RAM: READING ADDRESS " << address + 0 << " DATA: " << (uint32_t) first << "\n";
// std::cout << "RAM: READING ADDRESS " << address + 1 << " DATA: " << (uint32_t) second << "\n";
// std::cout << "RAM: READING ADDRESS " << address + 2 << " DATA: " << (uint32_t) third << "\n";
// std::cout << "RAM: READING ADDRESS " << address + 3 << " DATA: " << (uint32_t) fourth << "\n";
data[0] = (data[0] << 0) | fourth;
data[0] = (data[0] << 8) | third;
data[0] = (data[0] << 8) | second;
data[0] = (data[0] << 8) | first;
// data[0] = (data[0] << 0) | first;
// data[0] = (data[0] << 8) | second;
// data[0] = (data[0] << 8) | third;
// data[0] = (data[0] << 8) | fourth;
// std::cout << "FINAL DATA: " << data[0] << "\n";
}
void writeWord(uint32_t address, uint32_t * data)
{
uint32_t data_to_write = *data;
uint32_t byte_mask = 0xFF;
for (int i = 0; i < 4; i++)
{
// std::cout << "RAM: DATA TO WRITE " << data_to_write << "\n";
// std::cout << "RAM: DATA TO MASK " << byte_mask << "\n";
// std::cout << "RAM: WRITING ADDRESS " << address + i << " DATA: " << (data_to_write & byte_mask) << "\n";
(*this)[address + i] = data_to_write & byte_mask;
data_to_write = data_to_write >> 8;
}
}
void writeHalf(uint32_t address, uint32_t * data)
{
uint32_t data_to_write = *data;
uint32_t byte_mask = 0xFF;
for (int i = 0; i < 2; i++)
{
// std::cout << "RAM: DATA TO WRITE " << data_to_write << "\n";
// std::cout << "RAM: DATA TO MASK " << byte_mask << "\n";
// std::cout << "RAM: WRITING ADDRESS " << address + i << " DATA: " << (data_to_write & byte_mask) << "\n";
(*this)[address + i] = data_to_write & byte_mask;
data_to_write = data_to_write >> 8;
}
}
void writeByte(uint32_t address, uint32_t * data)
{
uint32_t data_to_write = *data;
uint32_t byte_mask = 0xFF;
(*this)[address] = data_to_write & byte_mask;
data_to_write = data_to_write >> 8;
}
uint8_t& operator [](uint32_t address) {
return *get(address);
}
virtual void write(Addr addr, Word w)
{
uint32_t word = (uint32_t) w;
writeWord(addr, &word);
}
virtual Word read(Addr addr)
{
uint32_t w;
getWord(addr, &w);
// std::cout << "RAM: read -> " << w << " at addr: " << addr << "\n";
return (Word) w;
}
virtual Byte *base()
{
return (Byte *) this->get(0);
}
// MEMORY UTILS
uint32_t hti_old(char c) {
if (c >= 'A' && c <= 'F')
return c - 'A' + 10;
if (c >= 'a' && c <= 'f')
return c - 'a' + 10;
return c - '0';
}
uint32_t hToI_old(char *c, uint32_t size) {
uint32_t value = 0;
for (uint32_t i = 0; i < size; i++) {
value += hti_old(c[i]) << ((size - i - 1) * 4);
}
return value;
}
void loadHexImpl(std::string path) {
this->clear();
FILE *fp = fopen(&path[0], "r");
if(fp == 0){
std::cout << path << " not found" << std::endl;
}
//Preload 0x0 <-> 0x80000000 jumps
((uint32_t*)this->get(0))[0] = 0xf1401073;
((uint32_t*)this->get(0))[1] = 0xf1401073;
// ((uint32_t*)this->get(0))[1] = 0xf1401073;
((uint32_t*)this->get(0))[2] = 0x30101073;
((uint32_t*)this->get(0))[3] = 0x800000b7;
((uint32_t*)this->get(0))[4] = 0x000080e7;
((uint32_t*)this->get(0x80000000))[0] = 0x00000097;
((uint32_t*)this->get(0xb0000000))[0] = 0x01C02023;
// F00FFF10
((uint32_t*)this->get(0xf00fff10))[0] = 0x12345678;
fseek(fp, 0, SEEK_END);
uint32_t size = ftell(fp);
fseek(fp, 0, SEEK_SET);
char* content = new char[size];
int x = fread(content, 1, size, fp);
if (!x) { std::cout << "COULD NOT READ FILE\n"; exit(1);}
int offset = 0;
char* line = content;
// std::cout << "WHTA\n";
while (1) {
if (line[0] == ':') {
uint32_t byteCount = hToI_old(line + 1, 2);
uint32_t nextAddr = hToI_old(line + 3, 4) + offset;
uint32_t key = hToI_old(line + 7, 2);
switch (key) {
case 0:
for (uint32_t i = 0; i < byteCount; i++) {
unsigned add = nextAddr + i;
*(this->get(add)) = hToI_old(line + 9 + i * 2, 2);
// std::cout << "lhi: Address: " << std::hex <<(add) << "\tValue: " << std::hex << hToI_old(line + 9 + i * 2, 2) << std::endl;
}
break;
case 2:
// cout << offset << endl;
offset = hToI_old(line + 9, 4) << 4;
break;
case 4:
// cout << offset << endl;
offset = hToI_old(line + 9, 4) << 16;
break;
default:
// cout << "??? " << key << endl;
break;
}
}
while (*line != '\n' && size != 0) {
line++;
size--;
}
if (size <= 1)
break;
line++;
size--;
}
if (content) delete[] content;
}
};
};
#endif

210
simX/include/obj.h Normal file
View file

@ -0,0 +1,210 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#ifndef __OBJ_H
#define __OBJ_H
#include <iostream>
#include <string>
#include <vector>
#include <list>
#include <stdlib.h>
#include "types.h"
#include "archdef.h"
#include "instruction.h"
#include "enc.h"
#include "asm-tokens.h"
namespace Harp {
class Decoder;
class Encoder;
class Ref {
public:
std::string name;
Ref(const std::string &n, bool r, Size ib = 0):
name(n), bound(false), relative(r), ibase(ib) { }
virtual ~Ref() { }
virtual void bind(Addr addr, Addr base = 0) = 0;
virtual Addr getAddr() const = 0;
bool bound, relative;
Size ibase;
};
/* Used in not-yet-encoded code objects, plain old data. */
class SimpleRef : public Ref {
public:
SimpleRef(const std::string &name, Addr &addr, bool rel = false) :
Ref(name, rel), addr(addr) { }
virtual void bind(Addr addr, Addr base = 0) {
std::cout << "Attempted to bind a SimpleRef.\n";
exit(1);
}
virtual Addr getAddr() const { return this->addr; }
Byte *getAddrPtr() { return (Byte*)&addr; }
private:
Addr &addr;
};
// /* Used in already-encoded code objects. */
// class OffsetRef : public Ref {
// public:
// OffsetRef(
// const std::string &name, std::vector<Byte> &v, Size offset, Size bits,
// Size ws, bool rel = false, Size ibase = 0
// ) : Ref(name, rel, ibase), data(v), offset(offset), bits(bits), wordSize(ws)
// {}
// virtual void bind(Addr addr, Addr base = 0) {
// Size bytes(bits/8), remainder(bits%8);
// if (relative) {
// addr = addr - base;
// Word_s addr_s(addr);
// if ((addr_s >> bits) != ~0ull && (addr_s >> bits) != 0) goto noFit;
// } else {
// Addr mask = (1ull<<bits)-1;
// if (addr > mask) goto noFit;
// }
// { Byte mask((1ull<<remainder) - 1);
// Size i;
// for (i = 0; i < bytes; i++) {
// data[offset+i] = addr & 0xff;
// addr >>= 8;
// }
// data[offset+i] &= ~mask;
// data[offset+i] |= (addr&mask);
// bound = true;
// }
// return;
// noFit:
// std::cout << "Attempt to bind a " << bits << "-bit "
// << (relative?"":"non-") << "relative symbol to an address"
// " it cannot reach.\n";
// exit(1);
// }
// virtual Addr getAddr() const {
// Size bytes = bits/8, remainder = bits%8;
// Byte mask((1<<remainder)-1);
// Addr a(data[offset]&mask);
// for (Size i = 0; i < bytes-1; i++) {
// a |= data[offset + bytes - i - 1];
// a <<= 8;
// }
// return a;
// }
// Size getOffset() const { return offset; }
// Size getBits() const { return bits; }
// private:
// std::vector<Byte> &data;
// Size offset, bits, wordSize;
// };
// class Chunk {
// public:
// Chunk(std::string n, Size a = 0, Word f = 0) :
// name(n), alignment(a), bound(false), flags(f), global(false) {}
// virtual ~Chunk() { for (Size i = 0; i < refs.size(); i++) delete refs[i]; }
// void bind(Addr a) { address = a; bound = true; }
// void setGlobal() { global = true; }
// bool isGlobal() const { return global; }
// std::string name;
// Size alignment;
// bool bound, global;
// Addr address;
// Word flags;
// std::vector<Ref*> refs;
// };
// class TextChunk : public Chunk {
// public:
// TextChunk(std::string n, Size a = 0, Word f = 0)
// : Chunk(n, a, f), instructions() {}
// ~TextChunk() {
// for (Size i = 0; i < instructions.size(); i++) delete instructions[i];
// }
// std::vector<Instruction*> instructions;
// };
// class DataChunk : public Chunk {
// public:
// DataChunk(std::string n, Size a = 0, Word f = 0)
// : Chunk(n, a, f), size(0), contents() {}
// Size size;
// std::vector<Byte> contents; /* 0 to size bytes in length. */
// };
// class Obj {
// public:
// ~Obj() { for (Size i = 0; i < chunks.size(); i++) delete chunks[i]; }
// std::vector<Chunk*> chunks;
// Size entry;
// };
// class DynObj : public Obj {
// public:
// std::vector<std::string> deps;
// };
// class ObjReader {
// public:
// virtual Obj *read(std::istream &input) = 0;
// private:
// };
// class ObjWriter {
// public:
// virtual void write(std::ostream &output, const Obj &o) = 0;
// private:
// };
// class AsmReader : public ObjReader {
// public:
// AsmReader(ArchDef arch) :
// wordSize(arch.getWordSize()), nRegs(arch.getNRegs()) {}
// virtual Obj *read(std::istream &input);
// private:
// Size wordSize, nRegs;
// // Operand type sequences indexed by argument class
// enum ArgType {AT_END, AT_REG, AT_PREG, AT_LIT};
// static ArgType operandtype_table[][4]; // ArgClass -> ArgType[arg_idx]
// };
// class HOFReader : public ObjReader {
// public:
// HOFReader(ArchDef &arch) : arch(arch) {}
// Obj *read(std::istream &input);
// private:
// const ArchDef &arch;
// };
// class AsmWriter : public ObjWriter {
// public:
// AsmWriter(ArchDef arch): wordSize(arch.getWordSize()) {}
// virtual void write(std::ostream &output, const Obj &obj);
// private:
// Size wordSize;
// };
// class HOFWriter : public ObjWriter {
// public:
// HOFWriter(ArchDef &arch) : arch(arch) {}
// virtual void write(std::ostream &output, const Obj &obj);
// private:
// const ArchDef &arch;
// };
};
#endif

169
simX/include/qsim-harp.h Normal file
View file

@ -0,0 +1,169 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#ifndef EMU_INSTRUMENTATION
#define EMU_INSTRUMENTATION
#endif
#ifndef __QSIM_HARP_H
#define __QSIM_HARP_H
#include "types.h"
#include "core.h"
#include "enc.h"
#include "instruction.h"
#include "mem.h"
#include "obj.h"
#include "archdef.h"
#include <stdint.h>
#include <iostream>
#include <vector>
#include <string>
#include <qsim.h>
namespace Harp {
class OSDomain {
public:
OSDomain(Harp::ArchDef &arch, std::string imgFile);
bool idle(unsigned i) const { return cpus[i].idle(); }
int get_tid(unsigned i) const { return cpus[i].get_tid(); }
bool get_prot(unsigned i) const { return cpus[i].get_prot(); }
int get_n() const { return cpus.size(); }
uint64_t run(unsigned i, uint64_t n) { return cpus[i].run(n); }
void connect_console(std::ostream &s);
void timer_interrupt() { /* TODO: timer convention */ }
void interrupt(unsigned i, int vec) { cpus[i].interrupt(vec); }
bool booted(unsigned i) const { return cpus[i].booted(); }
void save_state(const char* state_file);
template <typename T>
void set_atomic_cb
(T *p, typename Qsim::OSDomain::atomic_cb_obj<T>::atomic_cb_t f)
{
atomic_cbs.push_back(new Qsim::OSDomain::atomic_cb_obj<T>(p, f));
}
template <typename T>
void set_inst_cb
(T* p, typename Qsim::OSDomain::inst_cb_obj<T>::inst_cb_t f)
{
inst_cbs.push_back(new Qsim::OSDomain::inst_cb_obj<T>(p, f));
}
template <typename T>
void set_int_cb
(T *p, typename Qsim::OSDomain::int_cb_obj<T>::int_cb_t f)
{
int_cbs.push_back(new Qsim::OSDomain::int_cb_obj<T>(p, f));
}
template <typename T>
void set_mem_cb
(T *p, typename Qsim::OSDomain::mem_cb_obj<T>::mem_cb_t f)
{
mem_cbs.push_back(new Qsim::OSDomain::mem_cb_obj<T>(p, f));
}
template <typename T>
void set_magic_cb
(T *p, typename Qsim::OSDomain::magic_cb_obj<T>::magic_cb_t f)
{
magic_cbs.push_back(new Qsim::OSDomain::magic_cb_obj<T>(p, f));
}
template <typename T>
void set_io_cb
(T *p, typename Qsim::OSDomain::io_cb_obj<T>::io_cb_t f)
{ /* Do nothing. We have no separate IO address space. */ }
template <typename T>
void set_reg_cb
(T *p, typename Qsim::OSDomain::reg_cb_obj<T>::reg_cb_t f)
{
reg_cbs.push_back(new Qsim::OSDomain::reg_cb_obj<T>(p, f));
}
template <typename T> void mem_rd(T& d, uint64_t paddr);
template <typename T> void mem_rd_virt(unsigned i, T& d, uint64_t vaddr);
template <typename T> void mem_wr(T& d, uint64_t paddr);
template <typename T> void mem_wr_virt(unsigned i, T& d, uint64_t vaddr);
static OSDomain *osDomain;
bool do_atomic(unsigned c) {
bool rval(false);
for (unsigned i = 0; i < atomic_cbs.size(); ++i)
if ((*atomic_cbs[i])(c)) rval = true;
return rval;
}
void do_inst(unsigned c, uint64_t va, uint64_t pa, uint8_t l,
const uint8_t *b, enum inst_type t)
{
for (unsigned i = 0; i < inst_cbs.size(); ++i)
(*inst_cbs[i])(c, va, pa, l, b, t);
}
void do_int(unsigned c, int v) {
for (unsigned i = 0; i < int_cbs.size(); ++i)
(*int_cbs[i])(c, v);
}
void do_mem(unsigned c, uint64_t va, uint64_t pa, uint8_t s, bool w) {
for (unsigned i = 0; i < mem_cbs.size(); ++i)
(*mem_cbs[i])(c, va, pa, s, w);
}
bool do_magic(unsigned c, uint64_t r0) {
bool rval(false);
for (unsigned i = 0; i < magic_cbs.size(); ++i)
if ((*magic_cbs[i])(c, r0)) rval = true;
return rval;
}
void do_reg(unsigned c, int r, uint8_t s, bool w) {
for (unsigned i = 0; i < reg_cbs.size(); ++i)
(*reg_cbs[i])(c, r, s, w);
}
private:
class Cpu {
public:
Cpu(Harp::OSDomain &osd);
Cpu(): dec(NULL), core(NULL) {}
~Cpu() { if (dec) delete dec; if (core) delete core; }
bool idle() const { return false; }
int get_tid() const { return 0; }
bool get_prot() const { return core->getSupervisorMode(); }
uint64_t run(uint64_t n);
void interrupt(int vec) { core->interrupt(vec); }
bool booted() const { return core->running(); }
Harp::OSDomain *osd;
Harp::Decoder *dec;
Harp::Core *core;
};
Harp::ArchDef arch;
Harp::MemoryUnit mu;
Harp::RamMemDevice ram;
Harp::ConsoleMemDevice *console;
std::vector <Harp::OSDomain::Cpu> cpus;
std::vector <Qsim::OSDomain::atomic_cb_obj_base*> atomic_cbs;
std::vector <Qsim::OSDomain::inst_cb_obj_base*> inst_cbs;
std::vector <Qsim::OSDomain::int_cb_obj_base*> int_cbs;
std::vector <Qsim::OSDomain::mem_cb_obj_base*> mem_cbs;
std::vector <Qsim::OSDomain::magic_cb_obj_base*> magic_cbs;
std::vector <Qsim::OSDomain::reg_cb_obj_base*> reg_cbs;
};
};
#endif

33
simX/include/trace.h Normal file
View file

@ -0,0 +1,33 @@
#pragma once
namespace Harp {
typedef struct
{
// Warp step
bool valid_inst;
unsigned pc;
// Core scheduler
int wid;
// Encoder
int rs1;
int rs2;
int rd;
// Instruction execute
bool is_lw;
bool is_sw;
unsigned * mem_addresses;
// dmem interface
int mem_stall_cycles;
int fetch_stall_cycles;
// Instruction execute
bool stall_warp;
} trace_inst_t;
}

25
simX/include/types.h Normal file
View file

@ -0,0 +1,25 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#ifndef __TYPES_H
#define __TYPES_H
#include <stdint.h>
namespace Harp {
typedef uint8_t Byte;
typedef uint32_t Word;
typedef uint32_t Word_u;
typedef int32_t Word_s;
typedef Word_u Addr;
typedef Word_u Size;
typedef unsigned RegNum;
typedef unsigned ThdNum;
enum MemFlags {RD_USR = 1, WR_USR = 2, EX_USR = 4,
RD_SUP = 8, WR_SUP = 16, EX_SUP = 32};
};
#endif

24
simX/include/util.h Normal file
View file

@ -0,0 +1,24 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#ifndef __UTIL_H
#define __UTIL_H
#include <vector>
#include "types.h"
namespace Harp {
Word_u bytesToWord(const Byte *b, Size wordSize);
void wordToBytes(Byte *b, Word_u w, Size wordSize);
Word_u flagsToWord(bool r, bool w, bool x);
void wordToFlags(bool &r, bool &w, bool &x, Word_u f);
class OutOfBytes {};
Byte readByte(const std::vector<Byte> &b, Size &n);
Word_u readWord(const std::vector<Byte> &b, Size &n, Size wordSize);
void writeByte(std::vector<Byte> &p, Size &n, Byte b);
void writeWord(std::vector<Byte> &p, Size &n, Size wordSize, Word w);
};
#endif

887
simX/instruction.cpp Normal file
View file

@ -0,0 +1,887 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#include <iostream>
#include <stdlib.h>
#include "include/instruction.h"
#include "include/obj.h"
#include "include/core.h"
#include "include/harpfloat.h"
#include "include/debug.h"
#ifdef EMU_INSTRUMENTATION
#include "include/qsim-harp.h"
#endif
using namespace Harp;
using namespace std;
/* It is important that this stays consistent with the Harp::Instruction::Opcode
enum. */
ostream &Harp::operator<<(ostream& os, Instruction &inst) {
os << dec;
// if (inst.predicated) {
// os << "@p" << dec << inst.pred << " ? ";
// }
// os << inst.instTable[inst.op].opString << ' ';
// if (inst.rdestPresent) os << "%r" << dec << inst.rdest << ' ';
// if (inst.pdestPresent) os << "@p" << inst.pdest << ' ';
// for (int i = 0; i < inst.nRsrc; i++) {
// os << "%r" << dec << inst.rsrc[i] << ' ';
// }
// for (int i = 0; i < inst.nPsrc; i++) {
// os << "@p" << dec << inst.psrc[i] << ' ';
// }
// if (inst.immsrcPresent) {
// if (inst.refLiteral) os << inst.refLiteral->name;
// else os << "#0x" << hex << inst.immsrc;
// }
os << instTable[inst.op].opString;
os << ';';
return os;
}
bool checkUnanimous(unsigned p, const std::vector<std::vector<Reg<Word> > >& m,
const std::vector<bool> &tm) {
bool same;
unsigned i;
for (i = 0; i < m.size(); ++i) {
if (tm[i]) {
same = m[i][p];
break;
}
}
if (i == m.size()) throw DivergentBranchException();
//std::cout << "same: " << same << " with -> ";
for (; i < m.size(); ++i) {
if (tm[i]) {
//std::cout << " " << (bool(m[i][p]));
if (same != (bool(m[i][p]))) {
//std::cout << " FALSE\n";
return false;
}
}
}
//std::cout << " TRUE\n";
return true;
}
Word signExt(Word w, Size bit, Word mask) {
if (w>>(bit-1)) w |= ~mask;
return w;
}
void Instruction::executeOn(Warp &c) {
D(3, "Begin instruction execute.");
/* If I try to execute a privileged instruction in user mode, throw an
exception 3. */
if (instTable[op].privileged && !c.supervisorMode) {
std::cout << "INTERRUPT SUPERVISOR\n";
c.interrupt(3);
return;
}
// /* Also throw exceptions on non-masked divergent branches. */
// if (instTable[op].controlFlow) {
// Size t, count, active;
// for (t = 0, count = 0, active = 0; t < c.activeThreads; ++t) {
// if ((!predicated || c.pred[t][pred]) && c.tmask[t]) ++count;
// if (c.tmask[t]) ++active;
// }
// if (count != 0 && count != active)
// throw DivergentBranchException();
// }
Size nextActiveThreads = c.activeThreads;
Size wordSz = c.core->a.getWordSize();
Word nextPc = c.pc;
c.memAccesses.clear();
// If we have a load, overwriting a register's contents, we have to make sure
// ahead of time it will not fault. Otherwise we may perform an indirect load
// by mistake.
// if (op == L_INST && rdest == rsrc[0]) {
// for (Size t = 0; t < c.activeThreads; t++) {
// if ((!predicated || c.pred[t][pred]) && c.tmask[t]) {
// Word memAddr = c.reg[t][rsrc[0]] + immsrc;
// c.core->mem.read(memAddr, c.supervisorMode);
// }
// }
// }
bool sjOnce(true), // Has not yet split or joined once.
pcSet(false); // PC has already been set
for (Size t = 0; t < c.activeThreads; t++) {
vector<Reg<Word> > &reg(c.reg[t]);
vector<Reg<bool> > &pReg(c.pred[t]);
stack<DomStackEntry> &domStack(c.domStack);
//std::cout << std::hex << "opcode: " << op << " func3: " << func3 << "\n";
//if (op == GPGPU) //std::cout << "OPCODE MATCHED GPGPU\n";
// If this thread is masked out, don't execute the instruction, unless it's
// a split or join.
// if (((predicated && !pReg[pred]) || !c.tmask[t]) &&
// op != SPLIT && op != JOIN) continue;
bool split = (op == GPGPU) && (func3 == 2);
bool join = (op == GPGPU) && (func3 == 3);
// predicated = (op == GPGPU) && ((func3 == 7) || (func3 == 2));
// bool is_branch = (op == B_INST);
// bool is_jump = (op == JAL_INST) || (op == JALR_INST);
bool is_gpgpu = (op == GPGPU);
bool is_tmc = is_gpgpu && (func3 == 0);
bool is_wspawn = is_gpgpu && (func3 == 1);
bool is_barrier = is_gpgpu && (func3 == 4);
bool is_split = is_gpgpu && (func3 == 2);
bool is_join = is_gpgpu && (func3 == 3);
bool gpgpu_zero = (is_tmc || is_barrier || is_wspawn) && (t != 0);
bool not_active = !c.tmask[t];
if (not_active || gpgpu_zero)
{
continue;
}
// printf("Predicated: %d, split: %d, join: %d\n",predicated, split, join );
// printf("%d && ((%d) || (%d))\n",(op == GPGPU), (func3 == 7), (func3 == 2) );
// cout << "before " << op << " = " << GPGPU << "\n";
// if (((predicated && !reg[pred]) || !c.tmask[t]) && !split && !join)
// {
// // cout << "about to continue\n";
// continue;
// }
// cout << "after\n";
++c.insts;
Word memAddr;
Word shift_by;
Word shamt;
Word temp;
Word data_read;
int op1, op2;
bool m_exten;
// std::cout << "op = " << op << "\n";
// std::cout << "R_INST: " << R_INST << "\n";
int num_to_wspawn;
switch (op) {
case NOP:
//std::cout << "NOP_INST\n";
break;
case R_INST:
// std::cout << "R_INST\n";
m_exten = func7 & 0x1;
if (m_exten)
{
// std::cout << "FOUND A MUL/DIV\n";
switch (func3)
{
case 0:
// MUL
// cout << "MUL\n";
reg[rdest] = ((int) reg[rsrc[0]]) * ((int) reg[rsrc[1]]);
break;
case 1:
// MULH
{
int64_t first = (int64_t) reg[rsrc[0]];
if (reg[rsrc[0]] & 0x80000000)
{
first = first | 0xFFFFFFFF00000000;
}
int64_t second = (int64_t) reg[rsrc[1]];
if (reg[rsrc[1]] & 0x80000000)
{
second = second | 0xFFFFFFFF00000000;
}
// cout << "mulh: " << std::dec << first << " * " << second;
uint64_t result = first * second;
reg[rdest] = ( result >> 32) & 0xFFFFFFFF;
// cout << " = " << result << " or " << reg[rdest] << "\n";
}
break;
case 2:
// MULHSU
{
int64_t first = (int64_t) reg[rsrc[0]];
if (reg[rsrc[0]] & 0x80000000)
{
first = first | 0xFFFFFFFF00000000;
}
int64_t second = (int64_t) reg[rsrc[1]];
reg[rdest] = (( first * second ) >> 32) & 0xFFFFFFFF;
}
break;
case 3:
// MULHU
{
uint64_t first = (uint64_t) reg[rsrc[0]];
uint64_t second = (uint64_t) reg[rsrc[1]];
// cout << "MULHU\n";
reg[rdest] = (( first * second) >> 32) & 0xFFFFFFFF;
}
break;
case 4:
// DIV
if (reg[rsrc[1]] == 0)
{
reg[rdest] = -1;
break;
}
// cout << "dividing: " << dec << ((int) reg[rsrc[0]]) << " / " << ((int) reg[rsrc[1]]);
reg[rdest] = ( (int) reg[rsrc[0]]) / ( (int) reg[rsrc[1]]);
// cout << " = " << ((int) reg[rdest]) << "\n";
break;
case 5:
// DIVU
if (reg[rsrc[1]] == 0)
{
reg[rdest] = -1;
break;
}
reg[rdest] = ((uint32_t) reg[rsrc[0]]) / ((uint32_t) reg[rsrc[1]]);
break;
case 6:
// REM
if (reg[rsrc[1]] == 0)
{
reg[rdest] = reg[rsrc[0]];
break;
}
reg[rdest] = ((int) reg[rsrc[0]]) % ((int) reg[rsrc[1]]);
break;
case 7:
// REMU
if (reg[rsrc[1]] == 0)
{
reg[rdest] = reg[rsrc[0]];
break;
}
reg[rdest] = ((uint32_t) reg[rsrc[0]]) % ((uint32_t) reg[rsrc[1]]);
break;
default:
cout << "unsupported MUL/DIV instr\n";
exit(1);
}
}
else
{
// std::cout << "NORMAL R-TYPE\n";
switch (func3)
{
case 0:
if (func7)
{
reg[rdest] = reg[rsrc[0]] - reg[rsrc[1]];
reg[rdest].trunc(wordSz);
}
else
{
reg[rdest] = reg[rsrc[0]] + reg[rsrc[1]];
reg[rdest].trunc(wordSz);
}
break;
case 1:
reg[rdest] = reg[rsrc[0]] << reg[rsrc[1]];
reg[rdest].trunc(wordSz);
break;
case 2:
if ( int(reg[rsrc[0]]) < int(reg[rsrc[1]]))
{
reg[rdest] = 1;
}
else
{
reg[rdest] = 0;
}
break;
case 3:
if ( Word_u(reg[rsrc[0]]) < Word_u(reg[rsrc[1]]))
{
reg[rdest] = 1;
}
else
{
reg[rdest] = 0;
}
break;
case 4:
reg[rdest] = reg[rsrc[0]] ^ reg[rsrc[1]];
break;
case 5:
if (func7)
{
reg[rdest] = int(reg[rsrc[0]]) >> int(reg[rsrc[1]]);
reg[rdest].trunc(wordSz);
}
else
{
reg[rdest] = Word_u(reg[rsrc[0]]) >> Word_u(reg[rsrc[1]]);
reg[rdest].trunc(wordSz);
}
break;
case 6:
reg[rdest] = reg[rsrc[0]] | reg[rsrc[1]];
break;
case 7:
reg[rdest] = reg[rsrc[0]] & reg[rsrc[1]];
break;
default:
cout << "ERROR: UNSUPPORTED R INST\n";
exit(1);
}
}
break;
case L_INST:
//std::cout << "L_INST\n";
memAddr = ((reg[rsrc[0]] + immsrc) & 0xFFFFFFFC);
shift_by = ((reg[rsrc[0]] + immsrc) & 0x00000003) * 8;
data_read = c.core->mem.read(memAddr, c.supervisorMode);
// //std::cout <<std::hex<< "EXECUTE: " << reg[rsrc[0]] << " + " << immsrc << " = " << memAddr << " -> data_read: " << data_read << "\n";
#ifdef EMU_INSTRUMENTATION
Harp::OSDomain::osDomain->
do_mem(0, memAddr, c.core->mem.virtToPhys(memAddr), 8, true);
#endif
switch (func3)
{
case 0:
// LB
reg[rdest] = signExt((data_read >> shift_by) & 0xFF, 8, 0xFF);
break;
case 1:
// LH
// //std::cout << "shifting by: " << shift_by << " final data: " << ((data_read >> shift_by) & 0xFFFF, 16, 0xFFFF) << "\n";
reg[rdest] = signExt((data_read >> shift_by) & 0xFFFF, 16, 0xFFFF);
break;
case 2:
reg[rdest] = int(data_read & 0xFFFFFFFF);
break;
case 4:
// LBU
reg[rdest] = unsigned((data_read >> shift_by) & 0xFF);
break;
case 5:
reg[rdest] = unsigned((data_read >> shift_by) & 0xFFFF);
break;
default:
cout << "ERROR: UNSUPPORTED L INST\n";
exit(1);
c.memAccesses.push_back(Warp::MemAccess(false, memAddr));
}
break;
case I_INST:
//std::cout << "I_INST\n";
switch (func3)
{
case 0:
// ADDI
reg[rdest] = reg[rsrc[0]] + immsrc;
reg[rdest].trunc(wordSz);
break;
case 2:
// SLTI
if ( int(reg[rsrc[0]]) < int(immsrc))
{
reg[rdest] = 1;
}
else
{
reg[rdest] = 0;
}
break;
case 3:
// SLTIU
op1 = (unsigned) reg[rsrc[0]];
if ( unsigned(reg[rsrc[0]]) < unsigned(immsrc))
{
reg[rdest] = 1;
}
else
{
reg[rdest] = 0;
}
break;
case 4:
// XORI
reg[rdest] = reg[rsrc[0]] ^ immsrc;
break;
case 6:
// ORI;
reg[rdest] = reg[rsrc[0]] | immsrc;
break;
case 7:
// ANDI
reg[rdest] = reg[rsrc[0]] & immsrc;
break;
case 1:
// SLLI
reg[rdest] = reg[rsrc[0]] << immsrc;
reg[rdest].trunc(wordSz);
break;
case 5:
if ((func7 == 0))
{
// SRLI
// //std::cout << "WTF\n";
bool isNeg = ((0x80000000 & reg[rsrc[0]])) > 0;
Word result = Word_u(reg[rsrc[0]]) >> Word_u(immsrc);
// if (isNeg)
// {
// Word mask = 0x80000000;
// for (int i = 32; i < Word_u(immsrc); i++)
// {
// result |= mask;
// mask = mask >> 1;
// }
// }
reg[rdest] = result;
reg[rdest].trunc(wordSz);
}
else
{
// SRAI
// //std::cout << "WOHOOOOO\n";
op1 = reg[rsrc[0]];
op2 = immsrc;
reg[rdest] = op1 >> op2;
reg[rdest].trunc(wordSz);
}
break;
default:
cout << "ERROR: UNSUPPORTED L INST\n";
exit(1);
}
break;
case S_INST:
//std::cout << "S_INST\n";
++c.stores;
memAddr = reg[rsrc[0]] + immsrc;
std::cout << "STORE MEM ADDRESS: " << std::hex << reg[rsrc[0]] << " + " << immsrc << "\n";
// //std::cout << "FUNC3: " << func3 << "\n";
if ((memAddr == 0x00010000) && (t == 0))
{
unsigned num = reg[rsrc[1]];
fprintf(stderr, "%c", (char) reg[rsrc[1]]);
break;
}
switch (func3)
{
case 0:
// //std::cout << "SB\n";
c.core->mem.write(memAddr, reg[rsrc[1]] & 0x000000FF, c.supervisorMode, 1);
break;
case 1:
// //std::cout << "SH\n";
c.core->mem.write(memAddr, reg[rsrc[1]], c.supervisorMode, 2);
break;
case 2:
// //std::cout << std::hex << "SW: about to write: " << reg[rsrc[1]] << " to " << memAddr << "\n";
c.core->mem.write(memAddr, reg[rsrc[1]], c.supervisorMode, 4);
break;
default:
cout << "ERROR: UNSUPPORTED S INST\n";
exit(1);
}
c.memAccesses.push_back(Warp::MemAccess(true, memAddr));
#ifdef EMU_INSTRUMENTATION
Harp::OSDomain::osDomain->
do_mem(0, memAddr, c.core->mem.virtToPhys(memAddr), 8, true);
#endif
break;
case B_INST:
//std::cout << "B_INST\n";
switch (func3)
{
case 0:
// BEQ
if (int(reg[rsrc[0]]) == int(reg[rsrc[1]]))
{
if (!pcSet) nextPc = (c.pc - 4) + immsrc;
pcSet = true;
}
break;
case 1:
// BNE
if (int(reg[rsrc[0]]) != int(reg[rsrc[1]]))
{
if (!pcSet) nextPc = (c.pc - 4) + immsrc;
pcSet = true;
}
break;
case 4:
// BLT
if (int(reg[rsrc[0]]) < int(reg[rsrc[1]]))
{
if (!pcSet) nextPc = (c.pc - 4) + immsrc;
pcSet = true;
}
break;
case 5:
// BGE
if (int(reg[rsrc[0]]) >= int(reg[rsrc[1]]))
{
if (!pcSet) nextPc = (c.pc - 4) + immsrc;
pcSet = true;
}
break;
case 6:
// BLTU
if (Word_u(reg[rsrc[0]]) < Word_u(reg[rsrc[1]]))
{
if (!pcSet) nextPc = (c.pc - 4) + immsrc;
pcSet = true;
}
break;
case 7:
// BGEU
if (Word_u(reg[rsrc[0]]) >= Word_u(reg[rsrc[1]]))
{
if (!pcSet) nextPc = (c.pc - 4) + immsrc;
pcSet = true;
}
break;
}
break;
case LUI_INST:
//std::cout << "LUI_INST\n";
reg[rdest] = (immsrc << 12) & 0xfffff000;
break;
case AUIPC_INST:
//std::cout << "AUIPC_INST\n";
reg[rdest] = ((immsrc << 12) & 0xfffff000) + (c.pc - 4);
break;
case JAL_INST:
//std::cout << "JAL_INST\n";
if (!pcSet) nextPc = (c.pc - 4) + immsrc;
if (!pcSet) {/*std::cout << "JAL... SETTING PC: " << nextPc << "\n"; */}
if (rdest != 0)
{
reg[rdest] = c.pc;
}
pcSet = true;
break;
case JALR_INST:
std::cout << "JALR_INST\n";
if (!pcSet) nextPc = reg[rsrc[0]] + immsrc;
if (!pcSet) {/*std::cout << "JALR... SETTING PC: " << nextPc << "\n";*/ }
if (rdest != 0)
{
reg[rdest] = c.pc;
}
pcSet = true;
break;
case SYS_INST:
//std::cout << "SYS_INST\n";
temp = reg[rsrc[0]];
if (immsrc == 0x20) // ThreadID
{
reg[rdest] = t;
D(2, "CSR Reading tid " << hex << immsrc << dec << " and returning " << reg[rdest]);
} else if (immsrc == 0x21) // WarpID
{
reg[rdest] = c.id;
D(2, "CSR Reading wid " << hex << immsrc << dec << " and returning " << reg[rdest]);
}
// switch (func3)
// {
// case 1:
// // printf("Case 1\n");
// if (rdest != 0)
// {
// reg[rdest] = c.csr[immsrc & 0x00000FFF];
// }
// c.csr[immsrc & 0x00000FFF] = temp;
// break;
// case 2:
// // printf("Case 2\n");
// if (rdest != 0)
// {
// // printf("Reading from CSR: %d = %d\n", (immsrc & 0x00000FFF), c.csr[immsrc & 0x00000FFF]);
// reg[rdest] = c.csr[immsrc & 0x00000FFF];
// }
// // printf("Writing to CSR --> %d = %d\n", immsrc, (temp | c.csr[immsrc & 0x00000FFF]));
// c.csr[immsrc & 0x00000FFF] = temp | c.csr[immsrc & 0x00000FFF];
// break;
// case 3:
// // printf("Case 3\n");
// if (rdest != 0)
// {
// reg[rdest] = c.csr[immsrc & 0x00000FFF];
// }
// c.csr[immsrc & 0x00000FFF] = temp & (~c.csr[immsrc & 0x00000FFF]);
// break;
// case 5:
// // printf("Case 5\n");
// if (rdest != 0)
// {
// reg[rdest] = c.csr[immsrc & 0x00000FFF];
// }
// c.csr[immsrc & 0x00000FFF] = rsrc[0];
// break;
// case 6:
// // printf("Case 6\n");
// if (rdest != 0)
// {
// reg[rdest] = c.csr[immsrc & 0x00000FFF];
// }
// c.csr[immsrc & 0x00000FFF] = rsrc[0] | c.csr[immsrc & 0x00000FFF];
// break;
// case 7:
// // printf("Case 7\n");
// if (rdest != 0)
// {
// reg[rdest] = c.csr[immsrc & 0x00000FFF];
// }
// c.csr[immsrc & 0x00000FFF] = rsrc[0] & (~c.csr[immsrc & 0x00000FFF]);
// break;
// case 0:
// if (immsrc < 2)
// {
// //std::cout << "INTERRUPT ECALL/EBREAK\n";
// nextActiveThreads = 0;
// c.spawned = false;
// // c.interrupt(0);
// }
// break;
// default:
// break;
// }
break;
case TRAP:
//std::cout << "INTERRUPT TRAP\n";
nextActiveThreads = 0;
c.interrupt(0);
break;
case FENCE:
//std::cout << "FENCE_INST\n";
break;
case PJ_INST:
// pred jump reg
//std::cout << "pred jump... src: " << rsrc[0] << std::hex << " val: " << reg[rsrc[0]] << " dest: " << reg[rsrc[1]] << "\n";
if (reg[rsrc[0]])
{
if (!pcSet) nextPc = reg[rsrc[1]];
pcSet = true;
}
break;
case GPGPU:
//std::cout << "GPGPU\n";
switch(func3)
{
case 1:
// WSPAWN
std::cout << "WSPAWN\n";
if (sjOnce)
{
sjOnce = false;
// //std::cout << "SIZE: " << c.core->w.size() << "\n";
num_to_wspawn = reg[rsrc[0]];
D(0, "Spawning " << num_to_wspawn << " new warps at PC: " << hex << reg[rsrc[1]]);
for (unsigned i = 1; i < num_to_wspawn; ++i)
{
// std::cout << "SPAWNING WARP\n";
Warp &newWarp(c.core->w[i]);
// //std::cout << "STARTING\n";
// if (newWarp.spawned == false)
{
// //std::cout << "ABOUT TO START\n";
newWarp.pc = reg[rsrc[1]];
// newWarp.reg[0] = reg;
// newWarp.csr = c.csr;
for (int kk = 0; kk < newWarp.tmask.size(); kk++)
{
if (kk == 0)
{
newWarp.tmask[kk] = true;
}
else
{
newWarp.tmask[kk] = false;
}
}
newWarp.activeThreads = 1;
newWarp.supervisorMode = false;
newWarp.spawned = true;
}
}
break;
}
break;
case 2:
{
// SPLIT
//std::cout << "SPLIT\n";
if (sjOnce)
{
sjOnce = false;
if (checkUnanimous(pred, c.reg, c.tmask)) {
std::cout << "Unanimous pred: " << pred << " val: " << reg[pred] << "\n";
DomStackEntry e(c.tmask);
e.uni = true;
c.domStack.push(e);
break;
}
cout << "Split: Original TM: ";
for (auto y : c.tmask) cout << y << " ";
cout << "\n";
DomStackEntry e(pred, c.reg, c.tmask, c.pc);
c.domStack.push(c.tmask);
c.domStack.push(e);
for (unsigned i = 0; i < e.tmask.size(); ++i)
{
c.tmask[i] = !e.tmask[i] && c.tmask[i];
}
cout << "Split: New TM\n";
for (auto y : c.tmask) cout << y << " ";
cout << "\n";
cout << "Split: Pushed TM PC: " << hex << e.pc << dec << "\n";
for (auto y : e.tmask) cout << y << " ";
cout << "\n";
}
break;
}
case 3:
// JOIN
//std::cout << "JOIN\n";
D(3, "JOIN INSTRUCTION");
if (sjOnce)
{
sjOnce = false;
if (!c.domStack.empty() && c.domStack.top().uni) {
D(2, "Uni branch at join");
printf("NEW DOMESTACK: \n");
c.tmask = c.domStack.top().tmask;
c.domStack.pop();
break;
}
if (!c.domStack.top().fallThrough) {
if (!pcSet) {
nextPc = c.domStack.top().pc;
cout << "join: NOT FALLTHROUGH PC: " << hex << nextPc << dec << '\n';
}
pcSet = true;
}
cout << "Join: Old TM: ";
for (auto y : c.tmask) cout << y << " ";
cout << "\n";
c.tmask = c.domStack.top().tmask;
cout << "Join: New TM: " << '\n';
for (auto y : c.tmask) cout << y << " ";
cout << "\n";
c.domStack.pop();
}
break;
case 4:
// is_barrier
break;
case 0:
// TMC
//std::cout << "JALRS\n";
nextActiveThreads = reg[rsrc[0]];
{
for (int ff = 0; ff < c.tmask.size(); ff++)
{
if (ff < nextActiveThreads)
{
c.tmask[ff] = true;
}
else
{
c.tmask[ff] = false;
}
}
}
if (nextActiveThreads == 0)
{
c.spawned = false;
}
// reg[rdest] = c.pc;
// if (!pcSet) nextPc = reg[rsrc[0]];
// pcSet = true;
// //std::cout << "ACTIVE_THREDS: " << rsrc[1] << " val: " << reg[rsrc[1]] << "\n";
// //std::cout << "nextPC: " << rsrc[0] << " val: " << std::hex << reg[rsrc[0]] << "\n";
break;
default:
cout << "ERROR: UNSUPPORTED GPGPU INSTRUCTION " << *this << "\n";
}
break;
default:
cout << "pc: " << hex << (c.pc) << "\n";
cout << "aERROR: Unsupported instruction: " << *this << "\n" << flush;
exit(1);
}
}
D(3, "End instruction execute.");
c.activeThreads = nextActiveThreads;
// if (nextActiveThreads != 0)
// {
// for (int i = 7; i >= c.activeThreads; i--)
// {
// c.tmask[i] = c.tmask[i] && false;
// }
// }
// //std::cout << "new thread mask: ";
// for (int i = 0; i < c.tmask.size(); ++i) //std::cout << " " << c.tmask[i];
// //std::cout << "\n";
// This way, if pc was set by a side effect (such as interrupt), it will
// retain its new value.
if (pcSet)
{
c.pc = nextPc;
cout << "Next PC: " << hex << nextPc << dec << "\n";
}
if (nextActiveThreads > c.reg.size()) {
cerr << "Error: attempt to spawn " << nextActiveThreads << " threads. "
<< c.reg.size() << " available.\n";
abort();
}
}

284
simX/mem.cpp Normal file
View file

@ -0,0 +1,284 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#include <fstream>
#include <iostream>
#include <iomanip>
#include <string>
#include <vector>
#include <stdlib.h>
#include <pthread.h>
#include "include/debug.h"
#include "include/types.h"
#include "include/util.h"
#include "include/mem.h"
#include "include/core.h"
using namespace std;
using namespace Harp;
RamMemDevice::RamMemDevice(const char *filename, Size wordSize) :
wordSize(wordSize), contents()
{
ifstream input(filename);
if (!input) {
cout << "Error reading file \"" << filename << "\" into RamMemDevice.\n";
exit(1);
}
do { contents.push_back(input.get()); } while (input);
while (contents.size() % wordSize) contents.push_back(0x00);
}
RamMemDevice::RamMemDevice(Size size, Size wordSize) :
contents(size), wordSize(wordSize) {}
void RomMemDevice::write(Addr, Word) {
cout << "Attempt to write to ROM.\n";
exit(1);
}
Word RamMemDevice::read(Addr addr) {
D(2, "RAM read, addr=0x" << hex << addr);
Word w = readWord(contents, addr, wordSize - addr%wordSize);
return w;
}
void RamMemDevice::write(Addr addr, Word w) {
D(2, "RAM write, addr=0x" << hex << addr);
writeWord(contents, addr, wordSize - addr%wordSize, w);
}
MemDevice &MemoryUnit::ADecoder::doLookup(Addr a, Size &bit) {
if (range == 0 || (a&((1ll<<bit)-1)) >= range) {
ADecoder *p(((a>>bit)&1)?oneChild:zeroChild);
if (p) { bit--; return p->doLookup(a, bit); }
else {cout << "lookup of 0x" << hex << a << " failed.\n";
throw BadAddress();}
} else {
return *md;
}
}
void MemoryUnit::ADecoder::map(Addr a, MemDevice &m, Size r, Size bit)
{
if ((1llu << bit) <= r) {
md = &m;
range = m.size();
} else {
ADecoder *&child(((a>>bit)&1)?oneChild:zeroChild);
if (!child) child = new ADecoder();
child->map(a, m, r, bit-1);
}
}
Byte *MemoryUnit::ADecoder::getPtr(Addr a, Size sz, Size wordSize) {
Size bit = wordSize - 1;
MemDevice &m(doLookup(a, bit));
a &= (2<<bit)-1;
if (a + sz <= m.size()) return m.base() + a;
return NULL;
}
Word MemoryUnit::ADecoder::read(Addr a, bool sup, Size wordSize) {
Size bit = wordSize - 1;
MemDevice &m(doLookup(a, bit));
a &= (2<<bit)-1;
// std::cout << std::hex << "ADecoder::read(Addr " << a << ", sup " << sup << ", wordSize " << wordSize << " -> ";
// std::cout << "Data: " << m.read(a) << "\n";
return m.read(a);
}
void MemoryUnit::ADecoder::write(Addr a, Word w, bool sup, Size wordSize) {
Size bit = wordSize - 1;
MemDevice &m(doLookup(a, bit));
RAM & r = (RAM &) m;
// a &= (2<<bit)-1;
// std::cout << std::hex << "ADecoder::write(Addr " << a << ", w " << w << ", sup " << sup << ", wordSize " << wordSize << "\n";
Word before = m.read(a);
Word new_word = w;
// if (a == 0x00010000)
// {
// fprintf(stderr, "%c", w);
// }
if (wordSize == 8)
{
r.writeByte(a, &w);
}
else if (wordSize == 16)
{
r.writeHalf(a, &w);
}
else
{
r.writeWord(a, &w);
}
// m.write(a, new_word);
}
Byte *MemoryUnit::getPtr(Addr a, Size s) {
return ad.getPtr(a, s, addrBytes*8);
}
void MemoryUnit::attach(MemDevice &m, Addr base) {
ad.map(base, m, m.size(), addrBytes*8 - 1);
}
MemoryUnit::TLBEntry MemoryUnit::tlbLookup(Addr vAddr, Word flagMask) {
map<Addr, MemoryUnit::TLBEntry>::iterator i;
if ((i = tlb.find(vAddr/pageSize)) != tlb.end()) {
TLBEntry &t = i->second;
if (t.flags & flagMask) return t;
else {
D(2, "Page fault on addr 0x" << hex << vAddr << "(bad flags)");
throw PageFault(vAddr, false);
}
} else {
D(2, "Page fault on addr 0x" << hex << vAddr << "(not in TLB)");
throw PageFault(vAddr, true);
}
}
#ifdef EMU_INSTRUMENTATION
Addr MemoryUnit::virtToPhys(Addr vAddr) {
TLBEntry t = tlbLookup(vAddr, 077);
return t.pfn*pageSize + vAddr%pageSize;
}
#endif
Word MemoryUnit::read(Addr vAddr, bool sup) {
Addr pAddr;
if (disableVm) {
pAddr = vAddr;
} else {
Word flagMask = sup?8:1;
TLBEntry t = tlbLookup(vAddr, flagMask);
pAddr = t.pfn*pageSize + vAddr%pageSize;
}
// std::cout << "MU::write: About to read: " << std::hex << pAddr << " = " << (ad.read(pAddr, sup, 8*addrBytes)) << " with " << std::dec << (8*addrBytes) << "\n";
return ad.read(pAddr, sup, 8*addrBytes);
}
Word MemoryUnit::fetch(Addr vAddr, bool sup) {
Addr pAddr;
if (disableVm) {
pAddr = vAddr;
} else {
Word flagMask = sup?32:4;
TLBEntry t = tlbLookup(vAddr, flagMask);
pAddr = t.pfn*pageSize + vAddr%pageSize;
}
Word instruction = ad.read(pAddr, sup, 8*addrBytes);
return instruction;
}
void MemoryUnit::write(Addr vAddr, Word w, bool sup, Size bytes) {
Addr pAddr;
if (disableVm) {
pAddr = vAddr;
} else {
Word flagMask = sup?16:2;
TLBEntry t = tlbLookup(vAddr, flagMask);
pAddr = t.pfn*pageSize + vAddr%pageSize;
}
// std::cout << "MU::write: About to write: " << std::hex << pAddr << " = " << w << " with " << std::dec << 8*bytes << "\n";
ad.write(pAddr, w, sup, 8*bytes);
// std::cout << std::hex << "reading same address: " << (this->read(vAddr, sup)) << "\n";
}
void MemoryUnit::tlbAdd(Addr virt, Addr phys, Word flags) {
D(1, "tlbAdd(0x" << hex << virt << ", 0x" << phys << ", 0x" << flags << ')');
tlb[virt/pageSize] = TLBEntry(phys/pageSize, flags);
}
void MemoryUnit::tlbRm(Addr va) {
if (tlb.find(va/pageSize) != tlb.end()) tlb.erase(tlb.find(va/pageSize));
}
void *Harp::consoleInputThread(void* arg_vp) {
ConsoleMemDevice *arg = (ConsoleMemDevice *)arg_vp;
char c;
while (cin) {
c = cin.get();
pthread_mutex_lock(&arg->cBufLock);
arg->cBuf.push(c);
pthread_mutex_unlock(&arg->cBufLock);
}
cout << "Console input ended. Exiting.\n";
exit(4);
}
ConsoleMemDevice::ConsoleMemDevice(Size wS, std::ostream &o, Core &core,
bool batch) :
wordSize(wS), output(o), core(core), cBuf()
{
// Create a console input thread if we are running in interactive mode.
if (!batch) {
pthread_t *thread = new pthread_t;
pthread_create(thread, NULL, consoleInputThread, (void*)this);
}
pthread_mutex_init(&cBufLock, NULL);
}
void ConsoleMemDevice::poll() {
pthread_mutex_lock(&cBufLock);
if (!cBuf.empty()) core.interrupt(8);
pthread_mutex_unlock(&cBufLock);
}
Word DiskControllerMemDevice::read(Addr a) {
switch (a/8) {
case 0: return curDisk;
case 1: return curBlock;
case 2: return disks[curDisk].blocks * blockSize;
case 3: return physAddr;
case 4: return command;
case 5: return status;
default:
cout << "Attempt to read invalid disk controller register.\n";
exit(1);
}
}
void DiskControllerMemDevice::write(Addr a, Word w) {
switch (a/8) {
case 0: if (w <= disks.size()) {
curDisk = w;
status = OK;
} else {
status = INVALID_DISK;
}
break;
case 1: if (w < disks[curDisk].blocks) {
curBlock = w;
} else {
status = INVALID_BLOCK;
}
break;
case 2: nBlocks = w >= disks[curDisk].blocks?disks[curDisk].blocks - 1 : w;
status = OK;
break;
case 3: physAddr = w;
status = OK;
break;
case 4: if (w == 0) {
} else {
}
cout << "TODO: Implement disk read and write!\n";
break;
}
}

1
simX/results.txt Normal file
View file

@ -0,0 +1 @@
start

View file

@ -0,0 +1,50 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F10142814192910EC081441F
:100100000544269422C201469305F0FFB2952EC401
:100110000147B78600009386F6FFBA9636C60148B7
:10012000A167C2973EC8171100001301E1EE05490F
:100130008148CA9846C0054A8549D2994EC2054BA6
:10014000930AF0FFDA9A56C4054CB78B0000938BE4
:10015000FBFFE29B5EC6054DA16CEA9C66C81711C9
:1001600000001301A1EC130EF0FF814DF29D6EC053
:10017000130FF0FF854EFA9E76C29301F0FF930FA6
:10018000F0FF8E9F7EC41304F0FF3782000013023D
:10019000F2FF229212C69305F0FFA164AE9426C826
:1001A000171100001301C1E9B78600009386F6FF1E
:1001B0000146369632C0B78700009387F7FF0547A0
:1001C0003E973AC2B78800009388F8FF1308F0FF03
:1001D000469842C4B78900009389F9FF3789000027
:1001E0001309F9FF4E994AC6B78A0000938AFAFFAD
:1001F000216A569A52C8171100001301A1E5A16B9C
:10020000014B5E9B5AC0A16C054C669C62C2A16DFD
:10021000130DF0FF6E9D6AC4A16E378E0000130EA1
:10022000FEFF769E72C6A16F216F7E9F7AC817155A
:100230000000130525DD971500009385A5E337061B
:1002400010F01306C6F2630CB500544514C21445F1
:1002500014C2544114C2144114C24105EDB737050C
:1002600010F0130505F22320050000000000000037
:0202700000008C
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFF00000000000000000000000084
:040000058000000077
:00000001FF

View file

@ -0,0 +1,45 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F1814185010EC00142090276
:1001000012C201443D0422C48144C10426C6814573
:10011000FD052EC817110000130101F00546050664
:1001200032C08546890636C205473D073AC4854731
:10013000C1073EC605487D0842C8171100001301DB
:10014000E1EE9308F0FF850846C01309F0FF0909A6
:100150004AC29309F0FFBD094EC4130AF0FF410AD9
:1001600052C6930AF0FFFD0A56C81711000013018A
:1001700021ED370B0800130BFBFF050B5AC0B70B23
:100180000800938BFBFF890B5EC2370C0800130C31
:10019000FCFF3D0C62C4B70C0800938CFCFFC10C43
:1001A00066C6370D0800130DFDFF7D0D6AC81711D7
:1001B0000000130121EAB70D0800850D6EC0370E4F
:1001C0000800090E72C2B70E0800BD0E76C4370FC4
:1001D0000800410F7AC6B70F0800FD0F7EC817153B
:1001E0000000130525E2971500009385A5E8370662
:1001F00010F01306C6F2630CB500544514C2144542
:1002000014C2544114C2144114C24105EDB737055C
:1002100010F0130505F22320050000000000000087
:020220000000DC
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFF00000000000000000000000084
:040000058000000077
:00000001FF

View file

@ -0,0 +1,29 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E0000100010001000100010001000100971062
:1000F0000000938020F1410123A020009710000010
:10010000938080F0056123A0200097100000938069
:10011000E0EF216123A0200097100000938040EFC2
:100120007D6123A02000971000009380A0EE017154
:1001300023A02000171500001305C5EC971500003B
:10014000938545EE370610F01306C6F2630CB50032
:10015000544514C2144514C2544114C2144114C26B
:100160004105EDB7370510F0130505F22320050012
:0201700000008D
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFF000000000000000000000000D4
:040000058000000077
:00000001FF

View file

@ -0,0 +1,29 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E0000100010001000100010001000100971062
:1000F0000000938020F1500023A0C0009710000062
:10010000938080F0340023A0D000971000009380EB
:10011000E0EF780023A0E00097100000938040EF0C
:100120001C0823A0F000971000009380A0EEE01FB1
:1001300023A08000171500001305C5EC97150000DB
:10014000938545EE370610F01306C6F2630CB50032
:10015000544514C2144514C2544114C2144114C26B
:100160004105EDB7370510F0130505F22320050012
:0201700000008D
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFF000000000000000000000000D4
:040000058000000077
:00000001FF

View file

@ -0,0 +1,50 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F181458144ED8C26C0814629
:100100000546758E32C281471307F0FF7D8F3AC4D2
:100110008144378400001304F4FF658C22C6014635
:10012000A165F18D2EC8171100001301E1EE0547FE
:100130008146F98E36C005448547E18F3EC285452C
:100140009304F0FFED8C26C4854637860000130625
:10015000F6FF758E32C6854721677D8F3AC8171125
:1001600000001301A1EC9304F0FF0144658C22C050
:100170001306F0FF8545F18D2EC21307F0FF93069D
:10018000F0FFF98E36C41304F0FFB78700009387A1
:10019000F7FFE18F3EC69305F0FFA164ED8C26C802
:1001A000171100001301C1E9B78600009386F6FF1E
:1001B0000146758E32C0B78700009387F7FF054769
:1001C0007D8F3AC2B78400009384F4FF1304F0FFDC
:1001D000658C22C4378600001306F6FFB785000041
:1001E0009385F5FFF18D2EC6378700001307F7FFC3
:1001F000A166F98E36C8171100001301A1E521642C
:100200008147E18F3EC0A1658544ED8C26C2A16681
:100210001306F0FF758E32C4A167378700001307FD
:10022000F7FF7D8F3AC6A1642164658C22C817153B
:100230000000130525DD971500009385A5E337061B
:1002400010F01306C6F2630CB500544514C21445F1
:1002500014C2544114C2144114C24105EDB737050C
:1002600010F0130505F22320050000000000000037
:0202700000008C
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFF00000000000000000000000084
:040000058000000077
:00000001FF

View file

@ -0,0 +1,45 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F1814581892EC00146058A46
:1001000032C28146C18A36C401477D8B3AC68147D7
:10011000859B3EC817110000130101F005440188BA
:1001200022C08544858826C28545C1892EC40546DE
:100130007D8A32C68546859A36C81711000013019C
:10014000E1EE1307F0FF018B3AC09307F0FF858BB8
:100150003EC21304F0FF418822C49304F0FFFD88DF
:1001600026C69305F0FF85992EC8171100001301CC
:1001700021ED370608001306F6FF018A32C0B706E4
:1001800008009386F6FF858A36C2370708001307F2
:10019000F7FF418B3AC4B70708009387F7FFFD8B41
:1001A0003EC6370408001304F4FF059822C817114F
:1001B0000000130121EAB7040800818826C0B705B2
:1001C000080085892EC237060800418A32C4B70666
:1001D0000800FD8A36C637070800059B3AC8171580
:1001E0000000130525E2971500009385A5E8370662
:1001F00010F01306C6F2630CB500544514C2144542
:1002000014C2544114C2144114C24105EDB737055C
:1002100010F0130505F22320050000000000000087
:020220000000DC
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFF00000000000000000000000084
:040000058000000077
:00000001FF

View file

@ -0,0 +1,33 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F181479D8F89C7B7270100B7
:100100009387B73A3EC0171100001301E1EF054491
:10011000018C09C4372401001304B43A22C017111A
:1001200000001301A1EEFD54858C89C4B7240100A1
:100130009384B43A26C017110000130161EDB7850E
:1001400000009385F5FF8D8D89C5B7250100938546
:10015000B53A2EC0171100001301C1EB2166118EB4
:1001600009C6372601001306B63A32C0171500003B
:10017000130545E9971500009385C5EA370610F089
:100180001306C6F2630CB500544514C2144514C2DC
:10019000544114C2144114C24105EDB7370510F0A3
:1001A000130505F2232005000000000000000000F8
:0201B00000004D
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFF000000000000000000000000D4
:040000058000000077
:00000001FF

View file

@ -0,0 +1,30 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F1814691E2814636C01711BB
:100100000000130161F0054711E301473AC01711E0
:1001100000001301A1EFFD5791E381473EC0171185
:1001200000001301E1EE378400001304F4FF11E036
:10013000014422C0171100001301C1EDA16491E038
:10014000814426C0171500001305C5EB9715000064
:10015000938545ED370610F01306C6F2630CB50023
:10016000544514C2144514C2544114C2144114C25B
:100170004105EDB7370510F0130505F22320050002
:0201800000007D
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFF000000000000000000000000D4
:040000058000000077
:00000001FF

View file

@ -0,0 +1,32 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F1814529A0B7250100938556
:10010000B53A2EC017110000130101F0054629A0D1
:10011000372601001306B63A32C01711000013014A
:10012000E1EEFD5629A0B72601009386B63A36C007
:10013000171100001301C1ED378700001307F7FF07
:1001400029A0372701001307B73A3AC0171100005A
:10015000130141ECA16729A0B72701009387B73AA3
:100160003EC0171500001305E5E9971500009385BB
:1001700065EB370610F01306C6F2630CB500544564
:1001800014C2144514C2544114C2144114C241058E
:10019000EDB7370510F0130505F223200500000028
:0201A00000005D
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFF000000000000000000000000D4
:040000058000000077
:00000001FF

View file

@ -0,0 +1,32 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F101442920372401001304D9
:10010000B43A22C017110000130101F085442920E0
:10011000B72401009384B43A26C0171100001301DC
:10012000E1EEFD552920B72501009385B53A2EC093
:10013000171100001301C1ED378600001306F6FF0A
:100140002920372601001306B63A32C017110000E5
:10015000130141ECA1662920B72601009386B63A27
:1001600036C0171500001305E5E9971500009385C3
:1001700065EB370610F01306C6F2630CB500544564
:1001800014C2144514C2544114C2144114C241058E
:10019000EDB7370510F0130505F223200500000028
:0201A00000005D
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFF000000000000000000000000D4
:040000058000000077
:00000001FF

View file

@ -0,0 +1,35 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F10145170600001306260137
:100100000296372501001305B53A32C017110000D9
:10011000130181EF0545970600009386260182961C
:10012000372501001305B53A36C017110000130139
:10013000E1ED7D55170700001307270102973725CA
:1001400001001305B53A3AC017110000130141EC44
:10015000378500001305F5FF9707000093872701F7
:100160008297372501001305B53A3EC017110000EC
:10017000130141EA216517080000130828010298BD
:10018000372501001305B53A42C0171500001305C5
:1001900065E7971500009385E5E8370610F013062C
:1001A000C6F2630CB500544514C2144514C2544140
:1001B00014C2144114C24105EDB7370510F0130500
:1001C00005F22320050000000000000000000000F0
:0201D00000002D
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFF000000000000000000000000D4
:040000058000000077
:00000001FF

View file

@ -0,0 +1,35 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F101459701000093812101C6
:100100008281372501001305B53A0EC01711000092
:10011000130181EF0545170200001302220102823C
:10012000372501001305B53A12C01711000013015D
:10013000E1ED7D55170400001304240102843725E6
:1001400001001305B53A22C017110000130141EC5C
:10015000378500001305F5FF970400009384240100
:100160008284372501001305B53A26C01711000017
:10017000130141EA216597050000938525018285D9
:10018000372501001305B53A2EC0171500001305D9
:1001900065E7971500009385E5E8370610F013062C
:1001A000C6F2630CB500544514C2144514C2544140
:1001B00014C2144114C24105EDB7370510F0130500
:1001C00005F22320050000000000000000000000F0
:0201D00000002D
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFF000000000000000000000000D4
:040000058000000077
:00000001FF

View file

@ -0,0 +1,45 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F1814181410EC001420542FE
:1001000012C20144414422C48144FD4426C68145B3
:1001100085552EC817110000130101F00546014650
:1001200032C08546854636C2054741473AC48547B1
:10013000FD473EC60548055842C817110000130187
:10014000E1EE9308F0FF814846C01309F0FF05492E
:100150004AC29309F0FFC1494EC4130AF0FF7D4A19
:1001600052C6930AF0FF855A56C8171100001301B2
:1001700021ED370B0800130BFBFF014B5AC0B70BE7
:100180000800938BFBFF854B5EC2370C0800130CF5
:10019000FCFF414C62C4B70C0800938CFCFFFD4C83
:1001A00066C6370D0800130DFDFF055D6AC81711FF
:1001B0000000130121EAB70D0800814D6EC0370E13
:1001C0000800054E72C2B70E0800C14E76C4370F44
:1001D00008007D4F7AC6B70F0800855F7EC81715E7
:1001E0000000130525E2971500009385A5E8370662
:1001F00010F01306C6F2630CB500544514C2144542
:1002000014C2544114C2144114C24105EDB737055C
:1002100010F0130505F22320050000000000000087
:020220000000DC
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFF00000000000000000000000084
:040000058000000077
:00000001FF

View file

@ -0,0 +1,45 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F1814185610EC001420962B6
:1001000012C201443D6422C48144FD6426C6814577
:10011000FD752EC817110000130101F00546056694
:1001200032C08546896636C205473D673AC4854771
:10013000FD673EC605487D7842C8171100001301CF
:10014000E1EE9308F0FF856846C01309F0FF0969E6
:100150004AC29309F0FFBD694EC4130AF0FF7D6ADD
:1001600052C6930AF0FFFD7A56C81711000013011A
:1001700021ED370B0800130BFBFF056B5AC0B70BC3
:100180000800938BFBFF896B5EC2370C0800130CD1
:10019000FCFF3D6C62C4B70C0800938CFCFFFD6C47
:1001A00066C6370D0800130DFDFF7D7D6AC8171167
:1001B0000000130121EAB70D0800856D6EC0370EEF
:1001C0000800096E72C2B70E0800BD6E76C4370F04
:1001D00008007D6F7AC6B70F0800FD7F7EC817152F
:1001E0000000130525E2971500009385A5E8370662
:1001F00010F01306C6F2630CB500544514C2144542
:1002000014C2544114C2144114C24105EDB737055C
:1002100010F0130505F22320050000000000000087
:020220000000DC
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFF00000000000000000000000084
:040000058000000077
:00000001FF

View file

@ -0,0 +1,39 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F1171700001307E7F118435F
:100100003AC017110000130121F0971700009387E0
:10011000A7F0DC433EC017110000130121EF1714B4
:100120000000130464EF004422C017110000130103
:1001300021EE97140000938424EEE45026C017119A
:100140000000130121ED971600009386E6ECF45EA3
:1001500036C0171500001305E5EA971500009385D2
:1001600065F4370610F01306C6F2630CB50054456B
:1001700014C2144514C2544114C2144114C241059E
:10018000EDB7370510F0130505F223200500000038
:0201900000006D
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFF000000000100000002000000D1
:1010200003000000040000000500000006000000AE
:101030000700000008000000090000000A0000008E
:101040000B0000000C0000000D0000000E0000006E
:101050000F0000001000000011000000120000004E
:10106000130000001400000015000000160000002E
:101070001700000018000000190000001A0000000E
:101080001B0000001C0000001D0000001E000000EE
:101090001F00000000000000000000000000000031
:040000058000000077
:00000001FF

View file

@ -0,0 +1,40 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E0000100010001000100010001000100971062
:1000F0000000938020F1171100001301E1F102428A
:1001000023A0400097100000938000F0171100001A
:10011000130181F0124423A0800097100000938007
:10012000E0EE17110000130121EF224823A0000187
:10013000971000009380C0ED171100001301C1ED6E
:10014000F65F23A0F001971000009380A0EC171138
:100150000000130161ECFE5A23A0500117150000A6
:10016000130545EA971500009385C5F3370610F08F
:100170001306C6F2630CB500544514C2144514C2EC
:10018000544114C2144114C24105EDB7370510F0B3
:10019000130505F223200500000000000000000008
:0201A00000005D
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFF000000000100000002000000D1
:1010200003000000040000000500000006000000AE
:101030000700000008000000090000000A0000008E
:101040000B0000000C0000000D0000000E0000006E
:101050000F0000001000000011000000120000004E
:10106000130000001400000015000000160000002E
:101070001700000018000000190000001A0000000E
:101080001B0000001C0000001D0000001E000000EE
:101090001F00000000000000000000000000000031
:040000058000000077
:00000001FF

View file

@ -0,0 +1,50 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F101468145B2852EC0014760
:100100008546BA8636C201449307F0FFA2873EC4F3
:100110008145B78400009384F4FFAE8426C68146EF
:100120002166368632C8171100001301E1EE8547BB
:1001300001473E873AC085440544268422C20546CD
:100140009305F0FFB2852EC40547B786000093865D
:10015000F6FFBA8636C60544A167A2873EC81711C6
:1001600000001301A1EC9305F0FF8144AE8426C08A
:100170009306F0FF0546368632C29307F0FF130759
:10018000F0FF3E873AC49304F0FF37840000130465
:10019000F4FF268422C61306F0FFA165B2852EC89F
:1001A000171100001301C1E9378700001307F7FF9B
:1001B0008146BA8636C0378400001304F4FF8547B1
:1001C000A2873EC2B78500009385F5FF9304F0FF38
:1001D000AE8426C4B78600009386F6FF37860000FB
:1001E0001306F6FF368632C6B78700009387F7FFFF
:1001F00021673E873AC8171100001301A1E5A164E9
:100200000144268422C021668545B2852EC221671D
:100210009306F0FFBA8636C42164B787000093873F
:10022000F7FFA2873EC6A165A164AE8426C8171554
:100230000000130525DD971500009385A5E337061B
:1002400010F01306C6F2630CB500544514C21445F1
:1002500014C2544114C2144114C24105EDB737050C
:1002600010F0130505F22320050000000000000037
:0202700000008C
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFF00000000000000000000000084
:040000058000000077
:00000001FF

View file

@ -0,0 +1,50 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F101448147C18F3EC08145B9
:100100008544CD8C26C281461306F0FF558E32C43D
:100110008147378700001307F7FF5D8F3AC6814498
:100120002164458C22C8171100001301E1EE054639
:100130008145D18D2EC005478546D98E36C20544EE
:100140009307F0FFC18F3EC48545B78400009384B8
:10015000F4FFCD8C26C685462166558E32C8171110
:1001600000001301A1EC9307F0FF01475D8F3AC037
:100170009304F0FF0544458C22C21306F0FF93055B
:10018000F0FFD18D2EC41307F0FFB78600009386D1
:10019000F6FFD98E36C61304F0FFA167C18F3EC8A3
:1001A000171100001301C1E9B78500009385F5FF21
:1001B0008144CD8C26C0B78600009386F6FF0546A5
:1001C000558E32C2B78700009387F7FF1307F0FF01
:1001D0005D8F3AC4B78400009384F4FF3784000035
:1001E0001304F4FF458C22C6378600001306F6FF81
:1001F000A165D18D2EC8171100001301A1E521675B
:100200008146D98E36C021648547C18F3EC2A16523
:100210009304F0FFCD8C26C4A16637860000130638
:10022000F6FF558E32C6A16721675D8F3AC8171554
:100230000000130525DD971500009385A5E337061B
:1002400010F01306C6F2630CB500544514C21445F1
:1002500014C2544114C2144114C24105EDB737050C
:1002600010F0130505F22320050000000000000037
:0202700000008C
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFF00000000000000000000000084
:040000058000000077
:00000001FF

View file

@ -0,0 +1,45 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F1814186010EC001420A0274
:1001000012C201443E0422C48144C20426C6814571
:10011000FE052EC817110000130101F00546060662
:1001200032C085468A0636C205473E073AC485472F
:10013000C2073EC605487E0842C8171100001301D9
:10014000E1EE9308F0FF860846C01309F0FF0A09A4
:100150004AC29309F0FFBE094EC4130AF0FF420AD7
:1001600052C6930AF0FFFE0A56C817110000130189
:1001700021ED370B0800130BFBFF060B5AC0B70B22
:100180000800938BFBFF8A0B5EC2370C0800130C30
:10019000FCFF3E0C62C4B70C0800938CFCFFC20C41
:1001A00066C6370D0800130DFDFF7E0D6AC81711D6
:1001B0000000130121EAB70D0800860D6EC0370E4E
:1001C00008000A0E72C2B70E0800BE0E76C4370FC2
:1001D0000800420F7AC6B70F0800FE0F7EC8171539
:1001E0000000130525E2971500009385A5E8370662
:1001F00010F01306C6F2630CB500544514C2144542
:1002000014C2544114C2144114C24105EDB737055C
:1002100010F0130505F22320050000000000000087
:020220000000DC
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFF00000000000000000000000084
:040000058000000077
:00000001FF

View file

@ -0,0 +1,45 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F18144858426C08145898552
:100100002EC201463D8632C48146C18636C60147AD
:100110007D873AC817110000130101F085478587D4
:100120003EC00544098422C28544BD8426C4854559
:10013000C1852EC605467D8632C817110000130101
:10014000E1EE9306F0FF858636C01307F0FF0987BE
:100150003AC29307F0FFBD873EC41304F0FF418409
:1001600022C69304F0FFFD8426C817110000130176
:1001700021EDB70508009385F5FF85852EC037066C
:1001800008001306F6FF098632C2B70608009386F8
:10019000F6FFBD8636C4370708001307F7FF41870F
:1001A0003AC6B70708009387F7FFFD873EC81711C7
:1001B0000000130121EA37040800058422C0B704B7
:1001C0000800898426C2B7050800BD852EC43706FD
:1001D0000800418632C6B7060800FD8636C81715E6
:1001E0000000130525E2971500009385A5E8370662
:1001F00010F01306C6F2630CB500544514C2144542
:1002000014C2544114C2144114C24105EDB737055C
:1002100010F0130505F22320050000000000000087
:020220000000DC
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFF00000000000000000000000084
:040000058000000077
:00000001FF

View file

@ -0,0 +1,45 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F1014705833AC0814789833C
:100100003EC201443D8022C48144C18026C681454F
:10011000FD812EC817110000130101F0054605826C
:1001200032C08546898236C205473D833AC4854739
:10013000C1833EC605447D8022C81711000013010B
:10014000E1EE9304F0FF858026C09305F0FF8981DE
:100150002EC21306F0FF3D8232C49306F0FFC18227
:1001600036C61307F0FF7D833AC81711000013014C
:1001700021EDB70708009387F7FF85833EC037045A
:1001800008001304F4FF098022C2B7040800938416
:10019000F4FFBD8026C4B70508009385F5FFC18133
:1001A0002EC6370608001306F6FF7D8232C81711E7
:1001B0000000130121EAB7060800858236C0370720
:1001C000080009833AC2B7070800BD833EC437045C
:1001D0000800418022C6B7040800FD8026C8171514
:1001E0000000130525E2971500009385A5E8370662
:1001F00010F01306C6F2630CB500544514C2144542
:1002000014C2544114C2144114C24105EDB737055C
:1002100010F0130505F22320050000000000000087
:020220000000DC
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFF00000000000000000000000084
:040000058000000077
:00000001FF

View file

@ -0,0 +1,50 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F1814581448D8C26C0814689
:100100000546158E32C281471307F0FF1D8F3AC492
:100110008144378400001304F4FF058C22C6014695
:10012000A165918D2EC8171100001301E1EE05475E
:100130008146998E36C005448547818F3EC28545EC
:100140009304F0FF8D8C26C4854637860000130685
:10015000F6FF158E32C6854721671D8F3AC81711E5
:1001600000001301A1EC9304F0FF0144058C22C0B0
:100170001306F0FF8545918D2EC21307F0FF9306FD
:10018000F0FF998E36C41304F0FFB7870000938701
:10019000F7FF818F3EC69305F0FFA1648D8C26C8C2
:1001A000171100001301C1E9B78600009386F6FF1E
:1001B0000146158E32C0B78700009387F7FF0547C9
:1001C0001D8F3AC2B78400009384F4FF1304F0FF3C
:1001D000058C22C4378600001306F6FFB7850000A1
:1001E0009385F5FF918D2EC6378700001307F7FF23
:1001F000A166998E36C8171100001301A1E521648C
:100200008147818F3EC0A16585448D8C26C2A16641
:100210001306F0FF158E32C4A1673787000013075D
:10022000F7FF1D8F3AC6A1642164058C22C81715FB
:100230000000130525DD971500009385A5E337061B
:1002400010F01306C6F2630CB500544514C21445F1
:1002500014C2544114C2144114C24105EDB737050C
:1002600010F0130505F22320050000000000000037
:0202700000008C
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFF00000000000000000000000084
:040000058000000077
:00000001FF

View file

@ -0,0 +1,41 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F10144171600001306C6F198
:1001000000C2004222C0171100001301E1EF854434
:1001100097170000938747F0C4C3C44326C0171144
:1001200000001301A1EE7D55971400009384C4EEE6
:1001300088C488442AC017110000130161EDB786F6
:1001400000009386F6FF171700001307E7EC14CBA7
:10015000144B36C0171100001301C1EBA16717162D
:100160000000130666EB7CDE7C5E3EC017150000C7
:10017000130545E9971500009385C5F2370610F081
:100180001306C6F2630CB500544514C2144514C2DC
:10019000544114C2144114C24105EDB7370510F0A3
:1001A000130505F2232005000000000000000000F8
:0201B00000004D
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFF00000000000000000000000054
:040000058000000077
:00000001FF

View file

@ -0,0 +1,41 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E0000100010001000100010001000100971062
:1000F0000000938020F1171100001301E1F181410C
:100100000EC0824123A03000971000009380C0EF02
:1001100017110000130141F0054212C2124223A040
:10012000400097100000938060EE1711000013014B
:10013000A1EE7D58C2C0064823A000019710000020
:10014000938000ED17110000130101ED378C0000C2
:10015000130CFCFFE2DC665C23A08001971000001A
:10016000938040EB17110000130101EBA16FFEDF3C
:10017000FE5F23A0F001171500001305A5E89715F1
:100180000000938525F2370610F01306C6F2630CC3
:10019000B500544514C2144514C2544114C214414C
:1001A00014C24105EDB7370510F0130505F2232001
:0201B000050048
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFF00000000000000000000000054
:040000058000000077
:00000001FF

View file

@ -0,0 +1,50 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F181440144258C22C00146F6
:100100008545B18D2EC201479306F0FFB98E36C4E6
:100110000144B78700009387F7FFA18F3EC6814552
:10012000A164AD8C26C8171100001301E1EE8546CD
:100130000146358E32C0854705473D8F3AC285441A
:100140001304F0FF258C22C40546B7850000938573
:10015000F5FFB18D2EC60547A166B98E36C81711B9
:1001600000001301A1EC1304F0FF8147A18F3EC0F2
:100170009305F0FF8544AD8C26C29306F0FF13066D
:10018000F0FF358E32C49307F0FF37870000130766
:10019000F7FF3D8F3AC69304F0FF2164258C22C8F7
:1001A000171100001301C1E9378600001306F6FF9E
:1001B0008145B18D2EC0378700001307F7FF8546B4
:1001C000B98E36C2378400001304F4FF9307F0FFA2
:1001D000A18F3EC4B78500009385F5FFB78400006A
:1001E0009384F4FFAD8C26C6B78600009386F6FF95
:1001F0002166358E32C8171100001301A1E5A167F1
:1002000001473D8F3AC0A1640544258C22C2216676
:100210009305F0FFB18D2EC42167B7860000938649
:10022000F6FFB98E36C62164A167A18F3EC81715A7
:100230000000130525DD971500009385A5E337061B
:1002400010F01306C6F2630CB500544514C21445F1
:1002500014C2544114C2144114C24105EDB737050C
:1002600010F0130505F22320050000000000000037
:0202700000008C
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFF00000000000000000000000084
:040000058000000077
:00000001FF

View file

@ -0,0 +1,52 @@
:0200000480007A
:1000000017110000130101001309000093080000FC
:10001000B348190323201101130A000093091000AB
:10002000B3493A0323223101130B0000930AF0FF76
:10003000B34A5B0323245101130C0000B70B00806B
:10004000938BFBFFB34B7C0323267101130D000040
:10005000B70C0080B34C9D032328910117110000B9
:10006000130181FB130E1000930D0000B34DBE036E
:100070002320B101130F1000930E1000B34EDF03C5
:100080002322D10193011000930FF0FFB3CFF103AE
:100090002324F10113041000370200801302F2FF41
:1000A000334244022326410093051000B704008028
:1000B000B3C495022328910017110000130101F722
:1000C0009306F0FF1306000033C6C6022320C100CA
:1000D0009307F0FF1307100033C7E7022322E10064
:1000E0009308F0FF1308F0FF33C80803232401012D
:1000F0009309F0FF370900801309F9FF33C9290379
:1001000023262101930AF0FF370A008033CA4A03ED
:100110002328410117110000130181F2B70B008061
:10012000938BFBFF130B000033CB6B032320610188
:10013000B70C0080938CFCFF130C100033CC8C03A5
:1001400023228101B70D0080938DFDFF130DF0FF79
:1001500033CDAD032324A101B70E0080938EFEFFA3
:10016000370E0080130EFEFF33CECE032326C101CF
:10017000B70F0080938FFFFF370F008033CFEF035F
:100180002328E101171100001301C1EC37020080A0
:1001900093010000B341320223203100B7040080F4
:1001A0001304100033C48402232281003706008028
:1001B0009305F0FFB345B6022324B1003707008052
:1001C000B70600809386F6FFB346D7022326D100F8
:1001D00037080080B7070080B347F8022328F100F2
:1001E00017150000130505E297150000938585EEAD
:1001F000370610F01306C6F26306B5028326C50063
:100200002320D600832685002320D60083264500A0
:100210002320D600832605002320D60013050501E0
:100220006FF09FFD370510F0130505F22320050040
:0402300000000000CA
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:1010C000FFFFFFFFFFFFFFFF000000000000000028
:040000058000000077
:00000001FF

View file

@ -0,0 +1,52 @@
:0200000480007A
:1000000017110000130101001309000093080000FC
:10001000B358190323201101130A0000930910009B
:10002000B3593A0323223101130B0000930AF0FF66
:10003000B35A5B0323245101130C0000B70B00805B
:10004000938BFBFFB35B7C0323267101130D000030
:10005000B70C0080B35C9D032328910117110000A9
:10006000130181FB130E1000930D0000B35DBE035E
:100070002320B101130F1000930E1000B35EDF03B5
:100080002322D10193011000930FF0FFB3DFF1039E
:100090002324F10113041000370200801302F2FF41
:1000A000335244022326410093051000B704008018
:1000B000B3D495022328910017110000130101F712
:1000C0009306F0FF1306000033D6C6022320C100BA
:1000D0009307F0FF1307100033D7E7022322E10054
:1000E0009308F0FF1308F0FF33D80803232401011D
:1000F0009309F0FF370900801309F9FF33D9290369
:1001000023262101930AF0FF370A008033DA4A03DD
:100110002328410117110000130181F2B70B008061
:10012000938BFBFF130B000033DB6B032320610178
:10013000B70C0080938CFCFF130C100033DC8C0395
:1001400023228101B70D0080938DFDFF130DF0FF79
:1001500033DDAD032324A101B70E0080938EFEFF93
:10016000370E0080130EFEFF33DECE032326C101BF
:10017000B70F0080938FFFFF370F008033DFEF034F
:100180002328E101171100001301C1EC37020080A0
:1001900093010000B351320223203100B7040080E4
:1001A0001304100033D48402232281003706008018
:1001B0009305F0FFB355B6022324B1003707008042
:1001C000B70600809386F6FFB356D7022326D100E8
:1001D00037080080B7070080B357F8022328F100E2
:1001E00017150000130505E297150000938585EEAD
:1001F000370610F01306C6F26306B5028326C50063
:100200002320D600832685002320D60083264500A0
:100210002320D600832605002320D60013050501E0
:100220006FF09FFD370510F0130505F22320050040
:0402300000000000CA
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:1010C000FFFFFFFFFFFFFFFF000000000000000028
:040000058000000077
:00000001FF

View file

@ -0,0 +1,65 @@
:0200000480007A
:100000009710000093800000171100001301810277
:1000100083A1000013020000930210001303F0FFFD
:10002000B70300809383F3FF3704008033824100DD
:10003000B382510033836100B38371003384810044
:100040002320310023224100232451002326610074
:1000500023287100232A8100971000009380C0FAA2
:1000600017110000130181FE03A400009304000097
:10007000130510009305F0FF370600801306F6FF06
:10008000B7060080B30494003305A400B305B400A0
:100090003306C400B306D40023208100232291003C
:1000A0002324A1002326B1002328C100232AD10044
:1000B00097100000938080F517110000130181FA5A
:1000C00083A6000013070000930710001308F0FF39
:1000D000B70800809388F8FF370900803387E6006F
:1000E000B387F60033880601B388160133892601E9
:1000F0002320D1002322E1002324F1002326010143
:1001000023281101232A210197100000938040F039
:1001100017110000130181F603A9000093090000E4
:10012000130A1000930AF0FF370B0080130BFBFF3C
:10013000B70B0080B3093901330A4901B30A5901E9
:10014000330B6901B30B79012320210123223101F3
:10015000232441012326510123286101232A71010F
:1001600097100000938000EB17110000130181F23B
:1001700083AB0000130C0000930C1000130DF0FF74
:10018000B70D0080938DFDFF370E0080338C8B01FF
:10019000B38C9B01338DAB01B38DBB01338ECB018F
:1001A0002320710123228101232491012326A1010F
:1001B0002328B101232AC101971C0000938CCCE5B0
:1001C000171D0000130D8DEE03AE0C00930D1000F3
:1001D000B30EBE01338FBE01B30FBF01B380BF01A9
:1001E0003381B001B301B1012320BD012322CD0130
:1001F0002324DD012326ED012328FD01232A1D00F0
:10020000232C2D00232E3D0097100000938000E149
:1002100017110000130181EB03AE0000B79DFFF73B
:10022000938D8D813300BE012320010097100000C3
:10023000938000DF17110000130181E903AE000075
:10024000B79DFFF7938D8D813300BE01B30200008F
:10025000232001002322510097100000938080DCAE
:1002600017110000130141E783A100003382010050
:10027000B30202003303500033070300B307070043
:1002800033880700B30C0001330D9001B30D0D004E
:10029000232041002322A1012324B10117150000CE
:1002A000130545D9971500009385C5E3370610F06F
:1002B0001306C6F26306B5028326C5002320D600C6
:1002C000832685002320D600832645002320D600E0
:1002D000832605002320D600130505016FF09FFD3E
:1002E000370510F0130505F223200500000000007B
:0402F000000000000A
:101000000000000001000000FFFFFFFFFFFFFF7F67
:1010100000000080CDAB00007856341298BADCFE98
:10102000145892360000000000000000000000008C
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:1010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
:1010D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
:040000058000000077
:00000001FF

View file

@ -0,0 +1,56 @@
:0200000480007A
:100000009710000093800000171100001301810277
:1000100083A10000138211009382F17F1383F1FF0B
:1000200093830100138401802320310023224100A7
:10003000232451002326610023287100232A8100F4
:1000400097100000938040FC17110000130101007D
:1000500003A40000930414001305F47F9305F4FF38
:1000600013060400930604802320810023229100BC
:100070002324A1002326B1002328C100232AD10074
:1000800097100000938080F817110000130181FD84
:1000900083A60000138716009387F67F1388F6FF68
:1000A00093880600138906802320D1002322E100D3
:1000B0002324F1002326010123281101232A2101F1
:1000C000971000009380C0F417110000130101FB8A
:1000D00003A9000093091900130AF97F930AF9FF95
:1000E000130B0900930B09802320210123223101E6
:1000F000232441012326510123286101232A710170
:1001000097100000938000F117110000130181F88F
:1001100083AB0000138C1B00938CFB7F138DFBFFC4
:10012000938D0B00138E0B802320710123228101FC
:10013000232491012326A1012328B101232AC101EF
:10014000171D0000130D4DED971D0000938D0DF64A
:10015000032E0D00930E1E00138F1E00930F1F0021
:1001600093801F00138110009301110023A0CD0183
:1001700023A2DD0123A4ED0123A6FD0123A81D0078
:1001800023AA2D0023AC3D0097100000938000E9C6
:1001900017110000130141F383A200001380120025
:1001A0002320010097100000938080E717110000C2
:1001B0001301C1F183A2000013801200930210000A
:1001C000232001002322510097100000938080E536
:1001D00017110000130101F083A100001382010038
:1001E0009302020013830200130703009307070022
:1001F00013880700930C0800138D0C00930D0D005D
:1002000023203100232241002324A1012326B10110
:1002100017150000130505E297150000938585EC7E
:10022000370610F01306C6F26306B5028326C50032
:100230002320D600832685002320D6008326450070
:100240002320D600832605002320D60013050501B0
:100250006FF09FFD370510F0130505F22320050010
:04026000000000009A
:101000000000000001000000FFFFFFFFFFFFFF7F67
:1010100000000080CDAB00007856341298BADCFE98
:10102000145892360000000000000000000000008C
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:1010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
:1010D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
:040000058000000077
:00000001FF

View file

@ -0,0 +1,66 @@
:0200000480007A
:100000009710000093800000171100001301810277
:1000100083A1000013020000930210001303F0FFFD
:10002000B70300809383F3FF3704008033F241006D
:10003000B3F2510033F36100B3F3710033F4810084
:100040002320310023224100232451002326610074
:1000500023287100232A8100971000009380C0FAA2
:1000600017110000130181FE03A400009304000097
:10007000130510009305F0FF370600801306F6FF06
:10008000B7060080B37494003375A400B375B40050
:100090003376C400B376D40023208100232291005C
:1000A0002324A1002326B1002328C100232AD10044
:1000B00097100000938080F517110000130181FA5A
:1000C00083A6000013070000930710001308F0FF39
:1000D000B70800809388F8FF3709008033F7E600FF
:1000E000B3F7F60033F80601B3F8160133F9260129
:1000F0002320D1002322E1002324F1002326010143
:1001000023281101232A210197100000938040F039
:1001100017110000130181F603A9000093090000E4
:10012000130A1000930AF0FF370B0080130BFBFF3C
:10013000B70B0080B3793901337A4901B37A590199
:10014000337B6901B37B7901232021012322310113
:10015000232441012326510123286101232A71010F
:1001600097100000938000EB17110000130181F23B
:1001700083AB0000130C0000930C1000130DF0FF74
:10018000B70D0080938DFDFF370E008033FC8B018F
:10019000B3FC9B0133FDAB01B3FDBB0133FECB01CF
:1001A0002320710123228101232491012326A1010F
:1001B0002328B101232AC101971C0000938CCCE5B0
:1001C000171D0000130D8DEE03AE0C001302F00797
:1001D0009302F0031303F0019303F0001304700083
:1001E00093043000B37E4E0033FF5E00B37F6F0098
:1001F000B3F07F0033F18000B371910023204D00F4
:100200002322CD012324DD012326ED012328FD0136
:10021000232A1D00232C2D00232E3D0097100000C3
:100220009380C0DF17110000130141EA03AE000004
:10023000B79DFFF7938D8D813370BE0123200100A0
:10024000971000009380C0DD17110000130141E8F2
:1002500003AE0000B79DFFF7938D8D813370BE0113
:10026000B3720000232001002322510097100000E8
:10027000938040DB17110000130101E683A1000009
:100280009303F0FF33F27100B372720033F3530043
:1002900033777300B377770033F87700B3FC03014B
:1002A00033FD9301B37D7D00232041002322A10172
:1002B0002324B101171500001305C5D797150000B9
:1002C000938545E2370610F01306C6F26306B502C1
:1002D0008326C5002320D600832685002320D60050
:1002E000832645002320D600832605002320D60040
:1002F000130505016FF09FFD370510F0130505F29A
:0403000023200500B1
:101000000000000001000000FFFFFFFFFFFFFF7F67
:1010100000000080FFFFCDAB7856341298BADCFE9A
:10102000145892360000000000000000000000008C
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:1010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
:1010D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
:040000058000000077
:00000001FF

View file

@ -0,0 +1,56 @@
:0200000480007A
:100000009710000093800000171100001301810277
:1000100083A1000013F2110093F2F17F13F3F1FFBB
:1000200093F3010013F401802320310023224100C7
:10003000232451002326610023287100232A8100F4
:1000400097100000938040FC17110000130101007D
:1000500003A40000937414001375F47F9375F4FFE8
:1000600013760400937604802320810023229100DC
:100070002324A1002326B1002328C100232AD10074
:1000800097100000938080F817110000130181FD84
:1000900083A6000013F7160093F7F67F13F8F6FF18
:1000A00093F8060013F906802320D1002322E100F3
:1000B0002324F1002326010123281101232A2101F1
:1000C000971000009380C0F417110000130101FB8A
:1000D00003A9000093791900137AF97F937AF9FF45
:1000E000137B0900937B0980232021012322310106
:1000F000232441012326510123286101232A710170
:1001000097100000938000F117110000130181F88F
:1001100083AB000013FC1B0093FCFB7F13FDFBFF74
:1001200093FD0B0013FE0B8023207101232281011C
:10013000232491012326A1012328B101232AC101EF
:10014000171D0000130D4DED971D0000938D0DF64A
:10015000032E0D00937EFE0713FFFE03937FFF0126
:1001600093F0FF0013F170009371310023A0CD01D3
:1001700023A2DD0123A4ED0123A6FD0123A81D0078
:1001800023AA2D0023AC3D0097100000938000E9C6
:1001900017110000130141F383A2000013F01200B5
:1001A0002320010097100000938080E717110000C2
:1001B0001301C1F183A2000013F01200937210002A
:1001C000232001002322510097100000938080E536
:1001D00017110000130101F083A1000013F2F1FFD9
:1001E0009372F2FF13F3F2FF1377F3FF9377F7FFA6
:1001F00013F8F7FF937CF8FF13FDFCFF937DFDFFE1
:1002000023203100232241002324A1012326B10110
:1002100017150000130505E297150000938585EC7E
:10022000370610F01306C6F26306B5028326C50032
:100230002320D600832685002320D6008326450070
:100240002320D600832605002320D60013050501B0
:100250006FF09FFD370510F0130505F22320050010
:04026000000000009A
:101000000000000001000000FFFFFFFFFFFFFF7F67
:1010100000000080FFFFCDAB7856341298BADCFE9A
:10102000145892360000000000000000000000008C
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:1010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
:1010D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
:040000058000000077
:00000001FF

View file

@ -0,0 +1,42 @@
:0200000480007A
:100000001717000013070700971700009387870151
:10001000832007003711000013014100B7F1FFFFF3
:100020009381810037F2FF7F1302C200B702008084
:100030009382020133812000B3813000338240007B
:10004000B3825000170300009713000017F8FFFF5A
:1000500097FEFF7F970F008033431300B3C3230045
:1000600033483800B3CE4E00B3CF5F0023A0670003
:1000700023A2770023A4070123A6D70123A8F70111
:1000800097180000938848F8171800001308C8FA5A
:10009000B710111193801011372122221301212250
:1000A000B737333393873733374E4444130E4E44B8
:1000B000375F5555130F5F5583A108003702008045
:1000C000B7F2FF7F9382420013038000B713000052
:1000D0009383C30037F4FFFF13040401338241000C
:1000E000B382510033836100B38371003384810094
:1000F0009700008017F1FF7F97070000171E000090
:1001000017FFFFFFB3C0400033415100B3C7670082
:10011000334E7E00334F8F00232018002322280007
:100120002324F8002326C8012328E801171900001A
:100130001309C9ED97180000938848F1832009003E
:10014000032149008321890017020000130242FFA6
:100150009707000093878701170F0000130F0F0404
:10016000970200009382C2FD1708000013080800E0
:10017000970F0000938F8F0233421200B3C72700FE
:10018000334F3F00B382124033482800B3CF3F00C3
:1001900023A0480023A2F80023A4E80123A65800C6
:1001A00023A8080123AAF80117150000130585E705
:1001B00097150000938505EB370610F01306C6F27D
:1001C0006306B5028326C5002320D600832685005A
:1001D0002320D600832645002320D6008326050051
:1001E0002320D600130505016FF09FFD370510F0A1
:1001F000130505F2232005000000000000000000A8
:0402000000000000FA
:1010000044000080F00000803C0100806801008006
:1010100098010080000000000000000000000000B7
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:040000058000000077
:00000001FF

View file

@ -0,0 +1,72 @@
:0200000480007A
:100000009710000093800000171100001301810178
:1000100083A1000013020000930210001303F0FFFD
:10002000B70300809383F3FF37040080930F000031
:100030006384410093EF1F006384510093EF2F000E
:100040006384610093EF4F006384710093EF8F002E
:100050006384810093EF0F012320310023224100AC
:10006000232451002326610023287100232A8100C4
:10007000232CF10197100000938000F91711000064
:10008000130101FC03A300009303000013041000FC
:100090009304F0FF370500801305F5FFB7050080D6
:1000A000930F00006304730093EF1F006304830049
:1000B00093EF2F006304930093EF4F006304A300BA
:1000C00093EF8F006304B30093EF0F0123206100CF
:1000D0002322710023248100232691002328A100DC
:1000E000232AB100232CF10197100000938000F225
:1000F00017110000130181F603A60000930600000B
:10010000130710009307F0FF370800801308F8FF6B
:10011000B7080080930F00006304D60093EF1F0020
:100120006304E60093EF2F006304F60093EF4F00A3
:100130006304060193EF8F006304160193EF0F0130
:100140002320C1002322D1002324E1002326F10033
:1001500023280101232A1101232CF101971000000B
:10016000938000EB17110000130101F103A90000B7
:1001700093090000130A1000930AF0FF370B008068
:10018000130BFBFFB70B0080930F000063043901D2
:1001900093EF1F006304490193EF2F00630459019B
:1001A00093EF4F006304690193EF8F0063047901BB
:1001B00093EF0F0123202101232231012324410148
:1001C0002326510123286101232A7101232CF101E7
:1001D00097100000938000E417110000130181EBD9
:1001E00003AC0000930C0000130D1000930DF0FF02
:1001F000370E0080130EFEFFB70E0080930F000035
:1002000063049C0193EF1F006304AC0193EF2F0084
:100210006304BC0193EF4F006304CC0193EF8F00A4
:100220006304DC0193EF0F0123208101232291015C
:100230002324A1012326B1012328C101232AD101AE
:10024000232CF101971D0000938D8DE69300000093
:10025000130110009301F0FF370200801302F2FF38
:10026000B7020080930F00006384000093EF1F002B
:100270006304010093EF2F006384010093EF4F00AC
:100280006304020093EF8F006384020093EF0F0179
:100290006304100093EF0F026304200093EF0F0438
:1002A0006304300093EF0F086304400093EF0F10D6
:1002B0006304500093EF0F2023A0FD01971A000064
:1002C000938A8AD5171B0000130BCBDE83AF0A007D
:1002D0001301F0FF9301F0FF37D2ED0F130292BA32
:1002E00063840F0213010000930100001302000059
:1002F000B74165879381113263840F0213010000B7
:10030000930100001302000037E1BC9A130101EFD2
:10031000E3800FFE130100009301000013020000B0
:1003200023200B0023222B0023243B0023264B00F9
:1003300017150000130505CF97150000938585D884
:10034000370610F01306C6F26306B5028326C50011
:100350002320D600832685002320D600832645004F
:100360002320D600832605002320D600130505018F
:100370006FF09FFD370510F0130505F223200500EF
:040380000000000079
:101000000000000001000000FFFFFFFFFFFFFF7F67
:101010000000008000000000000000000000000050
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:040000058000000077
:00000001FF

View file

@ -0,0 +1,72 @@
:0200000480007A
:100000009710000093800000171100001301810178
:1000100083A1000013020000930210001303F0FFFD
:10002000B70300809383F3FF37040080930F000031
:1000300063D4410093EF1F0063D4510093EF2F006E
:1000400063D4610093EF4F0063D4710093EF8F008E
:1000500063D4810093EF0F0123203100232241005C
:10006000232451002326610023287100232A8100C4
:10007000232CF10197100000938000F91711000064
:10008000130101FC03A300009303000013041000FC
:100090009304F0FF370500801305F5FFB7050080D6
:1000A000930F00006354730093EF1F0063548300A9
:1000B00093EF2F006354930093EF4F006354A3001A
:1000C00093EF8F006354B30093EF0F01232061007F
:1000D0002322710023248100232691002328A100DC
:1000E000232AB100232CF10197100000938000F225
:1000F00017110000130181F603A60000930600000B
:10010000130710009307F0FF370800801308F8FF6B
:10011000B7080080930F00006354D60093EF1F00D0
:100120006354E60093EF2F006354F60093EF4F0003
:100130006354060193EF8F006354160193EF0F0190
:100140002320C1002322D1002324E1002326F10033
:1001500023280101232A1101232CF101971000000B
:10016000938000EB17110000130101F103A90000B7
:1001700093090000130A1000930AF0FF370B008068
:10018000130BFBFFB70B0080930F00006354390182
:1001900093EF1F006354490193EF2F0063545901FB
:1001A00093EF4F006354690193EF8F00635479011B
:1001B00093EF0F0123202101232231012324410148
:1001C0002326510123286101232A7101232CF101E7
:1001D00097100000938000E417110000130181EBD9
:1001E00003AC0000930C0000130D1000930DF0FF02
:1001F000370E0080130EFEFFB70E0080930F000035
:1002000063549C0193EF1F006354AC0193EF2F00E4
:100210006354BC0193EF4F006354CC0193EF8F0004
:100220006354DC0193EF0F0123208101232291010C
:100230002324A1012326B1012328C101232AD101AE
:10024000232CF101971D0000938D8DE69300000093
:10025000130110009301F0FF370200801302F2FF38
:10026000B7020080930F000063D4000093EF1F00DB
:100270006354010093EF2F0063D4010093EF4F000C
:100280006354020093EF8F0063D4020093EF0F01D9
:100290006354100093EF0F026354200093EF0F0498
:1002A0006354300093EF0F086354400093EF0F1036
:1002B0006354500093EF0F2023A0FD01971A000014
:1002C000938A8AD5171B0000130BCBDE83AF0A007D
:1002D0001301F0FF9301F0FF37D2ED0F130292BA32
:1002E00063D40F0213010000930100001302000009
:1002F000B74165879381113263D40F021301000067
:10030000930100001302000037E1BC9A130101EFD2
:10031000E3D00FFE13010000930100001302000060
:1003200023200B0023222B0023243B0023264B00F9
:1003300017150000130505CF97150000938585D884
:10034000370610F01306C6F26306B5028326C50011
:100350002320D600832685002320D600832645004F
:100360002320D600832605002320D600130505018F
:100370006FF09FFD370510F0130505F223200500EF
:040380000000000079
:101000000000000001000000FFFFFFFFFFFFFF7F67
:10101000000000800100000000000000000000004F
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:040000058000000077
:00000001FF

View file

@ -0,0 +1,72 @@
:0200000480007A
:100000009710000093800000171100001301810178
:1000100083A1000013020000930210001303F0FFFD
:10002000B70300809383F3FF37040080930F000031
:1000300063F4410093EF1F0063F4510093EF2F002E
:1000400063F4610093EF4F0063F4710093EF8F004E
:1000500063F4810093EF0F0123203100232241003C
:10006000232451002326610023287100232A8100C4
:10007000232CF10197100000938000F91711000064
:10008000130101FC03A300009303000013041000FC
:100090009304F0FF370500801305F5FFB7050080D6
:1000A000930F00006374730093EF1F006374830069
:1000B00093EF2F006374930093EF4F006374A300DA
:1000C00093EF8F006374B30093EF0F01232061005F
:1000D0002322710023248100232691002328A100DC
:1000E000232AB100232CF10197100000938000F225
:1000F00017110000130181F603A60000930600000B
:10010000130710009307F0FF370800801308F8FF6B
:10011000B7080080930F00006374D60093EF1F00B0
:100120006374E60093EF2F006374F60093EF4F00C3
:100130006374060193EF8F006374160193EF0F0150
:100140002320C1002322D1002324E1002326F10033
:1001500023280101232A1101232CF101971000000B
:10016000938000EB17110000130101F103A90000B7
:1001700093090000130A1000930AF0FF370B008068
:10018000130BFBFFB70B0080930F00006374390162
:1001900093EF1F006374490193EF2F0063745901BB
:1001A00093EF4F006374690193EF8F0063747901DB
:1001B00093EF0F0123202101232231012324410148
:1001C0002326510123286101232A7101232CF101E7
:1001D00097100000938000E417110000130181EBD9
:1001E00003AC0000930C0000130D1000930DF0FF02
:1001F000370E0080130EFEFFB70E0080930F000035
:1002000063749C0193EF1F006374AC0193EF2F00A4
:100210006374BC0193EF4F006374CC0193EF8F00C4
:100220006374DC0193EF0F012320810123229101EC
:100230002324A1012326B1012328C101232AD101AE
:10024000232CF101971D0000938D8DE69300000093
:10025000130110009301F0FF370200801302F2FF38
:10026000B7020080930F000063F4000093EF1F00BB
:100270006374010093EF2F0063F4010093EF4F00CC
:100280006374020093EF8F0063F4020093EF0F0199
:100290006374100093EF0F026374200093EF0F0458
:1002A0006374300093EF0F086374400093EF0F10F6
:1002B0006374500093EF0F2023A0FD01971A0000F4
:1002C000938A8AD5171B0000130BCBDE83AF0A007D
:1002D0001301F0FF9301F0FF37D2ED0F130292BA32
:1002E00063F40F02130100009301000013020000E9
:1002F000B74165879381113263F40F021301000047
:10030000930100001302000037E1BC9A130101EFD2
:10031000E3F00FFE13010000930100001302000040
:1003200023200B0023222B0023243B0023264B00F9
:1003300017150000130505CF97150000938585D884
:10034000370610F01306C6F26306B5028326C50011
:100350002320D600832685002320D600832645004F
:100360002320D600832605002320D600130505018F
:100370006FF09FFD370510F0130505F223200500EF
:040380000000000079
:101000000000000001000000FFFFFFFFFFFFFF7F67
:10101000000000800100000000000000000000004F
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:040000058000000077
:00000001FF

View file

@ -0,0 +1,72 @@
:0200000480007A
:100000009710000093800000171100001301810178
:1000100083A1000013020000930210001303F0FFFD
:10002000B70300809383F3FF37040080930F000031
:1000300063C4410093EF1F0063C4510093EF2F008E
:1000400063C4610093EF4F0063C4710093EF8F00AE
:1000500063C4810093EF0F0123203100232241006C
:10006000232451002326610023287100232A8100C4
:10007000232CF10197100000938000F91711000064
:10008000130101FC03A300009303000013041000FC
:100090009304F0FF370500801305F5FFB7050080D6
:1000A000930F00006344730093EF1F0063448300C9
:1000B00093EF2F006344930093EF4F006344A3003A
:1000C00093EF8F006344B30093EF0F01232061008F
:1000D0002322710023248100232691002328A100DC
:1000E000232AB100232CF10197100000938000F225
:1000F00017110000130181F603A60000930600000B
:10010000130710009307F0FF370800801308F8FF6B
:10011000B7080080930F00006344D60093EF1F00E0
:100120006344E60093EF2F006344F60093EF4F0023
:100130006344060193EF8F006344160193EF0F01B0
:100140002320C1002322D1002324E1002326F10033
:1001500023280101232A1101232CF101971000000B
:10016000938000EB17110000130101F103A90000B7
:1001700093090000130A1000930AF0FF370B008068
:10018000130BFBFFB70B0080930F00006344390192
:1001900093EF1F006344490193EF2F00634459011B
:1001A00093EF4F006344690193EF8F00634479013B
:1001B00093EF0F0123202101232231012324410148
:1001C0002326510123286101232A7101232CF101E7
:1001D00097100000938000E417110000130181EBD9
:1001E00003AC0000930C0000130D1000930DF0FF02
:1001F000370E0080130EFEFFB70E0080930F000035
:1002000063449C0193EF1F006344AC0193EF2F0004
:100210006344BC0193EF4F006344CC0193EF8F0024
:100220006344DC0193EF0F0123208101232291011C
:100230002324A1012326B1012328C101232AD101AE
:10024000232CF101971D0000938D8DE69300000093
:10025000130110009301F0FF370200801302F2FF38
:10026000B7020080930F000063C4000093EF1F00EB
:100270006344010093EF2F0063C4010093EF4F002C
:100280006344020093EF8F0063C4020093EF0F01F9
:100290006344100093EF0F026344200093EF0F04B8
:1002A0006344300093EF0F086344400093EF0F1056
:1002B0006344500093EF0F2023A0FD01971A000024
:1002C000938A8AD5171B0000130BCBDE83AF0A007D
:1002D0001301F0FF9301F0FF37D2ED0F130292BA32
:1002E00063C40F0213010000930100001302000019
:1002F000B74165879381113263C40F021301000077
:10030000930100001302000037E1BC9A130101EFD2
:10031000E3C00FFE13010000930100001302000070
:1003200023200B0023222B0023243B0023264B00F9
:1003300017150000130505CF97150000938585D884
:10034000370610F01306C6F26306B5028326C50011
:100350002320D600832685002320D600832645004F
:100360002320D600832605002320D600130505018F
:100370006FF09FFD370510F0130505F223200500EF
:040380000000000079
:101000000000000001000000FFFFFFFFFFFFFF7F67
:1010100000000080FFFFFFFF000000000000000054
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:040000058000000077
:00000001FF

View file

@ -0,0 +1,72 @@
:0200000480007A
:100000009710000093800000171100001301810178
:1000100083A1000013020000930210001303F0FFFD
:10002000B70300809383F3FF37040080930F000031
:1000300063E4410093EF1F0063E4510093EF2F004E
:1000400063E4610093EF4F0063E4710093EF8F006E
:1000500063E4810093EF0F0123203100232241004C
:10006000232451002326610023287100232A8100C4
:10007000232CF10197100000938000F91711000064
:10008000130101FC03A300009303000013041000FC
:100090009304F0FF370500801305F5FFB7050080D6
:1000A000930F00006364730093EF1F006364830089
:1000B00093EF2F006364930093EF4F006364A300FA
:1000C00093EF8F006364B30093EF0F01232061006F
:1000D0002322710023248100232691002328A100DC
:1000E000232AB100232CF10197100000938000F225
:1000F00017110000130181F603A60000930600000B
:10010000130710009307F0FF370800801308F8FF6B
:10011000B7080080930F00006364D60093EF1F00C0
:100120006364E60093EF2F006364F60093EF4F00E3
:100130006364060193EF8F006364160193EF0F0170
:100140002320C1002322D1002324E1002326F10033
:1001500023280101232A1101232CF101971000000B
:10016000938000EB17110000130101F103A90000B7
:1001700093090000130A1000930AF0FF370B008068
:10018000130BFBFFB70B0080930F00006364390172
:1001900093EF1F006364490193EF2F0063645901DB
:1001A00093EF4F006364690193EF8F0063647901FB
:1001B00093EF0F0123202101232231012324410148
:1001C0002326510123286101232A7101232CF101E7
:1001D00097100000938000E417110000130181EBD9
:1001E00003AC0000930C0000130D1000930DF0FF02
:1001F000370E0080130EFEFFB70E0080930F000035
:1002000063649C0193EF1F006364AC0193EF2F00C4
:100210006364BC0193EF4F006364CC0193EF8F00E4
:100220006364DC0193EF0F012320810123229101FC
:100230002324A1012326B1012328C101232AD101AE
:10024000232CF101971D0000938D8DE69300000093
:10025000130110009301F0FF370200801302F2FF38
:10026000B7020080930F000063E4000093EF1F00CB
:100270006364010093EF2F0063E4010093EF4F00EC
:100280006364020093EF8F0063E4020093EF0F01B9
:100290006364100093EF0F026364200093EF0F0478
:1002A0006364300093EF0F086364400093EF0F1016
:1002B0006364500093EF0F2023A0FD01971A000004
:1002C000938A8AD5171B0000130BCBDE83AF0A007D
:1002D0001301F0FF9301F0FF37D2ED0F130292BA32
:1002E0006364F00313010000930100001302000097
:1002F000B7416587938111326364F00313010000F5
:10030000930100001302000037E1BC9A130101EFD2
:10031000E360F0FF130100009301000013020000EE
:1003200023200B0023222B0023243B0023264B00F9
:1003300017150000130505CF97150000938585D884
:10034000370610F01306C6F26306B5028326C50011
:100350002320D600832685002320D600832645004F
:100360002320D600832605002320D600130505018F
:100370006FF09FFD370510F0130505F223200500EF
:040380000000000079
:101000000000000001000000FFFFFFFFFFFFFF7F67
:10101000000000800100000000000000000000004F
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:040000058000000077
:00000001FF

View file

@ -0,0 +1,72 @@
:0200000480007A
:100000009710000093800000171100001301810178
:1000100083A1000013020000930210001303F0FFFD
:10002000B70300809383F3FF37040080930F000031
:100030006394410093EF1F006394510093EF2F00EE
:100040006394610093EF4F006394710093EF8F000E
:100050006394810093EF0F0123203100232241009C
:10006000232451002326610023287100232A8100C4
:10007000232CF10197100000938000F91711000064
:10008000130101FC03A300009303000013041000FC
:100090009304F0FF370500801305F5FFB7050080D6
:1000A000930F00006314730093EF1F006314830029
:1000B00093EF2F006314930093EF4F006314A3009A
:1000C00093EF8F006314B30093EF0F0123206100BF
:1000D0002322710023248100232691002328A100DC
:1000E000232AB100232CF10197100000938000F225
:1000F00017110000130181F603A60000930600000B
:10010000130710009307F0FF370800801308F8FF6B
:10011000B7080080930F00006314D60093EF1F0010
:100120006314E60093EF2F006314F60093EF4F0083
:100130006314060193EF8F006314160193EF0F0110
:100140002320C1002322D1002324E1002326F10033
:1001500023280101232A1101232CF101971000000B
:10016000938000EB17110000130101F103A90000B7
:1001700093090000130A1000930AF0FF370B008068
:10018000130BFBFFB70B0080930F000063143901C2
:1001900093EF1F006314490193EF2F00631459017B
:1001A00093EF4F006314690193EF8F00631479019B
:1001B00093EF0F0123202101232231012324410148
:1001C0002326510123286101232A7101232CF101E7
:1001D00097100000938000E417110000130181EBD9
:1001E00003AC0000930C0000130D1000930DF0FF02
:1001F000370E0080130EFEFFB70E0080930F000035
:1002000063149C0193EF1F006314AC0193EF2F0064
:100210006314BC0193EF4F006314CC0193EF8F0084
:100220006314DC0193EF0F0123208101232291014C
:100230002324A1012326B1012328C101232AD101AE
:10024000232CF101971D0000938D8DE69300000093
:10025000130110009301F0FF370200801302F2FF38
:10026000B7020080930F00006394000093EF1F001B
:100270006314010093EF2F006394010093EF4F008C
:100280006314020093EF8F006394020093EF0F0159
:100290006314100093EF0F026314200093EF0F0418
:1002A0006314300093EF0F086314400093EF0F10B6
:1002B0006314500093EF0F2023A0FD01971A000054
:1002C000938A8AD5171B0000130BCBDE83AF0A007D
:1002D0001301F0FF9301F0FF37D2ED0F130292BA32
:1002E00063940F0213010000930100001302000049
:1002F000B74165879381113263940F0213010000A7
:10030000930100001302000037E1BC9A130101EFD2
:10031000E3900FFE130100009301000013020000A0
:1003200023200B0023222B0023243B0023264B00F9
:1003300017150000130505CF97150000938585D884
:10034000370610F01306C6F26306B5028326C50011
:100350002320D600832685002320D600832645004F
:100360002320D600832605002320D600130505018F
:100370006FF09FFD370510F0130505F223200500EF
:040380000000000079
:101000000000000001000000FFFFFFFFFFFFFF7F67
:1010100000000080FFFFFFFF000000000000000054
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:040000058000000077
:00000001FF

View file

@ -0,0 +1,39 @@
:0200000480007A
:10000000971700009387070093001000130100006A
:10001000B701F17F9381F1FF370200809302F0FF77
:1000200073900234F3B00034F3900234733101342E
:1000300073910234F3B10134F39102347332023418
:1000400073920234F3B20234F312003423A0070097
:1000500023A2170023A4270023A6370023A84700C4
:1000600023AA570097120000938242FB93051000C9
:1000700013060000B706F17F9386F6FF370700806E
:100080009307F0FF73900734F3B5053473360634E5
:10009000F3B6063473370734F3B7073473380034D4
:1000A00023A0B20023A2C20023A4D20023A6E20010
:1000B00023A8F20023AA0201171D0000130D8DF7DB
:1000C000B75A3412938A8A67130AF0FF73100A34FE
:1000D00073BB0A34F33A0B34F31B0A3473BC0B348E
:1000E000F33C003423205D0123226D0123247D0194
:1000F00023268D0123289D01971000009380C0F4D2
:10010000377F7242130FFFE673100F3473300F34D2
:1001100023A0000023A2E00117110000130141F306
:10012000B79FFFF7938F8F8173900F347330003434
:1001300073300034F33F0034232001002322F10107
:1001400017110000130141F11302F0FFB752389666
:1001500093824227B7531632938383497310023434
:10016000F3B20234F3B30334733404342320510064
:10017000232271002324810017150000130585E850
:1001800097150000938505EE370610F01306C6F2AA
:100190006306B5028326C5002320D600832685008A
:1001A0002320D600832645002320D6008326050081
:1001B0002320D600130505016FF09FFD370510F0D1
:1001C000130505F2232005000000000000000000D8
:0401D000000000002B
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:040000058000000077
:00000001FF

View file

@ -0,0 +1,25 @@
:0200000480007A
:1000000097170000938707001304F0FF7310043460
:10001000F3F00034F31004347371003473110434BA
:10002000F3F10F34F311043473720834731204348F
:10003000F3F20734F312043423A0070023A21700BD
:1000400023A4270023A6370023A8470023AA57008C
:1000500023AC870097120000938282FC1304F0FF08
:1000600073100434F3F5003473760034F3F60F3470
:1000700073770834F3F707347378003423A0B200A1
:1000800023A2C20023A4D20023A6E20023A8F200E8
:1000900023AA020123AC820097100000938000FA8B
:1000A000375A1632130A8A4973100A3473F0073428
:1000B000731A0A3423A0000023A240011715000080
:1000C000130545F4971500009385C5F7370610F022
:1000D0001306C6F26306B5028326C5002320D600A8
:1000E000832685002320D600832645002320D600C2
:1000F000832605002320D600130505016FF09FFD20
:10010000370510F0130505F223200500000000005C
:0401100000000000EB
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:040000058000000077
:00000001FF

View file

@ -0,0 +1,38 @@
:0200000480007A
:10000000971700009387070093001000130100006A
:10001000B701F17F9381F1FF370200809302F0FF77
:1000200073100034F3A00034F31000347321013452
:1000300073110034F3A10134F3110034732202343C
:1000400073120034F3A20234F312003423A0070029
:1000500023A2170023A4270023A6370023A84700C4
:1000600023AA570097120000938242FB93051000C9
:1000700013060000B706F17F9386F6FF370700806E
:100080009307F0FF73100034F3A50534732606348C
:10009000F3A6063473270734F3A707347328003414
:1000A00023A0B20023A2C20023A4D20023A6E20010
:1000B00023A8F20023AA0201171D0000130D8DF7DB
:1000C000B75A3412938A8A677310003473AB0A34B8
:1000D000F32B0B34F31B003473AC0B34F32C0034D0
:1000E00023205D0123226D0123247D0123268D0120
:1000F00023289D0197100000938000F5377F7242FE
:10010000130FFFE673100F3473200F3423A0000089
:1001100023A2E00117110000130181F3B79FFFF73D
:10012000938F8F8173900F347320003473200034C9
:10013000F32F0034232001002322F10117110000C6
:10014000130181F1B753163293838349B75238961E
:100150009382422773100034F3A20234F3A30334D2
:1001600073240434232051002322710023248100AE
:1001700017150000130505E997150000938585EE16
:10018000370610F01306C6F26306B5028326C500D3
:100190002320D600832685002320D6008326450011
:1001A0002320D600832605002320D6001305050151
:1001B0006FF09FFD370510F0130505F223200500B1
:0401C000000000003B
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:040000058000000077
:00000001FF

View file

@ -0,0 +1,24 @@
:0200000480007A
:10000000971700009387070073100034F3E0003463
:10001000F31000347361003473110034F3E10F34D2
:10002000F31100347362083473120034F3E20734BE
:10003000F312003423A0070023A2170023A42700F3
:1000400023A6370023A8470023AA570097120000D1
:100050009382C2FC73100034F3E5003473660034FD
:10006000F3E60F3473670834F3E70734736800343A
:1000700023A0020023A2B20023A4C20023A6D20020
:1000800023A8E20023AAF20023AC0201971000008B
:10009000938080FA375A1632130A8A4973100A3449
:1000A00073E00734F31A0A3423A0000023A250019E
:1000B00023A44001171500001305C5F4971500008F
:1000C000938545F8370610F01306C6F26306B502AD
:1000D0008326C5002320D600832685002320D60052
:1000E000832645002320D600832605002320D60042
:1000F000130505016FF09FFD370510F0130505F29C
:0401000023200500B3
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:040000058000000077
:00000001FF

View file

@ -0,0 +1,30 @@
:0200000480007A
:1000000097170000938707009300100093010000EA
:100010009302F0FFB70D0080938DFDFFB70E0080B7
:10002000731000347391003473920134739302346B
:10003000739E0D34739F0E34F31F003423A02700EA
:1000400023A2470023A4670023A6C70123A8E70132
:1000500023AAF701171D0000130D4DFCB7503412F1
:100060009380806737E1BC9A130101EF73900034ED
:10007000F311013473920134F31202347313003418
:1000800023203D0023224D0023245D0023266D0004
:1000900097100000938080F9377172421301F1E6E6
:1000A000731001347310003423A0000017110000F6
:1000B000130101F8B79DFFF7938D8D8173900D3477
:1000C0007310003473100034F31200342320010045
:1000D0002322510017110000130101F6B753163205
:1000E000938383493763721413036383B75238963B
:1000F0009382422773100334F3920234F393033450
:100100007314003423205100232271002324810022
:1001100017150000130505EF97150000938585F26C
:10012000370610F01306C6F26306B5028326C50033
:100130002320D600832685002320D6008326450071
:100140002320D600832605002320D60013050501B1
:100150006FF09FFD370510F0130505F22320050011
:04016000000000009B
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:040000058000000077
:00000001FF

View file

@ -0,0 +1,16 @@
:0200000480007A
:1000000097170000938707007310003473D10034F2
:100010007352003473D30F3473DE0734735F0834C4
:10002000F35F003423A0070023A2270023A4470086
:1000300023A6670023A8C70123AAE70123ACF70181
:10004000971000009380C0FD73D0073473500034C4
:1000500023A00000171500001305C5FA971500002E
:10006000938545FC370610F01306C6F26306B50209
:100070008326C5002320D600832685002320D600B2
:10008000832645002320D600832605002320D600A2
:10009000130505016FF09FFD370510F0130505F2FC
:0400A0002320050014
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:040000058000000077
:00000001FF

View file

@ -0,0 +1,29 @@
:0200000480007A
:100000009710000093800000371111111301111196
:100010006F0080001301000023A020009710000053
:10002000938080FE37212222130121221702000033
:1000300013020201670002001301000023A0200048
:1000400097100000938080FC93025000130360001F
:10005000373133331301313363845200130100000D
:1000600023A0200097100000938080FA9302500094
:100070001303600037414444130141446394620018
:100080001301000023A0200097100000938080F847
:100090009302500013036000375155551301515519
:1000A00063C462001301000023A020009710000029
:1000B000938080F6930250001303600037616666F8
:1000C0001301616663E462001301000023A02000B5
:1000D00097100000938080F4930250001303600097
:1000E0003771777713017177635453001301000060
:1000F00023A0200097100000938080F2930250000C
:10010000130360003791888813018188637453005A
:100110001301000023A0200017150000130585EE31
:1001200097150000938505F0370610F01306C6F208
:100130006306B5028326C5002320D60083268500EA
:100140002320D600832645002320D60083260500E1
:100150002320D600130505016FF09FFD370510F031
:10016000130505F223200500000000000000000038
:04017000000000008B
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:040000058000000077
:00000001FF

View file

@ -0,0 +1,15 @@
:0200000480007A
:10000000970000009380C002F39F503097100000CB
:10001000938040FF3711111113011111730010006B
:1000200023A0000073905F306F008002732F1034A4
:10003000130F4F0073101F34732F203423A0E001DF
:1000400023A2200023A400009380C000730020306E
:1000500017150000130505FB97150000938585FB18
:10006000370610F01306C6F26306B5028326C500F4
:100070002320D600832685002320D6008326450032
:100080002320D600832605002320D6001305050172
:100090006FF09FFD370510F0130505F223200500D2
:0400A000000000005C
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:040000058000000077
:00000001FF

View file

@ -0,0 +1,15 @@
:0200000480007A
:10000000970000009380C002F39F503097100000CB
:10001000938040FF3711111113011111730000007B
:1000200023A0000073905F306F008002732F1034A4
:10003000130F4F0073101F34732F203423A0E001DF
:1000400023A2200023A400009380C000730020306E
:1000500017150000130505FB97150000938585FB18
:10006000370610F01306C6F26306B5028326C500F4
:100070002320D600832685002320D6008326450032
:100080002320D600832605002320D6001305050172
:100090006FF09FFD370510F0130505F223200500D2
:0400A000000000005C
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:040000058000000077
:00000001FF

View file

@ -0,0 +1,17 @@
:0200000480007A
:10000000171800001308480097180000938888000C
:100010008320080003510800835128000342F8FFA1
:100020008342080003431800834328000344380038
:1000300023A0180023A2280023A4380023A64800E8
:1000400023A8580023AA680023AC780023AE8800B8
:1000500017150000130505FC97150000938585FD15
:10006000370610F01306C6F26306B5028326C500F4
:100070002320D600832685002320D6008326450032
:100080002320D600832605002320D6001305050172
:100090006FF09FFD370510F0130505F223200500D2
:0400A000000000005C
:10100000EFCDAB8967452301000000000000000020
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:040000058000000077
:00000001FF

View file

@ -0,0 +1,16 @@
:0200000480007A
:10000000171800001308480097180000938888000C
:10001000930100008320080003214800171A000004
:10002000130A4AFE970A0000938A4A0183270A00AE
:1000300023A0FA000F1000003701000023A01800D1
:1000400023A2280023A4380023A6F80017150000D7
:10005000130545FC971500009385C5FC370610F085
:100060001306C6F26306B5028326C5002320D60018
:10007000832685002320D600832645002320D60032
:10008000832605002320D600130505016FF09FFD90
:10009000370510F0130505F22320050000000000CD
:0400A000000000005C
:10100000B3011100300000001200000000000000D9
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:040000058000000077
:00000001FF

View file

@ -0,0 +1,65 @@
:0200000480007A
:100000009710000093800000171100001301810277
:1000100083A1000013020000930210001303F0FFFD
:10002000B70300809383F3FF3704008033824100DD
:10003000B382510033836100B38371003384810044
:100040002320310023224100232451002326610074
:1000500023287100232A8100971000009380C0FAA2
:1000600017110000130181FE03A400009304000097
:10007000130510009305F0FF370600801306F6FF06
:10008000B7060080B30494003305A400B305B400A0
:100090003306C400B306D40023208100232291003C
:1000A0002324A1002326B1002328C100232AD10044
:1000B00097100000938080F517110000130181FA5A
:1000C00083A6000013070000930710001308F0FF39
:1000D000B70800809388F8FF370900803387E6006F
:1000E000B387F60033880601B388160133892601E9
:1000F0002320D1002322E1002324F1002326010143
:1001000023281101232A210197100000938040F039
:1001100017110000130181F603A9000093090000E4
:10012000130A1000930AF0FF370B0080130BFBFF3C
:10013000B70B0080B3093901330A4901B30A5901E9
:10014000330B6901B30B79012320210123223101F3
:10015000232441012326510123286101232A71010F
:1001600097100000938000EB17110000130181F23B
:1001700083AB0000130C0000930C1000130DF0FF74
:10018000B70D0080938DFDFF370E0080338C8B01FF
:10019000B38C9B01338DAB01B38DBB01338ECB018F
:1001A0002320710123228101232491012326A1010F
:1001B0002328B101232AC101971C0000938CCCE5B0
:1001C000171D0000130D8DEE03AE0C00930D1000F3
:1001D000B30EBE01338FBE01B30FBF01B380BF01A9
:1001E0003381B001B301B1012320BD012322CD0130
:1001F0002324DD012326ED012328FD01232A1D00F0
:10020000232C2D00232E3D0097100000938000E149
:1002100017110000130181EB03AE0000B79DFFF73B
:10022000938D8D813300BE012320010097100000C3
:10023000938000DF17110000130181E903AE000075
:10024000B79DFFF7938D8D813300BE01B30200008F
:10025000232001002322510097100000938080DCAE
:1002600017110000130141E783A100003382010050
:10027000B30202003303500033070300B307070043
:1002800033880700B30C0001330D9001B30D0D004E
:10029000232041002322A1012324B10117150000CE
:1002A000130545D9971500009385C5E3370610F06F
:1002B0001306C6F26306B5028326C5002320D600C6
:1002C000832685002320D600832645002320D600E0
:1002D000832605002320D600130505016FF09FFD3E
:1002E000370510F0130505F223200500000000007B
:0402F000000000000A
:101000000000000001000000FFFFFFFFFFFFFF7F67
:1010100000000080CDAB00007856341298BADCFE98
:10102000145892360000000000000000000000008C
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:1010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
:1010D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
:040000058000000077
:00000001FF

View file

@ -0,0 +1,46 @@
:0200000480007A
:10000000971000009380000137513412130181676B
:100010006F0080001301000023A0000023A2200035
:1000200097100000938080FF1301F0FF9301F0FF11
:1000300037D2ED0F130292BA6F0080021301000055
:100040009301000013020000B741658793811132CC
:100050006F008002130100009301000013020000F2
:1000600037E1BC9A130101EF6FF01FFE130100008E
:10007000930100001302000023A0000023A220002F
:1000800023A4300023A6400097140000938484F733
:1000900017150000130585F91301F0FF9301F0FF18
:1000A0001302F0FF9302F0FF3753555513035355D6
:1000B00083AC040003AC4400EF00C001B72122224E
:1000C00093812122EF0F0003B742444493824244BC
:1000D0006F004004371111111301111167800000E6
:1000E00013010000930100001302000093020000BE
:1000F00013030000373233331302323367800F00AB
:10010000130100009301000013020000930200009D
:1001100013030000B3C3900133C48F0123202500D3
:10012000232235002324450023265500232865007B
:10013000232A7500232C850097140000938404ED76
:1001400017150000130545F01301F0FF9301F0FFB0
:100150001302F0FF9302F0FF1303F0FF03AC04005F
:1001600083AC44006F004002B77177779381717759
:1001700067800F00130100009301000013020000CC
:100180009302000013030000376166661301616685
:10019000EFFF9FFD3792888813028288EF000001ED
:1001A00037B3AAAA1303A3AA6F004002B7A2999972
:1001B0009382929967800000130100009301000070
:1001C000130200009302000013030000B3C38F0169
:1001D00033C4900123202500232235002324450029
:1001E0002326550023286500232A7500232C85002B
:1001F00017150000130505E297150000938585E6A5
:10020000370610F01306C6F26306B5028326C50052
:100210002320D600832685002320D6008326450090
:100220002320D600832605002320D60013050501D0
:100230006FF09FFD370510F0130505F22320050030
:0402400000000000BA
:10100000BC000080C800008094010080A001008026
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:040000058000000077
:00000001FF

View file

@ -0,0 +1,60 @@
:0200000480007A
:10000000971000009380000137513412130181676B
:100010009701000093810101678001001301000036
:1000200023A0000023A2200097100000938000FF6F
:100030001301F0FF9301F0FF37D2ED0F130292BAD4
:10004000970F0000938F8F0367800F00130100004C
:100050009301000013020000B741658793811132BC
:100060009702000093828203678002001301000060
:10007000930100001302000037E1BC9A130101EF65
:1000800097070000938787FD678007001301000032
:10009000930100001302000023A0000023A220000F
:1000A00023A4300023A6400097140000938484F515
:1000B00017150000130585F71301F0FF9301F0FFFA
:1000C0001302F0FF9302F0FF3753555513035355B6
:1000D00083AC040003AC4400970300009383430304
:1000E000E7800300B7212222938121221704000018
:1000F00013040404E70F0400B742444493824244CB
:10010000170F0000130FCF0467000F0037111111F4
:10011000130111116780000013010000930100001A
:100120001302000093020000130300003732333340
:100130001302323367800F001301000093010000A7
:10014000130200009302000013030000B3C39001E8
:1001500033C48F01232025002322350023244500AA
:100160002326550023286500232A7500232C8500AB
:1001700097140000938484E9171500001305C5EC5B
:100180001301F0FF9301F0FF1302F0FF9302F0FF61
:100190001303F0FF03AC040083AC44009707000096
:1001A0009387C70267800700B7717777938171776C
:1001B00067801F001301000093010000130200007C
:1001C0009302000013030000376166661301616645
:1001D000970F0000938F9FFDE78F0F00379288885D
:1001E000130282889700000093801002E7800000CD
:1001F00037B3AAAA1303A3AA170F0000130FCF0245
:1002000067000F00B7A299999382929967801000B6
:10021000130100009301000013020000930200008C
:1002200013030000B3C38F0133C4900123202500C2
:10023000232235002324450023265500232865006A
:10024000232A7500232C850097100000938080E1FD
:100250003712111113021211970100009381F1005E
:100260006780110013020000B7222222938222220B
:1002700097010000938111016780F1FF9302000054
:1002800037333333130333339701000093811181E4
:100290006780F17F13030000B743444493834344D2
:1002A0009711000093810181678001809303000012
:1002B00023A0400023A2500023A4600023A67000C6
:1002C00017150000130505D597150000938585DAED
:1002D000370610F01306C6F26306B5028326C50082
:1002E0002320D600832685002320D60083264500C0
:1002F0002320D600832605002320D6001305050100
:100300006FF09FFD370510F0130505F2232005005F
:0403100000000000E9
:10100000E4000080F8000080DC010080F001008036
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:040000058000000077
:00000001FF

View file

@ -0,0 +1,51 @@
:0200000480007A
:10000000971F0000938F0F00171100001301810349
:1000100083810F0003821F0083822F0003833F0030
:100020002320310023224100232451002326610094
:10003000171C0000130C5CFD9712000093828201D4
:10004000830CFCFF030D0C00830D1C00030E2C0021
:1000500023A0920123A2A20123A4B20123A6C201DC
:1000600097130000938373FA17140000130484FF9E
:10007000038F1300838F23008380330003814300A9
:100080002320E4012322F401232414002326240046
:10009000171500001305C57797150000938585FD9A
:1000A00003060580830615800307258083073580B6
:1000B00023A0C50023A2D50023A4E50023A6F500B4
:1000C000970600009386467517170000130787FBF5
:1000D0008387C67F0388D67F8388E67F0389F67F80
:1000E0002320F700232207012324170123262701B9
:1000F00017180000130888F297180000938888F9F1
:100100000309C8FF8309D8FF030AE8FF830AF8FF41
:10011000030B0800830B1800030C2800830C380025
:10012000030D4800830D5800030E6800830E78000D
:1001300023A0280123A2380123A4480123A65801A3
:1001400023A8680123AA780123AC880123AE980173
:1001500023A0A80323A2B80323A4C80323A6D8037B
:10016000971A0000938A0AEC171B0000130B8BF5FB
:1001700003800A0023200B00971A0000938ACAEA22
:10018000171B0000130B4BF483AB0A00038C0B000E
:10019000930C0C0023209B01971C0000938C4CE9CE
:1001A000171D0000130D8DF2838C0C0023209D0180
:1001B000971D0000938D1DE8171E0000130E4EF1D1
:1001C000838DFDFF2320BE0117150000130585E771
:1001D00097150000938505F0370610F01306C6F258
:1001E0006306B5028326C5002320D600832685003A
:1001F0002320D600832645002320D6008326050031
:100200002320D600130505016FF09FFD370510F080
:10021000130505F223200500000000000000000087
:0402200000000000DA
:1010000022F2F111F44433F366F6F555F88877F7D8
:10101000AA0A09990CCCBB0BEE0E0DDDF000FF0FF8
:101020007856341228100080F0DEBC9A10325476C4
:1010300098BADCFE00000000000000000000000084
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:1010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
:040000058000000077
:00000001FF

View file

@ -0,0 +1,51 @@
:0200000480007A
:10000000971F0000938F0F00171100001301810349
:1000100083C10F0003C21F0083C22F0003C33F0030
:100020002320310023224100232451002326610094
:10003000171C0000130C5CFD9712000093828201D4
:10004000834CFCFF034D0C00834D1C00034E2C0021
:1000500023A0920123A2A20123A4B20123A6C201DC
:1000600097130000938373FA17140000130484FF9E
:1000700003CF130083CF230083C0330003C14300A9
:100080002320E4012322F401232414002326240046
:10009000171500001305C57797150000938585FD9A
:1000A00003460580834615800347258083473580B6
:1000B00023A0C50023A2D50023A4E50023A6F500B4
:1000C000970600009386467517170000130787FBF5
:1000D00083C7C67F03C8D67F83C8E67F03C9F67F80
:1000E0002320F700232207012324170123262701B9
:1000F00017180000130888F297180000938888F9F1
:100100000349C8FF8349D8FF034AE8FF834AF8FF41
:10011000034B0800834B1800034C2800834C380025
:10012000034D4800834D5800034E6800834E78000D
:1001300023A0280123A2380123A4480123A65801A3
:1001400023A8680123AA780123AC880123AE980173
:1001500023A0A80323A2B80323A4C80323A6D8037B
:10016000971A0000938A0AEC171B0000130B8BF5FB
:1001700003C00A0023200B00971A0000938ACAEAE2
:10018000171B0000130B4BF483AB0A0003CC0B00CE
:10019000930C0C0023209B01971C0000938C4CE9CE
:1001A000171D0000130D8DF283CC0C0023209D0140
:1001B000971D0000938D1DE8171E0000130E4EF1D1
:1001C00083CDFDFF2320BE0117150000130585E731
:1001D00097150000938505F0370610F01306C6F258
:1001E0006306B5028326C5002320D600832685003A
:1001F0002320D600832645002320D6008326050031
:100200002320D600130505016FF09FFD370510F080
:10021000130505F223200500000000000000000087
:0402200000000000DA
:1010000022F2F111F44433F366F6F555F88877F7D8
:10101000AA0A09990CCCBB0BEE0E0DDDF000FF0FF8
:101020007856341228100080F0DEBC9A10325476C4
:1010300098BADCFE00000000000000000000000084
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:1010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
:040000058000000077
:00000001FF

View file

@ -0,0 +1,39 @@
:0200000480007A
:10000000971F0000938F0F00171100001301810349
:1000100083910F0003922F002320310023224100FF
:10002000171C0000130C5CFE971200009382020262
:10003000831CFCFF031D1C0023A0920123A2A2012C
:1000400097130000938373FC1714000013048400BB
:10005000039F1300839F33002320E4012322F40134
:10006000171500001305C57A97150000938505FF45
:10007000031605808316258023A0C50023A2D50082
:10008000970600009386367917170000130787FD3F
:100090008397D67F0398F67F2320F700232207015A
:1000A00017180000130888F797180000938808FCB9
:1000B0000319C8FF8319E8FF031A0800831A2800F0
:1000C000031B4800831B680023A0280123A23801DA
:1000D00023A4480123A6580123A8680123AA780174
:1000E000971A0000938A0AF4171B0000130B8BF970
:1000F00003900A0023200B00971A0000938ACAF28B
:10010000171B0000130B4BF883AB0A00039C0B007A
:10011000930C0C0023209B01971C0000938C4CF146
:10012000171D0000130D8DF6839C0C0023209D01EC
:10013000971D0000938D1DF0171E0000130E4EF545
:10014000839DFDFF2320BE0117150000130585EFD9
:1001500097150000938505F4370610F01306C6F2D4
:100160006306B5028326C5002320D60083268500BA
:100170002320D600832645002320D60083260500B1
:100180002320D600130505016FF09FFD370510F001
:10019000130505F223200500000000000000000008
:0401A000000000005B
:1010000022F2F111F44433F366F6F555F88877F7D8
:10101000AA0A09990CCCBB0BEE0E0DDDF000FF0FF8
:101020007856341228100080F0DEBC9A10325476C4
:1010300098BADCFE00000000000000000000000084
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:040000058000000077
:00000001FF

View file

@ -0,0 +1,39 @@
:0200000480007A
:10000000971F0000938F0F00171100001301810349
:1000100083D10F0003D22F0023203100232241007F
:10002000171C0000130C5CFE971200009382020262
:10003000835CFCFF035D1C0023A0920123A2A201AC
:1000400097130000938373FC1714000013048400BB
:1000500003DF130083DF33002320E4012322F401B4
:10006000171500001305C57A97150000938505FF45
:10007000035605808356258023A0C50023A2D50002
:10008000970600009386367917170000130787FD3F
:1000900083D7D67F03D8F67F2320F70023220701DA
:1000A00017180000130888F797180000938808FCB9
:1000B0000359C8FF8359E8FF035A0800835A2800F0
:1000C000035B4800835B680023A0280123A238015A
:1000D00023A4480123A6580123A8680123AA780174
:1000E000971A0000938A0AF4171B0000130B8BF970
:1000F00003D00A0023200B00971A0000938ACAF24B
:10010000171B0000130B4BF883AB0A0003DC0B003A
:10011000930C0C0023209B01971C0000938C4CF146
:10012000171D0000130D8DF683DC0C0023209D01AC
:10013000971D0000938D1DF0171E0000130E4EF545
:1001400083DDFDFF2320BE0117150000130585EF99
:1001500097150000938505F4370610F01306C6F2D4
:100160006306B5028326C5002320D60083268500BA
:100170002320D600832645002320D60083260500B1
:100180002320D600130505016FF09FFD370510F001
:10019000130505F223200500000000000000000008
:0401A000000000005B
:1010000022F2F111F44433F366F6F555F88877F7D8
:10101000AA0A09990CCCBB0BEE0E0DDDF000FF0FF8
:101020007856341228100080F0DEBC9A10325476C4
:1010300098BADCFE00000000000000000000000084
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:040000058000000077
:00000001FF

View file

@ -0,0 +1,27 @@
:0200000480007A
:100000009717000093870701B7000000B7110000A1
:10001000B7F2FFFFB7FEFF7FB70F008023A01700E6
:1000200023A2370023A4570023A6D70123A8F70152
:1000300097170000938707FD171800001308C8FEE4
:1000400003A1070003A2070003A3070003AE0700F4
:1000500003AF07003701008037F2FF7F370300004E
:10006000371E000037FFFFFF23202800232248000F
:10007000232468002326C8012328E80197180000DC
:100080009388C8FBB77072429380F0E6B75734127A
:100090009387876737EFBC9A130F0FEF3771724260
:1000A0001301F1E63758341213088867B7EFBC9A8A
:1000B000938F0FEF23A0180023A2F80023A4E801D8
:1000C00023A6280023A8080123AAF8011715000079
:1000D000130545F4971500009385C5F7370610F012
:1000E0001306C6F26306B5028326C5002320D60098
:1000F000832685002320D600832645002320D600B2
:10010000832605002320D600130505016FF09FFD0F
:10011000370510F0130505F223200500000000004C
:0401200000000000DB
:10100000111111110000000000000000000000009C
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:040000058000000077
:00000001FF

View file

@ -0,0 +1,33 @@
:0200000480007A
:10000000971F0000938F0F00171100001301810349
:1000100083A10F0023203100171C0000130CDCFE0D
:100020009712000093824202832CFCFF23A09201CE
:1000300097130000938373FD171400001304040149
:1000400083AF13002320F401171500001305457C2E
:10005000971500009385C5FF0326058023A0C500E2
:10006000970600009386167B17170000130787FE7C
:1000700083A7F67F2320F70017180000130808FA5B
:1000800097180000938848FD0329C8FF83290800BA
:10009000032A480023A0280123A2380123A44801F1
:1000A000971A0000938A0AF8171B0000130B8BFBAA
:1000B00003A00A0023200B00971A0000938ACAF6B7
:1000C000171B0000130B4BFA83AB0A0003AC0B00A9
:1000D000930C0C0023209B01971C0000938C4CF583
:1000E000171D0000130D8DF883AC0C0023209D011B
:1000F000971D0000938D1DF4171E0000130E4EF780
:1001000083ADFDFF2320BE0117150000130585F305
:1001100097150000938505F6370610F01306C6F212
:100120006306B5028326C5002320D60083268500FA
:100130002320D600832645002320D60083260500F1
:100140002320D600130505016FF09FFD370510F041
:10015000130505F223200500000000000000000048
:04016000000000009B
:1010000022F2F111F44433F366F6F555F88877F7D8
:10101000AA0A09990CCCBB0BEE0E0DDDF000FF0FF8
:101020007856341228100080F0DEBC9A10325476C4
:1010300098BADCFE00000000000000000000000084
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:040000058000000077
:00000001FF

View file

@ -0,0 +1,53 @@
:0200000480007A
:100000009700000093808020F39F5030737012306F
:1000100097100000938000FF371111111301111187
:100020006F00A0001301000097100000938040FEB5
:10003000372122221301212217020000130212018C
:10004000670002001301000023A0200093804000FD
:100050003731333313013133170200001302020129
:10006000670012001301000023A0200093804000CD
:100070003741444413014144170200001302420176
:100080006700D2FF1301000023A0200093804000EE
:1000900097100000938080F8375155551301515542
:1000A0001702000013022201670002001301000082
:1000B00037616666130161661702000013023201A0
:1000C0006700020013010000377177771301717721
:1000D0001702000013020201670022001301000052
:1000E00037918888130181881702000013020201EA
:1000F000670032001301000097100000938000F5A4
:1001000093025000130360006387620037A199993E
:100110001301919913000000130000006385520041
:100120001301000097100000938000F39302500029
:10013000130360006397520037B1AAAA1301A1AA62
:10014000130000001300000063956200130100001B
:1001500097100000938000F1930250001303600099
:100160006347530037C1BBBB1301B1BB1300000091
:100170001300000063C56200130100009710000027
:10018000938000EF930250001303600063675300F5
:1001900037D1CCCC1301C1CC1300000013000000F8
:1001A00063E562001301000097100000938000EDEA
:1001B000930250001303600063D7620037E1DDDD76
:1001C0001301D1DD1300000013000000635553003C
:1001D0001301000097100000938000EB9302500081
:1001E0001303600063F7620037F1EEEE1301E1EEF6
:1001F000130000001300000063755300130100009A
:1002000073905F306F000003732F3034130FEFFFD4
:1002100073101F34732F3034137F3F0023A0E0018D
:10022000732F203423A2E00123A420009380C00078
:1002300073002030171500001305C5DC971500006A
:10024000938545E5370610F01306C6F26306B5023E
:100250008326C5002320D600832685002320D600D0
:10026000832645002320D600832605002320D600C0
:10027000130505016FF09FFD370510F0130505F21A
:040280002320050032
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:040000058000000077
:00000001FF

View file

@ -0,0 +1,44 @@
:0200000480007A
:100000009700000093804014F39F50309711000038
:10001000938141FF171100001301C1FF97100000E9
:1000200093804000930250001303600003A201007C
:100030002320410003A211002322410003A221003A
:100040002324410003A23100232641009711000020
:10005000938181FB17110000130141FE97100000EE
:100060009380C0FF930250001303600003920100CD
:10007000232041000392110023224100039221001A
:1000800023244100039231002326410003D20100C2
:100090002328410003D21100232A410003D221006A
:1000A000232C410003D23100232E41001711000000
:1000B0001301C1FC97100000938040FD1303000062
:1000C000B7A299999382929923205100232251003B
:1000D00023245100232651002320610013014100F5
:1000E000A32061001301410023216100130141009D
:1000F000A3216100171100001301C1FA971000003D
:10010000938040FB13030000B7A2999993829299C0
:100110002320510023225100232451002326510083
:100120002310610013014100A3106100130141007D
:100130002311610013014100A311610073905F302E
:100140006F00C002732F1034130F4F0073101F3451
:10015000732F3034137F3F0023A0E001732F20342E
:1001600023A2E00193808000730020301715000067
:10017000130545EA971500009385C5F4370610F07E
:100180001306C6F26306B5028326C5002320D600F7
:10019000832685002320D600832645002320D60011
:1001A000832605002320D600130505016FF09FFD6F
:1001B000370510F0130505F22320050000000000AC
:0401C000000000003B
:10100000C1B1A19102F2E2D2000000000000000094
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:040000058000000077
:00000001FF

Some files were not shown because too many files have changed in this diff Show more