The latest version contains the following features:

- General IDE Enhancements
- Fully Integrated Assembler Editor
- Content Outline and Source Folding
- Content Assistance and Code Completion
- Hyperlink Navigation
- Hex Editor
- Graphics Conversion Editor
- Preferences for Editing
- Preferences for Building and Running
- Annotations for Building
- Planned Features
- Known Bugs

##### General IDE Enhancements

- The environment variable "WUDSN_LANGUAGE" can be set to "en" or "de" to override the default locale of the IDE used for all menu and message texts.
- The "Open Folder" context menu is available for all folders and files.
- The "Sort" context menu with sub-menu is available for all text files, including
  - Case-sensitive, case-insensitive, and numeric sorting
  - Sorting with and without removal of duplicates
  - Reverse ordering
- The online help contains the "WUDSN IDE Guide" with the following multiple sections.
  - WUDSN IDE
    This is the documentation from the website.
    - Video links to the tutorial and release news
    - Features
    - Installation
    - FQA
    - Link
  - Assemblers
    This is the information on the supported assemblers and their properties.
    - General
      Links, syntax, and support features.
    - Instructions
      All supported instructions, including their descriptions, are grouped by type.
    - Manual
      Direct access to the PDF, HTML, or text manual files or files that are part of the installation.
  - Hardware Platforms
    The information on the supported hardware platforms and the corresponding emulators and links.
    - Reference documentation - Hardware-specific PDF, HTML, or text files with CPU and customer chips reference sheets and programming guides

##### Fully Integrated Assembler Editor

- The Eclipse platform contains editors like, for example, the generic text editor. Editors can support one or more content types identified by file extensions. One editor can be the default for a specific file extension. WUDSN IDE provides an assembler editor and a corresponding content type for every compiler. Every assembler editor has an associated default compiler, which defines via the preferences which application is used to run the output file.
- Content types and file associations for Atari 2600 compilers
  - DASM Source File (*.asm)
- Content types and file associations for Atari 8-bit compilers
  - ATASM Source File (*.asm)
  - MADS Source File (*.asm, default)
  - XASM Source File (*.asx, default)
- Content types and file associations for C64 compilers
  - ACME Source File (*.a, default)
- New content types and file associations for NES compilers
  - ASM6 Source File (*.asm)
- The default editor for a file extension can be configured in the "File Associations" section of the preferences with the "Default " button.
- Syntax highlighting provides colors and styles for comments, directives, different types of identifiers, legal opcodes, illegal opcodes, pseudo opcodes, and strings.
- Single-line comments for the current line selection can be toggled using "CTRL-7" or the editor context menu entry "Toggle Comment".
- Support for illegal opcodes of the 6502 CPU is configurable.
- Support for 16-bit opcodes of the WDC 65816 CPU is configurable.
- Built-in support for ATASM assembler, MADS assembler, XASM assembler, ACME assembler
- Built-in support for running compiler output files with the operating system default application without configuration effort
- Built-in support for Altirra emulator, Atari800Win emulator, Atari800MacX emulator, Atari++ emulator
- Adding support for new compilers and applications is possible via Eclipse extension points.
- Build or build and run with a single keystroke or via the menu.
- Toolbar button for "Build and Run", which adapts to the hardware of the currently opened editor. For example, it will show a C64 icon when using the "ACME (C64)" editor.
- The toolbar button for "Build and Run" offers a pulldown menu that allows running the output file with any of the applications configured in the preferences. You can run the output file quickly with different emulators without changing the preferences. That can be very helpful if one emulator shows another behavior or if you have specified a build script as a user-defined application in the preferences.
- The "Open Source Folder" and "Open Output Folder" entries the respective folder directly from the menu.
- The "Language Help" entry opens the language-specific help from the menu if the documentation is available in the default folder structure of the assembler/compiler executable.
  TODO: Note that the images below are outdated and must be updated.
- The complete list of assembler/compiler errors and warning messages in the problems view.
- Direct navigation to the source location is supported by double-clicking the problem message.
- Problem markers in the scroll area, including the tooltip with the problem message.
- German localization is available for all Eclipse plugin texts. The original compiler messages are not translated, but some are mapped automatically.
  - ATASM ".bank" warnings are mapped to info messages.
- The console view with compiler output opens automatically in the background after compiling, which is helpful in cases where the plugin is incomplete. The "Console" window is automatically brought to the front when the assembler/compiler starts. This prevents the compiler output from being hidden behind other consoles in the console view.

##### Content Outline and Source Folding

The content outline and the folder of source code sections are two of the most helpful features of WUDSN IDE. They help you navigate and manage even huge source files efficiently. The standard menu "Window / Show View / Outline" activates the content outline. Source folding requires the content outline to be active. The content outline has the following features.

- Nesting.
- Type-specific icons.
- Automated asynchronous parsing while typing.
- Automated recursive parsing of source includes and merges with the current outline.
- Positioning in the content outline remains stable while typing unless structure changes appear.
- Outline is supported for
  - equate definitions (including equates from defining expression)
  - labels
  - and variable definitions
  - source includes
  - binary includes
- Outline and folding are supported for
  - definition section
  - implementation sections
  - enum definition
  - struct definitions
  - macro definitions
  - repeat sections
  - procedure definitions
  - local sections.
- The line-end comment is a short description in the outline.
- The toolbar has a button to toggle the sorting order of the sections and labels. The state of the toggle button is persisted automatically along with the respective source file. The setting from the currently opened file will be used for files that do not have a value set yet.
- Folding is activated automatically when the outline is visible.
- Folding is nested with a tooltip for folded sections.
- Folding is supported for if/else/endif blocks.

##### Content Assistance and Code Completion

Content assistance provides proposals as you type and lets you enter code more efficiently. Content assistance is activated by pressing "CTRL-Space" or automatically by typing special characters. The content assistance has the following features.

- Content assistance for directives, legal, illegal, and pseudo-opcodes.
- Recognizes if there is already an instruction in the current line and suggests the available identifiers instead if this is the case. It supports global identifiers in the active source file and source files included from there.
- Completion proposal auto-activation without pressing "CTRL-Space" after typing compiler-dependent characters, for example, "." in ATASM, "." or "#" in MADS, and "!" in ACME
- Type-specific icon and mnemonic highlighting.
- Progressive filtering as you type.
- Automatic detection of lower-case/upper-case based on current input.
- Configurable default case (lower-case, upper-case) via preferences.
- Multi-line content completion and explicit cursor positioning, for example, ".MA" becomes "`.MACRO <cursor is here> <newline>.ENDM`".

##### Hyperlink Navigation

The source code editor provides detection for different types of links in the source code. You can navigate to other parts of the file, other files, or websites via these links. You activate the hyperlink navigation by pressing "CTRL". The hyperlink navigation has the following features.

- Hyperlink navigation via CTRL-click to source includes and binary includes.
- Support for relative and absolute file paths.
- Source files are always opened with the same assembler editor, irrespective of the extension.
- Missing file extensions for source include statements are appended automatically where possible.
- Option for binary include statements opening the file with:
  - The built-in hex editor
  - The built-in graphics editor
  - The default Eclipse editor (e.g., a text editor)
  - The system editor (e.g., an emulator or a paint program)
- Hyperlink navigation via CTRL-click to labels equates, local definitions, macro definitions, and procedure definitions. In case there is only one target, direct navigation takes place. In case there is more than one possible target, the type and line number of the target are displayed in a hyperlink popup. All included source files are also considered, like in the content outline. If targets are from different files, the file name is also displayed as a differentiator in the hyperlink popup.

##### Hex Editor

The Hex Editor allows inspection of arbitrary files on the binary level. It has the following features.

- It is available via the context menu, including a multi-file selection to open several files simultaneously.
- The "Open With Hex Editor" menu entry closes an existing editor in case the file is already opened, forcing the file to be opened with the hex editor. In addition, the hex editor is set as the default editor for this file. Consequently, double-clicking the file in the package explorer will open it automatically with the hex editor, no matter which file type. This saves you from always using the context menu just because the file has no known file type. Using the "Open With" context menu entry, you can change the default editor again.
- It is available via hyperlink navigation for binary include statements.
- The content offers a context menu to copy parts of the file into the clipboard in different formats:
  - hex values (".byte $01,$02,...")
  - decimal values (".byte 1,2,...")
  - ASCII string
  This is very helpful to turn parts of a file into source code. The possibility to copy/paste into the binary file to modify is prepared but not working yet and will be completed later.
- It detects and supports the type of the file. For example, binary files, Atari COM files, Atari Disk Images, and several other file types.
- The possible file modes for a binary file are computed automatically and used as default when opening the file.
- Unsupported file modes are detected and cannot be used.
- Files with a block structure get an outline in the outline view.
- Files with a corrupted block structure are detected and displayed as well as possible.

##### Graphics Conversion Editor

The Graphics Conversion Editor views and converts many binary and image file formats. It has the following features.

- Viewer for binary files and 8-bit image files.
  The most suitable supported converter and the corresponding default parameters are computed based on the file content, size, and extension.
  The converters for the Atari standard image formats are based on RECOIL fka. FAIL is the excellent First Atari Image Library created by Piotr Fusik and Adrian Matoga.

  Platform | File Extension | File Format
  --- | --- | ---
  Atari 8-bit | AP3 | 80x192, 256 colors, interlaced
  Atari 8-bit | APC | Any Point, Any Color, 80x96, 256 colors, interlaced
  Atari 8-bit | CHR | 8x8 charset, mono or multi-color
  Atari 8-bit | CCI | Champions' Interlace, 160x192, compressed
  Atari 8-bit | CIN | Champions' Interlace, 160x192
  Atari 8-bit | CHG | Gephard Hires Graphics, up to 320x200, mono
  Atari 8-bit | CPR | Trzmiel, 320x192, mono, compressed
  Atari 8-bit | FNT | Standard 8x8 font, mono
  Atari 8-bit | GR8 | Standard 320x192, mono
  Atari 8-bit | GR9 | Standard 80x192, grayscale
  Atari 8-bit | HIP | Hard Interlace Picture, 160x200, grayscale
  Atari 8-bit | HR | Hires 256x239, three colors, interlaced
  Atari 8-bit | HR2 | Hires 320x200, five colors, interlaced
  Atari 8-bit | ILC | APAC 80x192, 256 colors interlaced
  Atari 8-bit | INP | Interlace Picture 160x200, seven colors, interlaced
  Atari 8-bit | INT | INT95a, up to 160x239, 16 colors, interlaced
  Atari 8-bit | MCP | McPainter, 160x200, 16 colors, interlaced
  Atari 8-bit | MIC | Micropainter 160x192, 4 colors
  Atari 8-bit | PIC | Koala MicroIllustrator, 160x192, 4 colors, compressed
  Atari 8-bit | PLM | Plama 256, 80x96, 256 colors
  Atari 8-bit | RIP | Rocky Interlace Picture, up to 160x239
  Atari 8-bit | SXS | 16x16 font, mono
  Atari 8-bit | TIP | Taquart Interlace Picture, up to 160x119
  C64 | 64C | Charset, mono or multi-color
  C64 | SPR | Sprite, mono or multi-color

- Viewer for GIF/JPG/BMP/PNG images.
- Available via context menu including multi-file-selection to open several files simultaneously.
  TODO: This is no longer the case. This part of the documentation must be tested and updated.
- The "Open With Graphics Editor" menu entry closes an existing editor in case the file is already opened, forcing the file to be opened with the graphics editor. In addition, the graphics editor is set as the default editor for this file. Consequently, double-clicking the file in the package explorer will open it automatically with the graphics editor, no matter which file type. This saves you from always using the context menu just because the file has no known file type. Using the "Open With" context menu entry, you can change the default editor again.
- Available via hyperlink navigation for binary include statements.
- Conversion from binary or 8-bit image files to GIF/JPG/BMP/PNG images.
  - Up to three source files, depending on the converter.
  - A configurable start offset for every source file helps extract character sets.
  - A configurable palette via the Image Palette view.
  - A configurable number of rows and columns.
  - Configurable spacing width and color to separate tiles and unused areas.
  - Separate aspect ratio for displaying and saving the image file.
- Conversion from GIF/JPG/BMP/PNG images to binary files or 8-bit images using JavaScript.
  - Separate aspect ratio for loading and displaying the image file
  - Default scripts are included. They can be adjusted and saved along with the other parameters.
- The image palette view associated with the graphics editor displays the palette entries and the color histogram. It supports filtering unused colors, sorting by index and color frequencies, pre-settings, and editing the palette when displaying 8-bit images.
- Conversion files with the extension ".cnv" save the conversion direction and parameters.
- Support for relative file paths. If the file path is in the same folder as the ".cnv" file, it is automatically converted to a relative file path when the file name is defaulted or picked from the file browser dialog. This allows us to move the ".cnv" and referenced source files together without breaking the saved paths.

##### Preferences for Editing

The WUDSN IDE editor is configurable via language-specific preferences. They are available via the entry "Preferences" from the menu "Window" (under Windows and Linux) or the menu "Eclipse" (under macOS) and include the following.

- Configuration of syntax highlighting colors and styles for comments, directives, all types of identifiers, legal opcodes, illegal opcodes, numbers, pseudo opcodes, and strings.
- For non-unique identifiers, the syntax highlighting will try to be the best guess.
- Configuration of default case in content assistance.

##### Preferences for Building and Running

The build process of WUDSN IDE is configurable via language and assembler/compiler-specific preferences. They are available via the entry "Preferences" from the menu "Window" (under Windows and Linux) or the menu "Eclipse" (under macOS)

- Download links, configurable paths, and default parameters are provided for all assemblers and compilers.
- The path to the downloaded executable file can be configured in the language preferences once for all target platforms.
- If no path is configured, WUDSN IDE will look for the executable file in the "Tools" folder of the installation.
- The default file extension filter for selecting executable files is "*.exe" on Windows and "*.*" on all other operating systems.
- The "Apply Defaults" button explicitly does not reset the paths to the executable files.
- Building preferences can be maintained for all assemblers/compilers where an executable file is configured.
- The active editor's language and assembler/compiler tabs are activated automatically upon opening the language preferences.
- Via the "Target" option, you can activate the support for illegal opcodes of the 6502 CPU and 16-bit opcodes of the WDC 65816 CPU in syntax highlighting and content assistance.
  The selection is offered only if the assembler supports the respective feature.
- Build parameters can be specified per assembler/compiler. If no explicit values are specified, predefined defaults to run out-of-the-box are displayed and used.
- Variables provide access to the project or file-specific paths in parameters:
  - {$sourceFolderPath}
    The absolute path to the source folder.
  - {$sourceFilePath}
    The absolute path to the source file.
  - {$outputFolderPath}
    The absolute path to the output folder.
  - {$outputFilePath}
    The absolute path to the output file.
  - {$outputFileName}
    The name of the output file, including its extension, for example, "TestFile123.asm".
  - {$outputFileNameWithoutExtension}
    The name of the output file without an extension, for example, "TestFile123".
  - {$outputFileNameShortWithoutExtension}
    The name of the output file without extension is shortened to 8 alphanumeric characters, for example, "TESTFILE".
  Make sure that you don't remove parameters when you specify your values.
  If not, creating the label definition file or parsing the compiler log may fail.
  - ATASM requires the "-s" parameter to be present".
  - MADS requires the "-p" parameter to be present.
  - ACME requires the "!to" directive in the source to be commented out to ensure the output file name from the command line is used.

In addition, the application to run the outcome of the build process, typically an emulator, can be configured. Download links for every supported application are offered in the preferences.

- The path to the downloaded application executable file can be configured in the language preferences once for all target platforms.
- If no path is configured, WUDSN IDE will look for the executable file in the "Tools" folder of the installation.
- The default file extension filter for selecting executable files is "*.exe" on Windows and "*.*" on all other operating systems.

The preferences for the applications to run the result of the build process can be maintained for all assemblers/compilers in parallel. They include:

- Selection of the application to run the outcome of the build process:
  - Use the "Operating System Default Application" of the platform.
    For Windows and macOS, choosing the "Operating System Default Application" means that for the ".xex" file extension, the emulator will be started automatically without any further configuration.
  - Use one of the predefined applications and optionally change the command line.
  - Use a user-defined application to open the output file.
- Run parameters per assembler/compiler and application can be specified. If no explicit values are specified, predefined defaults to run out-of-the-box are displayed and used.
- Variables provide access to the project or file-specific paths in parameters:
  - {$runnerExecutablePath}
    The absolute path to the executable of the application.
  - {$sourceFolderPath}
    The absolute path to the source folder.
  - {$sourceFilePath}
    The absolute path to the source file.
  - {$outputFolderPath}
    The absolute path to the output folder.
  - {$outputFilePath}
    The absolute path to the output file.
  - {$outputFileName}
    The name of the output file, including its extension, for example, "TestFile123.asm".
  - {$outputFileNameWithoutExtension}
    The name of the output file without an extension, for example, "TestFile123".
  - {$outputFileNameShortWithoutExtension}
    The name of the output file without extension is shortened to 8 alphanumeric characters, for example, "TESTFILE".
    TODO: Note that the images below are outdated and must be updated.

##### Annotations for Building

- For most use cases, the defaults provided for the compilers and in the preferences are sufficient. But suppose you want to develop in parallel in multiple projects for different platforms (e.g., Apple II and Atari 8-bit) or various output formats (".XEX" and ".BIN") with the same assembler/compiler. In that case, changing the preferences every time may become cumbersome. Therefore, WUDSN IDE offers annotations to put into the source code files. These annotations override the defaults and the settings from the preferences.
- All language annotations start with the prefix "@com.wudsn.ide.lng." followed by the lower-case name of the annotation, an equals sign, and the unquoted value. Example: "@com.wudsn.ide.lng.hardware=ATARI8BIT"
- In earlier versions of WUDSN, language annotations started with the prefix "@com.wudsn.ide.asm.". While they are still evaluated, adapting to the new prefix is strongly recommended.
- All annotations can be placed in comment lines at the beginning of a source file. Some annotations are only relevant for the main source file. Some are only relevant in include source files. Some are relevant for all source files.
- @com.wudsn.ide.lng.hardware
  - Defines the target hardware for which the preferences shall be evaluated, mainly which emulator runs the output file.
  - Allowed values are "APPLE2", "ATARI2600", "ATARI7800", "ATARI8BIT", "C64", "NES".
  - This annotation is relevant for all source files.
  - This annotation is only evaluated when a file is opened. So, if you add this annotation or change its value, you must close and re-open the file once.
  - Example: @com.wudsn.ide.lng.hardware=ATARI8BIT
- @com.wudsn.ide.lng.mainsourcefile
  - Defines the main source file to which the current source file belongs. When executing the "Compile" action, the primary source file is compiled instead of the active file.
  - Allowed values are file paths relative to the current folder, including source file and absolute file paths.
  - This annotation is only relevant in include source files.
  - Example: @com.wudsn.ide.lng.mainsourcefile=ExampleMain.asm
- @com.wudsn.ide.lng.outputfoldermode
  - Overrides the "Output Folder Mode" from the preferences.
  - Allowed values are "SOURCE_FOLDER", "TEMP_FOLDER", and "FIXED_FOLDER".
  - This annotation is only relevant in the main source file.
  - Example: @com.wudsn.ide.lng.outputfoldermode=SOURCE_FOLDER
- @com.wudsn.ide.lng.outputfolder
  - Overrides the "Output Folder" from the preferences and the "@com.wudsn.ide.lng.outputfoldermode" annotation.
  - Allowed values are file paths relative to the folder of the main source file and absolute file paths.
  - This annotation is only relevant in the main source file.
  - Example: @com.wudsn.ide.lng.outputfolder=..\out
- @com.wudsn.ide.lng.outputfileextension
  - Overrides the "Output File Extension" from the preferences.
  - Allowed values have to start with a period.
  - This annotation is only relevant in the main source file.
  - Example: @com.wudsn.ide.lng.outputfileextension=.bin
- @com.wudsn.ide.lng.outputfile
  - Overrides the "Output Folder" and "Output File Extension" values from the preferences and the automatic computation of the out file name based on the primary source file name.
  - Allowed values are file paths relative to the folder of the primary source file and absolute file paths.
  - This annotation is only relevant in the main source file.
  - Example: @com.wudsn.ide.lng.outputfile=..\out\output.bin

##### Planned Features

- Planned features are listed as issues of category "enhancement" on GitHub. There, you can also request new features.
- The table below shows the current core feature set that depends on the compiler.
  Features not supported by the compiler itself and hence cannot be supported by the IDE are marked as "n/a".

  Compiler | Default Hardware | Auto-Completion Activation | Single-Line Comments | Block Comments | Strings | Opcodes | Directives | Compile Log Parsing | Content Outline | Label Definition File Format
  --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | ---
  ACME | C64 | Yes: ! | Yes: ;| | n/a | Yes: " | Yes | Partly | Yes | Partly | ACME
  ATASM | Atari 8-bit | Yes: . | Yes: ; | n/a | Yes: " | Yes | Yes | Yes | Yes | XASM 3.0.1
  MADS | Atari 8-bit | Yes: . # | Yes: ; * // | Yes | Yes: ' " | Yes | Yes | Yes | Yes | MADS
  XASM | Atari 8-bit | n/a | Yes: ; * | | n/a | Yes: ' " | Yes | Yes | Yes | Yes | XASM 3.0.1

  #####

##### Known Bugs

You can find all known bugs on GitHub. If you find new bugs, please report them on Github or contact me directly.