Act on special control characters in the attribute area - #17
Merged
Merged
Conversation
vraminfo's READ STATUS section: a pair in a row's attribute area whose position byte is $E0 or $60 is a special control character, and its value byte carries I (interrupt), V (display stop) and D (DMA stop). VRAMTEST G showed no effect at all. The page puts no limit on which slot holds it — the attribute count section says 「20 以上は指定禁止。特殊制御文字も含む」, so it is one of the row's attribute slots, told apart by a position byte that names column 96, a column that cannot exist — so every slot is scanned. M88 looks at the last slot only, with the loop over all of them left in as `#if 0 // XXX: 要検証`. V stops the display below the row it sits in; D stops the DMA there, which also means the terminal count is never reached and the rows that were not fetched cost the V1S CPU nothing. I is deliberately not implemented: the page tried it on hardware and 「何もおきません」, with status N and E staying 0. The pair itself is no longer taken as an attribute value — until now its control byte shifted every attribute in the row by one slot. The display stop is derived from the DMA buffer, which the save state already carries, so the format is unchanged; it is recomputed on load. Booting all 1,103 disks for 60 emulated seconds each gives a pixel-identical screen to 1.0.5 everywhere: nothing in the collection writes $E0/$60 as an attribute position. The macOS regression suite is 20/20. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EtarYVwQy1YVfWGChE5eg4
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
VRAMTEST の差分 #5 (
docs/develop/VRAMTEST.md§5.1)。保留していた特殊制御文字を、vraminfo の表どおりに実装します。ページの読み直しで決まったこと
$E0/$60(bit7 は LC なのでどちらも桁 96 = 存在しない桁) であることだけが目印。何番目の組かの限定はページのどこにもないので全組を走査します。M88 が最後の組だけを見ているのは、全組を走査する版を#if 0 // XXX: 要検証で残していることからも分かるとおり未検証の決め打ちです。効果
セーブステートは形式を変えていません。表示停止は DMA バッファから導けるので、ロード時に再計算します。
ページの観測との食い違い (未解決)
ページは「V=1 で画面が点滅、D=1 で画面が消える」と書きますが、表どおりに実装すると V が静止画・D が 2 フレーム周期の点滅になり、2 つの言葉が逆の bit に出ます。D が入れ替わるのはフレーム途中で DMA が止まると次フレームが途中の位置から取り込むためで、#11 (DMA 6000 バイト) と同じ実機確認済みの仕組みです。「表示停止が取り込みも止めるのか」をページが書いていないので、根拠のない側には寄せず表のとおりにしました。詳細は
VRAMTEST.md§5.1。検証
$E0/$60を書くゲームは無し。🤖 Generated with Claude Code
https://claude.ai/code/session_01EtarYVwQy1YVfWGChE5eg4