summaryrefslogtreecommitdiff
path: root/Wishlist
blob: b1529bfe20b00b3cbf63f9e9b3c67f860a94ffac (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
NASM Wishlist
=============

Numbers on right hand side are version numbers that it would be nice to
have this done by. ? means I haven't looked at it yet.

- Create a binary RDF tools distribution. Should probably be distributed 0.98
  seperately.

- Check misc/ide.cfg into RCS as Watcom IDE enhancement thingy.		0.98
  (nop@dlc.fi)

- Package the Linux Assembler HOWTO.					0.98

- AMD 3dNow extensions need documenting.				0.98

- prototypes of lrotate don't match in test/*. Fix.			0.98

- Build djgpp binaries for 0.98 onwards. Look into PMODE/W as a stub	0.98
  - it might be a lot better than CWSDPMI. It's in PMW133.ZIP.

- Fix `%error' giving error messages twice.				0.99
  Not especially important, as changes planned for 1.1x below will make
  the preprocessor be only called once.

- Sort out problems with OBJ:						0.99
  * TLINK32 doesn't seem to like SEGDEF32 et al. So for that, we
    should avoid xxx32 records wherever we can.
  * However, didn't we change _to_ using xxx32 at some stage? Try
    to remember why and when.
  * Apparently Delphi's linker has trouble with two or more
    globals being defined inside a PUBDEF32. Don't even know if it
    _can_ cope with a PUBDEF16.
  * Might need extra flags. *sigh*

- Symbol table output may possibly be useful.				0.99
  Ken Martwick (kenm@efn.org) wants the following format:
	labelname	type	offset(hex)	repetition count
  Possibly include xref addresses after repetition count?

- There are various other bugs in outelf.c that make certain kinds	0.99
  of relocation not work. See zbrown.asm. Looks like we may have to do
  a major rewrite of parts of it. Compare some NASM code output with
  equivalent GAS code output. Look at the ELF spec. Generally fix things.

- NASM is currently using a kludge in ELF that involves defining	0.99
  a symbol at a zero absolute offset. This isn't needed, as the
  documented solution to the problem that this solves is to use
  SHN_UNDEF.

- Debug information, in all formats it can be usefully done in.		0.99
  * including line-number record support.
  * "George C. Lindauer" <gclind01@starbase.spd.louisville.edu>
    wants to have some say in how this goes through.
  * Andrew Crabtree <andrewc@rosemail.rose.hp.com> wants to help out.

- Think about a line-continuation character.				0.99

- Consider allowing declaration of two labels on the same line,
  syntax 'label1[:] label2[:] ... instruction'. Need to investigate
  feasibility.								0.99

- Quoting of quotes by doubling them, in string and char constants.	0.99

- Two-operand syntax for SEGMENT/SECTION macro to avoid warnings	0.99
  of ignored section parameters on reissue of __SECT__.
  Or maybe skip the warning if the given parameters are identical to
  what was actually stored. Investigate.				

- Apparently we are not missing a PSRAQ instruction, because it
  doesn't exist.  Check that it doesn't exist as an undocumented
  instruction, or something stupid like that.				0.99

- Any assembled form starting 0x80 can also start 0x82. ndisasm		1.00
  should know this. New special code in instruction encodings,
  probably.

- Pointing an EQU at an external symbol now generates an error. There	1.05
  may be a better way of handling this; we should look into it.
  Ideally, the label mechanism should be changed to cope with one
  label being declared relative to another - that may work, but could be
  a pain to implement (or is it? it may be easy enough that you just
  need to declare a new offset in the same segment...) This should be done
  before v1.0 is released. There is a comment regarding this in labels.c,
  towards the end of the file, which discusses ways of fixing this.

- nested %rep used to cause a panic. Now a more informative error	1.10
  message is produced. This problem whould be fixed before v1.0.
  See comment in switch() statement block for PP_REP in do_directive()
  in preproc.c (line 1585, or thereabouts)

- Contribution: zgraeme.tar contains improved hash table routines	?
  contributed by Graeme Defty <graeme@HK.Super.NET> for use in the
  label manager.

- Contribution: zsyntax.zip contains a syntax-highlighting mode for	?
  NASM, for use with the Aurora text editor (??).

- Contribution: zvim.zip contains a syntax-highlighting mode for	?
  NASM, for use with vim.

- Contribution: zkendal1.zip and zkendal2.zip contain Kendall		?
  Bennett's (<KendallB@scitechsoft.com>) alternative syntax stuff,
  providing an alternative syntax mode for NASM which allows a macro
  set to be written that allows the same source files to be
  assembled with NASM and TASM.

- Add the UD2 instruction.						?

- Add the four instructions documented in 24368901.pdf (Intel's own	?
  document).

- Some means of avoiding MOV memoffs,EAX which apparently the		1.10?
  Pentium pairing detector thinks modifies EAX. Similar means of
  choosing instruction encodings where necessary.

- The example of ..@ makes it clear that a ..@ label isn't just		?
  local, but doesn't make it clear that it isn't just global either.

- hpa wants an evaluator operator for ceil(log2(x)).			?

- Extra reloc types in ELF: R_386_16 type 20, PC16 is 21, 8 is 22, PC8 is 23.
  Add support for the 16s at least.					?


- Lazy section creation or selective section output, in COFF/win32	?
  at least and probably other formats: don't bother to emit a section
  if it contains no data. Particularly the default auto-created
  section. We believe zero-length sections crash at least WLINK (in
  win32).

- Make the flags field in `struct itemplate' in insns.h a long		?
  instead of an int.

- Implement %ifref to check whether a single-line macro has ever been	?
  expanded since (last re) definition. Or maybe not. We'll see.

- add pointer to \k{insLEAVE} and \k{insENTER} in chapters about	?
  mixed-language programming.

- Some equivalent to TASM's GLOBAL directive, ie something which	?
  defines a symbol as external if it doesn't end up being defined
  but defines it as public if it does end up being defined.

- Documentation doesn't explain about C++ name mangling.		?

- see if BITS can be made to do anything sensible in obj (eg set the	?
  default new-segment property to Use32).

- OBJ: coalesce consecutive offset and segment fixups for the same	?
  location into full-32bit-pointer fixups. This is apparently
  necessary because some twazzock in the PowerBASIC development
  team didn't deign to support the OMF spec the way the rest of the
  world sees it.

- Allow % to be separated from the rest of a preproc directive, for	?
  alternative directive indentation styles.

- __DATE__, __TIME__, and text variants of __NASM_MAJOR__ and		?
  __NASM_MINOR__.

- Warn on TIMES combined with multi-line macros. TIMES gets applied	1.00
  to first line only - should bring to users' attention.

- Re-work the evaluator, again, with a per-object-format fixup		1.10
  routine, so as to be able to cope with section offsets "really"
  being pure numbers; should be able to allow at _least_ the two
  common idioms
     TIMES 510-$ DB 0            ; bootsector
     MOV AX,(PROG_END-100H)/16   ; .COM TSR
  Would need to call the fixup throughout the evaluator, and the
  fixup would have to be allowed to return UNKNOWN on pass one if it
  had to. (_Always_ returning UNKNOWN on pass one, though a lovely
  clean design, breaks the first of the above examples.)

- Preprocessor identifier concatenation?				1.10

- Arbitrary section names in `bin'.					?
  Is this necessary? Is it even desirable?

- Ability to read from a pipe. Obviously not useful under dos, so	1.10
  memory problems with storing entire input file aren't a problem
  either.

  Related topic: file caching under DOS/32 bit...			1.10?
  maybe even implement discardable buffers that get thrown away
  when we get a NULL returned from malloc(). Only really useful under
  DOS. Think about it.

  Another related topic: possibly spool out the pre-processed		1.10?
  stuff to a file, to avoid having to re-process it. Possible problems
  with preprocessor values not known on pass 1? Have a look...

  Or maybe we can spool out a pre-parsed version...?			1.10
  Need to investigate feasibility. Does the results from the parser
  change from pass 1 to pass 2? Would it be feasible to alter it so that
  the parser returns an invariant result, and this is then processed
  afterwards to resolve label references, etc?

- Subsection support?							?

- A good ALIGN mechanism, similar to GAS's. GAS pads out space by	1.10?
  means of the following (32-bit) instructions:
          8DB42600000000    lea esi,[esi+0x0]
          8DB600000000      lea esi,[esi+0x0]
          8D742600          lea esi,[esi+0x0]
          8D7600            lea esi,[esi+0x0]
          8D36              lea esi,[esi]
          90                nop
  It uses up to two of these instructions to do up to 14-byte pads;
  when more than 14 bytes are needed, it issues a (short) jump to
  the end of the padded section and then NOPs the rest. Come up with
  a similar scheme for 16 bit mode, and also come up with a way to
  use it - internal to the assembler, so that programs using ALIGN
  don't knock over preprocess-only mode.
    Also re-work the macro form so that when given one argument in a
  code section it calls this feature.

- Possibly a means whereby FP constants can be specified as		?
  immediate operands to non-FP instructions.
  * Possible syntax: MOV EAX,FLOAT 1.2 to get a single-precision FP
    constant. Then maybe MOV EAX,HI_FLOAT 1.2 and MOV EAX,LO_FLOAT
    1.2 to get the two halves of a double-precision one. Best to
    ignore extended-precision in case it bites.
  * Alternatively, maybe MOV EAX,FLOAT(4,0-4,1.2) to get bytes 0-4
    (ie 0-3) of a 4-byte constant. Then HI_FLOAT is FLOAT(8,4-8,x)
    and LO_FLOAT is FLOAT(8,0-4,x). But this version allows two-byte
    chunks, one-byte chunks, even stranger chunks, and pieces of
    ten-byte reals to be bandied around as well.

- A UNION macro might be quite cool, now that ABSOLUTE is sane		?
  enough to be able to handle it.

- An equivalent to gcc's ## stringify operator, plus string		?
  concatenation, somehow implemented without undue ugliness, so as
  to be able to do `%include "/my/path/%1"' in a macro, or something
  similar...

- Actually _do_ something with the processor, privileged and		1.10
  undocumented flags in the instruction table. When this happens,
  consider allowing PMULHRW to map to either of the Cyrix or AMD
  versions?

- Maybe NEC V20/V30 instructions?					?

- Yet more object formats.
  * Possibly direct support for .EXE files?				1.10

- Symbol map in binary format. Format-specific options...		1.10?

- REDESIGN: Think about EQU dependency, and about start-point		1.20?
  specification in OBJ. Possibly re-think directive support.

- Think about a wrapper program like gcc? Possibly invent a _patch_	2.00?
  for gcc so that it can take .asm files on the command line?

- If a wrapper happens, think about adding an option to cause the	?
  resulting executable file to be executed immediately, thus
  allowing NASM source files to have #!... (probably silly)

- Multi-platform support? If so: definitely Alpha; possibly Java	?
  byte code; probably ARM/StrongARM; maybe Sparc; maybe Mips; maybe
  Vax. Perhaps Z80 and 6502, just for a laugh?

- Consider a 'verbose' option that prints information about the resulting ?
  object file onto stdout.