Difference between revisions of "Build tool"

From MSX Game Library

(Project)
(Project)
 
(13 intermediate revisions by the same user not shown)
Line 54: Line 54:
 
=== Tools ===
 
=== Tools ===
  
{{PARAM|Compiler|Path to the C compile program |string|`${ToolsDir}sdcc\bin\sdcc`}}
+
{{PARAM|SDCCPath|Path to SDCC tools chain|string|`${ToolsDir}sdcc/`}}
  
{{PARAM|Assembler|Path to the assembler program |string|`${ToolsDir}sdcc\bin\sdasz80`}}
+
{{PARAM|Compiler|Path to the C compile program|string|`${SDCCPath}bin/sdcc`}}
  
{{PARAM|Linker|Path to the linker program |string|`${ToolsDir}sdcc\bin\sdcc`}}
+
{{PARAM|Assembler|Path to the assembler program|string|`${SDCCPath}bin/sdasz80`}}
  
{{PARAM|MakeLib|Path to the program to generate lib file |string|`${ToolsDir}sdcc\bin\sdar`;}}
+
{{PARAM|Linker|Path to the linker program|string|`${SDCCPath}bin/sdcc`}}
  
{{PARAM|Hex2Bin|Path to IHX to binary convertor |string|`${ToolsDir}MSXtk\bin\MSXhex`}}
+
{{PARAM|MakeLib|Path to the program to generate lib file|string|`${SDCCPath}bin/sdar`}}
  
{{PARAM|MSXDOS|Path to the MSX-DOS files |string|`${ToolsDir}build\MSXDOS`}}
+
{{PARAM|Hex2Bin|Path to IHX to binary convertor|string|`${ToolsDir}MSXtk/bin/MSXhex`}}
  
{{PARAM|DskTool|Path to the tool to generate DSK file |string|`${ToolsDir}build\DskTool\dsktool`}}
+
{{PARAM|MSXDOS|Path to the MSX-DOS files|string|`${ToolsDir}build/DOS/`}}
  
{{PARAM|Emulator|Path to the emulator to launch the project |string|}}
+
{{PARAM|DskTool|Path to the tool to generate DSK file|string|`${ToolsDir}build/msxtar/msxtar`}}
  
{{PARAM|Debugger|Path to the debugger to test the project |string|}}
+
{{PARAM|Emulator|Path to the emulator to launch the project|string|}}
  
 
=== Project ===
 
=== Project ===
Line 85: Line 85:
  
 
{{PARAM|Machine|Target MSX machine version|string|"1"}}
 
{{PARAM|Machine|Target MSX machine version|string|"1"}}
<syntaxhighlight lang="txt">
+
<syntaxhighlight lang="js">
1        MSX1
+
//  - 1        MSX1
2        MSX2
+
//  - 2        MSX2
12      MSX1 and 2 (multi support)
+
//  - 12      MSX1 and 2 (multi support)
2K      Korean MSX2 (SC9 support)
+
//  - 2K      Korean MSX2 (SC9 support)
2P      MSX2+
+
//  - 2P      MSX2+
22P      MSX2 and 2+ (multi support)
+
//  - 22P      MSX2 and 2+ (multi support)
122P    MSX1, 2 and 2+ (multi support)
+
//  - 122P    MSX1, 2 and 2+ (multi support)
0        MSX0
+
//  - 0        MSX0
TR      MSX turbo R
+
//  - TR      MSX turbo R
3        MSX3 (reserved)
+
//  - 3        MSX3 (reserved)
 
</syntaxhighlight>
 
</syntaxhighlight>
 
Multi support means that the application can use the features of all supported MSX generations. The user must detect the MSX version at runtime and adjust the program accordingly.
 
Multi support means that the application can use the features of all supported MSX generations. The user must detect the MSX version at runtime and adjust the program accordingly.
  
 
{{PARAM|Target|Target program format|string|"ROM_32K"}}
 
{{PARAM|Target|Target program format|string|"ROM_32K"}}
<syntaxhighlight lang="txt">
+
<syntaxhighlight lang="js">
BIN              .bin    BASIC binary program (starting at 8000h)
+
//  - BIN              .bin    BASIC binary program (starting at 8000h)
BIN_USR          .bin    BASIC USR binary driver (starting at C000h)
+
//  - BIN_DISK        .bin    BASIC binary program (starting at 8000h) on disk
DOS1            .com    MSX-DOS 1 program (starting at 0100h)
+
//  - BIN_TAPE        .bin    BASIC binary program (starting at 8000h) on tape
DOS2            .com    MSX-DOS 2 program (starting at 0100h)
+
//  - BIN_USR          .bin    BASIC USR binary driver (starting at C000h)
DOS2_MAPPER      .com    MSX-DOS 2 launcher to RAM mapper (launcher starting at 0100h, program at 4000h)
+
//  - DOS1            .com    MSX-DOS 1 program (starting at 0100h)
DOS0            .com    Direct program boot from disk (starting at 0100h)
+
//  - DOS2            .com    MSX-DOS 2 program (starting at 0100h)
ROM_8K          .rom    8 KB ROM in page 1 (4000h ~ 5FFFh)
+
//  - DOS0            .com    Direct program boot from disk (starting at 0100h)
ROM_8K_P2        .rom    8 KB ROM in page 2 (8000h ~ 9FFFh)
+
//  - ROM_8K          .rom    8 KB ROM in page 1 (4000h ~ 5FFFh)
ROM_16K          .rom    16 KB ROM in page 1 (4000h ~ 7FFFh)
+
//  - ROM_8K_P2        .rom    8 KB ROM in page 2 (8000h ~ 9FFFh)
ROM_16K_P2      .rom    16 KB ROM in page 2 (8000h ~ BFFFh)
+
//  - ROM_16K          .rom    16 KB ROM in page 1 (4000h ~ 7FFFh)
ROM_32K          .rom    32 KB ROM in page 1&2 (4000h ~ BFFFh)
+
//  - ROM_16K_P2      .rom    16 KB ROM in page 2 (8000h ~ BFFFh)
ROM_48K          .rom    48 KB ROM in page 0-2 (0000h ~ BFFFh)
+
//  - ROM_32K          .rom    32 KB ROM in page 1&2 (4000h ~ BFFFh)
ROM_48K_ISR      .rom    48 KB ROM in page 0-2 (0000h ~ BFFFh) with ISR replacement
+
//  - ROM_48K          .rom    48 KB ROM in page 0-2 (0000h ~ BFFFh)
ROM_64K          .rom    64 KB ROM in page 0-3 (0000h ~ FFFFh)
+
//  - ROM_48K_ISR      .rom    48 KB ROM in page 0-2 (0000h ~ BFFFh) with ISR replacement
ROM_64K_ISR      .rom    64 KB ROM in page 0-3 (0000h ~ FFFFh) with ISR replacement
+
//  - ROM_64K          .rom    64 KB ROM in page 0-3 (0000h ~ FFFFh)
ROM_ASCII8      .rom    ASCII-8: 8 KB segments for a total of 64 KB to 2 MB
+
//  - ROM_64K_ISR      .rom    64 KB ROM in page 0-3 (0000h ~ FFFFh) with ISR replacement
ROM_ASCII16      .rom    ASCII-16: 16 KB segments for a total of 64 KB to 4 MB
+
//  - ROM_ASCII8      .rom    ASCII-8: 8 KB segments for a total of 64 KB to 2 MB
ROM_KONAMI      .rom    Konami MegaROM (aka Konami4): 8 KB segments for a total of 64 KB to 2 MB
+
//  - ROM_ASCII16      .rom    ASCII-16: 16 KB segments for a total of 64 KB to 4 MB
ROM_KONAMI_SCC  .rom    Konami MegaROM SCC (aka Konami5): 8 KB segments for a total of 64 KB to 2 MB
+
//  - ROM_KONAMI      .rom    Konami MegaROM (aka Konami4): 8 KB segments for a total of 64 KB to 2 MB
 +
//  - ROM_KONAMI_SCC  .rom    Konami MegaROM SCC (aka Konami5): 8 KB segments for a total of 64 KB to 2 MB
 +
//  - ROM_NEO8        .rom    NEO-8: 8 KB segments for a total of 1 MB to 32 MB
 +
//  - ROM_NEO16        .rom    NEO-16: 16 KB segments for a total of 1 MB to 64 MB
 
</syntaxhighlight>
 
</syntaxhighlight>
 
More detail: [[Targets]]
 
More detail: [[Targets]]
  
 
{{PARAM|ROMSize|ROM mapper total size in KB. Must be a multiple of 8 or 16 depending on the mapper type (from 64 to 4096)|number|128}}
 
{{PARAM|ROMSize|ROM mapper total size in KB. Must be a multiple of 8 or 16 depending on the mapper type (from 64 to 4096)|number|128}}
 +
 +
{{PARAM|ROMMainSegments|Number of segments in the main program of a mapped-ROM. 0 means 'number of segments to fill 32 KB of ROM|number|0}}
  
 
{{PARAM|ROMDelayBoot|Postpone the ROM startup to let the other ROMs initialize like Disk controller or Network cartridge|boolean|false}}
 
{{PARAM|ROMDelayBoot|Postpone the ROM startup to let the other ROMs initialize like Disk controller or Network cartridge|boolean|false}}
  
{{PARAM|InstallRAMISR|Select RAM in slot 0 and install ISR there. For MSX with at least 64 KB of RAM|boolean|false}}
+
{{PARAM|AddROMSignature|Add a ROM signature to help flasher and emulator to detect the ROM type properly|boolean|false}}
⚠️ The current version of the startup code don't works on few MSXs with memory splitted on several slots. However, it is safe if you target MSX2+ or MSX turbo R machine.
+
 
 +
{{PARAM|InstallRAMISR|Select RAM in slot 0 and install ISR and optional code there. For MSX with at least 64 KB of RAM|string|"RAM0_NONE"}}
 +
<syntaxhighlight lang="js">
 +
//  - RAM0_NONE      Don't install anything in RAM
 +
//  - RAM0_ISR        Install only ISR
 +
//  - RAM0_SEGMENT    Install ISR and segment data (for mapped-ROM)
 +
</syntaxhighlight>
 +
For mode detail about usage of RAM0_SEGMENT, check [[Build tool/InstallRAMISR|this document]].
  
 
{{PARAM|CustomISR|Type of custom ISR to install. ISR is install in RAM or ROM depending on Target and InstallRAMISR parameters|string|"VBLANK"}}
 
{{PARAM|CustomISR|Type of custom ISR to install. ISR is install in RAM or ROM depending on Target and InstallRAMISR parameters|string|"VBLANK"}}
<syntaxhighlight lang="txt">
+
<syntaxhighlight lang="js">
VBLANK     V-blank handler
+
//  - VBLANK     V-blank handler
VHBLANK     V-blank and h-blank handler (V9938 or V9958)
+
//  - VHBLANK   V-blank and h-blank handler (V9938 or V9958)
V9990       V-blank, h-blank and command end handler (V9990)
+
//  - V9990     V-blank, h-blank and command end handler (V9990)
 
</syntaxhighlight>
 
</syntaxhighlight>
 
Depending on the selected ISR, some functions must be provided by the user:
 
Depending on the selected ISR, some functions must be provided by the user:
Line 152: Line 164:
  
 
{{PARAM|BankedCall|Use automatic banked call and trampoline functions (for mapped ROM)|boolean|false}}
 
{{PARAM|BankedCall|Use automatic banked call and trampoline functions (for mapped ROM)|boolean|false}}
 +
 +
{{PARAM|ForceCodeAddr|Overwrite code starting address. For example. 0xE0000 for a driver in RAM|number|0}}
  
 
{{PARAM|ForceRamAddr|Overwrite RAM starting address. For example. 0xE0000 for 8K RAM machine|number|0}}
 
{{PARAM|ForceRamAddr|Overwrite RAM starting address. For example. 0xE0000 for 8K RAM machine|number|0}}
  
 
{{PARAM|RawFiles|List of raw data files to be added to the final binary|array|}}
 
{{PARAM|RawFiles|List of raw data files to be added to the final binary|array|}}
 +
Raw files can be added to final binary by defining 3 types of position: <tt>offset</tt>, <tt>segment</tt> or <tt>page</tt>.
 
<syntaxhighlight lang="js">
 
<syntaxhighlight lang="js">
 
// Sample example
 
// Sample example
 
RawFiles = [
 
RawFiles = [
     { offset: 0x10000, file:"file1.bin"},
+
     { offset: 0x10000, file: "file1.bin" }, // Offset from final binary start
     { segment: 7, file:"file2.bin" },
+
     { segment: 7, file: "file2.bin" },     // Segment number for mapped-ROM
     { page: 0, file:"file.bin" },
+
     { page: 0, file: "file.bin" },         // Page number (16 KB) in the final binary
 
];
 
];
 
</syntaxhighlight>
 
</syntaxhighlight>
Line 195: Line 210:
  
 
{{PARAM|AsmOptim|Assembler code optimizer ⚠️ WIP|string|"None"}}
 
{{PARAM|AsmOptim|Assembler code optimizer ⚠️ WIP|string|"None"}}
<syntaxhighlight lang="txt">
+
<syntaxhighlight lang="js">
None
+
//  - None
Peep     SDCC peep hole otpimizer
+
//  - Peep       SDCC peep hole otpimizer
MDL     MDL z80 otpimizer
+
//  - MDL       MDL z80 otpimizer
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
{{PARAM|Optim|Code optimization priority|string|"Speed"}}
 
{{PARAM|Optim|Code optimization priority|string|"Speed"}}
<syntaxhighlight lang="txt">
+
<syntaxhighlight lang="js">
Default
+
//  - Default
Speed
+
//  - Speed
Size
+
//  - Size
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
{{PARAM|CompileComplexity|Compile complexity. The higher the most optimized but the slowest to compile. Can be one of the predefine name or a integer value.|string/integer|"Default"}}
 
{{PARAM|CompileComplexity|Compile complexity. The higher the most optimized but the slowest to compile. Can be one of the predefine name or a integer value.|string/integer|"Default"}}
<syntaxhighlight lang="txt">
+
<syntaxhighlight lang="js">
Fast         2000
+
//  - Fast             2000
Default       3000
+
//  - Default           3000
Optimized     50000
+
//  - Optimized       50000
Ultra         200000
+
//  - Ultra           200000
Insane        10000000
+
//  - Insane        10000000
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Line 224: Line 239:
  
 
{{PARAM|BuildVersion|Automatic increment of build version in a header file|boolean|false}}
 
{{PARAM|BuildVersion|Automatic increment of build version in a header file|boolean|false}}
 +
 +
{{PARAM|PackSegments|Package all segments into a lib file to reduce the number of files to link|boolean|false}}
 +
 +
{{PARAM|HexBinOpt|Additionnal options of Hex to Binary convertor|string|""}}
 +
 +
{{PARAM|PreBuildScripts|Command lines to be executed before the build process|array|[]}}
 +
 +
{{PARAM|PostBuildScripts|Command lines to be executed after the build process|array|[]}}
  
 
=== Localization ===
 
=== Localization ===
Line 234: Line 257:
  
 
{{PARAM|LocSplitDef|Split socalization data and definitions in different files|boolean|false}}
 
{{PARAM|LocSplitDef|Split socalization data and definitions in different files|boolean|false}}
 +
 +
For example:
 +
<syntaxhighlight lang="js">
 +
//-- List files to be localized (array)
 +
LocFiles = [ "translate_en.ini", "translate_fr.ini", "translate_ja.ini" ];
 +
 +
//-- Localization output filename (string)
 +
LocOutput = "data/translate.h";
 +
 +
//-- Localization structure name (string)
 +
LocStruct = "g_TransData";
 +
 +
//-- Split socalization data and definitions in different files (boolean)
 +
LocSplitDef = true;
 +
</syntaxhighlight>
  
 
=== Build Tool ===
 
=== Build Tool ===
Line 250: Line 288:
  
 
{{PARAM|AnalyzerOutput|Analyzer output selection|string|Both}}
 
{{PARAM|AnalyzerOutput|Analyzer output selection|string|Both}}
<syntaxhighlight lang="txt">
+
<syntaxhighlight lang="js">
Console    // Output to termial console
+
//  - Console    Output to termial console
File      // Output to file
+
//  - File      Output to file
Both      // Output to file and termial console (default)
+
//  - Both      Output to file and termial console (default)
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
{{PARAM|AnalyzerReport|Analyzer report elements|string|ASMCV}}
 
{{PARAM|AnalyzerReport|Analyzer report elements|string|ASMCV}}
<syntaxhighlight lang="txt">
+
<syntaxhighlight lang="js">
[A]        // Report areas
+
//  - [A]        Report areas
[S]        // Report segments
+
//  - [S]        Report segments
[M]        // Report modules
+
//  - [M]        Report modules
[C]        // Report code symbols
+
//  - [C]        Report code symbols
[V]        // Report variable symbols
+
//  - [V]        Report variable symbols
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
{{PARAM|AnalyzerSort|Analyzer report sorting|string|Size}}
 
{{PARAM|AnalyzerSort|Analyzer report sorting|string|Size}}
<syntaxhighlight lang="txt">
+
<syntaxhighlight lang="js">
None      // No sorting (MAP file order)
+
//  - None      No sorting (MAP file order)
Alpha      // Alphanumeric sorting
+
//  - Alpha      Alphanumeric sorting
Size      // Size sorting (default)
+
//  - Size      Size sorting (default)
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Line 308: Line 346:
 
==== Input ====
 
==== Input ====
 
{{PARAM|EmulPortA|Plug a virtual device into the joystick port A|string|}}
 
{{PARAM|EmulPortA|Plug a virtual device into the joystick port A|string|}}
<syntaxhighlight lang="txt">
+
<syntaxhighlight lang="js">
Joystick
+
//  - Joystick
Mouse
+
//  - Mouse
Paddle
+
//  - Paddle
JoyMEga
+
//  - JoyMega
NinjaTap
+
//  - NinjaTap
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
{{PARAM|EmulPortB|Plug a virtual device into the joystick port B|string|}}
 
{{PARAM|EmulPortB|Plug a virtual device into the joystick port B|string|}}
 +
<syntaxhighlight lang="js">
 +
//  - Joystick
 +
//  - Mouse
 +
//  - Paddle
 +
//  - JoyMega
 +
//  - NinjaTap
 +
</syntaxhighlight>
 +
 +
==== Run device ====
 +
{{PARAM|RunDevice|Run device like Easy-USB|string|""}}
 +
 +
{{PARAM|RunDeviceOpt|Run device option|string|""}}
  
 
== Command-line overwrite ==
 
== Command-line overwrite ==

Latest revision as of 01:02, 3 December 2024

The Build tool is the MSXGL script that will create your final program for MSX.

It is fully configurable by the user. For example, it is here that we can choose whether we want our game to be available in ROM, MSX-DOS or BASIC binary format. Or if our program should be MSX1 compatible or only MSX2+ for example.

The Build tool is written in JavaScript and executed via Node.js. All the programs needed to run the script are available in MSXgl and the user does not need to install anything.

Build tool is started from the project directory via a script that depends on the platform:

  • On Windows, run build.bat,
  • On Linux, run ./build.sh.

See the example or template project for an actual use case.

Configuration

The Build tool configuration's parameters are defined in the engine (engine/script/js/setup_global.js) and can be overwrite by the user at two levels:

  • The default configuration (projects/default_config.js), commun for all the projects.
  • The project configuration (projects/myProject/project_config.js), specific for a given project.

The value of the parameters redefined in a higher level replaces that of a lower level.

Some parameters can be overwrite as command-line parameters (see Command-line overwrite section).

The order of priority is: Command-line > Project config > Default config > Engine config.

Build parameters

Stage

The build tool is divided into several stages that you can choose to activate or deactivate at will.

DoClean: Clear all intermediate files and exit [type: boolean | default: false]

DoCompile: Compile all the project and engine source code. Generate all REL files [type: boolean | default: true]

DoMake: Link all the project and engine source code. Merge all REL into one IHX file [type: boolean | default: true]

DoPackage: Generate final binary file (boolean). Binarize the IHX file [type: boolean | default: true]

DoDeploy: Gathering of all files necessary for the program to work (boolean). Depends on the type of target [type: boolean | default: true]

DoRun: Start the program automatically at the end of the build [type: boolean | default: false]

Path

ProjDir: Project directory [type: string | default: ]

OutDir: Intermediate files directory [type: string | default: `${ProjDir}out/`]

RootDir: MSXgl root directory [type: string | default: ]

LibDir: Library directory [type: string | default: `${RootDir}engine/`]

ToolsDir: Tools directory [type: string | default: `${RootDir}tools/`]

Tools

SDCCPath: Path to SDCC tools chain [type: string | default: `${ToolsDir}sdcc/`]

Compiler: Path to the C compile program [type: string | default: `${SDCCPath}bin/sdcc`]

Assembler: Path to the assembler program [type: string | default: `${SDCCPath}bin/sdasz80`]

Linker: Path to the linker program [type: string | default: `${SDCCPath}bin/sdcc`]

MakeLib: Path to the program to generate lib file [type: string | default: `${SDCCPath}bin/sdar`]

Hex2Bin: Path to IHX to binary convertor [type: string | default: `${ToolsDir}MSXtk/bin/MSXhex`]

MSXDOS: Path to the MSX-DOS files [type: string | default: `${ToolsDir}build/DOS/`]

DskTool: Path to the tool to generate DSK file [type: string | default: `${ToolsDir}build/msxtar/msxtar`]

Emulator: Path to the emulator to launch the project [type: string | default: ]

Project

ProjName: Project name. Will be use for output filename [type: string | default: ]

ProjModules: List of project modules to build. If empty, ProjName will be added [type: array | default: ]

ProjSegments: Project segments base name. ProjName will be used if not defined [type: string | default: ]

LibModules: List of library modules to build [type: array | default: ]

AddSources: Additional sources to be compiled and linked with the project [type: array | default: ]

Machine: Target MSX machine version [type: string | default: "1"]

//   - 1        MSX1
//   - 2        MSX2
//   - 12       MSX1 and 2 (multi support)
//   - 2K       Korean MSX2 (SC9 support)
//   - 2P       MSX2+
//   - 22P      MSX2 and 2+ (multi support)
//   - 122P     MSX1, 2 and 2+ (multi support)
//   - 0        MSX0
//   - TR       MSX turbo R
//   - 3        MSX3 (reserved)

Multi support means that the application can use the features of all supported MSX generations. The user must detect the MSX version at runtime and adjust the program accordingly.

Target: Target program format [type: string | default: "ROM_32K"]

//   - BIN              .bin    BASIC binary program (starting at 8000h)
//   - BIN_DISK         .bin    BASIC binary program (starting at 8000h) on disk
//   - BIN_TAPE         .bin    BASIC binary program (starting at 8000h) on tape
//   - BIN_USR          .bin    BASIC USR binary driver (starting at C000h)
//   - DOS1             .com    MSX-DOS 1 program (starting at 0100h)
//   - DOS2             .com    MSX-DOS 2 program (starting at 0100h)
//   - DOS0             .com    Direct program boot from disk (starting at 0100h)
//   - ROM_8K           .rom    8 KB ROM in page 1 (4000h ~ 5FFFh)
//   - ROM_8K_P2        .rom    8 KB ROM in page 2 (8000h ~ 9FFFh)
//   - ROM_16K          .rom    16 KB ROM in page 1 (4000h ~ 7FFFh)
//   - ROM_16K_P2       .rom    16 KB ROM in page 2 (8000h ~ BFFFh)
//   - ROM_32K          .rom    32 KB ROM in page 1&2 (4000h ~ BFFFh)
//   - ROM_48K          .rom    48 KB ROM in page 0-2 (0000h ~ BFFFh)
//   - ROM_48K_ISR      .rom    48 KB ROM in page 0-2 (0000h ~ BFFFh) with ISR replacement
//   - ROM_64K          .rom    64 KB ROM in page 0-3 (0000h ~ FFFFh)
//   - ROM_64K_ISR      .rom    64 KB ROM in page 0-3 (0000h ~ FFFFh) with ISR replacement
//   - ROM_ASCII8       .rom    ASCII-8: 8 KB segments for a total of 64 KB to 2 MB
//   - ROM_ASCII16      .rom    ASCII-16: 16 KB segments for a total of 64 KB to 4 MB
//   - ROM_KONAMI       .rom    Konami MegaROM (aka Konami4): 8 KB segments for a total of 64 KB to 2 MB
//   - ROM_KONAMI_SCC   .rom    Konami MegaROM SCC (aka Konami5): 8 KB segments for a total of 64 KB to 2 MB
//   - ROM_NEO8         .rom    NEO-8: 8 KB segments for a total of 1 MB to 32 MB
//   - ROM_NEO16        .rom    NEO-16: 16 KB segments for a total of 1 MB to 64 MB

More detail: Targets

ROMSize: ROM mapper total size in KB. Must be a multiple of 8 or 16 depending on the mapper type (from 64 to 4096) [type: number | default: 128]

ROMMainSegments: Number of segments in the main program of a mapped-ROM. 0 means 'number of segments to fill 32 KB of ROM [type: number | default: 0]

ROMDelayBoot: Postpone the ROM startup to let the other ROMs initialize like Disk controller or Network cartridge [type: boolean | default: false]

AddROMSignature: Add a ROM signature to help flasher and emulator to detect the ROM type properly [type: boolean | default: false]

InstallRAMISR: Select RAM in slot 0 and install ISR and optional code there. For MSX with at least 64 KB of RAM [type: string | default: "RAM0_NONE"]

//   - RAM0_NONE       Don't install anything in RAM 
//   - RAM0_ISR        Install only ISR
//   - RAM0_SEGMENT    Install ISR and segment data (for mapped-ROM)

For mode detail about usage of RAM0_SEGMENT, check this document.

CustomISR: Type of custom ISR to install. ISR is install in RAM or ROM depending on Target and InstallRAMISR parameters [type: string | default: "VBLANK"]

//   - VBLANK     V-blank handler
//   - VHBLANK    V-blank and h-blank handler (V9938 or V9958)
//   - V9990      V-blank, h-blank and command end handler (V9990)

Depending on the selected ISR, some functions must be provided by the user:

// CustomISR = "VBLANK"
VDP_InterruptHandler(); // V-blank interrupt

// CustomISR = "VHBLANK"
VDP_InterruptHandler(); // V-blank interrupt
VDP_HBlankHandler();    // H-blank interrupt

// CustomISR = "V9990"
V9_InterruptVBlank();   // V-blank interrupt
V9_InterruptHBlank();   // H-blank interrupt
V9_InterruptCommand();  // Command end interrupt

BankedCall: Use automatic banked call and trampoline functions (for mapped ROM) [type: boolean | default: false]

ForceCodeAddr: Overwrite code starting address. For example. 0xE0000 for a driver in RAM [type: number | default: 0]

ForceRamAddr: Overwrite RAM starting address. For example. 0xE0000 for 8K RAM machine [type: number | default: 0]

RawFiles: List of raw data files to be added to the final binary [type: array | default: ] Raw files can be added to final binary by defining 3 types of position: offset, segment or page.

// Sample example
RawFiles = [
    { offset: 0x10000, file: "file1.bin" }, // Offset from final binary start
    { segment: 7, file: "file2.bin" },      // Segment number for mapped-ROM
    { page: 0, file: "file.bin" },          // Page number (16 KB) in the final binary
];

DiskFiles: List of data files to copy to disk [type: array | default: ]

DiskSize: Size of the final disk (.DSK file). Can be "360K" or "720K" [type: string | default: "720K"]

USRAddr: BASIC USR driver default address [type: number | default: 0xC000]

DOSParseArg: Parse MSX-DOS command-line arguments [type: boolean | default: true]

Signature

AppSignature: Add application signature to binary data [type: boolean | default: false]

AppCompany: Application company. Can be 2 character string or 16-bits integer [type: string/number | default: "GL"]

AppID: Application ID. Can be 2 character string or 16-bits integer (0~65535) [type: string/number | default: 0]

AppExtra: Application extra data. Comma-separated bytes starting with data size [type: array | default: ]

Note: See AppSignature and AppExtra for more details.

Make

BuildLibrary: Force to generate MSXgl static library even if 'msxgl.lib' already exist [type: bolean | default: true]

Debug: Prepare program for debug [type: boolean | default: false]

DebugSymbols: Move debug symbols to deployement folder [type: boolean | default: false]

AllowUndocumented: Allow compiler to generate undocumented Z80 instructions [type: boolean | default: true]

AsmOptim: Assembler code optimizer ⚠️ WIP [type: string | default: "None"]

//   - None
//   - Peep       SDCC peep hole otpimizer
//   - MDL        MDL z80 otpimizer

Optim: Code optimization priority [type: string | default: "Speed"]

//   - Default
//   - Speed
//   - Size

CompileComplexity: Compile complexity. The higher the most optimized but the slowest to compile. Can be one of the predefine name or a integer value. [type: string/integer | default: "Default"]

//   - Fast              2000
//   - Default           3000
//   - Optimized        50000
//   - Ultra           200000
//   - Insane        10000000

CompileOpt: Additionnal compilation flag [type: string | default: ]

CompileSkipOld: Skip file if compiled data (REL) is newer than the source code [type: boolean | default: false]

LinkOpt: Additionnal link options [type: string | default: ]

BuildVersion: Automatic increment of build version in a header file [type: boolean | default: false]

PackSegments: Package all segments into a lib file to reduce the number of files to link [type: boolean | default: false]

HexBinOpt: Additionnal options of Hex to Binary convertor [type: string | default: ""]

PreBuildScripts: Command lines to be executed before the build process [type: array | default: []]

PostBuildScripts: Command lines to be executed after the build process [type: array | default: []]

Localization

LocFiles: List files to be localized [type: array | default: ]

LocOutput: Localization output filename [type: string | default: "localization.h"]

LocStruct: Localization structure name [type: string | default: "g_LocData"]

LocSplitDef: Split socalization data and definitions in different files [type: boolean | default: false]

For example:

//-- List files to be localized (array)
LocFiles = [ "translate_en.ini", "translate_fr.ini", "translate_ja.ini" ];

//-- Localization output filename (string)
LocOutput = "data/translate.h";

//-- Localization structure name (string)
LocStruct = "g_TransData";

//-- Split socalization data and definitions in different files (boolean)
LocSplitDef = true;

Build Tool

Verbose: Activate verbose mode and get more build information [type: boolean | default: false]

LogStdout: Output build information to the standard console [type: boolean | default: true]

LogFile: Output build information to a log file [type: boolean | default: false]

LogFileName: Name of the log file [type: string | default: "log_YYYYMMDD_HHMMSS.txt"]

Analyzer

Analyzer: Execute compiler analyzer [type: boolean | default: true]

AnalyzerOutput: Analyzer output selection [type: string | default: Both]

//   - Console    Output to termial console
//   - File       Output to file
//   - Both       Output to file and termial console (default)

AnalyzerReport: Analyzer report elements [type: string | default: ASMCV]

//   - [A]        Report areas
//   - [S]        Report segments
//   - [M]        Report modules
//   - [C]        Report code symbols
//   - [V]        Report variable symbols

AnalyzerSort: Analyzer report sorting [type: string | default: Size]

//   - None       No sorting (MAP file order)
//   - Alpha      Alphanumeric sorting
//   - Size       Size sorting (default)

AnalyzerCSV: Export analyzer data to CSV file [type: boolean | default: false]

AnalyzerSeparator: Analyzer CSV file separator [type: string | default: ","]

Emulator

General

EmulMachine: Force the MSX version of the emulated machine [type: boolean | default: true]

Emul60Hz: Force the emulated machine to be at 60 Hz [type: boolean | default: false]

EmulFullScreen: Force the emulator to start in fullscreen mode [type: boolean | default: false]

EmulMute: Disable emulator sound [type: boolean | default: false]

EmulDebug: Start emulator debugger with program launch [type: boolean | default: false]

EmulTurbo: Start emulator in turbo mode [type: boolean | default: false]

EmulExtraParam: Emulator extra parameters to be add to command-line. Emulator sotfware specific [type: string | default: ]

Extensions

EmulSCC: Add SCC extension [type: boolean | default: false]

EmulMSXMusic: Add MSX-Music extension [type: boolean | default: false]

EmulMSXAudio: Add MSX-Audio extension [type: boolean | default: false]

EmulOPL4: Add OPL4 extension [type: boolean | default: false]

EmulPSG2: Add second PSG extension [type: boolean | default: false]

EmulV9990: Add V9990 video-chip extension [type: boolean | default: false]

Input

EmulPortA: Plug a virtual device into the joystick port A [type: string | default: ]

//   - Joystick
//   - Mouse
//   - Paddle
//   - JoyMega
//   - NinjaTap

EmulPortB: Plug a virtual device into the joystick port B [type: string | default: ]

//   - Joystick
//   - Mouse
//   - Paddle
//   - JoyMega
//   - NinjaTap

Run device

RunDevice: Run device like Easy-USB [type: string | default: ""]

RunDeviceOpt: Run device option [type: string | default: ""]

Command-line overwrite

The followings parameters can be overwrite from command-line parameter when the Build tool script is invoked:

Parameter Syntax Desc. Example
Target target=XXX Overwrite program target type target=DOS1 (for MSX-DOS program)
Machine machine=XXX Overwrite target machine machine=2P (for MSX2+ machine)
ProjName projname=XXX Overwrite project name projname=mygame
ROMSize romsize=XXX Overwrite mapped-ROM size romsize=256 (for 256 KB mapped-ROM)
ROMDelayBoot delay Force the delay boot parameter to true delay
InstallRAMISR ramisr Force the install RAM ISR parameter (switch page 0 to RAM and intall ISR there) ramisr

For example:

..\..\tools\build\Node\node.exe ..\..\engine\script\js\build.js target=%1

Allows you to overwrite the build target from the command line. E.g.: build DOS2 (MSX-DOS2 application) or build ROM_48K (48 KB plain-ROM cartridge).

Misc

Previously, the Build tool was written in Windows batch format. Here is a guide to convert the configuration files to use the new Build tool.

⚠️ Old batch version of the build tool is no longer supported start from MSXgl 1.0.1 version. Please update your project configuration.