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/vfstabonce 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/4hnfor the no-rewind variant used by the installer'sdd 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:
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:
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 unmapped0x40000000–0x7FFFFFFFTT gap, so a plain pointer deref does fail — butsptalloc()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¶
- The Amix device-driver model — what major/minor numbers mean and how
cdevsw[]/bdevsw[]work. - Supported hardware & requirements — the CPU/RAM/SCSI/Zorro rules behind the card list.
- Building and installing a kernel — how a driver claims a major slot in
master.d/kernel.c. - Quirks — the SCSI ID rules (tape hard-coded at ID 4, disk ID 6 by convention) and the 16 MB / Zorro III limits.
- Versions — which Amix releases these numbers and cards apply to.
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/bdevswswitch 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.adfanalysis viatools/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 ✅) andsrc//tools/. The minor decode (sdunit/sdcard/sdpart,SDCARDS), block major 18 / char major 40, anddev_t = (major<<18)|minorare verified againstamiga/alien/sd.h; the/dev/scsichar major 11gsioctlpath againstsrc/gsio.c. src/kernel-patches/sd.c— the0x02020054, &a4091queue, "A4091 SCSI"scsicard[]row and the base-address-sortedqueue[]insertion.src/a4091-wr.c—A4091_PROD = 0x02020054, phys base0x40000000; thesptalloc()-mapped 53C710 driver.- a4091.device open-source project:
A4091/a4091-software(A4091 ROM + SCRIPTS assembler).