TODO 13 KB

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