Apple IIのハードウエア番外編

Wikipedia日本語版のApple IIの記述には誤りが多いのでここでテクニカルなものについて書いておく。

また、ゲームI/Oという2つのA/Dコンバータを備えた入力端子が一系統、標準で実装されており 、 

パドル入力は4つ。以下がAPPLE IIのゲームI/Oと呼ばれるコネクタで、PDL0-3端子に150KΩの可変抵抗を接続できる。

f:id:k_igrs:20200328104459j:plain

 またゲームI/Oのパドル入力はA/Dコンバータによるアナログ入力は行なっていない。

基板上の558タイマーのパルス幅を読み取ることで可変抵抗の抵抗値をソフトウエアで判断している。Wikipedia555 タイマーにも記述あり。

実際の回路は

f:id:k_igrs:20200328105932j:plain

となっておりRに150KΩの可変抵抗が接続され、RC回路の時定数に応じて出力のパルス幅が変化する。

抵抗値が小さいと短いパルス幅、大きいと長いパルス幅になるため、それ(下記PIN 1波形のHigh幅)をソフトウエアで読み取る。

f:id:k_igrs:20200328110547j:plain

APPLE IIのパドルの抵抗値を読み取るROM内ルーチン。

   LDA $C070 #トリガを1パルス出力
   LDY #00   #ループカウンタYレジスタを初期化
   NOP       #トリガ入力後タイマーが安定するまで待つ
   NOP
L1 LDA $C064,X #タイマーが出力するパルスの読み取り(Xには読み取るパドル入力の番号を入れる)
   BPL L2    #パルス(Bit7)が[L]になったらループを終了する
   INY       #カウンタを一つインクリメントする
   BNE L1    #カウンタがオーバーフローしていなければ読み取りを続ける
   DEY       #カウント値の調整(値をFFに)する
L2 RTS       #読み取り終了

 このパルス判定のようなルーチンは6502CPUでの一般的なテクニックのようだ。

 

また、ビデオメモリの実装アドレスは連続しておらず、1ラスタごとに先頭アドレスは二進数の桁上がりで切りの良いアドレスに配置され、飛び石状に配置されている。これは、CRTCの実装を容易なものとした際の副作用である(手抜きとも言える)が、二進数で演算を行うCPUがビデオメモリ上の参照アドレスを演算する際にも(二進数で)切りの良い数字で桁合わせが可能となる(桁合わせの際に、数ステートの命令を省略できうる)というメリットを生じた。  

 この記述は英語版の記事を誤解してるのだろう。おそらく英語版の

This method had no cost overhead to have software calculate or look up the address of the required scanline and avoided the need for significant extra hardware. 

の "need for significant extra hardware. "をビデオ回路だと解釈したのだろうが、英語版では"as described above"と書いており、そこをみれば

This arrangement simultaneously eliminated the need for a separate refresh circuit for the DRAM chips, as the video transfer accessed each row of the dynamic memory within the timeout period. In addition, it did not require separate RAM chips for the video RAM, while the PET and TRS-80 had SRAMs for the video. 

 と書いてあり、簡素化されたのはリフレッシュ回路やビデオ専用メモリとわかる。

"the refresh of the dynamic RAM as a side effect"のside effectは薬の副作用みたいなネガティブな意味ではなく、ここでは余禄や一石二鳥のようなポジディブな意味として記述している。

英語版ではビデオアドレスは複雑化したがソフトウエアでのビデオアドレス算出の高速化と(リフレッシュ回路やビデオ専用メモリなどの)ハードウエアの追加を回避したといっていて、日本語版では原因と結果が逆になっている。

 

なお、ビデオメモリが1バイトあたり7ピクセルとなっているのは、本体のマスタークロックである14MHzの分周に処理を合わせるためで、

Apple IIのハードウエア(3)で述べたように連続で処理するビデオデータの読み出しとビデオ出力が一致しないため7bitとなっているだけで分周に処理を合わせているためではない。

コンピュータの一般的なテクニックとして入力と出力が一致しない対処法としてバッファを用いて入力と出力の調停を行い不一致を吸収する手法を用いる。シリアルインターフェースが典型的である。

実際にこの手法を使えば8bit全てのデータを利用することは可能で、分周の処理とは関係がない。

 

8つある拡張スロットは0番と7番が特殊な仕様になっており、スロット0番は内蔵のROMエリアと切り替えができ、 

Apple IIのハードウエア(1)で述べたとおり、内蔵ROMの切り離しは全ての拡張スロット上にあるINHB(正確にはINHの上にー)を[L]にすることで行い、0番とその他のスロットの区別は無い。

以下がROM切替の概念図

f:id:k_igrs:20200328122658j:plain

 

 RAMに置き換えて64KBのメモリエリアを全てRAMにする場合に使用された。

 C000-CFFFまでのエリアはAPPLE IIのシステムに利用されるためメモリとして使用できない。16KByte RAMカードは12KByte +4KByteのバンク切替で使用される。

f:id:k_igrs:20200328123130j:plain