diff options
author | Bad Diode <bd@badd10de.dev> | 2022-10-20 14:31:37 +0200 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2022-10-20 14:31:37 +0200 |
commit | bc14ac83a5ad898aafd312e4d5f8fe8f43c60b0f (patch) | |
tree | d2f01bb2cd1ce28e2908fada710e3be4971d1e94 | |
parent | 42dcdb3a98a957974225b5f699c02891db176c55 (diff) | |
download | uxn64-bc14ac83a5ad898aafd312e4d5f8fe8f43c60b0f.tar.gz uxn64-bc14ac83a5ad898aafd312e4d5f8fe8f43c60b0f.zip |
Replace makemask with custom C code
-rw-r--r-- | Makefile | 23 | ||||
-rw-r--r-- | tools/makerom/Makefile | 62 | ||||
-rw-r--r-- | tools/makerom/src/bootdata.c | 506 | ||||
-rw-r--r-- | tools/makerom/src/main.c | 188 | ||||
-rw-r--r-- | tools/makerom/src/types.h | 30 |
5 files changed, 800 insertions, 9 deletions
@@ -32,10 +32,12 @@ INC_FLAGS := $(addprefix -I,$(INC_DIRS)) | |||
32 | # Output names and executables. | 32 | # Output names and executables. |
33 | TARGET := uxn64 | 33 | TARGET := uxn64 |
34 | ELF := $(BUILD_DIR)/$(TARGET).elf | 34 | ELF := $(BUILD_DIR)/$(TARGET).elf |
35 | BIN := $(BUILD_DIR)/$(TARGET).n64 | 35 | BIN := $(BUILD_DIR)/$(TARGET).bin |
36 | ROM := $(BUILD_DIR)/$(TARGET).n64 | ||
36 | 37 | ||
37 | # Target tools. | 38 | # Target tools. |
38 | TOOLS_BIN2CARR := tools/bin2carr/build/bin2carr | 39 | TOOLS_BIN2CARR := tools/bin2carr/build/bin2carr |
40 | TOOLS_MAKEROM := tools/makerom/build/makerom | ||
39 | 41 | ||
40 | # Main compilation tool paths. | 42 | # Main compilation tool paths. |
41 | CC := $(SDK_BIN)/mips32-elf-gcc | 43 | CC := $(SDK_BIN)/mips32-elf-gcc |
@@ -43,8 +45,6 @@ LD := $(SDK_BIN)/mips32-elf-ld | |||
43 | AS := $(SDK_BIN)/mips32-elf-as | 45 | AS := $(SDK_BIN)/mips32-elf-as |
44 | OBJDUMP := $(SDK_BIN)/mips32-elf-objdump | 46 | OBJDUMP := $(SDK_BIN)/mips32-elf-objdump |
45 | OBJCOPY := $(SDK_BIN)/mips32-elf-objcopy | 47 | OBJCOPY := $(SDK_BIN)/mips32-elf-objcopy |
46 | # TODO: Replace with internal tools to avoid dependencies. | ||
47 | MAKEMASK := $(SDK_BIN)/makemask | ||
48 | 48 | ||
49 | # Compiler and linker configuration. | 49 | # Compiler and linker configuration. |
50 | CFLAGS := -Wall -Wextra -pedantic | 50 | CFLAGS := -Wall -Wextra -pedantic |
@@ -65,16 +65,18 @@ else | |||
65 | CFLAGS += $(RELEASE_CFLAGS) | 65 | CFLAGS += $(RELEASE_CFLAGS) |
66 | endif | 66 | endif |
67 | 67 | ||
68 | main: $(BIN) | 68 | main: $(ROM) |
69 | 69 | ||
70 | # Compile the elf file. | 70 | # Compile the elf file. |
71 | $(ELF): $(SRC_MAIN) $(UXN_ROM_C) $(WATCH_SRC) | $(BUILD_DIR) | 71 | $(ELF): $(SRC_MAIN) $(UXN_ROM_C) $(WATCH_SRC) | $(BUILD_DIR) |
72 | $(CC) $(CFLAGS) $(LDFLAGS) -o $(ELF) -T $(SRC_LN) $(SRC_MAIN) $(LDLIBS) | 72 | $(CC) $(CFLAGS) $(LDFLAGS) -o $(ELF) -T $(SRC_LN) $(SRC_MAIN) $(LDLIBS) |
73 | 73 | ||
74 | # Create the valid .n64 rom from the elf file. | 74 | # Create the valid .n64 rom from the elf file. |
75 | $(BIN): $(ELF) $(OBJECTS) $(WATCH_SRC) | $(BUILD_DIR) | 75 | $(BIN): $(ELF) $(WATCH_SRC) | $(BUILD_DIR) |
76 | $(OBJCOPY) -O binary $< $@ | 76 | $(OBJCOPY) -O binary $(ELF) $(BIN) |
77 | $(MAKEMASK) $(BIN) | 77 | |
78 | $(ROM): $(BIN) $(TOOLS_MAKEROM) $(WATCH_SRC) | $(BUILD_DIR) | ||
79 | $(TOOLS_MAKEROM) $(BIN) -o $(ROM) | ||
78 | 80 | ||
79 | # Build the uxn rom's C file. | 81 | # Build the uxn rom's C file. |
80 | $(UXN_ROM_C): $(TOOLS_BIN2CARR) | $(BUILD_DIR) | 82 | $(UXN_ROM_C): $(TOOLS_BIN2CARR) | $(BUILD_DIR) |
@@ -84,9 +86,12 @@ $(UXN_ROM_C): $(TOOLS_BIN2CARR) | $(BUILD_DIR) | |||
84 | $(TOOLS_BIN2CARR): | 86 | $(TOOLS_BIN2CARR): |
85 | make -C tools/bin2carr | 87 | make -C tools/bin2carr |
86 | 88 | ||
89 | $(TOOLS_MAKEROM): | ||
90 | make -C tools/makerom | ||
91 | |||
87 | # Test the output .n64 in an emulator. | 92 | # Test the output .n64 in an emulator. |
88 | run: $(BIN) | 93 | run: $(ROM) |
89 | $(EMULATOR) $(BIN) | 94 | $(EMULATOR) $(ROM) |
90 | 95 | ||
91 | # Remove build directory. | 96 | # Remove build directory. |
92 | clean: | 97 | clean: |
diff --git a/tools/makerom/Makefile b/tools/makerom/Makefile new file mode 100644 index 0000000..2f520aa --- /dev/null +++ b/tools/makerom/Makefile | |||
@@ -0,0 +1,62 @@ | |||
1 | .POSIX: | ||
2 | .SUFFIXES: | ||
3 | .PHONY: main run clean | ||
4 | |||
5 | # Source code location and files to watch for changes. | ||
6 | SRC_DIR := src | ||
7 | BUILD_DIR := build | ||
8 | SRC_MAIN := $(SRC_DIR)/main.c | ||
9 | SRC_OBJ := | ||
10 | OBJECTS := $(patsubst $(SRC_DIR)/%.c, $(BUILD_DIR)/%.o, $(SRC_OBJ)) | ||
11 | WATCH_SRC := $(shell find $(SRC_DIR) -name "*.c" -or -name "*.s" -or -name "*.h") | ||
12 | INC_DIRS := $(shell find $(SRC_DIR) -type d) | ||
13 | INC_FLAGS := $(addprefix -I,$(INC_DIRS)) | ||
14 | |||
15 | # Output names and executables. | ||
16 | TARGET := makerom | ||
17 | BIN := $(BUILD_DIR)/$(TARGET) | ||
18 | |||
19 | # Main compilation tool paths. | ||
20 | CC := gcc | ||
21 | LD := ld | ||
22 | AS := as | ||
23 | OBJDUMP := objdump | ||
24 | |||
25 | # Compiler and linker configuration. | ||
26 | CFLAGS := -Wall -Wextra -pedantic | ||
27 | CFLAGS += -DBIN_NAME=\"$(TARGET)\" | ||
28 | CFLAGS += $(INC_FLAGS) | ||
29 | LDFLAGS := | ||
30 | LDLIBS := | ||
31 | RELEASE_CFLAGS := -O2 -DNDEBUG | ||
32 | DEBUG_CFLAGS := -O0 -DDEBUG -g | ||
33 | |||
34 | # Setup debug/release builds. | ||
35 | DEBUG ?= 0 | ||
36 | ifeq ($(DEBUG), 1) | ||
37 | CFLAGS += $(DEBUG_CFLAGS) | ||
38 | else | ||
39 | CFLAGS += $(RELEASE_CFLAGS) | ||
40 | endif | ||
41 | |||
42 | main: $(BIN) | ||
43 | |||
44 | # Compile and link everything in one go. | ||
45 | $(BIN): $(SRC_MAIN) $(OBJECTS) $(WATCH_SRC) | $(BUILD_DIR) | ||
46 | $(CC) $(CFLAGS) $(LDFLAGS) -o $(BIN) $(SRC_MAIN) $(OBJECTS) $(LDLIBS) | ||
47 | |||
48 | # Run the program | ||
49 | run: $(BIN) | ||
50 | ./$(BIN) | ||
51 | |||
52 | # Remove build directory. | ||
53 | clean: | ||
54 | rm -rf $(BUILD_DIR) | ||
55 | |||
56 | # Create the build directory. | ||
57 | $(BUILD_DIR): | ||
58 | mkdir -p $(BUILD_DIR) | ||
59 | |||
60 | # Inference rules for C files. | ||
61 | $(BUILD_DIR)/%.o: $(SRC_DIR)/%.c | $(BUILD_DIR) | ||
62 | $(CC) $(CFLAGS) $< -o $@ | ||
diff --git a/tools/makerom/src/bootdata.c b/tools/makerom/src/bootdata.c new file mode 100644 index 0000000..c6f99af --- /dev/null +++ b/tools/makerom/src/bootdata.c | |||
@@ -0,0 +1,506 @@ | |||
1 | const u8 bootdata[] = { | ||
2 | 0x40, 0x80, 0x68, 0x00, 0x40, 0x80, 0x48, 0x00, | ||
3 | 0x40, 0x80, 0x58, 0x00, 0x3c, 0x08, 0xa4, 0x70, | ||
4 | 0x25, 0x08, 0x00, 0x00, 0x8d, 0x09, 0x00, 0x0c, | ||
5 | 0x15, 0x20, 0x00, 0xed, 0x00, 0x00, 0x00, 0x00, | ||
6 | 0x27, 0xbd, 0xff, 0xe8, 0xaf, 0xb3, 0x00, 0x00, | ||
7 | 0xaf, 0xb4, 0x00, 0x04, 0xaf, 0xb5, 0x00, 0x08, | ||
8 | 0xaf, 0xb6, 0x00, 0x0c, 0xaf, 0xb7, 0x00, 0x10, | ||
9 | 0x3c, 0x08, 0xa4, 0x70, 0x25, 0x08, 0x00, 0x00, | ||
10 | 0x3c, 0x0a, 0xa3, 0xf8, 0x3c, 0x0b, 0xa3, 0xf0, | ||
11 | 0x3c, 0x0c, 0xa4, 0x30, 0x25, 0x8c, 0x00, 0x00, | ||
12 | 0x34, 0x09, 0x00, 0x40, 0xad, 0x09, 0x00, 0x04, | ||
13 | 0x24, 0x11, 0x1f, 0x40, 0x00, 0x00, 0x00, 0x00, | ||
14 | 0x22, 0x31, 0xff, 0xff, 0x16, 0x20, 0xff, 0xfd, | ||
15 | 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, 0x08, | ||
16 | 0x34, 0x09, 0x00, 0x14, 0xad, 0x09, 0x00, 0x0c, | ||
17 | 0xad, 0x00, 0x00, 0x00, 0x24, 0x11, 0x00, 0x04, | ||
18 | 0x00, 0x00, 0x00, 0x00, 0x22, 0x31, 0xff, 0xff, | ||
19 | 0x16, 0x20, 0xff, 0xfd, 0x00, 0x00, 0x00, 0x00, | ||
20 | 0x34, 0x09, 0x00, 0x0e, 0xad, 0x09, 0x00, 0x00, | ||
21 | 0x24, 0x11, 0x00, 0x20, 0x22, 0x31, 0xff, 0xff, | ||
22 | 0x16, 0x20, 0xff, 0xfe, 0x34, 0x09, 0x01, 0x0f, | ||
23 | 0xad, 0x89, 0x00, 0x00, 0x3c, 0x09, 0x18, 0x08, | ||
24 | 0x35, 0x29, 0x28, 0x38, 0xad, 0x49, 0x00, 0x08, | ||
25 | 0xad, 0x40, 0x00, 0x14, 0x3c, 0x09, 0x80, 0x00, | ||
26 | 0xad, 0x49, 0x00, 0x04, 0x00, 0x00, 0x68, 0x25, | ||
27 | 0x00, 0x00, 0x70, 0x25, 0x3c, 0x0f, 0xa3, 0xf0, | ||
28 | 0x00, 0x00, 0xc0, 0x25, 0x3c, 0x19, 0xa3, 0xf0, | ||
29 | 0x3c, 0x16, 0xa0, 0x00, 0x00, 0x00, 0xb8, 0x25, | ||
30 | 0x3c, 0x06, 0xa3, 0xf0, 0x3c, 0x07, 0xa0, 0x00, | ||
31 | 0x00, 0x00, 0x90, 0x25, 0x3c, 0x14, 0xa0, 0x00, | ||
32 | 0x27, 0xbd, 0xff, 0xb8, 0x03, 0xa0, 0xf0, 0x25, | ||
33 | 0x3c, 0x10, 0xa4, 0x30, 0x8e, 0x10, 0x00, 0x04, | ||
34 | 0x3c, 0x11, 0x01, 0x01, 0x26, 0x31, 0x01, 0x01, | ||
35 | 0x16, 0x11, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, | ||
36 | 0x24, 0x10, 0x02, 0x00, 0x35, 0x71, 0x40, 0x00, | ||
37 | 0x10, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, | ||
38 | 0x24, 0x10, 0x04, 0x00, 0x35, 0x71, 0x80, 0x00, | ||
39 | 0xae, 0x2e, 0x00, 0x04, 0x25, 0xf5, 0x00, 0x0c, | ||
40 | 0x0d, 0x00, 0x01, 0xde, 0x00, 0x00, 0x00, 0x00, | ||
41 | 0x10, 0x40, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, | ||
42 | 0xaf, 0xa2, 0x00, 0x00, 0x24, 0x09, 0x20, 0x00, | ||
43 | 0xad, 0x89, 0x00, 0x00, 0x8d, 0xeb, 0x00, 0x00, | ||
44 | 0x3c, 0x08, 0xf0, 0xff, 0x01, 0x68, 0x58, 0x24, | ||
45 | 0xaf, 0xab, 0x00, 0x04, 0x23, 0xbd, 0x00, 0x08, | ||
46 | 0x24, 0x09, 0x10, 0x00, 0xad, 0x89, 0x00, 0x00, | ||
47 | 0x3c, 0x08, 0xb0, 0x19, 0x15, 0x68, 0x00, 0x0c, | ||
48 | 0x00, 0x00, 0x00, 0x00, 0x3c, 0x08, 0x08, 0x00, | ||
49 | 0x03, 0x08, 0xc0, 0x20, 0x03, 0x30, 0xc8, 0x20, | ||
50 | 0x03, 0x30, 0xc8, 0x20, 0x3c, 0x08, 0x00, 0x20, | ||
51 | 0x02, 0xc8, 0xb0, 0x20, 0x02, 0x88, 0xa0, 0x20, | ||
52 | 0x00, 0x12, 0x90, 0x40, 0x22, 0x52, 0x00, 0x01, | ||
53 | 0x10, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, | ||
54 | 0x3c, 0x08, 0x00, 0x10, 0x02, 0x88, 0xa0, 0x20, | ||
55 | 0x24, 0x08, 0x20, 0x00, 0xad, 0x88, 0x00, 0x00, | ||
56 | 0x8d, 0xe9, 0x00, 0x24, 0x8d, 0xfa, 0x00, 0x00, | ||
57 | 0x24, 0x08, 0x10, 0x00, 0xad, 0x88, 0x00, 0x00, | ||
58 | 0x31, 0x29, 0xff, 0xff, 0x24, 0x08, 0x05, 0x00, | ||
59 | 0x15, 0x28, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, | ||
60 | 0x3c, 0x1b, 0x01, 0x00, 0x03, 0x5b, 0xd0, 0x24, | ||
61 | 0x17, 0x40, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, | ||
62 | 0x3c, 0x08, 0x10, 0x1c, 0x35, 0x08, 0x0a, 0x04, | ||
63 | 0xad, 0xe8, 0x00, 0x18, 0x10, 0x00, 0x00, 0x03, | ||
64 | 0x3c, 0x08, 0x08, 0x0c, 0x35, 0x08, 0x12, 0x04, | ||
65 | 0xad, 0xe8, 0x00, 0x18, 0x3c, 0x08, 0x08, 0x00, | ||
66 | 0x01, 0xc8, 0x70, 0x20, 0x01, 0xf0, 0x78, 0x20, | ||
67 | 0x01, 0xf0, 0x78, 0x20, 0x25, 0xad, 0x00, 0x01, | ||
68 | 0x2d, 0xa8, 0x00, 0x08, 0x15, 0x00, 0xff, 0xc4, | ||
69 | 0x00, 0x00, 0x00, 0x00, 0x3c, 0x08, 0xc4, 0x00, | ||
70 | 0xad, 0x48, 0x00, 0x0c, 0x3c, 0x08, 0x80, 0x00, | ||
71 | 0xad, 0x48, 0x00, 0x04, 0x03, 0xc0, 0xe8, 0x25, | ||
72 | 0x00, 0x00, 0x18, 0x25, 0x8f, 0xa9, 0x00, 0x04, | ||
73 | 0x3c, 0x08, 0xb0, 0x09, 0x15, 0x28, 0x00, 0x16, | ||
74 | 0x00, 0x00, 0x00, 0x00, 0xae, 0x38, 0x00, 0x04, | ||
75 | 0x27, 0x35, 0x00, 0x0c, 0x8f, 0xa4, 0x00, 0x00, | ||
76 | 0x23, 0xbd, 0x00, 0x08, 0x24, 0x05, 0x00, 0x01, | ||
77 | 0x0d, 0x00, 0x02, 0x90, 0x00, 0x00, 0x00, 0x00, | ||
78 | 0x8e, 0xc8, 0x00, 0x00, 0x3c, 0x08, 0x00, 0x08, | ||
79 | 0x01, 0x16, 0x40, 0x20, 0x8d, 0x09, 0x00, 0x00, | ||
80 | 0x8e, 0xc8, 0x00, 0x00, 0x3c, 0x08, 0x00, 0x08, | ||
81 | 0x01, 0x16, 0x40, 0x20, 0x8d, 0x09, 0x00, 0x00, | ||
82 | 0x3c, 0x08, 0x04, 0x00, 0x01, 0xc8, 0x70, 0x20, | ||
83 | 0x03, 0x30, 0xc8, 0x20, 0x3c, 0x08, 0x00, 0x10, | ||
84 | 0x02, 0xc8, 0xb0, 0x20, 0x10, 0x00, 0x00, 0x21, | ||
85 | 0xae, 0x37, 0x00, 0x04, 0x24, 0xd5, 0x00, 0x0c, | ||
86 | 0x8f, 0xa4, 0x00, 0x00, 0x23, 0xbd, 0x00, 0x08, | ||
87 | 0x24, 0x05, 0x00, 0x01, 0x0d, 0x00, 0x02, 0x90, | ||
88 | 0x00, 0x00, 0x00, 0x00, 0x8c, 0xe8, 0x00, 0x00, | ||
89 | 0x3c, 0x08, 0x00, 0x08, 0x01, 0x07, 0x40, 0x20, | ||
90 | 0x8d, 0x09, 0x00, 0x00, 0x3c, 0x08, 0x00, 0x10, | ||
91 | 0x01, 0x07, 0x40, 0x20, 0x8d, 0x09, 0x00, 0x00, | ||
92 | 0x3c, 0x08, 0x00, 0x18, 0x01, 0x07, 0x40, 0x20, | ||
93 | 0x8d, 0x09, 0x00, 0x00, 0x8c, 0xe8, 0x00, 0x00, | ||
94 | 0x3c, 0x08, 0x00, 0x08, 0x01, 0x07, 0x40, 0x20, | ||
95 | 0x8d, 0x09, 0x00, 0x00, 0x3c, 0x08, 0x00, 0x10, | ||
96 | 0x01, 0x07, 0x40, 0x20, 0x8d, 0x09, 0x00, 0x00, | ||
97 | 0x3c, 0x08, 0x00, 0x18, 0x01, 0x07, 0x40, 0x20, | ||
98 | 0x8d, 0x09, 0x00, 0x00, 0x3c, 0x08, 0x08, 0x00, | ||
99 | 0x02, 0xe8, 0xb8, 0x20, 0x00, 0xd0, 0x30, 0x20, | ||
100 | 0x00, 0xd0, 0x30, 0x20, 0x3c, 0x08, 0x00, 0x20, | ||
101 | 0x00, 0xe8, 0x38, 0x20, 0x24, 0x63, 0x00, 0x01, | ||
102 | 0x00, 0x6d, 0x40, 0x2a, 0x15, 0x00, 0xff, 0xc3, | ||
103 | 0x00, 0x00, 0x00, 0x00, 0x3c, 0x0a, 0xa4, 0x70, | ||
104 | 0x00, 0x12, 0x94, 0xc0, 0x3c, 0x09, 0x00, 0x06, | ||
105 | 0x35, 0x29, 0x36, 0x34, 0x01, 0x32, 0x48, 0x25, | ||
106 | 0xad, 0x49, 0x00, 0x10, 0x8d, 0x49, 0x00, 0x10, | ||
107 | 0x3c, 0x08, 0xa0, 0x00, 0x35, 0x08, 0x03, 0x00, | ||
108 | 0x3c, 0x09, 0x0f, 0xff, 0x35, 0x29, 0xff, 0xff, | ||
109 | 0x02, 0xc9, 0xb0, 0x24, 0xad, 0x16, 0x00, 0x18, | ||
110 | 0x03, 0xc0, 0xe8, 0x25, 0x27, 0xbd, 0x00, 0x48, | ||
111 | 0x8f, 0xb3, 0x00, 0x00, 0x8f, 0xb4, 0x00, 0x04, | ||
112 | 0x8f, 0xb5, 0x00, 0x08, 0x8f, 0xb6, 0x00, 0x0c, | ||
113 | 0x8f, 0xb7, 0x00, 0x10, 0x27, 0xbd, 0x00, 0x18, | ||
114 | 0x3c, 0x08, 0x80, 0x00, 0x25, 0x08, 0x00, 0x00, | ||
115 | 0x25, 0x09, 0x40, 0x00, 0x25, 0x29, 0xff, 0xe0, | ||
116 | 0x40, 0x80, 0xe0, 0x00, 0x40, 0x80, 0xe8, 0x00, | ||
117 | 0xbd, 0x08, 0x00, 0x00, 0x01, 0x09, 0x08, 0x2b, | ||
118 | 0x14, 0x20, 0xff, 0xfd, 0x25, 0x08, 0x00, 0x20, | ||
119 | 0x3c, 0x08, 0x80, 0x00, 0x25, 0x08, 0x00, 0x00, | ||
120 | 0x25, 0x09, 0x20, 0x00, 0x25, 0x29, 0xff, 0xf0, | ||
121 | 0xbd, 0x09, 0x00, 0x00, 0x01, 0x09, 0x08, 0x2b, | ||
122 | 0x14, 0x20, 0xff, 0xfd, 0x25, 0x08, 0x00, 0x10, | ||
123 | 0x10, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00, | ||
124 | 0x3c, 0x08, 0x80, 0x00, 0x25, 0x08, 0x00, 0x00, | ||
125 | 0x25, 0x09, 0x40, 0x00, 0x25, 0x29, 0xff, 0xe0, | ||
126 | 0x40, 0x80, 0xe0, 0x00, 0x40, 0x80, 0xe8, 0x00, | ||
127 | 0xbd, 0x08, 0x00, 0x00, 0x01, 0x09, 0x08, 0x2b, | ||
128 | 0x14, 0x20, 0xff, 0xfd, 0x25, 0x08, 0x00, 0x20, | ||
129 | 0x3c, 0x08, 0x80, 0x00, 0x25, 0x08, 0x00, 0x00, | ||
130 | 0x25, 0x09, 0x20, 0x00, 0x25, 0x29, 0xff, 0xf0, | ||
131 | 0xbd, 0x01, 0x00, 0x00, 0x01, 0x09, 0x08, 0x2b, | ||
132 | 0x14, 0x20, 0xff, 0xfd, 0x25, 0x08, 0x00, 0x10, | ||
133 | 0x3c, 0x0a, 0xa4, 0x00, 0x25, 0x4a, 0x00, 0x00, | ||
134 | 0x3c, 0x0b, 0xff, 0xf0, 0x3c, 0x09, 0x00, 0x10, | ||
135 | 0x01, 0x4b, 0x50, 0x24, 0x3c, 0x08, 0xa4, 0x00, | ||
136 | 0x25, 0x29, 0xff, 0xff, 0x3c, 0x0b, 0xa4, 0x00, | ||
137 | 0x25, 0x08, 0x04, 0xc0, 0x25, 0x6b, 0x07, 0x74, | ||
138 | 0x01, 0x09, 0x40, 0x24, 0x01, 0x69, 0x58, 0x24, | ||
139 | 0x3c, 0x09, 0xa0, 0x00, 0x01, 0x0a, 0x40, 0x25, | ||
140 | 0x01, 0x6a, 0x58, 0x25, 0x25, 0x29, 0x00, 0x00, | ||
141 | 0x8d, 0x0d, 0x00, 0x00, 0x25, 0x08, 0x00, 0x04, | ||
142 | 0x01, 0x0b, 0x08, 0x2b, 0x25, 0x29, 0x00, 0x04, | ||
143 | 0x14, 0x20, 0xff, 0xfb, 0xad, 0x2d, 0xff, 0xfc, | ||
144 | 0x3c, 0x0c, 0x80, 0x00, 0x25, 0x8c, 0x00, 0x00, | ||
145 | 0x01, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, | ||
146 | 0x3c, 0x0b, 0xb0, 0x00, 0x8d, 0x69, 0x00, 0x08, | ||
147 | 0x3c, 0x0a, 0x1f, 0xff, 0x35, 0x4a, 0xff, 0xff, | ||
148 | 0x3c, 0x01, 0xa4, 0x60, 0x01, 0x2a, 0x48, 0x24, | ||
149 | 0xac, 0x29, 0x00, 0x00, 0x3c, 0x08, 0xa4, 0x60, | ||
150 | 0x8d, 0x08, 0x00, 0x10, 0x31, 0x08, 0x00, 0x02, | ||
151 | 0x55, 0x00, 0xff, 0xfd, 0x3c, 0x08, 0xa4, 0x60, | ||
152 | 0x24, 0x08, 0x10, 0x00, 0x01, 0x0b, 0x40, 0x20, | ||
153 | 0x01, 0x0a, 0x40, 0x24, 0x3c, 0x01, 0xa4, 0x60, | ||
154 | 0xac, 0x28, 0x00, 0x04, 0x3c, 0x0a, 0x00, 0x10, | ||
155 | 0x25, 0x4a, 0xff, 0xff, 0x3c, 0x01, 0xa4, 0x60, | ||
156 | 0xac, 0x2a, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, | ||
157 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
158 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
159 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
160 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
161 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
162 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
163 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
164 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
165 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
166 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
167 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
168 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
169 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
170 | 0x00, 0x00, 0x00, 0x00, 0x3c, 0x0b, 0xa4, 0x60, | ||
171 | 0x8d, 0x6b, 0x00, 0x10, 0x31, 0x6b, 0x00, 0x01, | ||
172 | 0x15, 0x60, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, | ||
173 | 0x3c, 0x0b, 0xb0, 0x00, 0x8d, 0x64, 0x00, 0x08, | ||
174 | 0x02, 0xc0, 0x28, 0x25, 0x3c, 0x01, 0x5d, 0x58, | ||
175 | 0x34, 0x21, 0x8b, 0x65, 0x00, 0xa1, 0x00, 0x19, | ||
176 | 0x27, 0xbd, 0xff, 0xe0, 0xaf, 0xbf, 0x00, 0x1c, | ||
177 | 0xaf, 0xb0, 0x00, 0x14, 0x3c, 0x1f, 0x00, 0x10, | ||
178 | 0x00, 0x00, 0x18, 0x25, 0x00, 0x00, 0x40, 0x25, | ||
179 | 0x00, 0x80, 0x48, 0x25, 0x24, 0x0d, 0x00, 0x20, | ||
180 | 0x00, 0x00, 0x10, 0x12, 0x24, 0x42, 0x00, 0x01, | ||
181 | 0x00, 0x40, 0x38, 0x25, 0x00, 0x40, 0x50, 0x25, | ||
182 | 0x00, 0x40, 0x58, 0x25, 0x00, 0x40, 0x80, 0x25, | ||
183 | 0x00, 0x40, 0x30, 0x25, 0x00, 0x40, 0x60, 0x25, | ||
184 | 0x8d, 0x22, 0x00, 0x00, 0x00, 0xe2, 0x18, 0x21, | ||
185 | 0x00, 0x67, 0x08, 0x2b, 0x10, 0x20, 0x00, 0x02, | ||
186 | 0x00, 0x60, 0x28, 0x25, 0x25, 0x4a, 0x00, 0x01, | ||
187 | 0x30, 0x43, 0x00, 0x1f, 0x01, 0xa3, 0x78, 0x23, | ||
188 | 0x01, 0xe2, 0xc0, 0x06, 0x00, 0x62, 0x70, 0x04, | ||
189 | 0x01, 0xd8, 0x20, 0x25, 0x00, 0xc2, 0x08, 0x2b, | ||
190 | 0x00, 0xa0, 0x38, 0x25, 0x01, 0x62, 0x58, 0x26, | ||
191 | 0x10, 0x20, 0x00, 0x04, 0x02, 0x04, 0x80, 0x21, | ||
192 | 0x00, 0xe2, 0xc8, 0x26, 0x10, 0x00, 0x00, 0x02, | ||
193 | 0x03, 0x26, 0x30, 0x26, 0x00, 0xc4, 0x30, 0x26, | ||
194 | 0x25, 0x08, 0x00, 0x04, 0x00, 0x50, 0x78, 0x26, | ||
195 | 0x25, 0x29, 0x00, 0x04, 0x15, 0x1f, 0xff, 0xe8, | ||
196 | 0x01, 0xec, 0x60, 0x21, 0x00, 0xea, 0x70, 0x26, | ||
197 | 0x01, 0xcb, 0x38, 0x26, 0x02, 0x06, 0xc0, 0x26, | ||
198 | 0x03, 0x0c, 0x80, 0x26, 0x3c, 0x0b, 0xb0, 0x00, | ||
199 | 0x8d, 0x68, 0x00, 0x10, 0x14, 0xe8, 0x00, 0x06, | ||
200 | 0x00, 0x00, 0x00, 0x00, 0x8d, 0x68, 0x00, 0x14, | ||
201 | 0x16, 0x08, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, | ||
202 | 0x04, 0x11, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, | ||
203 | 0x04, 0x11, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, | ||
204 | 0x3c, 0x09, 0xa4, 0x08, 0x8d, 0x29, 0x00, 0x00, | ||
205 | 0x8f, 0xb0, 0x00, 0x14, 0x8f, 0xbf, 0x00, 0x1c, | ||
206 | 0x11, 0x20, 0x00, 0x06, 0x27, 0xbd, 0x00, 0x20, | ||
207 | 0x24, 0x0a, 0x00, 0x41, 0x3c, 0x01, 0xa4, 0x04, | ||
208 | 0xac, 0x2a, 0x00, 0x10, 0x3c, 0x01, 0xa4, 0x08, | ||
209 | 0xac, 0x20, 0x00, 0x00, 0x3c, 0x0b, 0x00, 0xaa, | ||
210 | 0x35, 0x6b, 0xaa, 0xae, 0x3c, 0x01, 0xa4, 0x04, | ||
211 | 0xac, 0x2b, 0x00, 0x10, 0x3c, 0x01, 0xa4, 0x30, | ||
212 | 0x24, 0x08, 0x05, 0x55, 0xac, 0x28, 0x00, 0x0c, | ||
213 | 0x3c, 0x01, 0xa4, 0x80, 0xac, 0x20, 0x00, 0x18, | ||
214 | 0x3c, 0x01, 0xa4, 0x50, 0xac, 0x20, 0x00, 0x0c, | ||
215 | 0x3c, 0x01, 0xa4, 0x30, 0x24, 0x09, 0x08, 0x00, | ||
216 | 0xac, 0x29, 0x00, 0x00, 0x24, 0x09, 0x00, 0x02, | ||
217 | 0x3c, 0x01, 0xa4, 0x60, 0x3c, 0x08, 0xa0, 0x00, | ||
218 | 0x35, 0x08, 0x03, 0x00, 0xac, 0x29, 0x00, 0x10, | ||
219 | 0xad, 0x17, 0x00, 0x14, 0xad, 0x15, 0x00, 0x0c, | ||
220 | 0xad, 0x13, 0x00, 0x04, 0x12, 0x60, 0x00, 0x04, | ||
221 | 0xad, 0x14, 0x00, 0x00, 0x3c, 0x09, 0xa6, 0x00, | ||
222 | 0x10, 0x00, 0x00, 0x03, 0x25, 0x29, 0x00, 0x00, | ||
223 | 0x3c, 0x09, 0xb0, 0x00, 0x25, 0x29, 0x00, 0x00, | ||
224 | 0xad, 0x09, 0x00, 0x08, 0x3c, 0x08, 0xa4, 0x00, | ||
225 | 0x25, 0x08, 0x00, 0x00, 0x21, 0x09, 0x10, 0x00, | ||
226 | 0x25, 0x08, 0x00, 0x04, 0x15, 0x09, 0xff, 0xfe, | ||
227 | 0xad, 0x00, 0xff, 0xfc, 0x3c, 0x08, 0xa4, 0x00, | ||
228 | 0x25, 0x08, 0x10, 0x00, 0x21, 0x09, 0x10, 0x00, | ||
229 | 0x25, 0x08, 0x00, 0x04, 0x15, 0x09, 0xff, 0xfe, | ||
230 | 0xad, 0x00, 0xff, 0xfc, 0x3c, 0x0b, 0xb0, 0x00, | ||
231 | 0x8d, 0x69, 0x00, 0x08, 0x01, 0x20, 0x00, 0x08, | ||
232 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
233 | 0x27, 0xbd, 0xff, 0x60, 0xaf, 0xb0, 0x00, 0x40, | ||
234 | 0xaf, 0xb1, 0x00, 0x44, 0x00, 0x00, 0x88, 0x25, | ||
235 | 0x00, 0x00, 0x80, 0x25, 0xaf, 0xa2, 0x00, 0x00, | ||
236 | 0xaf, 0xa3, 0x00, 0x04, 0xaf, 0xa4, 0x00, 0x08, | ||
237 | 0xaf, 0xa5, 0x00, 0x0c, 0xaf, 0xa6, 0x00, 0x10, | ||
238 | 0xaf, 0xa7, 0x00, 0x14, 0xaf, 0xa8, 0x00, 0x18, | ||
239 | 0xaf, 0xa9, 0x00, 0x1c, 0xaf, 0xaa, 0x00, 0x20, | ||
240 | 0xaf, 0xab, 0x00, 0x24, 0xaf, 0xac, 0x00, 0x28, | ||
241 | 0xaf, 0xad, 0x00, 0x2c, 0xaf, 0xae, 0x00, 0x30, | ||
242 | 0xaf, 0xaf, 0x00, 0x34, 0xaf, 0xb8, 0x00, 0x38, | ||
243 | 0xaf, 0xb9, 0x00, 0x3c, 0xaf, 0xb2, 0x00, 0x48, | ||
244 | 0xaf, 0xb3, 0x00, 0x4c, 0xaf, 0xb4, 0x00, 0x50, | ||
245 | 0xaf, 0xb5, 0x00, 0x54, 0xaf, 0xb6, 0x00, 0x58, | ||
246 | 0xaf, 0xb7, 0x00, 0x5c, 0xaf, 0xbe, 0x00, 0x60, | ||
247 | 0xaf, 0xbf, 0x00, 0x64, 0x0d, 0x00, 0x02, 0x20, | ||
248 | 0x00, 0x00, 0x00, 0x00, 0x26, 0x10, 0x00, 0x01, | ||
249 | 0x2a, 0x09, 0x00, 0x04, 0x15, 0x20, 0xff, 0xfb, | ||
250 | 0x02, 0x22, 0x88, 0x21, 0x00, 0x11, 0x20, 0x82, | ||
251 | 0x0d, 0x00, 0x02, 0x90, 0x24, 0x05, 0x00, 0x01, | ||
252 | 0x8f, 0xbf, 0x00, 0x64, 0x00, 0x11, 0x10, 0x82, | ||
253 | 0x8f, 0xb1, 0x00, 0x44, 0x8f, 0xa3, 0x00, 0x04, | ||
254 | 0x8f, 0xa4, 0x00, 0x08, 0x8f, 0xa5, 0x00, 0x0c, | ||
255 | 0x8f, 0xa6, 0x00, 0x10, 0x8f, 0xa7, 0x00, 0x14, | ||
256 | 0x8f, 0xa8, 0x00, 0x18, 0x8f, 0xa9, 0x00, 0x1c, | ||
257 | 0x8f, 0xaa, 0x00, 0x20, 0x8f, 0xab, 0x00, 0x24, | ||
258 | 0x8f, 0xac, 0x00, 0x28, 0x8f, 0xad, 0x00, 0x2c, | ||
259 | 0x8f, 0xae, 0x00, 0x30, 0x8f, 0xaf, 0x00, 0x34, | ||
260 | 0x8f, 0xb8, 0x00, 0x38, 0x8f, 0xb9, 0x00, 0x3c, | ||
261 | 0x8f, 0xb0, 0x00, 0x40, 0x8f, 0xb2, 0x00, 0x48, | ||
262 | 0x8f, 0xb3, 0x00, 0x4c, 0x8f, 0xb4, 0x00, 0x50, | ||
263 | 0x8f, 0xb5, 0x00, 0x54, 0x8f, 0xb6, 0x00, 0x58, | ||
264 | 0x8f, 0xb7, 0x00, 0x5c, 0x8f, 0xbe, 0x00, 0x60, | ||
265 | 0x03, 0xe0, 0x00, 0x08, 0x27, 0xbd, 0x00, 0xa0, | ||
266 | 0x27, 0xbd, 0xff, 0xe0, 0xaf, 0xbf, 0x00, 0x1c, | ||
267 | 0x00, 0x00, 0x48, 0x25, 0x00, 0x00, 0x58, 0x25, | ||
268 | 0x00, 0x00, 0x60, 0x25, 0x29, 0x9a, 0x00, 0x40, | ||
269 | 0x53, 0x40, 0x00, 0x18, 0x00, 0x00, 0x10, 0x25, | ||
270 | 0x0d, 0x00, 0x02, 0x43, 0x01, 0x80, 0x20, 0x25, | ||
271 | 0x58, 0x40, 0x00, 0x08, 0x29, 0x3a, 0x00, 0x50, | ||
272 | 0x00, 0x49, 0xd0, 0x23, 0x03, 0x4c, 0x00, 0x19, | ||
273 | 0x00, 0x40, 0x48, 0x25, 0x00, 0x00, 0xd0, 0x12, | ||
274 | 0x01, 0x7a, 0x58, 0x21, 0x00, 0x00, 0x00, 0x00, | ||
275 | 0x29, 0x3a, 0x00, 0x50, 0x17, 0x40, 0xff, 0xf1, | ||
276 | 0x25, 0x8c, 0x00, 0x01, 0x00, 0x0b, 0x20, 0x80, | ||
277 | 0x00, 0x8b, 0x20, 0x23, 0x00, 0x04, 0x20, 0x80, | ||
278 | 0x00, 0x8b, 0x20, 0x23, 0x00, 0x04, 0x20, 0x40, | ||
279 | 0x0d, 0x00, 0x02, 0x60, 0x24, 0x84, 0xfc, 0x90, | ||
280 | 0x10, 0x00, 0x00, 0x03, 0x8f, 0xbf, 0x00, 0x1c, | ||
281 | 0x00, 0x00, 0x10, 0x25, 0x8f, 0xbf, 0x00, 0x1c, | ||
282 | 0x27, 0xbd, 0x00, 0x20, 0x03, 0xe0, 0x00, 0x08, | ||
283 | 0x00, 0x00, 0x00, 0x00, 0x27, 0xbd, 0xff, 0xd8, | ||
284 | 0xaf, 0xbf, 0x00, 0x1c, 0x00, 0x00, 0x10, 0x25, | ||
285 | 0x0d, 0x00, 0x02, 0x90, 0x24, 0x05, 0x00, 0x02, | ||
286 | 0x00, 0x00, 0xf0, 0x25, 0x24, 0x1a, 0xff, 0xff, | ||
287 | 0xae, 0x9a, 0x00, 0x04, 0x8e, 0x83, 0x00, 0x04, | ||
288 | 0xae, 0x9a, 0x00, 0x00, 0xae, 0x9a, 0x00, 0x00, | ||
289 | 0x00, 0x00, 0xe0, 0x25, 0x00, 0x03, 0x1c, 0x02, | ||
290 | 0x30, 0x7a, 0x00, 0x01, 0x53, 0x40, 0x00, 0x03, | ||
291 | 0x27, 0x9c, 0x00, 0x01, 0x24, 0x42, 0x00, 0x01, | ||
292 | 0x27, 0x9c, 0x00, 0x01, 0x2b, 0x9a, 0x00, 0x08, | ||
293 | 0x17, 0x40, 0xff, 0xf9, 0x00, 0x03, 0x18, 0x42, | ||
294 | 0x27, 0xde, 0x00, 0x01, 0x2b, 0xda, 0x00, 0x0a, | ||
295 | 0x57, 0x40, 0xff, 0xef, 0x24, 0x1a, 0xff, 0xff, | ||
296 | 0x8f, 0xbf, 0x00, 0x1c, 0x27, 0xbd, 0x00, 0x28, | ||
297 | 0x03, 0xe0, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, | ||
298 | 0x27, 0xbd, 0xff, 0xd8, 0xaf, 0xbf, 0x00, 0x1c, | ||
299 | 0xaf, 0xa4, 0x00, 0x20, 0xa3, 0xa0, 0x00, 0x27, | ||
300 | 0x00, 0x00, 0x40, 0x25, 0x00, 0x00, 0x50, 0x25, | ||
301 | 0x34, 0x0d, 0xc8, 0x00, 0x00, 0x00, 0x70, 0x25, | ||
302 | 0x29, 0xda, 0x00, 0x40, 0x57, 0x40, 0x00, 0x04, | ||
303 | 0x01, 0xc0, 0x20, 0x25, 0x10, 0x00, 0x00, 0x20, | ||
304 | 0x00, 0x00, 0x10, 0x25, 0x01, 0xc0, 0x20, 0x25, | ||
305 | 0x0d, 0x00, 0x02, 0x90, 0x24, 0x05, 0x00, 0x01, | ||
306 | 0x0d, 0x00, 0x02, 0xb4, 0x27, 0xa4, 0x00, 0x27, | ||
307 | 0x0d, 0x00, 0x02, 0xb4, 0x27, 0xa4, 0x00, 0x27, | ||
308 | 0x93, 0xba, 0x00, 0x27, 0x24, 0x1b, 0x03, 0x20, | ||
309 | 0x8f, 0xa4, 0x00, 0x20, 0x03, 0x5b, 0x00, 0x19, | ||
310 | 0x00, 0x00, 0x40, 0x12, 0x01, 0x04, 0xd0, 0x23, | ||
311 | 0x07, 0x43, 0x00, 0x03, 0x03, 0x4d, 0xd8, 0x2a, | ||
312 | 0x00, 0x88, 0xd0, 0x23, 0x03, 0x4d, 0xd8, 0x2a, | ||
313 | 0x53, 0x60, 0x00, 0x04, 0x8f, 0xa4, 0x00, 0x20, | ||
314 | 0x03, 0x40, 0x68, 0x25, 0x01, 0xc0, 0x50, 0x25, | ||
315 | 0x8f, 0xa4, 0x00, 0x20, 0x01, 0x04, 0xd8, 0x2a, | ||
316 | 0x53, 0x60, 0x00, 0x06, 0x01, 0x4e, 0x10, 0x21, | ||
317 | 0x25, 0xce, 0x00, 0x01, 0x29, 0xdb, 0x00, 0x41, | ||
318 | 0x57, 0x60, 0xff, 0xe0, 0x29, 0xda, 0x00, 0x40, | ||
319 | 0x01, 0x4e, 0x10, 0x21, 0x00, 0x02, 0x10, 0x42, | ||
320 | 0x8f, 0xbf, 0x00, 0x1c, 0x27, 0xbd, 0x00, 0x28, | ||
321 | 0x03, 0xe0, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, | ||
322 | 0x27, 0xbd, 0xff, 0xd8, 0x30, 0x84, 0x00, 0xff, | ||
323 | 0x24, 0x1b, 0x00, 0x01, 0x38, 0x84, 0x00, 0x3f, | ||
324 | 0xaf, 0xbf, 0x00, 0x1c, 0x14, 0xbb, 0x00, 0x03, | ||
325 | 0x3c, 0x0f, 0x46, 0x00, 0x3c, 0x1a, 0x80, 0x00, | ||
326 | 0x01, 0xfa, 0x78, 0x25, 0x30, 0x9a, 0x00, 0x01, | ||
327 | 0x00, 0x1a, 0xd1, 0x80, 0x01, 0xfa, 0x78, 0x25, | ||
328 | 0x30, 0x9a, 0x00, 0x02, 0x00, 0x1a, 0xd3, 0x40, | ||
329 | 0x01, 0xfa, 0x78, 0x25, 0x30, 0x9a, 0x00, 0x04, | ||
330 | 0x00, 0x1a, 0xd5, 0x00, 0x01, 0xfa, 0x78, 0x25, | ||
331 | 0x30, 0x9a, 0x00, 0x08, 0x00, 0x1a, 0xd1, 0x00, | ||
332 | 0x01, 0xfa, 0x78, 0x25, 0x30, 0x9a, 0x00, 0x10, | ||
333 | 0x00, 0x1a, 0xd2, 0xc0, 0x01, 0xfa, 0x78, 0x25, | ||
334 | 0x30, 0x9a, 0x00, 0x20, 0x00, 0x1a, 0xd4, 0x80, | ||
335 | 0x01, 0xfa, 0x78, 0x25, 0x24, 0x1b, 0x00, 0x01, | ||
336 | 0x14, 0xbb, 0x00, 0x03, 0xae, 0xaf, 0x00, 0x00, | ||
337 | 0x3c, 0x1a, 0xa4, 0x30, 0xaf, 0x40, 0x00, 0x00, | ||
338 | 0x8f, 0xbf, 0x00, 0x1c, 0x27, 0xbd, 0x00, 0x28, | ||
339 | 0x03, 0xe0, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, | ||
340 | 0x27, 0xbd, 0xff, 0xd8, 0xaf, 0xbf, 0x00, 0x1c, | ||
341 | 0x24, 0x1a, 0x20, 0x00, 0x3c, 0x1b, 0xa4, 0x30, | ||
342 | 0xaf, 0x7a, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x25, | ||
343 | 0x8e, 0xbe, 0x00, 0x00, 0x24, 0x1a, 0x10, 0x00, | ||
344 | 0xaf, 0x7a, 0x00, 0x00, 0x24, 0x1b, 0x00, 0x40, | ||
345 | 0x03, 0x7e, 0xd8, 0x24, 0x00, 0x1b, 0xd9, 0x82, | ||
346 | 0x00, 0x00, 0xd0, 0x25, 0x03, 0x5b, 0xd0, 0x25, | ||
347 | 0x24, 0x1b, 0x40, 0x00, 0x03, 0x7e, 0xd8, 0x24, | ||
348 | 0x00, 0x1b, 0xdb, 0x42, 0x03, 0x5b, 0xd0, 0x25, | ||
349 | 0x3c, 0x1b, 0x00, 0x40, 0x03, 0x7e, 0xd8, 0x24, | ||
350 | 0x00, 0x1b, 0xdd, 0x02, 0x03, 0x5b, 0xd0, 0x25, | ||
351 | 0x24, 0x1b, 0x00, 0x80, 0x03, 0x7e, 0xd8, 0x24, | ||
352 | 0x00, 0x1b, 0xd9, 0x02, 0x03, 0x5b, 0xd0, 0x25, | ||
353 | 0x34, 0x1b, 0x80, 0x00, 0x03, 0x7e, 0xd8, 0x24, | ||
354 | 0x00, 0x1b, 0xda, 0xc2, 0x03, 0x5b, 0xd0, 0x25, | ||
355 | 0x3c, 0x1b, 0x00, 0x80, 0x03, 0x7e, 0xd8, 0x24, | ||
356 | 0x00, 0x1b, 0xdc, 0x82, 0x03, 0x5b, 0xd0, 0x25, | ||
357 | 0xa0, 0x9a, 0x00, 0x00, 0x8f, 0xbf, 0x00, 0x1c, | ||
358 | 0x27, 0xbd, 0x00, 0x28, 0x03, 0xe0, 0x00, 0x08, | ||
359 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
360 | 0x02, 0x00, 0x10, 0x01, 0x40, 0x0a, 0x00, 0x88, | ||
361 | 0x04, 0x40, 0x22, 0x02, 0x08, 0x10, 0x41, 0xff, | ||
362 | 0x08, 0x08, 0x40, 0x44, 0x01, 0x20, 0x08, 0x7f, | ||
363 | 0x02, 0x04, 0x10, 0x10, 0x80, 0x84, 0x04, 0x20, | ||
364 | 0x41, 0xfe, 0x08, 0x08, 0x40, 0x22, 0x01, 0x10, | ||
365 | 0x08, 0x80, 0x44, 0x04, 0x3f, 0xc0, 0x07, 0x00, | ||
366 | 0xc6, 0x08, 0x08, 0x80, 0x24, 0x01, 0x40, 0x02, | ||
367 | 0x00, 0x10, 0x00, 0x80, 0x02, 0x00, 0x90, 0x04, | ||
368 | 0x40, 0x41, 0x8c, 0x03, 0x80, 0x7e, 0x02, 0x0c, | ||
369 | 0x10, 0x10, 0x80, 0x44, 0x02, 0x20, 0x09, 0x00, | ||
370 | 0x48, 0x02, 0x40, 0x12, 0x01, 0x10, 0x08, 0x80, | ||
371 | 0x84, 0x18, 0x3f, 0x00, 0x7f, 0xe2, 0x00, 0x10, | ||
372 | 0x00, 0x80, 0x04, 0x00, 0x20, 0x01, 0xff, 0x08, | ||
373 | 0x00, 0x40, 0x02, 0x00, 0x10, 0x00, 0x80, 0x04, | ||
374 | 0x00, 0x3f, 0xf0, 0x7f, 0xe2, 0x00, 0x10, 0x00, | ||
375 | 0x80, 0x04, 0x00, 0x20, 0x01, 0xff, 0x08, 0x00, | ||
376 | 0x40, 0x02, 0x00, 0x10, 0x00, 0x80, 0x04, 0x00, | ||
377 | 0x20, 0x00, 0x07, 0x00, 0xc6, 0x08, 0x08, 0x80, | ||
378 | 0x24, 0x01, 0x40, 0x02, 0x00, 0x10, 0x00, 0x83, | ||
379 | 0xf2, 0x00, 0x90, 0x04, 0x40, 0x61, 0x8d, 0x03, | ||
380 | 0x88, 0x40, 0x12, 0x00, 0x90, 0x04, 0x80, 0x24, | ||
381 | 0x01, 0x20, 0x09, 0xff, 0xc8, 0x02, 0x40, 0x12, | ||
382 | 0x00, 0x90, 0x04, 0x80, 0x24, 0x01, 0x20, 0x08, | ||
383 | 0x07, 0x00, 0x10, 0x00, 0x80, 0x04, 0x00, 0x20, | ||
384 | 0x01, 0x00, 0x08, 0x00, 0x40, 0x02, 0x00, 0x10, | ||
385 | 0x00, 0x80, 0x04, 0x00, 0x20, 0x03, 0x80, 0x00, | ||
386 | 0x40, 0x02, 0x00, 0x10, 0x00, 0x80, 0x04, 0x00, | ||
387 | 0x20, 0x01, 0x00, 0x08, 0x00, 0x42, 0x02, 0x10, | ||
388 | 0x10, 0x80, 0x82, 0x08, 0x0f, 0x80, 0x40, 0x22, | ||
389 | 0x02, 0x10, 0x20, 0x82, 0x04, 0x20, 0x22, 0x01, | ||
390 | 0x20, 0x0a, 0x80, 0x62, 0x02, 0x08, 0x10, 0x20, | ||
391 | 0x80, 0x84, 0x02, 0x20, 0x08, 0x40, 0x02, 0x00, | ||
392 | 0x10, 0x00, 0x80, 0x04, 0x00, 0x20, 0x01, 0x00, | ||
393 | 0x08, 0x00, 0x40, 0x02, 0x00, 0x10, 0x00, 0x80, | ||
394 | 0x04, 0x00, 0x3f, 0xf0, 0x80, 0x0c, 0x00, 0x70, | ||
395 | 0x07, 0x40, 0x5a, 0x02, 0xc8, 0x26, 0x41, 0x31, | ||
396 | 0x11, 0x88, 0x8c, 0x28, 0x61, 0x43, 0x04, 0x18, | ||
397 | 0x20, 0xc0, 0x04, 0x40, 0x23, 0x01, 0x14, 0x08, | ||
398 | 0xa0, 0x44, 0x82, 0x22, 0x11, 0x10, 0x88, 0x44, | ||
399 | 0x42, 0x22, 0x09, 0x10, 0x28, 0x81, 0x44, 0x06, | ||
400 | 0x20, 0x10, 0x0f, 0x01, 0x86, 0x10, 0x08, 0x80, | ||
401 | 0x48, 0x01, 0x40, 0x0a, 0x00, 0x50, 0x02, 0x80, | ||
402 | 0x14, 0x00, 0x90, 0x08, 0x80, 0x43, 0x0c, 0x07, | ||
403 | 0x80, 0x7f, 0x82, 0x02, 0x10, 0x08, 0x80, 0x44, | ||
404 | 0x02, 0x20, 0x11, 0x01, 0x0f, 0xf0, 0x40, 0x02, | ||
405 | 0x00, 0x10, 0x00, 0x80, 0x04, 0x00, 0x20, 0x00, | ||
406 | 0x0f, 0x01, 0x86, 0x10, 0x08, 0x80, 0x48, 0x01, | ||
407 | 0x40, 0x0a, 0x00, 0x50, 0x02, 0x80, 0x14, 0x10, | ||
408 | 0x90, 0x48, 0x81, 0x43, 0x0c, 0x07, 0x90, 0x7f, | ||
409 | 0x82, 0x02, 0x10, 0x08, 0x80, 0x44, 0x02, 0x20, | ||
410 | 0x21, 0xfe, 0x08, 0x20, 0x40, 0x82, 0x04, 0x10, | ||
411 | 0x10, 0x80, 0x84, 0x02, 0x20, 0x10, 0x1f, 0x81, | ||
412 | 0x02, 0x10, 0x08, 0x80, 0x44, 0x00, 0x10, 0x00, | ||
413 | 0x70, 0x00, 0x70, 0x00, 0x40, 0x01, 0x10, 0x08, | ||
414 | 0x80, 0x42, 0x04, 0x0f, 0xc0, 0x7f, 0xf0, 0x10, | ||
415 | 0x00, 0x80, 0x04, 0x00, 0x20, 0x01, 0x00, 0x08, | ||
416 | 0x00, 0x40, 0x02, 0x00, 0x10, 0x00, 0x80, 0x04, | ||
417 | 0x00, 0x20, 0x01, 0x00, 0x40, 0x22, 0x01, 0x10, | ||
418 | 0x08, 0x80, 0x44, 0x02, 0x20, 0x11, 0x00, 0x88, | ||
419 | 0x04, 0x40, 0x22, 0x01, 0x08, 0x10, 0x40, 0x81, | ||
420 | 0x08, 0x07, 0x80, 0x40, 0x12, 0x00, 0x88, 0x08, | ||
421 | 0x40, 0x42, 0x02, 0x08, 0x20, 0x41, 0x01, 0x10, | ||
422 | 0x08, 0x80, 0x44, 0x01, 0x40, 0x0a, 0x00, 0x20, | ||
423 | 0x01, 0x00, 0x82, 0x0c, 0x10, 0x60, 0x82, 0x8a, | ||
424 | 0x24, 0x51, 0x22, 0x89, 0x14, 0x45, 0x14, 0x28, | ||
425 | 0xa1, 0x45, 0x0a, 0x28, 0x20, 0x81, 0x04, 0x08, | ||
426 | 0x20, 0x40, 0x11, 0x01, 0x04, 0x10, 0x20, 0x80, | ||
427 | 0x88, 0x02, 0x80, 0x08, 0x00, 0x40, 0x05, 0x00, | ||
428 | 0x44, 0x04, 0x10, 0x20, 0x82, 0x02, 0x20, 0x08, | ||
429 | 0x40, 0x11, 0x01, 0x08, 0x08, 0x20, 0x80, 0x88, | ||
430 | 0x04, 0x40, 0x14, 0x00, 0x40, 0x02, 0x00, 0x10, | ||
431 | 0x00, 0x80, 0x04, 0x00, 0x20, 0x01, 0x00, 0x7f, | ||
432 | 0xe0, 0x01, 0x00, 0x10, 0x01, 0x00, 0x08, 0x00, | ||
433 | 0x80, 0x08, 0x00, 0x80, 0x08, 0x00, 0x80, 0x04, | ||
434 | 0x00, 0x40, 0x04, 0x00, 0x3f, 0xf0, 0x0f, 0x80, | ||
435 | 0x82, 0x08, 0x08, 0x40, 0x42, 0x02, 0x10, 0x10, | ||
436 | 0x80, 0x84, 0x04, 0x20, 0x21, 0x01, 0x08, 0x08, | ||
437 | 0x40, 0x41, 0x04, 0x07, 0xc0, 0x02, 0x00, 0x30, | ||
438 | 0x02, 0x80, 0x04, 0x00, 0x20, 0x01, 0x00, 0x08, | ||
439 | 0x00, 0x40, 0x02, 0x00, 0x10, 0x00, 0x80, 0x04, | ||
440 | 0x00, 0x20, 0x01, 0x00, 0x0f, 0x00, 0x84, 0x08, | ||
441 | 0x10, 0x40, 0x80, 0x04, 0x00, 0x20, 0x02, 0x00, | ||
442 | 0x20, 0x02, 0x00, 0x20, 0x02, 0x00, 0x20, 0x02, | ||
443 | 0x00, 0x1f, 0xe0, 0x0f, 0x00, 0x84, 0x08, 0x10, | ||
444 | 0x40, 0x80, 0x04, 0x00, 0x40, 0x1c, 0x00, 0x10, | ||
445 | 0x00, 0x40, 0x02, 0x08, 0x10, 0x40, 0x81, 0x08, | ||
446 | 0x07, 0x80, 0x01, 0x00, 0x18, 0x00, 0xc0, 0x0a, | ||
447 | 0x00, 0x90, 0x04, 0x80, 0x44, 0x04, 0x20, 0x21, | ||
448 | 0x02, 0x08, 0x1f, 0xf8, 0x02, 0x00, 0x10, 0x00, | ||
449 | 0x80, 0x1f, 0x81, 0x00, 0x08, 0x00, 0x40, 0x02, | ||
450 | 0x00, 0x17, 0x80, 0xc2, 0x04, 0x08, 0x00, 0x40, | ||
451 | 0x02, 0x08, 0x10, 0x40, 0x81, 0x08, 0x07, 0x80, | ||
452 | 0x0f, 0x00, 0x84, 0x08, 0x10, 0x40, 0x82, 0x00, | ||
453 | 0x10, 0x00, 0xbc, 0x06, 0x10, 0x20, 0x41, 0x02, | ||
454 | 0x08, 0x10, 0x40, 0x81, 0x08, 0x07, 0x80, 0x3f, | ||
455 | 0xc0, 0x02, 0x00, 0x20, 0x01, 0x00, 0x10, 0x00, | ||
456 | 0x80, 0x04, 0x00, 0x40, 0x02, 0x00, 0x10, 0x01, | ||
457 | 0x00, 0x08, 0x00, 0x40, 0x02, 0x00, 0x0f, 0x00, | ||
458 | 0x84, 0x08, 0x10, 0x40, 0x82, 0x04, 0x08, 0x40, | ||
459 | 0x3c, 0x02, 0x10, 0x20, 0x41, 0x02, 0x08, 0x10, | ||
460 | 0x40, 0x81, 0x08, 0x07, 0x80, 0x0f, 0x00, 0x84, | ||
461 | 0x08, 0x10, 0x40, 0x82, 0x04, 0x10, 0x20, 0x43, | ||
462 | 0x01, 0xe8, 0x00, 0x40, 0x02, 0x08, 0x10, 0x40, | ||
463 | 0x81, 0x08, 0x07, 0x80, 0x02, 0x00, 0x10, 0x00, | ||
464 | 0x80, 0x04, 0x00, 0x20, 0x01, 0x00, 0x08, 0x00, | ||
465 | 0x40, 0x02, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, | ||
466 | 0x20, 0x01, 0x00, 0xd8, 0x06, 0xc0, 0x12, 0x01, | ||
467 | 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
468 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
469 | 0x00, 0x00, 0x04, 0x40, 0x22, 0x01, 0x10, 0x08, | ||
470 | 0x87, 0xff, 0x04, 0x40, 0x22, 0x01, 0x10, 0x08, | ||
471 | 0x83, 0xff, 0x84, 0x40, 0x22, 0x01, 0x10, 0x08, | ||
472 | 0x80, 0xc0, 0x06, 0x00, 0x10, 0x01, 0x00, 0x00, | ||
473 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
474 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
475 | 0x00, 0x00, 0x00, 0x00, 0x80, 0x44, 0x41, 0x24, | ||
476 | 0x05, 0x40, 0x1c, 0x00, 0x40, 0x07, 0x00, 0x54, | ||
477 | 0x04, 0x90, 0x44, 0x40, 0x20, 0x00, 0x00, 0x00, | ||
478 | 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x20, 0x01, | ||
479 | 0x00, 0x08, 0x0f, 0xfe, 0x02, 0x00, 0x10, 0x00, | ||
480 | 0x80, 0x04, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, | ||
481 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
482 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x01, | ||
483 | 0x80, 0x04, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, | ||
484 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
485 | 0x0f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
486 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
487 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
488 | 0x00, 0x00, 0x00, 0x00, 0x30, 0x01, 0x80, 0x00, | ||
489 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x04, | ||
490 | 0x00, 0x40, 0x04, 0x00, 0x40, 0x04, 0x00, 0x40, | ||
491 | 0x04, 0x00, 0x40, 0x04, 0x00, 0x40, 0x04, 0x00, | ||
492 | 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, | ||
493 | 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
494 | 0x00, 0x00, 0x01, 0x80, 0x0c, 0x00, 0x00, 0x00, | ||
495 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
496 | 0x00, 0x3f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x03, | ||
497 | 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
498 | 0x07, 0x00, 0x44, 0x04, 0x10, 0x20, 0x80, 0x04, | ||
499 | 0x00, 0x40, 0x04, 0x00, 0x40, 0x02, 0x00, 0x10, | ||
500 | 0x00, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x07, | ||
501 | 0x00, 0xc6, 0x08, 0x08, 0x80, 0x24, 0x31, 0x42, | ||
502 | 0x4a, 0x22, 0x51, 0x22, 0x89, 0x22, 0x36, 0x10, | ||
503 | 0x02, 0x40, 0x21, 0x86, 0x03, 0xc0, 0x00, 0x00, | ||
504 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
505 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
506 | }; | ||
diff --git a/tools/makerom/src/main.c b/tools/makerom/src/main.c new file mode 100644 index 0000000..bce8709 --- /dev/null +++ b/tools/makerom/src/main.c | |||
@@ -0,0 +1,188 @@ | |||
1 | #include <getopt.h> | ||
2 | #include <stdio.h> | ||
3 | #include <stdlib.h> | ||
4 | #include <string.h> | ||
5 | |||
6 | |||
7 | #include "types.h" | ||
8 | #include "bootdata.c" | ||
9 | |||
10 | #define CHECKSUM_START 0x00001000 | ||
11 | #define CHECKSUM_LENGTH 0x00100000 | ||
12 | |||
13 | #define MAX(A,B) (A) < (B) ? (B) : (A) | ||
14 | |||
15 | typedef struct Bytes { | ||
16 | u8 *data; | ||
17 | size_t len; | ||
18 | } Bytes; | ||
19 | |||
20 | typedef struct Checksum { | ||
21 | union { | ||
22 | u64 crc; | ||
23 | u8 data[8]; | ||
24 | }; | ||
25 | } Checksum; | ||
26 | |||
27 | Bytes | ||
28 | read_file(FILE *file) { | ||
29 | Bytes bytes = {0}; | ||
30 | |||
31 | // Get file length. | ||
32 | fseek(file, 0, SEEK_END); | ||
33 | bytes.len = ftell(file); | ||
34 | bytes.len = MAX(bytes.len, CHECKSUM_START + CHECKSUM_LENGTH); | ||
35 | |||
36 | // Allocate memory, ensuring we have a minimum size for checksum purposes. | ||
37 | bytes.data = calloc(1, bytes.len); | ||
38 | |||
39 | // Copy file contents to memory. | ||
40 | fseek(file, 0, SEEK_SET); | ||
41 | fread(bytes.data, 1, bytes.len, file); | ||
42 | return bytes; | ||
43 | } | ||
44 | |||
45 | u32 | ||
46 | read_big_endian(u8 *data) { | ||
47 | return (data[3] << 0) | | ||
48 | (data[2] << 8) | | ||
49 | (data[1] << 16) | | ||
50 | (data[0] << 24); | ||
51 | } | ||
52 | |||
53 | u32 | ||
54 | rol(u32 x, u32 n) { | ||
55 | return (x << n) | (x >> (32 - n)); | ||
56 | } | ||
57 | |||
58 | Checksum | ||
59 | calculate_crc(Bytes bytes) { | ||
60 | Checksum checksum = {0}; | ||
61 | u32 t1 = 0xF8CA4DDC; | ||
62 | u32 t2 = 0xF8CA4DDC; | ||
63 | u32 t3 = 0xF8CA4DDC; | ||
64 | u32 t4 = 0xF8CA4DDC; | ||
65 | u32 t5 = 0xF8CA4DDC; | ||
66 | u32 t6 = 0xF8CA4DDC; | ||
67 | for (size_t i = CHECKSUM_START; i < (CHECKSUM_START + CHECKSUM_LENGTH); i += 4) { | ||
68 | u32 num = read_big_endian(&bytes.data[i]); | ||
69 | if ((t6 + num) < t6) { | ||
70 | t4++; | ||
71 | } | ||
72 | t6 += num; | ||
73 | t3 ^= num; | ||
74 | u32 r = rol(num, (num & 0x1F)); | ||
75 | t5 += r; | ||
76 | if (t2 > num) { | ||
77 | t2 ^= r; | ||
78 | } else { | ||
79 | t2 ^= t6 ^ num; | ||
80 | } | ||
81 | t1 += t5 ^ num; | ||
82 | } | ||
83 | u64 upper = t5 ^ t2 ^ t1; | ||
84 | u64 lower = t6 ^ t4 ^ t3; | ||
85 | upper = read_big_endian((u8*)&upper); | ||
86 | lower = read_big_endian((u8*)&lower); | ||
87 | checksum.crc = upper << 32 | lower; | ||
88 | return checksum; | ||
89 | } | ||
90 | |||
91 | void | ||
92 | print_usage(void) { | ||
93 | printf("Usage: %s [options] <filename>\n", BIN_NAME); | ||
94 | printf("\n"); | ||
95 | printf("\t-o <out_file.c> Path to the output file. If blank, stdout will be used.\n"); | ||
96 | printf("\t-v Verbose.\n"); | ||
97 | printf("\t-h Prints usage.\n"); | ||
98 | printf("\n"); | ||
99 | } | ||
100 | |||
101 | int main(int argc, char *argv[]) { | ||
102 | FILE *in_file = stdin; | ||
103 | FILE *out_file = stdout; | ||
104 | char *in_file_path = NULL; | ||
105 | char *out_file_path = NULL; | ||
106 | bool verbose = false; | ||
107 | |||
108 | // Handle arguments and flags. | ||
109 | int option; | ||
110 | while ((option = getopt(argc, argv, "hvo:")) != -1) { | ||
111 | switch (option) { | ||
112 | case 'h': { | ||
113 | print_usage(); | ||
114 | return EXIT_SUCCESS; | ||
115 | } break; | ||
116 | case 'o': { | ||
117 | out_file_path = optarg; | ||
118 | } break; | ||
119 | case 'v': { | ||
120 | verbose = true; | ||
121 | } break; | ||
122 | default: { | ||
123 | print_usage(); | ||
124 | return EXIT_FAILURE; | ||
125 | } break; | ||
126 | } | ||
127 | } | ||
128 | in_file_path = argv[optind]; | ||
129 | |||
130 | // Open source file. | ||
131 | if (in_file_path == NULL) { | ||
132 | in_file = stdin; | ||
133 | } else { | ||
134 | in_file = fopen(in_file_path, "rb"); | ||
135 | if (in_file == NULL) { | ||
136 | fprintf(stderr, "%s: can't open input file: %s\n", | ||
137 | BIN_NAME, in_file_path); | ||
138 | return EXIT_FAILURE; | ||
139 | } | ||
140 | } | ||
141 | |||
142 | // Open destination file. | ||
143 | if (out_file_path == NULL) { | ||
144 | out_file = stdout; | ||
145 | } else { | ||
146 | out_file = fopen(out_file_path, "wb"); | ||
147 | if (out_file == NULL) { | ||
148 | fprintf(stderr, "%s: can't open output file: %s\n", | ||
149 | BIN_NAME, out_file_path); | ||
150 | return EXIT_FAILURE; | ||
151 | } | ||
152 | } | ||
153 | |||
154 | // Read source file into memory. | ||
155 | Bytes bytes = read_file(in_file); | ||
156 | |||
157 | // Write bootdata at offset 0x40 of dst file. | ||
158 | memcpy(bytes.data + 0x40, bootdata, sizeof(bootdata)); | ||
159 | |||
160 | // Calculate CRC after bootdata was added on the dst file. | ||
161 | Checksum checksum = calculate_crc(bytes); | ||
162 | if (verbose) { | ||
163 | printf("Checksum: 0x%02X%02X%02X%02X%02X%02X%02X%02X\n", | ||
164 | checksum.data[0], | ||
165 | checksum.data[1], | ||
166 | checksum.data[2], | ||
167 | checksum.data[3], | ||
168 | checksum.data[4], | ||
169 | checksum.data[5], | ||
170 | checksum.data[6], | ||
171 | checksum.data[7]); | ||
172 | } | ||
173 | |||
174 | // Write crc bytes at 0x10 offset on the dst file. | ||
175 | memcpy(bytes.data + 0x10, checksum.data, 8 * sizeof(u8)); | ||
176 | |||
177 | // Save the output file. | ||
178 | fwrite(bytes.data, 1, bytes.len, out_file); | ||
179 | |||
180 | // Cleanup. | ||
181 | if (in_file != stdin) { | ||
182 | fclose(in_file); | ||
183 | } | ||
184 | if (out_file != stdout) { | ||
185 | fclose(out_file); | ||
186 | } | ||
187 | return EXIT_SUCCESS; | ||
188 | } | ||
diff --git a/tools/makerom/src/types.h b/tools/makerom/src/types.h new file mode 100644 index 0000000..ef9a47a --- /dev/null +++ b/tools/makerom/src/types.h | |||
@@ -0,0 +1,30 @@ | |||
1 | #ifndef _COMMON_H | ||
2 | #define _COMMON_H | ||
3 | |||
4 | #include <stdbool.h> | ||
5 | #include <stddef.h> | ||
6 | #include <stdint.h> | ||
7 | |||
8 | typedef uint8_t u8; | ||
9 | typedef uint16_t u16; | ||
10 | typedef uint32_t u32; | ||
11 | typedef uint64_t u64; | ||
12 | typedef int8_t s8; | ||
13 | typedef int16_t s16; | ||
14 | typedef int32_t s32; | ||
15 | typedef int64_t s64; | ||
16 | typedef volatile u8 vu8; | ||
17 | typedef volatile u16 vu16; | ||
18 | typedef volatile u32 vu32; | ||
19 | typedef volatile u64 vu64; | ||
20 | typedef volatile s8 vs8; | ||
21 | typedef volatile s16 vs16; | ||
22 | typedef volatile s32 vs32; | ||
23 | typedef volatile s64 vs64; | ||
24 | |||
25 | #define KB(N) ((u64)(N) * 1024) | ||
26 | #define MB(N) ((u64)KB(N) * 1024) | ||
27 | #define GB(N) ((u64)MB(N) * 1024) | ||
28 | #define TB(N) ((u64)GB(N) * 1024) | ||
29 | |||
30 | #endif // _COMMON_H | ||