forked from CopperlineHQ/Copperline
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcopperline.example.toml
More file actions
659 lines (582 loc) · 33.1 KB
/
Copy pathcopperline.example.toml
File metadata and controls
659 lines (582 loc) · 33.1 KB
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
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
# Copperline configuration. Copy this to `copperline.toml` (next to the
# executable, or in the working directory) or pass it explicitly with
# `--config path/to/file.toml`. Any field can be omitted; missing
# fields fall back to the defaults shown here.
# ROM image to load. Must be exactly 512 KiB. Omit this field (and pass no
# ROM argument) to boot the bundled AROS open-source Kickstart replacement,
# which ships with Copperline as the default boot ROM.
rom = "kickstart.rom"
# The Copperline identification board: a small, inert Zorro board that lets
# guest software (identify.library) detect it is running under Copperline.
# identify = false # drop it from the Zorro chain (default: present)
[emulation]
# The CPU, chipset, CIA, audio, floppy, and chip-bus timing all advance on
# one deterministic clock that approximates a stock PAL Amiga 68000. Use
# --noaudio for silent runs, or --audio-wav for emulated-time WAV capture.
# (An old "speed" key here is accepted but ignored: "real" was the only
# timing model, so it carried no information.)
# Whether the machine is powered on at launch. When false, the emulator
# sits powered off showing a test screen until you click the power button
# on the status bar -- useful for arming video capture first. The power
# button cold-boots the machine (clears RAM); powering off returns it to
# that cold test-screen state.
power_on = true
# Real-mode pacing budget. "cycles" (default) clocks the CPU by each
# instruction's actual m68k cycle cost plus chip-bus waits, matching real
# 68000 speed (the core's 68000 cycle counts are now accurate).
# "instructions" uses a flat COPPERLINE_REAL_CPU_CPI (default 4.0)
# cycles/instruction quota per frame -- cheaper but runs the CPU faster
# than hardware. The COPPERLINE_REAL_PACING_BUDGET env var overrides this for
# one run.
pacing_budget = "cycles"
# Ask the OS to schedule Copperline's latency-critical threads (the
# wall-clock pacer and the audio callback) above normal, to reduce frame
# stutter and audio glitches when the host is under load. Best effort and off
# by default: on macOS the pacer thread joins the USER_INTERACTIVE QoS class
# (the audio callback is already real-time under Core Audio); on Windows it is
# raised via SetThreadPriority; on Linux raising priority needs privilege (an
# rtprio rlimit, CAP_SYS_NICE, or root) and is otherwise declined without
# failing the run. The COPPERLINE_REALTIME_PRIORITY env var overrides this for
# one run (set it to 0/false/off to force it off).
# realtime_priority = false
# Default speed of Warp Speed (turbo) mode. The window presents with vsync,
# so emulating one frame per presented frame would pin warp to the host
# monitor's refresh rate. This is an output frame skip: warp retires this
# many emulated frames per presented frame, making warp roughly the limit
# times the refresh rate (host CPU permitting). One of "2x", "4x", "8x",
# "16x", or "max" (default; run flat out, still presenting at vsync). Adjust
# it live from Warp Settings > Warp Limit or Cmd+Shift+W / Alt+Shift+W.
# warp_speed = "max"
# Record rewind history from power-on, so Cmd+Z / Alt+Z (and the Rewind menu
# item) can step the machine back through it. Off by default because it is
# not free: every rewind_interval_frames the whole machine is serialized, and
# rewind_budget_mb of host memory is spent holding the results. How far back
# that reaches depends on the machine's RAM -- a 512K A500 buys minutes, a
# 2M+8M A1200 rather less. Each rewind step goes back one interval; the
# oldest snapshots are dropped first once the budget is full.
# rewind = false
# rewind_budget_mb = 256
# rewind_interval_frames = 25
[cpu]
# CPU type. One of: 68000, 68010, 68EC020, 68020, 68030, 68040, 68060.
# 68EC020 uses the 68020 instruction set with a 24-bit external address bus.
model = "68000"
# FPU (68881/68882 coprocessor; on-die on the full 68040/68060). Needs a
# 68020 or later -- a 68000/68010 cannot drive one. The 68040 and 68060 enable
# it by default; on other 020+ CPUs opt in here. fpu = false on the 68060
# models the FPU-less LC/EC parts (PCR.DFP).
# fpu = true
# CPU clock in MHz. Defaults to the model's stock speed (68000 ~7.09,
# 020 ~14, 030/040 ~25, 060 50). The chipset and pacing model the CPU as a whole
# multiple of the colour clock, so the effective clock is rounded to the
# nearest multiple. Fast RAM runs at the CPU clock; chip and slow/trapdoor
# RAM stay chip-bus bound.
# clock_mhz = 14.0
# Model the on-chip caches (a hit serves with no chip-bus cycle, as on
# real silicon, so cached code stops contending with DMA). On by default
# for the CPUs that have them, since AmigaOS enables them at boot: the
# instruction cache on the 68020/68EC020/68030/68040/68060 (256 bytes on
# the 020/030, 4 KB on the 040, 8 KB on the 060) and the data cache on
# the 68030/68040/68060. The
# data cache only covers expansion RAM/ROM -- chip and slow RAM are
# cache-inhibited because DMA writes them, as on real Amigas. Set false
# to force a CPU to run cacheless (e.g. for the uncalibrated baseline).
# icache = false
# dcache = false
# Experimental: fast CPU execution through the m68k core's batch/trace-JIT
# path. The machine behaves like an ideal accelerator at clock_mhz: one
# instruction per CPU clock with zero-wait fast RAM/ROM (a 50 MHz 68040
# runs on the order of 50 MIPS; raise clock_mhz for more), but chip-level
# races and cycle-counted effects no longer line up. Chip/slow RAM keep
# their shared-bus arbitration, served through the still-active on-chip
# cache models as on a real accelerator. Needs a 68020 or later (the
# 68000/68010 shared-bus float and prefetch semantics require the precise
# core, so it is ignored there). Off by default.
# jit = true
# 68060 only: the 68060 dropped MOVEP, CHK2/CMP2, CAS2, misaligned CAS,
# 64-bit MUL/DIV, and most FPU operations beyond basic arithmetic from
# silicon. "trap" (default) raises the chip's unimplemented-instruction
# exceptions for the OS-side 68060.library to emulate, exactly like a
# real accelerator board; "native" executes them directly for systems
# without the library.
# unimplemented = "trap"
# Optional machine profile: a validated bundle of chipset revisions, CPU,
# memory sizes, RTC presence, and gate array. Explicit [cpu]/[chipset]/
# [memory] sections still override the profile defaults. The "A500" profile
# models a Rev 6A board: the ECS "Fatter" 8372A Agnus (1 MiB chip reach plus
# the software PAL/NTSC switch) with the original OCS 8362 Denise, 512 KiB
# chip + 512 KiB trapdoor slow RAM (fit up to 1 MiB chip with chip = "1M").
# Without any [machine] section the default machine is that same Rev 6A
# A500 (ECS 8372A Agnus, OCS 8362 Denise, 512 KiB chip + 512 KiB trapdoor
# slow RAM) -- the most common and most-targeted Amiga.
# The big-box profiles (A3000, A4000) are new and incomplete, but both boot,
# each off its own built-in disk controller: put drives on the A3000's SCSI
# with [scsi], and on the A4000's IDE with [ide].
# rom_scsi_device_disable skips the ROM's scsi.device. It defaults to true
# when the machine's built-in disk controller has no drives configured (an
# A600/A1200/A4000 with no [ide] drives, an A3000 with no [scsi] units): the
# driver would only cost boot time probing an empty bus. With drives it runs,
# since scsi.device is their boot path. Set explicitly to win either way.
# [machine]
# profile = "A600" # A1000 | A500 | A500OCS | A500Plus | A600 | A1200 | A3000 | A4000 | CDTV | CD32
# rtc = true # add a $DC0000 battery RTC (default: only A500+/CDTV/A3000/A4000 have one)
# rtc_chip = "RP5C01" # clock part: MSM6242 (OKI, the default) or RP5C01 (Ricoh, the
# # A3000/A4000 part and their profile default; Linux/m68k requires
# # it on those machines). Setting the key implies rtc = true.
# rtc_time = "2005-03-18 01:58:29" # seed the clock (implies rtc = true); Unix seconds also accepted.
# # A seeded clock ticks in emulated time, so the guest-visible
# # time is deterministic across runs.
# rtc_frozen = true # stop the seeded clock at rtc_time exactly
# battmem = "battmem.nvram" # RP5C01 battery-RAM (battmem.resource) backing file, in the
# # WinUAE/Amiberry .nvram layout. Defaults on when an RP5C01
# # is fitted; "" keeps the battery registers session-only.
# mem_controller = "ramsey-07" # none | ramsey-04 (A3000) | ramsey-07 (A4000)
# rom_scsi_device_disable = true # skip the ROM's scsi.device (default: see above)
# Debugging aids. log_unmapped logs every CPU read and write that no device
# decodes, which is how you find the registers a guest expects and Copperline
# does not provide yet: reads report the floating bus value they returned,
# writes report the value that went nowhere. A booting ROM probes enough empty
# space to make "all" a firehose (a million lines a boot), so prefer aiming it
# at one window.
# [debug]
# log_unmapped = "DD0000-DEFFFF" # hex START-END, end included; or "all"
# validate_chipset = true # report chipset misuse with the PC that caused it
# detect_smc = true # report writes landing on already-executed code
# Extended ROM image for CDTV/CD32 machines: a 256 KiB image maps at
# $F00000 (CDTV), a 512 KiB image at $E00000 (CD32). The CDTV profile
# boots its startup screen with this plus a Kickstart 1.3 rom; the CD32
# boot path additionally needs the CD32 Kickstart 3.1 (rev 40.60) as the
# main rom.
# extended_rom = "cdtv-extended.rom"
# CD image (BIN/CUE, single- or multi-file, with MODE1/2048, MODE1/2352,
# and AUDIO tracks; a bare .iso; or a chdman v5 .chd), mounted on the
# machine's CD controller (CD32 Akiko or CDTV DMAC). insert_delay inserts the disc that many
# emulated seconds after power-on instead of at boot: some CDTV discs
# (e.g. Xenon II) only boot when inserted after the boot screen, on
# real hardware too.
# [cd]
# image = "game.cue"
# insert_delay = 20.0
#
# CD32 NVRAM (save game EEPROM) backing file; defaults to
# "cd32-nvram.bin" on CD32 machines.
# nvram = "cd32-nvram.bin"
[memory]
# Chip RAM. Accepts a number with optional unit (K, KB, M, MB).
# Must be a multiple of 4 KiB.
# OCS: max 512K
# ECS: max 2M
# AGA: max 2M
chip = "512K"
# Fast RAM mapped at $00200000 and exposed as a Zorro II autoconfig
# memory board so Kickstart adds it to Exec's free memory list.
# Must be 0 or a Zorro II board size: 64K, 128K, 256K, 512K, 1M,
# 2M, 4M, or 8M.
# Set to 0 to disable.
fast = "0"
# A500 trapdoor/fake-fast RAM mapped at $00C00000. Some OCS demos probe
# this address directly instead of using Zorro II autoconfig memory.
# Set to 0 to disable.
slow = "512K"
# Zorro III autoconfig RAM. Kickstart assigns the base address (usually
# $40000000). Needs a CPU with a 32-bit address bus (68020 and later;
# not the 24-bit 68000/68010/68EC020). Must be 0 or a power of two from
# 64K to 1G.
# z3 = "16M"
# Ramsey-controlled motherboard fast RAM (A3000/A4000): 32-bit local RAM
# ending at $08000000 and growing downward, sized by Kickstart's own
# probe rather than autoconfig. Needs a Ramsey memory controller (the
# A3000/A4000 profiles fit one, and 4M of this RAM, by default) and a
# 32-bit CPU. Must fill whole Ramsey banks: 1M-4M in 1M steps, or
# 8M/12M/16M. On the A4000 (Ramsey-07), sizes beyond 16M fill the
# $04000000-$06FFFFFF motherboard RAM expansion space in 4M steps up
# to 64M. Set to 0 to remove it.
# motherboard = "16M"
# CPU-slot (accelerator) fast RAM: 32-bit local RAM starting at $08000000
# and growing upward through the coprocessor-slot space, up to 128M
# (ending at $10000000, where Zorro III space begins). Sized by
# Kickstart's own probe rather than autoconfig; the big-box Kickstarts
# scan for it, elsewhere guest software has to AddMem it. Needs a CPU
# with a 32-bit address bus. Any whole number of megabytes.
# accelerator = "64M"
# Additional Zorro boards described by TOML metadata files, configured
# in file order after the built-in [memory] fast/z3 boards. The metadata
# file carries the autoconfig identity (see docs/zorro.md for the schema):
# name = "MegaRAM"
# zorro = 3 # 2 or 3
# type = "ram" # board backing: "ram", or "wasm" for a plugin
# size = "64M" # board whose behaviour comes from a .wasm module
# manufacturer = 0x07DB
# product = 0x20
# A "wasm" board's manifest can declare settings; override them per board
# with config = { key = value, ... }.
# [[zorro]]
# metadata = "boards/megaram.toml"
# A2065 Ethernet board (Am7990 LANCE, driven by the SANA-II a2065.device).
# net picks the host network backend: "nat" is a slirp-style userspace NAT
# giving the guest outbound IPv4 with no host privileges (guest 10.0.2.15/24,
# gateway 10.0.2.2, DNS 10.0.2.3, DHCP built in); "bridge" attaches complete
# Ethernet frames directly to the named host adapter (LAN DHCP/static config
# in the guest; Wi-Fi best-effort); "loopback" echoes transmitted frames back
# (self-contained); "none" leaves the NIC isolated.
# Omit the section for no board. Host networking is non-deterministic, so a
# fitted NIC breaks byte-identical replay/save-state determinism while
# traffic flows.
# [a2065]
# net = "nat"
# interface = "en0" # required only for net = "bridge"; list with
# # copperline --list-net-interfaces
# HostSocket: bsdsocket.library backed by a host-side TCP/IP stack -- socket
# networking for guest applications with no guest TCP/IP stack to install or
# boot (the library autoboots from the board's ROM). Same net backends as
# [a2065], but the guest needs no IP configuration at all: "nat" gives
# applications outbound internet, "loopback" gives deterministic self-talk
# (127.0.0.1), "none" a dead wire. Don't fit this alongside a real guest
# TCP/IP stack -- both would add a bsdsocket.library.
# [hostsocket]
# net = "nat"
# interface = "en0" # required only for net = "bridge"
# hostname = "amiga" # gethostname() return value (cosmetic)
# address = "192.168.1.50/24" # interface address; net = "bridge" only -- the
# # 10.0.2.15/24 default is NAT's own virtual
# # address, meaningless on a real LAN. No DHCP,
# # so pick a static address the same way you
# # would for any other device on that network.
# gateway = "192.168.1.1" # default gateway; net = "bridge" only, same
# # reasoning as address above
# gethostbyname() just works under net = "nat"/"bridge" with no further
# config: it defaults to asking Copperline's own process to resolve via the
# host OS resolver on a background thread (rejected under "loopback": it
# would defeat that backend's whole point of byte-identical determinism).
# Override only to target a *specific* DNS server instead of the host's:
# resolver = "dns" # query dns_server directly instead of the host resolver
# dns_server = "10.0.2.3" # only used when resolver = "dns"
# RTG graphics card: high-resolution, high-colour screens via Picasso96.
# Z3660 is fitted by default on any machine whose CPU has a 32-bit address bus
# (stock A3000/A4000, or any profile given a 68020+ full-bus CPU). Picasso II
# and Picasso II+ are opt-in Zorro II cards and work with 24-bit CPUs too.
# [rtg]
# card = "picasso2plus" # "z3660", "picasso2", "picasso2plus", or "none"
# vram = "2M" # Picasso II/II+ only: "1M" or "2M" (default)
# SCSI bus with up to seven drives, on any machine model. Preferred over [ide]
# for multiple disks: a Zorro board's own boot ROM carries scsi.device and
# autoboots on Kickstart 1.3+, so it does not depend on the Kickstart IDE
# driver (which only probes the master on stock 3.1). Drive paths accept the
# same images as [ide]: RDB HDFs, bare partition hardfiles, or host
# directories. A path ending in .cue, .iso, or .chd attaches a SCSI CD-ROM
# drive at that ID instead (read-only; mount it in the guest with a CD filesystem
# pointed at the controller's scsi.device and that unit number). CD audio
# tracks play through the machine's audio output, and discs swap at runtime
# (status-bar CD buttons, drag-and-drop, --insert-cd-after).
#
# controller picks the host adapter:
# "a2091" - Zorro II, WD33C93. The default on machines without onboard SCSI.
# Needs an A590/A2091 boot ROM (6.6+, 16K/32K; rom_odd takes the
# odd half of a split even/odd EPROM dump).
# "a4091" - Zorro III, NCR 53C710. Needs a raw A4091 EPROM image (e.g. the
# open-source a4091.rom); single ROM, no rom_odd.
# "a3000" - the A3000's built-in SCSI, and the default on that machine.
# Needs no ROM: the Kickstart carries its driver and autoboots
# from an RDB drive.
# [scsi]
# controller = "a2091"
# rom = "a2091-v6.6.rom"
# unit0 = "workbench.hdf"
# unit1 = "data.hdf"
# unit2 = "game.cue"
# unit0 = { path = "workbench.hdf", bootpri = 6 } # table form, as for [ide]
[chipset]
# Display chipset revision preset. One of: OCS, ECS, AGA -- all three
# are implemented (remaining edge-case gaps are noted in
# docs/internals/chipset.md). The preset picks matching chips:
# OCS = OCS Agnus + OCS Denise, ECS = ECS Agnus (8372A, or 8375 with
# >1M chip RAM) + ECS Denise 8373, AGA = Alice + Lisa. Omit it to take the
# machine's real chips (the default and the A500 profile are a Rev 6A:
# 8372A Agnus + OCS Denise). Setting it is an override that wins over the
# profile -- e.g. revision = "OCS" forces a plain 8371/8362 machine.
# revision = "OCS"
# Optional per-chip overrides on top of the preset, for mixed machines
# that really shipped (e.g. a late A500: ECS Agnus + OCS Denise).
# agnus = "OCS" | "8370" | "8371" | "8372" | "8372A" | "8372B" | "8375" | "ALICE" (8374)
# denise = "OCS" | "8362" | "ECS" | "8373" | "LISA" (4203)
# agnus = "8372A"
# denise = "OCS"
# Video timing standard. One of: PAL, NTSC.
video = "PAL"
# IDE hard-disk images, on the machines with a built-in IDE port: A600, A1200,
# and A4000. Raw flat HDF images opened read/write; both full images with their
# own RDB and bare partition hardfiles (boot block "DOS\x..", size a multiple
# of 256 KiB) work - the latter get a synthesized RDB on the fly. A path may
# also name a host directory, mounted as an in-memory FFS volume (guest
# writes are not synced back to the host).
#
# A drive may be given as a table instead of a bare path, to set the FFS volume
# label of a directory mount (name) and/or the boot priority of the synthesized
# RDB partition (bootpri, -128..127, default 0). Kickstart enters DF0: at 5, so
# bootpri = 6 boots the hard disk ahead of a floppy; -128 mounts the volume
# without ever offering it for boot. Neither applies to an image carrying its
# own RDB, which keeps the label and priorities recorded inside it.
# [ide]
# master = "workbench.hdf"
# slave = "data.hdf"
# master = { path = "workbench.hdf", bootpri = 6 }
# Host directories mounted directly as AmigaDOS volumes (HOSTFS0:,
# HOSTFS1:, ...), served live with no disk image in between: the guest reads
# and writes the host's files directly, and changes land in the directory as
# you would expect. Up to 8 mounts. volume defaults to the directory name.
# bootpri (-128..127, default -128 = never boot) enters the boot-device vote:
# hard-disk boot partitions typically sit at 0 and DF0: at 5. readonly exports
# the directory write-protected: the guest sees a read-only disk and every
# write fails, which is worth setting on anything you would rather the Amiga
# could not damage.
# [[filesys]]
# path = "/data/amiga/Workbench"
# volume = "Workbench"
# bootpri = 6
#
# [[filesys]]
# path = "/data/amiga/downloads"
# readonly = true
# Presentation options. overscan: "tv" (default; mask deep horizontal
# overscan like a CRT bezel) or "full". pixel_aspect: "tv" (default; the
# non-square pixel aspect of a 4:3 CRT) or "square" (one host row per
# scanline, so a 320x256 lo-res screen is an exact 640x512 -- handy for
# pixel-exact comparison against square-pixel emulators). scaling: how that
# canvas reaches the window. "smooth" (default; fit to the window preserving
# aspect ratio, interpolated) or "integer" (the largest whole-number multiple
# of the canvas that fits, centred in black borders and point-sampled, in the
# spirit of WinUAE/Amiberry integer scaling). Integer covers RTG modes too,
# at multiples of their own native resolution, and falls back to the smooth
# fit when the window is too small for even 1x rather than cropping.
# Pair it with pixel_aspect = "square" for a fully pixel-exact picture.
# deinterlace: motion-adaptive weaving of interlaced displays (default
# true); false line-doubles every field, showing interlace bob/flicker like
# a bare TV.
# phosphor: CRT persistence fraction (0.0-0.95, default 0.0): fuses
# field-rate flicker/dither like a real tube at the cost of a slight
# motion trail.
# shader: GPU shader pass over the window image. "none" (default),
# the built-in CRT presets "scanlines", "mask" and "crt", or the path of a
# .wgsl file to load a shader of your own (see
# docs/guide/configuration.md). This is a window-display effect only:
# screenshots, frame dumps, recordings and headless runs are never
# shader-processed, so captures stay comparable whatever is set here.
# shader_strength: how strongly the shader is mixed in, 0.0-1.0 (default
# 1.0, the preset's full effect); 0.0 leaves the picture visually untouched.
# bezel: frame the picture with a 1084-style monitor front bezel (default
# false; Cmd/Alt+M toggles it live). Composes with any shader setting, and
# like it is a window-display effect only: captures never include the frame.
# perf_overlay: show the performance overlay at start (default false; also
# --perf-overlay, and Cmd/Alt+P toggles it live): emulated fps, speed
# factor, per-frame emulation cost, host utilisation, audio health, and
# pacer slips in the top-right of the display. Captures never include it.
# tint: screen tint over the window image. "none" (default, full colour),
# "bw" (black and white), "green" or "amber" (monochrome-monitor
# phosphor), or "sepia". Like shader, a window-display effect only:
# captures are never tinted, and RTG board scanout stays untinted.
# full_screen: open the window fullscreen at start (default false; also
# --full-screen / --windowed, and Cmd/Alt+F toggles it live).
# status_bar: show the status bar at start (default true; also
# --show-status-bar / --hide-status-bar, and Cmd/Alt+Shift+F toggles it live).
# menu_scale: how large the pop-up menu is drawn. "1x" (default) or "2x";
# also --menu-scale, and Video Settings > Menu Size changes it live.
# [display]
# overscan = "tv"
# pixel_aspect = "tv"
# scaling = "smooth"
# deinterlace = true
# phosphor = 0.4
# shader = "none"
# shader_strength = 1.0
# bezel = false
# perf_overlay = false
# tint = "none"
# menu_scale = "1x"
# full_screen = false
# status_bar = true
[audio]
# Synthesized floppy-drive sound effects: motor hum with spin-up/down,
# head-step clacks (including the classic empty-drive poll click) and
# the seek buzz of fast stepping. Generated from scratch, not sampled.
# Mixed into the normal audio output, so they need live audio (or
# --audio-wav) to be heard.
floppy_sounds = true
# Drive sound level, 0-100, relative to Paula's output.
floppy_sounds_volume = 100
# Host audio output device, matched by a case-insensitive substring against
# the names `--list-audio-devices` prints (also set with `--audio-device`).
# Commented out / omitted uses the system default output.
# output_device = "External Headphones"
# Whether live audio output is produced at all. Set false for no sound (the
# runtime menu / launcher "Disabled" option); the CLI `--noaudio`/`--audio`
# flags still override it. Omitted / true produces sound normally.
# output_enabled = true
# Output channel mode: "stereo" (default, the Amiga's hardware left/right
# panning) or "mono" (both channels averaged together). Also `--audio-channel-mode`.
# channel_mode = "stereo"
# Stereo separation, 0-100. 100 (default) keeps the full hardware panning; lower
# values narrow it and 0 collapses to mono. Also `--audio-stereo-separation`.
# stereo_separation = 100
# Paula's analogue low-pass ("power LED") filter. "auto" (default) lets the
# guest drive it through CIA-A's /LED line, as real hardware does; "on" and
# "off" force it regardless of the software. Also `--audio-filter`, the runtime
# Audio Filter menu item, and Cmd/Alt+A. The PWR LED burns brighter while the
# filter is engaged.
# audio_filter = "auto"
# Host input preferences.
# [input]
# Controller device plugged into each game port. Either port accepts any
# device, as on a real Amiga:
# "mouse" quadrature mouse (three buttons)
# "joystick" digital switch joystick (fire + second button)
# "cd32" CD32 joypad (adds the serial button protocol)
# "analogue" analogue paddles / proportional stick on the POT pins,
# driven by --pot-after scripting or the CCP input.analogue
# method (no live host device maps to it yet)
# "none" empty port
# Defaults: port1 = "mouse", port2 = "joystick" ("cd32" on the CD32
# profile). Also --port1 DEVICE / --port2 DEVICE per run; the runtime menu
# and the CCP input.set_port method hot-plug a device live.
# port1 = "mouse"
# port2 = "joystick"
# Initial host source for the joystick/CD32-pad port:
# "gamepad" (default) only a physical pad drives the port; the keyboard
# passes straight through to the Amiga (Shell, editor,
# Workbench). With no pad connected there is simply no joystick
# input -- ideal for keyboard-driven setup of an AmigaOS
# environment.
# "keyboard" always use the keyboard-joystick mapping (cursor keys + fire
# keys), so the port stays usable without a controller.
# With BOTH ports configured as joysticks, the gamepad and the cursor-key
# mapping drive one port each: this mode picks which source gets the
# lower-numbered port, and with no physical pad a second keyboard mapping
# on the numeric keypad (8/2/4/6 + 0 fire + . second button) stands in
# for the gamepad. With both ports as mice, "keyboard" drives the second
# mouse from the cursor-key mapping (keys move the pointer, fire keys =
# left button, X = right, D = middle).
# Cmd+J / Alt+J still cycles this live; --joystick MODE overrides it per run.
# joystick = "gamepad"
# Host mouse sensitivity, 0-100. 50 (default, shown as "Default" in the GUI)
# tracks the host mouse 1:1; 0 is a quarter speed and 100 quadruple, on an
# exponential scale. A host-input scale only -- it does not affect the emulated
# machine or scripted --mouse-after input. Also --mouse-sensitivity N, the
# launcher's Input tab, and Cmd/Alt+Shift+> / < (held to ramp) to adjust live.
# mouse_sensitivity = 50
# When the host mouse is grabbed (pointer confined to the window, host cursor
# hidden, so the Amiga pointer is the only one on screen):
# "click" (default) clicking the display grabs it; that click is a window
# action and is not passed to the Amiga
# "auto" grab whenever the window has the focus, and on entering
# fullscreen -- no host cursor is ever loose over the display
# "manual" only Cmd+G / Alt+G grabs; clicks go straight to the Amiga
# Cmd+G / Alt+G releases and re-takes it by hand in every mode. Uncaptured
# motion over the display still drives the emulated mouse whatever this is set
# to. Also --mouse-capture MODE and the launcher's Input tab.
# mouse_capture = "click"
# Autofire: pulse a HELD fire button this many times per second (0 = off, the
# default; up to 30). Live input only -- the gamepad and the keyboard mapping;
# scripted --joy-after/--script input is never gated, so a replay reproduces
# exactly the events it was given. The phase runs on emulated time, so the rate
# is the same under warp and on PAL or NTSC. Cycle it live from the Autofire
# menu item; remap the keyboard controls from Input Mapping...
# autofire_hz = 8
# Serial port wiring. The Amiga serial port doubles as the MIDI port.
# [serial]
#
# mode selects where Paula's serial in/out is connected:
# "stdout" (default) serial output prints to the host terminal, matching
# the historical behaviour (DiagROM and similar tools log here).
# "off" serial output is discarded and there is no serial input.
# "midi" serial in/out is bridged to host MIDI endpoints. Needs a build
# with the `midi` feature; midi_out/midi_in name the endpoints
# (substring match, e.g. a USB interface or a virtual port).
# "tcp" serial in/out is bridged to a host TCP port, like UAE's "TCP:"
# device. listen sets the bind address (default 127.0.0.1:1234);
# connect with e.g. `nc`, `socat`, or a raw-mode telnet client.
# "tcp-connect"
# the outbound counterpart of "tcp": dial the remote named by
# connect (required, "host:port") at startup - a telnet BBS, a
# tcpser modem bridge, any TCP byte service.
# "pty" serial in/out is bridged to a host pseudo-terminal (Unix only).
# The slave path (/dev/pts/N) is logged at startup; attach a
# terminal with e.g. `minicom -D`, `screen`, or `cu -l`.
# With an AUX: shell on the Amiga side, "tcp"/"pty" give a remote AmigaDOS
# console. --serial MODE overrides this per run; --serial-connect HOST:PORT
# implies "tcp-connect"; --midi-out/--midi-in NAME imply "midi".
# mode = "stdout"
# connect = "bbs.example.com:1337"
# midi_out = "USB MIDI Interface"
# midi_in = "USB MIDI Interface"
# listen = "127.0.0.1:1234"
# Parallel (Centronics) port peripheral. With no section the connector is
# electrically unplugged: CIA-A still pulses /STROBE on port-B access, but no
# peripheral returns CIA-A /ACK. `device` selects what is plugged in:
# "none" (default) nothing connected.
# "printer" a Centronics printer whose raw byte stream is captured. `output`
# sets the host file; it is replaced at startup and every strobed
# data byte is written in order and acknowledged. Feed the raw
# stream to the matching printer-language converter or a spooler.
# (A bare `output` with no `device` still implies the printer.)
# "sampler" an 8-bit audio sampler (digitizer) on the data lines, fed from a
# host capture device -- the emulated equivalent of a classic
# parallel-port sampler cartridge (AudioMaster, ProTracker, OctaMED,
# TurboSound). `sampler_input` names the host input device
# (case-insensitive substring, as `--sampler-list-audio-inputs`
# prints; omitted = system default). `sampler_gain` is the preamp
# gain in decibels (0 dB = unity; ~ -24 to +24 dB). Needs a build
# with the `frontend` feature (it uses cpal, like live audio output).
# --parallel DEVICE overrides this per run; --sampler-audio-input /
# --sampler-input-gain imply "sampler".
# [parallel]
# device = "printer"
# output = "printer.raw"
# device = "sampler"
# sampler_input = "MacBook Air Microphone"
# sampler_gain = 6.0 # dB
# Optional floppy drives. DF0 is always connected; set [floppy] drives
# to wire empty external mechanisms as well (1-4 total drives). Missing
# [floppy.dfN] tables mean no disk in that drive. Supported images:
# DD ADF (901120 bytes), ADZ/gzip, single file ZIP archives, DMS, UAE extended
# ADF, and read-only IPF and SCP images. DMS/gzip/IPF/SCP are always treated
# as write-protected.
#
# Drive speed: 100 (real, the default), 200/400/800 (that many percent of
# real speed; the whole data path stays bit-identical, just faster), or 0
# for turbo (disk DMA transfers complete almost instantly). Mechanics
# (motor spin-up, stepping) always run at real speed. Faster-than-real
# loading is a compatibility trade-off; some software times its loading.
# Image-backed bays only; a physical drive has its own bridge_speed.
#
# [floppy]
# drives = 2
# speed = 100
#
# [floppy.df0]
# path = "Workbench.adf"
# write_protected = true
#
# A bay can drive a real 3.5" floppy drive instead, over a DrawBridge,
# Greaseweazle, or Supercard Pro, reading and writing genuine Amiga disks.
# Rob Smith's FloppyBridge is built into Copperline, so there is nothing to
# install. A bay takes either a bridge or an image, never both: the disk in
# the drive is its media.
#
# Writing to a real disk needs the disk's own tab open *and*
# write_protected = false -- two independent things to get wrong before
# anything is laid on physical media. The status bar's eject and swap do
# nothing for a bridged bay, a machine with one is paced to wall-clock time
# even headless, and such a run is not reproducible. See the "Real floppy
# drives" chapter of the guide.
#
# [floppy.df0]
# bridge = "greaseweazle" # drawbridge/greaseweazle/supercardpro/off
# write_protected = true
# bridge_port = "/dev/ttyACM0" # omit to auto-detect the interface
# bridge_cable = "a" # a/b (IBM PC) or 0..3 (Shugart)
# bridge_density = "auto" # auto/dd/hd
# bridge_mode = "normal" # normal/compatible/stalling. normal, the
# # default, skips the wait for the index and is
# # appreciably quicker; stalling blocks the
# # emulated machine until each track is ready
# bridge_speed = 125 # 100, 125, 150, 175, or 200 percent
# bridge_auto_cache = false # cache disk data while the drive is idle