Files
Sylpheed/tools/ppc-manual/forms/D.md
MechaCat02 10dc260f0c chore(tools): adopt the PPC manual and a canary launcher that works anywhere
CONSOLIDATION.md Phase 6. Both lived untracked in the project root -- on one
disk, backed up by nothing.

  tools/ppc-manual/   393 files, 3.7 MB. 455 instructions, 350 family pages,
                      598 mnemonics resolvable through index.json, plus the
                      generator that produced them.
  tools/run-canary.sh the oracle launcher.

🔴 THE LAUNCHER WAS BROKEN IN TWO WAYS AND IS REWRITTEN, not copied:

  * it pointed at `xenia-rs/sylpheed.iso`, a SYMLINK. Wine cannot resolve one
    and says "path invalid", which reads as a corrupt image rather than a path
    problem -- it has cost a session before. It now points at the real file and
    warns if handed a symlink.
  * it hardcoded one machine's absolute paths, and named `xenia-rs`, which this
    consolidation retires. Now derived from the script's own location, with
    SYLPH_CANARY_BIN / SYLPH_ISO overrides and a check that each exists.

The standing constraints are in its header where someone will read them: one
emulator at a time, Canary runs MUTED, and never judge a crash or a hang from
a Bash-launched run -- a SIGKILL that looked like the binary was the editor's
process supervisor.

⚠️ The manual's GENERATOR reads the xenia-rs source tree, which is going away.
Its decoder now lives here as crates/sylpheed-ppc, so the generator must be
repointed before it is run again. Recorded in the README rather than left for
someone to discover; the manual's content is checked in and regenerates from
nothing implicitly.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-13 21:18:00 +02:00

3.7 KiB
Raw Blame History

Form D — D — Displacement (load/store and immediate ALU)

Bit Layout

Bits Field Meaning
05 OPCD primary opcode
610 RT destination GPR (or RS when storing)
1115 RA source GPR (0 ⇒ literal 0 for RA0 forms)
1631 D/SI/UI 16-bit signed or unsigned immediate

Instructions Using This Form

Mnemonic Opcode Group Description
tdi 0x08000000 branch Trap Doubleword Immediate
twi 0x0c000000 branch Trap Word Immediate
mulli 0x1c000000 integer Multiply Low Immediate
subficx 0x20000000 integer Subtract From Immediate Carrying
cmpli 0x28000000 integer Compare Logical Immediate
cmpi 0x2c000000 integer Compare Immediate
addic 0x30000000 integer Add Immediate Carrying
addic. 0x34000000 integer Add Immediate Carrying and Record
addi 0x38000000 integer Add Immediate
addis 0x3c000000 integer Add Immediate Shifted
ori 0x60000000 integer OR Immediate
oris 0x64000000 integer OR Immediate Shifted
xori 0x68000000 integer XOR Immediate
xoris 0x6c000000 integer XOR Immediate Shifted
andi. 0x70000000 integer AND Immediate
andis. 0x74000000 integer AND Immediate Shifted
lwz 0x80000000 memory Load Word and Zero
lwzu 0x84000000 memory Load Word and Zero with Update
lbz 0x88000000 memory Load Byte and Zero
lbzu 0x8c000000 memory Load Byte and Zero with Update
stw 0x90000000 memory Store Word
stwu 0x94000000 memory Store Word with Update
stb 0x98000000 memory Store Byte
stbu 0x9c000000 memory Store Byte with Update
lhz 0xa0000000 memory Load Half Word and Zero
lhzu 0xa4000000 memory Load Half Word and Zero with Update
lha 0xa8000000 memory Load Half Word Algebraic
lhau 0xac000000 memory Load Half Word Algebraic with Update
sth 0xb0000000 memory Store Half Word
sthu 0xb4000000 memory Store Half Word with Update
lmw 0xb8000000 memory Load Multiple Word
stmw 0xbc000000 memory Store Multiple Word
lfs 0xc0000000 memory Load Floating-Point Single
lfsu 0xc4000000 memory Load Floating-Point Single with Update
lfd 0xc8000000 memory Load Floating-Point Double
lfdu 0xcc000000 memory Load Floating-Point Double with Update
stfs 0xd0000000 memory Store Floating-Point Single
stfsu 0xd4000000 memory Store Floating-Point Single with Update
stfd 0xd8000000 memory Store Floating-Point Double
stfdu 0xdc000000 memory Store Floating-Point Double with Update