-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdevsoak.quirks
More file actions
172 lines (160 loc) · 8.3 KB
/
Copy pathdevsoak.quirks
File metadata and controls
172 lines (160 loc) · 8.3 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
# devsoak.quirks -- known-driver-behaviour database (implementation brief S16)
#
# Plain text, hand-parseable on Kickstart 1.3. One "quirk" block per entry:
#
# quirk <id>
# match key=value key<value key>=value ... (repeatable; ALL conditions
# across ALL match lines in
# the entry must hold - AND)
# because <free text, may wrap onto further indented lines>
# action <verb> <args...> (repeatable)
# status confirmed|reported|suspected
#
# '#' comments and blank lines are ignored. Match keys understood by
# devsoak's parser: name=STR (case-insensitive exact match on the driver's
# ln_Name), version</<=/>/>=/= N and revision</<=/>/>=/= N (the driver's
# lib_Version/lib_Revision), id~STR (case-insensitive substring of
# lib_IdString), kick</<=/>/>=/= N (the running Kickstart's exec.library
# lib_Version). Any other key (e.g. a SCSI INQUIRY string, an AttnFlags
# bit, a specific expansion board) is not evaluable by this parser: an
# entry using one is flagged unmatchable at load time and printed as a
# warning, and can then only ever be applied via -k.
#
# Actions: skip CMD... (trailing '*' wildcard prefix, e.g. NSCMD_*),
# expect CMD ERROR, warn TEST, skiptest TEST, align N, nochip,
# maxinflight N, maxxfer BYTES (decimal or 0x hex), norandomcmd, tier N.
#
# Status policy (S16.2): only "confirmed" entries are applied automatically
# against a reference driver. "reported" (seen in the wild, not reproduced
# by us) and "suspected" (a guess, or a first crash devsoak itself hit)
# entries are inert until named with -k on the command line. Nothing in
# this file may be promoted to "confirmed" on the strength of a document
# alone -- only after it has actually been reproduced with devsoak against
# real hardware or a real emulator build. Every entry below except the
# last is exactly the S16.5 seed table, left at the status that table
# gives it; the implementer of this file did not promote any of them.
quirk cbm-scsi-pre40-no-nsd
match name=scsi.device version<40
because Commodore scsi.device before V40 predates NSD. NSCMD_DEVICEQUERY
correctly returns IOERR_NOCMD, but the TD64 dialect (24-27) may be
dispatched through a jump table that was never range-checked
against these command numbers.
action skip TD_READ64 TD_WRITE64 TD_SEEK64 TD_FORMAT64
action skip NSCMD_*
action expect NSCMD_DEVICEQUERY IOERR_NOCMD
status suspected
quirk cbm-scsi-1.3-no-getgeometry
match name=scsi.device version<36
because TD_GETGEOMETRY is a V36 command; on the 6.x-ROM scsi.device found
on an A590/A2091 it is unimplemented. devsoak should expect
IOERR_NOCMD and fall back to the RDB partition size for its
bounds tests rather than treating the failure as a bug.
action expect TD_GETGEOMETRY IOERR_NOCMD
status reported
quirk cbm-ide-cf-geometry
match name=scsi.device version>=40
because On some IDE units with a CompactFlash card fitted, TD_GETGEOMETRY
has been observed to fail even on a V40+ scsi.device (noted in the
devtest README). This match can only key on the driver name/
version, not on "IDE unit" or "CF medium fitted" -- those would
need an id~ or inquiry~ match this parser does not support, so
this entry is broader than the real condition. Downgrade a
geometry-stable failure to a warning rather than skip it outright.
action warn geometry-stable
status reported
quirk a3000-sdmac-word-align
match name=scsi.device
because On an A3000 (SDMAC + Ramsey), non-LONGWORD-aligned DMA buffers
are unsafe. devtest's README reported odd-address trouble (last
two bytes unwritten); devsoak reproduced something stronger
under Copperline's SDMAC emulation, scsi.device 47.4: a read
into a word-aligned (+2) buffer arrives shifted left by two
bytes wholesale. align 4 (not 2) makes every soak clean. There
is no A3000-vs-other-machine match key in this parser, so this
entry matches every scsi.device everywhere; it is deliberately
left at a status that never auto-applies. Force it with
-k a3000-sdmac-word-align when the run is on an A3000.
action align 4
action warn payload
status reported
quirk a2091-dma-align
match name=scsi.device
because The A2091/A590 DMA controller needs word-aligned buffers. As with
the A3000 entry above, there is no way to key specifically on
"this scsi.device instance is driving an A2091" from ln_Name/
lib_Version/lib_IdString alone, so this is broad-matching and
force-only: use -k a2091-dma-align when the run is known to be on
an A2091/A590.
action align 2
status reported
quirk a2091-37-unaligned-length-hang
match name=scsi.device version=37 id~SCSI/XT
because scsi.device 37.64 from the A2091 PDMA-07 boot ROM hard-wedges
the machine (black screen, no recovery) on a CMD_READ whose
io_Length is not a sector multiple. Reproduced with devsoak
under Copperline emulation 2026-09-02: the run stops exactly at
the unaligned-length matrix test every time, and skipping that
one test yields a clean full soak (RESULT PASS, -Z included --
random command numbers and unadvertised TD64 dialects are all
rejected cleanly, so the classic V37 jump-table fear did not
materialise on this ROM). Also: TD_GETGEOMETRY and
NSCMD_DEVICEQUERY both fail with -1 (predate the driver), no
ETD dialect.
action skiptest unaligned-length
status reported
quirk removable-stop-ejects
match kick>=0
because CMD_STOP / TD_EJECT may physically eject media or spin a drive
down and not restart it, on any driver, whenever the medium is
removable (DGF_REMOVABLE) -- a property of the medium, not of the
driver identity, so it has no expressible match key here.
`kick>=0` is always true; it exists only so this entry has a
match block at all; the file's default policy (status is not
"confirmed") means it is otherwise inert. Force it with
-k removable-stop-ejects whenever running against a removable
drive without -R, to keep CMD_STOP/TD_EJECT out of the mix.
action skip CMD_STOP
action skip TD_EJECT
status reported
quirk old-jumptable-random-cmd
match version<37
because A driver built before V37 may index its command dispatch table
directly off the command number without a range check, so an
unknown command number in the random-cmd test (S8 test 21) can
walk off the end of the table instead of falling through to
IOERR_NOCMD. Applies to any driver below that version, regardless
of name.
action norandomcmd
status suspected
quirk uaehf-no-stop-start
match name=uaehf.device
because The emulated uaehf.device (WinUAE/Amiberry hardfile device) may
not implement CMD_STOP/CMD_START gating semantics the way real
trackdisk-alike hardware does. Downgrade the stop-start test to a
warning against this driver rather than failing the run over
emulator-only behaviour.
action warn stop-start
status suspected
# --- entries added from this project's own testing -------------------------
quirk lide-format-etd-nocmd
match name=lide.device version<=40
because lide.device 40.12 advertises ETD_FORMAT in NSCMD_DEVICEQUERY but
its BeginIO dispatch omits it (IOERR_NOCMD), and TD_FORMAT reads
stale io_Actual as an offset high word (IOERR_BADADDRESS when the
caller leaves garbage there). Reported upstream; reproduced with
devsoak under Copperline emulation 2026-09-01.
action expect ETD_FORMAT IOERR_NOCMD
status reported
quirk floppy-chip-buffers
match name=trackdisk.device
because Floppy trackdisk.device DMA goes through Paula, which can only
address chip RAM. devsoak's default MEMF_PUBLIC buffers may land
in fast RAM, where a read completes with no data transferred
(verify sees the untouched buffer). On Kickstart 2.0+ the
driver's TD_GETGEOMETRY dg_BufMemType already advertises
MEMF_CHIP and devsoak honours it automatically; Kickstart 1.3
trackdisk predates TD_GETGEOMETRY, so force it there with
-k floppy-chip-buffers. Applies to the internal drive and any
external floppy on trackdisk.device.
action chipbuffers
status confirmed