Mercurial > hg > dmlib
annotate tools/objlink.c @ 2561:56510bd4c66b
Cleanup.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Sun, 27 Feb 2022 17:58:33 +0200 |
parents | ac2e60f4bfc3 |
children | 5c9056f381ae |
rev | line source |
---|---|
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1 /* |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
2 * objlink - Link files (RAW and PRG) into one PRG object |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
3 * Programmed and designed by Matti 'ccr' Hamalainen |
2556 | 4 * (C) Copyright 2002-2022 Tecnic Software productions (TNSP) |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
5 * |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
6 * Please read file 'COPYING' for information on license and distribution. |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
7 */ |
1432
a9516570cc26
Improve build, so that we can build the tools and tests with minimal
Matti Hamalainen <ccr@tnsp.org>
parents:
1431
diff
changeset
|
8 #include "dmtool.h" |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
9 #include "dmlib.h" |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
10 #include "dmargs.h" |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
11 #include "dmfile.h" |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
12 |
2411 | 13 |
1681 | 14 #define SET_MAX_FILENAMES (128) |
15 #define SET_MAX_MEMBLOCKS (128) | |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
16 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
17 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
18 /* Typedefs |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
19 */ |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
20 typedef struct |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
21 { |
864 | 22 int start, end; // Start and end address |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
23 int type; // Type |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
24 char *name; // Name of the block |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
25 int placement; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
26 } DMMemBlock; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
27 |
2411 | 28 |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
29 typedef struct |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
30 { |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
31 char *name; // Description of memory model |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
32 char *desc; |
2553 | 33 int size; // Total addressable memory size |
34 int nmemBlocks; // Defined memory areas | |
1681 | 35 DMMemBlock memBlocks[SET_MAX_MEMBLOCKS]; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
36 } DMMemModel; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
37 |
2411 | 38 |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
39 typedef struct |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
40 { |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
41 char *filename; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
42 int type; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
43 int placement; |
864 | 44 int addr; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
45 } DMSourceFile; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
46 |
2411 | 47 |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
48 // Source file type |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
49 enum |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
50 { |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
51 STYPE_RAW = 1, |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
52 STYPE_PRG, |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
53 STYPE_PRGA |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
54 }; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
55 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
56 // How to determine block placement / address |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
57 enum |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
58 { |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
59 PLACE_STATIC = 1, // Already known |
2553 | 60 PLACE_ARGUMENT, // Commandline argument |
61 PLACE_FILE, // From file | |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
62 }; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
63 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
64 enum |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
65 { |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
66 FMT_GENERIC = 1, |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
67 FMT_PLAIN, |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
68 FMT_DECIMAL |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
69 }; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
70 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
71 enum |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
72 { |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
73 MTYPE_NONE = 0, |
2555
6249aa494e83
Rename "ROM/WT" blocks to just "WT", move the description to --help.
Matti Hamalainen <ccr@tnsp.org>
parents:
2554
diff
changeset
|
74 MTYPE_ROM, // ROM |
6249aa494e83
Rename "ROM/WT" blocks to just "WT", move the description to --help.
Matti Hamalainen <ccr@tnsp.org>
parents:
2554
diff
changeset
|
75 MTYPE_WT, // Write to RAM through ROM |
6249aa494e83
Rename "ROM/WT" blocks to just "WT", move the description to --help.
Matti Hamalainen <ccr@tnsp.org>
parents:
2554
diff
changeset
|
76 MTYPE_IO, // I/O lines |
6249aa494e83
Rename "ROM/WT" blocks to just "WT", move the description to --help.
Matti Hamalainen <ccr@tnsp.org>
parents:
2554
diff
changeset
|
77 MTYPE_RES // RESERVED |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
78 }; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
79 |
501
d13d8770477a
Add new -L option for forcing loading address on the destination file, or
Matti Hamalainen <ccr@tnsp.org>
parents:
500
diff
changeset
|
80 enum |
d13d8770477a
Add new -L option for forcing loading address on the destination file, or
Matti Hamalainen <ccr@tnsp.org>
parents:
500
diff
changeset
|
81 { |
d13d8770477a
Add new -L option for forcing loading address on the destination file, or
Matti Hamalainen <ccr@tnsp.org>
parents:
500
diff
changeset
|
82 LA_NONE = -2, |
d13d8770477a
Add new -L option for forcing loading address on the destination file, or
Matti Hamalainen <ccr@tnsp.org>
parents:
500
diff
changeset
|
83 LA_AUTO = -1 |
d13d8770477a
Add new -L option for forcing loading address on the destination file, or
Matti Hamalainen <ccr@tnsp.org>
parents:
500
diff
changeset
|
84 }; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
85 |
2411 | 86 |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
87 /* Memory models |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
88 */ |
2411 | 89 const DMMemModel memoryModels[] = |
90 { | |
91 { "C64 unrestricted", "$01 = $34", | |
92 64 * 1024, | |
93 0, | |
94 { | |
2555
6249aa494e83
Rename "ROM/WT" blocks to just "WT", move the description to --help.
Matti Hamalainen <ccr@tnsp.org>
parents:
2554
diff
changeset
|
95 { 0x0000, 0x0000, 0 , NULL , 0 } |
2411 | 96 } |
97 }, | |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
98 |
2411 | 99 { "C64 normal (IO+Basic+Kernal)", "$01 = $37", |
100 64 * 1024, | |
101 3, | |
102 { | |
2555
6249aa494e83
Rename "ROM/WT" blocks to just "WT", move the description to --help.
Matti Hamalainen <ccr@tnsp.org>
parents:
2554
diff
changeset
|
103 { 0xA000, 0xBFFF, MTYPE_WT , "Basic ROM" , PLACE_STATIC }, |
6249aa494e83
Rename "ROM/WT" blocks to just "WT", move the description to --help.
Matti Hamalainen <ccr@tnsp.org>
parents:
2554
diff
changeset
|
104 { 0xD000, 0xDFFF, MTYPE_IO , "I/O" , PLACE_STATIC }, |
6249aa494e83
Rename "ROM/WT" blocks to just "WT", move the description to --help.
Matti Hamalainen <ccr@tnsp.org>
parents:
2554
diff
changeset
|
105 { 0xE000, 0xFFFF, MTYPE_WT , "Kernal ROM" , PLACE_STATIC }, |
2411 | 106 } |
107 }, | |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
108 |
2411 | 109 { "C64 modified (IO+Kernal)", "$01 = $36", |
110 64 * 1024, | |
111 2, | |
112 { | |
2555
6249aa494e83
Rename "ROM/WT" blocks to just "WT", move the description to --help.
Matti Hamalainen <ccr@tnsp.org>
parents:
2554
diff
changeset
|
113 { 0xD000, 0xDFFF, MTYPE_IO , "I/O" , PLACE_STATIC }, |
6249aa494e83
Rename "ROM/WT" blocks to just "WT", move the description to --help.
Matti Hamalainen <ccr@tnsp.org>
parents:
2554
diff
changeset
|
114 { 0xE000, 0xFFFF, MTYPE_WT , "Kernal ROM" , PLACE_STATIC }, |
2411 | 115 } |
116 }, | |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
117 |
2411 | 118 { "C64 modified (IO only)", "$01 = $35", |
119 64 * 1024, | |
120 1, | |
121 { | |
2555
6249aa494e83
Rename "ROM/WT" blocks to just "WT", move the description to --help.
Matti Hamalainen <ccr@tnsp.org>
parents:
2554
diff
changeset
|
122 { 0xD000, 0xDFFF, MTYPE_IO , "I/O" , PLACE_STATIC }, |
2411 | 123 } |
124 }, | |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
125 |
2411 | 126 { "C64 modified (Char+Kernal+Basic)", "$01 = $33", |
127 64 * 1024, | |
128 3, | |
129 { | |
2555
6249aa494e83
Rename "ROM/WT" blocks to just "WT", move the description to --help.
Matti Hamalainen <ccr@tnsp.org>
parents:
2554
diff
changeset
|
130 { 0xA000, 0xBFFF, MTYPE_WT , "Basic ROM" , PLACE_STATIC }, |
6249aa494e83
Rename "ROM/WT" blocks to just "WT", move the description to --help.
Matti Hamalainen <ccr@tnsp.org>
parents:
2554
diff
changeset
|
131 { 0xD000, 0xDFFF, MTYPE_ROM , "Char ROM" , PLACE_STATIC }, |
6249aa494e83
Rename "ROM/WT" blocks to just "WT", move the description to --help.
Matti Hamalainen <ccr@tnsp.org>
parents:
2554
diff
changeset
|
132 { 0xE000, 0xFFFF, MTYPE_WT , "Kernal ROM" , PLACE_STATIC }, |
2411 | 133 } |
134 }, | |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
135 }; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
136 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
137 static const int nmemoryModels = sizeof(memoryModels) / sizeof(memoryModels[0]); |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
138 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
139 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
140 /* Global variables |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
141 */ |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
142 int nsrcFiles = 0; // Number of source files |
1681 | 143 DMSourceFile srcFiles[SET_MAX_FILENAMES]; // Source file names |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
144 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
145 int nmemBlocks = 0; |
1681 | 146 DMMemBlock memBlocks[SET_MAX_FILENAMES]; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
147 |
2411 | 148 char *optDestName = NULL; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
149 char *optLinkFileName = NULL; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
150 int optLinkFileFormat = FMT_GENERIC; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
151 BOOL optDescribe = FALSE, |
2411 | 152 optAllowOverlap = FALSE, |
153 optCropOutput = FALSE; | |
154 unsigned int optCropStart, optCropEnd; | |
155 unsigned int optInitValue = 0; | |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
156 int optInitValueType = 1; |
2411 | 157 int optLoadAddress = LA_AUTO; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
158 int optMemModel = 0; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
159 const DMMemModel *memModel = NULL; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
160 Uint8 *memory = NULL; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
161 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
162 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
163 /* Arguments |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
164 */ |
860
daebbf28953d
The argument handling API in dmargs* was synced with th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
830
diff
changeset
|
165 static const DMOptArg optList[] = |
daebbf28953d
The argument handling API in dmargs* was synced with th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
830
diff
changeset
|
166 { |
2410
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
167 { 0, '?', "help" , "Show this help", OPT_NONE }, |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
168 { 1, 0, "license" , "Print out this program's license agreement", OPT_NONE }, |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
169 { 2, 'v', "verbose" , "Be more verbose", OPT_NONE }, |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
170 |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
171 { 10, 'r', "input-raw" , "RAW input: -r <file>:<addr>", OPT_ARGREQ }, |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
172 { 12, 'p', "input-prg" , "PRG input: -p <file>[:<addr>]", OPT_ARGREQ }, |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
173 { 14, 's', "section" , "Reserved section: -s <start>-<end>[,name] or <start>:<len>[,name]", OPT_ARGREQ }, |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
174 { 16, 'o', "output" , "Specify output file, -o <file>", OPT_ARGREQ }, |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
175 { 18, 'O', "overlap" , "Allow overlapping memory areas", OPT_NONE }, |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
176 { 20, 'm', "model" , "Set memory model", OPT_ARGREQ }, |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
177 { 22, 'l', "link-file" , "Output addresses and labels into file", OPT_ARGREQ }, |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
178 { 24, 'f', "format" , "Format of link-file: (g)eneric, (p)lain, (d)ecimal", OPT_ARGREQ }, |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
179 { 26, 'i', "init-value" , "Initialize memory with: -i <byte/word/dword>:[bwd]", OPT_ARGREQ }, |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
180 { 28, 'd', "describe" , "Output ASCII memory map description", OPT_NONE }, |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
181 { 30, 'c', "crop" , "Crop output file to: -c <start>-<end> or <start>:<len>", OPT_ARGREQ }, |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
182 { 32, 'L', "load-address" , "Set output file load address (or 'none' for 'raw' output)", OPT_ARGREQ }, |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
183 }; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
184 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
185 static const int optListN = sizeof(optList) / sizeof(optList[0]); |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
186 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
187 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
188 void argShowHelp() |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
189 { |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
190 dmPrintBanner(stdout, dmProgName, "[options]"); |
2402
b7cd5dd0b82e
Merge one more change from th-libs args processing.
Matti Hamalainen <ccr@tnsp.org>
parents:
2384
diff
changeset
|
191 dmArgsPrintHelp(stdout, optList, optListN, 0, 80 - 2); |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
192 |
2553 | 193 fprintf(stdout, |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
194 "\n" |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
195 "Each numeric argument can be prefixed with $ or 0x for hexadecimal values.\n" |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
196 "NOTICE! -p filename:<addr> will ignore load address and use <addr> instead!\n" |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
197 "\n" |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
198 "Available memory models:\n"); |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
199 |
1678 | 200 for (int i = 0; i < nmemoryModels; i++) |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
201 { |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
202 const DMMemModel *m = &memoryModels[i]; |
2553 | 203 fprintf(stdout, |
204 " %d = %-40s [%s] (%d kB)\n", | |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
205 i, m->name, m->desc, m->size / 1024); |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
206 } |
2555
6249aa494e83
Rename "ROM/WT" blocks to just "WT", move the description to --help.
Matti Hamalainen <ccr@tnsp.org>
parents:
2554
diff
changeset
|
207 |
6249aa494e83
Rename "ROM/WT" blocks to just "WT", move the description to --help.
Matti Hamalainen <ccr@tnsp.org>
parents:
2554
diff
changeset
|
208 fprintf(stdout, |
6249aa494e83
Rename "ROM/WT" blocks to just "WT", move the description to --help.
Matti Hamalainen <ccr@tnsp.org>
parents:
2554
diff
changeset
|
209 "\n" |
6249aa494e83
Rename "ROM/WT" blocks to just "WT", move the description to --help.
Matti Hamalainen <ccr@tnsp.org>
parents:
2554
diff
changeset
|
210 "Memory block types:\n" |
6249aa494e83
Rename "ROM/WT" blocks to just "WT", move the description to --help.
Matti Hamalainen <ccr@tnsp.org>
parents:
2554
diff
changeset
|
211 " NC = Not Connected\n" |
6249aa494e83
Rename "ROM/WT" blocks to just "WT", move the description to --help.
Matti Hamalainen <ccr@tnsp.org>
parents:
2554
diff
changeset
|
212 " RSVD = Reserved\n" |
6249aa494e83
Rename "ROM/WT" blocks to just "WT", move the description to --help.
Matti Hamalainen <ccr@tnsp.org>
parents:
2554
diff
changeset
|
213 " WT = RAM under 'write-through' ROM\n" |
6249aa494e83
Rename "ROM/WT" blocks to just "WT", move the description to --help.
Matti Hamalainen <ccr@tnsp.org>
parents:
2554
diff
changeset
|
214 "\n" |
6249aa494e83
Rename "ROM/WT" blocks to just "WT", move the description to --help.
Matti Hamalainen <ccr@tnsp.org>
parents:
2554
diff
changeset
|
215 ); |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
216 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
217 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
218 |
2559 | 219 off_t dmGetFileSize(FILE *fh) |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
220 { |
2559 | 221 off_t len, pos = ftell(fh); |
222 fseeko(fh, 0, SEEK_END); | |
223 len = ftell(fh); | |
224 fseek(fh, pos, SEEK_SET); | |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
225 return len; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
226 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
227 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
228 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
229 /* Memory block handling |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
230 */ |
2554 | 231 int dmReserveMemBlock(int startAddr, int endAddr, const char *blockName, int blockType) |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
232 { |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
233 if (startAddr > endAddr) |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
234 { |
2554 | 235 return dmError(DMERR_INVALID_ARGS, |
236 "ERROR! Block '%s' has startAddr=$%.4x > endAddr=$%.4x!\n", | |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
237 blockName, startAddr, endAddr); |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
238 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
239 |
1681 | 240 if (nmemBlocks < SET_MAX_FILENAMES) |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
241 { |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
242 memBlocks[nmemBlocks].start = startAddr; |
497
b02f1bfce53b
Improve and clean up section parsing support.
Matti Hamalainen <ccr@tnsp.org>
parents:
486
diff
changeset
|
243 memBlocks[nmemBlocks].end = endAddr; |
b02f1bfce53b
Improve and clean up section parsing support.
Matti Hamalainen <ccr@tnsp.org>
parents:
486
diff
changeset
|
244 memBlocks[nmemBlocks].name = dm_strdup(blockName); |
b02f1bfce53b
Improve and clean up section parsing support.
Matti Hamalainen <ccr@tnsp.org>
parents:
486
diff
changeset
|
245 memBlocks[nmemBlocks].type = blockType; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
246 nmemBlocks++; |
2554 | 247 return DMERR_OK; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
248 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
249 else |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
250 { |
2554 | 251 return dmError(DMERR_BOUNDS, |
252 "Maximum number of memBlock definitions (%d) exceeded!\n", | |
1681 | 253 SET_MAX_FILENAMES); |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
254 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
255 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
256 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
257 |
1679
7b0c76cd7686
Clean up and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
1678
diff
changeset
|
258 int dmCompareMemBlock(const void *cva, const void *cvb) |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
259 { |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
260 const DMMemBlock *a = cva, *b = cvb; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
261 return a->start - b->start; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
262 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
263 |
484
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
264 |
871
fc272f5f2d15
Make value type of dmGetIntVal() unsigned.
Matti Hamalainen <ccr@tnsp.org>
parents:
864
diff
changeset
|
265 BOOL dmParseSection(const char *arg, unsigned int *sectStart, unsigned int *sectEnd, char **sectName, BOOL canHasName) |
484
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
266 { |
497
b02f1bfce53b
Improve and clean up section parsing support.
Matti Hamalainen <ccr@tnsp.org>
parents:
486
diff
changeset
|
267 char sectMode, *sep, *str, *namesep; |
871
fc272f5f2d15
Make value type of dmGetIntVal() unsigned.
Matti Hamalainen <ccr@tnsp.org>
parents:
864
diff
changeset
|
268 unsigned int tmpi; |
1679
7b0c76cd7686
Clean up and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
1678
diff
changeset
|
269 BOOL res = FALSE; |
484
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
270 |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
271 // Define reserved section |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
272 // Create a copy of the argument |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
273 if ((str = dm_strdup(arg)) == NULL) |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
274 { |
958
985225a93aeb
Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents:
871
diff
changeset
|
275 dmErrorMsg("Could not allocate temporary string!\n"); |
1679
7b0c76cd7686
Clean up and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
1678
diff
changeset
|
276 goto out; |
484
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
277 } |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
278 |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
279 // Get start address |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
280 if ((sep = strchr(str, '-')) == NULL && |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
281 (sep = strchr(str, ':')) == NULL) |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
282 { |
958
985225a93aeb
Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents:
871
diff
changeset
|
283 dmErrorMsg("Section definition '%s' invalid.\n", arg); |
1679
7b0c76cd7686
Clean up and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
1678
diff
changeset
|
284 goto out; |
484
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
285 } |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
286 sectMode = *sep; |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
287 *sep = 0; |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
288 |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
289 // Get value |
2004
161e731eb152
Improve dmGetIntVal() to accept an optional negative value boolean flag
Matti Hamalainen <ccr@tnsp.org>
parents:
1681
diff
changeset
|
290 if (!dmGetIntVal(str, sectStart, NULL)) |
484
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
291 { |
958
985225a93aeb
Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents:
871
diff
changeset
|
292 dmErrorMsg("Section start address '%s' in '%s' invalid.\n", str, arg); |
1679
7b0c76cd7686
Clean up and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
1678
diff
changeset
|
293 goto out; |
484
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
294 } |
1238 | 295 |
497
b02f1bfce53b
Improve and clean up section parsing support.
Matti Hamalainen <ccr@tnsp.org>
parents:
486
diff
changeset
|
296 // Check for name |
b02f1bfce53b
Improve and clean up section parsing support.
Matti Hamalainen <ccr@tnsp.org>
parents:
486
diff
changeset
|
297 namesep = strchr(sep + 1, ','); |
b02f1bfce53b
Improve and clean up section parsing support.
Matti Hamalainen <ccr@tnsp.org>
parents:
486
diff
changeset
|
298 if (canHasName && namesep != NULL) |
b02f1bfce53b
Improve and clean up section parsing support.
Matti Hamalainen <ccr@tnsp.org>
parents:
486
diff
changeset
|
299 { |
b02f1bfce53b
Improve and clean up section parsing support.
Matti Hamalainen <ccr@tnsp.org>
parents:
486
diff
changeset
|
300 *namesep = 0; |
b02f1bfce53b
Improve and clean up section parsing support.
Matti Hamalainen <ccr@tnsp.org>
parents:
486
diff
changeset
|
301 namesep++; |
b02f1bfce53b
Improve and clean up section parsing support.
Matti Hamalainen <ccr@tnsp.org>
parents:
486
diff
changeset
|
302 if (*namesep == 0) |
b02f1bfce53b
Improve and clean up section parsing support.
Matti Hamalainen <ccr@tnsp.org>
parents:
486
diff
changeset
|
303 { |
958
985225a93aeb
Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents:
871
diff
changeset
|
304 dmErrorMsg("Section definition '%s' name is empty. Either specify name or leave it out.\n", |
497
b02f1bfce53b
Improve and clean up section parsing support.
Matti Hamalainen <ccr@tnsp.org>
parents:
486
diff
changeset
|
305 arg); |
1679
7b0c76cd7686
Clean up and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
1678
diff
changeset
|
306 goto out; |
497
b02f1bfce53b
Improve and clean up section parsing support.
Matti Hamalainen <ccr@tnsp.org>
parents:
486
diff
changeset
|
307 } |
b02f1bfce53b
Improve and clean up section parsing support.
Matti Hamalainen <ccr@tnsp.org>
parents:
486
diff
changeset
|
308 *sectName = dm_strdup(namesep); |
b02f1bfce53b
Improve and clean up section parsing support.
Matti Hamalainen <ccr@tnsp.org>
parents:
486
diff
changeset
|
309 } |
b02f1bfce53b
Improve and clean up section parsing support.
Matti Hamalainen <ccr@tnsp.org>
parents:
486
diff
changeset
|
310 else |
b02f1bfce53b
Improve and clean up section parsing support.
Matti Hamalainen <ccr@tnsp.org>
parents:
486
diff
changeset
|
311 if (namesep != NULL) |
b02f1bfce53b
Improve and clean up section parsing support.
Matti Hamalainen <ccr@tnsp.org>
parents:
486
diff
changeset
|
312 { |
958
985225a93aeb
Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents:
871
diff
changeset
|
313 dmErrorMsg("Section definition does not allow a name, syntax error in '%s' at '%s'.\n", |
497
b02f1bfce53b
Improve and clean up section parsing support.
Matti Hamalainen <ccr@tnsp.org>
parents:
486
diff
changeset
|
314 arg, namesep); |
1679
7b0c76cd7686
Clean up and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
1678
diff
changeset
|
315 goto out; |
497
b02f1bfce53b
Improve and clean up section parsing support.
Matti Hamalainen <ccr@tnsp.org>
parents:
486
diff
changeset
|
316 } |
484
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
317 |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
318 // Get end address or length |
2004
161e731eb152
Improve dmGetIntVal() to accept an optional negative value boolean flag
Matti Hamalainen <ccr@tnsp.org>
parents:
1681
diff
changeset
|
319 if (!dmGetIntVal(sep + 1, &tmpi, NULL)) |
484
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
320 { |
958
985225a93aeb
Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents:
871
diff
changeset
|
321 dmErrorMsg("Section %s '%s' in '%s' invalid.\n", |
484
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
322 sectMode == '-' ? "end address" : "length", |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
323 sep + 1, arg); |
1679
7b0c76cd7686
Clean up and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
1678
diff
changeset
|
324 goto out; |
484
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
325 } |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
326 |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
327 if (sectMode == ':') |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
328 { |
497
b02f1bfce53b
Improve and clean up section parsing support.
Matti Hamalainen <ccr@tnsp.org>
parents:
486
diff
changeset
|
329 *sectEnd = *sectStart + tmpi - 1; |
484
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
330 } |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
331 else |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
332 { |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
333 if (tmpi < *sectStart) |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
334 { |
958
985225a93aeb
Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents:
871
diff
changeset
|
335 dmErrorMsg("Section start address > end address in '%s'.\n", |
484
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
336 arg); |
1679
7b0c76cd7686
Clean up and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
1678
diff
changeset
|
337 goto out; |
484
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
338 } |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
339 *sectEnd = tmpi; |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
340 } |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
341 |
1679
7b0c76cd7686
Clean up and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
1678
diff
changeset
|
342 res = TRUE; |
484
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
343 |
1679
7b0c76cd7686
Clean up and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
1678
diff
changeset
|
344 out: |
484
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
345 dmFree(str); |
1679
7b0c76cd7686
Clean up and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
1678
diff
changeset
|
346 return res; |
484
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
347 } |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
348 |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
349 |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
350 BOOL dmParseInputFile(char *arg, const int type1, const int type2, const char *desc, BOOL requireAddr) |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
351 { |
871
fc272f5f2d15
Make value type of dmGetIntVal() unsigned.
Matti Hamalainen <ccr@tnsp.org>
parents:
864
diff
changeset
|
352 unsigned int tmpi = 0; |
484
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
353 BOOL hasAddr = FALSE; |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
354 char *sep; |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
355 |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
356 if ((sep = strrchr(arg, ':')) != NULL) |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
357 { |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
358 *sep = 0; |
2004
161e731eb152
Improve dmGetIntVal() to accept an optional negative value boolean flag
Matti Hamalainen <ccr@tnsp.org>
parents:
1681
diff
changeset
|
359 if (!dmGetIntVal(sep + 1, &tmpi, NULL)) |
484
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
360 { |
958
985225a93aeb
Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents:
871
diff
changeset
|
361 dmErrorMsg("Invalid %s address '%s' specified for '%s'.\n", |
484
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
362 desc, sep + 1, arg); |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
363 return FALSE; |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
364 } |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
365 hasAddr = TRUE; |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
366 } |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
367 else |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
368 if (requireAddr) |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
369 { |
958
985225a93aeb
Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents:
871
diff
changeset
|
370 dmErrorMsg("No %s loading address specified for '%s'.\n", desc, arg); |
484
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
371 return FALSE; |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
372 } |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
373 |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
374 srcFiles[nsrcFiles].filename = arg; |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
375 srcFiles[nsrcFiles].type = hasAddr ? type1 : type2; |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
376 srcFiles[nsrcFiles].addr = tmpi; |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
377 nsrcFiles++; |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
378 return TRUE; |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
379 } |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
380 |
81b92a0e754b
Clean up and modularize parsing of some options (specifying sections).
Matti Hamalainen <ccr@tnsp.org>
parents:
407
diff
changeset
|
381 |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
382 BOOL argHandleOpt(const int optN, char *optArg, char *currArg) |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
383 { |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
384 |
2410
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
385 switch (optN) |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
386 { |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
387 case 0: |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
388 argShowHelp(); |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
389 exit(0); |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
390 break; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
391 |
2410
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
392 case 1: |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
393 dmPrintLicense(stdout); |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
394 exit(0); |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
395 break; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
396 |
2410
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
397 case 2: |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
398 dmVerbosity++; |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
399 break; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
400 |
2410
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
401 case 10: |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
402 // Add RAW |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
403 if (!dmParseInputFile(optArg, STYPE_RAW, STYPE_RAW, "RAW", TRUE)) |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
404 return FALSE; |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
405 break; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
406 |
2410
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
407 case 12: |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
408 // Add PRG |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
409 if (!dmParseInputFile(optArg, STYPE_PRGA, STYPE_PRG, "PRG", FALSE)) |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
410 return FALSE; |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
411 break; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
412 |
2410
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
413 case 14: |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
414 { |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
415 char *sectName = "Clear"; |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
416 unsigned int sectStart, sectEnd, sectLen; |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
417 if (!dmParseSection(optArg, §Start, §End, §Name, TRUE)) |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
418 return FALSE; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
419 |
2410
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
420 // Allocate memory block |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
421 sectLen = sectEnd - sectStart + 1; |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
422 dmMsg(1, "Reserve $%.4x - $%.4x ($%x, %d bytes) as '%s'\n", |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
423 sectStart, sectEnd, sectLen, sectLen, sectName); |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
424 |
2554 | 425 if (dmReserveMemBlock(sectStart, sectEnd, sectName, MTYPE_RES) != DMERR_OK) |
1238 | 426 return FALSE; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
427 } |
2410
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
428 break; |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
429 |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
430 case 16: |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
431 // Set output file name |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
432 optDestName = optArg; |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
433 break; |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
434 |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
435 case 18: |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
436 // Allow overlapping segments |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
437 optAllowOverlap = TRUE; |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
438 break; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
439 |
2410
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
440 case 20: |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
441 // Set memory model |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
442 optMemModel = atoi(optArg); |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
443 if (optMemModel < 0 || optMemModel >= nmemoryModels) |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
444 { |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
445 dmErrorMsg("Invalid memory model number %i!\n", optMemModel); |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
446 return FALSE; |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
447 } |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
448 break; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
449 |
2410
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
450 case 22: |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
451 // Linker file |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
452 optLinkFileName = optArg; |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
453 break; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
454 |
2410
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
455 case 24: |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
456 // Linker file format |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
457 switch (tolower(optArg[0])) |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
458 { |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
459 case 'g': |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
460 optLinkFileFormat = FMT_GENERIC; |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
461 break; |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
462 case 'p': |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
463 optLinkFileFormat = FMT_PLAIN; |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
464 break; |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
465 case 'd': |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
466 optLinkFileFormat = FMT_DECIMAL; |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
467 break; |
485
c1d5cccbf5b3
Implement output data cropping option -c, with which the memory area to be
Matti Hamalainen <ccr@tnsp.org>
parents:
484
diff
changeset
|
468 |
2410
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
469 default: |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
470 dmErrorMsg("Invalid/unknown linker file format '%s'!\n", |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
471 optArg); |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
472 return FALSE; |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
473 } |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
474 break; |
485
c1d5cccbf5b3
Implement output data cropping option -c, with which the memory area to be
Matti Hamalainen <ccr@tnsp.org>
parents:
484
diff
changeset
|
475 |
2410
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
476 case 26: |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
477 // Initialization value |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
478 { |
2512 | 479 char *p; |
480 unsigned int tmpi; | |
481 | |
482 optInitValueType = 1; | |
483 if ((p = strrchr(optArg, ':')) != NULL) | |
2410
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
484 { |
2512 | 485 *p = 0; |
486 switch (tolower(p[1])) | |
487 { | |
488 case 'b': optInitValueType = 1; break; | |
489 case 'w': optInitValueType = 2; break; | |
490 case 'd': optInitValueType = 4; break; | |
491 default: | |
492 dmErrorMsg("Invalid init value type '%c' specified for '%s'.\n", | |
493 p[1], optArg); | |
494 return FALSE; | |
495 } | |
2410
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
496 } |
2512 | 497 if (!dmGetIntVal(optArg, &tmpi, NULL)) |
498 { | |
499 dmErrorMsg("Invalid initvalue '%s'.\n", optArg); | |
500 return FALSE; | |
501 } | |
502 optInitValue = tmpi; | |
2410
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
503 } |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
504 break; |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
505 |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
506 case 28: |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
507 // Set describe mode |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
508 optDescribe = TRUE; |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
509 break; |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
510 |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
511 case 30: |
501
d13d8770477a
Add new -L option for forcing loading address on the destination file, or
Matti Hamalainen <ccr@tnsp.org>
parents:
500
diff
changeset
|
512 { |
2410
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
513 size_t cropLen; |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
514 if (!dmParseSection(optArg, &optCropStart, &optCropEnd, NULL, FALSE)) |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
515 return FALSE; |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
516 |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
517 cropLen = optCropEnd - optCropStart + 1; |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
518 dmMsg(1, "Cutting output to $%.4x - $%.4x " |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
519 "($%" DM_PRIx_SIZE_T ", %" DM_PRIu_SIZE_T " bytes)\n", |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
520 optCropStart, optCropEnd, |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
521 cropLen, cropLen); |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
522 |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
523 optCropOutput = TRUE; |
501
d13d8770477a
Add new -L option for forcing loading address on the destination file, or
Matti Hamalainen <ccr@tnsp.org>
parents:
500
diff
changeset
|
524 } |
2410
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
525 break; |
501
d13d8770477a
Add new -L option for forcing loading address on the destination file, or
Matti Hamalainen <ccr@tnsp.org>
parents:
500
diff
changeset
|
526 |
2410
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
527 case 32: |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
528 // Set loading address |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
529 if (strcasecmp(optArg, "none") == 0) |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
530 { |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
531 optLoadAddress = LA_NONE; |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
532 } |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
533 else |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
534 { |
2512 | 535 unsigned int tmpi; |
536 | |
2410
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
537 if (!dmGetIntVal(optArg, &tmpi, NULL)) |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
538 { |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
539 dmErrorMsg("Invalid loading address '%s'.\n", optArg); |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
540 return FALSE; |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
541 } |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
542 if (tmpi >= 64*1024) |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
543 { |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
544 dmErrorMsg("Invalid or insane loading address %d/$%x!\n", |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
545 tmpi, tmpi); |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
546 return FALSE; |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
547 } |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
548 optLoadAddress = tmpi; |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
549 } |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
550 break; |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
551 |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
552 default: |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
553 dmErrorMsg("Unimplemented option argument '%s'.\n", currArg); |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
554 return FALSE; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
555 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
556 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
557 return TRUE; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
558 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
559 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
560 |
1676 | 561 int dmLoadPRG(const char *filename, const BOOL forceAddr, const int destAddr) |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
562 { |
1674 | 563 FILE *fh; |
1675
bc5a75888fa9
Improve error handling and plug filehandle leaks.
Matti Hamalainen <ccr@tnsp.org>
parents:
1674
diff
changeset
|
564 int dataSize, loadAddr, endAddr, res = DMERR_OK; |
486 | 565 Uint16 tmpAddr; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
566 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
567 // Open the input file |
1674 | 568 if ((fh = fopen(filename, "rb")) == NULL) |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
569 { |
1675
bc5a75888fa9
Improve error handling and plug filehandle leaks.
Matti Hamalainen <ccr@tnsp.org>
parents:
1674
diff
changeset
|
570 res = dmGetErrno(); |
1431
ed04fb6da07c
Get rid of direct 'errno' usage.
Matti Hamalainen <ccr@tnsp.org>
parents:
1238
diff
changeset
|
571 dmErrorMsg("Error opening input file '%s' #%d: %s.\n", |
1675
bc5a75888fa9
Improve error handling and plug filehandle leaks.
Matti Hamalainen <ccr@tnsp.org>
parents:
1674
diff
changeset
|
572 filename, res, dmErrorStr(res)); |
bc5a75888fa9
Improve error handling and plug filehandle leaks.
Matti Hamalainen <ccr@tnsp.org>
parents:
1674
diff
changeset
|
573 goto out; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
574 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
575 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
576 // Get filesize |
1674 | 577 if ((dataSize = dmGetFileSize(fh) - 2) < 0) |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
578 { |
1675
bc5a75888fa9
Improve error handling and plug filehandle leaks.
Matti Hamalainen <ccr@tnsp.org>
parents:
1674
diff
changeset
|
579 res = dmGetErrno(); |
1431
ed04fb6da07c
Get rid of direct 'errno' usage.
Matti Hamalainen <ccr@tnsp.org>
parents:
1238
diff
changeset
|
580 dmErrorMsg("Error getting file size for '%s' #%d: %s.\n", |
1675
bc5a75888fa9
Improve error handling and plug filehandle leaks.
Matti Hamalainen <ccr@tnsp.org>
parents:
1674
diff
changeset
|
581 filename, res, dmErrorStr(res)); |
bc5a75888fa9
Improve error handling and plug filehandle leaks.
Matti Hamalainen <ccr@tnsp.org>
parents:
1674
diff
changeset
|
582 goto out; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
583 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
584 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
585 // Get loading address |
1674 | 586 if (!dm_fread_le16(fh, &tmpAddr)) |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
587 { |
1675
bc5a75888fa9
Improve error handling and plug filehandle leaks.
Matti Hamalainen <ccr@tnsp.org>
parents:
1674
diff
changeset
|
588 res = dmGetErrno(); |
1431
ed04fb6da07c
Get rid of direct 'errno' usage.
Matti Hamalainen <ccr@tnsp.org>
parents:
1238
diff
changeset
|
589 dmErrorMsg("Error reading input file '%s' #%d: %s.\n", |
1675
bc5a75888fa9
Improve error handling and plug filehandle leaks.
Matti Hamalainen <ccr@tnsp.org>
parents:
1674
diff
changeset
|
590 filename, res, dmErrorStr(res)); |
bc5a75888fa9
Improve error handling and plug filehandle leaks.
Matti Hamalainen <ccr@tnsp.org>
parents:
1674
diff
changeset
|
591 goto out; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
592 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
593 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
594 // Show information |
486 | 595 loadAddr = forceAddr ? destAddr : tmpAddr; |
596 endAddr = loadAddr + dataSize - 1; | |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
597 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
598 dmPrint(1, "* Loading '%s', %s at $%.4x-$%.4x", |
486 | 599 filename, forceAddr ? "PRGA" : "PRG", loadAddr, endAddr); |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
600 |
486 | 601 if (endAddr >= memModel->size) |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
602 { |
1675
bc5a75888fa9
Improve error handling and plug filehandle leaks.
Matti Hamalainen <ccr@tnsp.org>
parents:
1674
diff
changeset
|
603 res = DMERR_BOUNDS; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
604 dmPrint(1, " .. Does not fit into the memory!\n"); |
1675
bc5a75888fa9
Improve error handling and plug filehandle leaks.
Matti Hamalainen <ccr@tnsp.org>
parents:
1674
diff
changeset
|
605 goto out; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
606 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
607 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
608 // Load data |
1674 | 609 if (fread(&memory[loadAddr], dataSize, 1, fh) < 1) |
486 | 610 { |
1675
bc5a75888fa9
Improve error handling and plug filehandle leaks.
Matti Hamalainen <ccr@tnsp.org>
parents:
1674
diff
changeset
|
611 res = dmGetErrno(); |
1431
ed04fb6da07c
Get rid of direct 'errno' usage.
Matti Hamalainen <ccr@tnsp.org>
parents:
1238
diff
changeset
|
612 dmPrint(1, " .. Error #%d: %s.\n", |
1675
bc5a75888fa9
Improve error handling and plug filehandle leaks.
Matti Hamalainen <ccr@tnsp.org>
parents:
1674
diff
changeset
|
613 res, dmErrorStr(res)); |
bc5a75888fa9
Improve error handling and plug filehandle leaks.
Matti Hamalainen <ccr@tnsp.org>
parents:
1674
diff
changeset
|
614 goto out; |
486 | 615 } |
616 | |
617 dmPrint(1, " .. OK\n"); | |
618 | |
619 // Add to list of blocks | |
2554 | 620 if ((res = dmReserveMemBlock(loadAddr, endAddr, filename, MTYPE_RES)) != DMERR_OK) |
621 goto out; | |
486 | 622 |
1675
bc5a75888fa9
Improve error handling and plug filehandle leaks.
Matti Hamalainen <ccr@tnsp.org>
parents:
1674
diff
changeset
|
623 out: |
bc5a75888fa9
Improve error handling and plug filehandle leaks.
Matti Hamalainen <ccr@tnsp.org>
parents:
1674
diff
changeset
|
624 if (fh != NULL) |
bc5a75888fa9
Improve error handling and plug filehandle leaks.
Matti Hamalainen <ccr@tnsp.org>
parents:
1674
diff
changeset
|
625 fclose(fh); |
bc5a75888fa9
Improve error handling and plug filehandle leaks.
Matti Hamalainen <ccr@tnsp.org>
parents:
1674
diff
changeset
|
626 |
bc5a75888fa9
Improve error handling and plug filehandle leaks.
Matti Hamalainen <ccr@tnsp.org>
parents:
1674
diff
changeset
|
627 return res; |
486 | 628 } |
629 | |
630 | |
864 | 631 int dmLoadRAW(const char *filename, const int destAddr) |
486 | 632 { |
1674 | 633 FILE *fh; |
1675
bc5a75888fa9
Improve error handling and plug filehandle leaks.
Matti Hamalainen <ccr@tnsp.org>
parents:
1674
diff
changeset
|
634 int dataSize, endAddr, res = DMERR_OK; |
486 | 635 |
636 // Open the input file | |
1674 | 637 if ((fh = fopen(filename, "rb")) == NULL) |
486 | 638 { |
1675
bc5a75888fa9
Improve error handling and plug filehandle leaks.
Matti Hamalainen <ccr@tnsp.org>
parents:
1674
diff
changeset
|
639 res = dmGetErrno(); |
1431
ed04fb6da07c
Get rid of direct 'errno' usage.
Matti Hamalainen <ccr@tnsp.org>
parents:
1238
diff
changeset
|
640 dmErrorMsg("Error opening input file '%s' #%d: %s.\n", |
1675
bc5a75888fa9
Improve error handling and plug filehandle leaks.
Matti Hamalainen <ccr@tnsp.org>
parents:
1674
diff
changeset
|
641 filename, res, dmErrorStr(res)); |
bc5a75888fa9
Improve error handling and plug filehandle leaks.
Matti Hamalainen <ccr@tnsp.org>
parents:
1674
diff
changeset
|
642 goto out; |
486 | 643 } |
644 | |
645 // Get filesize | |
1674 | 646 if ((dataSize = dmGetFileSize(fh)) < 0) |
486 | 647 { |
1675
bc5a75888fa9
Improve error handling and plug filehandle leaks.
Matti Hamalainen <ccr@tnsp.org>
parents:
1674
diff
changeset
|
648 res = dmError(DMERR_FREAD, |
bc5a75888fa9
Improve error handling and plug filehandle leaks.
Matti Hamalainen <ccr@tnsp.org>
parents:
1674
diff
changeset
|
649 "Error getting file size for '%s'.\n", filename); |
bc5a75888fa9
Improve error handling and plug filehandle leaks.
Matti Hamalainen <ccr@tnsp.org>
parents:
1674
diff
changeset
|
650 goto out; |
486 | 651 } |
652 | |
653 // Show information | |
654 endAddr = destAddr + dataSize - 1; | |
655 dmPrint(1, "* Loading '%s', RAW at $%.4x-$%.4x", | |
656 filename, destAddr, endAddr); | |
657 | |
658 if (endAddr >= memModel->size) | |
659 { | |
1675
bc5a75888fa9
Improve error handling and plug filehandle leaks.
Matti Hamalainen <ccr@tnsp.org>
parents:
1674
diff
changeset
|
660 res = DMERR_BOUNDS; |
486 | 661 dmPrint(1, " .. Does not fit into the memory!\n"); |
1675
bc5a75888fa9
Improve error handling and plug filehandle leaks.
Matti Hamalainen <ccr@tnsp.org>
parents:
1674
diff
changeset
|
662 goto out; |
486 | 663 } |
664 | |
665 // Load data | |
1674 | 666 if (fread(&memory[destAddr], dataSize, 1, fh) < 1) |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
667 { |
1675
bc5a75888fa9
Improve error handling and plug filehandle leaks.
Matti Hamalainen <ccr@tnsp.org>
parents:
1674
diff
changeset
|
668 res = dmGetErrno(); |
bc5a75888fa9
Improve error handling and plug filehandle leaks.
Matti Hamalainen <ccr@tnsp.org>
parents:
1674
diff
changeset
|
669 dmPrint(1, " .. Error reading data #%d: %s.\n", |
bc5a75888fa9
Improve error handling and plug filehandle leaks.
Matti Hamalainen <ccr@tnsp.org>
parents:
1674
diff
changeset
|
670 res, dmErrorStr(res)); |
bc5a75888fa9
Improve error handling and plug filehandle leaks.
Matti Hamalainen <ccr@tnsp.org>
parents:
1674
diff
changeset
|
671 goto out; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
672 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
673 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
674 dmPrint(1, " .. OK\n"); |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
675 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
676 // Add info to list |
2554 | 677 if ((res = dmReserveMemBlock(destAddr, endAddr, filename, MTYPE_RES)) != DMERR_OK) |
678 goto out; | |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
679 |
1675
bc5a75888fa9
Improve error handling and plug filehandle leaks.
Matti Hamalainen <ccr@tnsp.org>
parents:
1674
diff
changeset
|
680 out: |
bc5a75888fa9
Improve error handling and plug filehandle leaks.
Matti Hamalainen <ccr@tnsp.org>
parents:
1674
diff
changeset
|
681 if (fh != NULL) |
bc5a75888fa9
Improve error handling and plug filehandle leaks.
Matti Hamalainen <ccr@tnsp.org>
parents:
1674
diff
changeset
|
682 fclose(fh); |
bc5a75888fa9
Improve error handling and plug filehandle leaks.
Matti Hamalainen <ccr@tnsp.org>
parents:
1674
diff
changeset
|
683 |
bc5a75888fa9
Improve error handling and plug filehandle leaks.
Matti Hamalainen <ccr@tnsp.org>
parents:
1674
diff
changeset
|
684 return res; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
685 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
686 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
687 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
688 int outputLinkData(FILE *dfile, const char *blockName, const int blockStart, const int blockEnd) |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
689 { |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
690 char *tmpStr, *s, *t; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
691 int blockSize; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
692 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
693 blockSize = (blockEnd - blockStart + 1); |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
694 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
695 // Create label name from filename |
2554 | 696 if ((tmpStr = dm_strdup(blockName)) == NULL) |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
697 { |
2554 | 698 return dmError(DMERR_MALLOC, |
699 "Could not allocate memory for string '%s'!\n", | |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
700 blockName); |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
701 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
702 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
703 if ((t = strrchr(tmpStr, '/'))) |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
704 s = (t + 1); |
1678 | 705 else |
706 if ((t = strrchr(tmpStr, '\\'))) | |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
707 s = (t + 1); |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
708 else |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
709 s = tmpStr; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
710 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
711 if ((t = strrchr(s, '.'))) |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
712 *t = 0; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
713 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
714 for (t = s; *t; t++) |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
715 { |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
716 if (!isalnum(*t)) |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
717 *t = '_'; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
718 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
719 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
720 // Print the label line |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
721 switch (optLinkFileFormat) |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
722 { |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
723 case FMT_PLAIN: |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
724 fprintf(dfile, "%s = $%.4x\n", tmpStr, blockStart); |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
725 break; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
726 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
727 case FMT_DECIMAL: |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
728 fprintf(dfile, "%s = %d\n", tmpStr, blockStart); |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
729 break; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
730 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
731 case FMT_GENERIC: |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
732 default: |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
733 fprintf(dfile, "; %s ($%.4x - $%.4x, %d/$%x bytes)\n", |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
734 blockName, blockStart, blockEnd, blockSize, blockSize); |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
735 fprintf(dfile, "%s = $%.4x\n", s, blockStart); |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
736 break; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
737 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
738 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
739 dmFree(tmpStr); |
2554 | 740 return DMERR_OK; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
741 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
742 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
743 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
744 /* Print out an ASCII presentation of memory map |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
745 */ |
2560
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
746 #define BOX_WIDTH 60 |
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
747 #define TO_STR1(x) #x |
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
748 #define TO_STR(x) TO_STR1(x) |
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
749 |
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
750 void memPrintLine(FILE *fh) |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
751 { |
2560
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
752 fputs(" +", fh); |
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
753 for (int i = 0; i < BOX_WIDTH + 2; i++) |
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
754 fputc('-', fh); |
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
755 fputs("+\n", fh); |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
756 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
757 |
2560
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
758 void memPrintEmpty(FILE *fh, const int n) |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
759 { |
1678 | 760 for (int i = 0; i < n; i++) |
2560
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
761 { |
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
762 fputs(" | ", fh); |
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
763 for (int i = 0; i < BOX_WIDTH; i++) |
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
764 fputc(' ', fh); |
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
765 fputs(" |\n", fh); |
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
766 } |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
767 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
768 |
2560
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
769 void memPrintBox(FILE *fh, const int bsize, const int bstart, const int bend, const char *bdesc) |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
770 { |
2560
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
771 int bksize = bsize / (1024 * 2); |
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
772 if (bksize > 1) memPrintEmpty(fh, bksize); |
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
773 fprintf(fh, "$%.4x - $%.4x | %-" TO_STR(BOX_WIDTH) "s |\n", bstart, bend, bdesc); |
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
774 if (bksize > 1) memPrintEmpty(fh, bksize); |
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
775 memPrintLine(fh); |
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
776 } |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
777 |
2560
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
778 void dmDescribeMemory(FILE *fh) |
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
779 { |
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
780 DMMemBlock *bprev = NULL; |
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
781 |
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
782 memPrintLine(fh); |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
783 |
1678 | 784 for (int i = 0; i < nmemBlocks; i++) |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
785 { |
2560
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
786 DMMemBlock *bcurr = &memBlocks[i]; |
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
787 char bdesc[128]; |
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
788 const char *btype; |
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
789 int bsize; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
790 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
791 // Check for empty, unreserved areas |
2560
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
792 if (bprev != NULL && (bsize = (bcurr->start - 1) - (bprev->end + 1) + 1) > 1) |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
793 { |
2560
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
794 snprintf(bdesc, sizeof(bdesc), "EMPTY (%d)", bsize); |
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
795 memPrintBox(fh, bsize, bprev->end + 1, bcurr->start - 1, bdesc); |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
796 } |
2560
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
797 bprev = bcurr; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
798 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
799 // Print current block |
2560
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
800 switch (bcurr->type) |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
801 { |
2560
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
802 case MTYPE_NONE: btype = "N/A (NC)"; break; |
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
803 case MTYPE_ROM: btype = "ROM"; break; |
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
804 case MTYPE_WT: btype = "WT"; break; |
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
805 case MTYPE_IO: btype = "I/O"; break; |
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
806 case MTYPE_RES: btype = "RSVD"; break; |
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
807 default: btype = "????"; break; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
808 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
809 |
2560
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
810 bsize = bcurr->end - bcurr->start + 1; |
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
811 snprintf(bdesc, sizeof(bdesc), "%.40s (%s, %d)", bcurr->name, btype, bsize); |
ac2e60f4bfc3
Improve block description output.
Matti Hamalainen <ccr@tnsp.org>
parents:
2559
diff
changeset
|
812 memPrintBox(fh, bsize, bcurr->start, bcurr->end, bdesc); |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
813 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
814 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
815 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
816 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
817 /* |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
818 * The main program |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
819 */ |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
820 int main(int argc, char *argv[]) |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
821 { |
2412
203b0fbb05d3
Make default verbosity quieter.
Matti Hamalainen <ccr@tnsp.org>
parents:
2411
diff
changeset
|
822 FILE *outFile = NULL; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
823 BOOL hasOverlaps; |
2554 | 824 int res = DMERR_OK, startAddr, endAddr, dataSize, totalSize; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
825 |
2558 | 826 dmInitProg("objlink", "Simple file-linker", "0.83", NULL, NULL); |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
827 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
828 // Parse arguments |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
829 if (!dmArgsProcess(argc, argv, optList, optListN, |
860
daebbf28953d
The argument handling API in dmargs* was synced with th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
830
diff
changeset
|
830 argHandleOpt, NULL, OPTH_BAILOUT)) |
1679
7b0c76cd7686
Clean up and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
1678
diff
changeset
|
831 goto out; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
832 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
833 if (nsrcFiles < 1) |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
834 { |
958
985225a93aeb
Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents:
871
diff
changeset
|
835 dmErrorMsg("Nothing to do. (try --help)\n"); |
1679
7b0c76cd7686
Clean up and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
1678
diff
changeset
|
836 goto out; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
837 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
838 |
2410
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
839 // Warn about overlaps if enabled |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
840 if (optAllowOverlap) |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
841 dmMsg(-1, "WARNING: Overlapping data has been allowed!\n"); |
bc05bcfc4598
Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents:
2402
diff
changeset
|
842 |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
843 // Allocate memory |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
844 memModel = &memoryModels[optMemModel]; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
845 dmMsg(1, "Using memory model #%d '%s', %d bytes.\n", |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
846 optMemModel, memModel->name, memModel->size); |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
847 |
1679
7b0c76cd7686
Clean up and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
1678
diff
changeset
|
848 if ((memory = (Uint8 *) dmMalloc(memModel->size + 32)) == NULL) |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
849 { |
1679
7b0c76cd7686
Clean up and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
1678
diff
changeset
|
850 dmErrorMsg("Could not allocate memory for memory model!\n"); |
7b0c76cd7686
Clean up and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
1678
diff
changeset
|
851 goto out; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
852 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
853 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
854 // Initialize memory |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
855 dmMsg(1, "Initializing memory with "); |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
856 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
857 if (optInitValueType == 1 || optInitValue <= 0xff) |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
858 { |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
859 dmPrint(1, "BYTE 0x%.2x\n", optInitValue); |
2414
69a5af2eb1ea
Remove useless dmMemset().
Matti Hamalainen <ccr@tnsp.org>
parents:
2412
diff
changeset
|
860 memset(memory, optInitValue, memModel->size); |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
861 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
862 else |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
863 if (optInitValueType == 2 || optInitValue <= 0xffff) |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
864 { |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
865 uint16_t *mp = (uint16_t *) memory; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
866 dmPrint(1, "WORD 0x%.4x\n", optInitValue); |
1673 | 867 for (int i = memModel->size / sizeof(*mp); i; i--) |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
868 { |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
869 *mp++ = optInitValue; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
870 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
871 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
872 else |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
873 { |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
874 Uint32 *mp = (Uint32 *) memory; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
875 dmPrint(1, "DWORD 0x%.8x\n", optInitValue); |
1673 | 876 for (int i = memModel->size / sizeof(*mp); i; i--) |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
877 { |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
878 *mp++ = optInitValue; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
879 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
880 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
881 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
882 // Load the datafiles |
1673 | 883 for (int i = 0; i < nsrcFiles; i++) |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
884 switch (srcFiles[i].type) |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
885 { |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
886 case STYPE_RAW: |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
887 dmLoadRAW(srcFiles[i].filename, srcFiles[i].addr); |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
888 break; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
889 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
890 case STYPE_PRG: |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
891 dmLoadPRG(srcFiles[i].filename, FALSE, 0); |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
892 break; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
893 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
894 case STYPE_PRGA: |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
895 dmLoadPRG(srcFiles[i].filename, TRUE, srcFiles[i].addr); |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
896 break; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
897 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
898 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
899 // Add memory model blocks |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
900 dmMsg(1, "Applying memory model restrictions...\n"); |
1673 | 901 for (int i = 0; i < memModel->nmemBlocks; i++) |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
902 { |
2554 | 903 if ((res = dmReserveMemBlock( |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
904 memModel->memBlocks[i].start, |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
905 memModel->memBlocks[i].end, |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
906 memModel->memBlocks[i].name, |
2554 | 907 memModel->memBlocks[i].type)) != DMERR_OK) |
1679
7b0c76cd7686
Clean up and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
1678
diff
changeset
|
908 goto out; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
909 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
910 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
911 // Sort the blocks |
1679
7b0c76cd7686
Clean up and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
1678
diff
changeset
|
912 qsort(memBlocks, nmemBlocks, sizeof(DMMemBlock), dmCompareMemBlock); |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
913 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
914 // Check for overlapping conflicts |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
915 hasOverlaps = FALSE; |
2561 | 916 for (int bk1 = 0; bk1 < nmemBlocks; bk1++) |
917 for (int bk2 = 0; bk2 < nmemBlocks; bk2++) | |
918 if (bk1 != bk2) | |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
919 { |
2561 | 920 DMMemBlock *mb1 = &memBlocks[bk1], |
921 *mb2 = &memBlocks[bk2]; | |
922 | |
923 if (mb1->type != MTYPE_RES) | |
924 continue; | |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
925 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
926 // Check for per-file conflicts |
2561 | 927 if ((mb2->start >= mb1->start && mb2->start <= mb1->end) || |
928 (mb2->end >= mb1->start && mb2->end <= mb1->end)) | |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
929 { |
2561 | 930 dmErrorMsg("* '%s' and '%s' overlap ($%.4x-$%.4x vs $%.4x-$%.4x)\n", |
931 mb1->name, mb2->name, mb1->start, | |
932 mb1->end, mb2->start, mb2->end); | |
933 | |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
934 hasOverlaps = TRUE; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
935 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
936 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
937 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
938 if (!optAllowOverlap && hasOverlaps) |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
939 { |
958
985225a93aeb
Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents:
871
diff
changeset
|
940 dmErrorMsg("Error occured, overlaps not allowed.\n"); |
1679
7b0c76cd7686
Clean up and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
1678
diff
changeset
|
941 goto out; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
942 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
943 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
944 // Find out start and end-addresses |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
945 startAddr = memModel->size; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
946 totalSize = endAddr = 0; |
1673 | 947 for (int i = 0; i < nmemBlocks; i++) |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
948 { |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
949 DMMemBlock *mbi = &memBlocks[i]; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
950 if (mbi->type == MTYPE_RES) |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
951 { |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
952 if (mbi->start < startAddr) |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
953 startAddr = mbi->start; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
954 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
955 if (mbi->end > endAddr) |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
956 endAddr = mbi->end; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
957 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
958 totalSize += (mbi->end - mbi->start + 1); |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
959 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
960 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
961 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
962 if (startAddr >= memModel->size || endAddr < startAddr) |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
963 { |
1679
7b0c76cd7686
Clean up and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
1678
diff
changeset
|
964 dmErrorMsg("Invalid saveblock addresses (start=$%.4x, end=$%.4x)!\n", |
7b0c76cd7686
Clean up and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
1678
diff
changeset
|
965 startAddr, endAddr); |
7b0c76cd7686
Clean up and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
1678
diff
changeset
|
966 goto out; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
967 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
968 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
969 // Output linkfile |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
970 if (optLinkFileName) |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
971 { |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
972 dmMsg(1, "Writing linkfile to '%s'\n", optLinkFileName); |
2412
203b0fbb05d3
Make default verbosity quieter.
Matti Hamalainen <ccr@tnsp.org>
parents:
2411
diff
changeset
|
973 if ((outFile = fopen(optLinkFileName, "wb")) == NULL) |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
974 { |
2554 | 975 res = dmGetErrno(); |
976 dmErrorMsg("Error creating file '%s': %s.\n", | |
977 optLinkFileName, dmErrorStr(res)); | |
1679
7b0c76cd7686
Clean up and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
1678
diff
changeset
|
978 goto out; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
979 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
980 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
981 switch (optLinkFileFormat) |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
982 { |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
983 case FMT_GENERIC: |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
984 default: |
2412
203b0fbb05d3
Make default verbosity quieter.
Matti Hamalainen <ccr@tnsp.org>
parents:
2411
diff
changeset
|
985 fprintf(outFile, "; Definitions generated by %s v%s\n", |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
986 dmProgName, dmProgVersion); |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
987 break; |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
988 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
989 |
1673 | 990 for (int i = 0; i < nmemBlocks; i++) |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
991 { |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
992 DMMemBlock *mbi = &memBlocks[i]; |
2412
203b0fbb05d3
Make default verbosity quieter.
Matti Hamalainen <ccr@tnsp.org>
parents:
2411
diff
changeset
|
993 outputLinkData(outFile, mbi->name, mbi->start, mbi->end); |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
994 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
995 |
2412
203b0fbb05d3
Make default verbosity quieter.
Matti Hamalainen <ccr@tnsp.org>
parents:
2411
diff
changeset
|
996 fclose(outFile); |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
997 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
998 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
999 // Show some information |
485
c1d5cccbf5b3
Implement output data cropping option -c, with which the memory area to be
Matti Hamalainen <ccr@tnsp.org>
parents:
484
diff
changeset
|
1000 if (optCropOutput) |
c1d5cccbf5b3
Implement output data cropping option -c, with which the memory area to be
Matti Hamalainen <ccr@tnsp.org>
parents:
484
diff
changeset
|
1001 { |
c1d5cccbf5b3
Implement output data cropping option -c, with which the memory area to be
Matti Hamalainen <ccr@tnsp.org>
parents:
484
diff
changeset
|
1002 startAddr = optCropStart; |
c1d5cccbf5b3
Implement output data cropping option -c, with which the memory area to be
Matti Hamalainen <ccr@tnsp.org>
parents:
484
diff
changeset
|
1003 endAddr = optCropEnd; |
c1d5cccbf5b3
Implement output data cropping option -c, with which the memory area to be
Matti Hamalainen <ccr@tnsp.org>
parents:
484
diff
changeset
|
1004 } |
c1d5cccbf5b3
Implement output data cropping option -c, with which the memory area to be
Matti Hamalainen <ccr@tnsp.org>
parents:
484
diff
changeset
|
1005 |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1006 dataSize = endAddr - startAddr + 1; |
485
c1d5cccbf5b3
Implement output data cropping option -c, with which the memory area to be
Matti Hamalainen <ccr@tnsp.org>
parents:
484
diff
changeset
|
1007 |
c1d5cccbf5b3
Implement output data cropping option -c, with which the memory area to be
Matti Hamalainen <ccr@tnsp.org>
parents:
484
diff
changeset
|
1008 if (dataSize - totalSize > 0) |
c1d5cccbf5b3
Implement output data cropping option -c, with which the memory area to be
Matti Hamalainen <ccr@tnsp.org>
parents:
484
diff
changeset
|
1009 { |
c1d5cccbf5b3
Implement output data cropping option -c, with which the memory area to be
Matti Hamalainen <ccr@tnsp.org>
parents:
484
diff
changeset
|
1010 dmMsg(1, "Total of %d/$%x bytes unused(?) areas.\n", |
c1d5cccbf5b3
Implement output data cropping option -c, with which the memory area to be
Matti Hamalainen <ccr@tnsp.org>
parents:
484
diff
changeset
|
1011 dataSize - totalSize, dataSize - totalSize); |
c1d5cccbf5b3
Implement output data cropping option -c, with which the memory area to be
Matti Hamalainen <ccr@tnsp.org>
parents:
484
diff
changeset
|
1012 } |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1013 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1014 dmMsg(1, "Writing $%.4x - $%.4x (%d/$%x bytes) ", |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1015 startAddr, endAddr, dataSize, dataSize); |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1016 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1017 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1018 // Open the destination file |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1019 if (optDestName == NULL) |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1020 { |
2412
203b0fbb05d3
Make default verbosity quieter.
Matti Hamalainen <ccr@tnsp.org>
parents:
2411
diff
changeset
|
1021 outFile = stdout; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1022 dmPrint(1, "...\n"); |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1023 } |
2412
203b0fbb05d3
Make default verbosity quieter.
Matti Hamalainen <ccr@tnsp.org>
parents:
2411
diff
changeset
|
1024 else if ((outFile = fopen(optDestName, "wb")) == NULL) |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1025 { |
2554 | 1026 res = dmGetErrno(); |
1027 dmErrorMsg("Error creating output file '%s': %s.\n", | |
1028 optDestName, dmErrorStr(res)); | |
1679
7b0c76cd7686
Clean up and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
1678
diff
changeset
|
1029 goto out; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1030 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1031 else |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1032 dmPrint(1, "to '%s'\n", optDestName); |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1033 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1034 // Save loading address |
501
d13d8770477a
Add new -L option for forcing loading address on the destination file, or
Matti Hamalainen <ccr@tnsp.org>
parents:
500
diff
changeset
|
1035 if (optLoadAddress >= 0) |
504
b0ee847a14d3
Oops, actually fix the load address setting functionality to work. And make
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
1036 { |
b0ee847a14d3
Oops, actually fix the load address setting functionality to work. And make
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
1037 dmMsg(1, "Using specified loading address $%.4x\n", optLoadAddress); |
2412
203b0fbb05d3
Make default verbosity quieter.
Matti Hamalainen <ccr@tnsp.org>
parents:
2411
diff
changeset
|
1038 dm_fwrite_le16(outFile, optLoadAddress); |
504
b0ee847a14d3
Oops, actually fix the load address setting functionality to work. And make
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
1039 } |
501
d13d8770477a
Add new -L option for forcing loading address on the destination file, or
Matti Hamalainen <ccr@tnsp.org>
parents:
500
diff
changeset
|
1040 else |
d13d8770477a
Add new -L option for forcing loading address on the destination file, or
Matti Hamalainen <ccr@tnsp.org>
parents:
500
diff
changeset
|
1041 if (optLoadAddress == LA_AUTO) |
504
b0ee847a14d3
Oops, actually fix the load address setting functionality to work. And make
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
1042 { |
b0ee847a14d3
Oops, actually fix the load address setting functionality to work. And make
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
1043 dmMsg(1, "Using automatic loading address $%.4x\n", startAddr); |
2412
203b0fbb05d3
Make default verbosity quieter.
Matti Hamalainen <ccr@tnsp.org>
parents:
2411
diff
changeset
|
1044 dm_fwrite_le16(outFile, startAddr); |
504
b0ee847a14d3
Oops, actually fix the load address setting functionality to work. And make
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
1045 } |
b0ee847a14d3
Oops, actually fix the load address setting functionality to work. And make
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
1046 else |
b0ee847a14d3
Oops, actually fix the load address setting functionality to work. And make
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
1047 { |
b0ee847a14d3
Oops, actually fix the load address setting functionality to work. And make
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
1048 dmMsg(1, "Writing raw output, without loading address.\n"); |
b0ee847a14d3
Oops, actually fix the load address setting functionality to work. And make
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
1049 } |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1050 |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1051 // Save the data |
2412
203b0fbb05d3
Make default verbosity quieter.
Matti Hamalainen <ccr@tnsp.org>
parents:
2411
diff
changeset
|
1052 if (fwrite(&memory[startAddr], dataSize, 1, outFile) < 1) |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1053 { |
2554 | 1054 res = dmGetErrno(); |
1055 dmErrorMsg( | |
1056 "Error writing to file: %s.\n", | |
1057 dmErrorStr(res)); | |
1679
7b0c76cd7686
Clean up and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
1678
diff
changeset
|
1058 goto out; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1059 } |
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1060 |
1679
7b0c76cd7686
Clean up and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
1678
diff
changeset
|
1061 // Describe the memory layout |
7b0c76cd7686
Clean up and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
1678
diff
changeset
|
1062 if (optDescribe) |
2412
203b0fbb05d3
Make default verbosity quieter.
Matti Hamalainen <ccr@tnsp.org>
parents:
2411
diff
changeset
|
1063 dmDescribeMemory(outFile != stdout ? stdout : stderr); |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1064 |
1679
7b0c76cd7686
Clean up and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents:
1678
diff
changeset
|
1065 out: |
2412
203b0fbb05d3
Make default verbosity quieter.
Matti Hamalainen <ccr@tnsp.org>
parents:
2411
diff
changeset
|
1066 if (outFile != NULL && outFile != stdout) |
203b0fbb05d3
Make default verbosity quieter.
Matti Hamalainen <ccr@tnsp.org>
parents:
2411
diff
changeset
|
1067 fclose(outFile); |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1068 |
2554 | 1069 return res; |
407
59244a7ae37f
Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1070 } |