投稿

2026の投稿を表示しています

ATARI2600 プログラミングに関する覚書@ハードウェア編

 ATARI2600向けのプログラムを書くには、とにかくハードを理解することが一番の近道です。 メモリマップとか確かにそうなんですが、なんというかそういう次元のハードじゃないです。 ハードウェアをプログラムで補完することでハードのコストを極限まで削った…まさにそんな言葉がしっくりくる構成です。 なので、いかにハードとソフトが一心同体になれるかが、atari2600の表現の限界を広げてくれるというものになっています。 1:ハードウェアのスペック 簡単にCPUとかメモリについて。以下のような構成です。 CPU:6502のカスタムCPUである6507を搭載。メモリ空間8kbyte。 RAM:6532 RIOTに入っている128Byte。ゼロページの末尾$0080から$00FFまで。 ROM:$F000 ~ $FFFFまで。 Clock:NTSC版は1.19Mhz。PAL版は変わるそう。 解像度は160x192。横のほうが小さいが、4:3なのでドットが正方形ではない。 カラーは128色。 Spritesは2枚単色(素直なプログラムをした場合)。 Missilleというオブジェクトスプライトが2つ。単色。 Ballというオブジェクトが一つ。単色。 BGは40Pixcel(なおメモリは2.5Byte?) 背景カラー設定可能。 1bitモノラルサウンドを2チャンネル搭載。4bit段階の音量調整機能あり。 8bitのタイマーを搭載。設定した時間をカウントできる コントローラーを2つ接続可能 オリジナルは6つのスイッチがついており、レベル設定、リセットなどがプログラム側の設定でスイッチに付与できる。 RF出力。アメリカのアナログ信号なので、日本のテレビでは受信できない。 はい、貧弱ですね。 特に注目する点として、ただでさえ少ないメモリ空間がI/O系をつなぐ関係でさらに削られ、ROMに素直にアクセスできるアドレスが4Kbyteになっています。 ただ、実はカートリッジのピンにはA0 ~ A12の全PINが出ているため、きちんと回路を解析すると使えるアドレスが見つかるかもしれません。(ただ、ミラーリングで結局だめかもしれない。) また、8kbyteなのにROM空間がF000 ~ となっていることに違和感を覚える方もいらっしゃると思いますが、これは6502のリセット・割り込みベクタ機...