Skip to content

scsi: put drives on the A3000 motherboard SCSI bus#184

Merged
LinuxJedi merged 4 commits into
LinuxJedi:mainfrom
codewiz:feat/a3000-scsi
Jul 15, 2026
Merged

scsi: put drives on the A3000 motherboard SCSI bus#184
LinuxJedi merged 4 commits into
LinuxJedi:mainfrom
codewiz:feat/a3000-scsi

Conversation

@codewiz

@codewiz codewiz commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

The A3000's Super DMAC and its WD33C93 landed in #180, but nothing could be
plugged into them: [scsi] only fitted the Zorro controllers, so a big-box
machine still needed an A2091/A4091 or a [[filesys]] mount to boot.

[scsi] controller = "a3000" now fits the drives to the SDMAC's WD33C93. It is
the default controller on a machine that has a Super DMAC, so on an A3000 a bare

[machine]
profile = "A3000"
[scsi]
unit0 = "workbench.hdf"

is enough. Unlike the Zorro boards it takes no boot ROM - Kickstart's own
scsi.device drives it - so the config rejects rom = there, and rejects the
controller entirely on a machine without the silicon. A Zorro board still fits
an A3000 if you name it explicitly.

The launcher's SCSI picker gains an "A3000 (onboard)" entry, offered only where
the hardware is, with the ROM row greyed out. Switching the profile away from
the A3000 moves a fitted onboard controller back to the A2091, so the drives
survive the change rather than failing validation on Run.

The SDMAC and WD33C93 emulation needed no changes.

Tested by booting an A3000 with an RDB HDF on unit 0 and nothing else to boot
from: Kickstart selects the target, reads the RDB, mounts and autoboots to
Workbench.

🤖 Generated with Claude Code

[scsi] controller = "a3000" fits drives to the Super DMAC's WD33C93 instead
of a Zorro board. It is the default on a machine that has one, and it takes no
boot ROM: Kickstart's own scsi.device drives it and autoboots from an RDB disk.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds first-class support for attaching [scsi] drive images to the Amiga A3000’s onboard SCSI (Super DMAC + WD33C93), making the A3000 profile bootable from SCSI without requiring a Zorro SCSI card or [[filesys]] mount.

Changes:

  • Extend [scsi] controller to support "a3000" and make it the default controller on machines with a Super DMAC, while rejecting rom for onboard SCSI and rejecting "a3000" on non-A3000 profiles.
  • Plumb [scsi] units into the SDMAC device when onboard SCSI is selected; keep Zorro-board plumbing unchanged.
  • Update the launcher SCSI picker to include “A3000 (onboard)”, hide it on non-A3000 profiles, and grey out the ROM row for onboard SCSI.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

File Description
src/video/launcher.rs Adds A3000 onboard controller option to the UI, gates ROM emission for non-Zorro SCSI, and migrates onboard selection when switching away from A3000.
src/emulator.rs Attaches [scsi] drive images to the SDMAC bus when controller is A3000; avoids building a Zorro SCSI board in that case.
src/config.rs Introduces ScsiController::A3000, updates parsing/validation defaults and error messages, and adds tests for onboard SCSI behavior.
copperline.example.toml Updates example documentation to describe A3000 onboard SCSI booting and how to configure it via [scsi].
Comments suppressed due to low confidence (1)

src/video/launcher.rs:933

  • rom_odd is emitted whenever an A2091 is selected, even if scsi_rom is unset. This can produce an invalid config ([scsi] rom_odd requires rom) if the user clears the even ROM after setting the odd half, causing validation failure on Run/reload.
            // rom_odd is an A2091 split-EPROM option; the A4091 has one ROM.
            raw.scsi.rom_odd = (controller == ScsiController::A2091)
                .then(|| self.scsi_rom_odd.as_deref().map(path_string))
                .flatten();

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/video/launcher.rs
rom_odd is the odd half of a split EPROM dump, so it is meaningless alone and
the config rejects it; clearing the even half left it behind.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@codewiz

codewiz commented Jul 14, 2026

Copy link
Copy Markdown
Contributor Author

Good catch on rom_odd - fixed in 6206c40. It is the odd half of a split even/odd EPROM dump, so it is meaningless without rom, and the config validator rejects that pair; clearing the even half in the launcher used to leave the odd half behind and fail on Run. The launcher now only writes rom_odd when rom is set.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment thread src/video/launcher.rs
Registers $1A-$1E are not registers and float $FF; $1F is the auxiliary
status, aliased into the file read-only. Both were plain RAM, so cdhooper's
sdmac tool failed its WDC test and reported the chip as not detected.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@codewiz

codewiz commented Jul 14, 2026

Copy link
Copy Markdown
Contributor Author

Now we pass 100% of cdhopper's sdmac test:

WB:System/Diag/sdmac
Memory controller:   Ramsey-04 $d
Ramsey config:       256Kx4, 154 clock refresh
SCSI DMA Controller: SDMAC-04
SCSI Controller:     WD33C93A 00-04 or 00-03 microcode 00, 8.7 MHz
WDC Configuration:   Polled Mode, 0 msec timeout, Async

Ramsey test:  PASS
SDMAC test:   PASS
WDC test:     PASS
3.WB:>

@codewiz

codewiz commented Jul 14, 2026

Copy link
Copy Markdown
Contributor Author

Both new review comments are already handled:

  • rom_odd without rom: fixed in 6206c40 (the comment was posted against the original diff). The launcher no longer writes rom_odd unless rom is set.
  • SCSI_CONTROLLERS.into_iter() and *c: this one is a false positive. Iterator::filter passes &Item to its closure whatever the iterator yields, so the closure parameter is &Option<ScsiController> and the deref is needed. It compiles, and the launcher tests pass.

Also pushed d21fec0: the WD33C93 register file ends at the data register ($19). Registers $1A-$1E are not registers and float $ff, and $1F is the auxiliary status aliased in read-only. Both were plain RAM here, so cdhooper sdmac tool failed its WDC test and reported "SCSI Controller: Not detected: INVALID" - it identifies the chip by checking exactly those two properties. It now passes all three tests on an emulated A3000 and reports "WD33C93A 00-04 or 00-03 microcode 00, 8.7 MHz".

The front panel only offered an LED to a Gayle machine or an A2091, so an
A3000 (motherboard SCSI) had none -- and neither did any machine whose only
controller was an A4091.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@LinuxJedi LinuxJedi merged commit 4f27f91 into LinuxJedi:main Jul 15, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants