見出し画像

Apple][ - カセットの読み込みとメモリレイアウト

Apple][用の市販プログラムには、"> LOAD 16K" とか "] LOAD 16K" と書いてあります。最初のは整数BASICを起動した状態で、Loadコマンドでテープを読み込んで、RUNしてねという意味です。次のはプロンプトが違うので、まず10K BASICを起動しておいてから、Loadしてということになります。後ろに書いてある16Kは、16K以上のメモリが必要です。という意味です。

整数BASICで書かれているゲームのカセット
APPLESOFTで書かれているゲームのカセット

カセットに入った機械語のプログラムを読み込んで実行するには、機械語モニタの状態で、

* 2000.2200R

などとやってメモリにプログラムを読み込んでから、

* 2000G

と大抵は先頭番地から実行します(ちなみに機械語モニタでは、数字はすべて16進数です。10進数は使えません^^;)。

機械語で書かれたゲームの入ったカセット

なお機械語モニタのコマンドはここにまとまっています。

自分で作ったプログラムであれば、このような使い方でなんの問題もありません。ところが市販品のプログラムの中には、カセットに"200.6000R"とか書いてあることがあります(これはSUPERINVADERの場合)。実際に、この通りに打ち込んでテープを読み込ませるとオープニング画面が出てきて、コマンドを打ち込むこと無くゲームが始まります。果たしてどんなことが起こっているのか、調べてみます。

Apple][のメモリマップのレイアウトは以下のようになっています。

テープから読み込んだデータはコマンドで指定した通り$200から格納されていきます。そのうち$400に達するので、読み込んだデータはテキストVRAMに格納され、これがオープニング画面として表示されます。さらに$6000までテープから読み込んだデータで埋められることになります。

さて、テープからの読み込みを終えたので、機械語モニタは次のコマンドを確認するためにキーボード・バッファの$200からのメモリを読み出します。あれ?ここには、たった今、読み込んだテープからのデータが入っています。つまりテープのデータの中に次のコマンドがあり、それが実行されるのです。

こうして、読み込んだデータの「どこかにある」プログラムが実行され($200からのメモリには800G+CTRL-Mとかの文字が入っているはずです)、やはりテープから読み込まれた高解像度グラフィックスのオープニング画面(こちらは$2000からのメモリ内容)が表示されてゲームが始まるという仕組みです。

テープから読み込むだけでコマンドを打つこと無くゲームが始められるので、人にやさしい設計ではあるのですが、単純に読み込んだデータを書き出すことによるコピーを防ぐことにもなっています。メモリに読み込むだけのデータであれば、キーバッファが潰されないように異なるアドレスに読み込んで書き出せばコピーできてしまうのですが、自動的に実行される「読み込んだプログラム」が、さらに後続のデータを読み出して動作するようにすれば、中身をちゃんと調べなければ、最初の後続を読み出すプログムしかコピーできないことになり、少しは賢いコピー防止になります。

他にも最初にオリジナルの「テープ読み込みプログラム」を読み込み、このプログラムを実行して同じテープから後続のデータを読み込むことにして、この後続のデータには、少し細工がしてあって、モニタから直接読み込んでも正しいデータにはならないというものもあった記憶があります。初歩の暗号ですね。

このようにテープの時代からプログラムを売る人とコピーする人との戦いは始まっていたのです。ただテープは痛むので、結局、性能の良いカセットデッキでアナログ的にバックアップをとるという方法で対処していました。解析するほうがよほど面倒です(ここまでに書いたことをどうやって調べたかは「秘密」です。楽しい小技がたくさんあるのですけどね)。

これがディスクの時代になると、さらに進化して、巧妙なトリックを駆使するようになり、戦いはエスカレートしていきます。そのあたりは、DISK][の説明が終わってからですね。

[おまけ] 懐かしのテープたち


ヘッダ写真はApple][用スペースインベーダーのオープニング画面の一部。

この記事が気に入ったらサポートをしてみませんか?