Apple][のアドレス配置 - 3:1の法則
6502が要求するアドレス配置ですが、ハードウェア上の制約に関しては、
0ページ(RAM) - 特別なアドレッシングモードで使われる
1ページ(RAM) - スタックポインタ
FFページ(ROM) - リセットや割り込みの際に実行されるプログラムが置かれる
くらいです。基本RAMが下でROMが上になります(80系は逆ですね)。68系特有の話としてI/Oにもアドレスを割り当てなければなりません。
Apple][の場合、下から全体の3/4をRAMに割り当て、残りの1/4を上から3/4をROM、1/4をI/Oに割り当てました。
$0000-$BFFF 48K RAM
$C000-$CFFF 4K I/O
$D000-$FFFF 12K ROM
RAMはDRAMで(初期の例外を除けば)16K×1bitのRAM(4116)が1列に8個ずつ合計3列が並びます(なお79年当時、1列16KBで約2万円しました)。すべてソケットが用意されているので、自分で差し込んで増設することができました。
ROMは2K×8bitのマスクROMが1列に6個ありました。左から右にアドレスが下がっていくのですが、もっとも左に2Kモニタ、そこから3個分に6K BASICやミニアセンラなどが入っており、残り2つは空いていました。ここにもソケットが使われており、自分で入れ替えることも可能です。一番右のソケットにはProgrammer's Aid #1 ROMと呼ばれる便利なサブルーチンが入ったROMが売られており、これを入れている人も多かったです。これがPLUSになると、モニタ以外の5個分に10K BASICが入るので、全部のソケットが埋まります。
Appleはともかく当時は64Kのアドレス空間をすべて使うことは、あまり考えられていなかったので、アドレスデコード回路が手抜きで、同じRAMやROMが複数のアドレスから見えるマイコンボードも、それなりにありました。
他のパソコンでは、大雑把に下半分と上半分をRAMとROMに割り当てているケースが多かったような気もします。BASICだけで16Kを超えることが多かったですしね。後のMSXや、さらに後のEMM/EMSでも16Kが単位だったので、ちょうどよいサイズなんでしょうか。86の時代には少し窮屈でしたけど。
さて戻って、Apple][のI/Oに関しては、
$C000-$C0FF I/Oポート
$C100-$C1FF SLOT#1
$C200-$C2FF SLOT#2
(SLOT#3~#7も同様)
$C800-$CFFF SLOT共通
が予約されていました。拡張スロットには256バイトずつ割り当ててあり、それぞれのカードには小さなROMが積まれていて、ここにファームウェアを置きます。PR#nで$Cn00(nはスロット番号である1~7)からのコードが実行されてデバイスが初期化されます。ここに置かれるコードは実アドレスが挿されるカードの位置でアドレスが変わるので、リロケータブルにしておく必要があります。
ファームが256バイトで収まらない場合は、$C800からの2Kバイトを利用することが出来ます。$Cn00からのアドレスをアクセスすると、そのカードは$C800からのアドレスを利用することが出来るようになります。他のカードが同様の手順でアクセスできるようになるまでは使い続けることが出来ます。これをあえて無効にするためには$CFFFにアクセスします。なかなか巧妙な仕組みで、最初のバンク切り替え機構なのかもしれません。
なお $C000からのアドレスは、$C000-$C07F がボード上のI/Oが割り当てられており、
$C000 押されているキーボードのコード
$C010 キーボードのストローブ信号
$C030 スピーカ
などが代表的なものです(キーボードの読み取り方は別の機会に)。
$C080-$C0FF は16バイトずつ拡張スロットで使うI/Oに割り当てて使うようになっていました($Cn00からのアドレスはROMなどで使っていますから、ポートには別のI/Oのアドレスが必要です)。
ところで初期のApple][基板は電源投入時にリセット信号が出なくて、最初にリセットキーを押す必要があったようです。次の基板から「オートリセット」機能が追加され電源投入時にちゃんとリセットされてプロンプトが出るようになりました。言葉的に似ていて間違いやすいのが「オートスタート」で、こちらはリセット時にマシン語のプロンプト("*")ではなく、ROMに積まれている(6Kのときも10Kのときもある)BASICのプロンプト(">"または"]")がでることです。無印Apple][でもオートスタートROMと呼ばれるモニタROMに入れ替えることで、これが出来るようになりました(問題は、この時にDOSが切り離されてしまうので、オマジナイを1行実行する必要があって恩恵は少なかったです)。
他のマイコンのファームを書くのに用意した、拡張スロットに挿すEPROMライタですが、元からApple][に積まれていたROMを書き換えるのにも使っていました。最初はオートスタートROMに入れ替えたり、BASICのバグ修正版をいれたりしていたのですが、結局、全部入れ替えて無印なのに10KBASICなApple][にしてしまいました(入れ替える時に、一度、うっかり向きを間違えてROM中央の透明なガラスの下からオレンジ色の光が見えたことは秘密です)。
無印Apple][とPLUS(J-PLUS)では以上が基本ですが、LanguageSystemと呼ばれる拡張カードを使うようになって、ROMに割り当てられたアドレスにもRAMを使うことが出来るようになりました。さらにIIe以降では、オンボードデバイスも増えてアドレス空間も広げられたので、混沌の世界に入ります。
さてRAMの一部はVRAMなどに使われていて、プログラムから使える場所は限られているのですが、そちらはいずれ。
Apple IIのハードウエア(1) (再登場!)
ヘッダ写真は、MakerFaireBayArea2018で見つけたApple][のチップが載っていない状態の基板。キーボード側は『左』になりますが、こちらが手前なので「下」と呼んでいます。そして『上』が「左」ですね。ややこしくてスイマセン。
この記事が気に入ったらサポートをしてみませんか?