Apple IIのハードウエア(1)

関連記事(長いので分割)

Apple IIのハードウエア(2)

Apple IIのハードウエア(3)

Apple IIのハードウエア(4)

Apple IIのハードウエア(5)

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

目次

 今から40年以上前の1977年に発売されたApple IIはどのようなパソコンだったのか調べてみた。

ネット上(主に海外)には色々情報が転がっているのでそれを参照しながらハードウエアの観点からみていく。

外観

以下がApple II本体である。(http://oldcomputers.net/index.htmlから引用)

記憶によれば上蓋はねじ止めしてなく上に引っ張ると外れたはず。

f:id:k_igrs:20090823153038j:plain

機能拡張の為のスロットが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やメモリやビデオのクロックを生成する。

f:id:k_igrs:20180224081412p:plain

クロックダイアグラム

f:id:k_igrs:20180224082338p:plain

Apple IIではCPUクロック(1MHz=14MHz 14クロック)を動作の選択信号として使用している。

CPUクロックがLの時はVideo及びDRAMのリフレッシュアクセス、CPUクロックがHの時はCPUまたは拡張スロットからのDMAアクセスとなる。このため、ビデオ表示やリフレッシュ時のCPU待ち時間が無くなり、システムのスループットが落ちないようになっている。

f:id:k_igrs:20180224082957p:plain

クロックダイアグラムの通りDRAMの制御信号(RAS,CAS,AX)は源発振器を分周したクロックとなっている。つまり制御信号は常に動作している。通常はCPUのメモリアクセス要求のステータスを見てDRAMへのタイミングを作るのだが6502の場合は常にオペコードやオペランドのメモリアクセスを行っているので問題とならないのだろう。CASのみCPUアドレスの上位2bit(AD15,AD14)と論理をとってバンク毎に出力を制御している。

 

拡張スロットからCPUにWaitを発生させてもビデオの表示は問題無く行える。

f:id:k_igrs:20180318010355p:plain

CPU周辺

CPU周辺の回路を見てみる。右上が6502、左下が拡張スロットのコネクタである。

CPUのRDYはプルアップされているのでシステムでウエイトが入る処理は存在しない。

またIRQやNMIといった割り込みもシステムでは使用されない。割り込みを使用しないと周辺ICからの応答はソフトウエアによるポーリングで判断する事になりスループットが落ちるが、そのような応答はキーボードくらいなので問題ないのだろう。

拡張スロットからApple IIのメモリなどの内部リソースをアクセスするため拡張スロットから出力されるDMAという信号が6502のアドレス、データ、コントロール信号をシステムバスから切り離し、6502のθ0入力の前段のANDにより6502のクロックをLに固定してCPUを停止させる。

このようにしてCPUカードなどがApple IIの内部リソースを利用できる。

もちろんクロックの停止や動作の切り替えはヒゲが出ないよう注意する必要がある。

f:id:k_igrs:20180224084529p:plain

リフレッシュ

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を選択する。

f:id:k_igrs:20180224131045p:plain

拡張スロットから基板内部のROMをディセーブルにする。

f:id:k_igrs:20200404160002j:plain