Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
190 commits
Select commit Hold shift + click to select a range
5398029
kona: frame the command page's words
jamesbraid Nov 7, 2026
027cd47
kona: present the pipe's identity
jamesbraid Nov 7, 2026
8832f60
kona: model the flash EEPROM and its programming operation
jamesbraid Nov 7, 2026
7c1ac1f
kona: add the host interface registers and the attach interface
jamesbraid Nov 7, 2026
93b6002
kona: add the Backend interface and the Host Interface Processor's state
jamesbraid Nov 7, 2026
c5cdea3
kona: decode the command stream
jamesbraid Nov 7, 2026
71b3ccf
kona: run the command stream on a Host Interface Processor thread
jamesbraid Nov 7, 2026
a640c0f
kona: take DMA packets and run display lists
jamesbraid Nov 7, 2026
4c9e2e1
kona: document the front end
jamesbraid Nov 7, 2026
67a6712
kona: give a back end's display thread a handle to the front end
jamesbraid Nov 7, 2026
603d8e5
kona: stop, quiesce and resume the back end with the board
jamesbraid Nov 7, 2026
598e36b
kona: add the back end skeleton and its monitor command
jamesbraid Nov 7, 2026
9aa7095
kona: tell the back end about the words the framers drop
jamesbraid Nov 7, 2026
6bfbabc
kona: census the jobs a command stream sends the back end
jamesbraid Nov 7, 2026
00393c7
kona: replay recorded command streams into the front end
jamesbraid Nov 7, 2026
6cbb7f5
kona: add the pixel store
jamesbraid Nov 7, 2026
6b763f1
kona: lay a window's planes out in a pixel's words
jamesbraid Nov 7, 2026
eed73e2
kona: pack and unpack the host and bus pixel formats
jamesbraid Nov 7, 2026
d1bbbfb
kona: hold the pixel store and lay out buffer configurations in the b…
jamesbraid Nov 7, 2026
c806c3f
kona: read recordings record by record
jamesbraid Nov 7, 2026
88005a7
kona: census the GL demo recording by marked span
jamesbraid Nov 7, 2026
fd4cab7
kona: draw boxes, points and bitmaps into the pixel store
jamesbraid Nov 7, 2026
b8cbe21
kona: interpret the textport's drawing commands
jamesbraid Nov 7, 2026
429e144
kona: draw the textport in the back end and hash the store
jamesbraid Nov 7, 2026
114d3cf
kona: decode the X server's graphics context
jamesbraid Nov 7, 2026
3b032f0
kona: hold the X server's position, clip list and scissor
jamesbraid Nov 7, 2026
84b6a9e
kona: draw the X server's boxes and rectangles
jamesbraid Nov 7, 2026
e2bbae3
kona: draw the X server's spans and points
jamesbraid Nov 7, 2026
2f3ccc3
kona: keep the X server's stipple cache and mask fills with it
jamesbraid Nov 7, 2026
586d6a6
kona: draw the IRIX recording's exact window into the store
jamesbraid Nov 7, 2026
fb4408b
kona: add a fill-rate benchmark for the integer drawing path
jamesbraid Nov 7, 2026
3d6bff2
kona: compose the frame through the textport's colour map
jamesbraid Nov 7, 2026
1d9e9e3
kona: compare the PROM replay's frame with its screen capture
jamesbraid Nov 7, 2026
c57f0b5
kona: run the display's clock and complete retraces at frame boundaries
jamesbraid Nov 7, 2026
397abdd
kona: keep the X state per rendering context
jamesbraid Nov 7, 2026
900cd09
kona: count the kernel's memory-region commands
jamesbraid Nov 7, 2026
72ba654
kona: draw the display-ID and overlay planes
jamesbraid Nov 7, 2026
dc4553c
kona: compose index windows through the X colour map, gamma and cursor
jamesbraid Nov 7, 2026
e8e930a
kona: hold the desktop and PROM frames to no differing pixels
jamesbraid Nov 7, 2026
b08304f
kona: attach the board to the emulator's display
jamesbraid Nov 7, 2026
8476f50
kona: let the monitor read pixels without the command stream
jamesbraid Nov 7, 2026
556c2da
kona: answer board busy when the monitor cannot get the state
jamesbraid Nov 7, 2026
04fc2c5
kona: say plainly when the replay tests skip
jamesbraid Nov 7, 2026
014bec3
kona: let a back end post a completion of four words
jamesbraid Nov 7, 2026
585bb06
kona: draw the X server's pixel writes and copies and answer its reads
jamesbraid Nov 7, 2026
a731235
kona: replay the whole IRIX recording into the drawing back end
jamesbraid Nov 7, 2026
6f66f3a
kona: take the GL client's state and turn its vertices into a typed list
jamesbraid Nov 8, 2026
8c109fb
kona: census the GL streams and measure the vertex hand-off
jamesbraid Nov 8, 2026
954965e
kona: add the tile scheduler
jamesbraid Nov 8, 2026
e5cc109
kona: draw the GL client's triangles on the tile scheduler
jamesbraid Nov 8, 2026
d30d4bc
kona: keep frames of the GL demos as the replay goes
jamesbraid Nov 8, 2026
3dd0d7b
kona: take the datasheet references out of the token census
jamesbraid Nov 8, 2026
b747281
kona: serve the replay's list pulls by pool offset
jamesbraid Nov 8, 2026
409df72
kona: choose the gamma page per channel from the XMAP's set-up word
jamesbraid Nov 8, 2026
82792b9
kona: decode window kinds from the ID entry and mode byte together, w…
jamesbraid Nov 8, 2026
01926fd
kona: trim the public surface and fold the builder and config knobs i…
jamesbraid Nov 8, 2026
b7231a0
kona: attach through the interrupt controller and the bus, as VPro does
jamesbraid Nov 8, 2026
3b3a5ab
kona: name every host token, register and field in one definitions mo…
jamesbraid Nov 8, 2026
46536f8
kona: guard the pipe with a mutex, queue waiting writes, and drain on…
jamesbraid Nov 8, 2026
e484fc5
kona: make the back end concrete, and the census, pixel view and regi…
jamesbraid Nov 8, 2026
1d64adf
kona: make the tile scheduler concrete, with a preallocated queue per…
jamesbraid Nov 8, 2026
e9694af
kona: group the back end by what it does, and hold per-context state …
jamesbraid Nov 8, 2026
3336be8
kona: check the configuration block against fixed bytes
jamesbraid Nov 8, 2026
e2ff663
kona: hold the data-run and list-invocation buffers
jamesbraid Nov 8, 2026
289c417
HACKING: add the KONA threads to the thread table
jamesbraid Nov 8, 2026
f5de222
kona: hand triangles to set-up as window vertices under a draw state
jamesbraid Nov 8, 2026
d862d52
clanker: design the InfiniteReality (KONA) board in Iris
jamesbraid Nov 8, 2026
8ebd356
devlog: add a log module for the KONA board
jamesbraid Nov 7, 2026
863a309
kona: read the host's pointer from the cursor registers
jamesbraid Nov 8, 2026
fc13de2
kona: walk triangles in quads with an integer depth plane
jamesbraid Nov 8, 2026
c373d16
kona: apply the fragment operations in the per-pixel module
jamesbraid Nov 8, 2026
d23afb8
kona: drop the fragments of windows that do not own the pixel
jamesbraid Nov 8, 2026
978a8ee
kona: draw lines and points, and apply the line and polygon stipples
jamesbraid Nov 8, 2026
58a20a1
kona: save and restore the pixel store and cursor memory as chunks
jamesbraid Nov 8, 2026
6469303
kona: take the matrix tokens' double forms, and frustum and orthograp…
jamesbraid Nov 8, 2026
ccfcdd9
kona: keep the reset register test on the back end double
jamesbraid Nov 8, 2026
ae7f302
kona: load, bind and sample textures
jamesbraid Nov 8, 2026
fa60466
kona: save and restore the board's small state and the texture arena
jamesbraid Nov 8, 2026
94b5f2b
kona: split the fragment tests and writes out of the triangle walk
jamesbraid Nov 8, 2026
68f5703
kona: draw, read and copy pixels, bitmaps and the accumulation buffer
jamesbraid Nov 8, 2026
405b87f
kona: answer GL queries and run select and feedback passes
jamesbraid Nov 8, 2026
a5137be
kona: draw multisampled windows a sample at a time
jamesbraid Nov 8, 2026
2af1745
config: name the InfiniteReality2 boards
jamesbraid Nov 9, 2026
6d226a0
ip27: fit the InfiniteReality2 pipe in the Onyx2's graphics slot
jamesbraid Nov 9, 2026
06930a6
kona: lay out the current-value and raster-position replies as the ta…
jamesbraid Nov 9, 2026
8aa0c79
kona: place small texture levels by the client's copies and count tex…
jamesbraid Nov 9, 2026
900fe73
kona: run an accumulation by exactly 1.0 as two half passes
jamesbraid Nov 9, 2026
bf4e510
kona: name the multisample control, sampling and depth-clear words
jamesbraid Nov 9, 2026
fb671da
kona: compare the painted display ID shifted by two and drop the all-…
jamesbraid Nov 9, 2026
783a23b
kona: round window positions to the 1/256 grid as the engine's subtra…
jamesbraid Nov 9, 2026
a5a7fc1
kona: decode and keep the DAC cursor load
jamesbraid Nov 9, 2026
a18918e
kona: serve a map RAM store at once when nothing is queued
jamesbraid Nov 9, 2026
ad33ed7
kona: answer texel read-backs from the texture arena
jamesbraid Nov 9, 2026
aca8c99
kona: size the extension pixel formats and read ABGR
jamesbraid Nov 9, 2026
ce682fb
kona: size generic state replies by the table's 171 rows
jamesbraid Nov 9, 2026
cc8335d
kona: take the graphics-context load's masks and the restart token fr…
jamesbraid Nov 9, 2026
6883329
hub: do not record a busy processor read as a read error
jamesbraid Nov 9, 2026
473a722
kona: keep detail images apart from the base texture levels
jamesbraid Nov 9, 2026
e78e7aa
kona: keep the display generator's channel state and run its video se…
jamesbraid Nov 9, 2026
b643947
kona: answer the display generator's video Gets, and run a combinatio…
jamesbraid Nov 9, 2026
921d32a
kona: bound the packed size of a texel read by its skips and cap it b…
jamesbraid Nov 9, 2026
1bb4f1e
kona: tell a small texture level's copies from an update that ends at…
jamesbraid Nov 9, 2026
c4c9ea0
kona: test that a snapshot keeps the texture levels and the detail im…
jamesbraid Nov 9, 2026
c0ce456
kona: name the optimisation function for the write it describes and t…
jamesbraid Nov 9, 2026
d9f9bce
kona: return a 16-bit level's raw words from a texel read and sample …
jamesbraid Nov 9, 2026
6aa5d50
kona: deliver a bracketed texel read-back to the range the start toke…
jamesbraid Nov 9, 2026
51529b1
kona: let the store's racing reader make a pass before the test stops it
jamesbraid Nov 9, 2026
54744ff
kona: take every video request's data-word count and the monitor comm…
jamesbraid Nov 9, 2026
049a028
kona: say in the channels module that the managed size is kept and no…
jamesbraid Nov 9, 2026
7ca551a
kona: log the blanking commands and list the blanked channels in the …
jamesbraid Nov 9, 2026
4947628
kona: test that the backend saves the video channels and runs the fir…
jamesbraid Nov 9, 2026
73845ae
kona: document the display generator's channels and what they leave u…
jamesbraid Nov 9, 2026
b432f43
kona: note the texture read-back changes in the changelog
jamesbraid Nov 9, 2026
761e328
kona: hand the machine the window and a flash file
jamesbraid Nov 9, 2026
8a7456b
docs: describe the InfiniteReality board as built
jamesbraid Nov 10, 2026
d70d321
config: one section for each SN0 product
jamesbraid Nov 10, 2026
dd6c243
ip27: fit the BaseIO card's boot flash with the I/O PROM
jamesbraid Nov 10, 2026
1de9360
config: name the SN0 profiles once
jamesbraid Nov 10, 2026
5484cbb
ip27: share the SN0 machine test support
jamesbraid Nov 10, 2026
82743b2
hub: hand a Bridge the Hub as an xtalk host
jamesbraid Nov 10, 2026
d0ba233
xbow: serve a Bridge's link checks and link reset
jamesbraid Nov 10, 2026
675ca1f
ip27: one board type for the Origin 2000 and Onyx2 desksides
jamesbraid Nov 10, 2026
0f8adff
ip27: pass the module controllers' outputs through
jamesbraid Nov 10, 2026
a3ddfaf
ip27: one device for unmodelled space
jamesbraid Nov 10, 2026
0e49118
ip27: describe the PCI population as one value
jamesbraid Nov 10, 2026
24baf77
ip27: compute a node's bank layout once
jamesbraid Nov 10, 2026
2ee40d2
ip27: bus-error accesses to unfitted node memory
jamesbraid Nov 10, 2026
d363b5f
devlog: a category for the module controllers
jamesbraid Nov 10, 2026
9ec09bb
ip27: visit the module controller when it is next due
jamesbraid Nov 10, 2026
d4357b8
sflash: one AMD command engine for every boot flash
jamesbraid Nov 10, 2026
43fcb1b
hub: make the Hub one module with private units
jamesbraid Nov 10, 2026
50f600e
hub: drop the store observer and the API no machine calls
jamesbraid Nov 10, 2026
9a4572f
hub: let the Hub act on what its units change
jamesbraid Nov 10, 2026
05d2255
ioc3: split the functions into children
jamesbraid Nov 10, 2026
41afb31
hub: drive the processors' interrupt words without a lock
jamesbraid Nov 10, 2026
e8cda50
ioc3: build and own the Ethernet MAC as a child
jamesbraid Nov 10, 2026
528e185
docs: bring the SN0 notes up to what landed
jamesbraid Nov 10, 2026
fdd5d39
kona: test texture loads that interleave across context switches
jamesbraid Nov 10, 2026
3a016b9
ioc3: raise the MAC's interrupt through atomic status and enable words
jamesbraid Nov 10, 2026
c351c64
ioc3: describe each board's IOC3 as a table
jamesbraid Nov 10, 2026
bf32835
timekeeper: drop the Fuel names
jamesbraid Nov 10, 2026
80c89a8
ds1685: the Octane's clock and its NVRAM file as their own part
jamesbraid Nov 10, 2026
c3189c4
ip30: give the Octane2 the Octane2's identity records
jamesbraid Nov 10, 2026
b90b905
ioc3: add the MediaIO board
jamesbraid Nov 10, 2026
6a38356
ip27: give the Onyx2's BaseIO-G the MediaIO daughtercard's board record
jamesbraid Nov 10, 2026
9726bf1
ip27: fit the Onyx2's MediaIO IOC3 at PCI device 6
jamesbraid Nov 10, 2026
353ecd9
ip27: fit RAD1 audio on the Onyx2's BaseIO-G
jamesbraid Nov 10, 2026
05df674
kona: clip against the user clip planes
jamesbraid Nov 10, 2026
198099b
kona: load and bind volume textures and draw them under the 3D enable
jamesbraid Nov 10, 2026
b154c79
gl: add texture-coordinate generation to the shared GL core
jamesbraid Nov 10, 2026
9762d1b
kona: generate texture coordinates
jamesbraid Nov 10, 2026
e1ee6aa
docs: describe the InfiniteReality geometry stage's clip planes, texg…
jamesbraid Nov 10, 2026
8001c55
kona: apply fog per fragment
jamesbraid Nov 10, 2026
0bab13d
kona: draw polygons as lines or points under the polygon mode
jamesbraid Nov 10, 2026
9cfdc25
kona: size the texture store by the product
jamesbraid Nov 10, 2026
113d3eb
kona: add the InfiniteReality2E and InfiniteReality3 products
jamesbraid Nov 10, 2026
7752555
kona: let a recording name any modelled product
jamesbraid Nov 10, 2026
eb8c256
config: name the InfiniteReality2E boards
jamesbraid Nov 10, 2026
019499c
kona: keep filter tables and the detail bind, and apply the base bind…
jamesbraid Nov 10, 2026
7993a12
kona: combine a magnified base with its detail image or a sharpen of …
jamesbraid Nov 10, 2026
b4fbef3
docs/graphics: describe volume textures and the detail and sharpen co…
jamesbraid Nov 10, 2026
b7f2921
kona: pin the polyline tokens' word counts
jamesbraid Nov 10, 2026
41e2db8
kona: smooth points, lines and polygons by pixel coverage
jamesbraid Nov 10, 2026
014126c
docs: describe fog, polygon modes and smoothing on the InfiniteRealit…
jamesbraid Nov 10, 2026
14e7d2f
kona: sample volume textures with a third coordinate and a depth to e…
jamesbraid Nov 10, 2026
33361f8
kona: draw the X server's background points
jamesbraid Nov 10, 2026
3f1bf48
kona: draw the X server's relative points
jamesbraid Nov 10, 2026
c18cdb6
kona: draw the X server's line segments and polylines
jamesbraid Nov 10, 2026
ec1d858
kona: take the double forms of the colour, normal, texture-coordinate…
jamesbraid Nov 10, 2026
1608109
kona: say what the raster stage and GL path draw today
jamesbraid Nov 10, 2026
bd25bf5
kona: describe the pipe's products as one table
jamesbraid Nov 10, 2026
30e0575
docs: describe the IOC3 and its children
jamesbraid Nov 10, 2026
a2ed29b
cpu: carry an R10000 TLB entry's uncached attribute to the bus
jamesbraid Nov 9, 2026
021136c
hub: publish the node routing and send restarts from the chip
jamesbraid Nov 10, 2026
8817552
window_map: move the bounded windows out of ip35.rs
jamesbraid Nov 10, 2026
f70c201
kona: grade the opaque-stipple bit as the sender's intent
jamesbraid Nov 10, 2026
51ca8f4
kona: draw the DAC cursor over the composed frame
jamesbraid Nov 10, 2026
0619bf8
kona: show black while channel 0 is blanked
jamesbraid Nov 10, 2026
964d24b
ip27: give each node's processor both nodes' memory in its window
jamesbraid Nov 10, 2026
b4d496d
docs: record that a two-node Origin 2000 boots IRIX
jamesbraid Nov 10, 2026
478d115
kona: address texture memory by bank and address
jamesbraid Nov 10, 2026
3859fc5
kona: hold the IRIX desktop frame to one level of its capture
jamesbraid Nov 10, 2026
6896c46
kona: drop the low four bits of the gamma output on its way to the DAC
jamesbraid Nov 10, 2026
e3e293e
kona: count the kernel's video acknowledgement of the activity register
jamesbraid Nov 10, 2026
5f88a59
kona: answer every push of the attribute stack
jamesbraid Nov 10, 2026
25e07cc
ppmem: reach memory the region bitmap misses through a fine table
jamesbraid Nov 10, 2026
a3a9bbd
ip27: keep a 512 MiB bank 0 over the boot flash's reset address
jamesbraid Nov 10, 2026
9c5d33b
clanker: plan the Onyx2, Onyx 3000 and InfiniteReality port
jamesbraid Nov 8, 2026
156051d
kona: load the packed pixel types as texels
jamesbraid Nov 10, 2026
dcaf735
clanker: bring the Onyx2 and InfiniteReality plan notes up to date
jamesbraid Nov 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
153 changes: 152 additions & 1 deletion CHANGELOG.md

Large diffs are not rendered by default.

27 changes: 17 additions & 10 deletions FEATURES.md
Original file line number Diff line number Diff line change
Expand Up @@ -175,32 +175,39 @@ the first `[section]`, because TOML tables continue until the next header.

| Key | Default | Values and behavior |
|---|---|---|
| `machine.profile` | `indy_ip24` | indy_ip24, indigo2_ip22, indigo2_ip28, o2_ip32 (configured by `[o2]`, see [the O2 guide](docs/o2-ip32.md)), octane_ip30 (configured by `[octane]`, see [the Octane guide](docs/octane-ip30.md)), origin200_ip29 (configured by `[origin200]`, see [the Origin 200 guide](docs/origin200-ip29.md)), origin2000_ip27 (configured by `[origin2000]`, see [the Origin 2000 guide](docs/origin2000-ip27.md)), onyx2_ip27 (also configured by `[origin2000]`, see [the Onyx2 guide](docs/onyx2-ip27.md)). |
| `machine.profile` | `indy_ip24` | indy_ip24, indigo2_ip22, indigo2_ip28, o2_ip32 (configured by `[o2]`, see [the O2 guide](docs/o2-ip32.md)), octane_ip30 (configured by `[octane]`, see [the Octane guide](docs/octane-ip30.md)), origin200_ip29 (configured by `[origin200]`, see [the Origin 200 guide](docs/origin200-ip29.md)), origin2000_ip27 (configured by `[origin2000]`, see [the Origin 2000 guide](docs/origin2000-ip27.md)), onyx2_ip27 (configured by `[onyx2]`, see [the Onyx2 guide](docs/onyx2-ip27.md)). |
| `machine.cpu` | the machine's first | A family (`r4400`, `r5000`, `r10000`, `r12000`, `r14000`) or a part (`r14000_600`); independent of build features. Indy and `indigo2_ip22`: r4400, r5000; `indigo2_ip28`: r10000; O2: r5000, r10000, r12000; Octane: r10000, r12000, r14000; Origin 200, Origin 2000 and Onyx2: r10000 (`r10000_180`), r12000 (`r12000_270`). The first listed is the default. |
| `machine.cpus` | `1` | Processors fitted. 2 only on the Octane; see [its guide](docs/octane-ip30-multiprocessor.md). |

### [origin2000]
### [origin200], [origin2000] and [onyx2]

Origin 2000 settings apply when `machine.profile = "origin2000_ip27"` or `"onyx2_ip27"`.
The SN0 machines read one table each, named for the product and holding the
same keys: `[origin200]` when `machine.profile = "origin200_ip29"`,
`[origin2000]` for `"origin2000_ip27"` and `[onyx2]` for `"onyx2_ip27"`. A
table that is not the profile's own is refused, with the name of the one the
profile reads.

| Key | Default | Values and behavior |
|---|---|---|
| `nodes` | `1` | Node boards: 1 or 2. Two are joined by the direct cable. Every node gets the `banks` memory. |
| `flash` | unset | Persistent 1 MiB node boot-flash file of the first node; the second keeps its own at the name with `.1` added. Unset, the flash is volatile. |
| `nodes` | `1` | Node boards on a deskside: 1 or 2. Two are joined by the direct cable. Every node gets the `banks` memory. The Origin 200 has one. |
| `flash` | unset | Persistent 1 MiB node boot-flash file (of the first node on a deskside; the second keeps its own at the name with `.1` added). Unset, the flash is volatile. |
| `controller_store` | unset | Persistent file for the module controller's configuration store. Unset, it is volatile. |
| `io_prom` | unset | Deskside only. The BaseIO card's I/O PROM image (`io6prom.img`, beside the node PROM on the IRIX 6.5.30 media), fitted in its boot flash. Unset leaves the flash unfitted and the node PROM runs its own reduced copy, which has no graphics console. |

An `[origin2000]` table is written to a saved config only when one of these
keys is set. See the [Origin 2000 guide](docs/origin2000-ip27.md).
A table is written to a saved config only when one of its keys is set. See the
[Origin 200](docs/origin200-ip29.md), [Origin 2000](docs/origin2000-ip27.md) and
[Onyx2](docs/onyx2-ip27.md) guides.

### [graphics]

| Key | Default | Values and behavior |
|---|---|---|
| `graphics.board` | `newport`; `solidimpact` on the Octane | newport, xz, extreme, solidimpact, highimpact, maximpact, v6, v8, v10, v12, none. Extreme is Indigo2 only. The Octane takes only `solidimpact` (SI), `highimpact` (SI with texture option), `maximpact` (MXI), `v6`, `v8`, `v10`, `v12` (the VPro boards, also `vpro:v12` and so on; need an IRIX install with the VPro driver, IRIX 6.5.10 or later and PROM 4.0, or 4.5 for the V10 and V12, which shipped only in the Octane2 and so give the machine the Octane2's Crossbow 1.4 and Bridge revision) or `none` (no board: the machine runs on its serial console, with no window). |
| `graphics.board` | `newport`; `solidimpact` on the Octane | newport, xz, extreme, solidimpact, highimpact, maximpact, v6, v8, v10, v12, ir2, ir2:2rm, ir2e, ir2e:2rm, none. `ir2` and `ir2:2rm` are the Onyx2 deskside's InfiniteReality2 pipe with one or two raster managers; `ir2e` and `ir2e:2rm` are the InfiniteReality2E (GE16-4, RM9, 64 MB texture per raster manager), which also fits the deskside. The Onyx2 takes only the first four or `none`; the default is `none`. Extreme is Indigo2 only. The Octane takes only `solidimpact` (SI), `highimpact` (SI with texture option), `maximpact` (MXI), `v6`, `v8`, `v10`, `v12` (the VPro boards, also `vpro:v12` and so on; need an IRIX install with the VPro driver, IRIX 6.5.10 or later and PROM 4.0, or 4.5 for the V10 and V12, which shipped only in the Octane2 and so give the machine the Octane2's Crossbow 1.4 and Bridge revision) or `none` (no board: the machine runs on its serial console, with no window). |
| `graphics.flash` | unset | InfiniteReality2: the file that keeps the pipe's 512 KiB flash EEPROM between runs; created when absent. Unset keeps it in memory. |
| `graphics.heads` | `1` | 1 or 2; dual-head requires Newport. |
| `graphics.resolution` | `guest` | guest, 1024x768, 1280x960, 1280x1024; presets require Newport. |
| `graphics.threads` | `2` | Worker threads the board's fragment pipeline draws on, at least 1. VPro: the screen tiles' owners, besides its front-end and raster threads; more help on a host with cores to spare. |
| `graphics.tile` | `32` | VPro: the fragment pipeline's screen tile size in pixels, a power of two from 8 to 256. Each tile's work runs in order on one worker at a time; with many threads, 64 can be faster. |
| `graphics.threads` | `2` | Worker threads the board's fragment pipeline draws on, at least 1. VPro and InfiniteReality: the screen tiles' owners, besides its front-end and raster threads; more help on a host with cores to spare. |
| `graphics.tile` | `32` | VPro and InfiniteReality: the fragment pipeline's screen tile size in pixels, a power of two from 8 to 256. Each tile's work runs in order on one worker at a time; with many threads, 64 can be faster. |
| `graphics.raster` | `cpu` | VPro and IMPACT: where the raster unit runs. `cpu` draws on the threads above (IMPACT: its raster engine threads); `wgpu` draws on the host GPU through wgpu compute (needs a build with the `wgpu` feature; work in progress, see `clanker/plans/wgpu-raster.md`). An IMPACT board then has one raster engine, whatever `IRIS_MGRAS_ENGINES` says. |
| `graphics.gpu_backend` | `auto` | The wgpu backend for `raster = "wgpu"`: auto, vulkan, metal, dx12 or gl. |

Expand Down
18 changes: 13 additions & 5 deletions HACKING.md
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,12 @@ pub trait Resettable { fn power_on(&self); }
`register_commands`/`execute_command` give a device its own debug commands;
[debug.md](debug.md) documents them.
- **Saveable** is snapshot state. A device that implements it gets a
save → load → save round-trip test.
save → load → save round-trip test. State too big for a TOML table goes to the
chunk store instead: the machine calls the device's own `save_chunks` and
`load_chunks` (as for the framebuffers), keeps the hash lists in `ChunksManifest`
(`kona_chunks` for the KONA pipe's pixel store and cursor memory) and lists them in
`referenced_hashes`, so `gc` keeps them. A new field in `ChunksManifest` changes
`chunks.bin`, so it bumps `SCHEMA_VERSION`.
- **Resettable** is power-on state.

Devices connect to each other through device-specific `connect()` /
Expand Down Expand Up @@ -306,8 +311,9 @@ Every device that has real work to do runs on its own thread:
| `machine-events` | power-off and reset requests from devices |
| `ISP1040-0`, `ISP1040-1` | Octane SCSI request rings and disk transfers |
| `IOC3-RX-A`, `IOC3-RX-B`, `IOC3-NVRAM` | Octane serial input per port; the DS1685 NVRAM file writer (IOC3's other deadlines are `hptimer` one-shots) |
| `ip30-eth-rx`, `ip30-eth-net` | Octane ethernet receive pump; the network backend |
| `ioc3-eth-rx`, `ioc3-eth-net` | IOC3 ethernet receive pump (every machine with an IOC3); the network backend |
| `odyssey-work`, `odyssey-raster`, `odyssey-pool-N`, `odyssey-display` | VPro: the front end decodes the queued command-FIFO stores (the processor's stores only queue); the raster unit sets each draw up and walks its primitives into 2x2 quads; a pool of workers (`[graphics] threads`, default 2) walks, shades and stores filled triangles and stores every other fragment, one screen tile at a time; and the display composes each whole frame from board memory (64-bit words, as main memory is: a field is a bit range of its word, read by shift and mask with no byte order, `vram.rs`) as the scan-out registers describe it, counts the retrace and presents the window at 60 Hz. No board-wide lock: the front end owns its state, an access that needs the drawing is answered busy until it is done, the display FIFO (PB&J's register file) has its own lock and never waits for the drawing (`display_fifo.rs`), and the display reads board memory while it is drawn, as the board's own scan-out does; nobody tracks which rows changed. The raster thread sets primitives up and writes each as one command in a ring of 64-byte slots (`pipe/ring.rs`): a triangle's record and bounding box, a quad it shaded itself (lines, points), or a clear's rectangle; the slot's index goes on the queue of every screen tile (`[graphics] tile`, default 32 pixels) it touches. A worker takes a ready tile and owns it until its queue is empty, walking each triangle within the tile and shading and storing quad by quad, so every pixel sees its fragments in command order with no other ordering, and the depth pre-test reads depth its own tile stored. A slot is retired once all its tiles have run it. The raster thread drains the ring before any other work on board memory (a texture upload waits for the shader alone). A completion (a fence's token, a query's words) does not drain: it rides the ring and runs once the ring retires past the quads queued before it. A quad's four pixels are lanes: the walk's depth, the texture unit's positions and the colour weights run on the host's SIMD unit (`fearless_simd`, `pipe/lanes.rs`, the level detected at start-up), bit for bit the scalar arithmetic. When its queue runs dry the raster thread does not drain: it keeps one count of the raster unit's pending jobs for the quads still in flight, and a front-end wait or a refused processor read asks it to store them. `IRIS_ODSY_SHADER=inline` makes the raster thread shade every quad itself, and `IRIS_ODSY_BACKEND=inline` stores on the raster thread with no pool. The texture registers a draw reads live in an array of draw state slots (`pipe/slot.rs`): the front end writes the current slot, a draw latches it and holds it until its job is given back, and a write while a queued draw holds the current slot first copies it to a free one, so the stages read their draw's registers with no lock |
| `kona-hip`, `kona-tile-N`, `kona-display` | InfiniteReality (KONA): the processor's stores to the pipe only queue in a ring (`src/dev/kona/mod.rs`); `kona-hip` takes them in order under the pipe lock, frames the commands and runs the back end inline, so the front end's state needs no lock of its own. A draw is set up on `kona-hip` and its job goes on the index queue of every screen tile it touches (`[graphics] tile`); `kona-tile-N` workers (`[graphics] threads`; none means `kona-hip` runs the tiles itself) each take a ready tile and own it until its queue is empty, so every pixel sees its work in command order. `kona-hip` drains the tiles before any other use of the pixel store. `kona-display` composes the whole frame from the store and the display tables at 60 Hz and, at each frame boundary, completes the retrace requests made since the last one (through the display handle, not the pipe lock) |

Threads that have nothing to do park instead of spinning: the graphics
consumers when their FIFO is empty, and the CPU thread in `idle-pause` builds
Expand Down Expand Up @@ -380,9 +386,11 @@ consumer thread never takes `rec`.
per-model branch on the hot path. `Machine::new` picks one from `[machine]
cpu`.
- Every uncached SB/SH goes to the bus through `BusDevice::write_narrow_from`
with the whole source register: the byte or halfword is the low bits, the
other lanes are undefined by hardware, and only Bedrock's ECC view reads
them.
with the whole source register: the byte or halfword is the low bits and
the other lanes are undefined by hardware. The default delivers the low
bits, and no device in this tree overrides it; one that models a path
observing the other lanes (a memory ECC view) would. The call is a `dyn`
call in place of the `write8`/`write16` one.
- With `opcodefusion` (implied by `lightning`), the interpreter executes
common pairs (branch + NOP, LUI + ORI/ADDIU, address + load/store) as one
dispatch.
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ Hardware, testing, and development references:

| Area | Documentation |
|---|---|
| Machine profiles | [Indigo2 IP22](docs/indigo2-ip22.md), [Indigo2 IMPACT IP28](docs/indigo2-ip28.md), and [GR2 XZ/Extreme](docs/graphics/gr2-xz-extreme.md), the [SGI O2 (IP32)](docs/o2-ip32.md), and the [SGI Octane (IP30)](docs/octane-ip30.md) with its [address map](docs/octane-ip30-address-map.md). |
| Machine profiles | [Indigo2 IP22](docs/indigo2-ip22.md), [Indigo2 IMPACT IP28](docs/indigo2-ip28.md), and [GR2 XZ/Extreme](docs/graphics/gr2-xz-extreme.md), the [SGI O2 (IP32)](docs/o2-ip32.md), the [SGI Octane (IP30)](docs/octane-ip30.md) with its [address map](docs/octane-ip30-address-map.md), and the SN0 machines: [Origin 200](docs/origin200-ip29.md), [Origin 2000](docs/origin2000-ip27.md) and [Onyx2](docs/onyx2-ip27.md). |
| Graphics and peripherals | [virtio-serial](docs/dev/virtio-serial.md) (guest byte channels, Indy/Indigo2/Octane), [REX3](docs/dev/rex3.md), [HAL2 audio](docs/dev/hal2.md), [WD33C93A SCSI](docs/dev/wd33c93a.md), [QLogic ISP1040 SCSI (Octane)](docs/dev/isp1040.md), [IOC3 PS/2 keyboard and mouse (Octane)](docs/dev/ioc3-ps2.md), [interrupt map](docs/interrupt_map.md), and [Ultra64](docs/dev/ultra64.md) / [N64 GIO specifications](docs/dev/ultra64-gio.md). |
| CPU test suite | [Suite README](cpu-tests/README.md), [current status](cpu-tests/docs/status.md), [findings](cpu-tests/docs/findings.md), [gotchas](cpu-tests/docs/gotchas.md), and [emulator support](docs/cpu-test-support.md). |
| CPU test infrastructure | [Toolchain](cpu-tests/docs/toolchain.md), [memory map](cpu-tests/docs/memory-map.md), [oracle overview](cpu-tests/docs/oracle.md), [hardware oracle](cpu-tests/oracle/README.md), [R4600 notes](cpu-tests/docs/r4600.md), and [original test plan](cpu-tests/PLAN.md). |
Expand Down
13 changes: 13 additions & 0 deletions clanker/INDEX.md
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@ Non-graphics devices: MC/MEMCFG and RAM banks, HPC3, VDMA, EEPROMs and NVRAM, PS
| Note | Kind | Title |
|---|---|---|
| [pci-layer-design.md](devices/pci-layer-design.md) | design | The PCI layer: headers change only through the bus, byte orders are per-window values, `pci/` imports no card or SCSI; the stale-run and delivery-order hazards, the SeqCst handshake, and what the first attempt got wrong |
| [sn0-node-zero-and-bridge-hosts.md](devices/sn0-node-zero-and-bridge-hosts.md) | rule | SN0 machines: a renumbered node sends node zero's cached window beyond its alias to the Hub that holds zero (and loses the ppmem fast path); a Bridge behind a Crossbow reaches the host at the widget the guest programs, gated by that port's link |
| [pci-layer-open.md](devices/pci-layer-open.md) | open | PCI layer open items: restore vs reset and the AIC-7880 chip reset, the O2's RST#, Bridge reset pins and master time-out approximations, the 2 GB window's reserved range, no external ATE SSRAM, MACE 64-bit PIO |
| [virtio-serial-design.md](devices/virtio-serial-design.md) | design | virtio-serial: one transport-neutral core, mmio in a GIO slot (IP22/24/28) and pci (IP30); threading, byte order and open items |
| [empty-gio-slot-reads-bus-error.md](devices/empty-gio-slot-reads-bus-error.md) | rule | Reads of an empty GIO slot end in a bus error (ABORT_EN); all ones made the PROM poll a phantom Newport 200 000 times headless |
Expand Down Expand Up @@ -294,6 +295,16 @@ Odyssey (VPro V6/V8/V10/V12): the Octane2/Fuel/Tezro graphics board. Modelled on
| [a-refused-command-store-answers-busy-never-spins.md](odyssey/a-refused-command-store-answers-busy-never-spins.md) | rule | RAD "thread held off" under Quake: the room check counted retired stores while the GFifo head is published lazily, so `write_command` spun on the host with no interrupts; check the ring's own view and answer busy |
| [sharegroup-warning-at-gl-exit-is-normal.md](odyssey/sharegroup-warning-at-gl-exit-is-normal.md) | rule | `odsy: attempted sharegroup operation from unbound gfxp` at GL program exit is normal: a real V10 logs it 57 times when tyrquake quits; only a sign of trouble mid-run or after a teardown |


## kona/

The InfiniteReality (KONA) graphics pipe's host interface.

| Note | Kind | Title |
|---|---|---|
| [front-end.md](kona/front-end.md) | design | The Host Interface Processor: attach interface, the command queue on `GFifo`, which accesses wait, the job seam to a back end, approximations |
| [token-census.md](kona/token-census.md) | measurement | The token families two recorded streams (the PROM to its graphics menu, IRIX to the 4Dwm desktop) send, how far a replay into `NullBackend` stays exact, and the selectors QEMU's decoder leaves unresolved |

## hostgl/

Host GL pass-through for guest GL programs (`iris-hostgl`).
Expand Down Expand Up @@ -484,3 +495,5 @@ Plans, task briefs and reviews written for agents. Each states its own status; m
| [smp-octane.md](plans/smp-octane.md) | plan | Two CPUs on the Octane: HEART MP registers and PROM/kernel slave flow, CPU core → N instances (park-request bit, CpuShared, debugger extraction), jitv2 shared pool audit and fixes, milestones and foreseen problems |
| [vpro-lines-on-the-triangle-arithmetic.md](plans/vpro-lines-on-the-triangle-arithmetic.md) | plan | VPro lines: integer pixel walk kept, attributes on the triangle's f32/0.15/12.12 arithmetic instead of f64, major-axis t; then a ring primitive for the threaded CPU unit and a REC_LINE GPU kernel; validate on octopus |
| [vnc-server-plan.md](plans/vnc-server-plan.md) | plan | Built-in VNC server: board-agnostic frame tap, damage from frame diffs, pointer steered by the HW cursor, monitor/MCP screenshot + click for agents |
| [onyx2-infinitereality.md](plans/onyx2-infinitereality.md) | plan | Plan: the Onyx2, Onyx 3000 and InfiniteReality in Iris: order of work, decisions, finish line and per-PR rules
| [kona-back-end.md](plans/kona-back-end.md) | design | Design: the InfiniteReality (KONA) board: concrete back end, pipe lock, draw-state table on a tile scheduler, geometry hand-off, ownership, steps and approximations
Loading