< all news

Copperline 0.13.0: RTG, Ethernet and a Linux login prompt

This release takes the emulated machine past the classic chipset. The Z3660 Zorro III board brings RTG, so Workbench opens on high-colour, high-resolution Picasso96 screens. The big boxes gain Ramsey motherboard fast RAM and CPU-slot accelerator RAM. The A2065 gets a user-mode NAT backend that needs no privileges or setup, and the browser build dials a telnet BBS over emulated serial.

MMU exception-dispatch fixes on the 68040 / 68030 and a corrected 31 kHz programmable-scan display path boot Debian Linux/m68k to a login prompt. As always, when something doesn't run, the fix models the underlying Amiga subsystem rather than special-casing the title.

RTG graphics

The Z3660 accelerator's FPGA RTG core is emulated as a Zorro III autoconfig board with a 128 MiB window, driven by the unmodified open-source Z3660.card Picasso96 driver. It supports Workbench in 8, 16 and 32-bit RTG modes, blitter operations, DRAWLINE, planar-to-chunky and planar-to-direct blits, and hardware-sprite compositing including wide and doubled sprites. Output is presented at native resolution with chipset fallback, and screenshots use pixel-centre downscaling.

The card is selected with [rtg] card or the launcher's System tab, and is fitted by default on any profile whose CPU has a 32-bit address bus. It is the project's first RTG card and the cycle's largest contribution, from Bernie Innocenti (@codewiz).

Linux/m68k boots

The 68040 / 68030 core now takes exception dispatch through the MMU the way real silicon does. The same pass fixes the MOVES fault frame, writeback data, invalid-fetch faults, autovector handling, and FSAVE / FRESTORE across all control addressing modes. With the display work below, Debian 3.1 for m68k goes from dying in a Line-F handler to a console login prompt on an A4000/68040.

The 31 kHz programmable-scan display

The Linux amifb console was losing about 22 characters off every line. The Denise H counter now restarts at 0, DIW-relative placement scales correctly in super-hi-res, and presentation anchors at the HSYNC pulse like a real multisync monitor. Super-hi-res colour output is fixed too. Each 35 ns sample now resolves through the full palette instead of a two-bit pair encoding, which had turned Tux green and fringed text red and cyan. A double-width 35 ns canvas makes programmable SHRES pixel-sharp.

The big-box memory maps

Ramsey-controlled motherboard fast RAM sits in 32-bit local space on the A3000 and A4000, sized by Kickstart's own probe ([memory] motherboard, 1M-4M in 1M steps, or 8M / 12M / 16M). The A4000 gains its $04000000-$06FFFFFF motherboard expansion space, up to 64 MiB. Any 32-bit-CPU profile, including an accelerated A1200, gains CPU-slot accelerator fast RAM up to 128 MiB ([memory] accelerator).

User-mode NAT Ethernet

The A2065 gains a slirp-style user-mode NAT backend ([a2065] net = "nat", --a2065-net nat, or the launcher's I/O Ports tab). It gives the guest outbound IPv4 with no privileges, no host drivers and no setup, and works the same on Linux, macOS and Windows. The guest sees 10.0.2.15/24 with a built-in BOOTP/DHCP server. The Am7990 LANCE model was hardened until a real SANA-II a2065.device works end to end.

Telnet BBS over emulated serial

In the browser build, a WebSocket bridge with a full telnet NVT layer runs a BBS through plain serial.device. The desktop build dials out natively with [serial] mode = "tcp-connect" / --serial-connect HOST:PORT. Dialling waits for the guest to assert DTR and go quiet, so boot chatter cannot leak into a session as phantom keypresses.

Floppy speed and drive sounds

[floppy] speed / --floppy-speed runs drives at 100 (the default), 200, 400 or 800 percent, or 0 for turbo. The percentage modes stay bit-identical per cell, and turbo still runs through the ordinary bit engine. Drive mechanics (spin-up, stepping, settle) always stay real-time, so the acceleration cannot break loaders that time the mechanism.

The drive sounds were re-synthesized against spectra measured from real A500 and A600 mechanisms: a step clack with its rebound cluster, seek buzz as a measured harmonic comb, and revolution-locked spin texture. No sample data ships. The sounds differ from 0.12.0: the read-gated hiss layer is gone, because real drives don't make it.

The browser build

copperline.dev/try gained a machine model select (A500 or AGA A1200, live-switchable, carrying the ROM and disks across the rebuild). Save states download as .clstate files interchangeable with the desktop builds, and an IndexedDB quick slot survives a page reload. Also new: gamepads in both ports for two-player, pause and screenshot-to-clipboard, a front-panel status strip with LEDs and a track counter, a copperline.json site config file, a Kickstart list select for site-served ROMs, mono audio, and fullscreen that keeps 4:3 on any page shell.

Hardware accuracy fixes

  • Alien Breed II's horizontal scroll jump is fixed by modelling how Agnus masks an off-grid DDFSTRT to the fetch grid on wide FMODE, folding BPLCON1 scroll taps into the early masked fetch start. The band map was corroborated against FS-UAE. The FMODE SSCAN2 high-bit mask is modelled in the rendered, manual and collision sprite paths, so sprite HSTART $165 correctly aliases $065.
  • The MC68020 model now follows the datasheet Cache Case and Worst Case tables. It claims the Cache Case only when the whole instruction stream, extension words included, is cached, and it models the A1200 Alice data-return phase. A1200 SysInfo moves from 1.61x to 1.10x CPU and 5.52x to 3.55x chip against reference: the old profile was too fast.
  • The $DC0000 page's byte lanes are modelled. The MSM6242 is a 4-bit part on the low lane, and the unfitted odd lane reads $40, as measured on real A500 hardware. Kickstart 1.3 stops inventing a date out of DMA noise, and machines with no battery clock correctly report they have none.
  • ROMs stored in EPROM-programmer byte order are detected from the header and swapped on load, so they boot like their conventional twins. Hi/lo split chip pairs remain unsupported.
  • CD32 NVRAM saves are no longer silently lost when the backing-file write fails: the dirty bit clears only after a successful write, so the flush retries on the next I2C STOP.
  • Machine profiles built directly rather than through the config pipeline now derive their Agnus and Denise revisions and CPU-implied FPU and cache defaults. Without them, the browser A1200 was detecting only half its chip RAM.
  • Zorro bus-master DMA reaches motherboard and accelerator RAM, so an A4091 finds its SCSI units on the A4000 profile, and the host-filesystem services board decodes the new RAM banks.

Desktop, tooling and platform

  • Borderless fullscreen toggles with Cmd+F / Alt+F. The status bar hides with Cmd+Shift+F / Alt+Shift+F, and the display scales up into the space it leaves. This brings the desktop app level with the browser build.
  • Headless capture needs no display server. --screenshot-after and --dump-frames drive a windowless loop with no winit event loop, so capture runs work over SSH, in sandboxes, and from agent sessions where creating a window would abort or hang. Screenshots are byte-identical to the old path, and a run whose machine halts early now errors instead of hanging.
  • Panics write a copperline-crash.txt report next to the executable with version, host, timestamp, message and a forced backtrace. Windows double-click launches previously lost the panic entirely.
  • Pressing Run on the configuration screen no longer crashes Windows builds. The main thread is linked with an 8 MiB stack instead of the 1 MiB Windows reserves by default. This was the known issue in 0.12.0.
  • In the launcher, Serial and Parallel merge into one I/O Ports tab, and the printer becomes a selectable device with an output-file browser. Host Mounts moves under Hard Disk, and the A2065 gains a picker. When a config's ROM is unreadable, the status line keeps the underlying cause instead of reading like progress.
  • anyhow, memmap2 and quick-xml move for RUSTSEC advisories, and the WASM plugin host moves from an unmaintained wasmtime pin to the 36 LTS tip.
  • The bundled AROS ROM is refreshed to upstream master, picking up m68k boot-time optimizations, the boot-animation rendering fix, Workbench and console speedups, and a fix for the Boot Options menu crashing on machines with RDB drives on an A4091.

Contributed this cycle

Bernie Innocenti (@codewiz) contributed the Z3660 RTG video board, including the [rtg] card selection, the launcher RTG picker, and bulk CLUT palette upload so 8-bit RTG screens work with current Z3660.card firmware. He also fixed Zorro bus-master DMA reaching motherboard and accelerator RAM, and made host-directory file handles writable so Workbench can snapshot icons on a HOSTFS volume.

Lee Hobson (@hobbo91) fixed the Windows configuration-screen crash, built the merged I/O Ports launcher tab with the printer device and the Host Mounts sub-page, added the hide-status-bar shortcut and menu item, fixed fullscreen scaling when going fullscreen before pressing Run, and made the launcher keep the underlying cause when a config's ROM cannot be read.

Compatibility notes

Save states from 0.12.0 do not load in 0.13.0. The serialized machine shape changed repeatedly this cycle, for the RTG board, motherboard and accelerator RAM, the Ricoh battery clock and its battery RAM, and the rebuilt drive-sound engine. The state format version moves from 32 to 40. Re-create snapshots after upgrading.

No config file changes are required: no TOML key or CLI flag was removed or renamed. Several defaults changed, though. Check these if a machine behaves differently:

  • An RTG card is fitted by default on any machine whose CPU has a 32-bit address bus: the stock A3000 and A4000, or any profile given a 68020+ full-bus CPU. A Zorro III board joins the autoconfig chain, and [rtg] card = "none" removes it.
  • A3000 and A4000 profiles come with 4 MiB of Ramsey motherboard fast RAM fitted. [memory] motherboard = "0" removes it.
  • A3000 and A4000 now default to the Ricoh RP5C01 battery clock rather than the OKI MSM6242. AmigaOS probes for either part, so the difference was invisible there, but Linux/m68k assumes the Ricoh on big boxes. [machine] rtc_chip overrides this.
  • A battmem.nvram file is created in the working directory on any machine with an RP5C01 fitted, so the clock's battery RAM persists across runs. [machine] battmem = "" keeps it session-only.
  • The 68020 and A1200 profiles run at a more accurate speed, so anything calibrated against the old, too-fast A1200 will behave differently.
  • Machines with no battery clock now report that they have none: affected guests say Battery Backed up Clock not found, as the real machine does.
  • Drive sounds are different, rebuilt from measurements of real mechanisms.

Get it

Builds for macOS, Linux and Windows are on the release page, and the Homebrew tap is updated. Or skip the download: copperline.dev/try is the same emulator.

The Discord promised in the organization note is open too: discord.gg/HDTjt3tYAC is where development, bug hunting and general Amiga talk happen. Bug reports still belong in GitHub issues, where they don't scroll away.

- Andrew Hutchings (LinuxJedi) · linuxjedi.co.uk