6502tinymachines

tinymachines

トランジスタレベルの MOS 6502 とその上に築かれたもの、崩壊を乱数バイトに変えるガイガーカウンター、波形レベルで模擬した NTSC 信号、そしてそのすべてのドキュメント。ここに書かれているものはすべて実在し、動いている。このツリーは、それらが初めてまとめて書き下ろされる場所だ。

ここには 6502 の挙動をモデル化したものは何も無い。命令デコーダも、アドレッシングモード表も、サイクル数の一覧も無い。あるのは 1725 本の配線と 3510 個のスイッチで、挙動はそれらをシミュレートした結果として現れる。

どこから読むか

シミュレータチップを動かしているものは何か、なぜレジスタの値がすべてダイから読み戻されるのか
検証独立した二つの検査と、どちらか一方では足りない理由
APIマシン全体が毎リクエストに載って移動する
チップアトラス配線が何の一部なのか
コンソール規約フレームとは合意であって、ハードウェアではない
カートリッジROM とタイルと規約を、一つのファイルに
MCP五つのツール、それぞれが一つの用件
レジストリビルダーたちと、公開が信用ではなく計測である理由

チップ自身にも分析の棚がある。ビルド時に 6502 ツリーから読み出されるもので、打ち直しではない。だからこれらのページは、元の文書からずれることができない:

チップアトラス: すべての部品に住所を命名の規約と、コンテナごとの項目。ダイデータから生成
このチップの作り繰り返し現れる回路イディオムを、スイッチ網から数え上げ
Snake を一命令ぶん深く実物の一命令をシリコンの中まで、五サイクル、回路図は実ページから取得
Lab の指摘へのエンジン側の回答halfwave レビューへの回答と、各回答を支えるテスト

hotbits については:

装置崩壊イベントから、誰かが取得できるバイトまでの道のり
ビット間隔のペアごとに 1 ビット、そして偏りが対称性で消える理由
健全性テスト三つの時間スケールに三つの層、そのうち一つが給仕を拒む
ゲートウェイ開放エンドポイントを閉じた理由と、ブラウザに見ることが許されるもの

いま動いているもの

七つのページがここにある: エクスプローラとその実測の表、 コンソールビルダーページラボAPI リファレンスエディタ、そして visual6502 アーカイブ。どれも元のサブドメインでも応答し続けている。何も止めていないからだ。

チップのデータだけは例外で、それは意図されたものだ。エクスプローラのダイ形状、実測の表、wasm バンドルは、ここにコピーされる代わりに 6502 サイト自身のディレクトリから配信される。すべて CC BY-NC-SA であり、このリポジトリはそれを再配布しない。NOTICE.md を参照。

カートリッジエディタは最後に到着し、/ja/6502/manage にいる。しばらくの間それは不可能だった。編集は bearer トークンを送るが、このオリジンからのプリフライトが Authorization ヘッダを拒んでいたので、リクエストはそもそも送信されなかった。それは決定ではなく、無かったヘッダであり、サービスの CORS ポリシーがそれを許した時 (tinymachines/6502#12、2026-08-24 修正)、このページも他と同じように移動した。レジストリを参照。

二つ目のプロジェクト

hotbits もここにある。これにより、ここは屋根を載せた 6502 サイトではなく、屋根そのものになった。放射性崩壊から得る真の乱数バイトだ: Pi につないだガイガーカウンターで、各ビットは崩壊イベント間のある間隔を次の間隔と比べて取り出す。だから偏りは補正ではなく対称性によって消える。

ページは二つあり、どちらも断言する代わりに問い合わせる。ランディングページは読み込まれた時に稼働中の装置からバイトプールを読む。毎分数十バイトずつ満ちるプールの残量は、一時間もすれば嘘になる数字だからだ。いつ測ったか、どの数字がどこから来たかはビットに書き下ろしてある。 リファレンスは装置自身の openapi.json からブラウザ内で生成され、そこに書かれたものを実際に呼び出す。だからこそ、文書化されたエンドポイントのうち四つがブラウザには読めない形で応答している、と報告できる。

ドキュメントもこのツリーの一部になった: 装置ビット健全性テストゲートウェイ。抽出と健全性テストは装置のソースから書かれ、ゲートウェイは実際に呼び出した結果から書かれている。どちらのやり方で書かれたかは、各ページ自身が述べる。

三つ目のプロジェクト

ntsc-crt は信号レベルの NTSC: コンソールとブラウン管の間のコンポジット波形を、三つのソースからエンコードし、四種類のフィルタで引き剥がし、五段の CRT モデルで表示する。6502 の仕事はチップをスイッチのレベルで模擬し、こちらは信号を模擬する。二つは NES で出会う。

ランディングページは実測報告だ。リポジトリは自らの仕様の事前計算値をすべて「テストが確認すべき主張」と宣言し、三つが実測に耐えなかった。ページはその訂正を載せ、述べる数字はすべて、固定したコミットでプロジェクト自身のスキャナとスイートとミューテーション走行を実行し直して得たものだ。ドキュメントはまだこのツリーに移っておらず、リポジトリにある。

コンポジット深掘りは、本物の実機の映像を 75 オームで終端してスコープからレベルごとに読む: 走査線、全サンプルを描いたバースト、転記済みの表の隣に置いたレベル、そして最初の終端なしキャプチャが何をよく見せていたか。ランディングが報告した彩度の差は実機ではなくプローブのせいだったと、記憶ではなく記録された実測からページが言う。

デザインはまだ無く、それは意図されたものだ。style/projects/hotbits.css はプロジェクトが動かせるすべてのレバーを、コメントアウトされた空のまま列挙している。パレットはオーナーが作るものだ。埋められたその日に両方のページが変わり、どちらも編集されない。

組み上がりつつあるコンソール

コンソールの弧にランディングができた。家の形をした実測報告だ。6502 の仕事と信号の仕事は NES で出会う。その出会いがいま、書き下ろされた計画のもとで、チップごとに端から端まで組み上げられている。節目ごとの検査は、意図ではなく記録済みのリファレンストレースだ。新しいリポジトリは公開されている:

  • nes-bus は規約の家: すべてのチップクレートが話すフレーム型とピン表を、依存ゼロで持つ。PPU と CPU とエンコーダを、写しではなく互いに対して証明するためだ。
  • 2a03 は NES の CPU。同じエンジン呼び出しを通る一族五つ目のチップで、例外リストなしにリファレンスとビット単位で一致する最初のチップでもある。最初の音も鳴らした: うちの小さなプログラムがメモリハーネス越しにチップ上で走り、リファレンス自身の同じ走行がビット単位で再生され、方形波チャネルの出力は、プログラム自身のタイマーバイトから直接来る長さの台地で振れる。梯子も組み上がった(2026-09-05): スイッチレベルの 2A03 を 6502 の記録済みピントレースとチップ対チップで比べて選んだ、10 進補正を切り離した 6502 の高速コア。チップから測り出した表の周りに書き下ろし、五つの出力符号にハーフステップごとに押さえた APU(ノイズと DMC のタイマがシフトレジスタであること、周期 ROM の一項が公開表すべてと食い違うことを見つけた)。そして RDY 込みでフレーム単位に押さえた DMA ユニット。すべて付けて実時間の約九倍。
  • 2c02 は PPU。その記録済みリファレンス走行はいま規約のピンフレームを通して走り、一本のピンの極性について嘘をつく仕込みの妨害は、走行を失敗させなければならない。
  • nes はコンソール、チップが出会う場所(2026-09-05)。基板の糊は部品ごとにデータシートへ押さえて書き下ろしと札を付け、二つの高速ラングはスイッチレベルチップ自身の分周器から測った位相で一つのマスタクロックに乗り、実時間の二倍と少し。両者の継ぎ目は、PPU の実 NMI と vblank 読み出しの競合をコンソール越しにスイッチレベルチップと突き合わせて押さえた。blargg のテスト ROM が実 CPU 付きで全体を通り、ページは合格も名指しの不合格も結果をすべて載せる。走らせたことで、記録済みトレースが覆っていなかった CPU 高速ラングの見落としが見つかり、それぞれスイッチレベルチップを並走させて食い違うまで追い、測って固定具で押さえた。

それ以来、PPU は同じページの上でだいぶ先へ進んだ。厄介な隅、スプライト 0、vblank 読み出しレース、OAM 破損は、リファレンスが何も知らずに再生する専用のレジスタプログラムで一つずつ留められた。ドット単位の高速 PPU はいま、16.639 ms の周期に対して 1 ミリ秒を大きく下回る時間で 1 フレームを描き、三つのワールドでスイッチレベルのチップとドット単位で一致する。そのシーケンサは二つ目のモデルではなく、スイッチから測り出した表だ。そしてエンジンの相違が二つ、チップによって見つかり halfphi で直った(0.1.5 のレール衝突ホールド、0.1.6 のネットリストごとの電荷規則)。その後、PPU の二つの記録済みリファレンス走行は例外を一切持たずに再生する: 一族が未定義の電源投入状態と読んでいたラッチは、シリコンではなくエンジンの規則だった。6502 のサイトはいまそのエンジンを配信し、エンジンの記録がそれを載せている。

五つ目のチップは、エンジンが初版から抱えていた問いも決着させた: レイアウトのプルと外部駆動が同じグループで争うとき、どちらへ解決するか。四つのチップはそのグループを一度も作らなかったが、2A03 のセットオーバーフロー鎖は電源投入時に三つ作り、リファレンスは低へ解決する。halfphi 0.1.3 はいまそれに一致し、入れ替えが他のどのチップでも観測不能であることも証明済みだ。そして信号の側は実シリコンに出会った: ntsc のページには、実機のオシロスコープ生記録からデコードしたフレームと、パイプライン自身の合成に対して採点された最初の色が載っている。これらのドキュメントは、このツリーに移るまで各リポジトリにある。

まだここに無いもの

このツリーは、クローンしなければ読めなかった四つのリポジトリの README から移されつつある。移動済み: シミュレータ、検証、API、アトラス、コンソール規約、カートリッジ、MCP、レジストリ。

api.html も一緒に到着した。ビルド時に 6502 リポジトリから読み出されて /ja/6502/api に描画される。打ち直しではない。そして存在を断言する代わりに、稼働中のサービスと自分を突き合わせる。そのチェックは書かれたその瞬間に空隙を見つけた: 文書に記述された三つのルートは上流でマージ済みだがデプロイされておらず、ページはそれらを名指しする。

サービスも移動した。2026-08-24 に決着し、それまで移動できなかった理由は残しておく価値がある: 静的なルートパスが一つだけで、そのためスキーマはどこでも servers: /api を主張していた。apex でそのスキーマを読んだクライアントは、このサイト自身の API を呼んで、別のサービスから答えを受け取ることになっただろう。いまサービスは、リクエストが入ってきた扉をリクエストごとに名乗る。tinymachines.ai/6502/api/openapi.json/6502/api と言い、サブドメインの写しは今も /api と言い、それぞれが読まれた場所で真実だ。一つのプロセスに複数の正面玄関、どの扉も正直。このサイトのデプロイは毎回、両方の主張を外側から検査し直す。正準のアドレスは、切り替えがリダイレクトになるまでサブドメインのままだ。