Skip to content

Doc polish, 68080 tier, dirty state tracking, dd2.4 with paging - #34

Draft
pulchart wants to merge 22 commits into
masterfrom
wip/jpu/dist-polish
Draft

Doc polish, 68080 tier, dirty state tracking, dd2.4 with paging#34
pulchart wants to merge 22 commits into
masterfrom
wip/jpu/dist-polish

Conversation

@pulchart

@pulchart pulchart commented Sep 4, 2026

Copy link
Copy Markdown
Owner
  • docs: distribution and changelog polish
  • Introduce 68080 build tier
  • Fat32 validation (free space scan) speedup (if fs is clear then skip)
  • track FAT16 and FAT32 dirty state across write cycles
  • dd-2.4 with paging of Help and Inpect

The CHECKSUMS block labelled the per-tier builds "<name>_<cpu>", which
carries no flavour: the day ptable-bundle stages full next to small, two
lines would read ptable.library_68020 with different hashes. Name them
by their archive-relative path instead, as compactflash.device does.

Also add the missing Requires: header and state the major version at
the top of WHAT'S NEW.
It uses one instruction: PERM, which permutes four bytes of a register
pair in a single opcode and replaces the rol.w/swap/rol.w sequence in
ReverseL. That macro is the endian primitive the whole handler is built
on, so MoveLE32_BE and RCopyMSDE inherit it untouched, and the
directory scan calls RCopyMSDE once per entry.

The tier assembles as -m68020 and switches to 68080 with a machine
directive around PERM alone. Assembling the whole file as -m68080 makes
vasm 2.0e rewrite sub.l #<imm16>,Dn into addiw.l #-<imm>,Dn, which the
Programmer's Reference Manual suggests (p. 11, "There is no subiw.l,
just use a negative value with addiw.l") but which inverts the carry:
SUB sets it as a borrow, ADD as a carry. Both rewrite sites landed on
the sub.l #1004-35,d0 and sub.l #4200-1036,d0 of the DOS packet
dispatch, each immediately followed by bcs.s s_unknown, so every packet
type from 1004 up returned error 209 and no file could be opened.
clr.q zeroes 8 bytes per instruction and replaces the clr.l pair in
lob_ktloop (a deleted 32-byte directory entry) and xtd_clear (a whole
new directory block), through a new CLRQ macro that keeps the 020 clr.l
pair and the 000 move.l pair. movs.b fuses the load and the sign-extend
in s_envfill. Both are LineA opcodes, so s_start enables them with
ori.w #$800,sr, and each sits inside a machine 68080 bracket like PERM.

All three are behind ifd APOLLOON, which only the 68080 build defines
and only when APOLLOON=1. Mounting the 68080 tier with them enabled
fails on an IceDrake V4 with alert $8000000A, ACPU_LineA. The alert is
not ACPU_PrivErr, so the user-mode SR write itself succeeds; the
opcodes are simply absent on that core.

Default off, so the 68080 tier uses the 020 paths and PERM.
The install step, the CPU tier table and the archive file list gain
their 68080 row, and changes.md its entry. The wording says which board
the tier needs and claims nothing about speed: on an IceDrake V4 every
68020-against-68080 difference the test harness reports falls inside
one 50 Hz tick.

Carries the release date bump and the generated files that embed it,
plus the release-notes rewording already in progress.
The scan asked "is the first free cluster known" on every free FAT
entry, though the answer changes once per scan. It is now decided once
per FAT window, and the loop counts with dbf. Roughly a third off the
loop on every tier.
@pulchart
pulchart force-pushed the wip/jpu/dist-polish branch 2 times, most recently from 938463a to ab8e03d Compare September 8, 2026 12:15
Invalidate FSInfo before writes, retain failed buffers and isolate media generations. Keep protection state consistent.
@pulchart
pulchart force-pushed the wip/jpu/dist-polish branch from ab8e03d to 9963361 Compare September 8, 2026 12:56
@pulchart pulchart changed the title docs: dist/changelog polish, 68080 tier docs: doc polish, 68080 tier, ditry state tracking Sep 8, 2026
@pulchart pulchart changed the title docs: doc polish, 68080 tier, ditry state tracking docs: doc polish, 68080 tier, dirty state tracking Sep 8, 2026
Mark managed FAT copies dirty before writes. Restore initially clean volumes after completed flushes, preserving cached FAT changes and media isolation.
ACTION_IS_FILESYSTEM, ACTION_EXAMINE_ALL_END and ACTION_FREE_DISK_FSSM had
identical bodies and now share one dispatch target, as s_unknown already does
for the unimplemented slots. The table keeps 65 entries; only those three
change, so no other action moves.

In CheckDirSpace, bcs plus beq to the same target after one subtraction is bls.
ExtendDir held the parent XLock in d0 across MakeIntRef, which reaches
R2CopyMSDE and returns d0 as the reversed MSDE_FSize of the copied entry, 0 for
a directory. The following test therefore read XL_Parent at absolute address 12.

With VBR at 0 that is the address-error vector, non-zero on a running machine,
so the root-parent case never zeroed the ".." cluster; once the vector moves it
reads arbitrary RAM. The pointer now goes on the stack.
SerializeDisk overwrote UpdateDisk's result with TRUE, so a failed write-back
still returned success through Action4200 into DP_Res1, while LatchWriteFault
had already dropped the volume to read-only with error 225. The result now
carries the write-back outcome; ErrorNum already reaches DP_Res2.
_OpenPtable's ROM-bootstrap retry returned straight from OpenLibrary, whose
CCR is undefined; exec.doc documents d0 alone. PublishViaPtable and
MarkAbsentViaPtable branch after a MOVEA, which sets no flags, so on that path
a valid base could be skipped along with CloseLibrary, or a null base called
through. The routine now sets the flags from d0, which the two callers that
already test d0 re-derive unchanged.
The 35-line help scrolled its first page away. PrintHelp now writes one
screenful at a time, sized from the console's WINDOW BOUNDS REPORT, with
Q to stop. A stream that reports no height, or that is not the same
handler as the input, gets the whole help in one Write.

The help lines end in LF alone now, as dd's error messages already do,
so a redirected help no longer carries a CR on every line.

The early "?" check branched on flags a MOVEA cannot set, so it tested
FindName's result instead of CmdLine.
The INSPECT and transfer reports ended their lines with CR+LF, so a
redirected report carried a CR on every line. They use LF alone now,
like the error messages already did, and the literals are spelled CR
and LF. The progress counter keeps its CR: it overwrites its own line.
The pager moved out of PrintHelp into PageBegin, PageLine and PageEnd;
PrintInspect calls them per line, so a long VERBOSE command list pauses
like the help does and Q stops the listing.
@pulchart pulchart changed the title docs: doc polish, 68080 tier, dirty state tracking Doc polish, 68080 tier, dirty state tracking, dd2.4 with paging Sep 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant