Skip to content

Device & Card Reference

This is the quick-reference table for two things you keep needing when you work with Amix: the /dev major/minor numbers the kernel uses, and the expansion cards Amix actually supports. The two tables below are the answer; the notes after each table explain the encodings and caveats.

A device node in Amix carries a major number (which driver) and a minor number (which sub-device). The kernel indexes a per-class switch table by the major and never looks at the file name — see the device-driver model for the mechanism. Hardware support is constrained by hard kernel rules (Zorro II only, 68020/030 + MMU + FPU, 4–16 MB Fast RAM, SCSI disk at ID 6 / tape at ID 4) — those are covered in full on the hardware page.

Each row carries the same confidence tag the research brief uses: ✅ verified (primary source / repo source / reproduced locally), 🟡 community-reported, 🔴 unverified.

/dev major/minor numbers

The four stock entries below come from the ls -l /dev excerpt in the Ditto driver paper (§5 of the brief) ✅. The two community-driver entries (va2000, hydra) come from the modern driver repos (§6) ✅.

/dev node Class Major Minor Driver / purpose Tag
/dev/console char 0 0 System console
/dev/par char 21 0 Amiga parallel port (output-only Centronics)
/dev/fd0 block 16 Floppy disk driver
/dev/dsk/c0d0s1 block 18 encoded (see below) SCSI hard-disk driver
/dev/va2000 char 68 0 MNT VA2000 RTG framebuffer (asokero/va2000-amix)
/dev/<hya> char 47 Hydra AmigaNet STREAMS/DLPI driver, tag hya (isoriano1968/hydra-amix)

Note: the major number is the index into cdevsw[] (character) or bdevsw[] (block) in master.d/kernel.c. A driver "registers" at a major by occupying that slot. There is no global registry that allocates them — community drivers pick a free slot (va2000 took char 68, hydra took char 47) and patch it into kernel.c themselves ✅. See Building and installing a kernel for how a slot is wired in.

Minor-number encoding for the SCSI disk (major 18)

For the SCSI hard-disk driver, the minor number is not a simple index — it packs three fields. The Ditto paper describes them as SCSI address, LUN, and partition ✅; reading the actual amiga/alien/sd.h macros (reproduced locally on Amix 2.1c ✅) the three fields are precisely SCSI target, card index, and slice/partition. The paper's example node /dev/dsk/c0d0s1 is block major 18, minor 1 = SCSI target 0, card 0, slice 1 ✅.

The block disk driver is block major 18 / char major 40 ✅. (A separate gsioctl passthrough node, /dev/scsi, is char major 11 — that's the raw SCSI-command path, not the block path; see the A4091 53C710 driver.)

In the c<addr>d<lun>s<part> naming you will see on disk:

  • c0d0s1 → controller/SCSI-address 0, drive/LUN 0, slice (partition) 1.
  • The boot/root logic uses this directly: root.adf computes BPART=/dev/dsk/c${SCSI}d0s${BOOTPART} ✅.

Exact minor decode and the "cN" computation ✅

The minor number is decoded by three macros in amiga/alien/sd.h (verified against the running 2.1c kernel source ✅):

#define SDCARDS         2                    /* only two SCSI cards: queue[0], queue[1] */
#define sdunit(dev)     ((dev) >> 0 & 07)    /* SCSI target id   0-7 */
#define sdcard(dev)     ((dev) >> 3 & 01)    /* card index (queue[] slot) -- only 0 or 1 */
#define sdpart(dev)     ((dev) >> 4 & 07)    /* slice / partition 0-7 */

So the minor byte is laid out as (slice << 4) | (card << 3) | target. The cN in a device name is computed, not stored — there is no "card N" field; the N is rebuilt from two fields as cN = sdcard * 8 + sdunit (target). Worked examples ✅:

Device card (sdcard) target (sdunit) slice (sdpart) minor dev_t
c6d0s1 0 6 1 22 makedevice(18, 22)
c8d0s0 1 0 0 8 makedevice(18, 8)
c14d0s2 1 6 2 46 makedevice(18, 46)

A full dev_t packs the major above the minor: dev_t = (major << 18) | minor ✅. The root device is compiled into the kernel as ROOTDEV = makedevice(18, 22) (i.e. c6d0s1) via /stand/CONFIG, consumed by amiga/config/unix.c's -DROOTDEV ✅. The card field is the index into the kernel's queue[SDCARDS] table, populated in board-base-address order at first root open — see the A4091 53C710 driver for how a controller claims a queue[] slot.

Two SCSI target rules — one genuinely fixed, one a strong convention ✅:

  • Hard disk: ID 6 by convention. The installer prompts for the disk target and builds device names from it; ID 6 is the universal default, but it is baked into the c6d0s… names in /etc/vfstab once installed (so don't change it afterward — see hardware). 🟡
  • Tape must be SCSI ID 4 — the raw tape node is /dev/rmt/4h (and /dev/rmt/4hn for the no-rewind variant used by the installer's dd if=/dev/rmt/4hn …) ✅.

See Quirks for why these IDs are fixed and what breaks if you ignore them.

The hydra STREAMS driver (char 47)

Hydra is a STREAMS/DLPI network driver, which in Amix is a special kind of character driver: it occupies a cdevsw[] slot (47, tag hya) but exposes a streamtab rather than ordinary read()/write() ✅. You do not normally cat its /dev node; Amix is SVR4.0 (no ifconfig … plumb), so you link the interface in with slink, then configure it:

slink addaen /dev/hya0 hya0
ifconfig hya0 <ip> netmask <mask> up -trailers

hydra has a boot-time init_tbl[] entry (hydrainit) that only probes for the board; the full init (MAC read, DP8390 programming) is deferred to open (slink) time ✅. For the full driver internals see the Hydra case study; for the networking stack it plugs into see Networking.

The va2000 framebuffer (char 68)

The VA2000 driver is a single-file char framebuffer driver. After building and installing it you create the node with:

mknod /dev/va2000 c 68 0

It supports 800×600 / 1024×768 / 1280×720 at 16-bit ✅, and it is the device the Xrtg X11 server draws into. See the VA2000 case study and X11/RTG drivers.

Other device nodes referenced in the brief

These appear in the brief but without an authoritative major/minor pairing, so they are listed for orientation only:

/dev node Notes Tag
/dev/mem Physical-memory device; lszorro opens it and mmap()s AutoConfig windows ✅
/dev/scsi gsioctl raw-SCSI-command passthrough, char major 11 (scsi.c:gsioctl); used by the gsio userspace tool to send arbitrary CDBs — not the block path (block 18 / char 40) ✅
/dev/rmt/4h, /dev/rmt/4hn Raw / no-rewind tape at SCSI ID 4 ✅
aen0 A2065 Ethernet network interface (not a /dev node — an ifconfig name) ✅
hya0 Hydra network interface name (linked via slink from the char-47 driver) ✅

Note: aen0 and hya0 are interface names managed via ifconfig/STREAMS, distinct from /dev device-file majors. The underlying A2065 LANCE driver source lives in aen/ in the kernel tree (the hydra driver was modelled on it) ✅.

Supported expansion cards

Everything stock here is Zorro II only — Amix's stock drivers just dereference the autocon() address, and Zorro II boards (≤ 24-bit, inside the 68030's TT0 transparent-translation window) are directly reachable while Zorro III space is not, by default ✅. That source was never shipped, so the stock card set cannot be community-fixed in place ✅. Cards are grouped by function. Tags follow the brief.

🔴 Correction (Zorro III is reachable after all): "Amix can never drive a Zorro III board" was the long-standing belief, and it is wrong for a driver that maps the board explicitly. The A4091-on-Amix project drove the Zorro III A4091 by page-table-mapping its register block with the kernel's own sptalloc() primitive (the board sits in the unmapped 0x40000000–0x7FFFFFFF TT gap, so a plain pointer deref does fail — but sptalloc() gets a working kernel VA) 🟡 (reproduced in Amiberry; real-hardware confirmation pending). See the A4091 53C710 driver.

SCSI host adapters

Card Notes Tag
A3000 on-board SCSI The reference controller on the A3000UX (WD33C93); AutoConfig product id 0x0202F003
A2090 A2000-family SCSI controller; product id 0x02020001
A2091 A2000-family SCSI controller; product id 0x02020003
A4091 Zorro III SCSI-2 host adapter (NCR/Symbios 53C710); AutoConfig product id 0x02020054, phys base 0x40000000. Not stock — driven by the community A4091 53C710 driver 🟡 (Amiberry; real-hardware pending) 🟡
GVP Series II Needs a kernel rebuild + an RDB dummy_handler 🟡

The A2090/A2091 interrupt handlers (a2090intr, a2091intr) appear in the kernel's level-2 autovector table int2_tbl[] ✅ — concrete evidence these controllers are wired into the stock kernel. Remember the disk sits at SCSI ID 6 by convention (above).

The kernel's sd.c selector maps these product ids to per-card queue functions in its scsicard[] registry; the A4091 work added the row 0x02020054, &a4091queue, "A4091 SCSI" (verified in src/kernel-patches/sd.c ✅).

Card index when both an A3000 SCSI and an A4091 are present ✅

Because sd.c inserts detected controllers sorted ascending by board base address, the lower-addressed controller takes queue[0] (card 0) and the next takes queue[1] (card 1). With both present, the A3000 SCSI (0xDD0000) is card 0 and the A4091 (0x40000000) is card 1 ✅ — so an A4091 disk at target 0, slice 0 is reached as /dev/dsk/c8d0s0 (block major 18, minor 8) and /dev/rdsk/c8d0s0 (char major 40, minor 8): cN = 1*8 + 0 = 8 ✅. When the A4091 is the only controller it becomes card 0 instead, so the same disk is c0d0s0-class (and an autoboot disk at target 6 appears as c6d0s1-class). Which card index the A4091 lands on therefore depends on what else is in the machine — see the A4091 53C710 driver and the boot process for the rootdev↔card-index consequences.

Graphics

Card Notes Tag
Built-in (mono X) Default; monochrome X server, reportedly slow ✅ / 🟡
A2410 "Lowell" TMS34010, 1024×768, native color graphics via TIGA (olinit -- -tiga)
MNT VA2000 (RTG) Via the va2000-amix char-68 driver + the Xrtg X11R5 server
Picasso II / Piccolo / Domino / etc. Added by Gateway! Vol.2 CD; Zorro II / linear modes only 🟡

The A2410 is the officially supported color option; the VA2000 path is the modern community route. See X11 & the desktop and X11/RTG drivers.

Networking

Card Interface / device Notes Tag
A2065 aen0 Native Ethernet (LANCE); the A3000UX ships with it
Ariadne I Via Gateway! Vol.2 drivers 🟡
Hydra AmigaNet hya0 (char 47) Via the modern hydra-amix STREAMS/DLPI driver (NE2000/DP8390); works on real hardware (2026-06) — ARP + ICMP ping verified

Hydra's AutoConfig identity is ID 2121/1 (0x08490001), rev 1.2a, with 10Base2 + 10BaseT ✅. See Networking.

Serial

Card Notes Tag
A2232 Adds 7 extra RS-232 ports, managed with pmadm

How to inspect what's actually installed

On a running system, list the device nodes and read their major/minor with ls -l /dev (the leading b/c is the class; the two numbers after the owner/group are major, minor) ✅. To enumerate Zorro II AutoConfig boards from user space, use the community lszorro tool, which mmap()s /dev/mem and decodes the AutoConfig nibble format ✅ — see the lszorro case study and Zorro II AutoConfig.

See also

Sources

  • Ditto, Writing Amix Device Drivers, 1990 European Amiga Developer's Conference — §5 of sources/research-brief.md (console char 0, par char 21, fd0 block 16, SCSI disk block 18, minor = addr/LUN/partition; cdevsw/bdevsw switch tables; int2_tbl[] interrupt handlers).
  • sources/research-brief.md §2 (supported machines & expansion cards, Zorro II only, SCSI ID 6 / tape ID 4), §6 (va2000 char 68, hydra char 47/hya, AutoConfig IDs).
  • amix_21_root.adf analysis via tools/inspect-adf.sh (/dev/rmt/4h, BPART=/dev/dsk/c${SCSI}d0s${BOOTPART}).
  • Driver repos: asokero/va2000-amix, asokero/lszorro-amix, isoriano1968/hydra-amix.
  • amigaunix.com — A2232, requirements, networking pages (community-reported items: GVP Series II, Ariadne, Gateway! graphics cards).
  • The A4091-on-Amix project — NOTES.md §3, §8, §12–§15 (lab notebook, reproduced locally ✅) and src//tools/. The minor decode (sdunit/sdcard/sdpart, SDCARDS), block major 18 / char major 40, and dev_t = (major<<18)|minor are verified against amiga/alien/sd.h; the /dev/scsi char major 11 gsioctl path against src/gsio.c.
  • src/kernel-patches/sd.c — the 0x02020054, &a4091queue, "A4091 SCSI" scsicard[] row and the base-address-sorted queue[] insertion.
  • src/a4091-wr.cA4091_PROD = 0x02020054, phys base 0x40000000; the sptalloc()-mapped 53C710 driver.
  • a4091.device open-source project: A4091/a4091-software (A4091 ROM + SCRIPTS assembler).