NASM 0.97
[nasm.git] / Wishlist
blob197b113b101d0eba2e54e7c0bd6387066b340beb
1 NASM Wishlist
2 =============
4 - forward-reference tracking is instruction-granular not operand-
5   granular. Bummer.
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
11   __NASM_MINOR__.
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
23   common idioms
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
37   either.
39 - Subsection support?
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]
47           8D36              lea esi,[esi]
48           90                nop
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
76   similar...
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?