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