SCSI mount-gate diff: why SINTRAN III K mounts an SMD disk but not a SCSI disk¶
Question answered: find the exact device-kind gate that lets @ENTER-DIRECTORY mount an
SMD disk (DISC-75-1) but reject a SCSI disk (DISC-SCSI-1), by diffing two live execution
traces of SINTRAN III K.
Traces
- FAIL (SCSI): /mnt/c/Users/ronny/AppData/Local/trace/file-trace-3.txt (mount ends @ ~line 326768)
- OK (SMD): /mnt/c/Users/ronny/AppData/Local/trace/file-trace-smd-OK.txt (mount returns @ at line 1241832)
DEVICE TYPE/FLAGS WORD — the steering value (K03, verified)¶
- SCSI device datafield word-0
mem[164414] = 103325(0x86D5); working SMD =012314(0x14CC). Differing bits (SCSI/SMD): 15(1/0), 12(0/1), 9(1/0), 4(1/0), 3(0/1), 0(1/0). 103325is READ from memory at126276(never in a register before) => a pre-existing value written at boot/sysgen, not computed at mount and not from any SCSI response. The gate (line 266388) runs ~13k instructions BEFORE the first SCSI CDB (INQUIRY, 279508), confirming it is static device config, not disk content.- Path:
ENDIR -> COLDE -> load datafield[0]=103325 -> route SCSI to general-connect -> decode LDN 2210 -> device found (031600) -> async connect -> read geometry (last block) -> return WITHOUT queueing block-0 (directory) read. - Fix lever: SINTRAN builds this type/flags word at boot from the controller's hardware ident
(cf. SMD
BIGDI,1100,17= ident 17B). If the emulated SCSI controller presents an ident/geometry that makes SINTRAN write103325(flags that send COLDE down the "connect, don't read directory" branch) rather than a mountable-directory value, that is the emulator-side cause — consistent with "fails on K/L/M" (same config-build logic, off input). The single bit COLDE tests to gate the block-0 read is NOT yet isolated (async connect-completion path).
CORRECTED STATE (K03, verified — READ THIS; earlier gate/"never-dispatched" claims are void)¶
Verified facts on the correct version (K-VSX-500 binary, K03 symbols):
- SCSI @ENTER-DIRECTORY does run ENDIR (127774) and COLDE (125270, cold-enter-directory).
- COLDE correctly decodes the SCSI device: subroutine at 011577 decodes LDN 002210
(= SCSI HD-1) into device-group 22 + unit, then 011634 LDX ,X I *11 device-table lookup ->
SCSI device datafield 031600 (stored 126320 STA 31,B). Device is recognized, not rejected.
- COLDE sets up datafield 031600 (126327 stores 103325 = device flags/params), hands off
(130015), the process EXITs to the scheduler (026000 MST PID) and waits — the connect
is ASYNC.
- On completion SINTRAN reads the disk's last block (129311 = geometry/area-map, checksum
valid) but issues NO block-0 (directory-master) read — only 1 SCSI data CDB total. Block 0
(PACK-ONE master) is valid but never read.
- 126305 is NOT the reject: it routes SMD (reference/default device 1100) to a fast path and
SCSI (new device 2210) to the general device-connect path. Both legitimate.
Failure, as far as verified: SINTRAN completes the SCSI connect + geometry-identify but never
transitions to reading the directory master (block 0). NOT a rejected device, NOT bad disk content,
NOT the 126305 branch. The exact instruction that should queue the block-0 read (and doesn't) is
in the async connect-completion path and is NOT yet pinned. Concrete lead: the SCSI device datafield
at 031600 and the flags word 103325 set during connect (where a "connect-ready / is-mountable-
directory" state would live).
VERSION CORRECTION (READ FIRST — supersedes all routine names in this file)¶
The running traces are SINTRAN VSX/500 K = carve K-VSX-500 (byte-exact at the gate). The
correct symbol set is K03 (proven: K03 ENDIR=127774/RCBLO=032433 land on STD I routine
entries in the K binary; L07 addresses do not). All L07 names previously used here — CHIND,
COPFI, SG110, ENDIR=140176, CHDSI, RXDIR — are WRONG VERSION and void.
Correct K03 facts:
- The gate at 126305 is inside routine COLDE (K03 125270) — cold-enter-directory.
- ENDIR = 127774 (K03). It runs once in BOTH traces (SCSI line 184732, SMD 166467), and
RCBLO=032433 (read disc block) runs 13-15x in both — so the earlier "mount worker never runs /
identify-only" conclusion was an L07-address artifact and is RETRACTED.
- Gate 126305: mem[B+25] (device LDN: SMD 001100 / SCSI 002210) vs T=001100. SMD matches
-> mount arm; SCSI mismatches -> other arm. T=001100 is 1100 in BOTH runs => not read from the
directory being entered; it is a system/reference value (the SMD/main-directory device). Its exact
identity is still open.
VERIFICATION (re-checked directly in both live traces — this supersedes routine-name claims below)¶
- Gate = running PC
126305 SKP IF DA EQL ST, executes exactly once per mount. - SMD:
A=001100,T=001100→ equal → skip →126307→ MOUNT (reads directory). - SCSI:
A=002210,T=001100→ not equal →126306 JMP→126312→ REJECT (no directory read). - Gate at trace line 266388, BEFORE the first SCSI CDB (INQUIRY at 279508) → the value is device geometry/config-derived, not disk content.
T=001100= commoncode symbolSG110(1100B, VERIFIED).Acomputed from device-object fields (mem[B+20]/+24/+25, B=132473) + a device-parameter table lookup; differing input = SCSI descriptor word103325vs SMD012314.
CAVEAT (overlay mismatch): carved 025-S3IRPIT@126303 = LDA ,B 22, but the RUNNING code at
126303 is SAX 0 — so the carved label CHIND does NOT match the running code. Gate facts
above are from the running traces (ground truth); the routine name and exact field meaning from the
carve are INFERRED/uncertain. Still-open: origin of the SCSI descriptor word 103325 (the exact
emulated geometry parameter), which pins the one-line fix.
THE GATE (VERIFIED)¶
PC = 126305 (octal), inside routine CHIND (= 126303, L07 SYMBOL-2-LIST); gate is CHIND+2.
The branch executes exactly once per mount in each trace. It is a one-shot decision, not a loop:
| trace | gate arm taken | count of skip-arm (->126307) |
count of no-skip arm (->126306) |
|---|---|---|---|
| OK (SMD) | skip -> 126307 = MOUNT | 1 | 0 |
| FAIL (SCSI) | no-skip -> 126306 = REJECT | 0 | 1 |
Both run at the same context (Program level 1, PID 06). All SCSI bus I/O in the FAIL trace (INQUIRY / READ CAPACITY / READ_6) happens after this gate (line 278719+ vs gate at 266388), so the tested value is not disk content — it comes from the device descriptor built from static device configuration.
Carved / traced disassembly (identical opcodes in BOTH traces — not overlay-confounded)¶
126277 174200 BSET ONE SSPTM
126300 131047 JAZ 47
126301 004430 STA 30,B ; mem[B+30] := A (directory address just computed)
126302 044425 LDA 25,B ; A := mem[B+25] <-- the tested device-descriptor word
126303 171400 SAX 0 ; X := 0
126304 053067 LDT ,X I *67 ; T := 001100 (constant, = equate SG110; same in both traces)
126305 140065 SKP IF DA EQL ST ; skip next instr IF A == T <==== THE GATE
126306 124004 JMP *4 ; -> 126312 = COPFI (FILSYS) [taken when A != T : REJECT]
126307 044402 LDA 2,B ; ...continue -> IOF / IRW directory I/O [taken when A==T : MOUNT]
SKP IF DA EQL ST= skip the next instruction if A equals T (opcode 140065). VERIFIED against the trace bytes; opcode is byte-identical at PC 126305 in both traces.- Skip taken (A==T) ->
126307-> the OK path proceeds intoIOF/IRWdirectory-I/O setup and reads/enters the directory. - Skip not taken (A!=T) ->
126306 JMP *4->126312 = COPFI(FILSYS symbol) -> a value-format conversion routine (011577) -> alternate/reject path; the directory is never read.
The field and the two values (VERIFIED)¶
| symbol / expression | OK (SMD) | FAIL (SCSI) |
|---|---|---|
A = mem[B+25] (device-descriptor word, LDA 25,B, B=132473) |
001100 | 002210 |
T = 001100 (constant SG110, LDT ,X I *67) |
001100 | 001100 |
SKP IF DA EQL ST result |
equal -> skip -> MOUNT | unequal -> no-skip -> REJECT |
The same value is loaded earlier in the routine at 126016 LDA 34,B (mem[B+34] = 001100 / 002210),
i.e. it originates in the descriptor's configuration/geometry area and is carried into field +25.
Octal/decimal: 001100 = 576, 002210 = 1160. The test is exact equality against a fixed
system constant (SG110), not a range/size check — so 001100 behaves as a required
directory/geometry format value that every mountable SINTRAN directory device must present.
Plain-English result¶
SINTRAN mounts the disk only if the directory-descriptor word
mem[B+25]equals001100(octal) — the constantSG110, tested at PC126305(CHIND+2) bySKP IF DA EQL ST. The SMD disk presents001100and mounts. The emulated SCSI disk presents002210, so the equality fails,CHINDbranches to126306 -> 126312 (COPFI)instead of126307, and the directory is never read.Fix: make the emulator's SCSI device present geometry/descriptor data such that this descriptor word computes to
001100(SG110) instead of002210.
Cross-check: what kind of value is this? (step 4)¶
- It is not a ready/connected state (the SCSI device connects and answers INQUIRY/READ CAPACITY fine) and not a unit-select word.
- It is tested by exact equality against a fixed constant (
SG110 = 001100), which is the signature of a device-format / directory-geometry word — a "this device is formatted the way SINTRAN directories must be" attribute. VERIFIED that the test is exact-equality against SG110; INFERRED that the semantic role of descriptor field +25 (mirrored at +34) is a directory/geometry format word.
VERIFIED vs INFERRED¶
VERIFIED
- Gate PC 126305, opcode 140065 SKP IF DA EQL ST, identical bytes in both traces.
- Routine name CHIND (=126303) and reject-target COPFI (=126312) from L07 SYMBOL-2-LIST /
FILSYS-SYMBOLS.
- Comparand constant = 001100 = symbol SG110 (L07 SYMBOL-2-LIST, SG110=001100).
- Tested word mem[B+25] (B=132473): OK=001100, FAIL=002210 (register dumps at the gate).
- One-shot gate: OK takes mount arm once and never the reject arm; FAIL the opposite.
- Value is device-config-derived: all SCSI bus I/O occurs after the gate.
INFERRED
- The precise physical meaning of descriptor field +25 / +34 (called here a
directory/geometry format word). It is compared for exact equality with a fixed system
constant, which is why it reads as a format/type signature rather than a size.
- That correcting the SCSI device's presented geometry so this word becomes 001100 is
sufficient to make the mount proceed (the gate is necessary; downstream directory-content
checks were not re-verified past the gate).
Method note (why earlier candidates were rejected)¶
- Cross-trace comparison by virtual PC is confounded by SINTRAN PIT/S3SRPIT overlays (same virtual address holds different code at different times) and by the fact SCSI and SMD use entirely different drivers. Gates were therefore filtered to PCs whose opcode is byte-identical in both traces, excluding overlay artifacts (e.g. 032704, 044767 disassemble differently in the two traces and are overlay/self-modifying dispatch, not gates).
- The name-lookup skip at
027074(12x) and the accumulator loop126033-126152(both step 112000->114042 identically and both exit) are red herrings, not the gate. 126305is the earliest clean, same-opcode, once-per-mount value-divergence, and its two arms demonstrably lead to directory-read (OK) vs reject (FAIL).