Apple IIのハードウエア(1)
関連記事(長いので分割)
目次
今から40年以上前の1977年に発売されたApple IIはどのようなパソコンだったのか調べてみた。
ネット上(主に海外)には色々情報が転がっているのでそれを参照しながらハードウエアの観点からみていく。
外観
以下がApple II本体である。(http://oldcomputers.net/index.htmlから引用)
記憶によれば上蓋はねじ止めしてなく上に引っ張ると外れたはず。
機能拡張の為のスロットが8つもあるのが特徴である。スロットが多い理由はパソコンに必要な機能が本体に無い為、スロットで拡張する必要が有るからだろう。(例えばプリンタを使用するためのパラレルインターフェースやモデムを接続するためのシリアルインターフェースなどが存在しない。)
これが後々、必要な機能をスロットで増設できるという柔軟な使用を可能とし、製品寿命を延ばす事となる。
CPU
CPUはモステクノロジー社の6502を約1MHzで動作させている。6502はレジスタをプログラムカウンタ(PC)以外すべて8ビット幅とし、命令数を減らして回路規模を削減する事で低価格を実現している。またモデルとなったモトローラ社の6800に比べてインデックスレジスタが2本となっており、メモリ操作が容易になっている。
メモリ
RAMは16KbitのDRAM(4116)を使用して最大48Kbyteまで本体内に実装できる。アドレスは$0000〜$BFFFにマッピングされる。初期のバージョンでは4KbitのDRAMを使用できるようにジャンパーピンが存在したが後期のバージョンでは16Kbitのみとなった。
ROMは2KByteのROMを6つで12KByteを$D000〜$FFFFにマッピングされる。また拡張スロット上にのせるメモリ空間として$C100〜$C7FF(1スロットに256byte)と全スロットが使用できる共通の空間として$C800〜$CFFFの2KByteがリザーブされている。
I/O
6502にはI/O専用空間が無い為、I/Oはメモリ空間にマッピングされる。
$C000〜$C07Fまでがシステム用で、$C080〜$C0FFまでが拡張スロット用のI/Oとなっている。
クロック
Apple IIで使用する全てのクロックは14MHzの発信器の出力から生成される。これはNTSCの信号を生成するためである。
以下が14MHzのクロックソース。図のEX-ORの出力をフリップフロップで分周してCPUやメモリやビデオのクロックを生成する。
クロックダイアグラム
Apple IIではCPUクロック(1MHz=14MHz 14クロック)を動作の選択信号として使用している。
CPUクロックがLの時はVideo及びDRAMのリフレッシュアクセス、CPUクロックがHの時はCPUまたは拡張スロットからのDMAアクセスとなる。このため、ビデオ表示やリフレッシュ時のCPU待ち時間が無くなり、システムのスループットが落ちないようになっている。
クロックダイアグラムの通りDRAMの制御信号(RAS,CAS,AX)は源発振器を分周したクロックとなっている。つまり制御信号は常に動作している。通常はCPUのメモリアクセス要求のステータスを見てDRAMへのタイミングを作るのだが6502の場合は常にオペコードやオペランドのメモリアクセスを行っているので問題とならないのだろう。CASのみCPUアドレスの上位2bit(AD15,AD14)と論理をとってバンク毎に出力を制御している。
拡張スロットからCPUにWaitを発生させてもビデオの表示は問題無く行える。
CPU周辺
CPU周辺の回路を見てみる。右上が6502、左下が拡張スロットのコネクタである。
CPUのRDYはプルアップされているのでシステムでウエイトが入る処理は存在しない。
またIRQやNMIといった割り込みもシステムでは使用されない。割り込みを使用しないと周辺ICからの応答はソフトウエアによるポーリングで判断する事になりスループットが落ちるが、そのような応答はキーボードくらいなので問題ないのだろう。
拡張スロットからApple IIのメモリなどの内部リソースをアクセスするため拡張スロットから出力されるDMAという信号が6502のアドレス、データ、コントロール信号をシステムバスから切り離し、6502のθ0入力の前段のANDにより6502のクロックをLに固定してCPUを停止させる。
このようにしてCPUカードなどがApple IIの内部リソースを利用できる。
もちろんクロックの停止や動作の切り替えはヒゲが出ないよう注意する必要がある。
リフレッシュ
Apple IIに使われいる16KBit DRAM(4116)は2mS以内に全ロウアドレス(128)に対してリフレッシュサイクルを起こす必要がある。このリフレッシュサイクルはビデオアクセスの時(θ0=L)に行われ、HSYNCやVSYNCといったビデオ同期信号を生成するカウンター回路の出力を組み合わせてロウアドレス信号(128=7bit)として利用する。
これに関しては英語版Wikipediaに
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.
とあり、Apple IIではビデオの出力と同時にDRAMのリフレッシュを行うのである。
Apple IIのビデオメモリが不連続な訳
Apple IIのビデオメモリのアドレスが不連続となってるのは、Wikipediaの項目ではCRTCを簡素化するためとなっているがそれは間違い。
*日本語版は英語版の記事の翻訳を間違って理解しているようだ。
上記のようにビデオの出力(の為のビデオメモリのリード)とリフレッシュを同時に行うためApple IIではCPUの論理的なアドレスとDRAMへの物理的なアドレスが一致していない。NTSC信号の水平同期期間は63.5μSであるので2000/63.5で約31.4ラインの間に全リフレッシュを完了させる必要がある。
したがってDRAMのロウアドレスとカラムアドレスの割り振りは
- 水平同期期間31ラインの間にリフレッシュを完了させる。
- テキスト2ページ、グラフィック2ページの4通りでリフレッシュを行う。
- 4Kbitと16KbitのDRAMを混在して使用できる。
の条件を考慮して以下のような割り振りに決まったと思われる。
ROW6 AD12 COL6 AD13 ROW5 AD1 COL5 AD6 ROW4 AD3 COL4 AD9 ROW3 AD8 COL3 AD11 ROW2 AD0 COL2 AD5 ROW1 AD2 COL1 AD4 ROW0 AD7 COL0 AD10
このようにCPUが$0001への書き込みを行うとDRAMの$0200に書き込まれる。
このDRAMのアドレスの割り振りですべてのロウアドレスをアクセスするためにビデオメモリのラインアドレスは飛び飛びになっている。そして31ラインを表示している間に全リフレッシュアドレスの読み込みを完了させる。実際にハイレゾリューショングラフィックス1ページ目を表示している時のビデオアクセスとDRAMのロウアドレスの関係は以下のようになる。(ROW ADRESSは重複を除いてソートしてある)
Line 先頭アドレス DRAM ROW ADRESS 00 $2000 0 2 4 6 16 18 20 22 32 34 36 38 48 50 52 54 01 $2400 0 2 4 6 16 18 20 22 32 34 36 38 48 50 52 54 02 $2800 0 2 4 6 16 18 20 22 32 34 36 38 48 50 52 54 03 $2C00 0 2 4 6 16 18 20 22 32 34 36 38 48 50 52 54 04 $3000 64 66 68 70 80 82 84 86 96 98 100 102 112 114 116 118 05 $3400 64 66 68 70 80 82 84 86 96 98 100 102 112 114 116 118 06 $3800 64 66 68 70 80 82 84 86 96 98 100 102 112 114 116 118 07 $3C00 64 66 68 70 80 82 84 86 96 98 100 102 112 114 116 118 08 $2080 1 3 5 7 17 19 21 23 33 35 37 39 49 51 53 55 09 $2480 1 3 5 7 17 19 21 23 33 35 37 39 49 51 53 55 10 $2880 1 3 5 7 17 19 21 23 33 35 37 39 49 51 53 55 11 $2C80 1 3 5 7 17 19 21 23 33 35 37 39 49 51 53 55 12 $3080 65 67 69 71 81 83 85 87 97 99 101 103 113 115 117 119 13 $3480 65 67 69 71 81 83 85 87 97 99 101 103 113 115 117 119 14 $3880 65 67 69 71 81 83 85 87 97 99 101 103 113 115 117 119 15 $3C00 65 67 69 71 81 83 85 87 97 99 101 103 113 115 117 119 16 $2100 8 10 12 14 24 26 28 30 40 42 44 46 56 58 60 62 17 $2500 8 10 12 14 24 26 28 30 40 42 44 46 56 58 60 62 18 $2900 8 10 12 14 24 26 28 30 40 42 44 46 56 58 60 62 19 $2D00 8 10 12 14 24 26 28 30 40 42 44 46 56 58 60 62 20 $3100 72 74 76 78 88 90 92 94 104 106 108 110 120 122 124 126 21 $3500 72 74 76 78 88 90 92 94 104 106 108 110 120 122 124 126 22 $3900 72 74 76 78 88 90 92 94 104 106 108 110 120 122 124 126 23 $3D00 72 74 76 78 88 90 92 94 104 106 108 110 120 122 124 126 24 $2180 9 11 13 15 25 27 29 31 41 43 45 47 57 59 61 63 25 $2580 9 11 13 15 25 27 29 31 41 43 45 47 57 59 61 63 26 $2980 9 11 13 15 25 27 29 31 41 43 45 47 57 59 61 63 27 $2D80 9 11 13 15 25 27 29 31 41 43 45 47 57 59 61 63 28 $3180 73 75 77 79 89 91 93 95 105 107 109 111 121 123 125 127 29 $3580 73 75 77 79 89 91 93 95 105 107 109 111 121 123 125 127 30 $3980 73 75 77 79 89 91 93 95 105 107 109 111 121 123 125 127 31 $3D80 73 75 77 79 89 91 93 95 105 107 109 111 121 123 125 127
Apple IIが31ライン表示する間にDRAMの全ロウアドレスのリードが行われリフレッシュが完了することがわかる。
ROM
ROMのチップセレクト(CS2)に拡張スロットの信号INHBが接続されている。ランゲージカードの様な拡張カードでROM空間にメモリを増設する場合は、INHBをLにする事でROMの出力をHi-Zにしてデータバスから切り離して拡張スロット上のメモリをアクセス出来るようにする。CS1とCS3はアドレスをデコードした信号で、アクセスするアドレスによりROMを選択する。
拡張スロットから基板内部のROMをディセーブルにする。