1 | NASM TODO list
|
---|
2 | ==============
|
---|
3 |
|
---|
4 | This, like the AUTHORS file, is intended for easy readability by both human
|
---|
5 | and machine, thus the format.
|
---|
6 |
|
---|
7 | F: feature
|
---|
8 | V: version you should expect it by
|
---|
9 | R: responsible person or - if unassigned
|
---|
10 | C: % complete
|
---|
11 | D: description
|
---|
12 | D: maybe on multiple lines
|
---|
13 |
|
---|
14 | Anything that doesn't start with /^[FVRCD]:/ should be ignored.
|
---|
15 |
|
---|
16 | F:-line triggers new entry.
|
---|
17 | Empty V,R,C assume: V: ?, R: -, C: 0%
|
---|
18 |
|
---|
19 | =============
|
---|
20 |
|
---|
21 | F: i18n via gettext
|
---|
22 |
|
---|
23 | F: Convert shallow code model to deep code model
|
---|
24 | D: Tired of messing between lots of unrelated files (especially .c/.h stuff)
|
---|
25 |
|
---|
26 | F: Automated dependency generation for Makefile
|
---|
27 | D: Current looks awful and will break if anything changes.
|
---|
28 |
|
---|
29 | F: Move output modules out*.c to output/ subdir
|
---|
30 | R: madfire
|
---|
31 | C: 10%
|
---|
32 |
|
---|
33 | == THESE ARE FROM old NASM's Wishlist
|
---|
34 | == THEY NEED SEVERE REVISING (seems they weren't updated for a couple of years or so)
|
---|
35 |
|
---|
36 | F: Check misc/ide.cfg into RCS as Watcom IDE enhancement thingy
|
---|
37 | V: 0.98
|
---|
38 | D: ([email protected])
|
---|
39 |
|
---|
40 | F: Package the Linux Assembler HOWTO
|
---|
41 | V: 0.98
|
---|
42 |
|
---|
43 | F: 3DNow!, SSE and other extensions need documenting
|
---|
44 | V: 0.98
|
---|
45 | D: hpa: Does it really make sense to have a whole instruction set
|
---|
46 | D: reference packaged with the assembler?
|
---|
47 |
|
---|
48 | F: prototypes of lrotate don't match in test/*. Fix.
|
---|
49 | V: 0.98
|
---|
50 |
|
---|
51 | F: Build djgpp binaries for 0.98 onwards. Look into PMODE/W as a stub
|
---|
52 | V: 0.98
|
---|
53 | D: it might be a lot better than CWSDPMI. It's in PMW133.ZIP.
|
---|
54 |
|
---|
55 | F: %undef operator that goes along with %define
|
---|
56 | V: ?
|
---|
57 | C: 100%
|
---|
58 |
|
---|
59 | F: Fix `%error' giving error messages twice.
|
---|
60 | V: 0.99
|
---|
61 | D: Not especially important, as changes planned for 1.1x below will make
|
---|
62 | D: the preprocessor be only called once.
|
---|
63 |
|
---|
64 | F: Sort out problems with OBJ
|
---|
65 | V: 0.99
|
---|
66 | D: * TLINK32 doesn't seem to like SEGDEF32 et al. So for that, we
|
---|
67 | D: should avoid xxx32 records wherever we can.
|
---|
68 | D: * However, didn't we change _to_ using xxx32 at some stage? Try
|
---|
69 | D: to remember why and when.
|
---|
70 | D: * Apparently Delphi's linker has trouble with two or more
|
---|
71 | D: globals being defined inside a PUBDEF32. Don't even know if it
|
---|
72 | D: _can_ cope with a PUBDEF16.
|
---|
73 | D: * Might need extra flags. *sigh*
|
---|
74 |
|
---|
75 | F: Symbol table output may possibly be useful.
|
---|
76 | V: 0.99
|
---|
77 | D: Ken Martwick ([email protected]) wants the following format:
|
---|
78 | D: labelname type offset(hex) repetition count
|
---|
79 | D: Possibly include xref addresses after repetition count?
|
---|
80 |
|
---|
81 | F: ELF fixes
|
---|
82 | V: 0.99
|
---|
83 | D: There are various other bugs in outelf.c that make certain kinds
|
---|
84 | D: of relocation not work. See zbrown.asm. Looks like we may have to do
|
---|
85 | D: a major rewrite of parts of it. Compare some NASM code output with
|
---|
86 | D: equivalent GAS code output. Look at the ELF spec. Generally fix things.
|
---|
87 |
|
---|
88 | F: ELF fixes
|
---|
89 | V: 0.99
|
---|
90 | D: NASM is currently using a kludge in ELF that involves defining
|
---|
91 | D: a symbol at a zero absolute offset. This isn't needed, as the
|
---|
92 | D: documented solution to the problem that this solves is to use
|
---|
93 | D: SHN_UNDEF.
|
---|
94 |
|
---|
95 | F: Debug information, in all formats it can be usefully done in.
|
---|
96 | V: 0.99
|
---|
97 | D: * including line-number record support.
|
---|
98 | D: * "George C. Lindauer" <[email protected]>
|
---|
99 | D: wants to have some say in how this goes through.
|
---|
100 | D: * Andrew Crabtree <[email protected]> wants to help out.
|
---|
101 |
|
---|
102 | F: Think about a line-continuation character.
|
---|
103 | V: 0.99
|
---|
104 |
|
---|
105 | F: Consider allowing declaration of two labels on the same line,
|
---|
106 | V: 0.99
|
---|
107 | D: syntax 'label1[:] label2[:] ... instruction'.
|
---|
108 | D: Need to investigate feasibility.
|
---|
109 |
|
---|
110 | F: Quoting of quotes by doubling them, in string and char constants.
|
---|
111 | V: 0.99
|
---|
112 |
|
---|
113 | F: Two-operand syntax for SEGMENT/SECTION macro to avoid warnings
|
---|
114 | D: of ignored section parameters on reissue of __SECT__.
|
---|
115 | D: Or maybe skip the warning if the given parameters are identical to
|
---|
116 | D: what was actually stored. Investigate.
|
---|
117 | V: 0.99
|
---|
118 |
|
---|
119 | F: Apparently we are not missing a PSRAQ instruction, because it
|
---|
120 | D: doesn't exist. Check that it doesn't exist as an undocumented
|
---|
121 | D: instruction, or something stupid like that.
|
---|
122 | V: 0.99
|
---|
123 |
|
---|
124 | F: Any assembled form starting 0x80 can also start 0x82.
|
---|
125 | V: 1.00
|
---|
126 | D: ndisasm should know this. New special code in instruction encodings, probably.
|
---|
127 |
|
---|
128 | F: Pointing an EQU at an external symbol now generates an error.
|
---|
129 | V: 1.05
|
---|
130 | D: There may be a better way of handling this; we should look into it.
|
---|
131 | D: Ideally, the label mechanism should be changed to cope with one
|
---|
132 | D: label being declared relative to another - that may work, but could be
|
---|
133 | D: a pain to implement (or is it? it may be easy enough that you just
|
---|
134 | D: need to declare a new offset in the same segment...) This should be done
|
---|
135 | D: before v1.0 is released. There is a comment regarding this in labels.c,
|
---|
136 | D: towards the end of the file, which discusses ways of fixing this.
|
---|
137 |
|
---|
138 | F: nested %rep used to cause a panic.
|
---|
139 | V: 1.10
|
---|
140 | D: Now a more informative error message is produced. This problem whould
|
---|
141 | D: be fixed before v1.0.
|
---|
142 | D: See comment in switch() statement block for PP_REP in do_directive()
|
---|
143 | D: in preproc.c (line 1585, or thereabouts)
|
---|
144 |
|
---|
145 | F: Contribution
|
---|
146 | D: zgraeme.tar contains improved hash table routines
|
---|
147 | D: contributed by Graeme Defty <[email protected]> for use in the
|
---|
148 | D: label manager.
|
---|
149 |
|
---|
150 | F: Contribution
|
---|
151 | D: zsyntax.zip contains a syntax-highlighting mode for
|
---|
152 | D: NASM, for use with the Aurora text editor (??).
|
---|
153 |
|
---|
154 | F: Contribution
|
---|
155 | D: zvim.zip contains a syntax-highlighting mode for NASM, for use with vim.
|
---|
156 |
|
---|
157 | F: Contribution
|
---|
158 | D: zkendal1.zip and zkendal2.zip contain Kendall
|
---|
159 | D: Bennett's (<[email protected]>) alternative syntax stuff,
|
---|
160 | D: providing an alternative syntax mode for NASM which allows a macro
|
---|
161 | D: set to be written that allows the same source files to be
|
---|
162 | D: assembled with NASM and TASM.
|
---|
163 | R: Kendall Bennett
|
---|
164 | C: 100%
|
---|
165 |
|
---|
166 | F: Add the UD2 instruction.
|
---|
167 | C: 100%
|
---|
168 |
|
---|
169 | F: Add the four instructions documented in 24368901.pdf (Intel's own document).
|
---|
170 | C: 100%
|
---|
171 |
|
---|
172 | F: Some means of avoiding MOV memoffs,EAX which apparently the
|
---|
173 | D: Pentium pairing detector thinks modifies EAX. Similar means of
|
---|
174 | D: choosing instruction encodings where necessary.
|
---|
175 | V: 1.10?
|
---|
176 |
|
---|
177 | F: The example of ..@ makes it clear that a ..@ label isn't just
|
---|
178 | D: local, but doesn't make it clear that it isn't just global either.
|
---|
179 |
|
---|
180 | F: hpa wants an evaluator operator for ceil(log2(x)).
|
---|
181 |
|
---|
182 | F: Extra reloc types in ELF
|
---|
183 | D: R_386_16 type 20, PC16 is 21, 8 is 22, PC8 is 23.
|
---|
184 | D: Add support for the 16s at least.
|
---|
185 |
|
---|
186 | F: Lazy section creation or selective section output
|
---|
187 | D: in COFF/win32 at least and probably other formats: don't bother to emit a section
|
---|
188 | D: if it contains no data. Particularly the default auto-created
|
---|
189 | D: section. We believe zero-length sections crash at least WLINK (in win32).
|
---|
190 |
|
---|
191 | F: Make the flags field in `struct itemplate' in insns.h a long instead of an int.
|
---|
192 | C: 100%?
|
---|
193 |
|
---|
194 | F: Implement %ifref to check whether a single-line macro has ever been expanded since (last re) definition. Or maybe not. We'll see.
|
---|
195 |
|
---|
196 | F: add pointer to \k{insLEAVE} and \k{insENTER} in chapters about mixed-language programming.
|
---|
197 |
|
---|
198 | F: Some equivalent to TASM's GLOBAL directive
|
---|
199 | D: ie something which defines a symbol as external if it doesn't end up being defined
|
---|
200 | D: but defines it as public if it does end up being defined.
|
---|
201 |
|
---|
202 | F: Documentation doesn't explain about C++ name mangling.
|
---|
203 |
|
---|
204 | F: see if BITS can be made to do anything sensible in obj (eg set the default new-segment property to Use32).
|
---|
205 |
|
---|
206 | F: OBJ: coalesce consecutive offset and segment fixups for the same location into full-32bit-pointer fixups.
|
---|
207 | D: This is apparently necessary because some twazzock in the PowerBASIC development
|
---|
208 | D: team didn't design to support the OMF spec the way the rest of the
|
---|
209 | D: world sees it.
|
---|
210 |
|
---|
211 | F: Allow % to be separated from the rest of a preproc directive, for alternative directive indentation styles.
|
---|
212 |
|
---|
213 | F: __DATE__, __TIME__, and text variants of __NASM_MAJOR__ and __NASM_MINOR__.
|
---|
214 |
|
---|
215 | F: Warn on TIMES combined with multi-line macros.
|
---|
216 | V: 1.00
|
---|
217 | D: TIMES gets applied to first line only - should bring to users' attention.
|
---|
218 |
|
---|
219 | F: Re-work the evaluator, again, with a per-object-format fixup
|
---|
220 | D: routine, so as to be able to cope with section offsets "really"
|
---|
221 | D: being pure numbers; should be able to allow at _least_ the two
|
---|
222 | D: common idioms
|
---|
223 | D: TIMES 510-$ DB 0 ; bootsector
|
---|
224 | D: MOV AX,(PROG_END-100H)/16 ; .COM TSR
|
---|
225 | D: Would need to call the fixup throughout the evaluator, and the
|
---|
226 | D: fixup would have to be allowed to return UNKNOWN on pass one if it
|
---|
227 | D: had to. (_Always_ returning UNKNOWN on pass one, though a lovely
|
---|
228 | D: clean design, breaks the first of the above examples.)
|
---|
229 | V: 1.10
|
---|
230 |
|
---|
231 | F: Preprocessor identifier concatenation?
|
---|
232 | V: 1.10
|
---|
233 |
|
---|
234 | F: Arbitrary section names in `bin'.
|
---|
235 | V: 0.98.09
|
---|
236 | D: Is this necessary? Is it even desirable?
|
---|
237 | D: hpa: Desirable, yes. Necessary? Probably not, but there are definitely cases where it becomes quite useful.
|
---|
238 | R: madfire
|
---|
239 | C: 100%
|
---|
240 |
|
---|
241 | F: Ability to read from a pipe.
|
---|
242 | V: 1.10
|
---|
243 | D: Obviously not useful under dos, so memory problems with storing
|
---|
244 | D: entire input file aren't a problem either.
|
---|
245 |
|
---|
246 | F: File caching under DOS/32 bit...
|
---|
247 | V: 1.10?
|
---|
248 | D: maybe even implement discardable buffers that get thrown away
|
---|
249 | D: when we get a NULL returned from malloc(). Only really useful under
|
---|
250 | D: DOS. Think about it.
|
---|
251 |
|
---|
252 | F: possibly spool out the pre-processed stuff to a file, to avoid having to re-process it.
|
---|
253 | V: 1.10?
|
---|
254 | D: Possible problems with preprocessor values not known on pass 1? Have a look...
|
---|
255 |
|
---|
256 | F: Or maybe we can spool out a pre-parsed version...?
|
---|
257 | V: 1.10
|
---|
258 | D: Need to investigate feasibility. Does the results from the parser
|
---|
259 | D: change from pass 1 to pass 2? Would it be feasible to alter it so that
|
---|
260 | D: the parser returns an invariant result, and this is then processed
|
---|
261 | D: afterwards to resolve label references, etc?
|
---|
262 |
|
---|
263 | F: Subsection support?
|
---|
264 |
|
---|
265 | F: A good ALIGN mechanism, similar to GAS's.
|
---|
266 | V: 0.98p1
|
---|
267 | D: GAS pads out space by means of the following (32-bit) instructions:
|
---|
268 | D: 8DB42600000000 lea esi,[esi+0x0]
|
---|
269 | D: 8DB600000000 lea esi,[esi+0x0]
|
---|
270 | D: 8D742600 lea esi,[esi+0x0]
|
---|
271 | D: 8D7600 lea esi,[esi+0x0]
|
---|
272 | D: 8D36 lea esi,[esi]
|
---|
273 | D: 90 nop
|
---|
274 | D: It uses up to two of these instructions to do up to 14-byte pads;
|
---|
275 | D: when more than 14 bytes are needed, it issues a (short) jump to
|
---|
276 | D: the end of the padded section and then NOPs the rest. Come up with
|
---|
277 | D: a similar scheme for 16 bit mode, and also come up with a way to
|
---|
278 | D: use it - internal to the assembler, so that programs using ALIGN
|
---|
279 | D: don't knock over preprocess-only mode.
|
---|
280 | D: Also re-work the macro form so that when given one argument in a
|
---|
281 | D: code section it calls this feature.
|
---|
282 | R: Panos Minos
|
---|
283 | C: 100%?
|
---|
284 |
|
---|
285 | F: Possibly a means whereby FP constants can be specified as immediate operands to non-FP instructions.
|
---|
286 | D: * Possible syntax: MOV EAX,FLOAT 1.2 to get a single-precision FP
|
---|
287 | D: constant. Then maybe MOV EAX,HI_FLOAT 1.2 and MOV EAX,LO_FLOAT
|
---|
288 | D: 1.2 to get the two halves of a double-precision one. Best to
|
---|
289 | D: ignore extended-precision in case it bites.
|
---|
290 | D: * Alternatively, maybe MOV EAX,FLOAT(4,0-4,1.2) to get bytes 0-4
|
---|
291 | D: (ie 0-3) of a 4-byte constant. Then HI_FLOAT is FLOAT(8,4-8,x)
|
---|
292 | D: and LO_FLOAT is FLOAT(8,0-4,x). But this version allows two-byte
|
---|
293 | D: chunks, one-byte chunks, even stranger chunks, and pieces of
|
---|
294 | D: ten-byte reals to be bandied around as well.
|
---|
295 |
|
---|
296 | F: A UNION macro might be quite cool
|
---|
297 | D: now that ABSOLUTE is sane enough to be able to handle it.
|
---|
298 |
|
---|
299 | F: An equivalent to gcc's ## stringify operator, plus string concatenation
|
---|
300 | D: somehow implemented without undue ugliness, so as
|
---|
301 | D: to be able to do `%include "/my/path/%1"' in a macro, or something
|
---|
302 | D: similar...
|
---|
303 |
|
---|
304 | F: Actually _do_ something with the processor, privileged and
|
---|
305 | D: undocumented flags in the instruction table. When this happens,
|
---|
306 | D: consider allowing PMULHRW to map to either of the Cyrix or AMD
|
---|
307 | D: versions?
|
---|
308 | D: hpa: The -p option to ndisasm now uses this to some extent.
|
---|
309 | V: 1.10
|
---|
310 |
|
---|
311 | F: Maybe NEC V20/V30 instructions? ?
|
---|
312 | D: hpa: What are they? Should be trivial to implement.
|
---|
313 |
|
---|
314 | F: Yet more object formats.
|
---|
315 | D: * Possibly direct support for .EXE files?
|
---|
316 | V: 1.10
|
---|
317 |
|
---|
318 | F: Symbol map in binary format. Format-specific options...
|
---|
319 | V: 1.10?
|
---|
320 |
|
---|
321 | F: REDESIGN: Think about EQU dependency, and about start-point specification in OBJ. Possibly re-think directive support.
|
---|
322 | V: 1.20?
|
---|
323 |
|
---|
324 | F: Think about a wrapper program like gcc?
|
---|
325 | V: 2.00?
|
---|
326 | D: Possibly invent a _patch_ for gcc so that it can take .asm files on the command line?
|
---|
327 | D: If a wrapper happens, think about adding an option to cause the
|
---|
328 | D: resulting executable file to be executed immediately, thus
|
---|
329 | D: allowing NASM source files to have #!... (probably silly)
|
---|
330 |
|
---|
331 | F: Multi-platform support?
|
---|
332 | D: If so: definitely Alpha; possibly Java byte code;
|
---|
333 | D: probably ARM/StrongARM; maybe Sparc; maybe Mips; maybe
|
---|
334 | D: Vax. Perhaps Z80 and 6502, just for a laugh?
|
---|
335 |
|
---|
336 | F: Consider a 'verbose' option that prints information about the resulting object file onto stdout.
|
---|
337 |
|
---|
338 | F: Line numbers in the .lst file don't match the line numbers in the input.
|
---|
339 | D: They probably should, rather than the current matching of the post-preprocessor line numbers.
|
---|
340 |
|
---|