4 - forward-reference tracking is instruction-granular not operand-
7 - see if BITS can be made to do anything sensible in obj (eg set the
8 default new-segment property to Use32).
10 - __DATE__, __TIME__, and text variants of __NASM_MAJOR__ and
13 - Warn on TIMES combined with multi-line macros. TIMES gets applied
14 to first line only - should bring to users' attention.
16 - Add support for lcc 4.0.
17 * If-when this happens, remember to bump the `supported lcc
18 version' number in Readme.
20 - Re-work the evaluator, again, with a per-object-format fixup
21 routine, so as to be able to cope with section offsets "really"
22 being pure numbers; should be able to allow at _least_ the two
24 TIMES 510-$ DB 0 ; bootsector
25 MOV AX,(PROG_END-100H)/16 ; .COM TSR
26 Would need to call the fixup throughout the evaluator, and the
27 fixup would have to be allowed to return UNKNOWN on pass one if it
28 had to. (_Always_ returning UNKNOWN on pass one, though a lovely
29 clean design, breaks the first of the above examples.)
31 - Preprocessor identifier concatenation?
33 - Arbitrary section names in `bin'.
35 - Ability to read from a pipe. Obviously not useful under dos, so
36 memory problems with storing entire input file aren't a problem
41 - A good ALIGN mechanism, similar to GAS's. GAS pads out space by
42 means of the following (32-bit) instructions:
43 8DB42600000000 lea esi,[esi+0x0]
44 8DB600000000 lea esi,[esi+0x0]
45 8D742600 lea esi,[esi+0x0]
46 8D7600 lea esi,[esi+0x0]
49 It uses up to two of these instructions to do up to 14-byte pads;
50 when more than 14 bytes are needed, it issues a (short) jump to
51 the end of the padded section and then NOPs the rest. Come up with
52 a similar scheme for 16 bit mode, and also come up with a way to
53 use it - internal to the assembler, so that programs using ALIGN
54 don't knock over preprocess-only mode.
55 Also re-work the macro form so that when given one argument in a
56 code section it calls this feature.
58 - Possibly a means whereby FP constants can be specified as
59 immediate operands to non-FP instructions.
60 * Possible syntax: MOV EAX,FLOAT 1.2 to get a single-precision FP
61 constant. Then maybe MOV EAX,HI_FLOAT 1.2 and MOV EAX,LO_FLOAT
62 1.2 to get the two halves of a double-precision one. Best to
63 ignore extended-precision in case it bites.
64 * Alternatively, maybe MOV EAX,FLOAT(4,0-4,1.2) to get bytes 0-4
65 (ie 0-3) of a 4-byte constant. Then HI_FLOAT is FLOAT(8,4-8,x)
66 and LO_FLOAT is FLOAT(8,0-4,x). But this version allows two-byte
67 chunks, one-byte chunks, even stranger chunks, and pieces of
68 ten-byte reals to be bandied around as well.
70 - A UNION macro might be quite cool, now that ABSOLUTE is sane
71 enough to be able to handle it.
73 - An equivalent to gcc's ## stringify operator, plus string
74 concatenation, somehow implemented without undue ugliness, so as
75 to be able to do `%include "/my/path/%1"' in a macro, or something
78 - Actually _do_ something with the processor, privileged and
79 undocumented flags in the instruction table.
81 - Maybe NEC V20/V30 instructions?
83 - Yet more object formats.
84 * Possibly direct support for .EXE files?
86 - Debug information, in all formats it can be usefully done in.
87 * including line-number record support.
89 - Symbol map in binary format. Format-specific options...
91 - REDESIGN: Think about EQU dependency, and about start-point
92 specification in OBJ. Possibly re-think directive support.
94 - Think about a wrapper program like gcc? Possibly invent a _patch_
95 for gcc so that it can take .asm files on the command line?
97 - If a wrapper happens, think about adding an option to cause the
98 resulting executable file to be executed immediately, thus
99 allowing NASM source files to have #!... (probably silly)
101 - Multi-platform support? If so: definitely Alpha; possibly Java
102 byte code; probably ARM/StrongARM; maybe Sparc; maybe Mips; maybe
103 Vax. Perhaps Z80 and 6502, just for a laugh?