2018-07-01 22:45:53 +00:00
|
|
|
|
[< back to index](../index.md)
|
|
|
|
|
|
|
|
|
|
## Adding a custom platform
|
|
|
|
|
|
|
|
|
|
Every platform is defined in an `.ini` file with an appropriate name.
|
|
|
|
|
|
2018-12-17 09:41:28 +00:00
|
|
|
|
As an extension, multiline entries are supported:
|
|
|
|
|
if a line ends with a backslash character, the value continues to the next line.
|
|
|
|
|
|
2018-07-01 22:45:53 +00:00
|
|
|
|
#### `[compilation]` section
|
|
|
|
|
|
|
|
|
|
* `arch` – CPU architecture. It defines which instructions are available. Available values:
|
|
|
|
|
|
|
|
|
|
* `nmos` (original 6502)
|
|
|
|
|
|
|
|
|
|
* `strict` (NMOS without illegal instructions)
|
|
|
|
|
|
|
|
|
|
* `ricoh` (Ricoh 2A03/2A07, NMOS without decimal mode)
|
|
|
|
|
|
|
|
|
|
* `strictricoh` (Ricoh 2A03/2A07 without illegal instructions)
|
|
|
|
|
|
|
|
|
|
* `cmos` (WDC 65C02 or 65SC02)
|
|
|
|
|
|
|
|
|
|
* `65ce02` (CSG 65CE02; experimental)
|
|
|
|
|
|
|
|
|
|
* `huc6280` (Hudson HuC6280; experimental)
|
|
|
|
|
|
|
|
|
|
* `65816` (WDC 65816/65802; experimental; currently only programs that use only 16-bit addressing are supported)
|
|
|
|
|
|
2019-05-31 15:27:38 +00:00
|
|
|
|
* `z80` (Zilog Z80)
|
2018-07-27 17:12:54 +00:00
|
|
|
|
|
2019-05-31 15:27:38 +00:00
|
|
|
|
* `i8080` (Intel 8080)
|
2018-07-27 17:12:54 +00:00
|
|
|
|
|
2019-05-31 15:27:38 +00:00
|
|
|
|
* `i8085` (Intel 8085)
|
|
|
|
|
|
|
|
|
|
* `gameboy` (Sharp LR35902; experimental)
|
2019-05-31 15:03:35 +00:00
|
|
|
|
|
|
|
|
|
* `i8086` (Intel 8086; very experimental, very buggy and very, very incomplete –
|
|
|
|
|
see the [8086 support disclaimer](../lang/x86disclaimer.md))
|
2018-07-01 22:45:53 +00:00
|
|
|
|
|
2018-07-06 22:58:44 +00:00
|
|
|
|
* `encoding` – default encoding for console I/O, one of
|
|
|
|
|
`ascii`, `pet`/`petscii`, `petscr`/`cbmscr`, `atascii`, `bbc`, `jis`/`jisx`, `apple2`,
|
|
|
|
|
`iso_de`, `iso_no`/`iso_dk`, `iso_se`/`iso_fi`, `iso_yu`. Default: `ascii`
|
|
|
|
|
|
|
|
|
|
* `screen_encoding` – default encoding for screencodes (literals with encoding specified as `scr`).
|
|
|
|
|
Default: the same as `encoding`.
|
|
|
|
|
|
2018-07-01 22:45:53 +00:00
|
|
|
|
* `modules` – comma-separated list of modules that will be automatically imported
|
|
|
|
|
|
|
|
|
|
* other compilation options (they can be overridden using commandline options):
|
|
|
|
|
|
|
|
|
|
* `emit_illegals` – whether the compiler should emit illegal instructions, default `false`
|
|
|
|
|
|
|
|
|
|
* `emit_cmos` – whether the compiler should emit CMOS instructions, default is `true` on compatible processors and `false` elsewhere
|
|
|
|
|
|
|
|
|
|
* `emit_65816` – which 65816 instructions should the compiler emit, either `no`, `emulation` or `native`
|
|
|
|
|
|
2018-08-03 11:06:23 +00:00
|
|
|
|
* `decimal_mode` – whether the compiler should emit decimal instructions, default is `false` on `ricoh` and `strictricoh` and `true` elsewhere;
|
|
|
|
|
if disabled, a software decimal mode will be used
|
2018-07-01 22:45:53 +00:00
|
|
|
|
|
|
|
|
|
* `ro_arrays` – whether the compiler should warn upon array writes, default is `false`
|
|
|
|
|
|
|
|
|
|
* `prevent_jmp_indirect_bug` – whether the compiler should try to avoid the indirect JMP bug,
|
2018-07-03 21:28:05 +00:00
|
|
|
|
default is `false` on 65C02-compatible or non-6502 processors and `true` elsewhere
|
2018-07-01 22:45:53 +00:00
|
|
|
|
|
2018-12-27 00:18:29 +00:00
|
|
|
|
* `compact_dispatch_params` – whether parameter values in return dispatch statements may overlap other objects, default is `true`.
|
2018-07-01 22:45:53 +00:00
|
|
|
|
This may cause problems if the parameter table is stored next to a hardware register that has side effects when reading.
|
|
|
|
|
|
|
|
|
|
* `lunix` – generate relocatable code for LUnix/LNG, default is `false`
|
2018-07-03 21:28:05 +00:00
|
|
|
|
|
2018-08-03 11:06:23 +00:00
|
|
|
|
* `zeropage_register` – reserve a certain amount of bytes of zero page as a pseudoregister to increase language features.
|
|
|
|
|
Default: `4` if targeting a 6502-based architecture, `0` otherwise.
|
|
|
|
|
`true` is a synonym of the current compiler default (currently: 4) and `false` is a synonym for 0.
|
2018-07-03 21:28:05 +00:00
|
|
|
|
|
|
|
|
|
* `inline` - inline functions automatically by default, default is `false`.
|
|
|
|
|
|
|
|
|
|
* `ipo` - enable interprocedural optimization, default is `false`.
|
2018-07-06 22:58:44 +00:00
|
|
|
|
|
2018-12-27 00:18:29 +00:00
|
|
|
|
* `function_fallthrough` – whether should replace a tail call by simply putting one function after another, default is `true`.
|
|
|
|
|
|
|
|
|
|
* `function_deduplication` – whether identical functions should be merged into one function, default is `true`.
|
|
|
|
|
|
|
|
|
|
* `subroutine_extraction` – whether identical fragments of functions should be extracted into subroutines, default is `false`.
|
|
|
|
|
|
2018-07-06 22:58:44 +00:00
|
|
|
|
* `lenient_encoding` - allow for automatic substitution of invalid characters in string literals using the default encodings, default is `false`.
|
2018-08-01 10:50:05 +00:00
|
|
|
|
|
|
|
|
|
* `use_shadow_registers_for_irq` – use Z80 shadow registers in interrupt routines, default is `true` for Z80 and `false` otherwise
|
|
|
|
|
|
|
|
|
|
* `ix_stack` – use the IX register to access stack variables, default is `true` for Z80 and `false` otherwise
|
|
|
|
|
|
|
|
|
|
* `iy_stack` – use the IY register to access stack variables, default is `false`
|
|
|
|
|
|
|
|
|
|
* `ix_scratch` – allow using the IY register for other purposes, default is `false`
|
|
|
|
|
|
|
|
|
|
* `iy_scratch` – allow using the IY register for other purposes, default is `false`
|
2018-08-01 19:16:20 +00:00
|
|
|
|
|
2018-12-14 21:01:52 +00:00
|
|
|
|
* `software_stach` – use software stack for stack variables, default is `false`
|
|
|
|
|
|
2019-05-31 15:27:38 +00:00
|
|
|
|
* `output_intel_syntax` – use Intel syntax instead of Zilog syntax, default is `true` for Intel 8080/8085 and `false` otherwise
|
2018-08-01 10:50:05 +00:00
|
|
|
|
|
2018-07-01 22:45:53 +00:00
|
|
|
|
|
2018-07-12 16:30:35 +00:00
|
|
|
|
#### `[define]` section
|
|
|
|
|
|
|
|
|
|
This section defines values of features of the target.
|
|
|
|
|
See the [preprocessor documentation](../lang/preprocessor.md) for more info.
|
2018-07-01 22:45:53 +00:00
|
|
|
|
|
|
|
|
|
#### `[allocation]` section
|
|
|
|
|
|
|
|
|
|
* `zp_pointers` –
|
|
|
|
|
either a list of comma separated zeropage addresses that can be used by the program as zeropage pointers, or `all` for all.
|
|
|
|
|
Each value should be the address of the first of two free bytes in the zeropage.
|
|
|
|
|
Only used for 6502-based targets.
|
|
|
|
|
|
|
|
|
|
* `segments` – a comma-separated list of segment names.
|
|
|
|
|
A segment named `default` is always required.
|
|
|
|
|
Default: `default`. In all options below, `NAME` refers to a segment name.
|
|
|
|
|
|
|
|
|
|
* `default_code_segment` – the default segment for code and initialized arrays.
|
|
|
|
|
Note that the default segment for uninitialized arrays and variables is always `default`.
|
|
|
|
|
Default: `default`
|
|
|
|
|
|
|
|
|
|
* `segment_NAME_start` – the first address used for automatic allocation in the segment.
|
|
|
|
|
Note that the `default` segment shouldn't start before $200, as the $0-$1FF range is reserved for the zeropage and the stack.
|
|
|
|
|
The `main` function will be placed as close to the beginning of its segment as possible, but not necessarily at `segment_NAME_start`
|
|
|
|
|
|
|
|
|
|
* `segment_NAME_end` – the last address in the segment
|
|
|
|
|
|
|
|
|
|
* `segment_NAME_codeend` – the last address in the segment for code and initialized arrays.
|
|
|
|
|
Only uninitialized variables are allowed between `segment_NAME_codeend` and `segment_NAME_end`.
|
|
|
|
|
Default: the same as `segment_NAME_end`.
|
|
|
|
|
|
|
|
|
|
* `segment_NAME_datastart` – the first address used for non-zeropage variables, or `after_code` if the variables should be allocated after the code.
|
|
|
|
|
Default: `after_code`.
|
|
|
|
|
|
|
|
|
|
#### `[output]` section
|
|
|
|
|
|
|
|
|
|
* `style` – how multi-segment programs should be output:
|
|
|
|
|
|
|
|
|
|
* `single` – output a single file, based mostly, but not necessarily only on data in the `default` segment (the default)
|
|
|
|
|
|
|
|
|
|
* `lunix` – like `single`, but add data necessary for relocation between code and data (requires `lunix` option in the `compilation` section)
|
|
|
|
|
|
|
|
|
|
* `per_segment` – generate a separate file with each segment
|
|
|
|
|
|
|
|
|
|
* `format` – output file format; a comma-separated list of tokens:
|
|
|
|
|
|
|
|
|
|
* literal byte values
|
|
|
|
|
|
|
|
|
|
* `startaddr` – little-endian 16-bit address of the first used byte of the compiled output (not necessarily the segment start)
|
|
|
|
|
|
|
|
|
|
* `startpage` – the high byte of `startaddr`
|
|
|
|
|
|
|
|
|
|
* `endaddr` – little-endian 16-bit address of the last used byte of the compiled output (usually not the segment end)
|
|
|
|
|
|
|
|
|
|
* `allocated` – all used bytes
|
|
|
|
|
|
|
|
|
|
* `pagecount` – the number of pages used by all used bytes (including partially filled pages)
|
|
|
|
|
|
|
|
|
|
* `<addr>:<addr>` - inclusive range of bytes
|
|
|
|
|
|
|
|
|
|
* `<segment>:<addr>:<addr>` - inclusive range of bytes in a given segment
|
|
|
|
|
|
|
|
|
|
* `d88` - a D88 floppy disk image for PC-88
|
|
|
|
|
|
2018-07-03 21:28:05 +00:00
|
|
|
|
* `tap` - a tape disk image for ZX Spectrum
|
|
|
|
|
|
2018-07-01 22:45:53 +00:00
|
|
|
|
* `extension` – target file extension, with or without the dot
|
|
|
|
|
|
|
|
|
|
* `bbc_inf` – should the `.inf` file with file metadata for BBC Micro be created
|
2019-01-11 14:17:48 +00:00
|
|
|
|
|
|
|
|
|
* `gb_checksum` – should the main output file be patched with Game Boy-compatible checksums
|